graview 0.1.61 → 0.1.63
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.
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -7
- package/dist/index.js.map +1 -1
- package/dist/preview/{chunk.JEQO24GS.js → chunk.24HNOLUS.js} +1 -1
- package/dist/preview/chunk.25CQCCLN.js +1 -0
- package/dist/preview/{chunk.C634A6ZC.js → chunk.26H33GJC.js} +1 -1
- package/dist/preview/chunk.2F4AZZQR.js +1 -0
- package/dist/preview/chunk.2KIWGQXC.js +2 -0
- package/dist/preview/{chunk.IA5ZBMRD.js → chunk.2PJ6STKA.js} +1 -1
- package/dist/preview/{chunk.7LZ6JDJA.js → chunk.2RASWDMQ.js} +2 -2
- package/dist/preview/chunk.33XNYHI6.js +1 -0
- package/dist/preview/{chunk.SJALH7IX.js → chunk.34DRUCH2.js} +1 -1
- package/dist/preview/{chunk.SKQO467Y.js → chunk.36OE6RKG.js} +1 -1
- package/dist/preview/{chunk.3SMNWZ3M.js → chunk.37FLKAVZ.js} +1 -1
- package/dist/preview/chunk.3JCHJLH6.js +1 -0
- package/dist/preview/chunk.3L37FY3G.js +4 -0
- package/dist/preview/chunk.3OQ6S6H4.js +1 -0
- package/dist/preview/chunk.47QEWSSE.js +1 -0
- package/dist/preview/{chunk.W5TVQYAI.js → chunk.4DAKQXDG.js} +1 -1
- package/dist/preview/{chunk.BI6DS3PZ.js → chunk.4EXC26LI.js} +1 -1
- package/dist/preview/{chunk.ZKAZA6UJ.js → chunk.4MEQUUG4.js} +1 -1
- package/dist/preview/{chunk.LA2DMHZC.js → chunk.4TH3CGAZ.js} +1 -1
- package/dist/preview/{chunk.5POG3G2C.js → chunk.57YDGGJK.js} +1 -1
- package/dist/preview/chunk.5GC4VAHU.js +1 -0
- package/dist/preview/{chunk.XZWXDQ3N.js → chunk.5QXQ7PBI.js} +1 -1
- package/dist/preview/chunk.6CSHRMJC.js +1 -0
- package/dist/preview/chunk.6HKWAHPT.js +1 -0
- package/dist/preview/{chunk.ULHB3RYK.js → chunk.6XHPBJ5F.js} +1 -1
- package/dist/preview/chunk.6YK5E7ZQ.js +4 -0
- package/dist/preview/{chunk.UACSX64H.js → chunk.6Z2GHQQH.js} +3 -3
- package/dist/preview/chunk.72YXFJKC.js +2 -0
- package/dist/preview/{chunk.XFSGB6EU.js → chunk.735AFUP5.js} +1 -1
- package/dist/preview/chunk.75GENXGP.js +1 -0
- package/dist/preview/{chunk.SBLYBRDU.js → chunk.A2R53GWF.js} +1 -1
- package/dist/preview/{chunk.7R727IKU.js → chunk.AHPYNDVA.js} +2 -2
- package/dist/preview/chunk.ATDIDPKZ.js +1 -0
- package/dist/preview/{chunk.HQNE4I4M.js → chunk.AW26EETU.js} +1 -1
- package/dist/preview/chunk.AWUO3M5D.js +1 -0
- package/dist/preview/chunk.B46UZHGW.js +1 -0
- package/dist/preview/{chunk.WS7LAT4Z.js → chunk.B5PJCYBU.js} +1 -1
- package/dist/preview/chunk.BF3EZCG3.js +1 -0
- package/dist/preview/chunk.BIDL7GQD.js +0 -0
- package/dist/preview/chunk.BKQICGFW.js +1 -0
- package/dist/preview/{chunk.6HZY5NRX.js → chunk.BN7C5ZYX.js} +1 -1
- package/dist/preview/chunk.BQM3YAMR.js +35 -0
- package/dist/preview/chunk.C65EHQ7V.js +1 -0
- package/dist/preview/{chunk.3FUUYYR5.js → chunk.CAXILB7K.js} +1 -1
- package/dist/preview/{chunk.NUEPFPRA.js → chunk.CCQMDZHO.js} +1 -1
- package/dist/preview/{chunk.HOQMD6WQ.js → chunk.CGK2PY76.js} +14 -14
- package/dist/preview/chunk.CI4RZL4Z.js +1 -0
- package/dist/preview/chunk.CXDGE5ZS.js +1 -0
- package/dist/preview/chunk.CYTTZOYL.js +25 -0
- package/dist/preview/chunk.D5LOTCBU.js +3 -0
- package/dist/preview/chunk.DBFJVVWF.js +1 -0
- package/dist/preview/{chunk.A2ZQASQV.js → chunk.DDFRFSVN.js} +1 -1
- package/dist/preview/{chunk.UXOBUK3C.js → chunk.DIFIHNR3.js} +1 -1
- package/dist/preview/chunk.DVSTLVIH.js +15 -0
- package/dist/preview/chunk.DWK3GXRR.js +1 -0
- package/dist/preview/{chunk.2QFKNTAZ.js → chunk.DZSZUX34.js} +1 -1
- package/dist/preview/chunk.E3XJMO7Q.js +1 -0
- package/dist/preview/chunk.EJ2WE764.js +18 -0
- package/dist/preview/{chunk.SAYAFOF6.js → chunk.EJ4MSVX2.js} +1 -1
- package/dist/preview/chunk.ERPILTRY.js +1 -0
- package/dist/preview/chunk.FFXBDOKA.js +1 -0
- package/dist/preview/chunk.FGDGTES4.js +20 -0
- package/dist/preview/chunk.FNVGNISQ.js +3 -0
- package/dist/preview/chunk.FXCQJPN4.js +6 -0
- package/dist/preview/chunk.G2JAYG2Z.js +1 -0
- package/dist/preview/chunk.GHN62OMG.js +32 -0
- package/dist/preview/{chunk.F4VHCQNP.js → chunk.H5SN46VK.js} +1 -1
- package/dist/preview/{chunk.2XSIJH5J.js → chunk.H7AH3IW4.js} +1 -1
- package/dist/preview/{chunk.GI6XQF5X.js → chunk.HMMK7LCL.js} +1 -1
- package/dist/preview/{chunk.WICFQROI.js → chunk.HOFATBGD.js} +1 -1
- package/dist/preview/{chunk.PJ5AO7CK.js → chunk.HRNNRA2I.js} +1 -1
- package/dist/preview/{chunk.E7UDVC4V.js → chunk.HSMJHCR3.js} +1 -1
- package/dist/preview/{chunk.6SO64TUI.js → chunk.IEDCFSN5.js} +1 -1
- package/dist/preview/{chunk.VYFMUCBT.js → chunk.JIEDJEHK.js} +1 -1
- package/dist/preview/chunk.JNIDS66Z.js +1 -0
- package/dist/preview/{chunk.DHY7KOBV.js → chunk.JO3BBRSR.js} +1 -1
- package/dist/preview/chunk.JVDPRQ7J.js +1 -0
- package/dist/preview/chunk.K2HDEL7I.js +1 -0
- package/dist/preview/chunk.K7TK3KRB.js +7 -0
- package/dist/preview/{chunk.U2ISOUM2.js → chunk.KB5BCW23.js} +1 -1
- package/dist/preview/{chunk.EN2ABVIP.js → chunk.KL5H7KEV.js} +1 -1
- package/dist/preview/{chunk.ZC3FRCJQ.js → chunk.KPQLM4TM.js} +1 -1
- package/dist/preview/{chunk.R3N73BJO.js → chunk.KQPKYWDM.js} +1 -1
- package/dist/preview/{chunk.6DOOLVT4.js → chunk.KXFNRJ46.js} +1 -1
- package/dist/preview/chunk.KZUMXT5J.js +74 -0
- package/dist/preview/chunk.MAHNJO6U.js +1 -0
- package/dist/preview/{chunk.VN7I7XIO.js → chunk.MBB5A6BT.js} +1 -1
- package/dist/preview/chunk.MENLUNM5.js +1 -0
- package/dist/preview/{chunk.747OH3EE.js → chunk.MIE3ODQ2.js} +1 -1
- package/dist/preview/chunk.MT5DXJKN.js +1 -0
- package/dist/preview/chunk.MY5HJW2Z.js +1 -0
- package/dist/preview/{chunk.4LG34OC2.js → chunk.N3T2O6EW.js} +2 -2
- package/dist/preview/{chunk.E6RNMWFN.js → chunk.NEPQBMFT.js} +1 -1
- package/dist/preview/{chunk.ISRQQVS4.js → chunk.NIAM7OTV.js} +1 -1
- package/dist/preview/{chunk.5IEFTFKQ.js → chunk.NJSK3UO2.js} +1 -1
- package/dist/preview/chunk.NTC2H5ZX.js +1 -0
- package/dist/preview/chunk.NWWJNNEK.js +2 -0
- package/dist/preview/{chunk.6VLCMBRE.js → chunk.O3YIWIVQ.js} +1 -1
- package/dist/preview/chunk.O67JXUVG.js +1 -0
- package/dist/preview/{chunk.CRCJ3TAG.js → chunk.OIMGD7FR.js} +1 -1
- package/dist/preview/{chunk.ZJCM62GH.js → chunk.OM2NIQWA.js} +1 -1
- package/dist/preview/chunk.OMRQTLI5.js +1 -0
- package/dist/preview/{chunk.BDTT4ENI.js → chunk.OTSBF367.js} +2 -2
- package/dist/preview/{chunk.MU3XII7I.js → chunk.OXWOUE3W.js} +1 -1
- package/dist/preview/chunk.PDMX3GTL.js +1 -0
- package/dist/preview/{chunk.SIYBHZDD.js → chunk.PDS4HT46.js} +1 -1
- package/dist/preview/chunk.PWAP2GJS.js +1 -0
- package/dist/preview/chunk.Q2EGESEZ.js +1 -0
- package/dist/preview/{chunk.DHJI7LIW.js → chunk.Q4GJIJAU.js} +1 -1
- package/dist/preview/chunk.Q4MI53KK.js +5 -0
- package/dist/preview/chunk.Q5WEOX3Q.js +1 -0
- package/dist/preview/{chunk.2LNSENPV.js → chunk.QAMW5QDT.js} +1 -1
- package/dist/preview/{chunk.WD4VPMEE.js → chunk.QS32TO4N.js} +1 -1
- package/dist/preview/chunk.QSPLKCTX.js +1 -0
- package/dist/preview/chunk.R4HDKNT3.js +88 -0
- package/dist/preview/chunk.REUMBCSV.js +1 -0
- package/dist/preview/{chunk.CUTLO6DA.js → chunk.RUFYORIJ.js} +1 -1
- package/dist/preview/{chunk.PYVWGTQS.js → chunk.SGPXYDSG.js} +1 -1
- package/dist/preview/chunk.SJUXFPTI.js +1 -0
- package/dist/preview/{chunk.MBPOYZ3J.js → chunk.SME4HD5I.js} +1 -1
- package/dist/preview/{chunk.XZUHFXME.js → chunk.SMHP2CQH.js} +1 -1
- package/dist/preview/chunk.SSAETRHR.js +5 -0
- package/dist/preview/{chunk.PZXTSWDH.js → chunk.STDJ6XG5.js} +1 -1
- package/dist/preview/{chunk.66IKLMYX.js → chunk.T3JIZNE7.js} +2 -2
- package/dist/preview/chunk.T535ZLRM.js +1 -0
- package/dist/preview/chunk.T6PU3NKP.js +1 -0
- package/dist/preview/{chunk.U3JK2DNC.js → chunk.UAVK54Z6.js} +1 -1
- package/dist/preview/{chunk.EVEHSENK.js → chunk.V4HVFLFQ.js} +1 -1
- package/dist/preview/chunk.V6IL7CIZ.js +1 -0
- package/dist/preview/{chunk.ZVG3DR5G.js → chunk.VCTAFSZ5.js} +1 -1
- package/dist/preview/{chunk.GIW657OR.js → chunk.VZDHRY3U.js} +2 -1
- package/dist/preview/chunk.WBS7ND2C.js +1 -0
- package/dist/preview/chunk.WNS5LEO5.js +1 -0
- package/dist/preview/chunk.WUVXIUA7.js +1 -0
- package/dist/preview/{chunk.JHAFQNGC.js → chunk.WYPCLZL7.js} +1 -1
- package/dist/preview/{chunk.DLDP6OWD.js → chunk.XBYJCGPU.js} +1 -1
- package/dist/preview/{chunk.65KFZV3A.js → chunk.XCEZCOX4.js} +1 -1
- package/dist/preview/{chunk.KRFRREEW.js → chunk.XCWZFLIB.js} +1 -1
- package/dist/preview/chunk.XIW4SZHD.js +1 -0
- package/dist/preview/{chunk.MK72IRIY.js → chunk.XUO67YMT.js} +1 -1
- package/dist/preview/{chunk.FWUG7Y6C.js → chunk.XUXZW7DU.js} +1 -1
- package/dist/preview/chunk.XYGNS637.js +1 -0
- package/dist/preview/{chunk.FJIXSGYU.js → chunk.Y4ZM75WL.js} +1 -1
- package/dist/preview/{chunk.D5Q64GA4.js → chunk.YOUB3J3Y.js} +1 -1
- package/dist/preview/{chunk.3HFUO3DC.js → chunk.YXAKHXYB.js} +1 -1
- package/dist/preview/chunk.YZBJUAS6.js +1 -0
- package/dist/preview/chunk.Z2ZQJ3DD.js +1 -0
- package/dist/preview/chunk.ZELWW7UA.js +21 -0
- package/dist/preview/{chunk.YGIJDHAV.js → chunk.ZLTHWCKL.js} +2 -2
- package/dist/preview/chunk.ZP7JEVVU.js +1 -0
- package/dist/preview/chunk.ZRH5X3MR.js +1 -0
- package/dist/preview/{chunk.R5547CJ7.js → chunk.ZSGDVNVN.js} +1 -1
- package/dist/preview/chunk.ZVG4FXJK.js +1 -0
- package/dist/preview/chunk.ZY7US4Y7.js +6 -0
- package/dist/preview/{chunk.GQNSNJTJ.js → chunk.ZZAI57VI.js} +1 -1
- package/dist/preview/index.html +54 -51
- package/dist/preview/page.js +2 -2
- package/dist/preview/splash.js +58 -0
- package/package.json +6 -6
- package/dist/preview/chunk.2AWVQ5SW.js +0 -1
- package/dist/preview/chunk.2WZAFKJ2.js +0 -2
- package/dist/preview/chunk.3ICWPRRJ.js +0 -1
- package/dist/preview/chunk.3RW677X6.js +0 -1
- package/dist/preview/chunk.4G32374Q.js +0 -1
- package/dist/preview/chunk.4OEWFPH3.js +0 -1
- package/dist/preview/chunk.4STDIZVI.js +0 -2
- package/dist/preview/chunk.5S7IGASX.js +0 -28
- package/dist/preview/chunk.5T53SF2K.js +0 -1
- package/dist/preview/chunk.5X22RKB3.js +0 -1
- package/dist/preview/chunk.644FUGSX.js +0 -1
- package/dist/preview/chunk.7CETF4A6.js +0 -1
- package/dist/preview/chunk.AVFOTYZR.js +0 -74
- package/dist/preview/chunk.BFDJTWGX.js +0 -88
- package/dist/preview/chunk.BJI2C3IZ.js +0 -1
- package/dist/preview/chunk.D4TA5XDC.js +0 -4
- package/dist/preview/chunk.DKXVEVDG.js +0 -1
- package/dist/preview/chunk.DP5DUV6F.js +0 -6
- package/dist/preview/chunk.DXWTM4SH.js +0 -1
- package/dist/preview/chunk.F7IQ4B6A.js +0 -1
- package/dist/preview/chunk.F7PIW2EM.js +0 -5
- package/dist/preview/chunk.G4VMRYS4.js +0 -1
- package/dist/preview/chunk.GPWYWALF.js +0 -1
- package/dist/preview/chunk.HGVBGSRS.js +0 -6
- package/dist/preview/chunk.HZHNM2KI.js +0 -3
- package/dist/preview/chunk.ISXNAFRC.js +0 -20
- package/dist/preview/chunk.JU3BCCQM.js +0 -1
- package/dist/preview/chunk.K2AC536Q.js +0 -21
- package/dist/preview/chunk.K3UOXAZS.js +0 -1
- package/dist/preview/chunk.KNYLY7MH.js +0 -1
- package/dist/preview/chunk.LQAT7FA6.js +0 -3
- package/dist/preview/chunk.LTI5PKTS.js +0 -1
- package/dist/preview/chunk.MBP7VDYM.js +0 -1
- package/dist/preview/chunk.MBU7UH6J.js +0 -1
- package/dist/preview/chunk.MH6CCHEX.js +0 -1
- package/dist/preview/chunk.MNRTA2CB.js +0 -1
- package/dist/preview/chunk.MYVED5LU.js +0 -1
- package/dist/preview/chunk.N5WDQAIM.js +0 -5
- package/dist/preview/chunk.N7T7VB77.js +0 -25
- package/dist/preview/chunk.ODVRO2BJ.js +0 -1
- package/dist/preview/chunk.OVPFROL3.js +0 -1
- package/dist/preview/chunk.PGA5TUSN.js +0 -1
- package/dist/preview/chunk.PHC2MI4C.js +0 -1
- package/dist/preview/chunk.PXQVXBNG.js +0 -1
- package/dist/preview/chunk.Q5I5M3FR.js +0 -1
- package/dist/preview/chunk.QATUGE34.js +0 -1
- package/dist/preview/chunk.QL77K3D4.js +0 -1
- package/dist/preview/chunk.QUJS63OJ.js +0 -13
- package/dist/preview/chunk.REH6RXNH.js +0 -1
- package/dist/preview/chunk.RZ5PPQBV.js +0 -1
- package/dist/preview/chunk.SCGF4ZPP.js +0 -1
- package/dist/preview/chunk.SLAZFFCQ.js +0 -1
- package/dist/preview/chunk.SLPJWOKC.js +0 -1
- package/dist/preview/chunk.TKLYUVMR.js +0 -32
- package/dist/preview/chunk.TKUNRFDE.js +0 -1
- package/dist/preview/chunk.TMAZNDA6.js +0 -1
- package/dist/preview/chunk.UDCDK7XJ.js +0 -4
- package/dist/preview/chunk.UO544PZH.js +0 -1
- package/dist/preview/chunk.VKHAAH32.js +0 -1
- package/dist/preview/chunk.VOOOIECX.js +0 -1
- package/dist/preview/chunk.VS6NT5C4.js +0 -1
- package/dist/preview/chunk.VUAOCYG2.js +0 -1
- package/dist/preview/chunk.VX65S2FA.js +0 -1
- package/dist/preview/chunk.X2I3XH2E.js +0 -2
- package/dist/preview/chunk.XWWSW3ZV.js +0 -7
- package/dist/preview/chunk.Y7H5O2SL.js +0 -1
- package/dist/preview/chunk.YOT7ESDG.js +0 -18
- package/dist/preview/chunk.ZQHCNFJK.js +0 -1
- package/dist/preview/chunk.ZYNUMVEC.js +0 -1
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{a as k}from"./chunk.G4JJXA63.js";import{a as Q}from"./chunk.JVDPRQ7J.js";import{a as Z}from"./chunk.VCTAFSZ5.js";import{a as Y}from"./chunk.DZSZUX34.js";import{c as V}from"./chunk.AHPYNDVA.js";import{_d as P,ae as H,be as T,ce as U,xb as z,yb as B}from"./chunk.Q4MI53KK.js";var N=n=>"failed"in n;function fn(n,e){let s=n.schema.kinds,t=n.policy?.sees;if(!t?.length||B(e))return{kinds:s};let o=z(e).roles??[],r=new Set(t.filter(i=>i.roles==="*"||o.some(a=>i.roles.includes(a))).flatMap(i=>i.kinds));return{kinds:s.filter(i=>r.has(i))}}function O(n,e){if(!e)return n;let s=new Set(e.kinds.filter(r=>n.tryDefinition(r)!==void 0));if(s.size===n.kinds.length)return n;let t=new Map,o=r=>{if(s.has(r)){if(!t.has(r)){let i=n.tryDefinition(r),a=Object.fromEntries(Object.entries(i?.edges??{}).flatMap(([l,d])=>{if(d.to==="*")return[[l,d]];let c=d.to.filter(u=>s.has(u));return c.length>0?[[l,{...d,to:c}]]:[]}));t.set(r,{...i,edges:a})}return t.get(r)}};return{...n,definitions:n.definitions.filter(r=>s.has(r.kind)),kinds:n.kinds.filter(r=>s.has(r)),tryDefinition:o,definition:r=>{let i=o(r);if(!i)throw new Error(`Unknown node kind "${r}"`);return i}}}var gn=n=>n.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),m=n=>gn(n).replace(/[-_]+/g," ").trim();function j(n){let e=[];for(let t of n.kinds){let o=n.tryDefinition(t);if(!o)continue;let r=o.display?.labels??{},i=Object.entries(o.fields?.shape??{}).filter(([d])=>d!=="id"&&d!=="kind").map(([d,c])=>{let u=Y(c);return{name:d,type:u?.type==="enum"&&u.multiple?"list":u?.type,...u?.options?{options:u.options}:{},words:(r[d]??m(d)).toLowerCase()}}),a=Object.entries(o.edges??{}).map(([d,c])=>({name:d,from:t,to:c.to==="*"?n.kinds.filter(u=>u!==t):c.to,words:m(d)})),l=(o.plural??`${m(t)}s`).toLowerCase();e.push({kind:t,plural:l,noun:(o.noun??m(t)).toLowerCase(),fields:i,roles:o.fieldRoles??{},edges:a})}let s=new Map(e.map(t=>[t.kind,t]));return{schema:n,kinds:e,info:t=>s.get(t)}}var $=(n,e)=>e===void 0?void 0:n.fields.find(s=>s.name===e),R=n=>n?.type==="date"||n?.type==="datetime",K=n=>n?.type==="number"||n?.type==="integer"||n?.type==="duration",sn=n=>` ${n.toLowerCase().replace(/[“”"’‘]/g,"'").replace(/[^\p{L}\p{N}' -]+/gu," ").replace(/\s+/g," ").trim()} `,A=(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 s=[];for(let t of e.kinds){let o=new Set([t.plural,t.noun,`${t.noun}s`,m(t.kind),`${m(t.kind)}s`]),r=-1;for(let i of o){let a=n.indexOf(` ${i} `);a>=0&&(r<0||a<r)&&(r=a)}r>=0&&s.push({info:t,at:r})}return s.sort((t,o)=>t.at-o.at).map(t=>t.info)}function I(n,e,s){let t=e.trim().toLowerCase();if(t.length===0)return;let o=n.fields.filter(r=>!s||s(r));return o.find(r=>r.words===t||m(r.name)===t||r.name.toLowerCase()===t)??o.find(r=>r.words===L(t)||m(r.name)===L(t))??o.find(r=>t.split(" ").some(i=>i.length>2&&(r.words.split(" ").includes(i)||r.words.split(" ").includes(L(i)))))}function rn(n,e,s){let t=e.trim().toLowerCase();if(t.length!==0)return n.edges.find(o=>o.words===t||o.name.toLowerCase()===t)??n.edges.find(o=>o.to.some(r=>{let i=s.info(r);return i!==void 0&&(i.noun===L(t)||i.plural===t||m(r)===L(t))}))??n.edges.find(o=>t.split(" ").some(r=>r.length>2&&o.words.split(" ").includes(r)))}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 bn=/\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/,mn=/\bcalendar\b|\bmonth\b|\bagenda\b|\bschedule\b|\bdue\b|\bdeadlines?\b|\bdates?\b|\bwhen\b/,hn=/\btimeline\b|\bover time\b|\bgantt\b|\bspans?\b|\bweek\b/,pn=/\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"),bn.test(n)&&e.push("coverage"),wn.test(n)&&e.push("board"),(/\bfloor plan\b/.test(n)||kn.test(n))&&e.push("plan"),hn.test(n)&&e.push("timeline"),mn.test(n)&&e.push("calendar"),pn.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=s=>s?` and not ${s}`:"";if(/\boverdue\b|\blate\b|\bpast due\b/.test(n))return{cond:(s,t)=>`days(today(), ${s}) < 0${e(t)}`,says:s=>`overdue by ${s.words}`};if(/\btoday\b/.test(n))return{range:"day",cond:s=>`days(today(), ${s}) == 0`,says:s=>`with ${s.words} today`};if(/\bthis week\b|\bnext 7 days\b|\bnext week\b/.test(n))return{range:"week",cond:s=>`days(today(), ${s}) >= 0 and days(today(), ${s}) <= 6`,says:s=>`with ${s.words} in the next week`};if(/\bthis month\b|\bnext 30 days\b|\bnext month\b/.test(n))return{range:"month",cond:s=>`days(today(), ${s}) >= 0 and days(today(), ${s}) <= 30`,says:s=>`with ${s.words} in the next month`};if(/\blast month\b|\bpast month\b/.test(n))return{range:"month",cond:s=>`days(today(), ${s}) >= -30 and days(today(), ${s}) <= 0`,says:s=>`with ${s.words} in the last month`};if(/\bthis year\b/.test(n))return{range:"year",cond:s=>`days(today(), ${s}) >= 0 and days(today(), ${s}) <= 365`,says:s=>`with ${s.words} in the next year`};if(/\bquarter\b/.test(n))return{range:"quarter",cond:s=>`days(today(), ${s}) >= 0 and days(today(), ${s}) <= 91`,says:s=>`with ${s.words} in the next quarter`}},_=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"},X=/^(user|person|people|member|staff|gardener|volunteer|owner|agent|employee|worker|team|player|customer|client|contact|party|attendee|guest)s?$/,x=class extends Error{},h=n=>{throw new x(n)};function Dn(n,e){let s=n.fields.filter(r=>r.type==="enum");if(e){let r=I(n,e);if(r&&r.type==="enum")return r;r&&h(`${n.plural}' ${r.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 o=s.find(r=>/^(status|stage|state|phase)$/.test(r.name));return o||(s[0]?s[0]:h(`${n.plural} have no choice field to put in columns`))}function nn(n,e){let s=n.fields.filter(R),t=l=>{let d=$(n,n.roles[l]);return R(d)?d:void 0},r=s.find(l=>A(e,l.words)||A(e,m(l.name)))??t("start")??s.find(l=>/^(due|date|on|at|start|starts|begins|from|sown|when)/i.test(l.name))??s[0];if(!r)return h(`no date field on ${n.plural}`);let i=t("end")??s.find(l=>l!==r&&/^(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:r,...i&&i!==r?{end:i}:{},...a?{done:a}:{}}}function an(n){let e=$(n,n.roles.start),s=$(n,n.roles.end),t=$(n,n.roles.column??n.roles.day??n.roles.columns);if(K(e)&&K(s)&&t?.type==="enum")return{start:e,end:s,column:t}}function vn(n,e,s,t){let o=[];for(let i of n.kinds)for(let a of i.edges)for(let l of a.to){let d=n.info(l);if(!d||d.kind===i.kind)continue;let c=0;e.includes(i)&&(c+=4),e.includes(d)&&(c+=4),(X.test(d.kind)||X.test(d.noun))&&(c+=3),t&&(a.words.includes(t)||d.noun===L(t))&&(c+=5),a.words.split(" ").some(u=>u.length>2&&s.includes(` ${u}`))&&(c+=2),o.push({rows:i,across:d,link:a,score:c})}let r=o.sort((i,a)=>a.score-i.score)[0];return r||h(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,s,t,o){let r=W(t);switch(n){case"columns":{if(r){let i=I(e,r);if(!i||i.type!=="enum"){let a=rn(e,r,s);if(a){let l=s.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,r).name}}case"calendar":{let i=nn(e,t),a=_(t);return{lens:"calendar",kind:e.kind,start:i.start.name,...i.end?{end:i.end.name}:{},...i.done?{done:i.done.name}:{},...a?{range:a}:{}}}case"timeline":{let i=an(e);if(i&&!/\bdates?\b|\bdue\b|\bdeadlines?\b|\bmonths?\b|\byears?\b/.test(t))return{lens:"timeline",kind:e.kind,start:i.start.name,end:i.end.name,column:i.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:_(t)??"quarter"}}case"coverage":{let i=vn(s,o,t,r);return{lens:"coverage",kind:i.rows.kind,across:i.across.kind,link:i.link.name}}case"board":{let i=$(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(i)||!K(a))return h(`${e.plural} have no x and y to be laid out by`);let d=s.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:i.name,y:a.name,fill:d.name,...d.from!==e.kind?{fillFrom:"occupant"}:{}}:h(`nothing is joined to ${e.plural} to fill them`)}case"plan":{let i=$(e,e.roles.outline)??e.fields.find(a=>a.name==="outline");return i?{lens:"plan",kind:e.kind,outline:i.name}:h(`${e.plural} have no outline to draw a plan from`)}case"blocks":{let i={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]??(r&&!/ sort(?:ed)? by /.test(t)?r:void 0);if(a){let c=I(e,a);if(!c||c.type!=="enum")return h(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`);i.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 h(`${e.plural} have nothing called ${l} to sort by`);i.sort={by:c.name,.../\b(newest|latest|desc|descending|most)\b/.test(t)?{direction:"desc"}:{}}}let d=q(e,t);return d.length>0&&(i.where=d),i}}}function q(n,e){let s=[],t=on(e);if(t){let o=n.fields.filter(R),r=$(n,n.roles.start),i=o.find(l=>A(e,l.words))??(R(r)?r:void 0)??o[0];(!i||!R(i))&&h(`no date field on ${n.plural}`);let a=n.fields.find(l=>l.type==="boolean"&&/^(done|finished|complete|completed|closed)$/.test(l.name));s.push({expr:t.cond(i.name,/\boverdue\b|\blate\b|\bpast due\b/.test(e)?a?.name:void 0),says:t.says(i)})}if(/\bonly\b|\bjust\b|\bthat are\b|\bwhich are\b/.test(e)){for(let o of n.fields){if(o.type!=="enum")continue;let r=o.options?.find(i=>A(e,i.toLowerCase())||A(e,m(i)));r&&s.push({expr:`${o.name} == '${r.replace(/'/g,"")}'`,says:`that are ${m(r)}`})}if(/\bnot done\b|\bundone\b|\bunfinished\b|\bopen ones\b|\bstill to do\b/.test(e)){let o=n.fields.find(r=>r.type==="boolean"&&/^(done|finished|complete|completed)$/.test(r.name));o&&s.push({expr:`not ${o.name}`,says:`not ${o.words}`})}}return s}var J={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 Rn(n,e){let s=e.info(n.kind),t=o=>o?$(s,o)?.words??m(o):"";switch(n.lens){case"columns":return{title:`${k(s.plural)} by ${t(n.column)}`,detail:`of ${s.plural} by ${t(n.column)}`};case"calendar":{let o=n.range??"month";if(o==="agenda")return{title:`${k(s.plural)} in date order`,detail:`of ${s.plural} in order of ${t(n.start)}`};let r=o==="years"?"year":o;return{title:`${k(s.plural)} by ${r}`,detail:`of ${s.plural} by ${t(n.start)}, a ${r} at a time`}}case"timeline":return{title:`${k(s.plural)} over the ${t(n.column)}`,detail:`of ${s.plural} from ${t(n.start)} to ${t(n.end)}, by ${t(n.column)}`};case"coverage":{let o=e.info(n.across);return{title:`${k(s.plural)} by ${o.noun}`,detail:`of which ${o.noun} covers which ${s.noun}`}}case"board":return{title:`${k(s.plural)} where they stand`,detail:`of ${s.plural} where they stand`};case"plan":return{title:`${k(s.plural)} on a plan`,detail:`of ${s.plural}`};default:{let o=[n.where?.map(r=>r.says).join(" and "),n.group?`by ${t(n.group)}`:void 0,n.sort?`in order of ${t(n.sort.by)}`:void 0].filter(r=>!!r);return{title:[k(s.plural),...o].join(" "),detail:[`of ${s.plural}`,...o].join(" ")}}}}function An(n,e){let s={title:e,on:n.kind};switch(n.lens){case"columns":return{name:"columns",...s,bindings:{[n.kind]:{column:n.column}}};case"calendar":return{name:"calendar",...s,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",...s,bindings:{[n.kind]:{start:n.start,end:n.end,column:n.column}}};case"coverage":return{name:"coverage",...s,bindings:{rows:{kind:n.kind},columns:{kind:n.across},link:{edge:n.link}}};case"board":return{name:"board",...s,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",...s,bindings:{regions:{kind:n.kind},outline:{field:n.outline,on:"regions"}}};default:{let t=n.where?.length?` where ${n.where.map(r=>n.where.length>1?`(${r.expr})`:r.expr).join(" and ")}`:"",o={list:`all('${n.kind}')${t}`,as:n.as??"row"};return n.group&&(o.group=n.group),n.sort&&(o.sort=n.sort.direction?{by:n.sort.by,direction:n.sort.direction}:n.sort.by),o.empty="Nothing here yet.",{name:"blocks",...s,options:{blocks:[o]}}}}}function F(n,e){let{app:s}=e,t=r=>r.toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,""),o=new Set(["home","overview",...Q(s,e.views?{views:e.views}:{}).map(r=>r.slug),...(s.lenses??[]).flatMap(r=>r.title?[t(r.title)]:[])]);if(!o.has(t(n)))return n;for(let r=2;;r++)if(!o.has(t(`${n} ${r}`)))return`${n} ${r}`}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 s=(i,a)=>{if(typeof i!="string"||i.trim()==="")return`its ${a} says nothing`;try{return V(i)}catch(l){return`its ${a} does not read: ${l instanceof Error?l.message.replace(/ \(at character.*$/,""):String(l)}`}},t=i=>{if(i.t==="where")return t(i.set);if(i.t==="call"&&i.fn==="all"){let a=i.args[0];return a?.t==="lit"&&typeof a.value=="string"?n.info(a.value)??null:void 0}},o=(i,a)=>{switch(i.t){case"lit":return;case"ident":return a&&!a.fields.some(l=>l.name===i.name)&&!a.edges.some(l=>l.name===i.name)?`${a.plural} have nothing called ${i.name}`:void 0;case"member":return o(i.object,a);case"list":return i.items.map(l=>o(l,a)).find(Boolean);case"unary":return o(i.operand,a);case"binary":return o(i.left,a)??o(i.right,a);case"where":{let l=t(i.set);return l===null?"Nothing by that name here":o(i.set,a)??o(i.filter,l??void 0)}case"call":return i.fn==="all"?t(i)===null?"Nothing by that name here":void 0:i.args.map(l=>o(l,a)).find(Boolean)}},r=(i,a)=>{if(a>4)return"its blocks nest deeper than a place draws";for(let l of i){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=s(u,d);if(typeof g=="string")return g;let b=o(g,void 0);if(b)return b;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 p=l[y],S=typeof p=="string"?p:w(p)&&typeof p.by=="string"?p.by:void 0;if(p===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??p)} 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=r(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=r(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 b=g[1].split(/\|(?![|])/)[0],f=s(b,`${d}'s braces`);if(typeof f=="string")return f;let y=o(f,void 0);if(y)return y}}}};return r(e,1)}function E(n,e,s){let t=O(n.schema,s),o=f=>({ok:!1,failed:`Couldn't draw that: ${f.replace(/\.$/,"")}.`});if(!T(e.name)||e.name==="reach")return o(`"${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 o("it needs a title of a few words");if(typeof e.on!="string"||!t.tryDefinition(e.on))return o("Nothing by that name here");let r=P[e.name],i=e.bindings??{};if(r.binds==="fields")for(let[f,y]of Object.entries(i)){if(!t.tryDefinition(f))return o("Nothing by that name here");let p=Object.keys(t.tryDefinition(f).fields?.shape??{});for(let[S,D]of Object.entries(y??{}))if(typeof D!="string"||!p.includes(D))return o(`${m(f)} has no field "${String(D)}" for its ${S}`);for(let S of r.requiredRoles)if(!(S in(y??{})))return o(`a ${e.name} needs ${m(f)}'s ${S}`)}else if(r.binds==="entities")for(let f of r.requiredRoles){let y=i[f];if(!y)return o(`a ${e.name} needs its ${f}`);if(typeof y.kind=="string"&&!t.tryDefinition(y.kind))return o("Nothing by that name here")}let a={...n,schema:t,lenses:[...n.lenses??[],e]},l=a.lenses.length-1,d=U(a),c=`lenses.${l}`,u=d.findings.find(f=>f.path===c||f.path.startsWith(`${c}.`));if(u)return o(u.message.replace(/^"[^"]*" /,"it "));let g=d.undrawn.find(f=>f.index===l);if(g)return o(g.why);let b=d.drawn.find(f=>f.index===l);if(!b)return o("its bindings name something the app does not have");if(b.as==="overview")return o(`"${e.title}" is the scene's own address; give it another title`);if(e.name==="blocks"){let f=Ln(j(t),e.options?.blocks);if(f)return o(f)}return{ok:!0,drawn:b}}function G(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:{},s=String(e.lens??e.name??""),t=e.bindings,o=typeof e.on=="string"?e.on:w(t)&&P[s]?.binds==="fields"?Object.keys(t)[0]??"":"";return{name:s,title:typeof e.title=="string"?e.title.trim():"",on:o,...w(t)?{bindings:t}:{},...w(e.options)?{options:e.options}:{}}}function On(n){let e=o=>w(n.bindings?.[o])?n.bindings[o]:{},s=o=>typeof o=="string"?o:void 0,t=e(n.on);switch(n.name){case"columns":return s(t.column)?{lens:"columns",kind:n.on,column:t.column}:void 0;case"calendar":{let o=s(n.options?.range);return s(t.start)?{lens:"calendar",kind:n.on,start:t.start,...s(t.end)?{end:t.end}:{},...s(t.done)?{done:t.done}:{},...o?{range:o}:{}}:void 0}case"timeline":return s(t.start)&&s(t.end)&&s(t.column)?{lens:"timeline",kind:n.on,start:t.start,end:t.end,column:t.column}:void 0;case"coverage":{let o=w(n.bindings?.columns)?s(n.bindings.columns.kind):void 0,r=w(n.bindings?.link)?s(n.bindings.link.edge):void 0;return o&&r?{lens:"coverage",kind:n.on,across:o,link:r}:void 0}case"blocks":{let o=n.options?.blocks;if(!Array.isArray(o)||o.length!==1||!w(o[0]))return;let r=o[0],i=new RegExp(`^all\\('${n.on}'\\)(?: where (.+))?$`).exec(String(r.list??""));if(!i)return;let a=r.sort;return{lens:"blocks",kind:n.on,as:r.as==="card"?"card":"row",...typeof r.group=="string"?{group:r.group}:{},...typeof a=="string"?{sort:{by:a}}:w(a)&&typeof a.by=="string"?{sort:{by:a.by,...a.direction==="desc"?{direction:"desc"}:{}}}:{},...i[1]?{where:[{expr:i[1],says:"as asked"}]}:{}}}default:return}}function M(n,e,s,t,o){let r=j(O(n.schema,t)).info(e.on),i=On(e);return{title:e.title,said:`${J[e.name]??"A picture"} of ${r?.plural??m(e.on)}.`,kind:e.on,lens:e,drawn:s,edit:G(e),by:o,asks:[],...i?{recipe:i}:{}}}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 C(n,e,s,t,o){let r=Rn(n,e),i=n.title??o??F(r.title,s),a=An(n,i),l=E(s.app,a,s.sight);return l.ok?{title:i,said:`${J[n.lens]} ${r.detail}.`,kind:n.kind,lens:a,drawn:l.drawn,edit:G(a),by:"template",asks:t,recipe:n}:{failed:l.failed,...s.lastGood?{lastGood:s.lastGood}:{}}}function Jn(n,e){let s=j(O(e.app.schema,e.sight)),t=s.info(n.kind);if(!t)return{failed:"Couldn't draw that: Nothing by that name here."};let o=n.lens==="blocks"&&!n.group&&!n.sort&&!n.where?.length&&n.title===void 0;return C(o?{...n,title:F(`Every ${t.noun}`,e)}:n,s,e,[])}function jn(n,e,s,t){if(s.length>0)return s;let o=i=>{switch(n){case"columns":return i.fields.some(a=>a.type==="enum");case"calendar":return i.fields.some(R);case"timeline":return an(i)!==void 0||i.fields.some(R);case"coverage":return i.edges.some(a=>a.to.some(l=>l!==i.kind));case"board":return i.fields.some(a=>a.name==="x")&&i.fields.some(a=>a.name==="y");case"plan":return i.fields.some(a=>a.name==="outline")||i.roles.outline!==void 0;default:return!0}};return[...e.kinds.filter(o)].sort((i,a)=>Number(a.fields.some(l=>A(t,l.words)))-Number(i.fields.some(l=>A(t,l.words))))}function Nn(n,e){let s=j(O(e.app.schema,e.sight)),t=sn(n),o=Sn(t);if(o.length===0)return;let r=yn(t,s),i;for(let a of o){let l=a==="coverage"?[r[0]??s.kinds[0]].filter(d=>!!d):jn(a,s,r,t);for(let d of l)try{let c=dn(a,d,s,t,r),u=C(c,s,e,[n]);if(!N(u))return u;i??=u.failed}catch(c){if(!(c instanceof x))throw c;i??=`Couldn't draw that: ${c.message}.`}l.length===0&&r.length===0&&(i??=`Couldn't draw that: nothing here has what ${J[a].toLowerCase()} needs.`)}return{failed:i??"Couldn't draw that: Nothing by that name here.",...e.lastGood?{lastGood:e.lastGood}:{}}}async function xn(n,e){let s=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.",...s};let t=Nn(n,e);if(t&&!N(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.",...s};let o=await cn(n,e,void 0);return N(o)&&t?t:o}async function En(n,e,s){let t={lastGood:n},o={...s,lastGood:n},r=j(O(s.app.schema,s.sight)),i=sn(e),a=r.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(i)??/ (?:call|name) it (.+?) $/.exec(i);try{if(c){let b=e.replace(/^.*?\b(?:call|name|title)\b\s*(?:it|this)?\s*/i,"").replace(/^["“']|["”']$/g,"").trim();if(b.length===0)return{failed:"Couldn't change that: say what to call it.",...t};let f={...n.lens,title:F(b,s)},y=E(s.app,f,s.sight);return y.ok?{...n,title:f.title,lens:f,drawn:y.drawn,edit:G(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(i);if(g){let b=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(b,a,r,i,[a]),y=g[1]==="cards"?"card":g[1]==="rows"?"row":void 0,p=b==="blocks"&&d?.lens==="blocks"?{...d,...y?{as:y}:{}}:b==="blocks"&&d?.lens==="columns"?{...f,group:d.column,...y?{as:y}:{}}:f;return C(v(p),r,o,l)}if(d){let b=Kn(d,a,r,i);if(b)return C(b,r,o,l)}}catch(g){if(!(g instanceof x))throw g;return{failed:`Couldn't change that: ${g.message}.`,...t}}if(!s.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,o,n);return N(u)?u:{...u,asks:l}}var v=n=>{let{title:e,...s}=n;return s};function Kn(n,e,s,t){let o=/ (?:group(?:ed)?|split|organi[sz]ed?|put them|columns) by ([\p{L}\p{N} -]+?)(?= (?:and|only|with)|\s*$)/u.exec(t)?.[1]??(/^ by /.test(t)?W(t):void 0);if(o){let d=I(e,o);if(d?.type==="enum")return n.lens==="blocks"?{...v(n),group:d.name}:{lens:"columns",kind:n.kind,column:d.name};let c=rn(e,o,s);return c?{lens:"coverage",kind:n.kind,across:c.to[0],link:c.name}:h(d?`${e.plural}' ${d.words} is not a choice, so they cannot be grouped by it`:`${e.plural} have nothing called ${o} to group by`)}let r=/ (?:sort(?:ed)?|order(?:ed)?) by ([\p{L}\p{N} -]+?)(?= (?:and|only|with)|\s*$)/u.exec(t)?.[1];if(r){let d=I(e,r);return d?{...n.lens==="blocks"?v(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"}:{}}}:h(`${e.plural} have nothing called ${r} 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 h("it already shows all of them");let{where:d,...c}=v(n);return c}let i=on(t);if(i&&n.lens==="calendar"&&i.range)return{...v(n),range:i.range};if(i&&n.lens==="calendar"&&!i.range)return{lens:"blocks",kind:n.kind,as:"row",sort:{by:n.start},where:q(e,t)};let a=q(e,t);if(a.length>0){let d=n.lens==="blocks"?v(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"?_(t):void 0;if(l)return{...v(n),range:l}}function Cn(n){return n.kinds.map(e=>{let s=e.fields.map(r=>`${r.name} (${r.type??"value"}${r.options?`: ${r.options.join(" | ")}`:""})`).join(", "),t=e.edges.map(r=>`${r.name} \u2192 ${r.to.join(" | ")}`).join(", "),o=Object.entries(e.roles).map(([r,i])=>`${r}=${i}`).join(", ");return`- ${e.kind} ("${e.plural}"): ${s}${t?`; relations: ${t}`:""}${o?`; roles: ${o}`:""}`}).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,s){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,"",s?`The view on screen now:
|
|
4
|
+
${JSON.stringify(s.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,s){let t=e.lastGood?{lastGood:e.lastGood}:{},o=j(O(e.app.schema,e.sight)),r;try{r=(await e.complete({prompt:Gn(n,o,s)})).text}catch{return{failed:"Couldn't draw that: the model did not answer.",...t}}let i=Z(r);if(typeof i!="object"||i===null||Array.isArray(i))return{failed:"Couldn't draw that: the model's answer was not a view.",...t};let a=i;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(!T(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):s?.title??k(n.trim()).slice(0,80),c={...l,title:s&&s.title===d?d:F(d,e)},u=E(e.app,c,e.sight);return u.ok?{...M(e.app,c,u.drawn,e.sight,"model"),asks:[n]}:{failed:u.failed,...t}}function zn(n,e,s){let t=[...n.lenses??[]];for(let o of e){let r={name:o.lens,title:o.title,on:o.on,...o.bindings?{bindings:o.bindings}:{},...o.options?{options:o.options}:{}};if(t.some(a=>a.title===r.title))continue;E({...n,lenses:t},r,s).ok&&(t=[...t,r])}return t.length===(n.lenses??[]).length?n:{...n,lenses:t}}async function Bn(n,e,s){let{app:t,drafts:o}=s,r=fn(t,s.principal),i=c=>{let u=ln(c);return{lens:u,verdict:E(t,u,r)}};if(n==="keep_lens"){let{lens:c,verdict:u}=i(e);if(!u.ok)return{ok:!1,error:u.failed,reason:"invalid"};if(!o?.keep)return{ok:!1,error:"This app's declaration cannot be written from here."};let g=G(c),b=await o.keep(g);return b.ok?{ok:!0,data:{kept:g,said:b.said??`Adds \u201C${g.title}\u201D to the places.`,undo:In(g)}}:{ok:!1,error:b.error}}if(e.lens!==void 0){let{lens:c,verdict:u}=i(e.lens);return u.ok?{ok:!0,data:tn(M(t,c,u.drawn,r,"model"))}:{ok:!1,error:u.failed,reason:"invalid"}}let a={app:t,sight:r,...o?.complete?{complete:o.complete}:{},...o?.views?{views:o.views}:{}},l=String(e.ask??""),d;if(e.current!==void 0){let{lens:c,verdict:u}=i(e.current);if(!u.ok)return{ok:!1,error:u.failed,reason:"invalid"};d=await En(M(t,c,u.drawn,r,"model"),l,a)}else d=await xn(l,a);return N(d)?{ok:!1,error:d.failed,reason:"invalid"}:{ok:!0,data:tn(d)}}export{N as a,fn as b,E as c,G as d,In as e,ln as f,On as g,M as h,tn as i,Jn as j,Nn as k,xn as l,En as m,zn as n,Bn as o};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as U,b as Y,c as G,d as D}from"./chunk.IEDCFSN5.js";import"./chunk.KZUMXT5J.js";import"./chunk.CGK2PY76.js";import{G as ae,O as L,P as F,T as V,ca as _}from"./chunk.CYTTZOYL.js";import"./chunk.SDO3U72B.js";import{W as H,cb as K,db as B,qd as M}from"./chunk.Q4MI53KK.js";import"./chunk.FQLNBIQ5.js";import{b as R}from"./chunk.AJZBJBMO.js";function O(n,t){let r=K(n);return r==="agent"?"agent":r!=="human"&&r!=="visitor"?"app":n.onBehalfOf!==void 0?"person":n.id===void 0||t?.id===void 0||n.id===t.id?"you":"person"}var re=n=>n.ops.filter(t=>t.withheld!==!0);function X(n,t={}){let r=[];for(let e of n.batches()){let s=e.ops[0],d=e.ops.at(-1),l=re(e).length===0,h=l?void 0:Y(e.ops),c=r.at(-1);if(h&&c?.typed&&c.author&&U(c.author,e.author)&&c.typed.node===h.node&&c.typed.field===h.field){let S=G(c.typed,h);r[r.length-1]={...c,seq:d.seq+1,at:d.at,batch:e.id,batches:[...c.batches??[],e.id],typed:S,said:D(S,n.schema,n.graph,!1)};continue}r.push({seq:d.seq+1,from:s.seq,at:d.at,batch:e.id,maker:l?"person":O(e.author,t.me),author:l?void 0:e.author,said:h?D(h,n.schema,n.graph,!1):e.intent,declaration:!1,withheld:l,...h?{batches:[e.id],typed:h}:{}})}let i=[...n.log.epochs().filter(e=>e.change!==void 0).map(e=>({seq:e.seq,sentence:e.change,...e.at?{at:e.at}:{}})),...t.declarations??[]];for(let e of i){if(e.seq<n.log.horizon||e.seq>n.log.length)continue;let s=r.findIndex(d=>d.seq===e.seq);if(s>=0&&!r[s].withheld){r[s]={...r[s],declaration:!0,said:e.sentence};continue}r.push({seq:e.seq,from:e.seq,at:e.at,batch:void 0,maker:e.author?O(e.author,t.me):"app",author:e.author,said:e.sentence,declaration:!0,withheld:!1})}return r.sort((e,s)=>e.seq-s.seq||+(e.batch!==void 0)-+(s.batch!==void 0))}function J(n,t){let r=n.log.all(),i=new Map(r.map(e=>[e.id,e.seq]));return n.batches().filter(e=>!e.undone&&e.ops[0].seq>=t).filter(e=>!e.ops.every(s=>s.sentOut!==void 0)).filter(e=>!e.ops.every(s=>s.undoes!==void 0&&(i.get(s.undoes)??-1)>=t)).map(e=>e.id)}function Q(n,t){return n.withheld?"Someone":n.maker==="you"?"you":n.author?B(n.author,t):"the app"}var p=R(ae(),1);var o=R(V(),1),oe={kind:"human"},ie=[1,2,4,8],se=900,E={you:"You",person:"A person",agent:"An agent",app:"The app"},Z={you:"var(--graview-accent)",person:"var(--graview-ink-muted)",agent:"var(--graview-activity, var(--graview-good))",app:"var(--graview-edge-bright)"};function de(n,t,r){return[...new Set([...r,t,...n.map(i=>i.seq)])].sort((i,e)=>i-e)}function le(n,t){let r=n.withheld===!0;return{seq:n.seq+1,from:n.seq,at:n.at,batch:n.batch,maker:r?"person":O(n.author,t),author:r?void 0:n.author,said:n.batchIntent??n.intent,declaration:!1,withheld:r}}function ce(n,t){let r=0;for(let i=0;i<n.length;i++)n[i]<=t&&(r=i);return r}function pe(n,t,r){let i=J(n,t);if(i.length===0)return null;let e=n.canUndo(i);if(!e.ok)return null;let s=new Set(n.permittedMutations(r).map(d=>d.name));return e.ops.every(d=>d.mutation!==null&&s.has(d.mutation.name))?i:null}function we({face:n}){let t=L(),r=_(),i=r?.principal??oe,e=F(t.live,i),s=e.log.length,d=(0,p.useMemo)(()=>X(e,{me:i,...t.host?.declarations?{declarations:t.host.declarations}:{}}),[e,i,t.host,s]),l=e.log.horizon,h=l>0&&t.host?.archived!==void 0,c=t.kept,S=(0,p.useMemo)(()=>h?c?.stops??Array.from({length:l},(a,g)=>g):[],[h,c,l]),m=(0,p.useMemo)(()=>de(d,l,S),[d,l,S]),f=t.archive,y=f?.seq??t.past?.seq??s,x=t.host?.kept&&(f?.behindKept||c!==void 0&&(y<=c.through||c.from>0&&y<=c.from))?t.host.kept:void 0,w=ce(m,y),b=m.length-1,j=y<l&&t.past?.seq===y?t.past.store.log.all().at(-1):void 0,q=j?le(j,i):y<l?void 0:[...d].reverse().find(a=>a.seq<=y&&a.seq>(m[w-1]??-1))??[...d].reverse().find(a=>a.seq<=y),[k,A]=(0,p.useState)(!1),[T,ee]=(0,p.useState)(1),[C,W]=(0,p.useState)(null);(0,p.useEffect)(()=>{if(!k)return;if(w>=b){A(!1);return}let a=setTimeout(()=>t.show(m[w+1]),se/T);return()=>clearTimeout(a)},[k,w,b,T,m,t]);let z=(0,p.useMemo)(()=>t.past&&!f&&y>=l?pe(e,y,i):null,[t.past,f,e,y,l,i,s]),N=a=>Q(a,{graph:e.graph,schema:e.schema,...r?.seats?{seats:r.seats}:{},...r?.people?{people:r.people}:{}}),v=t.past?t.past.at?H(t.past.at,r?.locale):"the start":null,$=f?f.refused?"The archive could not be read":f.behindKept?"Nothing this far back is kept":"Reading the older changes from the archive\u2026":q?`${N(q)==="you"?"You":N(q)}: ${q.said}`:"Nothing had happened yet",I=(0,p.useRef)(null);(0,p.useLayoutEffect)(()=>{let a=I.current,g=a?.parentElement;if(n!=="scene"||!a||!g)return;let u=()=>g.style.setProperty("--graview-sheet",`${Math.ceil(a.getBoundingClientRect().height)+24}px`);u();let P=typeof ResizeObserver>"u"?null:new ResizeObserver(u);return P?.observe(a),()=>{P?.disconnect(),g.style.removeProperty("--graview-sheet")}},[n]);let te=n==="scene"?{position:"absolute",left:"50%",bottom:12,transform:"translateX(-50%)",width:"min(720px, calc(100% - 32px))",zIndex:M("rail")}:{position:"sticky",top:0,zIndex:M("rail"),margin:"0 auto 12px",maxWidth:960,width:"100%"};return(0,o.jsxs)("section",{ref:I,"aria-label":"Timeline","data-testid":"timeline","data-graview-past":t.past?String(t.past.seq):"now","data-graview-offstage":"",style:{...te,boxSizing:"border-box",display:"grid",gap:8,padding:"10px 12px",borderRadius:10,border:"1px solid var(--graview-edge)",background:"var(--graview-float)",boxShadow:"var(--graview-lift-high)",color:"var(--graview-ink)",fontSize:"0.8125rem"},children:[(0,o.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",alignItems:"baseline",gap:"4px 12px"},children:[(0,o.jsx)("strong",{"data-testid":"as-of",role:"status",style:{fontWeight:600},children:f?"Archived changes":v?`As of ${v}`:"Now"}),(0,o.jsx)("span",{"data-testid":"timeline-caption",style:{color:"var(--graview-ink-muted)",minWidth:0,overflowWrap:"anywhere"},children:$}),v?(0,o.jsx)("span",{style:{color:"var(--graview-ink-faint)"},"data-testid":"past-read-only",children:"Nothing changes while you look back."}):null]}),(0,o.jsxs)("div",{style:{position:"relative",height:22},"aria-hidden":"true",children:[h?(0,o.jsx)("span",{"data-testid":"timeline-archived",title:"Changes read from the archive as you scrub back",style:{position:"absolute",left:0,bottom:0,height:6,width:`${b===0?0:m.indexOf(l)/b*100}%`,borderRadius:2,background:"var(--graview-edge)"}}):null,m.slice(1).map((a,g)=>{let u=[...d].reverse().find(ne=>ne.seq===a);if(!u)return null;let P=b===0?0:(g+1)/b*100;return(0,o.jsx)("span",{"data-graview-tick":a,"data-maker":u.maker,...u.declaration?{"data-declaration":""}:{},title:`${E[u.maker]}: ${u.said}`,style:{position:"absolute",left:`calc(${P}% - 1px)`,bottom:0,width:u.declaration?4:2,height:u.declaration?22:12,borderRadius:2,background:u.declaration?"var(--graview-ink)":Z[u.maker],opacity:a<=y?1:.45}},`${a}:${u.batch??"declaration"}`)})]}),(0,o.jsx)("input",{type:"range","data-testid":"scrubber","aria-label":"Moment",min:0,max:b,step:1,value:w,"aria-valuetext":v?`As of ${v}. ${$}`:`Now. ${$}`,onChange:a=>{A(!1),t.show(m[Number(a.currentTarget.value)]??s)},style:{width:"100%",margin:0,accentColor:"var(--graview-accent)"}}),(0,o.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:8},children:[(0,o.jsx)("button",{type:"button","data-testid":"play","aria-pressed":k,onClick:()=>{!k&&w>=b&&t.show(m[0]),A(!k)},style:{minHeight:28,minWidth:64},children:k?"Pause":"Play"}),(0,o.jsxs)("label",{style:{display:"inline-flex",alignItems:"center",gap:6,color:"var(--graview-ink-muted)"},children:["Speed",(0,o.jsx)("select",{"data-testid":"speed",value:T,onChange:a=>ee(Number(a.currentTarget.value)),style:{minHeight:28},children:ie.map(a=>(0,o.jsxs)("option",{value:a,children:[a,"\xD7"]},a))})]}),(0,o.jsx)("span",{"aria-hidden":"true",style:{display:"inline-flex",gap:10,color:"var(--graview-ink-faint)",flexWrap:"wrap"},children:Object.keys(E).filter(a=>d.some(g=>g.maker===a)).map(a=>(0,o.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[(0,o.jsx)("span",{style:{width:8,height:8,borderRadius:2,background:Z[a]}}),E[a]]},a))}),(0,o.jsxs)("span",{style:{marginLeft:"auto",display:"inline-flex",gap:8},children:[z?(0,o.jsx)("button",{type:"button","data-testid":"restore-here",title:"Take back every change since, as one change you can undo",onClick:()=>{W(null);try{e.undo([...z],{author:i,intent:v?`Restore to ${v}`:"Restore"}),t.show(null)}catch(a){W(a instanceof Error?a.message:String(a))}},style:{minHeight:28},children:"Restore to here"}):null,(0,o.jsx)("button",{type:"button","data-testid":"back-to-now",onClick:()=>t.show(null),style:{minHeight:28},children:"Back to now"})]})]}),C?(0,o.jsx)("span",{role:"alert","data-testid":"restore-refused",style:{color:"var(--graview-warn)"},children:C}):null,f?.refused?(0,o.jsx)("span",{role:"alert","data-testid":"archive-refused",style:{color:"var(--graview-warn)"},children:f.refused}):null,x?(0,o.jsxs)("span",{"data-testid":"timeline-kept",style:{color:"var(--graview-ink-faint)"},children:[x.sentence,x.action?(0,o.jsxs)(o.Fragment,{children:[" ",(0,o.jsx)("a",{"data-testid":"timeline-kept-action",href:x.action.href,style:{color:"var(--graview-ink-muted)"},children:x.action.label})]}):null]}):null,l>0&&!h?(0,o.jsx)("span",{"data-testid":"timeline-horizon",style:{color:"var(--graview-ink-faint)"},children:"The changes before the timeline's start were archived."}):null]})}export{we as Timeline};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
var __graviewPreload=(base,files)=>{if(typeof document>"u")return;const asked=globalThis.__graviewPreloaded??=new Set;for(const file of files){const href=new URL(file,base).href;if(asked.has(href))continue;asked.add(href);const link=document.createElement("link");link.rel="modulepreload";link.href=href;document.head.append(link)}};import{a as Ft,b as _t,c as Kt,d as Gn}from"./chunk.2RASWDMQ.js";import{a as qt}from"./chunk.XCWZFLIB.js";import{a as Hn,b as It,c as Vn,d as Bt,e as Wt,f as Ht}from"./chunk.6YK5E7ZQ.js";import{c as Ut,g as Yt,h as Qt,i as Jt}from"./chunk.AWUO3M5D.js";import{e as Tt}from"./chunk.A2R53GWF.js";import{m as zt}from"./chunk.QAMW5QDT.js";import{a as Nt,b as Dt}from"./chunk.B5PJCYBU.js";import{f as Lt,h as Pt}from"./chunk.Q2EGESEZ.js";import{e as Mt}from"./chunk.SMHP2CQH.js";import{a as Vt,b as tn,c as Gt,d as jt}from"./chunk.72YXFJKC.js";import{b as Ot,c as me,d as ke,e as ze}from"./chunk.MBB5A6BT.js";import{e as At,l as Rt}from"./chunk.XYGNS637.js";import{l as Et,m as Wn}from"./chunk.WUVXIUA7.js";import{f as In,g as Bn}from"./chunk.REUMBCSV.js";import{d as $t}from"./chunk.2KIWGQXC.js";import{h as Fe,j as Ct}from"./chunk.KZUMXT5J.js";import{G as Ee,Na as kt,Oa as nn,T as te,W as bt,ba as oe,ca as xt,da as St,l as en}from"./chunk.CYTTZOYL.js";import{$ as ct,$a as ft,$d as vt,Ab as Dn,Dd as zn,G as st,I as lt,Pc as be,Wa as mt,Z as cn,_ as dt,_a as pt,aa as Tn,ab as ht,ba as ut,ca as Xe,id as Ze,jd as wt,ka as Ge,la as xe,na as qe,oa as un,pa as gn,pd as Te,qc as yt,ra as Nn,sa as gt,ta as mn}from"./chunk.Q4MI53KK.js";import{b as q}from"./chunk.AJZBJBMO.js";var Qr=q(Ee(),1);var jn=q(te(),1);function Ie(e,t,n){let r=e.nodes?.length??0;if(e.total===void 0||e.total<=r)return n;let a=e.nodes?.[0]?.kind,i=a?un(t,a).toLowerCase():"more";return(0,jn.jsxs)("div",{style:{display:"grid",gridTemplateRows:"minmax(0, 1fr) auto",height:"100%",minHeight:0},children:[n,(0,jn.jsxs)("p",{"data-testid":"lens-more",style:{margin:"4px 0 0",fontSize:"0.8125rem",color:"var(--graview-ink-muted)"},children:["+",e.total-r," more ",i]})]})}var ar=q(Ee(),1);var rn=q(Ee(),1);var Xt=e=>`place:${e}`;function Zt(e,t){(0,rn.useEffect)(()=>{if(e===void 0)return;let n=globalThis[Symbol.for("graview.shown-lists")]??=new Map;return n.set(e,()=>t),()=>void n.delete(e)})}var er=e=>(__graviewPreload(import.meta.url,["./chunk.AJZBJBMO.js"]),import("./chunk.6YGRRXJB.js")).then(t=>t.saveShownList(e.read()));function nr(e,t,n){let r={off:e,about:t,read:n,menu:(a,i,s)=>[...e?[]:[{id:"export-csv",label:"Export CSV",run:()=>void er(r)}],...a&&i?[{id:e?"export-on":"export-off",label:e?"Turn on export":"Turn off export",run:()=>void (__graviewPreload(import.meta.url,["./chunk.AJZBJBMO.js"]),import("./chunk.6YGRRXJB.js")).then(p=>p.switchExport(r,i,e,s))}]:[]]};return r}function tr({said:e}){return(0,rn.createElement)("button",{type:"button",className:"graview-arrange-open","data-testid":"arrange-export","aria-label":"Export CSV",title:"Export CSV",onClick:()=>void er(e)},(0,rn.createElement)("span",{"aria-hidden":"true"},"\u2193"),"CSV")}var rr=q(Ee(),1),pn=(0,rr.createContext)(null);var qn=q(te(),1),Xr=(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}},Zr=["sort","filter","group","q","archived"];function Ne(e,t={}){let{store:n,onExport:r}=oe(),a=(0,ar.useContext)(pn),{view:i,go:s}=nn(),c=Zr.some(E=>i.within?.[E]!==void 0)?Nt(i):t.arrangedBy??{},b=e.nodes??[],u=t.kind??b[0]?.kind??e.node?.kind,w=c.archived!==void 0&&c.archived!==!1&&u!==void 0&&!t.subject?n.graph.nodesOfKind(u,{archived:c.archived}):b,h=t.subject??(t.only?w.filter(t.only):w),o=t.subject?[]:t.only?w.filter(E=>!t.only(E)):[],l=t.kind??h[0]?.kind,C=Xr(t.allow,t.lensAllows),g=l?Mt(n.schema,String(l)):void 0,S=g?Lt(c,g).arrangement:{},A=Pt(h,C===!1?{}:S,{schema:n.schema,graph:n.graph,flagged:new Set(e.flagged??[]),...t.search?{searchIn:t.search}:{}}),L=e.retired!==void 0&&e.retired>0&&(b[0]?.kind??l)===l?e.retired:0,T=e.fidelity==="full"&&e.budget===void 0,v=l!==void 0&&T&&t.exportable!==!1,O=nr(a?.export===!1,{lens:a?.title??"",...a?.on!==void 0?{on:a.on}:{}},()=>({title:a?.title??gn(n.schema,String(l)),schema:n.schema,graph:n.graph,kind:String(l),groups:A.groups,grouped:A.grouped,onExport:r,words:{labelOf:xe,readableFields:$t,withComputed:Rt}}));Zt(a&&v?Xt(a.as):void 0,O);let m=l&&C!==!1&&T&&(h.length>1||L>0)?(0,qn.jsx)(zt,{schema:n.schema,graph:n.graph,kind:String(l),arrangement:S,allow:C,query:t.query!==!1,...t.filters?{filters:t.filters,chips:{nodes:h,flagged:new Set(e.flagged??[])}}:{},onChange:E=>s(Dt(i,E)),kept:{shown:A.nodes.length,of:h.length},...L>0?{past:{count:L,widen:()=>s(Tt(i,!0))}}:{},...v&&!O.off?{end:(0,qn.jsx)(tr,{said:O})}:{}}):null;return{nodes:[...o,...A.nodes],arranged:A,arrangement:S,bar:m}}function _e(e,t,n){let r=new Set((n??[]).map(i=>i.kind)),a=new Set((n??[]).map(i=>i.id));return e.allNodes().filter(i=>r.has(i.kind)?a.has(i.id):Ge(t.tryDefinition(i.kind),i))}var Be=q(Ee(),1);var j=q(te(),1),ea=["slots","x","y","fill"],fn=class extends Error{constructor(n,r){super(`${n}
|
|
2
|
+
${r}`);this.hint=r;this.name="BoardBindingError"}},ir=e=>Math.max(0,Math.min(1,e));function Fn(e,t,n,r){let a=l=>l,i=l=>r?xe(r.tryDefinition(l.kind),l):String(a(l).label??l.id);if(r&&r.tryDefinition(n.slots)===void 0)throw new fn(`No kind is declared for "${n.slots}".`,'Check the lens bindings: { slots: "<kind>", x: "<field>", y: "<field>", fill: "<edge kind>" }');let s=e.filter(l=>l.kind===n.slots);if(!r&&s.length===0)throw new fn(`Nothing to arrange: no "${n.slots}" nodes.`,'Check the lens bindings: { slots: "<kind>", x: "<field>", y: "<field>", fill: "<edge kind>" }');let p=t.filter(l=>l.kind===n.fill),c=new Map(e.map(l=>[l.id,l])),b=new Map(e.map((l,C)=>[l.id,C])),u=s.map(l=>{let C=a(l),g=n.fillFrom==="occupant",S=p.filter(A=>(g?A.to:A.from)===l.id).map(A=>c.get(g?A.from:A.to)).filter(A=>A!==void 0).sort((A,L)=>(b.get(A.id)??0)-(b.get(L.id)??0)).map(A=>({id:A.id,label:i(A)}));return{id:l.id,code:String(C[n.slotCode??""]??"").trim()||i(l),label:i(l),x:ir(Number(C[n.x]??.5)),y:ir(Number(C[n.y]??.5)),occupants:S}}).sort((l,C)=>l.y-C.y||l.x-C.x),w=new Set(u.flatMap(l=>l.occupants.map(C=>C.id))),h=new Set([...w].map(l=>c.get(l)?.kind).filter(l=>l!==void 0)),o=e.filter(l=>h.has(l.kind)&&!w.has(l.id)).map(l=>({id:l.id,label:i(l)})).sort((l,C)=>l.label<C.label?-1:l.label>C.label?1:0);return{slots:u,empty:u.filter(l=>l.occupants.length===0).map(l=>l.id),spare:o}}function na({nodes:e,occupants:t,label:n,fidelity:r,mode:a,options:i,schema:s,implicated:p=[],flagged:c=[]}){let{store:b}=oe(),u=_e(b.graph,b.schema,e),w=t?[...u.filter(d=>d.kind===i.slots),...t.map(d=>b.graph.getNode(d)).filter(d=>d!==void 0)]:u,h=Fn(w,b.graph.allEdges(),i,s),o=new Set(p),l=new Set(c),C=kt(),g=new Map;for(let d of C)for(let y of d.nodeIds)g.set(y,[...g.get(y)??[],d.message]);let S=d=>d?g.get(d)??[]:[];if(r==="glyph")return(0,j.jsx)(ke,{label:`${n??"Board"} \xB7 ${h.slots.length-h.empty.length}/${h.slots.length}`,hue:be("board")});if(r==="summary"){let d=h.slots.filter(y=>h.empty.includes(y.id));return(0,j.jsx)(me,{title:n??"Board",meta:`${h.slots.length-h.empty.length}/${h.slots.length}`,tone:d.length>0?"warning":"muted",fit:!0,children:d.length>0?(0,j.jsx)(ze,{pick:!0,max:5,items:d.map(y=>({id:y.id,label:y.code}))}):(0,j.jsx)("span",{style:{fontSize:"0.8125rem",color:"var(--graview-ink-faint)"},children:"Every slot filled."})})}let A=i.aspect??.68,L=(0,Be.useRef)(null),[T,v]=(0,Be.useState)(!1),[O,m]=(0,Be.useState)(null),E=160,[D,G]=(0,Be.useState)(!1);(0,Be.useEffect)(()=>{let d=L.current;if(!d||typeof ResizeObserver>"u")return;let y=new ResizeObserver(x=>{let R=x[0]?.contentRect;if(!R)return;let f=R.height<E;G(f),v(!f&&A<1&&R.width/R.height>1.3),m(f?null:R.height)});return y.observe(d),()=>y.disconnect()},[A]);let k=(d,y)=>T?{x:1-y,y:d}:{x:d,y},_=(()=>{let d=new Map,y=(x,R,f)=>{let $=d.get(f)??{ids:[],codes:[]};$.ids.includes(x)||($.ids.push(x),$.codes.includes(R)||$.codes.push(R)),d.set(f,$)};for(let x of h.slots){for(let R of S(x.id))y(x.id,x.code,R);for(let R of x.occupants)for(let f of S(R.id))y(R.id,R.label,f)}return[...d.entries()].map(([x,R])=>({id:R.ids[0],code:R.codes.join(", "),text:x}))})(),W=a==="fullscreen",le=_.length===0?null:(0,j.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:[_.slice(0,W?6:2).map(d=>(0,j.jsxs)("li",{"data-graview-pick":d.id,"data-graview-emphasis":o.size===0?"plain":o.has(d.id)?"lit":"dimmed",title:d.text,style:{display:W?"grid":"flex",gap:W?1:7,alignItems:W?"start":"baseline",fontSize:"0.8125rem",lineHeight:1.45,color:"var(--graview-ink-muted)",minHeight:24,width:"fit-content",maxWidth:"100%",padding:W?"2px 0":"3px 6px",marginLeft:W?0:-6,borderRadius:7,cursor:"pointer"},children:[(0,j.jsxs)("span",{style:{flex:"0 0 auto",fontWeight:600,color:"var(--graview-warn)",letterSpacing:"0.02em"},children:["\u26A0 ",d.code]}),(0,j.jsx)("span",{style:{minWidth:0,...W?{}:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},children:d.text})]},d.id)),_.length>(W?6:2)?(0,j.jsxs)("li",{style:{fontSize:"0.8125rem",color:"var(--graview-ink-faint)"},children:["+",_.length-(W?6:2)," more"]}):null]}),ee=i.arrange==="shelf",ie=h.slots.every(d=>d.code.length<=3&&!/\s/.test(d.code)),N=(d,y)=>{let x=d.occupants.length===0,R=o.size>0&&!o.has(d.id)&&!d.occupants.some(Q=>o.has(Q.id)),f=l.has(d.id),$=d.occupants.some(Q=>l.has(Q.id)),P=f,ne=[...S(d.id),...d.occupants.flatMap(Q=>S(Q.id))],H=d.occupants.length===1?d.occupants[0]:null,K=i.pickTarget==="slot"?d.id:H?H.id:d.id,J=Q=>H?{}:{"data-graview-pick":Q.id,"data-graview-emphasis":o.size===0?"plain":R?"dimmed":"lit"},Y=Q=>l.has(Q.id)?"var(--graview-warn)":"var(--graview-ink-muted)",ue=i.emptyLabel??"empty";return(0,j.jsxs)("div",{"data-graview-pick":K,"data-graview-slot":d.id,"data-graview-mark":ie?"disc":"token","data-graview-flagged":f&&$?"both":f?"slot":$?"occupant":void 0,"data-graview-emphasis":o.size===0?"plain":R?"dimmed":"lit",title:[x?`${d.label} \u2014 nobody in it`:`${d.occupants.map(Q=>Q.label).join(", ")} at ${d.label}`,...ne].join(`
|
|
3
|
+
`),style:{...y,display:"grid",justifyItems:ie?"center":"start",gap:3,opacity:R?.5:1,transition:"opacity 160ms ease"},children:[ie?(0,j.jsxs)("span",{style:{position:"relative",width:34,height:34,borderRadius:999,display:"grid",placeItems:"center",fontSize:"0.75rem",letterSpacing:"0.02em",border:x?"1.5px dashed var(--graview-warn)":`1px solid ${P?"var(--graview-warn)":"var(--graview-edge-bright)"}`,background:x?"transparent":P?"var(--graview-panel-warning)":"var(--graview-panel)",color:x||P?"var(--graview-warn)":"var(--graview-ink)",boxShadow:x?void 0:"var(--graview-lift-low)"},children:[d.code,f&&!x?(0,j.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,j.jsxs)("span",{style:{display:"grid",gap:1,minWidth:0,maxWidth:180,padding:"5px 10px 6px",borderRadius:8,border:x?"1.5px dashed var(--graview-warn)":`1px solid ${P?"var(--graview-warn)":"var(--graview-edge-bright)"}`,background:x?"transparent":P?"var(--graview-panel-warning)":"var(--graview-panel)",boxShadow:x?void 0:"var(--graview-lift-low)"},children:[(0,j.jsxs)("span",{style:{fontSize:"0.8125rem",fontWeight:550,lineHeight:1.25,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",color:x||P?"var(--graview-warn)":"var(--graview-ink)"},children:[d.code,f&&!x?" \u26A0":null]}),x?(0,j.jsx)("span",{style:{fontSize:"0.75rem",lineHeight:1.3,color:"var(--graview-warn)"},children:ue}):(0,j.jsx)("span",{style:{display:"flex",flexWrap:"wrap",gap:"0 8px",fontSize:"0.75rem",lineHeight:1.3},children:d.occupants.map(Q=>(0,j.jsxs)("span",{...J(Q),style:{whiteSpace:"nowrap",color:Y(Q)},children:[Q.label,l.has(Q.id)?" \u26A0":""]},Q.id))})]}),ie?x?(0,j.jsx)("span",{style:{fontSize:"0.75rem",whiteSpace:"nowrap",color:"var(--graview-warn)"},children:ue}):d.occupants.map(Q=>(0,j.jsxs)("span",{...J(Q),style:{fontSize:"0.75rem",whiteSpace:"nowrap",color:Y(Q)},children:[Q.label,l.has(Q.id)?" \u26A0":""]},Q.id)):null]},d.id)},U=i.zones??[],de=U.map((d,y)=>({label:d.label,slots:h.slots.filter(x=>x.y>=d.from&&(x.y<d.to||y===U.length-1&&x.y<=d.to))})),B=new Set(de.flatMap(d=>d.slots.map(y=>y.id))),we=h.slots.filter(d=>!B.has(d.id));(we.length>0||de.length===0)&&de.push({label:"",slots:we});let M={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,j.jsxs)(me,{title:n??"Board",meta:h.slots.length===0?void 0:h.empty.length===0?`all ${h.slots.length} filled`:`${h.empty.length} unfilled`,...W?{style:{flex:"1 1 auto",minHeight:0,height:"100%"}}:{},children:[(0,j.jsxs)("div",{ref:L,style:{display:"flex",gap:28,alignItems:"stretch",justifyContent:"center",flex:"1 1 auto",minHeight:0},children:[W&&le?(0,j.jsxs)("div",{style:{width:260,flex:"0 0 auto",alignSelf:"center",display:"grid",gap:8},children:[(0,j.jsx)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.14em",textTransform:"uppercase",color:"var(--graview-ink-faint)"},children:"What is marked"}),le]}):null,ee?(0,j.jsx)("div",{"data-graview-primitive":"board","data-graview-arrange":"shelf",style:{...M,overflow:"auto",flex:"1 1 auto",minWidth:0,alignSelf:"stretch",display:"grid",alignContent:"start"},children:de.map((d,y)=>(0,j.jsxs)("section",{"data-graview-zone":d.label||void 0,style:{display:"grid",gap:8,padding:"10px 14px 14px",...y>0?{borderTop:"1px dashed var(--graview-edge)"}:{}},children:[d.label?(0,j.jsx)("span",{style:{fontSize:"0.6875rem",letterSpacing:"0.14em",textTransform:"uppercase",color:"var(--graview-ink-faint)"},children:d.label}):null,d.slots.length>0?(0,j.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:"10px 12px",alignItems:"flex-start"},children:d.slots.map(x=>N(x,{}))}):(0,j.jsx)("span",{style:{fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:"nothing here"})]},d.label||`band-${y}`))}):(0,j.jsxs)("div",{style:{display:"flex",gap:5,alignItems:"stretch",minWidth:0,...D?{flex:"1 1 auto",alignSelf:"flex-start"}:{}},children:[!T&&U.length>0?(0,j.jsx)("div",{"aria-hidden":"true",style:{position:"relative",width:15,flex:"0 0 auto",alignSelf:"stretch"},children:U.map(d=>(0,j.jsx)("span",{title:d.label,style:{position:"absolute",top:`${d.from*100}%`,height:`${(d.to-d.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:d.label},d.label))}):null,(0,j.jsxs)("div",{"data-graview-primitive":"board","data-graview-arrange":"exact",style:{...M,position:"relative",aspectRatio:`${T?1/A:A}`,...D?{width:"100%",height:"auto",flex:"1 1 auto",minWidth:0,alignSelf:"flex-start"}:{height:"100%",flex:"0 1 auto",...O!==null?{width:Math.round(O*(T?1/A:A))}:{}},maxWidth:"100%"},children:[U.map(d=>(0,j.jsx)("div",{"aria-hidden":"true",style:{position:"absolute",...T?{top:0,bottom:0,left:`${(1-d.to)*100}%`,width:`${(d.to-d.from)*100}%`,borderLeft:"1px dashed var(--graview-edge)"}:{left:0,right:0,top:`${d.from*100}%`,height:`${(d.to-d.from)*100}%`,borderBottom:"1px dashed var(--graview-edge)"}}},d.label)),T?U.map(d=>(0,j.jsx)("span",{"aria-hidden":"true",title:d.label,style:{position:"absolute",bottom:3,left:`${(1-d.to)*100}%`,width:`${(d.to-d.from)*100}%`,textAlign:"center",fontSize:"0.6875rem",letterSpacing:"0.14em",textTransform:"uppercase",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",color:"var(--graview-ink-faint)"},children:d.label},`label-${d.label}`)):null,h.slots.map(d=>N(d,{position:"absolute",left:`${k(d.x,d.y).x*100}%`,top:`${k(d.x,d.y).y*100}%`,transform:"translate(-50%, -50%)",width:"max-content",maxWidth:"100%"}))]})]}),h.spare.length>0?(0,j.jsxs)("div",{style:{display:"grid",gap:6,alignContent:"start",minWidth:0},children:[(0,j.jsx)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.14em",textTransform:"uppercase",color:"var(--graview-ink-faint)"},children:"Not in"}),(0,j.jsx)(ze,{pick:!0,max:10,items:h.spare.map(d=>({...d,emphasis:o.size===0?"plain":o.has(d.id)?"lit":"dimmed"}))})]}):null]}),W?null:le]})}function or(e){function t(n){let{store:r}=oe(),a=Fn(_e(r.graph,r.schema,n.nodes),r.graph.allEdges(),e,r.schema),s=[...a.slots.flatMap(u=>u.occupants.map(w=>w.id)),...a.spare.map(u=>u.id)].map(u=>r.graph.getNode(u)).filter(u=>u!==void 0),{arranged:p,bar:c}=Ne(n,{...e.arranging!==void 0?{allow:e.arranging}:{},lensAllows:{group:!1},...e.arrangedBy?{arrangedBy:e.arrangedBy}:{},subject:s}),b=(0,j.jsx)(na,{schema:r.schema,...n,options:e,...e.arranging===!1?{}:{occupants:p.nodes.map(u=>u.id)}});return Ie(n,r.schema,c?(0,j.jsxs)("div",{style:{display:"grid",gap:6,height:"100%",minHeight:0,gridTemplateRows:"auto 1fr"},children:[c,b]}):b)}return{name:"board",requiredRoles:[...ea],options:e,View:t,build(n,r,a){return Fn(n,r,e,a)}}}var Cn=q(Ee(),1);var sr=864e5;function ta(e){if(typeof e!="string")return null;if(In(e))return Bn(e)?.day??null;let t=/^(\d{4}-\d{2}-\d{2})/.exec(e);return t?t[1]:null}function _n(e){if(typeof e=="string"&&st.test(e))return e.length===4?null:lt(e)??null;let t=ta(e);return t===null?null:{from:t,to:t}}var lr=e=>typeof e=="string"&&/^\d{4}$/.test(e);function yn(e){if(typeof e!="string")return null;if(In(e))return Bn(e)?.minutes??null;let t=/^\d{4}-\d{2}-\d{2}[T ](\d{2}):(\d{2})/.exec(e);return t?Number(t[1])*60+Number(t[2]):null}var hn=e=>Date.UTC(Number(e.slice(0,4)),Number(e.slice(5,7))-1,Number(e.slice(8,10))),wn=e=>new Date(e).toISOString().slice(0,10);function Ae(e,t){return wn(hn(e)+t*sr)}function je(e,t){let n=Number(e.slice(0,4)),r=Number(e.slice(5,7))-1+t,a=Number(e.slice(8,10)),i=new Date(Date.UTC(n,r+1,0)).getUTCDate();return wn(Date.UTC(n,r,Math.min(a,i)))}var Kn=e=>new Date(hn(e)).getUTCDay();function Ke(e,t=1){let n=(Kn(e)-t+7)%7;return Ae(e,-n)}var Un=e=>`${e.slice(0,7)}-01`;function ye(e,t){return Math.round((hn(t)-hn(e))/sr)}function Ue(e,t){return Array.from({length:t},(n,r)=>Ae(e,r))}var dr=e=>ut(e,"short"),De=e=>dt(e,{weekday:"short"}),Yn=e=>Xe(e);function We(e,t){let n=t?.fieldRoles?.when;return e&&!e.start&&n?{...e,start:n}:e}function cr(e,t){return t===void 0?!1:typeof t=="string"?e[t]===!0:t.is.includes(e[t.field])}var vn=["start"],ra=["day","week","month","quarter","year","agenda"];function bn(e){return e.horizon?["day","week","month","quarter","year","years","agenda"]:ra}function ur(e,t){return e==="years"?t?.title??"Years":`The ${e}`}function gr(){let e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`}var Qn=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 xn(e,t,n){let r=We(t[e.kind],n?.tryDefinition(e.kind));if(!r)return null;let a=e,i=n?.tryDefinition(e.kind)?.fields.shape,s=vn.filter(h=>{let o=r[h];return o?i?!(o in i):!(o in a):!0});if(s.length>0)throw new Qn(e.kind,s);let p=_n(a[r.start]);if(p===null)return null;let c=p.from,b=(r.end?_n(a[r.end])?.to:null)??p.to,u=yn(a[r.start]),w=r.label?a[r.label]:void 0;return{id:e.id,kind:e.kind,label:typeof w=="string"&&w.length>0?w:xe(n?.tryDefinition(e.kind),e),from:c,to:ye(c,b)<0?c:b,at:r.allDay&&a[r.allDay]===!0?null:u,allDay:r.allDay&&a[r.allDay]===!0||u===null,done:cr(a,r.done)}}function mr(e,t,n,r){let a=xn(e,t,n);if(!a)return[];let i=We(t[e.kind],n?.tryDefinition(e.kind)).start,s=e,p=s[i],c=s[mt(i)];if(typeof p!="string"||!pt(c))return[a];let b=ye(a.from,a.to);return("next"in r?[ht(p,c,r.next)]:ft(p,c,{from:Ae(r.from,-b),to:r.to,limit:400})).map(w=>({...a,from:w.slice(0,10),to:Ae(w.slice(0,10),b),repeats:!0}))}function Sn(e,t){return e.filter(n=>ye(n.from,t)>=0&&ye(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 pr(e,t,n){let r=yt(e.schema,e.allMutations()).get(t)?.get(n)??[],a=new Map(e.allMutations().map(s=>[s.name,s]));for(let s of r){let p=a.get(s),c=p?.subject;if(!p||!c)continue;let b=p.input?.shape??{};if(n in b)return{name:p.name,arg:c.arg}}let i=e.allMutations().find(s=>s.derived?.act==="edit"&&s.derived.kind===t);return i?.subject?{name:i.name,arg:i.subject.arg}:null}var fr=(e,t)=>({from:Un(e),to:hr(e),label:Tn(e,{short:!0,year:t})});function hr(e){return wn(Date.UTC(Number(e.slice(0,4)),Number(e.slice(5,7)),0))}function aa(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 yr(e,t,n={}){let r=n.weekStartsOn??1,a=(c,b)=>({from:c,to:c,label:String(Number(c.slice(8,10))),...b?{outside:!0}:{}});if(e==="day")return{title:De(t),grain:"day",columns:1,cells:[a(t)]};if(e==="week"){let c=Ke(t,r);return{title:`${De(c)} \u2013 ${De(Ae(c,6))}`,grain:"day",columns:7,cells:Ue(c,7).map(b=>a(b))}}if(e==="agenda")return{title:`From ${De(t)}`,grain:"day",columns:1,cells:Ue(t,42).map(c=>a(c))};if(e==="quarter"){let c=aa(t),b=hr(je(c,2)),u=[];for(let w=Ke(c,r);ye(w,b)>=0;w=Ae(w,7))u.push({from:w,to:Ae(w,6),label:ct(w),...ye(w,c)>0&&ye(Ae(w,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:u}}if(e==="year"){let c=t.slice(0,4);return{title:c,grain:"month",columns:4,cells:Array.from({length:12},(b,u)=>fr(`${c}-${String(u+1).padStart(2,"0")}-01`,!1))}}if(e==="years"){let c=Number(t.slice(0,4)),b=c+Math.max(1,n.horizon?.years??1)-1,u=n.horizon?.from!==void 0||n.horizon?.to!==void 0,w=u?n.horizon?.from??c:Math.min(c,n.fit?.first??c),o=(u?Math.max(w,n.horizon?.to??w+Math.max(1,n.horizon?.years??1)-1):Math.max(b,n.fit?.last??b))-w+1,l=Array.from({length:o},(C,g)=>String(w+g));return o>ia?{title:`${n.horizon?.title??"Years"} \xB7 ${l[0]}\u2013${l[l.length-1]}`,grain:"year",columns:5,years:l,cells:l.map(C=>({from:`${C}-01-01`,to:`${C}-12-31`,label:C}))}:{title:`${n.horizon?.title??"Years"} \xB7 ${l[0]}\u2013${l[l.length-1]}`,grain:"month",columns:4,years:l,cells:l.flatMap(C=>Array.from({length:12},(g,S)=>fr(`${C}-${String(S+1).padStart(2,"0")}-01`,!0)))}}let i=Un(t),s=Ke(i,r),p=t.slice(0,7);return{title:Tn(t),grain:"day",columns:7,cells:Ue(s,42).map(c=>a(c,c.slice(0,7)!==p))}}function wr(e,t,n){return e.filter(r=>ye(r.from,n)>=0&&ye(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 ia=10;function vr(e){return e==="year"?"year":e==="month"?"month":e==="week"?"week":"day"}var br=q(Ee(),1);var ae=q(te(),1);function Jn({label:e,glyph:t,onPress:n}){return(0,ae.jsx)("button",{type:"button","aria-label":e,title:e,onClick:n,style:Ye,children:t})}var Ye={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"},xr={day:12,week:4,month:3,year:5};function Sr({span:e,weekStartsOn:t,entries:n,today:r,perCell:a,emphasisOf:i,broken:s,hue:p,onOpen:c,onMove:b}){let u=(0,br.useRef)(null),w=Fe(u),h=w===null?e.columns:Math.max(1,Math.floor(w/44)),o=h<e.columns,l=o?h:e.columns,C=!o&&e.grain==="day"&&e.columns===7?Ue(Ke(e.cells[0]?.from??r,t),7):e.grain==="day"&&e.columns===1?e.cells.map(g=>g.from):null;return o&&e.grain==="day"&&e.columns>1?(0,ae.jsx)("div",{ref:u,"data-calendar-shape":"agenda",style:{display:"grid",minHeight:0,flex:1},children:(0,ae.jsx)(kn,{days:e.cells.map(g=>g.from),entries:n,today:r,emphasisOf:i,broken:s,hue:p,onMove:(g,S)=>b(g,{from:S,to:S,label:S},"day")})}):(0,ae.jsxs)("div",{ref:u,"data-calendar-shape":o?"wrapped":"grid",style:{display:"grid",gap:4,gridTemplateRows:C?"auto 1fr":"1fr",minHeight:0,flex:1},children:[C?(0,ae.jsx)("div",{style:{display:"grid",gridTemplateColumns:`repeat(${l}, minmax(0, 1fr))`,gap:4},children:C.map(g=>(0,ae.jsx)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.16em",textTransform:"uppercase",color:"var(--graview-ink-muted)",textAlign:"center"},children:e.columns===7?dr(Kn(g)):De(g)},g))}):null,(0,ae.jsx)("div",{tabIndex:0,"aria-label":`The days of ${e.title}`,style:{display:"grid",gridTemplateColumns:`repeat(${l}, minmax(0, 1fr))`,gridAutoRows:"max-content",gap:4,minHeight:0,overflow:"auto"},children:e.cells.map((g,S)=>{let A=wr(n,g.from,g.to),L=A.slice(0,a),T=A.slice(a),v=T.filter(m=>s.has(m.id)).length,O=ye(g.from,r)>=0&&ye(r,g.to)>=0;return(0,ae.jsxs)("div",{"data-calendar-day":e.grain==="day"?g.from:void 0,"data-calendar-cell":g.from,"data-calendar-grain":e.grain,"data-calendar-count":A.length,"data-calendar-outside":g.outside||void 0,onDragOver:m=>{m.dataTransfer.types.includes("text/graview-node")&&(m.preventDefault(),m.dataTransfer.dropEffect="move")},onDrop:m=>{let E=m.dataTransfer.getData("text/graview-node");E&&(m.preventDefault(),m.stopPropagation(),b(E,g,e.grain))},style:{minHeight:62,display:"flex",flexDirection:"column",gap:2,padding:4,borderRadius:7,border:"1px solid var(--graview-edge)",background:O?"var(--graview-panel)":g.outside?"var(--graview-panel-muted)":"transparent"},children:[(0,ae.jsxs)("span",{style:{display:"flex",alignItems:"baseline",gap:4},children:[(0,ae.jsx)("span",{style:{fontSize:"0.75rem",fontVariantNumeric:"tabular-nums",color:O?"var(--graview-accent)":"var(--graview-ink-faint)"},children:g.label}),e.grain!=="day"&&A.length>0?(0,ae.jsx)("span",{style:{fontSize:"0.75rem",color:"var(--graview-ink-faint)",marginLeft:"auto"},children:A.length}):null]}),L.map(m=>(0,ae.jsx)(kr,{entry:m,cell:g,rowStart:S%l===0,emphasis:i(m.id),flagged:s.has(m.id),hue:p(m)},`${m.id}:${m.from}:${g.from}`)),T.length>0?(0,ae.jsxs)("button",{type:"button","data-testid":`calendar-more-${g.from}`,onClick:()=>c(g),title:`Open ${g.label}`,style:{minHeight:24,padding:"1px 5px",fontSize:"0.75rem",borderRadius:5,border:"1px dashed var(--graview-edge)",background:"transparent",color:v>0?"var(--graview-warn)":"var(--graview-ink-muted)",textAlign:"left"},children:["+",T.length," more",v>0?` \xB7 ${v} flagged`:""]}):null]},g.from)})})]})}function kn({days:e,entries:t,today:n,emphasisOf:r,broken:a,hue:i,onMove:s}){let p=e.map(c=>({day:c,here:Sn(t,c)})).filter(({here:c})=>c.length>0);return p.length===0?(0,ae.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,ae.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:p.map(({day:c,here:b})=>(0,ae.jsxs)("li",{"data-calendar-day":c,onDragOver:u=>{u.dataTransfer.types.includes("text/graview-node")&&(u.preventDefault(),u.dataTransfer.dropEffect="move")},onDrop:u=>{let w=u.dataTransfer.getData("text/graview-node");w&&(u.preventDefault(),u.stopPropagation(),s(w,c))},style:{display:"grid",gap:4},children:[(0,ae.jsxs)("span",{style:{fontSize:"0.75rem",letterSpacing:"0.16em",textTransform:"uppercase",color:c===n?"var(--graview-accent)":"var(--graview-ink-muted)"},children:[De(c),c===n?" \xB7 today":""]}),b.map(u=>(0,ae.jsx)(kr,{entry:u,cell:{from:c,to:c,label:c},emphasis:r(u.id),flagged:a.has(u.id),hue:i(u)},`${u.id}:${u.from}:${c}`))]},c))})}function kr({entry:e,cell:t,emphasis:n,flagged:r,hue:a,rowStart:i=!1}){let s=ye(t.from,e.from)>=0,p=ye(e.to,t.to)>=0,c=!(s&&p),b=e.at!==null&&s&&e.from===t.from?`${Yn(e.at)} ${e.label}`:e.label;return(0,ae.jsx)("span",{"data-graview-pick":e.id,"data-calendar-entry":e.id,"data-calendar-repeat":e.repeats?e.from:void 0,draggable:!e.repeats,onDragStart:u=>{u.dataTransfer.setData("text/graview-node",e.id),u.dataTransfer.effectAllowed="move"},"data-graview-emphasis":n,"data-calendar-part":c?s?"opens":p?"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 ${Yn(e.at)}`}${e.repeats?" \xB7 repeats":""}`,style:{display:"block",minHeight:24,boxSizing:"border-box",padding:"3px 6px",fontSize:"0.75rem",lineHeight:1.35,borderRadius:c?s?"5px 0 0 5px":p?"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:s||i?e.repeats?(0,ae.jsxs)(ae.Fragment,{children:[(0,ae.jsx)("span",{"aria-hidden":"true",children:"\u21BB "}),b]}):b:" "})}var Z=q(te(),1);function oa(e){let t=1/0,n=-1/0;for(let r of e)r&&(t=Math.min(t,Number(r.from.slice(0,4))),n=Math.max(n,Number(r.to.slice(0,4))));return Number.isFinite(t)&&Number.isFinite(n)?{first:t,last:n}:void 0}function Cr(e){let t=n=>function(a){let{store:i}=oe(),{view:s}=nn(),p=n?{...e,range:n}:e,c=s.within?.range??p.range??"month",b=Object.keys(e.bindings),{nodes:u,arranged:w,arrangement:h,bar:o}=Ne(a,{...e.arranging!==void 0?{allow:e.arranging}:{},lensAllows:{sort:!1,group:c==="agenda"},...e.arrangedBy?{arrangedBy:e.arrangedBy}:{},...e.search?{search:e.search}:{},...e.filters?{filters:e.filters}:{},...b[0]?{kind:(a.nodes??[]).find(A=>b.includes(String(A.kind)))?.kind??b[0]}:{}}),l=c==="agenda"&&w.grouped&&h.group?w.groups.map(A=>({label:A.label,ids:new Set(A.nodes.map(L=>L.id))})):void 0,C=new Set((a.nodes??[]).map(A=>String(A.kind))),g=b.filter(A=>!C.has(A)&&i.schema.tryDefinition(A)!==void 0).flatMap(A=>{let L=i.schema.tryDefinition(A);return i.graph.nodesOfKind(A).filter(T=>s.past===!0||Ge(L,T))}),S=g.length===0?u:[...u,...a.budget!==void 0?g.slice(0,a.budget):g];return Ie(a,i.schema,(0,Z.jsx)(sa,{schema:i.schema,...a,nodes:S,options:{...p,today:p.today??i.today()??gr()},...o?{bar:o}:{},...l?{groups:l}:{}}))};return{name:"calendar",requiredRoles:[...vn],bindings:e.bindings,options:e,View:t(),at:n=>t(n),ranges:()=>bn(e).map(n=>({range:n,title:ur(n,e.horizon)})),place:(n,r)=>n.map(a=>xn(a,e.bindings,r)).filter(a=>a!==null)}}function sa({nodes:e,label:t,fidelity:n,mode:r,options:a,schema:i,selectedIds:s=[],implicated:p=[],flagged:c=[],bar:b,groups:u}){let{view:w,go:h}=nn(),{store:o,principal:l}=oe(),C=w.within?.at??a.today,g=w.within?.range??a.range??"month",S=a.weekStartsOn??1,A=new Set([...p,...s]),L=M=>A.size===0?"plain":A.has(M)?"lit":"dimmed",T=new Set(c),v=g==="years"&&w.within?.at===void 0?oa((e??[]).map(M=>xn(M,a.bindings,i))):void 0,O=yr(g,C,{weekStartsOn:S,...a.horizon?{horizon:a.horizon}:{},...v?{fit:v}:{}}),E=n==="glyph"||n==="summary"?{next:a.today}:{from:O.cells[0]?.from??C,to:O.cells[O.cells.length-1]?.to??C},D=(e??[]).flatMap(M=>mr(M,a.bindings,i,E)),G=a.hueOf??(M=>be(M.kind)),k=(e??[]).filter(M=>{let d=We(a.bindings[M.kind],i?.tryDefinition(M.kind));return d!==void 0&&lr(M[d.start])}).length;if(n==="glyph")return(0,Z.jsx)(ke,{label:`${t??"Calendar"} \xB7 ${D.length}`,hue:be("calendar")});if(n==="summary"){let M=Sn(D,a.today);return(0,Z.jsx)(me,{title:t??"Calendar",meta:`${D.length} dated`,tone:"muted",children:(0,Z.jsx)(ze,{max:6,items:M.length>0?M.map(d=>({id:d.id,label:d.label,hue:G(d)})):D.filter(d=>ye(a.today,d.from)>=0).sort((d,y)=>d.from.localeCompare(y.from)).slice(0,6).map(d=>({id:d.id,label:`${d.from.slice(5)} ${d.label}`,hue:G(d)}))})})}let _=r==="fullscreen",[W,le]=(0,Cn.useState)(null),ee=(M,d,y)=>{let x=o.graph.getNode(M);if(!x)return;let R=We(a.bindings[x.kind],o.schema.tryDefinition(x.kind));if(!R)return;let f=pr(o,x.kind,R.start);if(!f){le({text:`Nothing declared writes the ${Nn(o.schema.definitions.find(Y=>Y.kind===x.kind),R.start).toLowerCase()}, so this cannot be moved from here.`,tone:"refused"});return}let $=d.from,P=x[R.start],H=yn(P)===null?$:`${$}${String(P).slice(10)}`,K={name:f.name,args:{[f.arg]:M,[R.start]:H}},J=o.permits(K,l);if(!J.ok){le({text:J.refusal.message,tone:"refused"});return}try{o.apply(K,{author:l}),le(y==="day"?null:{text:`Moved to ${De($)} \u2014 a ${y} is coarser than the ${Nn(o.schema.definitions.find(Y=>Y.kind===x.kind),R.start).toLowerCase()} holds, so it takes the first day of the cell. Undo puts it back.`,tone:"rounded"})}catch(Y){le({text:Y instanceof Error?Y.message:String(Y),tone:"refused"})}},ie=M=>{let d=g==="years"?je(`${O.years?.[0]??C.slice(0,4)}${C.slice(4)}`,M*12*Math.max(1,O.years?.length??a.horizon?.years??1)):g==="year"?je(C,M*12):g==="quarter"?je(C,M*3):g==="month"?je(C,M):g==="week"?Ae(C,M*7):Ae(C,M);h(en(w,"at",d))},N=(M,d)=>{let y=en(w,"range",M);d!==void 0&&(y=en(y,"at",d)),h(y)},U=(0,Cn.useRef)(null),de=Fe(U),B=de!==null&&de<420,we=M=>M==="years"?a.horizon?.title??"years":M.charAt(0).toUpperCase()+M.slice(1);return(0,Z.jsx)(me,{title:t??"Calendar",meta:O.title,style:{gap:10,..._?{flex:"1 1 auto",minHeight:0,height:"100%"}:{}},children:(0,Z.jsxs)("div",{ref:U,"data-testid":"calendar","data-calendar-range":g,"data-calendar-at":C,style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0,gap:8},children:[(0,Z.jsxs)("div",{style:{display:"flex",alignItems:"center",flexWrap:"wrap",gap:6},children:[(0,Z.jsxs)("nav",{"aria-label":"When",style:{display:"flex",gap:4},children:[(0,Z.jsx)(Jn,{label:"Previous",glyph:"\u2039",onPress:()=>ie(-1)}),(0,Z.jsx)("button",{type:"button","data-testid":"calendar-today",onClick:()=>h(en(w,"at",a.today)),style:Ye,children:"Today"}),(0,Z.jsx)(Jn,{label:"Next",glyph:"\u203A",onPress:()=>ie(1)})]}),B?(0,Z.jsx)("select",{"aria-label":"Range","data-testid":"calendar-ranges",value:g,onChange:M=>N(M.target.value),style:{...Ye,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:bn(a).map(M=>(0,Z.jsx)("option",{value:M,children:we(M)},M))}):(0,Z.jsx)("div",{role:"group","aria-label":"Range","data-testid":"calendar-ranges",style:{display:"flex",flexWrap:"wrap",gap:4,marginLeft:"auto"},children:bn(a).map(M=>(0,Z.jsx)("button",{type:"button","aria-pressed":M===g,"data-testid":`calendar-range-${M}`,onClick:()=>N(M),style:{...Ye,borderRadius:999,borderColor:"var(--graview-edge)",...M==="years"?{}:{textTransform:"capitalize"},...M===g?{borderColor:"var(--graview-accent)",color:"var(--graview-accent)",background:"var(--graview-panel)"}:{}},children:M==="years"?a.horizon?.title??"years":M},M))})]}),k>0?(0,Z.jsx)("p",{"data-testid":"calendar-year-only",style:{margin:0,fontSize:"0.8125rem",color:"var(--graview-ink-muted)"},children:k===1?"1 knows only its year, so it is not placed.":`${k} know only their year, so they are not placed.`}):null,W?(0,Z.jsx)("p",{"data-testid":W.tone==="refused"?"calendar-refused":"calendar-rounded",role:"status",style:{margin:0,fontSize:"0.8125rem",color:W.tone==="refused"?"var(--graview-warn)":"var(--graview-ink-muted)"},children:W.text}):null,O.years?(0,Z.jsx)("nav",{"aria-label":"Years","data-testid":"calendar-years",style:{display:"flex",flexWrap:"wrap",gap:4},children:O.years.map(M=>(0,Z.jsx)("button",{type:"button","data-testid":`calendar-year-${M}`,onClick:()=>N("year",`${M}-01-01`),style:Ye,children:M},M))}):null,b,g==="agenda"&&u?(0,Z.jsx)("div",{"data-testid":"calendar-groups",style:{display:"grid",gap:10,minHeight:0,overflow:"auto"},children:u.map(M=>(0,Z.jsxs)("section",{"data-testid":"calendar-group",style:{display:"grid",gap:4},children:[(0,Z.jsxs)("h3",{style:{margin:0,fontSize:"0.8125rem",letterSpacing:"0.08em",textTransform:"uppercase",color:"var(--graview-ink-muted)"},children:[M.label," ",(0,Z.jsx)("span",{style:{fontWeight:400},children:M.ids.size})]}),(0,Z.jsx)(kn,{days:O.cells.map(d=>d.from),entries:D.filter(d=>M.ids.has(d.id)),today:a.today,emphasisOf:L,broken:T,hue:G,onMove:(d,y)=>ee(d,{from:y,to:y,label:y},"day")})]},M.label))}):g==="agenda"?(0,Z.jsx)(kn,{days:O.cells.map(M=>M.from),entries:D,today:a.today,emphasisOf:L,broken:T,hue:G,onMove:(M,d)=>ee(M,{from:d,to:d,label:d},"day")}):(0,Z.jsx)(Sr,{span:O,weekStartsOn:S,entries:D,today:a.today,perCell:a.perCell??xr[O.grain],emphasisOf:L,broken:T,hue:G,onOpen:M=>N(vr(O.grain),M.from),onMove:ee})]})})}var re=q(Ee(),1);var Qe=q(Ee(),1),Re=q(te(),1),$n={padding:"5px 10px",fontSize:"0.875rem",borderRadius:8,width:"100%",textAlign:"left",borderWidth:1,borderStyle:"solid",borderColor:"transparent",background:"none",boxShadow:"none"};function $r({choices:e,close:t}){let[n,r]=(0,Qe.useState)(!1),a=(0,Qe.useRef)(null);return(0,Qe.useLayoutEffect)(()=>{n&&a.current?.querySelector("button:not([disabled])")?.focus()},[n]),(0,Re.jsxs)("div",{children:[(0,Re.jsxs)("button",{type:"button","data-menu-item":"move-to","aria-expanded":n,onClick:()=>r(i=>!i),style:$n,children:["Move to ",(0,Re.jsx)("span",{"aria-hidden":"true",children:"\u203A"})]}),n?(0,Re.jsx)("ul",{ref:a,"aria-label":"Move to","data-testid":"move-to",style:{margin:"2px 0 0 12px",padding:0,listStyle:"none",display:"flex",flexDirection:"column",gap:2},children:e.map(i=>i.run?(0,Re.jsx)("li",{children:(0,Re.jsx)("button",{type:"button","data-move-to":i.to,onClick:()=>{t(),i.run()},style:$n,children:i.label})},i.to):(0,Re.jsxs)("li",{style:{display:"grid",gap:2},children:[(0,Re.jsx)("button",{type:"button",disabled:!0,"data-move-to":i.to,"data-withheld":"",style:{...$n,borderStyle:"dashed"},children:(0,Re.jsx)("s",{children:i.label})}),(0,Re.jsx)("span",{"data-testid":"move-to-why",style:{fontSize:"0.8125rem",lineHeight:1.4,color:"var(--graview-ink-muted)",padding:"0 10px"},children:i.why})]},i.to))}):null]})}function Or({choose:e,close:t}){return(0,Re.jsx)("button",{type:"button","data-menu-item":"choose-several",onClick:()=>{t(),e()},style:$n,children:"Choose several"})}var z=q(te(),1),la=`
|
|
4
|
+
.graview-columns { display: flex; flex-wrap: wrap; gap: 10px; align-items: flex-start; }
|
|
5
|
+
.graview-columns-column { flex: 1 1 13rem; min-width: 0; display: flex; flex-direction: column; gap: 8px; padding: 8px; border-radius: 10px; border: 1px solid var(--graview-edge); background: color-mix(in srgb, var(--graview-panel) 60%, transparent); }
|
|
6
|
+
.graview-columns-column[data-droppable="true"] { border-color: var(--graview-accent); }
|
|
7
|
+
.graview-columns-column[data-over="true"] { background: color-mix(in srgb, var(--graview-accent) 10%, transparent); }
|
|
8
|
+
.graview-columns-heading { margin: 0; display: flex; align-items: baseline; justify-content: space-between; gap: 8px; font-size: 0.875rem; font-weight: 600; color: var(--graview-ink); }
|
|
9
|
+
.graview-columns-count { font-weight: 400; color: var(--graview-ink-muted); font-variant-numeric: tabular-nums; }
|
|
10
|
+
.graview-columns-cards { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
|
|
11
|
+
.graview-columns-empty { margin: 0; font-size: 0.8125rem; color: var(--graview-ink-muted); }
|
|
12
|
+
.graview-columns-card[draggable="true"] { cursor: grab; }
|
|
13
|
+
.graview-columns-card[data-carried="true"] { outline: 2px solid var(--graview-accent); outline-offset: 2px; border-radius: 10px; opacity: 0.6; }
|
|
14
|
+
.graview-columns-slot { min-height: 2.25rem; display: flex; align-items: center; padding: 6px 10px; border-radius: 10px; border: 2px dashed var(--graview-accent); color: var(--graview-ink-muted); font-size: 0.8125rem; }
|
|
15
|
+
.graview-columns-toggle, .graview-columns-rest { font: inherit; display: flex; align-items: baseline; justify-content: space-between; gap: 8px; width: 100%; padding: 0; border: 0; background: none; color: inherit; cursor: pointer; text-align: left; }
|
|
16
|
+
.graview-columns-rest { justify-content: center; font-size: 0.8125rem; color: var(--graview-ink-muted); min-height: 28px; border-radius: 7px; border: 1px dashed var(--graview-edge); }
|
|
17
|
+
.graview-columns-toggle:focus-visible, .graview-columns-rest:focus-visible { outline: 2px solid var(--graview-accent); outline-offset: 2px; }
|
|
18
|
+
.graview-columns-move { position: relative; z-index: ${Te.raised}; display: flex; justify-content: flex-end; margin-top: 4px; }
|
|
19
|
+
.graview-columns-move[data-open="true"] { z-index: ${Te.over}; }
|
|
20
|
+
.graview-columns-move > button, .graview-columns-menu button, .graview-columns-said button { font: inherit; font-size: 0.8125rem; min-height: 28px; padding: 2px 10px; border-radius: 7px; border: 1px solid var(--graview-edge); background: var(--graview-panel); color: var(--graview-ink); cursor: pointer; }
|
|
21
|
+
.graview-columns-move > button:focus-visible, .graview-columns-menu button:focus-visible, .graview-columns-said button:focus-visible { outline: 2px solid var(--graview-accent); outline-offset: 2px; }
|
|
22
|
+
.graview-columns-menu { position: absolute; right: 0; top: calc(100% + 4px); z-index: ${Te.over}; display: flex; flex-direction: column; gap: 4px; padding: 6px; min-width: 10rem; border-radius: 9px; border: 1px solid var(--graview-edge); background: var(--graview-panel); box-shadow: 0 6px 18px rgb(0 0 0 / 0.18); }
|
|
23
|
+
.graview-columns-menu button { text-align: left; }
|
|
24
|
+
.graview-columns-said { margin: 0 0 8px; display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: 0.8125rem; color: var(--graview-ink); }
|
|
25
|
+
.graview-columns-said[data-tone="refused"] { color: var(--graview-warn); }
|
|
26
|
+
.graview-columns-card { position: relative; -webkit-touch-callout: none; }
|
|
27
|
+
.graview-columns-card .graview-choose-at { position: absolute; top: 6px; right: 6px; z-index: ${Te.raised}; display: flex; }
|
|
28
|
+
[data-graview-choosable] { outline: none; }
|
|
29
|
+
@media (pointer: coarse) { [data-graview-choosable]:not([data-graview-choosing]) .graview-columns-card .graview-choose-at { display: none; } }
|
|
30
|
+
`;function Ar(e){function t(n){let{store:r}=oe();St();let a=Object.keys(e.bindings).filter(v=>r.schema.tryDefinition(v)!==void 0),i=n.nodes??[],s=new Set(i.map(v=>String(v.kind))),p=v=>r.graph.nodesOfKind(v).filter(O=>Ge(r.schema.tryDefinition(v),O)),c=n.total!==void 0&&n.total>i.length,b=a[0],u=b===void 0?[]:s.has(b)?i.filter(v=>v.kind===b):p(b),{arranged:w,arrangement:h,bar:o}=Ne(n,{lensAllows:{group:!1},subject:u,...b===void 0?{}:{kind:b},query:e.search!==void 0||u.length>vt,...e.search?{search:e.search}:{},...e.filters?{filters:e.filters}:{}}),l=o?new Map(w.nodes.map((v,O)=>[v.id,O])):void 0,C=(v,O)=>{if(!l||v!==b)return O;let m=O.filter(E=>l.has(E.id));return h.sort===void 0?m:[...m].sort((E,D)=>l.get(E.id)-l.get(D.id))},g=a.map(v=>{let O=e.bindings[v].column,m=Vt(r.schema,v,O),E=(N,U)=>U==="label"?xe(r.schema.tryDefinition(N.kind),N):N[U],D=C(v,Ze(s.has(v)?i.filter(N=>N.kind===v):p(v).slice(0,n.budget??1/0),e.sort,E)),G=p(v),k=s.has(v)&&!c?D:C(v,G),_=new Set(e.hidden??[]),W=r.schema.tryDefinition(v),le=!!h.query||(h.filter?.length??0)>0,ee=new Set([...G,...s.has(v)?i.filter(N=>N.kind===v):[]].map(N=>N.id)),ie=W?.lifecycle&&n.budget===void 0&&n.fidelity==="full"&&!le?r.graph.nodesOfKind(v).filter(N=>!ee.has(N.id)&&!Ge(W,N)):[];return{kind:v,field:O,all:m,born:new Map(G.map((N,U)=>[N.id,U])),columns:m.filter(N=>N.value===null||!_.has(N.value)).map(N=>({column:N,cards:D.filter(U=>tn(U,O,m)===N.value),count:k.filter(U=>tn(U,O,m)===N.value).length,past:ie.filter(U=>tn(U,O,m)===N.value)})).filter(N=>N.column.value!==null||N.count>0||N.past.length>0)}}),S=g.reduce((v,O)=>v+O.columns.reduce((m,E)=>m+E.count,0),0),A=n.label??"Board";if(n.fidelity==="glyph")return(0,z.jsx)(ke,{label:`${A} \xB7 ${S}`,hue:be("columns")});if(n.fidelity==="summary")return(0,z.jsx)(me,{title:A,meta:b?qe(r.schema,b,S):String(S),tone:"muted",children:(0,z.jsx)("p",{style:{margin:0,fontSize:"0.8125rem",color:"var(--graview-ink-muted)"},"data-testid":"columns-summary",children:g.flatMap(v=>v.columns.map(O=>`${O.column.label} ${O.count}`)).join(" \xB7 ")})});let L=(0,z.jsx)(da,{boards:g,title:A,options:e}),T=o?(0,z.jsxs)("div",{style:{display:"grid",gap:6},children:[o,L]}):L;return Ie(n,r.schema,n.mode==="fullscreen"?(0,z.jsx)("div",{style:{padding:"14px 16px"},children:T}):(0,z.jsx)(me,{title:A,meta:b?qe(r.schema,b,S):void 0,children:T}))}return{name:"columns",requiredRoles:["column"],bindings:e.bindings,View:t}}function da({boards:e,title:t,options:n}){let{store:r,principal:a}=oe(),i=(0,re.useRef)(null),[s,p]=(0,re.useState)(null),[c,b]=(0,re.useState)(null),[u,w]=(0,re.useState)(null),[h,o]=(0,re.useState)(null),[l,C]=(0,re.useState)(""),[g,S]=(0,re.useState)(()=>new Set),[A,L]=(0,re.useState)(()=>new Set(n.collapsed??[])),[T,v]=(0,re.useState)(()=>new Set),[O,m]=(0,re.useState)(null),E=(0,re.useId)();(0,re.useLayoutEffect)(()=>{if(!O)return;i.current?.querySelector(O)?.focus(),m(null)});let D=y=>{let x=r.graph.getNode(y);return x?xe(r.schema.tryDefinition(x.kind),x):y},G=(0,re.useMemo)(()=>e.flatMap(y=>y.columns.flatMap(x=>x.cards.map(R=>R.id))),[e]),k=Ft(G),_=(0,re.useMemo)(()=>r.permittedMutations(a).some(y=>{let x=y.subject?.kinds;return x!==void 0&&(x==="*"||e.some(R=>x.includes(R.kind)))}),[r,a,e]),W=y=>{k.choose(y),requestAnimationFrame(()=>{((y[0]===void 0?null:i.current?.querySelector(`[data-graview-choose-box="${an(y[0])}"]`))??i.current)?.focus({preventScroll:!0})})},le=(y,x)=>Gt(r,a,y,x.field,x.columns.map(R=>R.column)),ee=y=>n.move?`[data-columns-move="${an(y)}"] > button`:`[data-graview-listed="${an(y)}"] .graview-spec-item-link`,ie=(y,x,R,f)=>{try{let $=r.apply(x.call,{author:a});p({text:`Moved \u201C${D(y)}\u201D to ${R}.`,tone:"moved",batch:$.batch,id:y}),f==="keyboard"&&m(ee(y)),f==="carry"&&m(`[data-graview-listed="${an(y)}"] .graview-spec-item-link`),f==="menu"&&ca(()=>i.current?.querySelector(`[data-graview-listed="${an(y)}"] .graview-spec-item-link`)??null)}catch($){p({text:$ instanceof Error?$.message:String($),tone:"refused"})}},N=()=>{if(s?.batch)try{r.undo(s.batch,{author:a}),p({text:`\u201C${D(s.id??"")}\u201D is back where it was.`,tone:"moved"}),s.id&&m(ee(s.id))}catch(y){p({text:y instanceof Error?y.message:String(y),tone:"refused"})}},U=(0,re.useRef)({move:ie,boards:e,choosing:k,choosable:_});U.current={move:ie,boards:e,choosing:k,choosable:_},(0,re.useEffect)(()=>{let x=[...new Set(e.map(R=>R.kind))].map(R=>qt({store:r,kind:R,root:()=>i.current,section:(f,$)=>{let P=U.current.boards.find(ue=>ue.kind===R),ne=r.graph.getNode(f);if(!P||!ne)return null;let H=jt(r,$,ne,P.field,P.all).map(ue=>({to:ue.to,label:ue.label,...ue.why!==void 0?{why:ue.why}:{},...ue.move?{run:()=>U.current.move(f,ue.move,ue.label,"menu")}:{}})),{choosing:K,choosable:J}=U.current,Y=J&&K.chosen.length===0&&typeof matchMedia=="function"&&matchMedia("(pointer: coarse)").matches?()=>K.toggle(f):void 0;return H.length===0&&!Y?null:{id:"move-to",at:"start",render:ue=>(0,z.jsxs)(z.Fragment,{children:[H.length>0?(0,z.jsx)($r,{choices:H,close:ue}):null,Y?(0,z.jsx)(Or,{choose:Y,close:ue}):null]})}}}));return()=>x.forEach(R=>R())},[r,e]);let de=(y,x)=>y.all.find(R=>R.value===x)?.label??y.columns.find(R=>R.column.value===x)?.column.label??String(x),B=(y,x,R)=>y.columns.find(f=>f.column.value===x)?.cards.filter(f=>f.id!==R)??[],we=(y,x,R,f)=>{let $=B(y,x,f).length+1;return`${de(y,x)}, ${Math.min(R,$-1)+1} of ${$}.`},M=(y,x,R,f)=>{let $=D(x.id),P=()=>{y.preventDefault(),y.stopPropagation()};if(h?.id!==x.id){if(y.key!==" "||f.length===0||!(y.target instanceof HTMLElement)||!y.target.classList.contains("graview-spec-item-link"))return;P();let H=tn(x,R.field,R.all),K=Math.max(0,R.columns.find(J=>J.column.value===H)?.cards.findIndex(J=>J.id===x.id)??0);o({id:x.id,from:H,to:H,at:K}),C(`${$}, picked up. ${we(R,H,K,x.id)} Arrow keys move it, Space drops it, Escape puts it back.`);return}let ne=R.columns.map(H=>H.column.value).filter(H=>H===h.from||f.some(K=>K.to===H));if(y.key==="ArrowLeft"||y.key==="ArrowRight"){P();let H=ne[ne.indexOf(h.to)+(y.key==="ArrowLeft"?-1:1)];if(H===void 0)return C(`No column further ${y.key==="ArrowLeft"?"left":"right"} takes ${$}. ${we(R,h.to,h.at,x.id)}`);let K=Math.min(h.at,B(R,H,x.id).length);return o({...h,to:H,at:K}),C(we(R,H,K,x.id))}if(y.key==="ArrowUp"||y.key==="ArrowDown"){P();let H=Math.max(0,Math.min(B(R,h.to,x.id).length,h.at+(y.key==="ArrowUp"?-1:1)));return o({...h,at:H}),C(we(R,h.to,H,x.id))}if(y.key===" "||y.key==="Enter"){P(),o(null);let H=h.to===h.from?void 0:f.find(K=>K.to===h.to);return H?(C(`${$}, dropped in ${de(R,h.to)}.`),ie(x.id,H,de(R,h.to),"carry")):C(`${$}, dropped back in ${de(R,h.from)}.`)}if(y.key==="Escape")return P(),o(null),C(`${$}, put back in ${de(R,h.from)}.`)},d=y=>{if(h?.id!==y)return;let x=e.find(R=>R.kind===r.graph.getNode(y)?.kind);o(null),x&&C(`${D(y)}, put back in ${de(x,h.from)}.`)};return(0,z.jsxs)("div",{"data-testid":"columns-lens",..._?{...k.listProps,tabIndex:-1,role:"group","aria-label":k.chosen.length>0?`${t}, ${k.chosen.length} chosen`:t,"data-graview-choosable":""}:{},ref:y=>{i.current=y,k.list.current=y},children:[(0,z.jsx)("style",{children:la}),_?(0,z.jsx)("style",{children:_t}):null,(0,z.jsxs)("p",{className:"graview-columns-said",role:"status","data-tone":s?.tone,"data-testid":"columns-said",style:s?void 0:{position:"absolute",width:1,height:1,overflow:"hidden",clipPath:"inset(50%)"},children:[s?(0,z.jsx)("span",{children:s.text}):null,s?.batch?(0,z.jsx)("button",{type:"button","data-testid":"columns-undo",onClick:N,children:"Undo"}):null]}),(0,z.jsx)("p",{"aria-live":"assertive","data-testid":"columns-announce",style:Ct,children:l}),(0,z.jsx)("span",{id:E,hidden:!0,children:"Space picks it up; the arrow keys carry it between and along the columns; Space drops it and Escape puts it back. Its menu moves it too."}),e.map(y=>(0,z.jsx)("section",{"data-columns-kind":y.kind,"data-columns-field":y.field,"aria-label":`${gn(r.schema,y.kind)} by ${y.field}`,children:(0,z.jsx)("div",{className:"graview-columns",children:y.columns.map(({column:x,cards:R,count:f,past:$})=>{let P=x.value??"",ne=`${y.kind}\0${P}`,H=$.length>0&&T.has(ne),K=H?[...R,...$]:R,J=H?f+$.length:f,Y=$.length>0&&!H?$.length:0,ue=c!==null&&x.value!==null&&c.to.includes(x.value)||h!==null&&h.to!==h.from&&h.to===x.value&&y.columns.some(V=>V.cards.some(ge=>ge.id===h.id)),Q=x.value!==null&&(n.collapsed??[]).includes(x.value),Ve=Q&&A.has(P),pe=n.cap!==void 0&&!g.has(P)&&K.length>n.cap,X=pe?new Set([...K].sort((V,ge)=>(y.born.get(ge.id)??0)-(y.born.get(V.id)??0)).slice(0,n.cap).map(V=>V.id)):null,he=X?K.filter(V=>X.has(V.id)||V.id===h?.id):K,Ce=h!==null&&h.to===x.value&&h.to!==h.from&&y.columns.some(V=>V.cards.some(ge=>ge.id===h.id)),$e=(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)("span",{children:x.label}),(0,z.jsx)("span",{className:"graview-columns-count","data-testid":"columns-count",children:J})]});return(0,z.jsxs)("section",{className:"graview-columns-column","data-graview-column":P,...x.value!==null?{"data-column":`${y.field}:${x.value}`,"data-column-kind":y.kind,"data-column-label":x.label}:{},"data-droppable":ue||void 0,"data-over":ue&&(u===P||Ce)||void 0,"aria-label":`${t} \xB7 ${x.label}, ${J}${Y>0?`, ${cn(Y)} past`:""}`,"data-graview-named-by-lens":"",onDragOver:V=>{ue&&(V.preventDefault(),V.dataTransfer.dropEffect="move",w(P))},onDragLeave:()=>w(V=>V===P?null:V),onDrop:V=>{let ge=V.dataTransfer.getData("text/graview-node"),Se=r.graph.getNode(ge);if(w(null),b(null),!Se||x.value===null)return;let ce=le(Se,y).find(ve=>ve.to===x.value);ce&&(V.preventDefault(),V.stopPropagation(),ie(ge,ce,x.label,"drag"))},children:[(0,z.jsx)("h3",{className:"graview-columns-heading",children:Q?(0,z.jsx)("button",{type:"button",className:"graview-columns-toggle","aria-expanded":!Ve,"data-testid":"columns-toggle",onClick:()=>L(V=>V.has(P)?new Set([...V].filter(ge=>ge!==P)):new Set([...V,P])),children:$e}):$e}),Ve?null:he.length===0&&!Ce?Y>0?null:(0,z.jsx)("p",{className:"graview-columns-empty",children:"Nothing here."}):(0,z.jsx)("ul",{className:"graview-columns-cards",children:(0,z.jsx)(Ut.Provider,{value:x.value===null?null:{field:y.field,values:[x.value,x.label]},children:(()=>{let V=he.map(Se=>{let ce=le(Se,y);return(0,z.jsx)(ua,{card:Se,moves:ce,button:n.move===!0,carried:h?.id===Se.id,...ce.length>0?{describedBy:E}:{},..._?{choosing:k}:{},labelOf:ve=>de(y,ve),onMove:(ve,Oe)=>ie(Se.id,ve,Oe,"keyboard"),onDrag:ve=>b(ve?{id:Se.id,to:ce.map(Oe=>Oe.to)}:null),onCarryKey:ve=>M(ve,Se,y,ce),onLeave:()=>d(Se.id)},Se.id)});if(!Ce)return V;let ge=(0,z.jsx)("li",{className:"graview-columns-slot","data-testid":"columns-slot","aria-hidden":"true",children:D(h.id)},"graview-carried-slot");return[...V.slice(0,h.at),ge,...V.slice(h.at)]})()})}),!Ve&&Y>0?(0,z.jsxs)("button",{type:"button",className:"graview-columns-rest","data-testid":"columns-past",title:`${cn(Y)} more behind the horizon \u2014 press to show them here`,onClick:()=>v(V=>new Set([...V,ne])),children:["+",cn(Y)," past"]}):null,!Ve&&pe?(0,z.jsxs)("button",{type:"button",className:"graview-columns-rest","data-testid":"columns-rest",onClick:()=>S(V=>new Set([...V,P])),children:["Show ",K.length-he.length," more"]}):null]},P)})})},y.kind)),_?(0,z.jsx)(Kt,{store:r,chosen:k.chosen,principal:a,anchor:()=>i.current?.closest('[data-testid="kind-stop"], [data-embed-content]')??null,of:G.length,onChooseAll:()=>k.choose(G),onClear:k.clear,onActed:W}):null]})}var an=e=>typeof globalThis.CSS?.escape=="function"?globalThis.CSS.escape(e):e.replace(/["\\]/g,"\\$&");function ca(e){let t=0,n=()=>{let r=e(),a=typeof document>"u"?null:document.activeElement;r&&a!==r&&(a===null||a===document.body||a.closest("[data-graview-menu-home], [data-graview-page-title], h1, main")!==null||!a.isConnected)&&r.focus({preventScroll:!0}),++t<6&&requestAnimationFrame(n)};requestAnimationFrame(n)}function ua({card:e,moves:t,button:n,carried:r,describedBy:a,labelOf:i,onMove:s,onDrag:p,onCarryKey:c,onLeave:b,choosing:u}){let{store:w,views:h}=oe(),[o,l]=(0,re.useState)(!1),C=(0,re.useRef)(null),g=(0,re.useRef)(null),S=xe(w.schema.tryDefinition(e.kind),e),A=h.lookup(e.kind,{cardinality:"one",fidelity:"summary"});(0,re.useLayoutEffect)(()=>{o&&C.current?.querySelector("button")?.focus()},[o]);let L=()=>{l(!1),g.current?.focus()},T=v=>{let O=[...C.current?.querySelectorAll("button")??[]],m=O.indexOf(document.activeElement);v.key==="Escape"?(v.preventDefault(),v.stopPropagation(),L()):(v.key==="ArrowDown"||v.key==="ArrowUp")&&(v.preventDefault(),v.stopPropagation(),O[(m+(v.key==="ArrowDown"?1:O.length-1))%O.length]?.focus())};return(0,z.jsxs)("li",{className:"graview-spec-item graview-columns-card","data-graview-listed":e.id,"data-as":"card","data-carried":r||void 0,...u&&u.chosen.length>0?{"data-graview-choose":e.id}:{},draggable:t.length>0||void 0,onKeyDown:c,onKeyUp:v=>{v.key===" "&&v.target instanceof HTMLElement&&v.target.classList.contains("graview-spec-item-link")&&v.preventDefault()},onBlur:v=>{r&&!v.currentTarget.contains(v.relatedTarget)&&b()},onDragStart:v=>{t.length!==0&&(v.dataTransfer.setData("text/graview-node",e.id),v.dataTransfer.effectAllowed="move",p(!0))},onDragEnd:()=>p(!1),children:[(0,z.jsx)(Qt,{node:e,label:S,...a?{describedBy:a}:{}}),A?(0,z.jsx)(bt,{mode:"scene",children:(0,z.jsx)(Ot.Provider,{value:S,children:(0,z.jsx)(A,{node:e,cardinality:"one",fidelity:"summary",mode:"scene",selected:!1})})}):(0,z.jsx)("span",{className:"graview-spec-item-name","aria-hidden":"true",children:S}),u?(0,z.jsx)("span",{className:"graview-choose-at",children:(0,z.jsx)("input",{...u.boxProps(e.id,S),onPointerEnter:Gn,onFocus:Gn})}):null,n&&t.length>0?(0,z.jsxs)("div",{className:"graview-columns-move","data-columns-move":e.id,"data-open":o||void 0,onBlur:v=>{v.currentTarget.contains(v.relatedTarget)||l(!1)},children:[(0,z.jsx)("button",{ref:g,type:"button","aria-haspopup":"menu","aria-expanded":o,"aria-label":`Move \u201C${S}\u201D to another column`,"data-testid":"columns-move",onClick:()=>l(v=>!v),children:"Move\u2026"}),o?(0,z.jsx)("div",{ref:C,role:"menu","aria-label":`Move \u201C${S}\u201D to`,className:"graview-columns-menu",onKeyDown:T,onMouseDown:v=>v.preventDefault(),children:t.map(v=>(0,z.jsx)("button",{type:"button",role:"menuitem","data-columns-to":v.to,title:v.title,onClick:()=>{l(!1),s(v,i(v.to))},children:i(v.to)},v.to))}):null]}):null]})}var Me=q(Ee(),1);var F=q(te(),1),ga=["rows","columns","link"],on=class extends Error{constructor(n,r){super(`${n}
|
|
31
|
+
${r}`);this.hint=r;this.name="CoverageBindingError"}},Xn=(e,t)=>t&&e[t]!==void 0?String(e[t]):"",ma=40,pa=24;function fa(e,t={}){let n=t.rows??ma,r=t.columns??pa;if(e.rows.length<=n&&e.columns.length<=r)return e;let a=new Map;for(let u of e.cells)a.set(u.rowId,(a.get(u.rowId)??0)+1),a.set(`col:${u.columnId}`,(a.get(`col:${u.columnId}`)??0)+1);let i=(u,w,h)=>{if(u.length<=w)return u;let o=new Set(u.map((l,C)=>({item:l,index:C,count:a.get(h(l))??0})).sort((l,C)=>C.count-l.count||l.index-C.index).slice(0,w).map(l=>l.item.id));return u.filter(l=>o.has(l.id))},s=i(e.rows,n,u=>u.id),p=i(e.columns,r,u=>`col:${u.id}`),c=new Set(s.map(u=>u.id)),b=new Set(p.map(u=>u.id));return{...e,rows:s,columns:p,cells:e.cells.filter(u=>c.has(u.rowId)&&b.has(u.columnId)),of:{rows:e.rows.length,columns:e.columns.length}}}function Pr(e,t,n,r){let a=m=>m,i=m=>r?xe(r.tryDefinition(m.kind),m):String(a(m).label??m.id),s=r?[n.rows,n.columns].filter(m=>r.tryDefinition(m)===void 0):[];if(s.length>0)throw new on(`No kind is declared for ${s.map(m=>`"${m}"`).join(" or ")}.`,'Check the lens bindings: { rows: "<kind>", columns: "<kind>", link: "<edge kind>" }');if(r&&typeof n.link!="string"){let m=zn(r,n.columns,n.link.path);if(!m.ok||!m.reached.has(n.rows)){let E=zn(r,n.columns,[...n.link.path].reverse());throw new on(E.ok&&E.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(D=>JSON.stringify(D)).join(", ")}] }`)}}let p=e.filter(m=>m.kind===n.rows),c=e.filter(m=>m.kind===n.columns);if(!r&&p.length===0&&c.length===0)throw new on(`Nothing to lay out: no "${n.rows}" and no "${n.columns}" nodes.`,'Check the lens bindings: { rows: "<kind>", columns: "<kind>", link: "<edge kind>" }');let b=n.groupOrder??[],u=m=>{let E=b.indexOf(m);return E===-1?b.length:E},w=n.badge?t.filter(m=>m.kind===n.badge.edge):[],h=new Set(p.map(m=>m.id)),o=new Set(c.map(m=>m.id)),l=[];if(typeof n.link=="string"){let m=n.link,E=t.filter(W=>W.kind===m),D=W=>r?.tryDefinition?.(W)?.edges?.[m]?.to,G=(D(n.columns)??[]).some(W=>W===n.rows||W==="*"),k=(D(n.rows)??[]).some(W=>W===n.columns||W==="*"),_=G||!k;for(let W of E){let le=_?W.to:W.from,ee=_?W.from:W.to;h.has(le)&&o.has(ee)&&l.push({rowId:le,columnId:ee})}}else{let m=new Map;for(let D of new Set(n.link.path))m.set(D,new Map);for(let D of t){let G=m.get(D.kind);if(!G)continue;let k=G.get(D.from);k?k.push(D.to):G.set(D.from,[D.to]);let _=G.get(D.to);_?_.push(D.from):G.set(D.to,[D.from])}let E=new Set;for(let D of c){let G=[{id:D.id,via:[]}];for(let k of n.link.path){let _=[],W=new Set,le=m.get(k);for(let ee of G)for(let ie of le.get(ee.id)??[])W.has(`${ee.id}|${ie}`)||(W.add(`${ee.id}|${ie}`),_.push({id:ie,via:[...ee.via,ee.id]}));G=_}for(let k of G){if(!h.has(k.id))continue;let _=`${k.id}|${D.id}`;E.has(_)||(E.add(_),l.push({rowId:k.id,columnId:D.id,via:k.via.slice(1)}))}}}let C=new Set(n.requiredGroups??[]),g=n.requiredVia?new Set(t.filter(m=>m.kind===n.requiredVia.edge).map(m=>m.to)):null,S=new Set(l.map(m=>m.rowId)),A=new Set(l.map(m=>m.columnId)),L=new Set(w.map(m=>m.to)),T=(m,E)=>E==="label"?i(m):a(m)[E],v=Ze(p,n.sort,T).map(m=>{let E=a(m),D=Xn(E,n.rowGroup);return{id:m.id,ref:Xn(E,n.rowRef),label:i(m),group:D,required:g?g.has(m.id):C.size===0||C.has(D),covered:S.has(m.id),badged:L.has(m.id)}}).sort((m,E)=>u(m.group)-u(E.group)||(n.sort!==void 0?0:m.ref<E.ref?-1:m.ref>E.ref?1:0)),O=Ze(c,n.columnSort,T).map(m=>({id:m.id,label:i(m),used:A.has(m.id),group:Xn(a(m),n.columnGroup)})).sort((m,E)=>m.group<E.group?-1:m.group>E.group?1:n.columnSort!==void 0?0:m.id<E.id?-1:m.id>E.id?1:0).map(({group:m,...E})=>E);return{rows:v,columns:O,cells:l,gaps:v.filter(m=>m.required&&!m.covered).map(m=>m.id),unasked:O.filter(m=>!m.used).map(m=>m.id)}}var Rr=316,Zn=58,et=176,ha=Math.sin(Zn*Math.PI/180),ya=Math.cos(Zn*Math.PI/180),wa=e=>{let t=e.reduce((r,a)=>Math.max(r,a.length),0),n=Math.min(et,Math.max(46,t*5.4+12));return Math.ceil(n*ha)+8},Er=Math.ceil(et*ya),Mr=(e,t)=>un(e,t).toLowerCase(),Tr=(e,t)=>mn(e.tryDefinition(t),t);function va(e,t,n){return t.rows===t.columns?`${e} with none across`:`${qe(n,t.rows,e)} with no ${Tr(n,t.columns)}`}function ba(e,t,n){return t.rows===t.columns?`${e} with none down`:`${qe(n,t.columns,e)} on no ${Tr(n,t.rows)}`}function xa({nodes:e,label:t,fidelity:n,mode:r,options:a,schema:i,implicated:s=[],flagged:p=[],budget:c,rowsKept:b}){let{store:u}=oe(),w=Aa(),h=(0,Me.useRef)(null),o=Fe(h),[l,C]=(0,Me.useState)(null),g=Pr(_e(u.graph,u.schema,e).filter(k=>k.kind===a.rows||k.kind===a.columns).filter(k=>b===void 0||a.rows===a.columns||k.kind!==a.rows||b.has(k.id)),u.graph.allEdges(),a,i),S=n==="full"?fa(g,c!==void 0?{rows:c,columns:c}:{}):g,A=typeof a.link=="string"?a.link:void 0,L=b!==void 0&&g.cells.length===0&&g.columns.length>0&&(A===void 0||u.graph.allEdges().some(k=>k.kind===A))?void 0:wt(u.schema,a,{rows:g.rows.length,columns:g.columns.length,cells:g.cells.length});if(n==="glyph")return(0,F.jsx)(ke,{label:`${t??"Coverage"} \xB7 ${L?"nothing linked":S.gaps.length===0?"complete":`${S.gaps.length} missing`}`,hue:be("coverage")});if(L)return(0,F.jsx)(me,{title:t??"Coverage",tone:"muted",fit:!0,...r==="fullscreen"?{style:{flex:"1 1 auto",minHeight:0,height:"100%"}}:{},children:(0,F.jsx)("p",{"data-coverage-unlinked":"",style:{margin:0,color:"var(--graview-ink-muted)"},children:L})});if(n==="summary"){let k=S.rows.filter(_=>S.gaps.includes(_.id));return(0,F.jsxs)(me,{title:t??"Coverage",meta:`${S.rows.length-S.gaps.length}/${S.rows.length}`,tone:S.gaps.length>0?"warning":"muted",fit:!0,children:[(0,F.jsx)(Oa,{grid:S}),k.length>0?(0,F.jsx)(ze,{pick:!0,max:4,items:k.map(_=>({id:_.id,label:_.ref||_.label}))}):null]})}let T=new Set(s),v=new Set(p),O=l!==null&&l.every(k=>T.has(k))?l:null,m=r==="fullscreen",E=wa(S.columns.map(k=>k.label)),D=o===null?Rr:Math.max(96,Math.min(Rr,Math.round(o*.36))),G=o!==null&&(o<420||D+S.columns.length*28+Er>o);return(0,F.jsx)(me,{title:t??"Coverage",...m?{style:{flex:"1 1 auto",minHeight:0,height:"100%"}}:{},meta:S.rows.length===0||S.columns.length===0?void 0:S.gaps.length===0&&S.unasked.length===0?"complete":[S.gaps.length>0?va(S.gaps.length,a,u.schema):"",S.unasked.length>0?ba(S.unasked.length,a,u.schema):""].filter(Boolean).join(" \xB7 "),selected:!1,fit:!0,children:(0,F.jsxs)("div",{ref:h,"data-coverage-shape":G?"stacked":"matrix",onClick:k=>C(Lr(k.target)),onKeyDown:k=>{(k.key==="Enter"||k.key===" ")&&C(Lr(k.target))},style:{position:"relative",display:"flex",flexDirection:"column",flex:"1 1 auto",minHeight:0,paddingRight:G?0:Er},children:[G?null:(0,F.jsxs)("div",{style:{display:"flex",alignItems:"flex-end",flex:"0 0 auto",position:"sticky",top:0,zIndex:Te.over,background:"var(--graview-panel)",paddingTop:6},children:[(0,F.jsx)("div",{ref:w.corner,style:{width:D,flex:"0 0 auto",alignSelf:"stretch",position:"sticky",left:0,zIndex:Te.raised,background:"var(--graview-panel)"}}),(0,F.jsx)("div",{ref:w.heads,style:{display:"flex",flex:1,minWidth:0,height:E},children:S.columns.map(k=>(0,F.jsx)("div",{"data-graview-pick":k.id,"data-graview-emphasis":T.size===0?"plain":T.has(k.id)?"lit":"dimmed",title:k.label,"data-graview-column":k.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,F.jsxs)("span",{style:{position:"absolute",bottom:3,padding:"3px 0",pointerEvents:"auto",cursor:"pointer",left:"50%",visibility:w.hidden.has(k.id)?"hidden":"visible",transformOrigin:"left bottom",transform:`rotate(-${Zn}deg)`,whiteSpace:"nowrap",maxWidth:et,overflow:"hidden",textOverflow:"ellipsis",fontSize:"0.75rem",letterSpacing:"0.005em",color:k.used?T.size>0&&!T.has(k.id)?"var(--graview-ink-faint)":"var(--graview-ink)":"var(--graview-warn)"},children:[k.used?"":"\u26A0 ",k.label]})},k.id))})]}),S.of?(0,F.jsxs)("p",{"data-testid":"coverage-more",style:{margin:"4px 0 6px",fontSize:"0.8125rem",color:"var(--graview-ink-muted)"},children:[[S.of.rows>S.rows.length?`the ${S.rows.length} most connected of ${S.of.rows} ${Mr(u.schema,a.rows)}`:null,S.of.columns>S.columns.length?`${S.columns.length} of ${S.of.columns} ${Mr(u.schema,a.columns)} across`:null].filter(Boolean).join(" \xB7 ").replace(/^./,k=>k.toUpperCase())," ","\u2014 what is missing is still counted over all of them."]}):null,(0,F.jsx)("div",{children:S.rows.map((k,_)=>{let W=S.rows[_-1],le=W===void 0||W.group!==k.group,ee=k.required&&!k.covered,ie=T.size>0&&!T.has(k.id);return(0,F.jsxs)("div",{children:[le&&k.group?(0,F.jsx)("div",{style:{fontSize:"0.6875rem",letterSpacing:"0.16em",textTransform:"uppercase",color:"var(--graview-ink-faint)",padding:"9px 0 3px"},children:(0,F.jsx)("span",{style:{position:"sticky",left:0,display:"inline-block",paddingRight:8,background:"var(--graview-panel)"},children:k.group})}):null,(0,F.jsxs)("div",{style:{display:"flex",flexDirection:G?"column":"row",alignItems:"stretch",borderTop:"1px solid var(--graview-edge)",opacity:ie?.72:1},children:[(0,F.jsxs)("div",{"data-graview-pick":k.id,"data-graview-emphasis":T.size===0?"plain":ie?"dimmed":"lit",title:k.label,style:{width:G?"auto":D,flex:"0 0 auto",position:G?"static":"sticky",left:0,zIndex:Te.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:ee||v.has(k.id)?"var(--graview-warn)":"var(--graview-ink)"},children:[k.ref?(0,F.jsx)("span",{style:{flex:"0 0 auto",fontVariantNumeric:"tabular-nums",color:"var(--graview-ink-faint)"},children:k.ref}):null,(0,F.jsx)("span",{style:{minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:k.label}),a.badge?(0,F.jsx)("span",{title:k.badged?a.badge.title:a.badge.missingTitle,style:{marginLeft:"auto",flex:"0 0 auto",fontSize:"0.75rem",color:k.badged?"var(--graview-ink-faint)":"var(--graview-warn)"},children:k.badged?a.badge.symbol:"\u25CB"}):null]}),(0,F.jsx)("div",{style:{display:"flex",flex:1,minWidth:0,...G?{flexWrap:"wrap",gap:6,padding:"0 0 8px"}:{}},children:S.columns.map(N=>{let U=S.cells.find(B=>B.rowId===k.id&&B.columnId===N.id),de=U!==void 0;return(0,F.jsxs)("div",{"data-graview-mark":"",...de?{"data-graview-pick":N.id,"data-graview-emphasis":T.size===0?"plain":T.has(N.id)&&T.has(k.id)?"lit":"dimmed","data-graview-joins":JSON.stringify(Sa(U))}:{},title:de?`${N.label} answers ${k.ref||k.label}`:`${N.label} does not answer ${k.ref||k.label}`,style:G?{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:de?"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,F.jsx)("span",{style:$a(de,ee,T.has(N.id)&&T.has(k.id),T.size>0)}),G?(0,F.jsx)("span",{children:N.label}):null]},N.id)})})]})]},k.id)})}),O?(0,F.jsx)(Ca,{box:h,joins:O,shape:`${G?"stacked":"matrix"} ${o??""}`}):null]})})}var Sa=e=>[e.rowId,e.columnId,...e.via??[]];function Lr(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 On=(e,t,n)=>Math.min(n,Math.max(t,e));function ka(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 Ca({box:e,joins:t,shape:n}){let[r,a]=(0,Me.useState)([]),i=JSON.stringify(t);return(0,Me.useLayoutEffect)(()=>{let s=e.current;if(!s||typeof window>"u")return;let p=()=>{let u=s.getBoundingClientRect(),w=s.offsetWidth>0&&u.width>0?u.width/s.offsetWidth:1,h=[...s.querySelectorAll("[data-graview-joins]")].find(C=>C.getAttribute("data-graview-joins")===i);if(!h){a([]);return}let o=h.getBoundingClientRect(),l=[];for(let C of JSON.parse(i)){let g=[...s.querySelectorAll("[data-graview-pick]")].find(O=>O.getAttribute("data-graview-pick")===C&&!O.closest("[data-graview-mark]"));if(!g)continue;let S=ka(g),A=On(o.left+o.width/2,S.left,S.right),L=On(o.top+o.height/2,S.top,S.bottom),T=On(A,o.left,o.right),v=On(L,o.top,o.bottom);l.push({id:C,x1:(T-u.left)/w,y1:(v-u.top)/w,x2:(A-u.left)/w,y2:(L-u.top)/w})}a(l)};p();let c=0,b=()=>{c===0&&(c=requestAnimationFrame(()=>{c=0,p()}))};return document.addEventListener("scroll",b,{capture:!0,passive:!0}),window.addEventListener("resize",b,{passive:!0}),()=>{document.removeEventListener("scroll",b,{capture:!0}),window.removeEventListener("resize",b),c!==0&&cancelAnimationFrame(c)}},[e,i,n]),(0,F.jsx)("svg",{"aria-hidden":"true","data-coverage-join":i,style:{position:"absolute",left:0,top:0,width:"100%",height:"100%",overflow:"visible",pointerEvents:"none",zIndex:Te.over},children:r.map(s=>(0,F.jsxs)("g",{"data-coverage-join-to":s.id,children:[(0,F.jsx)("line",{x1:s.x1,y1:s.y1,x2:s.x2,y2:s.y2,stroke:"var(--graview-accent)",strokeWidth:1.6,strokeLinecap:"round"}),(0,F.jsx)("circle",{cx:s.x2,cy:s.y2,r:2.6,fill:"var(--graview-accent)"})]},s.id))})}function $a(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 Oa({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,F.jsx)("div",{role:"img","aria-label":`${n} of ${t.length} covered`,style:{height:6,borderRadius:999,overflow:"hidden",background:"var(--graview-edge)"},children:(0,F.jsx)("div",{style:{width:`${Math.round(r*100)}%`,height:"100%",background:r===1?"var(--graview-accent)":"var(--graview-warn)"}})})}function Nr(e){function t(n){let{store:r}=oe(),a=_e(r.graph,r.schema,n.nodes).filter(c=>c.kind===e.rows),{arranged:i,bar:s}=Ne(n,{lensAllows:{sort:!1,group:!1},subject:a,kind:e.rows,...e.search?{search:e.search}:{},...e.filters?{filters:e.filters}:{}}),p=(0,F.jsx)(xa,{schema:r.schema,...n,options:e,...s?{rowsKept:new Set(i.nodes.map(c=>c.id))}:{}});return s?(0,F.jsxs)("div",{style:{display:"grid",gap:6,height:"100%",minHeight:0,gridTemplateRows:"auto 1fr"},children:[s,p]}):p}return{name:"coverage",requiredRoles:[...ga],options:e,View:t,build(n,r,a){return Pr(n,r,e,a)}}}function Aa(){let e=(0,Me.useRef)(null),t=(0,Me.useRef)(null),[n,r]=(0,Me.useState)(new Set);return(0,Me.useEffect)(()=>{let a=t.current;if(!a||typeof window>"u")return;let i=a.parentElement;for(;i&&!/(auto|scroll)/.test(getComputedStyle(i).overflowX);)i=i.parentElement;if(!i)return;let s=0,p=()=>{s=0;let b=e.current?.getBoundingClientRect().right??0,u=new Set;for(let w of a.querySelectorAll("[data-graview-column]")){let h=w.getBoundingClientRect();h.left+h.width/2<b&&u.add(w.dataset.graviewColumn)}r(w=>w.size===u.size&&[...u].every(h=>w.has(h))?w:u)},c=()=>{s===0&&(s=requestAnimationFrame(p))};return p(),i.addEventListener("scroll",c,{passive:!0}),()=>{i.removeEventListener("scroll",c),s!==0&&cancelAnimationFrame(s)}},[]),{corner:e,heads:t,hidden:n}}var zr=["regions","outline"],Je=class extends Error{constructor(n,r){super(`${n}
|
|
32
|
+
${r}`);this.hint=r;this.name="PlanBindingError"}},An='Check the lens bindings: { regions: "<kind>", outline: "<field>", markers?: "<kind>", at?: "<field>", within?: "<edge>" }',Dr=e=>typeof e=="object"&&e!==null&&typeof e.x=="number"&&typeof e.y=="number";function Rn(e,t,n,r){let a=g=>g,i=g=>r?xe(r.tryDefinition(g.kind),g):String(a(g).label??g.id);if(r&&r.tryDefinition(n.regions)===void 0)throw new Je(`No kind is declared for "${n.regions}".`,An);if(n.markers&&r&&r.tryDefinition(n.markers)===void 0)throw new Je(`No kind is declared for "${n.markers}".`,An);let s=e.filter(g=>g.kind===n.regions);if(!r&&s.length===0)throw new Je(`Nothing to draw: no "${n.regions}" nodes.`,An);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}".`,An);let b=(()=>{let g=new Map;if(n.nests)for(let S of t)S.kind===n.nests&&g.set(S.from,S.to);return S=>{let A=0,L=g.get(S),T=new Set([S]);for(;L!==void 0&&!T.has(L)&&A<s.length;)T.add(L),A+=1,L=g.get(L);return A}})(),u=n.markers?e.filter(g=>g.kind===n.markers):[],w=new Map;if(n.within)for(let g of t)g.kind===n.within&&w.set(g.from,g.to);let h=[],o=new Map;for(let g of u){let S=n.at===void 0?void 0:a(g)[n.at],A=w.get(g.id);if(!Dr(S)||A===void 0){h.push({id:g.id,label:i(g)});continue}let L=n.markerKind===void 0?void 0:a(g)[n.markerKind],T=o.get(A)??[];T.push({id:g.id,label:i(g),at:S,...typeof L=="string"?{what:L}:{}}),o.set(A,T)}let l=[],C=[];for(let g of s){let S=a(g)[n.outline];if(!Array.isArray(S)||S.length<3||!S.every(Dr)){l.push({id:g.id,label:i(g)});continue}let A=n.regionKind===void 0?void 0:a(g)[n.regionKind];C.push({id:g.id,label:i(g),outline:S,center:Bt(S),depth:b(g.id),markers:o.get(g.id)??[],...typeof A=="string"?{what:A}:{}})}return C.sort((g,S)=>g.depth-S.depth),{regions:C,undrawn:l,strays:h}}var He=q(Ee(),1);var I=q(te(),1);function Ir({map:e,options:t,implicated:n,flagged:r}){return(0,I.jsxs)("ul",{style:{margin:0,padding:0,listStyle:"none",display:"grid",gap:".25rem"},children:[e.regions.map(a=>{let i=En(a.id,n,r);return(0,I.jsxs)("li",{"data-graview-pick":a.id,...i?{"data-graview-emphasis":i}:{},style:{display:"flex",flexWrap:"wrap",gap:".5rem",justifyContent:"space-between",minWidth:0,padding:".25rem .4rem",borderRadius:".35rem",background:i==="flagged"?tt(a.what,i,t.hues):void 0},children:[(0,I.jsx)("span",{style:{minWidth:0,overflowWrap:"anywhere"},children:a.label}),(0,I.jsxs)("span",{style:{opacity:.7,whiteSpace:"nowrap"},children:[a.what?`${a.what} \xB7 `:"",a.markers.length]})]},a.id)}),e.undrawn.map(a=>(0,I.jsxs)("li",{"data-graview-pick":a.id,style:{display:"flex",gap:".5rem",opacity:.7,padding:".25rem .4rem"},children:[(0,I.jsx)("span",{style:{minWidth:0,overflowWrap:"anywhere"},children:a.label}),(0,I.jsx)("span",{style:{whiteSpace:"nowrap"},children:t.undrawnLabel??"not drawn"})]},a.id))]})}var nt=1e3,Br=.022,sn={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"},En=(e,t,n)=>{if(n?.includes(e))return"flagged";if(t?.includes(e))return"implicated"},Mn=(e,t)=>(e===void 0?void 0:t?.[e])??be(e??"region"),tt=(e,t,n)=>t==="flagged"?"color-mix(in oklab, var(--graview-warn) 26%, var(--graview-panel))":`color-mix(in oklab, hsl(${Mn(e,n)} 52% 48%) 24%, var(--graview-panel))`,Wr=(e,t,n)=>t==="flagged"?"var(--graview-warn)":`color-mix(in oklab, hsl(${Mn(e,n)} 48% 42%) 78%, var(--graview-ink))`;function Ra(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 Hr({schema:e,options:t,nodes:n,label:r,fidelity:a,selected:i,implicated:s,flagged:p}){let{store:c}=oe(),b=c.graph.allEdges(),u=c.graph.allNodes(),w=n===void 0?void 0:new Set(n.map(f=>f.id)),h=w===void 0?u:u.filter(f=>f.kind!==t.regions||w.has(f.id)),o=Rn(h,b,t,e),l=o.regions.length,C=o.regions.reduce((f,$)=>f+$.markers.length,0);if(a==="glyph")return(0,I.jsx)(ke,{label:`${r??"Ground"} \xB7 ${l}`,...o.undrawn.length>0?{meta:`+${o.undrawn.length} undrawn`}:{},selected:i});if(a==="summary")return(0,I.jsx)(me,{title:r??"The plan",subtitle:`${l} drawn \xB7 ${C} standing in them`,children:(0,I.jsx)(Ir,{map:o,options:t,...s?{implicated:s}:{},...p?{flagged:p}:{}})});let g=(0,He.useMemo)(()=>{let f=1/0,$=1/0,P=-1/0,ne=-1/0,H=J=>{J.x<f&&(f=J.x),J.x>P&&(P=J.x),J.y<$&&($=J.y),J.y>ne&&(ne=J.y)};for(let J of o.regions){for(let Y of J.outline)H(Y);for(let Y of J.markers)H(Y.at)}if(!Number.isFinite(f)||P-f<=0||ne-$<=0)return{x0:0,y0:0,x1:1,y1:1};let K=Math.max(P-f,ne-$)*.04;return{x0:f-K,y0:$-K,x1:P+K,y1:ne+K}},[o.regions]),S=(g.x1-g.x0)/(g.y1-g.y0),A=t.aspect??Math.min(3.2,Math.max(.55,S)),L=Math.round(nt/(g.x1-g.x0)),T=Math.round(L*(g.x1-g.x0)),v=Math.round(T/A),O={x:g.x0*L,y:g.y0*L-(v-L*(g.y1-g.y0))/2,w:T,h:v},m=L,E=O.w,D=(s?.length??0)>0||(p?.length??0)>0,G=(0,He.useRef)(null),{touchable:k,legible:_}=Et(G,{units:O.w,target:E*Br*2}),W=Wn("--graview-font-display","serif"),le=Wn("--graview-font-body","sans-serif"),{named:ee,placed:ie,tagged:N}=(0,He.useMemo)(()=>{let f=[],$=E*.012,P=nt*.004,ne=(pe,X)=>!f.some(he=>he!==X&&Ht({x0:pe.x0-P,y0:pe.y0-P,x1:pe.x1+P,y1:pe.y1+P},he)),H=[...o.regions].sort((pe,X)=>Vn(X.outline)-Vn(pe.outline)),K=new Map,J=new Map;for(let pe of H){let X=It(pe.outline),he=Math.max(0,(X.bottom-X.top)*m*.55),Ce=null;for(let $e of[.12,.26,.42,.6,.78]){let V=X.top+$e*(X.bottom-X.top),ge=Hn(pe.outline,V),Se=Math.max(0,(ge.x1-ge.x0)*L-$*2),ce=Wt(pe.label,{room:Se,height:he,size:E*.023,floor:E*.015,measure:W});if(ce===null)continue;let ve=Math.max(...ce.lines.map(Jr=>W(Jr,ce.fontSize))),Oe=ce.lines.length*ce.fontSize*1.15,at=X.top*m+$+Oe/2,it=X.bottom*m-$-Oe/2,dn=it<at?(X.top+X.bottom)*m/2:Math.min(Math.max(V*m,at),it),Ln=Hn(pe.outline,dn/m),Pn=Ln.x0*L+$;if(ve>(Ln.x1-Ln.x0)*L-$*2)continue;let ot={x0:Pn,y0:dn-Oe/2,x1:Pn+ve,y1:dn+Oe/2};if(ne(ot)){f.push(ot),Ce={fitted:ce,x:Pn,y:dn};break}}K.set(pe.id,Ce?.fitted??null),Ce!==null&&J.set(pe.id,{x:Ce.x,y:Ce.y})}let Y=E*.018,ue=new Map,Q=E*.011+E*.004,Ve=new Map;for(let pe of o.regions)for(let X of pe.markers){let he={x0:X.at.x*L-Q,y0:X.at.y*m-Q,x1:X.at.x*L+Q,y1:X.at.y*m+Q};Ve.set(X.id,he),f.push(he)}for(let pe of k?o.regions:[])for(let X of pe.markers){let he=E*.018,Ce=le(X.label,Y),$e=X.at.x*L,V=X.at.y*m,ge=Y*1.15,Se=[{x:$e+he,y:V,anchor:"start"},{x:$e-he,y:V,anchor:"end"},{x:$e+he*.7,y:V-ge,anchor:"start"},{x:$e-he*.7,y:V-ge,anchor:"end"},{x:$e+he*.7,y:V+ge,anchor:"start"},{x:$e-he*.7,y:V+ge,anchor:"end"},{x:$e,y:V-ge*1.1,anchor:"start"},{x:$e,y:V+ge*1.1,anchor:"start"}];for(let ce of Se){let ve=ce.anchor==="start"?ce.x:ce.x-Ce,Oe={x0:ve,y0:ce.y-Y*.62,x1:ve+Ce,y1:ce.y+Y*.62};if(!(ve<O.x+4||ve+Ce>O.x+O.w-4)&&!(Oe.y0<O.y+2||Oe.y1>O.y+O.h-2)&&ne(Oe,Ve.get(X.id))){f.push(Oe),ue.set(X.id,{at:{x:ce.x,y:ce.y},anchor:ce.anchor,size:Y});break}}}return{named:K,placed:J,tagged:ue}},[o.regions,nt,m,k,W,le]),U=(0,He.useMemo)(()=>{let f=[];for(let $ of o.regions)(ee.get($.id)?.whole??!1)===!1&&f.push({id:$.id,label:$.label,what:$.what,round:!1});for(let $ of o.regions)for(let P of $.markers)(!k||!N.has(P.id))&&f.push({id:P.id,label:P.label,what:P.what,round:!0});return f},[o.regions,ee,N,k]),{principal:de}=oe(),[B,we]=(0,He.useState)(null),M=t.draw!==void 0,d=t.place!==void 0,y=f=>{if(B===null)return;f.stopPropagation();let $=Ra(f);if(B.kind==="marker"){c.apply({name:t.place.act,args:{[t.place.id]:B.id,[t.place.at]:$}},{author:de,intent:`Placed ${B.label} on the map`}),we(null);return}we({...B,corners:[...B.corners,$]})},x=()=>{B===null||B.kind!=="region"||B.corners.length<3||(c.apply({name:t.draw.act,args:{[t.draw.id]:B.id,[t.draw.outline]:B.corners}},{author:de,intent:`Drew ${B.label} on the map \u2014 ${B.corners.length} corners`}),we(null))},R=B===null?o.regions.length===0?"Nothing drawn yet. Choose an area below, then click its corners here.":null:B.kind==="marker"?`Click where ${B.label} stands.`:B.corners.length<3?`Click the corners of ${B.label} \u2014 ${3-B.corners.length} more to make an area.`:`${B.corners.length} corners. Keep clicking, or press Done.`;return _?(0,I.jsxs)(me,{title:r??"The plan",subtitle:`${l} drawn \xB7 ${C} standing in them`,...o.undrawn.length>0?{meta:`${o.undrawn.length} ${t.undrawnLabel??"not drawn yet"}`}:{},selected:i,fit:!0,children:[(0,I.jsx)("div",{style:{position:"relative",width:"100%",aspectRatio:`${O.w} / ${O.h}`,overflow:"hidden"},children:(0,I.jsxs)("svg",{ref:G,viewBox:`${O.x} ${O.y} ${O.w} ${O.h}`,width:"100%",height:"100%",preserveAspectRatio:"xMidYMid meet",role:B!==null?"application":k?"group":"img","aria-label":B===null?`${r??"The plan"}: ${l} drawn, ${C} standing in them`:R??"Drawing",onClick:y,"data-testid":"plan-canvas",style:{display:"block",position:"absolute",inset:0,cursor:B===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,I.jsx)("text",{x:O.x+O.w-E*.028,y:O.y+E*.034,fontSize:E*.022,textAnchor:"middle",fill:"var(--graview-ink)",opacity:.55,children:"N"}),R!==null&&o.regions.length===0?(0,I.jsx)("text",{x:O.x+O.w/2,y:O.y+O.h/2,textAnchor:"middle",dominantBaseline:"middle",fontSize:E*.026,fill:"var(--graview-ink)",opacity:.7,style:{pointerEvents:"none",fontFamily:"var(--graview-font-body)"},children:R}):null,B!==null&&B.kind==="region"&&B.corners.length>0?(0,I.jsxs)("g",{style:{pointerEvents:"none"},children:[(0,I.jsx)("polyline",{points:B.corners.map(f=>`${f.x*L},${f.y*m}`).join(" "),fill:B.corners.length>=3?"color-mix(in oklab, var(--graview-accent) 22%, transparent)":"none",stroke:"var(--graview-accent)",strokeWidth:3,strokeDasharray:"8 6"}),B.corners.map((f,$)=>(0,I.jsx)("circle",{cx:f.x*L,cy:f.y*m,r:E*.008,fill:"var(--graview-accent)"},$))]}):null,o.regions.map(f=>{let $=En(f.id,s,p),P=D&&$===void 0?.34:1,ne=f.outline.map(H=>`${H.x*L},${H.y*m}`).join(" ");return(0,I.jsx)("g",{"data-graview-pick":f.id,...$?{"data-graview-emphasis":$}:{},role:"button","aria-label":`${f.label}${f.what?`, ${f.what}`:""}, ${f.markers.length} standing in it`,style:{opacity:P,cursor:"pointer"},children:(0,I.jsx)("polygon",{points:ne,fill:tt(f.what,$,t.hues),stroke:Wr(f.what,$,t.hues),strokeWidth:$==="flagged"?5:2.5,strokeLinejoin:"round"})},f.id)}),o.regions.flatMap(f=>f.markers.map($=>{let P=En($.id,s,p),ne=D&&P===void 0?.34:1;return(0,I.jsxs)("g",{...k?{"data-graview-pick":$.id,role:"button","aria-label":`${$.label}${$.what?`, ${$.what}`:""}, in ${f.label}`}:{"aria-hidden":!0},...P?{"data-graview-emphasis":P}:{},style:{opacity:ne,cursor:k?"pointer":"default"},children:[k?(0,I.jsx)("circle",{cx:$.at.x*L,cy:$.at.y*m,r:E*Br,fill:"transparent"}):null,(0,I.jsx)("circle",{cx:$.at.x*L,cy:$.at.y*m,r:E*.011,fill:P==="flagged"?"var(--graview-warn)":`hsl(${Mn($.what,t.hues)} 55% 45%)`,stroke:"var(--graview-panel)",strokeWidth:E*.004}),N.has($.id)?(0,I.jsx)("text",{x:N.get($.id).at.x,y:N.get($.id).at.y,textAnchor:N.get($.id).anchor,dominantBaseline:"middle",fontSize:N.get($.id).size,fill:"var(--graview-ink)",stroke:"var(--graview-panel)",strokeWidth:Math.max(2,N.get($.id).size*.3),paintOrder:"stroke","data-testid":`marker-label-${$.id}`,style:{pointerEvents:"none",fontFamily:"var(--graview-font-body)"},children:$.label}):null]},$.id)})),o.regions.map(f=>{let $=ee.get(f.id),P=ie.get(f.id);if(!$||P===void 0)return null;let ne=En(f.id,s,p);return(0,I.jsx)("text",{x:P.x,y:P.y-($.lines.length-1)*$.fontSize*1.15/2,textAnchor:"start",dominantBaseline:"middle",fontSize:$.fontSize,fill:"var(--graview-ink)",opacity:D&&ne===void 0?.34:1,stroke:"var(--graview-panel)",strokeWidth:Math.max(2,$.fontSize*.26),paintOrder:"stroke","data-testid":`region-label-${f.id}`,style:{pointerEvents:"none",fontFamily:"var(--graview-font-display)"},children:$.lines.map((H,K)=>(0,I.jsx)("tspan",{x:P.x,dy:K===0?0:$.fontSize*1.15,children:H},H+String(K)))},`label-${f.id}`)})]})}),U.length>0?(0,I.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:U.map(f=>(0,I.jsxs)("li",{"data-graview-pick":f.id,style:{display:"flex",alignItems:"center",gap:".35rem",minWidth:0,minHeight:"max(1.5rem, 24px)",padding:"0 .15rem",cursor:"pointer"},children:[(0,I.jsx)("span",{"aria-hidden":"true",style:{width:f.round?".55rem":".7rem",height:f.round?".55rem":".7rem",flex:"0 0 auto",borderRadius:f.round?"50%":".15rem",background:f.round?`hsl(${Mn(f.what,t.hues)} 55% 45%)`:tt(f.what,void 0,t.hues),border:f.round?void 0:`1px solid ${Wr(f.what,void 0,t.hues)}`}}),(0,I.jsx)("span",{style:{minWidth:0,overflowWrap:"anywhere"},children:f.label})]},f.id))}):null,B!==null?(0,I.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".5rem",marginTop:".5rem",alignItems:"center"},children:[o.regions.length>0&&R!==null?(0,I.jsx)("span",{style:{fontSize:"0.9375rem",opacity:.8,flexBasis:"100%"},"aria-live":"polite",children:R}):null,B.kind==="region"?(0,I.jsxs)("button",{type:"button",onClick:x,disabled:B.corners.length<3,"data-testid":"draw-done",style:{...sn,background:"var(--graview-accent)",color:"var(--graview-accent-ink)",borderColor:"transparent"},children:["Done \u2014 keep ",B.label]}):null,B.kind==="region"&&B.corners.length>0?(0,I.jsx)("button",{type:"button",onClick:()=>we({...B,corners:B.corners.slice(0,-1)}),style:sn,children:"Undo a corner"}):null,(0,I.jsx)("button",{type:"button",onClick:()=>we(null),style:sn,"data-testid":"draw-cancel",children:"Stop"})]}):(0,I.jsxs)(I.Fragment,{children:[M&&o.undrawn.length>0?(0,I.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".4rem",marginTop:".5rem",alignItems:"center"},children:[(0,I.jsxs)("span",{style:{fontSize:"0.875rem",opacity:.75},children:[t.undrawnLabel??"Not drawn yet",":"]}),o.undrawn.map(f=>(0,I.jsxs)("button",{type:"button",style:sn,onClick:()=>we({kind:"region",id:f.id,label:f.label,corners:[]}),"data-testid":`draw-${f.id}`,children:["Draw ",f.label]},f.id))]}):null,d&&o.strays.length>0?(0,I.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".4rem",marginTop:".5rem",alignItems:"center"},children:[(0,I.jsxs)("span",{style:{fontSize:"0.875rem",opacity:.75},children:[t.strayLabel??"Not placed",":"]}),o.strays.map(f=>(0,I.jsxs)("button",{type:"button",style:sn,onClick:()=>we({kind:"marker",id:f.id,label:f.label}),"data-testid":`place-${f.id}`,children:["Place ",f.label]},f.id))]}):null,t.help!==void 0&&(o.undrawn.length>0||o.strays.length>0)?(0,I.jsx)("p",{style:{margin:".5rem 0 0",fontSize:"0.875rem"},children:(0,I.jsx)("a",{href:t.help.href,"data-testid":"map-help",children:t.help.label})}):null,!M&&(o.undrawn.length>0||o.strays.length>0)?(0,I.jsxs)("p",{style:{margin:".5rem 0 0",fontSize:"0.875rem",opacity:.75},children:[o.undrawn.map(f=>f.label).join(", "),o.undrawn.length>0?` \u2014 ${t.undrawnLabel??"not drawn yet"}. `:"",o.strays.map(f=>f.label).join(", "),o.strays.length>0?` \u2014 ${t.strayLabel??"not placed"}.`:""]}):null]})]}):(0,I.jsx)(me,{title:r??"The plan",subtitle:`${l} drawn \xB7 ${C} standing in them`,selected:i,children:(0,I.jsx)(Ir,{map:o,options:t,...s?{implicated:s}:{},...p?{flagged:p}:{}})})}var Gr=q(te(),1);function Vr(e){function t(n){let{store:r}=oe();return(0,Gr.jsx)(Hr,{schema:r.schema,...n,options:e})}return{name:"plan",requiredRoles:[...zr],options:e,View:t,build(n,r,a){return Rn(n,r,e,a)}}}var fe=q(te(),1);function Ea(e,t,n){let r=t.flatMap(i=>(i.subject&&i.subject.kinds!=="*"?i.subject.kinds:[null]).map(p=>({name:i.name,title:i.title??i.name,kind:p}))),a=[];for(let i of n){let s={kind:"human",id:"themselves",roles:[i]};for(let p of r){let c=p.kind??void 0,b=Dn(e,s,p.name,c).ok,u=!b&&Dn(e,s,p.name,c,void 0,"themselves").ok;a.push({role:i,act:p.name,kind:p.kind,may:b?"yes":u?"self":"no"})}}return{roles:n,acts:r,cells:a}}function Ma({label:e,fidelity:t,mode:n}){let{store:r}=oe(),a=r.policy,i=a?.roles??[],s=r.allMutations().filter(w=>!w.derived).map(w=>({name:w.name,...w.title?{title:w.title}:{},...w.subject?{subject:w.subject}:{}})),p=Ea(a,s,i),c=e??"Who may do what";if(!a||i.length===0)return(0,fe.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,fe.jsx)(ke,{label:`${c} \xB7 ${i.length} ${i.length===1?"role":"roles"}`,hue:be("role")});let b=n==="fullscreen",u=w=>w==="yes"?"\u25CF":w==="self"?"\u25D0":"\xB7";return(0,fe.jsxs)("div",{"data-testid":"reach-lens",style:{display:"grid",gap:10,padding:b?0:14,borderRadius:"var(--graview-radius, 12px)",background:b?"transparent":"var(--graview-panel)",border:b?"none":"1px solid var(--graview-edge)",color:"var(--graview-ink)",minWidth:0},children:[(0,fe.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:10},children:[(0,fe.jsx)("span",{style:{fontFamily:"var(--graview-font-display)",fontSize:"1.125rem",fontWeight:600},children:c}),(0,fe.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,fe.jsx)("div",{"data-scroller":!0,style:{overflowX:"auto"},children:(0,fe.jsxs)("table",{style:{borderCollapse:"collapse",fontSize:"0.875rem",minWidth:"100%"},children:[(0,fe.jsx)("thead",{children:(0,fe.jsxs)("tr",{children:[(0,fe.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"}),p.acts.map(w=>(0,fe.jsxs)("th",{scope:"col",title:w.kind?`${w.title}, on ${gt(mn(r.schema.tryDefinition(w.kind),w.kind))}`:w.title,style:{textAlign:"left",padding:"4px 10px 6px",fontWeight:500,whiteSpace:"nowrap",color:"var(--graview-ink-muted)",fontSize:"0.8125rem"},children:[w.title,w.kind?(0,fe.jsxs)("span",{style:{color:"var(--graview-ink-faint)"},children:[" \xB7 ",w.kind]}):null]},`${w.name}|${w.kind??""}`))]})}),(0,fe.jsx)("tbody",{children:p.roles.map(w=>(0,fe.jsxs)("tr",{children:[(0,fe.jsx)("th",{scope:"row",style:{textAlign:"left",padding:"6px 10px 6px 0",fontWeight:600,whiteSpace:"nowrap",borderTop:"1px solid var(--graview-edge)"},children:w}),p.acts.map(h=>{let o=p.cells.find(l=>l.role===w&&l.act===h.name&&l.kind===h.kind);return(0,fe.jsx)("td",{"data-graview-reach":o.may,title:`${w} ${o.may==="yes"?"may":o.may==="self"?"may, on their own record,":"may not"} ${h.title.toLowerCase()}`,style:{padding:"6px 10px",textAlign:"center",borderTop:"1px solid var(--graview-edge)",color:o.may==="no"?"var(--graview-ink-faint)":"var(--graview-accent)",fontSize:o.may==="no"?"0.875rem":"0.8125rem"},children:u(o.may)},`${h.name}|${h.kind??""}`)})]},w))})]})})]})}var jr={name:"reach",requiredRoles:[],View:Ma};var Le=q(Ee(),1);var se=q(te(),1),Fr=["start","end"];function La(e,t,{pad:n=45,minimum:r=480}={}){if(e.length===0)return{start:0,end:t};let a=Math.min(...e.map(b=>b.start)),i=Math.max(...e.map(b=>b.end)),s=Math.max(0,a-n),p=Math.min(t,i+n),c=r-(p-s);return c>0&&(s=Math.max(0,s-c/2),p=Math.min(t,s+r)),{start:Math.floor(s),end:Math.ceil(p)}}function Pa(e){let t=[...e].sort((i,s)=>i.start-s.start||i.end-s.end||i.id.localeCompare(s.id)),n=[],r=t.map(i=>{let s=n.findIndex(p=>p<=i.start);return s===-1?(s=n.length,n.push(i.end)):n[s]=i.end,{...i,lane:s,lanes:1}}),a=Math.max(1,n.length);return r.map(i=>({...i,lanes:a}))}var rt=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 _r(e,t,n){let r=We(t[e.kind],n?.tryDefinition(e.kind));if(!r)return null;let a=e,i=n?.tryDefinition(e.kind)?.fields.shape,s=Fr.filter(u=>{let w=r[u];return w?i?!(w in i):!(w in a):!0});if(s.length>0)throw new rt(e.kind,s);let p=Number(a[r.start]??Number.NaN),c=Number(a[r.end]??p);if(!Number.isFinite(p))return null;let b=[];if(r.columns){let u=a[r.columns];Array.isArray(u)&&b.push(...u.map(String))}if(r.column){let u=a[r.column];u!=null&&b.push(String(u))}return{id:e.id,kind:e.kind,label:xe(n?.tryDefinition(e.kind),e),columnIds:b,start:p,end:Number.isFinite(c)?Math.max(c,p):p}}function Ta(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 Na=.045,ln=52,Kr=4,Da=44,za=240;function Ia({nodes:e,label:t,fidelity:n,mode:r,options:a,schema:i,selectedIds:s=[],implicated:p=[],flagged:c=[]}){let b=new Set([...p,...s]),u=v=>b.size===0?"plain":b.has(v)?"lit":"dimmed",w=new Set(c),h=(e??[]).map(v=>_r(v,a.bindings,i)).filter(v=>v!==null),o=a.hueOf??(v=>be(v.kind));if(n==="glyph")return(0,se.jsx)(ke,{label:`${t??"Timeline"} \xB7 ${h.length}`,hue:be("timeline")});if(n==="summary")return(0,se.jsx)(me,{title:t??"Timeline",meta:`${h.length} items`,tone:"muted",children:(0,se.jsx)(ze,{max:a.columns.length,items:a.columns.map(v=>({id:v.id,label:`${v.label} ${h.filter(O=>O.columnIds.includes(v.id)).length}`,hue:be(v.id)}))})});let l=a.format??String,C=La(h,a.extent,{...a.minWindow===void 0?{}:{minimum:a.minWindow}}),g=C.end-C.start,S=v=>(v-C.start)/g*100,A=a.tick??Math.max(60,Math.round(g/8/60)*60),L=[];for(let v=Math.ceil(C.start/A)*A;v<=C.end;v+=A)L.push(v);let T=r==="fullscreen";return(0,se.jsx)(me,{title:t??"Timeline",meta:`${l(C.start)} \u2013 ${l(C.end)}`,style:{gap:12,...T?{flex:"1 1 auto",minHeight:0,height:"100%"}:{}},children:(0,se.jsxs)("div",{style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0},children:[(0,se.jsx)(Ha,{columns:a.columns}),(0,se.jsxs)("div",{"data-graview-timeline-grid":"",style:{position:"relative",flex:1,minHeight:Math.max(za,Math.ceil(g/A)*Da)},children:[L.map((v,O)=>(0,se.jsx)("div",{style:{position:"absolute",left:ln-8,right:0,top:O===L.length-1?"calc(100% - 1px)":`${S(v)}%`,height:1,background:"var(--graview-edge)"},children:(0,se.jsx)("span",{style:{position:"absolute",left:-(ln-8),...O===L.length-1?{bottom:2}:{top:-7},width:ln-16,textAlign:"right",fontSize:"0.75rem",letterSpacing:"0.06em",color:"var(--graview-ink-faint)"},children:l(v)})},v)),(0,se.jsx)("div",{style:{position:"absolute",inset:0,left:ln,display:"flex",gap:Kr},children:a.columns.map(v=>(0,se.jsx)(Va,{spans:h.filter(O=>O.columnIds.includes(v.id)),window:C,format:l,hue:o,emphasisOf:u,brokenIds:w},v.id))})]})]})})}function Ba(){let e=(0,Le.useRef)(null),[t,n]=(0,Le.useState)(new Set);return(0,Le.useLayoutEffect)(()=>{let r=e.current;if(!r)return;let a=[...r.querySelectorAll("[data-graview-span-name]")].filter(i=>i.scrollWidth>i.clientWidth+.5).map(i=>i.getAttribute("data-graview-span-name")).filter(i=>!t.has(i));a.length>0&&n(new Set([...t,...a]))}),(0,Le.useLayoutEffect)(()=>{let r=e.current;if(!r||typeof ResizeObserver>"u")return;let a=Math.round(r.clientWidth),i=new ResizeObserver(()=>{let s=Math.round(r.clientWidth);s!==a&&(a=s,n(new Set))});return i.observe(r),()=>i.disconnect()},[]),{column:e,oneLine:t}}var Wa=(e,t)=>t===0?e:e.slice(0,t),qr=[0,3,1];function Ha({columns:e}){let t=(0,Le.useRef)(null),[n,r]=(0,Le.useState)(0);(0,Le.useLayoutEffect)(()=>{let i=t.current;if(!i)return;[...i.children].some(p=>p.scrollWidth>p.clientWidth+.5)&&n<qr.length-1&&r(n+1)}),(0,Le.useLayoutEffect)(()=>{let i=t.current;if(!i||typeof ResizeObserver>"u")return;let s=i.clientWidth,p=new ResizeObserver(()=>{i.clientWidth!==s&&(s=i.clientWidth,r(0))});return p.observe(i),()=>p.disconnect()},[]);let a=qr[n];return(0,se.jsx)("div",{ref:t,style:{display:"flex",gap:Kr,paddingLeft:ln,paddingBottom:10},children:e.map(i=>{let s=Wa(i.label,a);return(0,se.jsx)("div",{"data-graview-day-head":i.id,title:s===i.label?void 0:i.label,...s===i.label?{}:{"aria-label":i.label},style:{flex:1,minWidth:0,overflow:"hidden",whiteSpace:"nowrap",fontSize:"0.75rem",letterSpacing:a===1?0:"0.18em",textTransform:"uppercase",textAlign:"center",color:"var(--graview-ink-muted)"},children:s},i.id)})})}function Va({spans:e,window:t,format:n,hue:r,emphasisOf:a,brokenIds:i}){let s=t.end-t.start,p=o=>(o-t.start)/s*100,c=o=>(o.end-o.start)/s<Na,b=Pa(e.filter(o=>!c(o))),u=[...e.filter(c)].sort((o,l)=>o.start-l.start),w=Math.max(1,...b.map(o=>o.lanes)),h=Ba();return(0,se.jsxs)("div",{ref:h.column,"data-graview-day-column":"",style:{position:"relative",flex:1,minWidth:0},children:[b.map(o=>{let l=100/w,C=Math.max(1.6,p(o.end)-p(o.start));return(0,se.jsx)("div",{"data-graview-span":o.id,"data-graview-pick":o.id,"data-graview-emphasis":a(o.id),"data-graview-flagged":i.has(o.id)?"":void 0,title:`${o.label} \xB7 ${n(o.start)}\u2013${n(o.end)}`,style:{position:"absolute",top:`${p(o.start)}%`,height:`${C}%`,left:`${o.lane*l}%`,width:`${l}%`,padding:"0 2px 2px 0",boxSizing:"border-box"},children:(0,se.jsx)("div",{"data-graview-span-name":o.id,style:{height:"100%",minHeight:15,borderRadius:6,padding:"3px 6px",fontSize:"0.75rem",lineHeight:1.25,overflow:"hidden",overflowWrap:"normal",wordBreak:"normal",...h.oneLine.has(o.id)?{display:"block",whiteSpace:"nowrap",textOverflow:"ellipsis"}:{display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical"},...Ta(a(o.id),r(o)),...i.has(o.id)?{borderLeft:"3px solid var(--graview-warn)",paddingLeft:4}:{}},children:C>=3.4?o.label:null})},o.id)}),u.map(o=>{let l=a(o.id);return(0,se.jsxs)("div",{"data-graview-span":o.id,"data-graview-pick":o.id,"data-graview-emphasis":l,"data-graview-moment":"",title:`${o.label} \xB7 ${n(o.start)}`,style:{position:"absolute",top:`${p(o.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,se.jsx)("span",{style:{fontSize:"0.6875rem",letterSpacing:"0.04em",whiteSpace:"nowrap",color:l==="lit"?"var(--graview-accent)":"var(--graview-ink-faint)"},children:n(o.start)}),(0,se.jsx)("span",{style:{fontSize:"0.75rem",minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:l==="dimmed"?"var(--graview-ink-faint)":"var(--graview-ink)"},children:o.label}),(0,se.jsx)("span",{style:{width:7,height:7,borderRadius:999,flex:"0 0 auto",background:i.has(o.id)?"var(--graview-warn)":l==="dimmed"?"var(--graview-edge)":`hsl(${Math.round(r(o))} 60% var(--graview-tint-lightness))`,boxShadow:i.has(o.id)?"0 0 0 3px var(--graview-warn)":l==="lit"?"0 0 0 3px var(--graview-accent-dim)":l==="dimmed"?void 0:`0 0 8px hsl(${Math.round(r(o))} 60% var(--graview-tint-lightness) / 0.45)`}})]},o.id)})]})}function Ur(e){function t(n){let{store:r}=oe(),a=Object.keys(e.bindings),{nodes:i,bar:s}=Ne(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]}:{}}),p=(0,se.jsx)(Ia,{schema:r.schema,...n,nodes:i,options:e});return Ie(n,r.schema,s?(0,se.jsxs)("div",{style:{display:"grid",gap:6,height:"100%",minHeight:0,gridTemplateRows:"auto 1fr"},children:[s,p]}):p)}return{name:"timeline",requiredRoles:[...Fr],bindings:e.bindings,options:e,View:t,place(n,r){return n.map(a=>_r(a,e.bindings,r)).filter(a=>a!==null)}}}var Pe=q(te(),1),Yr=new WeakMap;function Ga(e){return e===1440?t=>Xe(Math.floor(t/60)*60+Math.round(t%60)):e===24?t=>Xe(Math.floor(t)*60):t=>String(t)}function ja(e){let t=e.options;switch(e.lens){case"timeline":{let n=typeof t.extent=="number"?t.extent:1440;return Ur({...t,extent:n,format:Ga(n)}).View}case"calendar":return Cr({...t,...typeof t.today=="string"?{today:t.today}:{}}).View;case"coverage":return Nr(t).View;case"board":return or(t).View;case"plan":return Vr(t).View;case"reach":return jr.View;case"columns":return Ar(t).View;case"blocks":return qa(At(Array.isArray(t.blocks)?t.blocks:[]),e.as)}}function qa(e,t){return n=>{let r=(0,Pe.jsx)(Jt,{blocks:e,slot:"place",view:t,heading:n.mode==="fullscreen"?2:3});return n.fidelity==="glyph"?(0,Pe.jsx)("span",{className:"graview-spec-title",children:n.label}):n.mode!=="fullscreen"?(0,Pe.jsx)(me,{title:n.label??"",children:r}):(0,Pe.jsx)(Fa,{children:r})}}function Fa({children:e}){return(0,Qr.useContext)(Yt)?(0,Pe.jsx)(Pe.Fragment,{children:e}):(0,Pe.jsx)("div",{style:{padding:"12px 16px"},children:e})}function rs(e){let t=Yr.get(e);if(!t){let n=ja(e),r={title:e.title,as:e.as,...e.kinds[0]!==void 0?{on:e.kinds[0]}:{}},a={...r,export:!1},i=s=>{let p=xt()?.app?.lenses?.find(c=>c.title===e.title&&c.name===e.lens);return(0,Pe.jsx)(pn.Provider,{value:p?.export===!1?a:r,children:(0,Pe.jsx)(n,{...s,label:e.title})})};Yr.set(e,t=i)}return t}export{Ga as a,rs as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./chunk.WVUJXDXZ.js";import{k as x}from"./chunk.
|
|
1
|
+
import"./chunk.WVUJXDXZ.js";import{k as x}from"./chunk.XYGNS637.js";import"./chunk.DZSZUX34.js";import"./chunk.4EXC26LI.js";import"./chunk.PWAP2GJS.js";import"./chunk.AHPYNDVA.js";import"./chunk.FNVGNISQ.js";import"./chunk.D5LOTCBU.js";import{fb as f,hb as N,la as S}from"./chunk.Q4MI53KK.js";import"./chunk.FQLNBIQ5.js";import"./chunk.AJZBJBMO.js";var k=(n,r,t)=>({untrusted:!0,authoredBy:t.say(r),text:n});function O(n,r){let t;for(let[a,e]of Object.entries(n)){if(typeof e!="string"||a==="id"||a==="kind")continue;let o=r.fieldBy(n.id,a);o&&(t??={...n},t[a]=k(e,o,r))}return t??n}function L(n,r,t){let a=e=>{if(Array.isArray(e))return e.map(a);if(e!==null&&typeof e=="object"&&"id"in e&&"label"in e){let o=e,i=t.recordBy(o.id);return i?{...o,label:k(o.label,i,t)}:o}if(typeof e=="string"){let o=t.recordBy(n);return o?k(e,o,t):e}return e};return Object.fromEntries(Object.entries(r).map(([e,o])=>[e,a(o)]))}function $(n,r){return n.map(t=>{let a=r.recordBy(t.id);return a?{...t,label:k(t.label,a,r)}:t})}function D(n,r){return{...n,nodes:n.nodes.map(t=>O(t,r))}}var E=n=>(JSON.stringify(n)??"null").length,R=n=>typeof n=="number"&&Number.isFinite(n)&&n>0?Math.floor(n):0;function w(n,r,t,a,e,o=""){let i=n-r-t;return i>0?`and ${i} more ${e}: call ${a} with ${o}offset ${r+t} for the next page.`:void 0}var j=({line:n,...r})=>r;function T(n){let r;for(let[t,a]of Object.entries(n))typeof a!="string"||a.length<=600||(r??={...n},r[t]=`${a.slice(0,600)}\u2026 (cut at ${600} of ${a.length} characters)`);return r??n}function B(n,r,t,a){let e=Math.min(t,Math.max(0,n.length-r)),o=n.slice(r,r+e),i=a(o);for(;e>1&&E(i)>8e3;)e=Math.max(1,Math.floor(e*.75)),o=n.slice(r,r+e),i=a(o);return{page:o,answer:i}}function C(n,r){let t=JSON.stringify(r)??"null";if(t.length<=8e3)return r;let a=`This answer was ${t.length} characters, more than the ${8e3} one read answers, so it is cut. Ask ${n} for less, or use search_graph and get_node to read one thing.`;for(let e=8e3-a.length-40;;){let o={cut:a,partial:t.slice(0,e)},i=E(o)-8e3;if(i<=0)return o;e=Math.max(0,e-i-8)}}function I(n,r){let{matched:t,later:a,...e}=r,o=n.hits.filter(i=>i.about==="node").length;return n.total>o?{...e,more:`and ${n.total-o} more records match: narrow the words, or add kind:<kind>.`}:e}function P(n,r,t){let a=N(t.archived),e={nodes:n.graph.allNodes({archived:a}),edges:n.graph.allEdges({archived:"all"})},o=R(t.offset),i=e.nodes.length,{page:h,answer:u}=B(e.nodes,o,25,d=>{let g=new Set(d.map(s=>s.id)),l=new Set(d.map(s=>s.id)),c=w(i,o,d.length,"get_graph","nodes"),p=s=>l.has(s)||(a==="all"?n.graph.has(s):n.graph.has(s)&&f(n.graph.getNode(s))===a);return{...D({nodes:d.map(T),edges:e.edges.filter(s=>g.has(s.from)&&p(s.to))},r),total:i,...c?{more:c}:{}}});return{data:u,reads:h.map(d=>d.id)}}function U(n,r,t,a){let e=n.graph.getNode(t),o=R(a.offset),i=n.graph.outEdges(t),h=n.graph.inEdges(t),u=i.slice(o,o+20),d=h.slice(o,o+20),g=(s,A)=>{let m=n.graph.getNode(A);return{kind:s,id:A,label:m?S(n.schema.tryDefinition(m.kind),m):A,...f(m)?{archived:!0}:{}}},l=x(n.schema,n.graph,e),c=n.violations().filter(s=>s.nodeIds.includes(t)),p=[w(i.length,o,u.length,"get_node","links out",`id "${t}" and `),w(h.length,o,d.length,"get_node","links in",`id "${t}" and `),c.length>20?`and ${c.length-20} more problems: get_violations lists them.`:void 0].filter(Boolean);return{data:{node:O(T(e),r),...f(e)?{archived:!0}:{},...Object.keys(l.values).length>0?{computed:L(t,l.values,r)}:{},...Object.keys(l.refused).length>0?{uncomputed:l.refused}:{},out:$(u.map(s=>g(s.kind,s.to)),r),in:$(d.map(s=>g(s.kind,s.from)),r),violations:c.slice(0,20).map(j),...p.length>0?{more:p.join(" ")}:{}},reads:[t,...u.map(s=>s.to),...d.map(s=>s.from)]}}function F(n,r){let t=R(r.offset),{page:a,answer:e}=B(n,t,20,o=>{let i=w(n.length,t,o.length,"get_violations","problems");return{violations:o.map(j),total:n.length,...i?{more:i}:{}}});return{data:e,reads:[...new Set(a.flatMap(o=>o.nodeIds))]}}export{P as graphRead,U as nodeRead,I as searchRead,F as violationsRead,C as withinReadChars};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{cb as g}from"./chunk.Q4MI53KK.js";function y(e){return[`based on \u201C${e.basis}\u201D`,...e.confidence!==void 0?[`${Math.round(e.confidence*100)}% sure`]:[],...e.model?[e.model]:[]].join(" \xB7 ")}var u=e=>`Not yet kept by a person. ${e.by.name??e.by.id??"Something"} made it${e.lineage?`, ${y(e.lineage)}`:""}.`,p=e=>`${e.kind}\0${e.from}\0${e.to}`;function k(e,o){let r=new Map;for(let n of e){if(n.undoes!==void 0||o.has(n.id)||n.withheld)continue;let l=g(n.author),s=l==="human"||l==="visitor",c=new Map;for(let t of n.primitives){if(t.op!=="add-edge"&&t.op!=="remove-edge")continue;let i=p(t.edge),a=r.get(i)??c.get(i);if(r.delete(i),t.op==="remove-edge")a&&c.set(i,a);else if(a&&(s||!n.lineage))r.set(i,s?{...a,provisional:!1,keptBy:n.id}:a);else{let d=n.lineage;r.set(i,{edge:t.edge,made:n.id,by:n.author,...d?{lineage:d}:{},provisional:!s&&(d?.confidence??1)<1})}}}return r}var f=new WeakMap;function v({log:e}){let o=e.all(),r=`${e.horizon}:${o.length}:${o.at(-1)?.id}`,n=f.get(e);return n?.at!==r&&f.set(e,n={at:r,links:k(o,e.undoneIds())}),n.links}var L=(e,o)=>v(e).get(p(o));var m=e=>[...v(e).values()].filter(o=>o.provisional);export{y as a,u as b,L as c,m as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Xc as g}from"./chunk.Q4MI53KK.js";function b(){let t=new Uint8Array(16);return globalThis.crypto.getRandomValues(t),Array.from(t,e=>e.toString(16).padStart(2,"0")).join("")}function k(t,e){if(!t)return;let i={..."filter"in e&&e.filter?{filter:e.filter}:{},...e.section?{section:e.section}:{}};"record"in e?t.record(e.record,i):"list"in e?t.list(e.list,i):t.place(e.place,i)}function w(t,e){if(!t?.href)return;let i={..."filter"in e&&e.filter?{filter:e.filter}:{},...e.section?{section:e.section}:{}};return t.href("record"in e?{record:e.record}:"list"in e?{list:e.list}:{place:e.place},i)}var v=[["accent","--graview-accent"],["ground","--graview-ground"],["panel","--graview-panel"],["ink","--graview-ink"],["inkMuted","--graview-ink-muted"],["edge","--graview-edge"],["fontBody","--graview-font-body"],["fontDisplay","--graview-font-display"],["fontMono","--graview-font-mono"],["radius","--graview-radius"]];function B(t){let e=t.ownerDocument.defaultView,i=e.getComputedStyle(t),s=t.closest("[data-graview-scheme]")?.getAttribute("data-graview-scheme"),d={scheme:s==="dark"||s==="light"?s:/\bdark\b/.test(i.colorScheme??"")?"dark":/\blight\b/.test(i.colorScheme??"")?"light":e.matchMedia?.("(prefers-color-scheme: dark)").matches?"dark":"light"};for(let[l,u]of v)d[l]=i.getPropertyValue(u).trim();return d}function R(t,e){let i=t.defaultView;if(!i||typeof i.MutationObserver!="function")return()=>{};let s=new i.MutationObserver(e);s.observe(t.documentElement,{attributes:!0,subtree:!0,attributeFilter:["data-graview-scheme","data-theme"]});let o=i.matchMedia?.("(prefers-color-scheme: dark)");return o?.addEventListener?.("change",e),()=>{s.disconnect(),o?.removeEventListener?.("change",e)}}function T(t,e,i){let s=e?.(),o=t(),d=s?.logo,l=i.url(typeof d=="string"||d===void 0?d:o.scheme==="dark"&&d.dark?d.dark:d.light);return{...o,...s?.name?{name:s.name}:{},...l?{logo:l}:{}}}function x(t,e,i){let s,o,d=n=>{n?.startsWith("blob:")&&t.URL.revokeObjectURL(n)},l=async n=>{if(n.startsWith("<"))return g(n)===null?new t.Blob([n],{type:"image/svg+xml"}):void 0;if(/\\|%2e/i.test(n)||n.split(/[?#]/)[0].split("/").some(m=>m==="."||m===".."))return;let r=new t.URL(n,t.document.baseURI);if(r.origin!==t.location.origin||!/^https?:$/.test(r.protocol))return;let a=await t.fetch(r.href,{credentials:"same-origin"}),c=(a.headers.get("content-type")??"").split(";")[0].trim();return a.ok&&c.startsWith("image/")?new t.Blob([await a.arrayBuffer()],{type:c}):void 0},u=n=>new Promise(r=>{let a=new t.Image;a.onload=()=>r(!0),a.onerror=()=>r(!1),t.setTimeout(()=>r(!1),2e3),a.src=n}),p=n=>new Promise((r,a)=>{let c=new t.FileReader;c.onload=()=>r(String(c.result)),c.onerror=a,c.readAsDataURL(n)}),h=async n=>{if(/^data:image\//i.test(n))return n;let r=await l(n);if(!(!r||s!==n)){if(i==="blob"){let a=t.URL.createObjectURL(r);if(await u(a))return a;t.URL.revokeObjectURL(a)}return p(r)}},f=(n,r)=>{if(s!==n)return d(r);r!==o&&(d(o),o=r,e())};return{url(n){let r=n?.trim()||void 0;return r!==s&&(s=r,r?h(r).then(a=>f(r,a),()=>f(r,void 0)):(d(o),o=void 0)),o},dispose(){s=void 0,d(o),o=void 0}}}export{b as a,k as b,w as c,B as d,R as e,T as f,x as g};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as I,c as x}from"./chunk.
|
|
1
|
+
import{a as I,c as x}from"./chunk.YXAKHXYB.js";import"./chunk.KZUMXT5J.js";import"./chunk.CGK2PY76.js";import{b,c as A,j as v,q as w,s as O,v as G}from"./chunk.CYTTZOYL.js";import"./chunk.SDO3U72B.js";import{Td as k,ie as E,pe as S,qe as W}from"./chunk.Q4MI53KK.js";import"./chunk.FQLNBIQ5.js";import"./chunk.AJZBJBMO.js";var F=(e,i)=>k(e,i).slice(1);function j(e,i){let l=e.split("/").filter(Boolean);return l.length===i.length&&l.every((s,h)=>s.startsWith(":")||s==="*"||s===i[h])}var $=["problems","search","map","places"];function R(e,i,l,s,h=[]){let{schema:r}=i,o=r.kinds,f=t=>{if(t.startsWith(w))return(t.slice(w.length).split("|")[0]??"").split("+").every(V=>o.includes(V));let y=O(t);return y!==null?o.includes(y):t.startsWith("edge:")||l.graph.getNode(t)!==void 0},[p="/",u]=e.path.split("?"),n=p.split("/").filter(Boolean),m=u?`?${u}`:"",d=n.length>0&&!$.includes(n[0])?o.find(t=>F(r,t)===n[0]):void 0,c=e.path;if(n[0]==="places"&&n.length===2)`/places/${n[1]}`!==E&&!s.some(t=>t.as===decodeURIComponent(n[1]))&&(c="/");else if(d){let t=n[1]===void 0?void 0:decodeURIComponent(n[1]);c=`/${F(r,d)}${t!==void 0&&l.graph.getNode(t)?.kind===d?`/${n[1]}`:""}${m}`}else n.length>0&&n.length<=2&&!$.includes(n[0])&&!h.some(t=>j(t.path,n))&&(c="/");let g=A(e.stop),P=g.within?.view,U=P!==void 0&&!s.some(t=>t.as===P),a=g;if(U){let{view:t,...y}=g.within??{};a={...a,within:y}}if(g.focusId&&!f(g.focusId)){let t=e.kind&&o.includes(e.kind)?G(e.kind):null;a={...v(a,t),zoom:!1}}return a={...a,relation:a.relation&&(o.includes(a.relation)||r.edgeKinds.includes(a.relation))?a.relation:null,expanded:a.expanded.filter(f),pins:Object.fromEntries(Object.entries(a.pins).filter(([t])=>f(t))),...a.selection?{selection:a.selection.filter(f)}:{}},{face:e.face,path:c,stop:b(a),...e.kind?{kind:e.kind}:{}}}function B(e,i,l){let s=e.at,h=e.pages?.routes()??[];if(e.routing!=="address"||typeof window>"u")return R(s,e.app,i,l,h);let{pathname:r,search:o,hash:f}=window.location,p=W(r,e.basePath),u=I({routing:"address",...e.basePath===void 0?{}:{basePath:e.basePath},face:s.face}),n=u==="pages",m={...s,face:u,...p===null?{}:n?{path:p+o}:{stop:x(e.basePath)??s.stop}},d=R(m,e.app,i,l,h),c=n?d.path===m.path?null:S(d.path,e.basePath===void 0?{}:{basePath:e.basePath}):d.stop===b(A(m.stop))?null:r+o+d.stop;return p!==null&&c!==null&&c!==r+o+f&&window.history.replaceState(window.history.state,"",c),d}export{R as settle,B as settleAt};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{fa as V,ga as w}from"./chunk.
|
|
1
|
+
import{fa as V,ga as w}from"./chunk.CYTTZOYL.js";import"./chunk.SDO3U72B.js";import{Od as u,Sd as h}from"./chunk.Q4MI53KK.js";import"./chunk.FQLNBIQ5.js";import"./chunk.AJZBJBMO.js";var c=i=>[i,...u.filter(o=>o!==i)];function p(i,o){if(o.hidden.length===0&&o.removed.length===0)return i;let a=new Set(o.removed.filter(e=>!e.lens).map(e=>e.name)),f=new Set(o.hidden),r=e=>e?.name!==void 0&&(a.has(e.name)||e.title!==void 0&&f.has(e.name)),m=()=>(i.homes?.()??[]).filter(e=>e.name===void 0||!a.has(e.name)),l=(e,t,d)=>[...i.registrations()].reverse().find(n=>n.kind===e&&n.cardinality===t&&n.fidelity===d&&!n.beside&&!n.hidden&&!r(n)),y=(e,t)=>{for(let d of c(t.fidelity)){let n=l(e,t.cardinality,d);if(n)return n}if(t.cardinality==="one")for(let d of c(t.fidelity)){let n=l(e,"many",d);if(n)return n}},s={...i,register(e,t,d,n){return i.register(e,t,d,n),s},...i.home?{home(e,t){return i.home(e,t),s}}:{},...i.homes?{homes:m,homeView:()=>m().at(-1)?.view}:{},lookup(e,t){return i.lookup(e,t)===void 0?void 0:l(e,t.cardinality,t.fidelity)?.view},places:()=>i.places().filter(e=>!(e.name!==void 0&&a.has(e.name))).map(e=>e.name!==void 0&&f.has(e.name)&&!e.hidden?{...e,hidden:!0}:e),resolve(e,t,d){let n=i.resolve(e,t,d);return!n||!r(n)||d!==void 0&&n.name!==void 0&&!a.has(n.name)&&n.title!==void 0&&h(n.title)===d?n:y(e,t)},all:()=>i.all().filter(e=>!(e.name!==void 0&&a.has(e.name))),homes:()=>(i.homes?.()??[]).filter(e=>!(e.name!==void 0&&a.has(e.name))),homeView:()=>i.homes?s.homes().at(-1)?.view:i.homeView?.()};return V(i)&&w(s),s}function R(i,o,a){let f,r=()=>{let m=o.current();f&&m.hidden===f.hidden&&m.removed===f.removed||(f=m,a(p(i,m)))};return r(),o.onChange?.(r)??(()=>{})}export{p as tidyViews,R as watchTidied};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./chunk.
|
|
1
|
+
import"./chunk.REUMBCSV.js";import"./chunk.2KIWGQXC.js";import{b as m}from"./chunk.D5LOTCBU.js";import"./chunk.KZUMXT5J.js";import"./chunk.CGK2PY76.js";import{T as p}from"./chunk.CYTTZOYL.js";import"./chunk.SDO3U72B.js";import{Z as l}from"./chunk.Q4MI53KK.js";import"./chunk.FQLNBIQ5.js";import{b as f}from"./chunk.AJZBJBMO.js";var a=f(p(),1);function A({states:e,definition:v}){let s=e.values.reduce((t,n)=>t+n.count,0),u=t=>t===null?"with none":m(v,e.field,t).toLowerCase(),c=e.values.filter(t=>t.count>0).map(t=>`${l(t.count)} ${u(t.value)}`).join(", ");return s===0?null:(0,a.jsx)("div",{className:"graview-district-states",role:"img","aria-label":c,title:c,children:e.values.map((t,n)=>{if(t.count===0)return null;let y=e.values.filter(r=>r.count>0).length,w=t.count/s*(168-(y-1)),o=l(t.count),i=`${o} ${u(t.value)}`,d=r=>r.length*6.2+8<=w;return(0,a.jsx)("span",{"data-graview-tier":t.tier,style:{flexGrow:t.count},title:i,children:d(i)?i:d(o)?o:""},n)})})}export{A as StatesBar};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Eb as a,la as l,ra as p}from"./chunk.Q4MI53KK.js";import{c}from"./chunk.FQLNBIQ5.js";function m(e){if(e.withheld===!0||e.undoes!==void 0||e.mutation?.name!==a)return;let{node:n,field:r}=e.mutation.args??{};return typeof n=="string"&&typeof r=="string"?{node:n,field:r}:void 0}function R(e,n){return e.kind!==n.kind?!1:e.id!==void 0||n.id!==void 0?e.id===n.id&&e.onBehalfOf===n.onBehalfOf:(e.name??"")===(n.name??"")}var f=e=>{let n=0;for(let r of e)n++;return n};function k(e){if(e.length===0)return;let n=m(e[0]);if(!n)return;let r=0,o=0;for(let i of e){let d=m(i);if(!d||d.node!==n.node||d.field!==n.field)return;for(let t of i.primitives)if(t.op==="splice-text"&&t.id===n.node&&t.field===n.field)r+=f(t.inserted),o+=f(t.removed);else if(t.op==="patch-node"&&t.id===n.node&&Object.prototype.hasOwnProperty.call(t.after,n.field)){let s=t.before[n.field],u=t.after[n.field];r+=typeof u=="string"?f(u):0,o+=typeof s=="string"&&!c(s)?f(s):0}}return{...n,inserted:r,removed:o}}var T=(e,n)=>({node:e.node,field:e.field,inserted:e.inserted+n.inserted,removed:e.removed+n.removed});function y(e){return`(${[...e.inserted>0||e.removed===0?[`+${e.inserted}`]:[],...e.removed>0?[`\u2212${e.removed}`]:[]].join(" ")})`}function w(e,n,r,o=!0){let i=r?.getNode(e.node),d=i?n.tryDefinition(i.kind):void 0,t=p(d,e.field);return`Wrote in ${i&&o?`${l(d,i)}'s ${t.toLowerCase()}`:t} ${y(e)}`}export{R as a,k as b,T as c,w as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as X}from"./chunk.
|
|
1
|
+
import{b as X}from"./chunk.OTSBF367.js";import"./chunk.KZUMXT5J.js";import"./chunk.CGK2PY76.js";import{G as ce,T as Y,ba as N,ea as _}from"./chunk.CYTTZOYL.js";import"./chunk.SDO3U72B.js";import{Eb as R,se as U}from"./chunk.Q4MI53KK.js";import"./chunk.FQLNBIQ5.js";import{b as O}from"./chunk.AJZBJBMO.js";var u=O(ce(),1);function M(e,t,s=!1){if(e<t.at||e===t.at&&s)return e;let i=t.at+t.removed.length;return e>=i?e+t.inserted.length-t.removed.length:s?t.at:t.at+t.inserted.length}var G=e=>e>=55296&&e<=56319,V=e=>e>=56320&&e<=57343;function q(e,t,s){let i=Math.min(e.length,t.length),n=0,l=Math.max(0,Math.min(i,t.length-s));for(;n<l&&e.charCodeAt(e.length-1-n)===t.charCodeAt(t.length-1-n);)n++;let r=0;for(;r<i-n&&e.charCodeAt(r)===t.charCodeAt(r);)r++;return r>0&&G(e.charCodeAt(r-1))&&r--,n>0&&V(e.charCodeAt(e.length-n))&&n--,{at:r,removed:e.slice(r,e.length-n),inserted:t.slice(r,t.length-n)}}function B(e,t){let s=Math.min(e.length,t.length),i=0;for(;i<s&&e.charCodeAt(i)===t.charCodeAt(i);)i++;i>0&&G(e.charCodeAt(i-1))&&i--;let n=0;for(;n<s-i&&e.charCodeAt(e.length-1-n)===t.charCodeAt(t.length-1-n);)n++;return n>0&&V(e.charCodeAt(e.length-n))&&n--,{at:i,removed:e.slice(i,e.length-n),inserted:t.slice(i,t.length-n)}}function Z(e,t){let s=c=>c.at+c.removed.length;if(s(e)<t.at)return e;if(e.at>s(t))return{...e,at:e.at+t.inserted.length-t.removed.length};let i=Math.min(e.at,t.at),n=s(e)-s(t),l=e.removed.slice(0,t.at-i)+t.inserted+(n>0?e.removed.slice(e.removed.length-n):""),r=t.at<=e.at?t.inserted+e.inserted:e.inserted+t.inserted,d=B(l,r);return{...d,at:i+d.at}}function I(e,t){let s=M(e.start,t,!0),i=e.end===e.start?s:M(e.end,t);return{start:s,end:Math.max(s,i)}}function le(e,t){let{kind:s,id:i,session:n}=e.author,l=`${s}:${i??""}:`;return t.startsWith(l)&&(!n||t.slice(l.length)===n)}function J(e,t,s,i){let n=e.anchor,l=e.head;for(let d of s)if(!(d.seq<e.rev||le(d,t)))for(let c of d.primitives)c.op!=="splice-text"||c.id!==e.node||c.field!==e.field||(n=M(n,c),l=M(l,c));let r=d=>Math.max(0,Math.min(i,d));return{start:r(n),end:r(l)}}var W=(e,t,s)=>e.ops.length>0&&e.ops.every(i=>{let n=i.mutation?.args;return i.mutation?.name===R&&n?.node===t&&n.field===s}),de=(e,t,s,i)=>t.ops.length>0&&t.ops.every(n=>n.undoes!==void 0)&&e.batches().some(n=>t.ops.some(l=>l.undoes===n.id||l.undoes===n.ops[0]?.id)&&W(n,s,i)),Q=(e,t)=>e.author.kind==="human"&&(t?.id===void 0||e.author.id===void 0||e.author.id===t.id);function j(e,t,s,i){let n=e.batches();for(let l=n.length-1;l>=0;l--){let r=n[l];if(!(!Q(r,t)||r.undone||!W(r,s,i))&&e.canUndo(r.id).ok)return r.id}}function ee(e,t,s,i){let n=e.batches();for(let l=n.length-1;l>=0;l--){let r=n[l];if(Q(r,t)){if(W(r,s,i))return;if(de(e,r,s,i))return r.undone?void 0:r.id}}}var p=O(Y(),1);function ue(e){let{store:t}=N(),{live:s,nodeId:i,field:n}=e,[l,r]=(0,u.useState)(null);return(0,u.useEffect)(()=>{let d=!0;return s.typing(i,n).then(c=>d&&r(c)),()=>{d=!1}},[i,n]),l&&!t.collaborative(i,n)?(0,p.jsx)(p.Fragment,{children:e.writtenWhole}):(0,p.jsx)(pe,{...e,typing:l})}function pe({nodeId:e,field:t,label:s,markdown:i,live:n,onDone:l,typing:r}){let{store:d,principal:c}=N(),m=_(e),f=ne(m?.[t]),[T,ie]=(0,u.useState)(!1),v=(0,u.useRef)(null),D=(0,u.useRef)(f),E=(0,u.useRef)(!1),H=(0,u.useRef)(n);H.current=n;let K=()=>ne(d.graph.getNode(e)?.[t]),b=!r||d.permits({name:R,args:{node:e,field:t,at:0,remove:0,insert:""}},c).ok;(0,u.useEffect)(()=>v.current?.focus(),[T,r]);let C=(0,u.useRef)(void 0),k=()=>{C.current===void 0&&(C.current=setTimeout(()=>{C.current=void 0;let o=v.current;if(!o||o.ownerDocument.activeElement!==o)return;let a=o.selectionDirection==="backward";H.current.sayCaret({node:e,field:t,anchor:a?o.selectionEnd:o.selectionStart,head:a?o.selectionStart:o.selectionEnd,rev:d.log.length})},ge))};(0,u.useEffect)(()=>()=>{clearTimeout(C.current),H.current.sayCaret(null)},[]);let F=o=>{let a=v.current;if(a){if(a.value!==o){let h=I({start:a.selectionStart,end:a.selectionEnd},B(a.value,o)),g=a.selectionDirection??"none";a.value=o,a.setSelectionRange(h.start,h.end,g)}D.current=o}},$=()=>{let o=v.current;if(!o||!r||!b||E.current)return;let a=D.current,h=K(),g=q(a,o.value,o.selectionEnd);if(g.removed===""&&g.inserted==="")return F(h);let y=a===h?g:Z(g,B(a,h));try{r.splice(y.at,y.removed.length,y.inserted)}catch{}let w=K();if(o.value!==w){o.value=w;let S=Math.min(w.length,y.at+y.inserted.length);o.setSelectionRange(S,S)}D.current=w,k()};(0,u.useLayoutEffect)(()=>{E.current||F(f)},[f]);let ae=async o=>{if(!r)return;r.flush();for(let h=0;r.waiting()>0&&h<100;h++)await new Promise(g=>setTimeout(g,30));let a=o?ee(d,c,e,t):j(d,c,e,t);if(a)try{o?d.redo(a,{author:c}):d.undo(a,{author:c})}catch{}},x=o=>{r?.flush(),n.sayCaret(null),l(o)},A=(0,u.useRef)(void 0);(0,u.useEffect)(()=>()=>A.current?.(),[]);let se=o=>{A.current?.();let a=o.ownerDocument,h=v.current?.closest("[data-graview-live]"),g=P=>{let L=P.target;if(L instanceof Node&&h?.contains(L))return S();L instanceof Element&&L.closest(te)||(S(),x(!0))},y=()=>{let P=a.activeElement;P!==null&&P!==a.body||o.isConnected&&fe(o)||(S(),v.current?.focus({preventScroll:!0}))},w=new MutationObserver(y);w.observe(a.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["open","hidden"]}),a.addEventListener("focusin",g),a.addEventListener("toggle",y,!0);let S=()=>{A.current=void 0,w.disconnect(),a.removeEventListener("focusin",g),a.removeEventListener("toggle",y,!0)};A.current=S},z=[...n.who.values()].filter(o=>o.caret?.node===e&&o.caret.field===t);return(0,p.jsxs)("div",{style:{display:"grid",gap:8,minWidth:0},"data-graview-live":t,children:[T?(0,p.jsx)("div",{"data-graview-preview":t,"aria-label":`${s}, as it will read`,role:"region",style:ye,children:(0,p.jsx)(X,{text:f,markdown:!0})}):(0,p.jsxs)("div",{style:{position:"relative",minWidth:0},children:[(0,p.jsx)("textarea",{ref:v,"aria-label":s,"data-graview-field":t,defaultValue:f,readOnly:!r||!b,rows:3,onInput:$,onCompositionStart:()=>{E.current=!0},onCompositionEnd:()=>{E.current=!1,$()},onSelect:k,onFocus:k,onPointerDown:()=>r?.flush(),onKeyDown:o=>{let a=o.key;a==="Escape"?(o.preventDefault(),x(!1)):(o.metaKey||o.ctrlKey)&&!o.altKey&&a.toLowerCase()==="z"?(o.preventDefault(),ae(o.shiftKey)):(o.metaKey||o.ctrlKey)&&a==="Enter"?(o.preventDefault(),x(!1)):(a==="Enter"||me.has(a))&&r?.flush()},onKeyUp:k,onBlur:o=>{r?.flush(),n.sayCaret(null);let a=o.relatedTarget;if(a instanceof Node&&o.currentTarget.closest("[data-graview-live]")?.contains(a))return;let h=a instanceof Element?a.closest(te):null;if(h)return se(h);x(!0)},style:ve}),z.length>0?(0,p.jsx)(he,{text:f,others:z,area:v,log:d.log.all()}):null]}),(0,p.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:8},children:[(0,p.jsx)("button",{type:"button",onClick:()=>x(!1),style:re,children:"Done"}),i?(0,p.jsx)("button",{type:"button","aria-pressed":T,onClick:()=>ie(!T),style:re,children:T?"Write":"Preview"}):null,(0,p.jsx)("span",{style:{fontSize:"0.75rem",color:"var(--graview-ink-faint)"},...b?{}:{"data-graview-readonly":""},children:b?"Saved as you type \xB7 Ctrl or \u2318 Z takes back your typing":`Read only: the ${s.toLowerCase()} can't be changed here now`})]})]})}function he({text:e,others:t,area:s,log:i}){let n=(0,u.useRef)(null);(0,u.useLayoutEffect)(()=>{let c=s.current,m=n.current;if(!c||!m)return;let f=()=>{m.scrollTop=c.scrollTop};return f(),c.addEventListener("scroll",f),()=>c.removeEventListener("scroll",f)});let l=t.map(c=>({one:c,at:J(c.caret,c.participant,i,e.length).end})).sort((c,m)=>c.at-m.at),r=[],d=0;for(let{one:c,at:m}of l){r.push(e.slice(d,m)),d=m;let f=U(c)||"Somebody";r.push((0,p.jsx)("span",{"data-graview-caret":c.participant,title:`${f} is typing here`,style:{borderLeft:`2px solid hsl(${Math.round(c.hue)} 55% 52%)`,marginLeft:-1,marginRight:-1,pointerEvents:"auto"}},c.participant))}return r.push(`${e.slice(d)}\u200B`),(0,p.jsx)("div",{ref:n,"aria-hidden":"true",style:we,children:r})}var te='[data-graview-overlay], dialog, [role="dialog"], [role="alertdialog"], [popover]',fe=e=>{if(e.hasAttribute("hidden")||e instanceof HTMLDialogElement&&!e.open)return!1;if(e.hasAttribute("popover"))try{return e.matches(":popover-open")}catch{}return!0},ge=120,ne=e=>typeof e=="string"?e:"",me=new Set(["ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End","PageUp","PageDown"]),ye={minHeight:"7.5em",padding:"8px 10px",border:"1px dashed var(--graview-edge-bright)",borderRadius:6,lineHeight:1.6,minWidth:0},re={font:"inherit",fontSize:"0.8125rem",minHeight:28,padding:"2px 12px"},oe={font:"inherit",lineHeight:1.5,width:"100%",boxSizing:"border-box",minHeight:"7.5em",padding:"8px 10px",borderRadius:6},ve={...oe,resize:"vertical",fieldSizing:"content",color:"var(--graview-ink)",background:"var(--graview-panel, transparent)",border:"1px solid var(--graview-edge-bright)"},we={...oe,position:"absolute",inset:0,height:"100%",border:"1px solid transparent",color:"transparent",whiteSpace:"pre-wrap",overflowWrap:"break-word",overflow:"hidden",pointerEvents:"none"};export{ue as default};
|