graview 0.1.27 → 0.1.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/preview/chunk.2643W7FT.js +1 -0
- package/dist/preview/chunk.2CLPRG3I.js +1 -0
- package/dist/preview/chunk.2IZFIORK.js +1 -0
- package/dist/preview/chunk.2NCTM5K2.js +2 -0
- package/dist/preview/{chunk.5BN2ARQ2.js → chunk.3G5MQFZK.js} +1 -1
- package/dist/preview/chunk.3JM2TNDD.js +2 -0
- package/dist/preview/chunk.44FVJOK4.js +28 -0
- package/dist/preview/chunk.4GGAPOMK.js +2 -0
- package/dist/preview/chunk.5AT4O4BN.js +1 -0
- package/dist/preview/chunk.5JXUAMKI.js +1 -0
- package/dist/preview/chunk.5R66YTET.js +2 -0
- package/dist/preview/chunk.64P76WK4.js +1 -0
- package/dist/preview/chunk.7D77HEIJ.js +1 -0
- package/dist/preview/chunk.7DNFXJH3.js +1 -0
- package/dist/preview/{chunk.HPD3DSTP.js → chunk.7PRFYYVM.js} +1 -1
- package/dist/preview/chunk.AE5GKL4C.js +1 -0
- package/dist/preview/chunk.ARR75WBP.js +35 -0
- package/dist/preview/chunk.AVUS5LMG.js +3 -0
- package/dist/preview/chunk.BKPGDEES.js +1 -0
- package/dist/preview/chunk.BZ5OJYHU.js +1 -0
- package/dist/preview/chunk.CK7QWLMX.js +1 -0
- package/dist/preview/chunk.COTG2IG5.js +1 -0
- package/dist/preview/chunk.D4GOVA25.js +1 -0
- package/dist/preview/chunk.DAA6XWLF.js +1 -0
- package/dist/preview/chunk.DKTCRFMS.js +1 -0
- package/dist/preview/chunk.DLGTFXGM.js +1 -0
- package/dist/preview/chunk.DN7SN6ZR.js +1 -0
- package/dist/preview/chunk.G4WQGTZR.js +3 -0
- package/dist/preview/chunk.GDA3G4U2.js +6 -0
- package/dist/preview/chunk.GS4T26WW.js +328 -0
- package/dist/preview/chunk.GZH6PTXN.js +1 -0
- package/dist/preview/chunk.HFKMHLJ3.js +1 -0
- package/dist/preview/chunk.HGAMNIST.js +1 -0
- package/dist/preview/chunk.HJCQ6I3S.js +1 -0
- package/dist/preview/chunk.HKBKH7EK.js +1 -0
- package/dist/preview/chunk.HLLWKSZB.js +5 -0
- package/dist/preview/chunk.HONUT6OG.js +1 -0
- package/dist/preview/chunk.HRWLR7T4.js +1 -0
- package/dist/preview/chunk.HV6I74DF.js +1 -0
- package/dist/preview/chunk.IPBXAAQV.js +17 -0
- package/dist/preview/chunk.IWYUFYDJ.js +1 -0
- package/dist/preview/chunk.IZW7DBK4.js +1 -0
- package/dist/preview/chunk.J46KDTEZ.js +10 -0
- package/dist/preview/chunk.JNGUSAWX.js +70 -0
- package/dist/preview/chunk.JU2ZVKMT.js +2 -0
- package/dist/preview/chunk.K4ZUVH2G.js +1 -0
- package/dist/preview/chunk.KC6UZHBM.js +1 -0
- package/dist/preview/chunk.KLITC55P.js +1 -0
- package/dist/preview/chunk.KZ2376BD.js +19 -0
- package/dist/preview/chunk.LYJAVUST.js +1 -0
- package/dist/preview/chunk.MB7LKKUD.js +1 -0
- package/dist/preview/chunk.MOUGB4H6.js +1 -0
- package/dist/preview/chunk.MYFWM572.js +1 -0
- package/dist/preview/chunk.N4FBDA2W.js +1 -0
- package/dist/preview/chunk.O42YET3W.js +1 -0
- package/dist/preview/chunk.O4QPITBD.js +9 -0
- package/dist/preview/{chunk.IXVSJJQH.js → chunk.OGXE2RHC.js} +4 -4
- package/dist/preview/chunk.OHE5AMHH.js +0 -0
- package/dist/preview/chunk.ONGVH3ZM.js +1076 -0
- package/dist/preview/chunk.OQDETV4X.js +1 -0
- package/dist/preview/chunk.OWBEV6FR.js +1 -0
- package/dist/preview/chunk.OWE6OJ4P.js +1 -0
- package/dist/preview/chunk.OYJSFO3A.js +1 -0
- package/dist/preview/chunk.P62SKNJS.js +27 -0
- package/dist/preview/chunk.PA5HYAEO.js +1 -0
- package/dist/preview/{chunk.OA5BVKJH.js → chunk.PMEDLEZY.js} +2 -2
- package/dist/preview/chunk.PTXQHHKF.js +1 -0
- package/dist/preview/chunk.Q5WEOX3Q.js +1 -0
- package/dist/preview/chunk.QNHECGMH.js +1 -0
- package/dist/preview/chunk.QSDT2RLY.js +1 -0
- package/dist/preview/chunk.R2D373VG.js +1 -0
- package/dist/preview/chunk.RB4RTBRZ.js +1 -0
- package/dist/preview/chunk.RCLJ4H52.js +116 -0
- package/dist/preview/chunk.RKRSRKF3.js +1 -0
- package/dist/preview/chunk.RWGLKDWH.js +1 -0
- package/dist/preview/chunk.SIL4KD3K.js +1 -0
- package/dist/preview/chunk.SS76EIMI.js +1 -0
- package/dist/preview/{chunk.IKT7JQUW.js → chunk.T4LY5QXO.js} +1 -1
- package/dist/preview/chunk.UIIVEQAT.js +1 -0
- package/dist/preview/chunk.UT6642FC.js +1 -0
- package/dist/preview/chunk.UTHHX2TJ.js +1 -0
- package/dist/preview/chunk.UWNYT7PF.js +1 -0
- package/dist/preview/chunk.V6TK4LHW.js +6 -0
- package/dist/preview/chunk.VNBO2RXD.js +1 -0
- package/dist/preview/chunk.VPPUTA74.js +1 -0
- package/dist/preview/chunk.WKXNBHTL.js +4 -0
- package/dist/preview/chunk.WLRTPFAC.js +1 -0
- package/dist/preview/chunk.X53HI436.js +1 -0
- package/dist/preview/chunk.XAXJHEMD.js +1 -0
- package/dist/preview/chunk.XDYAG276.js +1 -0
- package/dist/preview/chunk.XDZSTIS6.js +88 -0
- package/dist/preview/chunk.XXHNV24G.js +1 -0
- package/dist/preview/chunk.YCA7P5MK.js +1 -0
- package/dist/preview/chunk.YRQZZH5V.js +1 -0
- package/dist/preview/chunk.YUWRZWGX.js +1 -0
- package/dist/preview/chunk.Z2RGLFLS.js +1 -0
- package/dist/preview/chunk.Z56B2JR2.js +25 -0
- package/dist/preview/chunk.Z5V23DQN.js +3 -0
- package/dist/preview/chunk.ZBXOX3W3.js +1 -0
- package/dist/preview/chunk.ZEGSQCSD.js +1 -0
- package/dist/preview/chunk.ZEVVWWNA.js +44 -0
- package/dist/preview/chunk.ZS4DJ76C.js +1 -0
- package/dist/preview/chunk.ZSKP6UQS.js +3 -0
- package/dist/preview/page.js +6 -6
- package/package.json +6 -6
- package/dist/preview/chunk.4HGBVU5B.js +0 -1
- package/dist/preview/chunk.4JXWQO6Y.js +0 -1
- package/dist/preview/chunk.4R7LDCDO.js +0 -1
- package/dist/preview/chunk.4W24TPMR.js +0 -1
- package/dist/preview/chunk.6LJ66MB7.js +0 -1
- package/dist/preview/chunk.6R4EI47C.js +0 -1
- package/dist/preview/chunk.7CO6VP6F.js +0 -1
- package/dist/preview/chunk.7QTBDACG.js +0 -1
- package/dist/preview/chunk.7SVIRYBB.js +0 -1
- package/dist/preview/chunk.7THQFY52.js +0 -1
- package/dist/preview/chunk.AHDOKM4O.js +0 -1
- package/dist/preview/chunk.AS35X6KA.js +0 -1
- package/dist/preview/chunk.ATLUMYAJ.js +0 -23
- package/dist/preview/chunk.CW7BMVBG.js +0 -321
- package/dist/preview/chunk.DG2UE7PJ.js +0 -1
- package/dist/preview/chunk.DG2WKNMX.js +0 -1
- package/dist/preview/chunk.DQ5OWYLQ.js +0 -1
- package/dist/preview/chunk.DY2FFBWF.js +0 -1
- package/dist/preview/chunk.E3SZ7T75.js +0 -1
- package/dist/preview/chunk.EVTZE2OZ.js +0 -1
- package/dist/preview/chunk.FS5K4AVA.js +0 -8
- package/dist/preview/chunk.FTBKJ5RZ.js +0 -16
- package/dist/preview/chunk.GHMICJIB.js +0 -1
- package/dist/preview/chunk.HO6JR7VY.js +0 -1
- package/dist/preview/chunk.I5KD54S6.js +0 -1
- package/dist/preview/chunk.IZDKEFPJ.js +0 -1
- package/dist/preview/chunk.J36GTQTV.js +0 -1
- package/dist/preview/chunk.KAKX5TZN.js +0 -3
- package/dist/preview/chunk.LHAAZQNQ.js +0 -19
- package/dist/preview/chunk.LQZ2VQWN.js +0 -107
- package/dist/preview/chunk.MHJJEGQO.js +0 -1
- package/dist/preview/chunk.MNPNW4BQ.js +0 -1
- package/dist/preview/chunk.MRK6QJV5.js +0 -25
- package/dist/preview/chunk.NKIFVPS3.js +0 -1
- package/dist/preview/chunk.NQNQPPPM.js +0 -1
- package/dist/preview/chunk.OHGJ5BZ4.js +0 -2
- package/dist/preview/chunk.OYULDOQP.js +0 -1
- package/dist/preview/chunk.PHY3AH3L.js +0 -1
- package/dist/preview/chunk.Q7544RCB.js +0 -1
- package/dist/preview/chunk.QZWN46V6.js +0 -1
- package/dist/preview/chunk.RUC4HFVC.js +0 -1
- package/dist/preview/chunk.S5JWZIVE.js +0 -1
- package/dist/preview/chunk.SHDYLMZE.js +0 -2
- package/dist/preview/chunk.T2EZ5MTH.js +0 -1
- package/dist/preview/chunk.TMPV4HLQ.js +0 -1
- package/dist/preview/chunk.TX2GOL65.js +0 -29
- package/dist/preview/chunk.U5ZUXGWM.js +0 -1040
- package/dist/preview/chunk.UMMN5Z6V.js +0 -1
- package/dist/preview/chunk.UPGDSOBY.js +0 -1
- package/dist/preview/chunk.V57P4LIZ.js +0 -1
- package/dist/preview/chunk.VD6FJ6KJ.js +0 -2
- package/dist/preview/chunk.VFICMX5G.js +0 -61
- package/dist/preview/chunk.VMD4PDYJ.js +0 -1
- package/dist/preview/chunk.VMEX2KZ4.js +0 -8
- package/dist/preview/chunk.XDHBV5K5.js +0 -1
- package/dist/preview/chunk.YO7UFBJP.js +0 -1
- package/dist/preview/chunk.YSYT3ASK.js +0 -1
- package/dist/preview/chunk.YV2RTNPU.js +0 -6
- package/dist/preview/chunk.ZD5HGRPR.js +0 -1
- package/dist/preview/chunk.ZKM4P7US.js +0 -1
- package/dist/preview/chunk.ZMMMKTAG.js +0 -1
- package/dist/preview/chunk.ZNIJONZN.js +0 -1
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import{a as k}from"./chunk.G4JJXA63.js";import{a as Z}from"./chunk.EVTZE2OZ.js";import"./chunk.NQNQPPPM.js";import"./chunk.WVUJXDXZ.js";import{a as Y}from"./chunk.UMMN5Z6V.js";import"./chunk.DG2WKNMX.js";import"./chunk.HPD3DSTP.js";import{c as T}from"./chunk.VD6FJ6KJ.js";import"./chunk.OHGJ5BZ4.js";import{Pb as F,Qb as H,Rb as G,Sb as V,ac as X,na as J,oa as U}from"./chunk.VMEX2KZ4.js";import"./chunk.AJZBJBMO.js";var E=n=>"failed"in n;function fn(n,e){let r=n.schema.kinds,t=n.policy?.sees;if(!t?.length||U(e))return{kinds:r};let s=J(e).roles??[],i=new Set(t.filter(o=>o.roles==="*"||s.some(a=>o.roles.includes(a))).flatMap(o=>o.kinds));return{kinds:r.filter(o=>i.has(o))}}function j(n,e){if(!e)return n;let r=new Set(e.kinds.filter(i=>n.tryDefinition(i)!==void 0));if(r.size===n.kinds.length)return n;let t=new Map,s=i=>{if(r.has(i)){if(!t.has(i)){let o=n.tryDefinition(i),a=Object.fromEntries(Object.entries(o?.edges??{}).flatMap(([l,d])=>{if(d.to==="*")return[[l,d]];let c=d.to.filter(u=>r.has(u));return c.length>0?[[l,{...d,to:c}]]:[]}));t.set(i,{...o,edges:a})}return t.get(i)}};return{...n,definitions:n.definitions.filter(i=>r.has(i.kind)),kinds:n.kinds.filter(i=>r.has(i)),tryDefinition:s,definition:i=>{let o=s(i);if(!o)throw new Error(`Unknown node kind "${i}"`);return o}}}var gn=n=>n.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),b=n=>gn(n).replace(/[-_]+/g," ").trim();function O(n){let e=[];for(let t of n.kinds){let s=n.tryDefinition(t);if(!s)continue;let i=s.display?.labels??{},o=Object.entries(s.fields?.shape??{}).filter(([d])=>d!=="id"&&d!=="kind").map(([d,c])=>{let u=Y(c);return{name:d,type:u?.type,...u?.options?{options:u.options}:{},words:(i[d]??b(d)).toLowerCase()}}),a=Object.entries(s.edges??{}).map(([d,c])=>({name:d,from:t,to:c.to==="*"?n.kinds.filter(u=>u!==t):c.to,words:b(d)})),l=(s.plural??`${b(t)}s`).toLowerCase();e.push({kind:t,plural:l,noun:(s.noun??b(t)).toLowerCase(),fields:o,roles:s.fieldRoles??{},edges:a})}let r=new Map(e.map(t=>[t.kind,t]));return{schema:n,kinds:e,info:t=>r.get(t)}}var $=(n,e)=>e===void 0?void 0:n.fields.find(r=>r.name===e),A=n=>n?.type==="date"||n?.type==="datetime",K=n=>n?.type==="number"||n?.type==="integer",rn=n=>` ${n.toLowerCase().replace(/[“”"’‘]/g,"'").replace(/[^\p{L}\p{N}' -]+/gu," ").replace(/\s+/g," ").trim()} `,v=(n,e)=>n.includes(` ${e} `),L=n=>n.endsWith("ies")?`${n.slice(0,-3)}y`:n.endsWith("ses")?n.slice(0,-2):n.endsWith("s")?n.slice(0,-1):n;function yn(n,e){let r=[];for(let t of e.kinds){let s=new Set([t.plural,t.noun,`${t.noun}s`,b(t.kind),`${b(t.kind)}s`]),i=-1;for(let o of s){let a=n.indexOf(` ${o} `);a>=0&&(i<0||a<i)&&(i=a)}i>=0&&r.push({info:t,at:i})}return r.sort((t,s)=>t.at-s.at).map(t=>t.info)}function I(n,e,r){let t=e.trim().toLowerCase();if(t.length===0)return;let s=n.fields.filter(i=>!r||r(i));return s.find(i=>i.words===t||b(i.name)===t||i.name.toLowerCase()===t)??s.find(i=>i.words===L(t)||b(i.name)===L(t))??s.find(i=>t.split(" ").some(o=>o.length>2&&(i.words.split(" ").includes(o)||i.words.split(" ").includes(L(o)))))}function sn(n,e,r){let t=e.trim().toLowerCase();if(t.length!==0)return n.edges.find(s=>s.words===t||s.name.toLowerCase()===t)??n.edges.find(s=>s.to.some(i=>{let o=r.info(i);return o!==void 0&&(o.noun===L(t)||o.plural===t||b(i)===L(t))}))??n.edges.find(s=>t.split(" ").some(i=>i.length>2&&s.words.split(" ").includes(i)))}function W(n){return/ (?:grouped |group |split |sorted |organi[sz]ed )?by ([\p{L}\p{N}' -]+?)(?= (?:and|with|for|in|on|only|where|from|this|that|as|sorted|grouped) |\s*$)/u.exec(n)?.[1]?.trim()}var pn=/\bwho\b.*\b(covers?|cover|tends?|owns?|handles?|does|works? on|looks? after|is on|is assigned|staffs?|runs?)\b|\bcoverage\b|\bmatrix\b|\bwho covers\b/,bn=/\bcalendar\b|\bmonth\b|\bagenda\b|\bschedule\b|\bdue\b|\bdeadlines?\b|\bdates?\b|\bwhen\b/,mn=/\btimeline\b|\bover time\b|\bgantt\b|\bspans?\b|\bweek\b/,hn=/\bboard\b|\bkanban\b|\bcolumns?\b|\bpipeline\b|\bstages?\b|\bstatus\b/,wn=/\blaid out\b|\blayout\b|\bseating\b|\bwhere (?:they|it|each) (?:sits?|lies?|stands?)\b|\bfloor\b/,kn=/\bplan\b|\bmap\b|\bregions?\b/,$n=/\blist\b|\btable\b|\bgroup(?:ed)? by\b|\bsort(?:ed)? by\b|\bonly\b|\bjust the\b/;function Sn(n){let e=[];return/\blist\b|\btable\b/.test(n)&&e.push("blocks"),pn.test(n)&&e.push("coverage"),wn.test(n)&&e.push("board"),(/\bfloor plan\b/.test(n)||kn.test(n))&&e.push("plan"),mn.test(n)&&e.push("timeline"),bn.test(n)&&e.push("calendar"),hn.test(n)&&e.push("columns"),$n.test(n)&&!e.includes("blocks")&&e.push("blocks"),e.length===0&&W(n)&&e.push("columns"),e}var on=n=>{let e=r=>r?` and not ${r}`:"";if(/\boverdue\b|\blate\b|\bpast due\b/.test(n))return{cond:(r,t)=>`days(today(), ${r}) < 0${e(t)}`,says:r=>`overdue by ${r.words}`};if(/\btoday\b/.test(n))return{range:"day",cond:r=>`days(today(), ${r}) == 0`,says:r=>`with ${r.words} today`};if(/\bthis week\b|\bnext 7 days\b|\bnext week\b/.test(n))return{range:"week",cond:r=>`days(today(), ${r}) >= 0 and days(today(), ${r}) <= 6`,says:r=>`with ${r.words} in the next week`};if(/\bthis month\b|\bnext 30 days\b|\bnext month\b/.test(n))return{range:"month",cond:r=>`days(today(), ${r}) >= 0 and days(today(), ${r}) <= 30`,says:r=>`with ${r.words} in the next month`};if(/\blast month\b|\bpast month\b/.test(n))return{range:"month",cond:r=>`days(today(), ${r}) >= -30 and days(today(), ${r}) <= 0`,says:r=>`with ${r.words} in the last month`};if(/\bthis year\b/.test(n))return{range:"year",cond:r=>`days(today(), ${r}) >= 0 and days(today(), ${r}) <= 365`,says:r=>`with ${r.words} in the next year`};if(/\bquarter\b/.test(n))return{range:"quarter",cond:r=>`days(today(), ${r}) >= 0 and days(today(), ${r}) <= 91`,says:r=>`with ${r.words} in the next quarter`}},P=n=>{if(/\bagenda\b|\bin order\b/.test(n))return"agenda";if(/\btoday\b|\bday\b/.test(n))return"day";if(/\bweek\b/.test(n))return"week";if(/\bquarter\b/.test(n))return"quarter";if(/\byears\b/.test(n))return"years";if(/\byear\b/.test(n))return"year";if(/\bmonth\b/.test(n))return"month"},Q=/^(user|person|people|member|staff|gardener|volunteer|owner|agent|employee|worker|team|player|customer|client|contact|party|attendee|guest)s?$/,x=class extends Error{},m=n=>{throw new x(n)};function Dn(n,e){let r=n.fields.filter(i=>i.type==="enum");if(e){let i=I(n,e);if(i&&i.type==="enum")return i;i&&m(`${n.plural}' ${i.words} is not a choice, so it has no columns`)}let t=$(n,n.roles.status??n.roles.column);if(t?.type==="enum")return t;let s=r.find(i=>/^(status|stage|state|phase)$/.test(i.name));return s||(r[0]?r[0]:m(`${n.plural} have no choice field to put in columns`))}function nn(n,e){let r=n.fields.filter(A),t=l=>{let d=$(n,n.roles[l]);return A(d)?d:void 0},i=r.find(l=>v(e,l.words)||v(e,b(l.name)))??t("start")??r.find(l=>/^(due|date|on|at|start|starts|begins|from|sown|when)/i.test(l.name))??r[0];if(!i)return m(`no date field on ${n.plural}`);let o=t("end")??r.find(l=>l!==i&&/^(end|ends|until|to|finish|finished|harvested|due|closes|through)/i.test(l.name)),a=n.fields.find(l=>l.type==="boolean"&&/^(done|finished|complete|completed|closed)$/.test(l.name));return{start:i,...o&&o!==i?{end:o}:{},...a?{done:a}:{}}}function an(n){let e=$(n,n.roles.start),r=$(n,n.roles.end),t=$(n,n.roles.column??n.roles.day??n.roles.columns);if(K(e)&&K(r)&&t?.type==="enum")return{start:e,end:r,column:t}}function Rn(n,e,r,t){let s=[];for(let o of n.kinds)for(let a of o.edges)for(let l of a.to){let d=n.info(l);if(!d||d.kind===o.kind)continue;let c=0;e.includes(o)&&(c+=4),e.includes(d)&&(c+=4),(Q.test(d.kind)||Q.test(d.noun))&&(c+=3),t&&(a.words.includes(t)||d.noun===L(t))&&(c+=5),a.words.split(" ").some(u=>u.length>2&&r.includes(` ${u}`))&&(c+=2),s.push({rows:o,across:d,link:a,score:c})}let i=s.sort((o,a)=>a.score-o.score)[0];return i||m(e[0]?`${e[0].plural} are joined to nothing else, so there is no who-covers-what to draw`:"nothing here is joined to anything else, so there is no who-covers-what to draw")}function dn(n,e,r,t,s){let i=W(t);switch(n){case"columns":{if(i){let o=I(e,i);if(!o||o.type!=="enum"){let a=sn(e,i,r);if(a){let l=r.info(a.to[0]);return{lens:"coverage",kind:e.kind,across:l.kind,link:a.name}}}}return{lens:"columns",kind:e.kind,column:Dn(e,i).name}}case"calendar":{let o=nn(e,t),a=P(t);return{lens:"calendar",kind:e.kind,start:o.start.name,...o.end?{end:o.end.name}:{},...o.done?{done:o.done.name}:{},...a?{range:a}:{}}}case"timeline":{let o=an(e);if(o&&!/\bdates?\b|\bdue\b|\bdeadlines?\b|\bmonths?\b|\byears?\b/.test(t))return{lens:"timeline",kind:e.kind,start:o.start.name,end:o.end.name,column:o.column.name};let a=nn(e,t);return{lens:"calendar",kind:e.kind,start:a.start.name,...a.end?{end:a.end.name}:{},...a.done?{done:a.done.name}:{},range:P(t)??"quarter"}}case"coverage":{let o=Rn(r,s,t,i);return{lens:"coverage",kind:o.rows.kind,across:o.across.kind,link:o.link.name}}case"board":{let o=$(e,e.roles.x)??e.fields.find(c=>c.name==="x"),a=$(e,e.roles.y)??e.fields.find(c=>c.name==="y");if(!K(o)||!K(a))return m(`${e.plural} have no x and y to be laid out by`);let d=r.kinds.flatMap(c=>c.edges.filter(u=>u.to.includes(e.kind)&&c.kind!==e.kind))[0]??e.edges[0];return d?{lens:"board",kind:e.kind,x:o.name,y:a.name,fill:d.name,...d.from!==e.kind?{fillFrom:"occupant"}:{}}:m(`nothing is joined to ${e.plural} to fill them`)}case"plan":{let o=$(e,e.roles.outline)??e.fields.find(a=>a.name==="outline");return o?{lens:"plan",kind:e.kind,outline:o.name}:m(`${e.plural} have no outline to draw a plan from`)}case"blocks":{let o={lens:"blocks",kind:e.kind,as:/\bcards?\b/.test(t)?"card":"row"},a=/ group(?:ed)? by ([\p{L}\p{N} -]+?)(?= (?:and|only|sorted|with)|\s*$)/u.exec(t)?.[1]??(i&&!/ sort(?:ed)? by /.test(t)?i:void 0);if(a){let c=I(e,a);if(!c||c.type!=="enum")return m(c?`${e.plural}' ${c.words} is not a choice, so they cannot be grouped by it`:`${e.plural} have nothing called ${a} to group by`);o.group=c.name}let l=/ sort(?:ed)? by ([\p{L}\p{N} -]+?)(?= (?:and|only|grouped|with)|\s*$)/u.exec(t)?.[1];if(l){let c=I(e,l);if(!c)return m(`${e.plural} have nothing called ${l} to sort by`);o.sort={by:c.name,.../\b(newest|latest|desc|descending|most)\b/.test(t)?{direction:"desc"}:{}}}let d=_(e,t);return d.length>0&&(o.where=d),o}}}function _(n,e){let r=[],t=on(e);if(t){let s=n.fields.filter(A),i=$(n,n.roles.start),o=s.find(l=>v(e,l.words))??(A(i)?i:void 0)??s[0];(!o||!A(o))&&m(`no date field on ${n.plural}`);let a=n.fields.find(l=>l.type==="boolean"&&/^(done|finished|complete|completed|closed)$/.test(l.name));r.push({expr:t.cond(o.name,/\boverdue\b|\blate\b|\bpast due\b/.test(e)?a?.name:void 0),says:t.says(o)})}if(/\bonly\b|\bjust\b|\bthat are\b|\bwhich are\b/.test(e)){for(let s of n.fields){if(s.type!=="enum")continue;let i=s.options?.find(o=>v(e,o.toLowerCase())||v(e,b(o)));i&&r.push({expr:`${s.name} == '${i.replace(/'/g,"")}'`,says:`that are ${b(i)}`})}if(/\bnot done\b|\bundone\b|\bunfinished\b|\bopen ones\b|\bstill to do\b/.test(e)){let s=n.fields.find(i=>i.type==="boolean"&&/^(done|finished|complete|completed)$/.test(i.name));s&&r.push({expr:`not ${s.name}`,says:`not ${s.words}`})}}return r}var z={columns:"A board",calendar:"A calendar",timeline:"A timeline",coverage:"A grid",board:"A layout",plan:"A plan",blocks:"A list",reach:"A picture"};function An(n,e){let r=e.info(n.kind),t=s=>s?$(r,s)?.words??b(s):"";switch(n.lens){case"columns":return{title:`${k(r.plural)} by ${t(n.column)}`,detail:`of ${r.plural} by ${t(n.column)}`};case"calendar":{let s=n.range??"month";if(s==="agenda")return{title:`${k(r.plural)} in date order`,detail:`of ${r.plural} in order of ${t(n.start)}`};let i=s==="years"?"year":s;return{title:`${k(r.plural)} by ${i}`,detail:`of ${r.plural} by ${t(n.start)}, a ${i} at a time`}}case"timeline":return{title:`${k(r.plural)} over the ${t(n.column)}`,detail:`of ${r.plural} from ${t(n.start)} to ${t(n.end)}, by ${t(n.column)}`};case"coverage":{let s=e.info(n.across);return{title:`${k(r.plural)} by ${s.noun}`,detail:`of which ${s.noun} covers which ${r.noun}`}}case"board":return{title:`${k(r.plural)} where they stand`,detail:`of ${r.plural} where they stand`};case"plan":return{title:`${k(r.plural)} on a plan`,detail:`of ${r.plural}`};default:{let s=[n.where?.map(i=>i.says).join(" and "),n.group?`by ${t(n.group)}`:void 0,n.sort?`in order of ${t(n.sort.by)}`:void 0].filter(i=>!!i);return{title:[k(r.plural),...s].join(" "),detail:[`of ${r.plural}`,...s].join(" ")}}}}function vn(n,e){let r={title:e,on:n.kind};switch(n.lens){case"columns":return{name:"columns",...r,bindings:{[n.kind]:{column:n.column}}};case"calendar":return{name:"calendar",...r,bindings:{[n.kind]:{start:n.start,...n.end?{end:n.end}:{},...n.done?{done:n.done}:{}}},...n.range?{options:{range:n.range}}:{}};case"timeline":return{name:"timeline",...r,bindings:{[n.kind]:{start:n.start,end:n.end,column:n.column}}};case"coverage":return{name:"coverage",...r,bindings:{rows:{kind:n.kind},columns:{kind:n.across},link:{edge:n.link}}};case"board":return{name:"board",...r,bindings:{slots:{kind:n.kind},x:{field:n.x,on:"slots"},y:{field:n.y,on:"slots"},fill:{edge:n.fill}},...n.fillFrom?{options:{fillFrom:n.fillFrom}}:{}};case"plan":return{name:"plan",...r,bindings:{regions:{kind:n.kind},outline:{field:n.outline,on:"regions"}}};default:{let t=n.where?.length?` where ${n.where.map(i=>n.where.length>1?`(${i.expr})`:i.expr).join(" and ")}`:"",s={list:`all('${n.kind}')${t}`,as:n.as??"row"};return n.group&&(s.group=n.group),n.sort&&(s.sort=n.sort.direction?{by:n.sort.by,direction:n.sort.direction}:n.sort.by),s.empty="Nothing here yet.",{name:"blocks",...r,options:{blocks:[s]}}}}}function B(n,e){let r=s=>s.toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,""),t=new Set(["home","overview",...X(e).map(s=>s.slug),...(e.lenses??[]).flatMap(s=>s.title?[r(s.title)]:[])]);if(!t.has(r(n)))return n;for(let s=2;;s++)if(!t.has(r(`${n} ${s}`)))return`${n} ${s}`}var en={title:[],headline:[],text:["tone"],figure:["as","currency","label"],list:["sort","limit","group","empty","as"],progress:["label"],group:["direction"],when:["show"],divider:[]};function Ln(n,e){if(!Array.isArray(e)||e.length===0)return"it has no blocks to draw";if(e.length>40)return"it has more blocks than a place draws";let r=(o,a)=>{if(typeof o!="string"||o.trim()==="")return`its ${a} says nothing`;try{return T(o)}catch(l){return`its ${a} does not read: ${l instanceof Error?l.message.replace(/ \(at character.*$/,""):String(l)}`}},t=o=>{if(o.t==="where")return t(o.set);if(o.t==="call"&&o.fn==="all"){let a=o.args[0];return a?.t==="lit"&&typeof a.value=="string"?n.info(a.value)??null:void 0}},s=(o,a)=>{switch(o.t){case"lit":return;case"ident":return a&&!a.fields.some(l=>l.name===o.name)&&!a.edges.some(l=>l.name===o.name)?`${a.plural} have nothing called ${o.name}`:void 0;case"member":return s(o.object,a);case"list":return o.items.map(l=>s(l,a)).find(Boolean);case"unary":return s(o.operand,a);case"binary":return s(o.left,a)??s(o.right,a);case"where":{let l=t(o.set);return l===null?"Nothing by that name here":s(o.set,a)??s(o.filter,l??void 0)}case"call":return o.fn==="all"?t(o)===null?"Nothing by that name here":void 0:o.args.map(l=>s(l,a)).find(Boolean)}},i=(o,a)=>{if(a>4)return"its blocks nest deeper than a place draws";for(let l of o){if(!w(l))return"a block is not an object";let d=Object.keys(en).find(g=>g in l);if(!d)return`"${Object.keys(l)[0]??""}" is not a block a place draws`;let c=Object.keys(l).find(g=>g!==d&&g!=="key"&&!en[d].includes(g));if(c)return`a ${d} block takes no "${c}"`;let u=l[d];if(d==="list"||d==="figure"||d==="when"){if(d==="figure"&&u===!0)continue;let g=r(u,d);if(typeof g=="string")return g;let p=s(g,void 0);if(p)return p;if(d==="list"){let f=t(g);if(f==null)return f===null?"Nothing by that name here":"its list does not say which records it lists, like all('task')";for(let y of["group","sort"]){let h=l[y],S=typeof h=="string"?h:w(h)&&typeof h.by=="string"?h.by:void 0;if(h===void 0)continue;let D=S?f.fields.find(un=>un.name===S):void 0;if(!D)return`${f.plural} have nothing called ${String(S??h)} to ${y} by`;if(y==="group"&&D.type!=="enum")return`${f.plural}' ${D.words} is not a choice, so they cannot be grouped by it`}}if(d==="when"){let f=l.show;if(!Array.isArray(f))return"a when block shows a list of blocks";let y=i(f,a+1);if(y)return y}}else if(d==="group"){if(!Array.isArray(u))return"a group block holds a list of blocks";let g=i(u,a+1);if(g)return g}else{if(d!=="divider"&&typeof u!="string")return`a ${d} block says words`;if(typeof u=="string")for(let g of u.matchAll(/\{([^{}]*)\}/g)){let p=g[1].split(/\|(?![|])/)[0],f=r(p,`${d}'s braces`);if(typeof f=="string")return f;let y=s(f,void 0);if(y)return y}}}};return i(e,1)}function N(n,e,r){let t=j(n.schema,r),s=f=>({ok:!1,failed:`Couldn't draw that: ${f.replace(/\.$/,"")}.`});if(!G(e.name)||e.name==="reach")return s(`"${String(e.name)}" is not a picture the seat can draw; it draws ${H.filter(f=>f!=="reach").join(", ")}`);if(typeof e.title!="string"||e.title.trim().length===0||e.title.length>80)return s("it needs a title of a few words");if(typeof e.on!="string"||!t.tryDefinition(e.on))return s("Nothing by that name here");let i=F[e.name],o=e.bindings??{};if(i.binds==="fields")for(let[f,y]of Object.entries(o)){if(!t.tryDefinition(f))return s("Nothing by that name here");let h=Object.keys(t.tryDefinition(f).fields?.shape??{});for(let[S,D]of Object.entries(y??{}))if(typeof D!="string"||!h.includes(D))return s(`${b(f)} has no field "${String(D)}" for its ${S}`);for(let S of i.requiredRoles)if(!(S in(y??{})))return s(`a ${e.name} needs ${b(f)}'s ${S}`)}else if(i.binds==="entities")for(let f of i.requiredRoles){let y=o[f];if(!y)return s(`a ${e.name} needs its ${f}`);if(typeof y.kind=="string"&&!t.tryDefinition(y.kind))return s("Nothing by that name here")}let a={...n,schema:t,lenses:[...n.lenses??[],e]},l=a.lenses.length-1,d=V(a),c=`lenses.${l}`,u=d.findings.find(f=>f.path===c||f.path.startsWith(`${c}.`));if(u)return s(u.message.replace(/^"[^"]*" /,"it "));let g=d.undrawn.find(f=>f.index===l);if(g)return s(g.why);let p=d.drawn.find(f=>f.index===l);if(!p)return s("its bindings name something the app does not have");if(p.as==="overview")return s(`"${e.title}" is the scene's own address; give it another title`);if(e.name==="blocks"){let f=Ln(O(t),e.options?.blocks);if(f)return s(f)}return{ok:!0,drawn:p}}function C(n){return{op:"add-lens",title:n.title,lens:n.name,on:n.on,...n.bindings?{bindings:n.bindings}:{},...n.options?{options:n.options}:{}}}function In(n){return{op:"remove-lens",title:n.title,on:n.on}}var w=n=>typeof n=="object"&&n!==null&&!Array.isArray(n);function ln(n){let e=w(n)?n:{},r=String(e.lens??e.name??""),t=e.bindings,s=typeof e.on=="string"?e.on:w(t)&&F[r]?.binds==="fields"?Object.keys(t)[0]??"":"";return{name:r,title:typeof e.title=="string"?e.title.trim():"",on:s,...w(t)?{bindings:t}:{},...w(e.options)?{options:e.options}:{}}}function En(n){let e=s=>w(n.bindings?.[s])?n.bindings[s]:{},r=s=>typeof s=="string"?s:void 0,t=e(n.on);switch(n.name){case"columns":return r(t.column)?{lens:"columns",kind:n.on,column:t.column}:void 0;case"calendar":{let s=r(n.options?.range);return r(t.start)?{lens:"calendar",kind:n.on,start:t.start,...r(t.end)?{end:t.end}:{},...r(t.done)?{done:t.done}:{},...s?{range:s}:{}}:void 0}case"timeline":return r(t.start)&&r(t.end)&&r(t.column)?{lens:"timeline",kind:n.on,start:t.start,end:t.end,column:t.column}:void 0;case"coverage":{let s=w(n.bindings?.columns)?r(n.bindings.columns.kind):void 0,i=w(n.bindings?.link)?r(n.bindings.link.edge):void 0;return s&&i?{lens:"coverage",kind:n.on,across:s,link:i}:void 0}case"blocks":{let s=n.options?.blocks;if(!Array.isArray(s)||s.length!==1||!w(s[0]))return;let i=s[0],o=new RegExp(`^all\\('${n.on}'\\)(?: where (.+))?$`).exec(String(i.list??""));if(!o)return;let a=i.sort;return{lens:"blocks",kind:n.on,as:i.as==="card"?"card":"row",...typeof i.group=="string"?{group:i.group}:{},...typeof a=="string"?{sort:{by:a}}:w(a)&&typeof a.by=="string"?{sort:{by:a.by,...a.direction==="desc"?{direction:"desc"}:{}}}:{},...o[1]?{where:[{expr:o[1],says:"as asked"}]}:{}}}default:return}}function M(n,e,r,t,s){let i=O(j(n.schema,t)).info(e.on),o=En(e);return{title:e.title,said:`${z[e.name]??"A picture"} of ${i?.plural??b(e.on)}.`,kind:e.on,lens:e,drawn:r,edit:C(e),by:s,asks:[],...o?{recipe:o}:{}}}function tn(n){return{title:n.title,said:n.said,lens:{title:n.lens.title,lens:n.lens.name,on:n.lens.on,...n.lens.bindings?{bindings:n.lens.bindings}:{},...n.lens.options?{options:n.lens.options}:{}},edit:n.edit,by:n.by,check:"It draws, and graview check would take it."}}function q(n,e,r,t,s){let i=An(n,e),o=n.title??s??B(i.title,r.app),a=vn(n,o),l=N(r.app,a,r.sight);return l.ok?{title:o,said:`${z[n.lens]} ${i.detail}.`,kind:n.kind,lens:a,drawn:l.drawn,edit:C(a),by:"template",asks:t,recipe:n}:{failed:l.failed,...r.lastGood?{lastGood:r.lastGood}:{}}}function xn(n,e,r,t){if(r.length>0)return r;let s=o=>{switch(n){case"columns":return o.fields.some(a=>a.type==="enum");case"calendar":return o.fields.some(A);case"timeline":return an(o)!==void 0||o.fields.some(A);case"coverage":return o.edges.some(a=>a.to.some(l=>l!==o.kind));case"board":return o.fields.some(a=>a.name==="x")&&o.fields.some(a=>a.name==="y");case"plan":return o.fields.some(a=>a.name==="outline")||o.roles.outline!==void 0;default:return!0}};return[...e.kinds.filter(s)].sort((o,a)=>Number(a.fields.some(l=>v(t,l.words)))-Number(o.fields.some(l=>v(t,l.words))))}function jn(n,e){let r=O(j(e.app.schema,e.sight)),t=rn(n),s=Sn(t);if(s.length===0)return;let i=yn(t,r),o;for(let a of s){let l=a==="coverage"?[i[0]??r.kinds[0]].filter(d=>!!d):xn(a,r,i,t);for(let d of l)try{let c=dn(a,d,r,t,i),u=q(c,r,e,[n]);if(!E(u))return u;o??=u.failed}catch(c){if(!(c instanceof x))throw c;o??=`Couldn't draw that: ${c.message}.`}l.length===0&&i.length===0&&(o??=`Couldn't draw that: nothing here has what ${z[a].toLowerCase()} needs.`)}return{failed:o??"Couldn't draw that: Nothing by that name here.",...e.lastGood?{lastGood:e.lastGood}:{}}}async function On(n,e){let r=e.lastGood?{lastGood:e.lastGood}:{};if(n.trim().length===0)return{failed:"Say what you would like to see, like \u201Ca board of tasks by status\u201D.",...r};let t=jn(n,e);if(t&&!E(t))return t;if(!e.complete)return t??{failed:"Couldn't draw that: drawing freely needs AI, which isn't on here. Ask for a board, a calendar, a timeline, a list or who covers what.",...r};let s=await cn(n,e,void 0);return E(s)&&t?t:s}async function Nn(n,e,r){let t={lastGood:n},s={...r,lastGood:n},i=O(j(r.app.schema,r.sight)),o=rn(e),a=i.info(n.kind),l=[...n.asks,e];if(!a)return{failed:"Couldn't change that: Nothing by that name here.",...t};let d=n.recipe,c=/^ (?:call|name|title) (?:it|this)? ?(.+?) $/.exec(o)??/ (?:call|name) it (.+?) $/.exec(o);try{if(c){let p=e.replace(/^.*?\b(?:call|name|title)\b\s*(?:it|this)?\s*/i,"").replace(/^["“']|["”']$/g,"").trim();if(p.length===0)return{failed:"Couldn't change that: say what to call it.",...t};let f={...n.lens,title:B(p,r.app)},y=N(r.app,f,r.sight);return y.ok?{...n,title:f.title,lens:f,drawn:y.drawn,edit:C(f),asks:l,...d?{recipe:{...d,title:f.title}}:{}}:{failed:y.failed,...t}}let g=/ as (?:a |an )?(board|kanban|calendar|timeline|list|table|cards|rows|grid|plan|layout)\b/.exec(o);if(g){let p=g[1]==="board"||g[1]==="kanban"?"columns":g[1]==="calendar"?"calendar":g[1]==="timeline"?"timeline":g[1]==="grid"?"coverage":g[1]==="plan"?"plan":g[1]==="layout"?"board":"blocks",f=dn(p,a,i,o,[a]),y=g[1]==="cards"?"card":g[1]==="rows"?"row":void 0,h=p==="blocks"&&d?.lens==="blocks"?{...d,...y?{as:y}:{}}:p==="blocks"&&d?.lens==="columns"?{...f,group:d.column,...y?{as:y}:{}}:f;return q(R(h),i,s,l)}if(d){let p=Kn(d,a,i,o);if(p)return q(p,i,s,l)}}catch(g){if(!(g instanceof x))throw g;return{failed:`Couldn't change that: ${g.message}.`,...t}}if(!r.complete)return{failed:"Couldn't change that: changing it freely needs AI, which isn't on here. Try \u201Cgroup by status\u201D, \u201Conly this month\u201D or \u201Cas a calendar\u201D.",...t};let u=await cn(e,s,n);return E(u)?u:{...u,asks:l}}var R=n=>{let{title:e,...r}=n;return r};function Kn(n,e,r,t){let s=/ (?:group(?:ed)?|split|organi[sz]ed?|put them|columns) by ([\p{L}\p{N} -]+?)(?= (?:and|only|with)|\s*$)/u.exec(t)?.[1]??(/^ by /.test(t)?W(t):void 0);if(s){let d=I(e,s);if(d?.type==="enum")return n.lens==="blocks"?{...R(n),group:d.name}:{lens:"columns",kind:n.kind,column:d.name};let c=sn(e,s,r);return c?{lens:"coverage",kind:n.kind,across:c.to[0],link:c.name}:m(d?`${e.plural}' ${d.words} is not a choice, so they cannot be grouped by it`:`${e.plural} have nothing called ${s} to group by`)}let i=/ (?:sort(?:ed)?|order(?:ed)?) by ([\p{L}\p{N} -]+?)(?= (?:and|only|with)|\s*$)/u.exec(t)?.[1];if(i){let d=I(e,i);return d?{...n.lens==="blocks"?R(n):{lens:"blocks",kind:n.kind,as:"row",...n.lens==="columns"?{group:n.column}:{}},sort:{by:d.name,.../\b(newest|latest|desc|descending|most)\b/.test(t)?{direction:"desc"}:{}}}:m(`${e.plural} have nothing called ${i} to sort by`)}if(/\b(?:all of them|everything|show all|clear the filter|no filter|without the filter)\b/.test(t)){if(n.lens!=="blocks"||!n.where)return m("it already shows all of them");let{where:d,...c}=R(n);return c}let o=on(t);if(o&&n.lens==="calendar"&&o.range)return{...R(n),range:o.range};if(o&&n.lens==="calendar"&&!o.range)return{lens:"blocks",kind:n.kind,as:"row",sort:{by:n.start},where:_(e,t)};let a=_(e,t);if(a.length>0){let d=n.lens==="blocks"?R(n):{lens:"blocks",kind:n.kind,as:"row",...n.lens==="columns"?{group:n.column}:{}};return{...d,where:[...d.where??[],...a]}}let l=n.lens==="calendar"?P(t):void 0;if(l)return{...R(n),range:l}}function Cn(n){return n.kinds.map(e=>{let r=e.fields.map(i=>`${i.name} (${i.type??"value"}${i.options?`: ${i.options.join(" | ")}`:""})`).join(", "),t=e.edges.map(i=>`${i.name} \u2192 ${i.to.join(" | ")}`).join(", "),s=Object.entries(e.roles).map(([i,o])=>`${i}=${o}`).join(", ");return`- ${e.kind} ("${e.plural}"): ${r}${t?`; relations: ${t}`:""}${s?`; roles: ${s}`:""}`}).join(`
|
|
2
|
-
`)}var Fn=['columns \u2014 a board, records in columns by one choice field: {"lens": "columns", "on": K, "bindings": {K: {"column": "<enum field>"}}}','calendar \u2014 records on a calendar by a date: {"lens": "calendar", "on": K, "bindings": {K: {"start": "<date field>", "end"?: "<date field>", "done"?: "<boolean field>"}}, "options": {"range"?: "day" | "week" | "month" | "quarter" | "year" | "agenda"}}','timeline \u2014 minutes of a day in columns: {"lens": "timeline", "on": K, "bindings": {K: {"start": "<number field>", "end": "<number field>", "column": "<enum field>"}}}','coverage \u2014 who covers what, a grid of two kinds joined by a relation: {"lens": "coverage", "on": K, "bindings": {"rows": {"kind": K}, "columns": {"kind": J}, "link": {"edge": "<relation of K to J>"}}}',`blocks \u2014 anything else, as blocks: {"lens": "blocks", "on": K, "options": {"blocks": [{"headline": "words"}, {"list": "all('K') where <condition>", "group"?: "<enum field>", "sort"?: "<field>" | {"by": "<field>", "direction": "desc"}, "as"?: "row" | "card", "empty"?: "words"}, {"figure": "count(all('K'))", "label": "words"}]}}. Conditions read a record's own fields: status == 'open', not done, days(today(), due) <= 7.`].join(`
|
|
3
|
-
`);function Gn(n,e,r){return["You draw a view of an app's data as JSON \u2014 never code. The app's kinds, their fields (with types) and relations:",Cn(e),"","The lenses you may use (prefer the first four; use blocks only when none of them fits):",Fn,"",r?`The view on screen now:
|
|
4
|
-
${JSON.stringify(r.lens)}
|
|
5
|
-
Change it as asked, and keep everything not asked about.`:"",`Asked: ${JSON.stringify(n)}`,'Answer with ONE JSON object: {"title": "<a few words, like Deliverables by status>", "lens": \u2026, "on": \u2026, "bindings"?: \u2026, "options"?: \u2026}. Name only the kinds, fields and relations listed above. If it cannot be drawn from them, answer {"failed": "<one sentence saying why>"}.'].filter(t=>t!=="").join(`
|
|
6
|
-
`)}async function cn(n,e,r){let t=e.lastGood?{lastGood:e.lastGood}:{},s=O(j(e.app.schema,e.sight)),i;try{i=await e.complete(Gn(n,s,r))}catch{return{failed:"Couldn't draw that: the model did not answer.",...t}}let o=Z(i);if(typeof o!="object"||o===null||Array.isArray(o))return{failed:"Couldn't draw that: the model's answer was not a view.",...t};let a=o;if(typeof a.failed=="string")return{failed:`Couldn't draw that: ${a.failed.replace(/^Couldn't draw that:\s*/i,"").replace(/\.$/,"")}.`,...t};let l=ln(a);if(!G(l.name))return{failed:`Couldn't draw that: "${l.name}" is not a picture the seat can draw.`,...t};let d=l.title?l.title.slice(0,80):r?.title??k(n.trim()).slice(0,80),c={...l,title:r&&r.title===d?d:B(d,e.app)},u=N(e.app,c,e.sight);return u.ok?{...M(e.app,c,u.drawn,e.sight,"model"),asks:[n]}:{failed:u.failed,...t}}function Un(n,e,r){let t=[...n.lenses??[]];for(let s of e){let i={name:s.lens,title:s.title,on:s.on,...s.bindings?{bindings:s.bindings}:{},...s.options?{options:s.options}:{}};if(t.some(a=>a.title===i.title))continue;N({...n,lenses:t},i,r).ok&&(t=[...t,i])}return t.length===(n.lenses??[]).length?n:{...n,lenses:t}}async function Hn(n,e,r){let{app:t,drafts:s}=r,i=fn(t,r.principal),o=c=>{let u=ln(c);return{lens:u,verdict:N(t,u,i)}};if(n==="keep_lens"){let{lens:c,verdict:u}=o(e);if(!u.ok)return{ok:!1,error:u.failed,reason:"invalid"};if(!s?.keep)return{ok:!1,error:"This app's declaration cannot be written from here."};let g=C(c),p=await s.keep(g);return p.ok?{ok:!0,data:{kept:g,said:p.said??`Adds \u201C${g.title}\u201D to the places.`,undo:In(g)}}:{ok:!1,error:p.error}}if(e.lens!==void 0){let{lens:c,verdict:u}=o(e.lens);return u.ok?{ok:!0,data:tn(M(t,c,u.drawn,i,"model"))}:{ok:!1,error:u.failed,reason:"invalid"}}let a={app:t,sight:i,...s?.complete?{complete:s.complete}:{}},l=String(e.ask??""),d;if(e.current!==void 0){let{lens:c,verdict:u}=o(e.current);if(!u.ok)return{ok:!1,error:u.failed,reason:"invalid"};d=await Nn(M(t,c,u.drawn,i,"model"),l,a)}else d=await On(l,a);return E(d)?{ok:!1,error:d.failed,reason:"invalid"}:{ok:!0,data:tn(d)}}export{tn as draftAnswer,M as draftFromLens,fn as draftSight,On as draftView,E as isDraftFailure,N as judgeLens,C as lensEditOf,ln as lensFromSpec,En as recipeOfLens,Nn as refineDraft,Hn as runDraftTool,In as takeBackEditOf,jn as templateDraft,Un as withReaderLenses};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a,b}from"./chunk.ATLUMYAJ.js";import"./chunk.FS5K4AVA.js";import"./chunk.SHDYLMZE.js";import"./chunk.DY2FFBWF.js";import"./chunk.MNPNW4BQ.js";import"./chunk.I5KD54S6.js";import"./chunk.EVTZE2OZ.js";import"./chunk.NQNQPPPM.js";import"./chunk.KAKX5TZN.js";import"./chunk.VFICMX5G.js";import"./chunk.XDHBV5K5.js";import"./chunk.WVUJXDXZ.js";import"./chunk.UMMN5Z6V.js";import"./chunk.DG2WKNMX.js";import"./chunk.HPD3DSTP.js";import"./chunk.VD6FJ6KJ.js";import"./chunk.OHGJ5BZ4.js";import"./chunk.5BN2ARQ2.js";import"./chunk.4W24TPMR.js";import"./chunk.AHDOKM4O.js";import"./chunk.6R4EI47C.js";import"./chunk.LHAAZQNQ.js";import"./chunk.PHY3AH3L.js";import"./chunk.QZWN46V6.js";import"./chunk.6LJ66MB7.js";import"./chunk.OYULDOQP.js";import"./chunk.VMEX2KZ4.js";import"./chunk.MRK6QJV5.js";import"./chunk.AJZBJBMO.js";export{b as declaredLensView,a as formatFor};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a,b,c,d,e,f,g,h,i}from"./chunk.SHDYLMZE.js";import"./chunk.UMMN5Z6V.js";import"./chunk.DG2WKNMX.js";import"./chunk.HPD3DSTP.js";import"./chunk.VD6FJ6KJ.js";import"./chunk.OHGJ5BZ4.js";import"./chunk.VMEX2KZ4.js";import"./chunk.AJZBJBMO.js";export{f as columnActs,c as columnMoves,b as columnOf,d as columnReach,e as columnSteps,h as describePlace,i as placeText,g as resolveFor,a as statusColumns};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as b,b as N,c as S}from"./chunk.IZDKEFPJ.js";import{d as y}from"./chunk.6LJ66MB7.js";import{wa as m,xa as w}from"./chunk.OYULDOQP.js";import{Gb as x}from"./chunk.VMEX2KZ4.js";import{a as C,b as h}from"./chunk.MRK6QJV5.js";import{b as g}from"./chunk.AJZBJBMO.js";var c=g(C(),1);var i=g(h(),1),P=6e3;function M(){let t=[],n=0,s=new Set,a=new Map,p,r=()=>{for(let e of[...s])e()},o=e=>{if(clearTimeout(a.get(e.id)),a.delete(e.id),e.kind!=="toast")return;let l=(e.actions?.length??0)+(e.action?1:0),f=e.timeout??(l>0?!1:P);f!==!1&&a.set(e.id,setTimeout(()=>p?.()?o(e):d(e.id),f))},d=e=>{clearTimeout(a.get(e)),a.delete(e),t.some(l=>l.id===e)&&(t=t.filter(l=>l.id!==e),r())},u=e=>{t=t.some(l=>l.id===e.id)?t.map(l=>l.id===e.id?e:l):[...t,e],o(e),r()};return{notify(e){let l=e.id??`notice-${++n}`;return u({...e,id:l,said:++n}),{id:l,dismiss:()=>d(l),update:f=>{let v=t.find(L=>L.id===l);v&&u({...v,...f,id:l,kind:v.kind,said:f.sentence!==void 0&&f.sentence!==v.sentence?++n:v.said})}}},dismiss:d,hold(e){p=e},list:()=>t,subscribe(e){return s.add(e),()=>s.delete(e)}}}var k={info:"var(--graview-accent)",good:"var(--graview-good)",warn:"var(--graview-warn)",bad:"var(--graview-bad)"};function T({notices:t,at:n,anchor:s,board:a}){let p=(0,c.useRef)(null),r=t.length>0;return(0,c.useLayoutEffect)(()=>{let o=p.current;if(!r||!o)return;if(typeof o.showPopover=="function"&&!m(o))try{o.showPopover()}catch{}let d=()=>(n==="top"?S:N)(o,s());d(),n==="foot"&&a.hold?.(()=>o.matches(":hover, :focus-within"));let u=w(o);addEventListener("resize",d),addEventListener("scroll",d,!0),n==="foot"&&addEventListener(b,d);let e=typeof ResizeObserver=="function"?new ResizeObserver(d):null;return e?.observe(o),()=>{if(u(),e?.disconnect(),removeEventListener("resize",d),removeEventListener("scroll",d,!0),removeEventListener(b,d),o.isConnected&&m(o))try{o.hidePopover()}catch{}}},[r,n,s,a]),r?(0,i.jsx)("div",{ref:p,popover:"manual",role:"region","aria-label":n==="top"?"Notices":"Messages","data-testid":n==="top"?"notices-banners":"notices-toasts","data-graview-offstage":"",style:{position:"fixed",inset:"auto",margin:0,padding:0,border:"none",background:"none",overflow:"visible",zIndex:x("toast"),width:"max-content",height:"auto",maxWidth:"min(560px, calc(100vw - 32px))",display:"grid",gap:8,color:"var(--graview-ink)"},children:t.map(o=>(0,i.jsx)(R,{notice:o,board:a},o.id))}):null}function R({notice:t,board:n}){let s=t.tone??"info",a=[...t.action?[t.action]:[],...t.actions??[]],p=()=>n.dismiss(t.id);return(0,i.jsxs)("div",{"data-testid":"notice","data-kind":t.kind,"data-tone":s,style:{boxSizing:"border-box",display:"flex",flexWrap:"wrap",alignItems:"center",gap:"8px 12px",padding:t.kind==="banner"?"8px 10px 8px 14px":"10px 12px 10px 14px",borderRadius:"var(--graview-radius, 12px)",borderTop:"1px solid var(--graview-edge)",borderRight:"1px solid var(--graview-edge)",borderBottom:"1px solid var(--graview-edge)",borderLeft:`3px solid ${k[s]}`,background:"var(--graview-float)",boxShadow:"var(--graview-lift-high)",fontSize:"0.875rem",lineHeight:1.45},children:[(0,i.jsx)("span",{"aria-hidden":"true",style:{width:7,height:7,borderRadius:999,flex:"0 0 auto",background:k[s]}}),(0,i.jsx)("span",{style:{flex:"1 1 16rem",minWidth:0},children:t.sentence}),a.length>0?(0,i.jsx)("span",{style:{display:"flex",flexWrap:"wrap",gap:6},children:a.map((r,o)=>r.href!==void 0?(0,i.jsx)("a",{href:r.href,...r.target?{target:r.target,rel:"noopener"}:{},"data-testid":"notice-action",onClick:()=>{r.onSelect?.(),p()},style:{...H,...o===0?E:{}},children:r.label},r.label):(0,i.jsx)("button",{type:"button","data-testid":"notice-action",onClick:()=>{p(),r.onSelect?.()},style:{...H,...o===0?E:{}},children:r.label},r.label))}):null,(0,i.jsx)("button",{type:"button","data-testid":"notice-dismiss","aria-label":`Dismiss: ${t.sentence}`,title:"Dismiss",onClick:p,style:A,children:"\xD7"})]})}var H={display:"inline-flex",alignItems:"center",minHeight:28,padding:"2px 12px",borderRadius:9,border:"1px solid var(--graview-edge)",background:"var(--graview-panel)",color:"var(--graview-ink)",font:"inherit",fontWeight:500,textDecoration:"none",cursor:"pointer"},E={background:"var(--graview-accent)",borderColor:"var(--graview-accent)",color:"var(--graview-accent-ink)"},A={minWidth:28,minHeight:28,padding:0,border:"none",background:"none",boxShadow:"none",color:"var(--graview-ink-muted)",fontSize:"1rem",cursor:"pointer"};function B({notices:t}){let n=t.reduce((d,u)=>!d||u.said>d.said?u:d,void 0),[s,a]=(0,c.useState)(""),[p,r]=(0,c.useState)(""),o=(0,c.useRef)(0);return(0,c.useEffect)(()=>{if(!n||n.said===o.current)return;o.current=n.said;let d=n.tone==="bad";(d?r:a)("");let u=setTimeout(()=>(d?r:a)(n.sentence),50);return()=>clearTimeout(u)},[n]),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("div",{role:"status","aria-live":"polite","data-testid":"notices-said",style:y,children:s}),(0,i.jsx)("div",{role:"alert","data-testid":"notices-alarm",style:y,children:p})]})}var W=(0,c.createContext)(null);function F({board:t,anchor:n}){let s=(0,c.useSyncExternalStore)(t.subscribe,t.list,t.list);return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(T,{notices:s.filter(a=>a.kind==="banner"),at:"top",anchor:n,board:t}),(0,i.jsx)(T,{notices:s.filter(a=>a.kind==="toast"),at:"foot",anchor:n,board:t}),(0,i.jsx)(B,{notices:s})]})}export{M as a,W as b,F as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as m}from"./chunk.LQZ2VQWN.js";import"./chunk.TX2GOL65.js";import"./chunk.T2EZ5MTH.js";import"./chunk.ONDILMIX.js";import{f as g}from"./chunk.AS35X6KA.js";import"./chunk.I5KD54S6.js";import"./chunk.NQNQPPPM.js";import"./chunk.KAKX5TZN.js";import"./chunk.VFICMX5G.js";import"./chunk.IKT7JQUW.js";import"./chunk.CW7BMVBG.js";import"./chunk.IZDKEFPJ.js";import"./chunk.XDHBV5K5.js";import"./chunk.WVUJXDXZ.js";import"./chunk.UMMN5Z6V.js";import"./chunk.DG2WKNMX.js";import"./chunk.HPD3DSTP.js";import"./chunk.VD6FJ6KJ.js";import"./chunk.OHGJ5BZ4.js";import"./chunk.7QTBDACG.js";import"./chunk.5BN2ARQ2.js";import"./chunk.4W24TPMR.js";import"./chunk.AHDOKM4O.js";import"./chunk.6R4EI47C.js";import"./chunk.LHAAZQNQ.js";import"./chunk.PHY3AH3L.js";import"./chunk.QZWN46V6.js";import"./chunk.6LJ66MB7.js";import"./chunk.OYULDOQP.js";import{ta as n}from"./chunk.VMEX2KZ4.js";import{a as b,b as l}from"./chunk.MRK6QJV5.js";import{b as t}from"./chunk.AJZBJBMO.js";var y=t(b(),1),a=t(l(),1);function P({store:h,auto:c,brand:r,views:f,presence:i,steering:o,overview:s,scope:d,titleLevel:v=2,props:e}){let u=(0,y.useMemo)(()=>g({scope:`.${d}`}),[d]);return(0,a.jsxs)("div",{"data-embed-content":"",style:c?{flex:"0 0 auto",background:"var(--graview-ground)"}:{flex:"1 1 auto",minHeight:0,overflow:"auto",background:"var(--graview-ground)"},children:[(0,a.jsx)("style",{children:u}),(0,a.jsx)("div",{"data-embed-measure":"",style:{display:"flow-root"},children:(0,a.jsx)(m,{context:{store:h,embedded:!0,...e.bar!==!1?{barAbove:!0}:{},...s?{overview:s}:{},titleLevel:v,views:f,settings:e.app.settings??[],...i?{presence:i}:{},...r?{brand:r}:{},...e.principal?{principal:e.principal}:{},...e.seats?{seats:e.seats}:{},...e.people?{people:e.people}:{}},...e.pages?{registry:e.pages}:{},...o?{steering:o}:{},...e.routing==="address"?n(e.basePath)===""?{}:{basename:n(e.basePath)}:{initialPath:e.path??"/"},...e.path!==void 0?{path:e.path}:{},...e.onNavigate?{onNavigate:e.onNavigate}:{}})})]})}export{P as PagesContent};
|