graview 0.1.25 → 0.1.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/preview/chunk.24X6LFD3.js +6 -0
- package/dist/preview/{chunk.JIXW4WIO.js → chunk.2GFB5FOK.js} +1 -1
- package/dist/preview/chunk.3RT463XY.js +1 -0
- package/dist/preview/{chunk.UOYH2DFX.js → chunk.4INXWGIT.js} +2 -2
- package/dist/preview/{chunk.B57EIGTS.js → chunk.4MAYBFPU.js} +1 -1
- package/dist/preview/chunk.4YY54TMR.js +1 -0
- package/dist/preview/chunk.564EIRAT.js +1 -0
- package/dist/preview/chunk.5CXMUC6R.js +16 -0
- package/dist/preview/{chunk.ORJ3T4IW.js → chunk.6GJF3F7L.js} +1 -1
- package/dist/preview/chunk.6LJ66MB7.js +1 -0
- package/dist/preview/chunk.6MZBFEXW.js +1 -0
- package/dist/preview/chunk.6R4EI47C.js +1 -0
- package/dist/preview/chunk.7OOKA2DK.js +1 -0
- package/dist/preview/chunk.7ZJPJARU.js +1 -0
- package/dist/preview/{chunk.S24R4MRK.js → chunk.AAVCTGAE.js} +3 -3
- package/dist/preview/chunk.AKWBAWQF.js +1 -0
- package/dist/preview/chunk.BK2MJOUN.js +1 -0
- package/dist/preview/chunk.CL7GGNEK.js +1 -0
- package/dist/preview/{chunk.PY42PBMB.js → chunk.D3XF643V.js} +1 -1
- package/dist/preview/{chunk.DEZEXD24.js → chunk.DRIWJRQW.js} +1 -1
- package/dist/preview/chunk.ECG7RM6L.js +1 -0
- package/dist/preview/chunk.ECRZZ3U4.js +1 -0
- package/dist/preview/chunk.HFFEOCYY.js +107 -0
- package/dist/preview/chunk.I5U42VDK.js +3 -0
- package/dist/preview/chunk.IQLDOIWD.js +1 -0
- package/dist/preview/{chunk.DSZ3I557.js → chunk.JIWB6VGT.js} +1 -1
- package/dist/preview/{chunk.YZZGD5OY.js → chunk.KSEKVHJJ.js} +1 -1
- package/dist/preview/chunk.KXWRS6LY.js +1 -0
- package/dist/preview/chunk.LCFCU3I3.js +1 -0
- package/dist/preview/chunk.LEVR7WLB.js +1 -0
- package/dist/preview/{chunk.HQX5FGYT.js → chunk.LHIYFAN5.js} +2 -2
- package/dist/preview/chunk.LLUZMOBZ.js +1 -0
- package/dist/preview/{chunk.6OBXKKB5.js → chunk.LUUT2ZWF.js} +3 -3
- package/dist/preview/chunk.MLQQR57X.js +1 -0
- package/dist/preview/chunk.NIEQZOHX.js +1 -0
- package/dist/preview/{chunk.JCZH55RX.js → chunk.NLFLFIDS.js} +1 -1
- package/dist/preview/{chunk.6DU4XN2F.js → chunk.NQP3DWME.js} +1 -1
- package/dist/preview/{chunk.6UL2JUEH.js → chunk.OBGG4SYF.js} +1 -1
- package/dist/preview/chunk.OBQ4DIFO.js +1 -0
- package/dist/preview/chunk.P7YN4Z3K.js +8 -0
- package/dist/preview/{chunk.SSOTDXRS.js → chunk.PKFL2AR4.js} +1 -1
- package/dist/preview/chunk.PQ2IIC27.js +1 -0
- package/dist/preview/chunk.QFJRXAU3.js +8 -0
- package/dist/preview/chunk.REODVRPZ.js +1 -0
- package/dist/preview/chunk.RH6VRP76.js +1 -0
- package/dist/preview/chunk.SVL6I37U.js +1 -0
- package/dist/preview/chunk.TAW67PZU.js +1 -0
- package/dist/preview/chunk.TUYKH4FG.js +1 -0
- package/dist/preview/chunk.UEEXBS2U.js +1 -0
- package/dist/preview/chunk.UUMXYMOX.js +19 -0
- package/dist/preview/chunk.VW7U4CT5.js +1 -0
- package/dist/preview/chunk.WWWZZAHE.js +1 -0
- package/dist/preview/chunk.XD4Q4FI2.js +1 -0
- package/dist/preview/chunk.XNYBOKLW.js +1 -0
- package/dist/preview/chunk.XOC5BRPU.js +1 -0
- package/dist/preview/chunk.XXNC2AFL.js +1 -0
- package/dist/preview/chunk.YIZ3DJO3.js +1 -0
- package/dist/preview/chunk.YOMW4MKD.js +1 -0
- package/dist/preview/chunk.YXQCEXZX.js +1 -0
- package/dist/preview/chunk.ZLPA5BAW.js +1 -0
- package/dist/preview/chunk.ZOWWWRYA.js +1 -0
- package/dist/preview/page.js +6 -6
- package/package.json +6 -6
- package/dist/preview/chunk.2AJMM7JG.js +0 -1
- package/dist/preview/chunk.2WFEFZAW.js +0 -1
- package/dist/preview/chunk.2YVXTTC2.js +0 -1
- package/dist/preview/chunk.6KJSFIO7.js +0 -1
- package/dist/preview/chunk.6WFN4C46.js +0 -107
- package/dist/preview/chunk.7BAUPTMY.js +0 -1
- package/dist/preview/chunk.A4SJ7EEY.js +0 -1
- package/dist/preview/chunk.ACKTGTOT.js +0 -1
- package/dist/preview/chunk.BJ2Y5F66.js +0 -1
- package/dist/preview/chunk.BYUQOV3O.js +0 -1
- package/dist/preview/chunk.C5N4RTPF.js +0 -1
- package/dist/preview/chunk.CFL2B2Z5.js +0 -1
- package/dist/preview/chunk.DJ72CUS7.js +0 -1
- package/dist/preview/chunk.EA4BZKPG.js +0 -1
- package/dist/preview/chunk.EKZWX6NG.js +0 -1
- package/dist/preview/chunk.F26676IW.js +0 -1
- package/dist/preview/chunk.F2KDFGHR.js +0 -1
- package/dist/preview/chunk.FWV4XAZA.js +0 -1
- package/dist/preview/chunk.G3BOZHKR.js +0 -1
- package/dist/preview/chunk.H4LHHT56.js +0 -8
- package/dist/preview/chunk.I5ELK6JF.js +0 -1
- package/dist/preview/chunk.I6T3FDQS.js +0 -1
- package/dist/preview/chunk.IB6PGEU7.js +0 -1
- package/dist/preview/chunk.JEMQBV6K.js +0 -1
- package/dist/preview/chunk.JW3E4SAC.js +0 -1
- package/dist/preview/chunk.KUTTVYOB.js +0 -16
- package/dist/preview/chunk.LHFEOEYY.js +0 -1
- package/dist/preview/chunk.MJ67MK4R.js +0 -1
- package/dist/preview/chunk.Q5WEOX3Q.js +0 -1
- package/dist/preview/chunk.QOYC424P.js +0 -3
- package/dist/preview/chunk.R6F3YMRK.js +0 -6
- package/dist/preview/chunk.RAE4M3KQ.js +0 -8
- package/dist/preview/chunk.RUFAVEXB.js +0 -1
- package/dist/preview/chunk.RVEMN5WU.js +0 -1
- package/dist/preview/chunk.S56LSUHV.js +0 -1
- package/dist/preview/chunk.T6KID3WO.js +0 -1
- package/dist/preview/chunk.TAOT74FR.js +0 -1
- package/dist/preview/chunk.TTODVIXW.js +0 -1
- package/dist/preview/chunk.U6BWYBPM.js +0 -19
- package/dist/preview/chunk.US4KIJSW.js +0 -1
- package/dist/preview/chunk.WX5CJ7PI.js +0 -1
- package/dist/preview/chunk.WXO3XUNW.js +0 -1
- package/dist/preview/chunk.ZJVIH6IF.js +0 -1
- package/dist/preview/chunk.ZRVDIVYY.js +0 -1
- package/dist/preview/chunk.ZV7ZFH2S.js +0 -1
- /package/dist/preview/{chunk.WWRWXFYR.js → chunk.WVUJXDXZ.js} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as U,b as V,c as W,d as q,e as b,f as z,h as J}from"./chunk.DJ72CUS7.js";import{a as L,b as H,c as A,d as X,j as Q,k as Z,l as ee}from"./chunk.A4SJ7EEY.js";import{a as M,b as K,c as E,d as Y,e as F,g as R,h as ne}from"./chunk.YZZGD5OY.js";import{b as B,g as u,h as I,i as G}from"./chunk.DSZ3I557.js";var ce={};function te(e,t=ce,i=H){let{document:r,respelled:f}=U(e),l=f.length>0?{respelled:f}:{};if(!r||typeof r!="object"||Array.isArray(r))return{document:r};let p=r;if(p.format!==L||typeof p.formatVersion!="number"||p.formatVersion>=i)return{document:r,...l};let a=p.formatVersion,o=structuredClone(p);for(let s=a;s<i;s++){let c=t[s];if(!c)throw new Error(`there is no upgrade from format ${s} to ${s+1}`);o={...c(o),formatVersion:s+1}}return{document:o,from:a,...l}}function se(e,t,i){let r=Object.keys(e).filter(a=>e[a].edges?.[t]!==void 0);if(r.length===0)return;let f=r.map(a=>e[a].edges[t].to),l=f.some(a=>a==="*")?"*":[...new Set(f.flatMap(a=>a))];if(i.length===0||i.some(a=>r.includes(a)))return{reversed:!1,kinds:l};let p=r.filter(a=>{let o=e[a].edges[t].to;return o==="*"||i.every(s=>o.includes(s))});return p.length>0?{reversed:!0,kinds:p}:{reversed:!1,kinds:l}}function oe(e,t,i=`kinds.${e}.page`){let r=t.page;if(!r)return[];let f=[],l=[...Object.keys(t.fields),...Object.keys(t.computed??{})],p=new Set,a=(s,c)=>{l.includes(s)?p.has(s)&&f.push(u("page-field-twice",c,`"${s}" is on ${e}'s page twice; name each field once`)):f.push(u("page-field",c,`${e}'s page is to show "${s}", and ${e} has no field or computed field called that`,`use one of: ${l.join(", ")}`)),p.add(s)};(r.fields??[]).forEach((s,c)=>a(s,`${i}.fields.${c}`));let o=new Set;return(r.groups??[]).forEach((s,c)=>{let d=s.title.trim().toLowerCase();o.has(d)&&f.push(u("page-group-twice",`${i}.groups.${c}.title`,`${e}'s page has two groups called "${s.title}"; give each its own title`)),o.add(d),s.fields.forEach(($,n)=>a($,`${i}.groups.${c}.fields.${n}`))}),f}var de=new Set(["subject","now","today"]);function fe(e){if(typeof e=="string"){if(e.length>A)return{findings:[u("too-large","",`a document may be at most ${A/1024} KB`)]};try{e=JSON.parse(e)}catch(r){return{findings:[u("not-json","",`this is not JSON: ${r.message}`)]}}}else if(JSON.stringify(e??null).length>A)return{findings:[u("too-large","",`a document may be at most ${A/1024} KB`)]};try{e=te(e).document}catch(r){return{findings:[u("format","formatVersion",r.message)]}}let t=X.safeParse(e);if(!t.success)return{findings:t.error.issues.map(r=>{let f=r.path.map(String).join(".");if(r.code==="unrecognized_keys")return u("unknown-key",f,`${r.keys.map(l=>`"${l}"`).join(", ")} ${r.keys.length===1?"is":"are"} not part of a Graview document here`,"check the spelling against docs/declaration-document.md");if(r.code==="invalid_union"&&/\.effects\.\d+$/.test(f))return u("effect-shape",f,"this effect is not one Graview knows",'an effect is one of {"create": kind, "as"?: name, "set"?: {field: value}}, {"set": {field: value, \u2026}, "target"?: "$ref"}, {"connect"|"sever": relation, "from": "$ref", "to": "$ref"}, {"remove": "$ref"}');if(r.code==="invalid_key"){let l=r.issues?.[0]?.message;return u("shape",f,`the name "${String(r.path.at(-1))}" is not allowed here${l?`: ${l}`:""}`)}return u("shape",f,r.message)})};let i=t.data;return{document:i,findings:le(i)}}var P=e=>e===void 0?[]:Array.isArray(e)?e:[e];function re(e){let t=new Map;for(let[i,r]of Object.entries(e.kinds))for(let[f,l]of Object.entries(r.edges??{})){let p=t.get(f);t.set(f,{name:f,from:[...p?.from??[],i],to:l.to==="*"||p?.to==="*"?"*":[...new Set([...p?.to??[],...l.to])],cardinality:l.cardinality??"many"})}return t}function Ge(e){let t=new Map;for(let[r,f]of Object.entries(e.kinds)){let l=R(f);t.set(r,{fields:new Set(Object.keys(f.fields)),edges:new Map(Object.entries(f.edges??{}).map(([p,a])=>[p,a.cardinality??"many"])),...l?{computed:l}:{}})}let i=R(e);return i&&t.set(B,{computed:i}),t}function ie(e,t){let i=[],r=P(e.on),f=(l,p)=>{let a=se(t.kinds,l,r)?.reversed===!0,[o,s]=a?["$to","$subject"]:["$subject","$to"];return p==="connect"?{connect:l,from:o,to:s}:{sever:l,from:o,to:s}};if(e.creates){let l=t.kinds[e.creates],p={};for(let a of Object.keys(l?.fields??{}))p[a]=`$${a}`;for(let a of e.effects??[])"set"in a&&!("create"in a)&&b(a.target)==="new"&&Object.assign(p,a.set);i.push({create:e.creates,as:"new",set:p})}return e.sets&&i.push({set:e.sets}),e.writes&&!(e.creates&&e.on===void 0)&&i.push({set:Object.fromEntries(e.writes.map(l=>[l,`$${l}`]))}),e.connects&&(e.replaces&&i.push({replace:e.replaces===!0?[e.connects]:[...e.replaces],keep:e.connects}),i.push(f(e.connects,"connect"))),e.severs&&i.push(f(e.severs,"sever")),e.setsOther&&(e.connects||e.severs)&&i.push({set:e.setsOther,target:"$to"}),e.removes&&i.push({remove:"$subject"}),e.effects&&i.push(...e.effects.filter(l=>!(e.creates&&"set"in l&&!("create"in l)&&b(l.target)==="new"))),i}function C(e,t,i){try{let r=E(e),f=M(r);for(let l of f.unknownFunctions)i.push(u("unknown-function",t,`"${l}" is not a function the rule language knows`,"see docs/declaration-document.md#expression-language"));return r}catch(r){if(r instanceof K){i.push(u("expression",t,r.sentence+` (at character ${r.at+1})`));return}throw r}}function N(e,t,i){try{return F(e)}catch(r){if(r instanceof Y||r instanceof K){i.push(u("template",t,(r instanceof K,r.sentence)));return}throw r}}function le(e){let t=[],i=new Set(Object.keys(e.kinds)),r=re(e),f=e.acts??{},l=new Set(e.roles??[]);for(let[a,o]of Object.entries(e.kinds)){let s=`kinds.${a}`;for(let[d,$]of Object.entries(o.edges??{})){if($.to!=="*")for(let n of $.to)i.has(n)||t.push(u("edge-target",`${s}.edges.${d}.to`,`"${n}" is not a kind this document declares`));o.fields[d]&&t.push(u("edge-field-clash",`${s}.edges.${d}`,`"${d}" is both a field and a relation of ${a}`,"rename one of them"))}o.lifecycle&&!o.fields[o.lifecycle.field]&&t.push(u("lifecycle-field",`${s}.lifecycle.field`,`${a} has no field "${o.lifecycle.field}"`));let c=d=>o.computed!==void 0&&Object.hasOwn(o.computed,d);for(let d of o.glance??[])!o.fields[d]&&!c(d)&&t.push(u("glance-field",`${s}.glance`,`a glance at ${a} is to say "${d}", and ${a} has no field or computed field called that`,`use one of: ${[...Object.keys(o.fields),...Object.keys(o.computed??{})].join(", ")}`));t.push(...oe(a,o));for(let d of["label","describe"]){let $=o[d];if(!$)continue;let n=N($,`${s}.${d}`,t);for(let m of n??[])if(m.expr){for(let y of M(m.expr).names)if(!o.fields[y]){if(c(y)){ne(o,y)||t.push(u("template-field",`${s}.${d}`,`${a}'s ${y} is worked out from beyond the record, and a ${d} is said with no graph to read`,`show it in a view instead, or name a computed field worked out from ${a}'s own fields`));continue}t.push(u("template-field",`${s}.${d}`,`${a} has no field "${y}" for its ${d} to show`,d==="label"?"a label can only show the record's own fields and what they work out":void 0))}}}for(let[d,$]of Object.entries(o.fields))$.default!==void 0&&$.type==="enum"&&!$.options?.includes(String($.default))&&t.push(u("default-option",`${s}.fields.${d}.default`,`"${String($.default)}" is not one of ${d}'s options`))}for(let[a,o]of Object.entries(f)){let s=`acts.${a}`;for(let n of P(o.on))i.has(n)||t.push(u("act-kind",`${s}.on`,`"${n}" is not a kind this document declares`));let c=P(o.on),d=ie(o,e);if(o.creates&&o.on===void 0&&o.writes&&i.has(o.creates))for(let n of o.writes)e.kinds[o.creates].fields[n]||(e.kinds[o.creates].computed?.[n]!==void 0?t.push(u("computed-written",`${s}.writes`,`${o.creates}'s ${n} is worked out, not written: no act can set it`,"write the stored fields it is worked out from")):t.push(u("act-field",`${s}.writes`,`${o.creates} has no field "${n}"`)));d.length===0&&t.push(u("act-empty",s,`"${a}" does nothing`,"give it effects or a shorthand such as sets or creates"));let $=new Map;d.forEach((n,m)=>{let y=d.length-(o.effects?.length??0),w=o.effects&&m>=y?`${s}.effects.${m-y}`:s;if("create"in n){if(!i.has(n.create))t.push(u("act-kind",`${w}.create`,`"${n.create}" is not a kind this document declares`));else for(let h of Object.keys(n.set??{}))e.kinds[n.create].fields[h]||(e.kinds[n.create].computed?.[h]!==void 0?t.push(u("computed-written",`${w}.set.${h}`,`${n.create}'s ${h} is worked out, not written: no act can set it`,"set the stored fields it is worked out from")):t.push(u("act-field",`${w}.set.${h}`,`${n.create} has no field "${h}"`)));n.as&&$.set(n.as,n.create)}else if("connect"in n||"sever"in n){let h="connect"in n?n.connect:n.sever;r.has(h)||t.push(u("act-edge",`${w}.${"connect"in n?"connect":"sever"}`,`"${h}" is not a relation any kind declares`)),b(n.from)==="subject"&&c.length===0&&t.push(u("act-subject",`${s}.on`,`"${a}" acts on "$subject" but does not say which kinds it is "on"`))}else if("set"in n){let h=b(n.target??"$subject"),O=h==="subject"?c:$.has(h??"")?[$.get(h)]:[];h==="subject"&&c.length===0&&t.push(u("act-subject",`${s}.on`,`"${a}" changes "$subject" but does not say which kinds it is "on"`));for(let S of Object.keys(n.set))for(let x of O)!i.has(x)||e.kinds[x].fields[S]||(e.kinds[x].computed?.[S]!==void 0?t.push(u("computed-written",`${w}.set.${S}`,`${x}'s ${S} is worked out, not written: no act can set it`,"set the stored fields it is worked out from")):t.push(u("act-field",`${w}.set.${S}`,`${x} has no field "${S}"`)))}else"remove"in n&&b(n.remove)==="subject"&&c.length===0&&t.push(u("act-subject",`${s}.on`,`"${a}" removes "$subject" but does not say which kinds it is "on"`));("set"in n&&n.set?Object.values(n.set):[]).forEach(h=>{h&&typeof h=="object"&&!Array.isArray(h)&&"expr"in h&&C(h.expr,`${w}.set`,t)})}),o.allowedWhen&&C(o.allowedWhen,`${s}.allowedWhen`,t),o.refusal&&N(o.refusal,`${s}.refusal`,t)}for(let[a,o]of Object.entries(e.rules??{})){let s=`rules.${a}`;o.over!=="graph"&&!i.has(o.over)&&t.push(u("rule-kind",`${s}.over`,`"${o.over}" is not a kind this document declares`));let c=o.over==="graph"?void 0:e.kinds[o.over];for(let d of["when","require"]){let $=o[d];if(!$)continue;let n=C($,`${s}.${d}`,t);if(!n)continue;let m=M(n);for(let y of m.names)if(o.over==="graph")t.push(u("rule-name",`${s}.${d}`,`"${y}" means nothing in a rule over the whole graph`,`name a kind in "over", or use all('kind')`));else if(c&&!c.fields[y]&&!c.edges?.[y]&&c.computed?.[y]===void 0){let w=Object.keys(c.edges??{}).find(v=>v.includes("-")&&v.split("-").includes(y));t.push(u("rule-name",`${s}.${d}`,`${o.over} has no field or relation called "${y}"`,w?`"${w}" reads as a subtraction in a rule; rename the relation to one camelCase word, like "${w.replace(/-([a-z0-9])/g,(v,h)=>h.toUpperCase())}"`:void 0))}for(let y of m.edges)r.has(y)||t.push(u("rule-edge",`${s}.${d}`,`"${y}" is not a relation any kind declares`));for(let y of m.sweeps)i.has(y)?o.over!=="graph"&&t.push(I("rule-cost",`${s}.${d}`,`this rule looks at every ${y} for every ${o.over}, which grows slowly as the app grows`,"walk a relation with out()/in() instead of all() where you can")):t.push(u("rule-kind",`${s}.${d}`,`"${y}" is not a kind this document declares`))}o.says&&N(o.says,`${s}.says`,t),(o.repairs??[]).forEach((d,$)=>{!f[d.act]&&!/^(edit|remove)-/.test(d.act)&&t.push(u("repair-act",`${s}.repairs.${$}.act`,`"${d.act}" is not an act this document declares`))})}let p=e.policy;return p&&(p.grants.forEach((a,o)=>{if(a.roles!=="*"&&l.size>0)for(let s of a.roles)l.has(s)||t.push(u("grant-role",`policy.grants.${o}.roles`,`"${s}" is not one of the document's roles`));if(a.mutations!=="*")for(let s of a.mutations)!f[s]&&!/^(edit|remove)-/.test(s)&&t.push(u("grant-act",`policy.grants.${o}.mutations`,`"${s}" is not an act this document declares`))}),(p.sees??[]).forEach((a,o)=>{for(let s of a.kinds)i.has(s)||t.push(u("sight-kind",`policy.sees.${o}.kinds`,`"${s}" is not a kind this document declares`));if(a.roles!=="*"&&l.size>0)for(let s of a.roles)l.has(s)||t.push(u("sight-role",`policy.sees.${o}.roles`,`"${s}" is not one of the document's roles`))})),t.push(...ee(e)),t}function ue(e,t,i,r){let f=new Map,l=P(e.on),p=new Map,a=new Map;(l.length>0||t.some(n=>"remove"in n&&b(n.remove)==="subject"||"from"in n&&(b(n.from)==="subject"||b(n.to)==="subject")||"set"in n&&!("create"in n)&&b(n.target??"$subject")==="subject"))&&f.set(q,{ref:l.length>0?l:"*",required:!0});let s=e.args??{},c=e.writes?.length===1,d=(n,m)=>m&&n.type===m.type&&n.min===void 0&&n.max===void 0&&n.step===void 0?{...n,...m.min===void 0?{}:{min:m.min},...m.max===void 0?{}:{max:m.max},...m.step===void 0?{}:{step:m.step}}:n,$=(n,m,y)=>{if(n===q||de.has(n)||p.has(n)||f.has(n))return;let w=s[n]?d(s[n],y):void 0;f.set(n,w?{field:w,optional:!w.required,required:!!w.required}:m())};for(let n of t)if("create"in n){let m=i.kinds[n.create];for(let[y,w]of Object.entries(n.set??{})){let v=b(w),h=m?.fields[y];if(v&&h){let O=!!h.required&&h.default===void 0;$(v,()=>({field:h,optional:!O,required:O}),h)}}n.as&&p.set(n.as,n.create)}else if("connect"in n||"sever"in n){let m=r.get("connect"in n?n.connect:n.sever);for(let[y,w]of[["from",n.from],["to",n.to]]){let v=b(w);if(!v)continue;let h=y==="to"?m?.to??"*":m?.from??"*";h!=="*"&&!a.has(v)&&a.set(v,h),$(v,()=>({ref:h,required:!0}))}}else if("set"in n){let m=b(n.target??"$subject"),y=m==="subject"?l[0]:p.get(m??"")??a.get(m??"")?.[0];m&&m!=="subject"&&!p.has(m)&&$(m,()=>({ref:"*",required:!0}));for(let[w,v]of Object.entries(n.set)){let h=b(v);if(!h)continue;let O=y?i.kinds[y]?.fields[w]:void 0;$(h,()=>O?{field:O,optional:!c,required:c}:{any:!0,required:!1},O)}}else if("remove"in n){let m=b(n.remove);m&&$(m,()=>({ref:"*",required:!0}))}for(let[n,m]of Object.entries(s))f.has(n)||f.set(n,{field:m,optional:!m.required,required:!!m.required});return f}function qe(e,t={}){let i=fe(e);if(!i.document||G(i.findings))return{ok:!1,findings:i.findings};let r=i.document,f=[...i.findings];t.previous&&f.push(...ge(r,t.previous));let l=pe(r,f);return G(l.findings)?{ok:!1,findings:l.findings}:J(l,t)}function pe(e,t){let i=re(e),r={};for(let[s,c]of Object.entries(e.kinds)){let d=z(c),$=c.label??(d?`{${d}}`:void 0),n=R(c);r[s]={...$?{label:F($)}:{},...c.describe?{describe:F(c.describe)}:{},...n?{computed:[...n]}:{}}}let f={};for(let[s,c]of Object.entries(e.acts??{})){let d=ie(c,e),$=ue(c,d,e,i),n=c.destructive??d.some(g=>"remove"in g||"sever"in g||"replace"in g),m=[...new Set(d.flatMap(g=>"create"in g?[g.create]:[]))],y=[...new Set(d.flatMap(g=>"connect"in g?[g.connect]:[]))],w=[...new Set(d.flatMap(g=>"sever"in g?[g.sever]:"replace"in g?g.replace:[]))],v=[...new Set(d.flatMap(g=>"set"in g&&!("create"in g)&&b(g.target??"$subject")==="subject"?Object.keys(g.set):[]))],h=new Map;for(let g of d){if(!("connect"in g)&&!("sever"in g))continue;let k=i.get("connect"in g?g.connect:g.sever);for(let[j,ae]of[["from",g.from],["to",g.to]]){let D=b(ae),T=j==="to"?k?.to:k?.from;D&&D!=="subject"&&T&&T!=="*"&&h.set(D,[...new Set([...h.get(D)??[],...T])])}}let O={};for(let g of d){if(!("set"in g)||"create"in g)continue;let k=b(g.target??"$subject");for(let j of k&&k!=="subject"&&h.get(k)||[])O[j]=[...new Set([...O[j]??[],...Object.keys(g.set)])]}let S={};for(let g of d)if(!(!("set"in g)||"create"in g||b(g.target??"$subject")!=="subject"))for(let[k,j]of Object.entries(g.set??{}))typeof j=="string"&&b(j)===void 0||typeof j=="number"||typeof j=="boolean"?S[k]=typeof j=="string"&&j.startsWith("$$")?j.slice(1):j:delete S[k];let x=m.length===0&&d.every(g=>!("set"in g)||!g.set||Object.values(g.set).every(k=>!(k&&typeof k=="object"&&!Array.isArray(k)&&"expr"in k))),_=new Map;for(let g of d)if(!(!("set"in g)||!g.set))for(let k of Object.values(g.set))k&&typeof k=="object"&&!Array.isArray(k)&&"expr"in k&&_.set(k.expr,E(k.expr));f[s]={title:c.title??s.replace(/-/g," "),effects:d,args:[...$],...c.allowedWhen?{guard:E(c.allowedWhen)}:{},...c.refusal?{refusal:F(c.refusal)}:{},exprs:[..._],destructive:n,idempotent:x,creates:m,connects:y,severs:w,writes:v,writesOther:O,sets:S}}let l={};for(let[s,c]of Object.entries(e.rules??{}))l[s]={title:c.title??s.replace(/-/g," "),require:E(c.require),...c.when?{when:E(c.when)}:{},...c.says?{says:F(c.says)}:{}};let p=V(e,t),a=Q(e),o=Z(e);return{format:W,document:e,findings:t,kinds:r,...e.computed?{facts:[...R(e)??[]]}:{},edges:[...i].map(([s,{from:c,to:d,cardinality:$}])=>[s,{from:c,to:d,cardinality:$}]),acts:f,rules:l,brand:p,...Object.keys(a).length>0?{viewSpecs:a}:{},...o?{home:o}:{}}}function Ce(e,t){let i=e.split(/[\s:·]/).find(r=>r.length>0)??e;return t.kinds[i]?`kinds.${i}`:t.acts?.[i]?`acts.${i}`:t.rules?.[i]?`rules.${i}`:e}function Ne(e,t,i){let r=/^defineNode\("([^"]+)"\)/.exec(t)?.[1],f=r?i.kinds[r]:void 0;if(!r||!f)return e;let l=Object.keys(f.fields).filter(p=>p!=="label").slice(0,3);return{...e,path:`kinds.${r}.glance`,fix:`Say which: "glance": [${l.map(p=>`"${p}"`).join(", ")}] on kinds.${r} \u2014 the facts a person compares one by, at a glance.`}}function ge(e,t){let i=[],r=new Set(Object.values(t.kinds).flatMap(f=>Object.keys(f.edges??{})));for(let[f,l]of Object.entries(e.kinds)){let p=l.renamedFrom;p&&!t.kinds[p]&&i.push(u("renamed-from-nothing",`kinds.${f}.renamedFrom`,`${f} says it was ${p}, and the previous version has no kind called ${p}`,"name the kind it was, or drop renamedFrom"));let a=t.kinds[p??f];for(let[o,s]of Object.entries(l.fields)){let c=s.renamedFrom;c&&!a?.fields[c]&&i.push(u("renamed-from-nothing",`kinds.${f}.fields.${o}.renamedFrom`,`${o} says it was ${c}, and the previous ${p??f} has no field called ${c}`,"name the field it was, or drop renamedFrom"))}for(let[o,s]of Object.entries(l.edges??{})){let c=s.renamedFrom;c&&!r.has(c)&&i.push(u("renamed-from-nothing",`kinds.${f}.edges.${o}.renamedFrom`,`${o} says it was ${c}, and the previous version has no relation called ${c}`,"name the relation it was, or drop renamedFrom"))}}return i}export{fe as a,Ge as b,ie as c,qe as d,Ce as e,Ne as f};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as I,c as x}from"./chunk.JIXW4WIO.js";import"./chunk.T6KID3WO.js";import"./chunk.6DU4XN2F.js";import"./chunk.MJ67MK4R.js";import"./chunk.US4KIJSW.js";import"./chunk.AHDOKM4O.js";import{C as G,c as b,d as A,j as v,x as w,z as O}from"./chunk.2WFEFZAW.js";import{Ja as S,Qb as W,oa as k,pa as E}from"./chunk.RAE4M3KQ.js";import"./chunk.MRK6QJV5.js";import"./chunk.AJZBJBMO.js";var F=(e,i)=>S(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]}`!==W&&!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=E(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:k(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 +0,0 @@
|
|
|
1
|
-
import{c as L}from"./chunk.F26676IW.js";import{a as R,b as O,c as v,d as P}from"./chunk.ONDILMIX.js";import"./chunk.G3BOZHKR.js";import"./chunk.6DU4XN2F.js";import{a as E,b as T}from"./chunk.US4KIJSW.js";import"./chunk.LHFEOEYY.js";import"./chunk.U6BWYBPM.js";import"./chunk.QOYC424P.js";import"./chunk.B57EIGTS.js";import"./chunk.2YVXTTC2.js";import"./chunk.WWRWXFYR.js";import"./chunk.BJ2Y5F66.js";import"./chunk.A4SJ7EEY.js";import"./chunk.6KJSFIO7.js";import"./chunk.DEZEXD24.js";import"./chunk.YZZGD5OY.js";import"./chunk.DSZ3I557.js";import"./chunk.SSOTDXRS.js";import"./chunk.ZRVDIVYY.js";import"./chunk.AHDOKM4O.js";import"./chunk.PY42PBMB.js";import"./chunk.JCZH55RX.js";import{va as x}from"./chunk.2WFEFZAW.js";import{zb as k}from"./chunk.RAE4M3KQ.js";import{a as D,b as C}from"./chunk.MRK6QJV5.js";import{b as S}from"./chunk.AJZBJBMO.js";var o=S(D(),1);var i=S(C(),1);function W(c){let e=document.activeElement;if(e!==null&&e!==document.body&&e!==document.documentElement&&e.isConnected)return;let r=c??document,a=r.querySelector("main")??r.querySelector("[data-graview-page]")??null,n=r.querySelector("[data-graview-page-title]")??a?.querySelector("h1, h2")??a;n instanceof HTMLElement&&(n.hasAttribute("tabindex")||n.setAttribute("tabindex","-1"),n.focus({preventScroll:!0}))}var H=1500;function z(c,e,r){let{store:a,principal:n}=c,u=L(a),l=(0,o.useMemo)(()=>R(a,n),[a,n,u]),b=(0,o.useRef)(r),[p,m]=(0,o.useState)(),[s,f]=(0,o.useState)("");(0,o.useEffect)(()=>{let t=O(a,n,b.current);b.current=a.batches().length,t&&(m({batch:t.batch,at:e,when:Date.now()}),f(""))},[a,n,u]),(0,o.useEffect)(()=>{m(t=>!t||t.at===e?t:Date.now()-t.when<H?{...t,at:e}:void 0)},[e]);let[g,h]=(0,o.useState)(null),y=(0,o.useCallback)(()=>{m(void 0),h(null)},[]),w=(0,o.useCallback)(()=>{h(null);try{let t=P(a,n);t&&f(`Took back \u201C${t.intent}\u201D`)}catch(t){h(t instanceof Error?t.message:String(t))}},[a,n]),d=l&&p?.batch===l.batch&&p.at===e?l:void 0;return{change:l,offered:d,close:y,takeBack:w,refused:g,said:s}}function Y({context:c,docked:e,at:r,since:a}){let{change:n,offered:u,close:l,takeBack:b,refused:p,said:m}=z(c,r,a),s=e?u:n,f=(0,o.useRef)(null),g=e&&(s!==void 0||p!==null);B(f,g),(0,o.useEffect)(()=>{if(!g)return;let d,t=()=>d=setTimeout(()=>f.current?.matches(":hover, :focus-within")?t():l(),1e4);return t(),()=>clearTimeout(d)},[g,s?.batch,p,l]);let h=m||(e&&s?v(s):""),y=e?{position:"fixed",inset:"auto",margin:0,padding:0,border:"none",background:"none",overflow:"visible",zIndex:k("toast"),width:"max-content",height:"auto",bottom:"calc(16px + env(safe-area-inset-bottom, 0px))",left:16,justifyItems:"start",color:"var(--graview-ink)",...g?{}:{display:"none"}}:{},w=s?(0,i.jsxs)("button",{type:"button","data-testid":"page-undo",title:`${v(s)} \u2014 \u2318Z or Ctrl+Z`,"aria-keyshortcuts":"Meta+Z Control+Z",onClick:d=>{let t=d.currentTarget.closest("[data-graview-face]");b(),requestAnimationFrame(()=>W(t))},style:e?I:A,children:[(0,i.jsx)("span",{"aria-hidden":"true",children:"\u21B6"}),(0,i.jsx)("span",{style:e?j:F,children:v(s)})]}):null;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("span",{role:"status","aria-live":"polite",style:N,children:h}),(0,i.jsxs)("div",{ref:f,...e?{popover:"manual","data-graview-foot":"","data-graview-offstage":""}:{},"data-testid":e?"face-undo-dock":"page-undo-place",style:{display:"grid",justifyItems:"end",gap:4,maxWidth:"100%",minWidth:0,...y},children:[e&&s?(0,i.jsxs)("div",{"data-testid":"page-undo-notice",style:_,children:[w,(0,i.jsx)("button",{type:"button","data-testid":"page-undo-dismiss","aria-label":`Dismiss: ${v(s)}`,title:"Dismiss",onClick:d=>{let t=d.currentTarget.closest("[data-graview-face]");l(),requestAnimationFrame(()=>W(t))},style:q,children:"\xD7"})]}):w,p?(0,i.jsx)("span",{"data-testid":"page-undo-refused",role:"alert",style:{fontSize:"0.8125rem",lineHeight:1.4,color:"var(--graview-warn)",background:e?"var(--graview-float)":void 0,padding:e?"4px 8px":void 0,borderRadius:6},children:p}):null]})]})}function B(c,e){(0,o.useLayoutEffect)(()=>{let r=c.current;if(!r||!e)return;if(typeof r.showPopover=="function"&&!x(r))try{r.showPopover()}catch{}let a=()=>r.parentElement?.closest("[data-embed-content]")??null,n=()=>{T(r,a()),dispatchEvent(new Event(E))};n(),addEventListener("resize",n),addEventListener("scroll",n,!0);let u=typeof ResizeObserver=="function"?new ResizeObserver(n):null;return u?.observe(r),()=>{if(u?.disconnect(),removeEventListener("resize",n),removeEventListener("scroll",n,!0),r.isConnected&&x(r))try{r.hidePopover()}catch{}dispatchEvent(new Event(E))}},[c,e])}var A={display:"inline-flex",alignItems:"center",gap:6,minHeight:36,maxWidth:"100%",minWidth:0,padding:"0 14px",borderRadius:999,border:"1px solid var(--graview-edge)",background:"var(--graview-float)",color:"var(--graview-ink)",font:"inherit",fontSize:"0.875rem",cursor:"pointer"},I={...A,textAlign:"start",lineHeight:1.4,padding:"8px 4px 8px 14px",border:"none",background:"none",color:"inherit"},_={display:"flex",alignItems:"center",gap:2,maxWidth:"100%",minWidth:0,paddingRight:6,borderRadius:"var(--graview-radius, 12px)",border:"1px solid var(--graview-edge)",background:"var(--graview-float)",boxShadow:"var(--graview-lift-high)"},q={flex:"0 0 auto",minWidth:28,minHeight:28,padding:0,border:"none",background:"none",boxShadow:"none",color:"var(--graview-ink-muted)",font:"inherit",fontSize:"1rem",cursor:"pointer"},F={minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},j={minWidth:0,overflow:"hidden",overflowWrap:"anywhere",display:"-webkit-box",WebkitBoxOrient:"vertical",WebkitLineClamp:4},N={position:"absolute",width:1,height:1,margin:-1,padding:0,overflow:"hidden",clip:"rect(0 0 0 0)",whiteSpace:"nowrap",border:0};export{Y as TakeBack};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a,b,c,d,e,f,g,h,i}from"./chunk.ORJ3T4IW.js";import"./chunk.BJ2Y5F66.js";import"./chunk.A4SJ7EEY.js";import"./chunk.6KJSFIO7.js";import"./chunk.DEZEXD24.js";import"./chunk.YZZGD5OY.js";import"./chunk.DSZ3I557.js";import"./chunk.RAE4M3KQ.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,16 +0,0 @@
|
|
|
1
|
-
import{c as E,d as I}from"./chunk.U6BWYBPM.js";import"./chunk.PY42PBMB.js";import"./chunk.JCZH55RX.js";import"./chunk.2WFEFZAW.js";import{J as A,N as k}from"./chunk.RAE4M3KQ.js";import{a as F,b as S}from"./chunk.MRK6QJV5.js";import{b as f}from"./chunk.AJZBJBMO.js";var v=f(F(),1);var a=f(S(),1),C=40,O=60;function D(l,i,p){return l.allNodes().filter(o=>o.kind===i).map(o=>o[p])}function G(l){if(l.length<2)return[];let i=[...l].sort((n,d)=>n-d),p=i[i.length-1]-i[0];if(p<=0)return[];let o=Math.max(1,10**Math.floor(Math.log10(p/4))),e=p/4>=o*5?o*5:o,r=n=>Math.round(n/e)*e;return[...new Set([.2,.4,.6,.8].map(n=>r(i[Math.floor(n*(i.length-1))])))].filter(n=>n>0)}function T(l,i,p){let o=p.far??[],e=new Map,r=new Set(o);for(let t of i.allNodes())r.has(t.kind)&&e.set(t.id,A(l.tryDefinition(t.kind),t));let n=[...e.entries()].map(([t,g])=>({id:t,label:g}));return(n.length<=C?n:n.map(t=>({end:t,ties:i.out(t.id).length+i.in(t.id).length})).sort((t,g)=>g.ties-t.ties||t.end.label.localeCompare(g.end.label)).slice(0,C).map(t=>t.end)).sort((t,g)=>t.label.localeCompare(g.label))}function R(l,i,p){let o=[];for(let e of p.filters)if(e.about==="is")for(let r of e.options??[])o.push({value:`is:${r}`,label:r,group:e.label,condition:{key:"is",value:r}});else if(e.about==="edge"){o.push({value:`${e.key}:*`,label:"anything",group:e.label,condition:{key:e.key,value:"*"}}),o.push({value:`${e.key}:none`,label:"nothing",group:e.label,condition:{key:e.key,value:"none"}});for(let r of T(l,i,e))o.push({value:`${e.key}:${r.id}`,label:r.label,group:e.label,condition:{key:e.key,value:r.id}})}else if(e.type==="date")for(let r of["before","after","on"])o.push({value:`${e.key}:${r}`,label:`${r}\u2026`,group:e.label,ask:{key:e.key,op:r,label:e.label}});else if(e.type==="number"){let r=l.tryDefinition(p.kind),n=G(D(i,p.kind,e.key).filter(d=>typeof d=="number"));for(let d of["at-most","at-least"])for(let t of d==="at-most"?n:[...n].reverse())o.push({value:`${e.key}:${d}:${t}`,label:`${d==="at-most"?"at most":"at least"} ${k(r,e.key,t)}`,group:e.label,condition:{key:e.key,value:`${d}:${t}`}})}else if(e.type==="text"){let r=[...new Set(D(i,p.kind,e.key).filter(n=>typeof n=="string"&&n.length>0&&!n.includes(",")))].sort((n,d)=>n.localeCompare(d));if(r.length>=2&&r.length<=O)for(let n of r)o.push({value:`${e.key}:${n}`,label:n,group:e.label,condition:{key:e.key,value:n}})}else if(e.type==="boolean")o.push({value:`${e.key}:true`,label:"yes",group:e.label,condition:{key:e.key,value:"true"}}),o.push({value:`${e.key}:false`,label:"no",group:e.label,condition:{key:e.key,value:"false"}});else for(let r of e.options??[])o.push({value:`${e.key}:${r}`,label:k(l.tryDefinition(p.kind),e.key,r),group:e.label,condition:{key:e.key,value:r}});return o}var H=["day","week","month","year","decade"];function K(l){let{which:i,schema:p,graph:o,offers:e,arrangement:r,set:n,toggle:d,has:t,done:g}=l,y=l.testId,h=(0,v.useRef)(null);(0,v.useEffect)(()=>{let u=h.current?.closest("[data-graview-popover]");!u||document.activeElement!==u||(u.querySelector('[aria-pressed="true"]')??u.querySelector("button, input"))?.focus({preventScroll:!0})},[]);let L=r.sort?e.sorts.find(u=>u.key===r.sort.by):void 0,P=r.group?e.groups.find(u=>u.key===r.group.by):void 0,M=I(L),m=e.natural?e.sorts.find(u=>u.key===e.natural.by):void 0,N=i==="filter"||i==="all"&&l.parts?.filter?R(p,o,e):[],w=u=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("p",{children:"Sort by"}),(0,a.jsx)(c,{testId:`${y}-sort-default`,value:"",on:!r.sort,onPress:()=>(n({sort:void 0}),u()),children:m?`As declared (${E(m.label)})`:"As they were added"}),e.sorts.map(s=>(0,a.jsx)(c,{value:s.key,on:r.sort?.by===s.key,onPress:()=>(n({sort:{by:s.key,direction:r.sort?.direction??"asc"}}),u()),children:s.label},s.key)),r.sort?(0,a.jsxs)("div",{role:"group","aria-label":"Order","data-testid":`${y}-direction`,children:[(0,a.jsx)("p",{"aria-hidden":"true",children:"Order"}),["asc","desc"].map(s=>(0,a.jsx)(c,{testId:`${y}-direction-${s}`,value:s,on:r.sort.direction===s,onPress:()=>(n({sort:{by:r.sort.by,direction:s}}),u()),children:M[s]},s))]}):null]}),x=u=>(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("p",{children:"Group by"}),(0,a.jsx)(c,{testId:`${y}-group-none`,value:"",on:!r.group,onPress:()=>(n({group:void 0}),u()),children:"Not grouped"}),e.groups.map(s=>(0,a.jsx)(c,{value:s.key,on:r.group?.by===s.key,onPress:()=>(n({group:{by:s.key}}),u()),children:s.label},s.key)),r.group&&P?.buckets?(0,a.jsxs)("div",{role:"group","aria-label":"How wide a group is","data-testid":`${y}-bucket`,children:[(0,a.jsx)("p",{"aria-hidden":"true",children:"Each group"}),H.map(s=>(0,a.jsx)(c,{testId:`${y}-bucket-${s}`,value:s,on:(r.group.bucket??"day")===s,onPress:()=>(n({group:{by:r.group.by,bucket:s}}),u()),children:`A ${s}`},s))]}):null]}),$=u=>(0,a.jsx)(z,{entries:N,has:t,testId:y,onToggle:s=>(d(s),u())}),b=l.parts??{sort:!0,group:!0,filter:!0};return(0,a.jsxs)("div",{ref:h,style:{display:"contents"},children:[(0,a.jsx)("style",{children:W}),i==="sort"?w(g):i==="group"?x(g):i==="filter"?$(g):(0,a.jsxs)(a.Fragment,{children:[b.sort?(0,a.jsx)("div",{role:"group","aria-label":"Sort",children:w(g)}):null,b.group?(0,a.jsx)("div",{role:"group","aria-label":"Group",children:x(g)}):null,b.filter?(0,a.jsx)("div",{role:"group","aria-label":"Filter",children:$(g)}):null]})]})}function c({value:l,on:i,onPress:p,testId:o,children:e}){return(0,a.jsx)("button",{type:"button",className:"graview-arrange-item",value:l,"data-value":l,"aria-pressed":i,onClick:p,...o?{"data-testid":o}:{},children:e})}function z({entries:l,has:i,testId:p,onToggle:o}){let[e,r]=(0,v.useState)(null);if(e)return(0,a.jsx)(B,{ask:e,testId:p,onDay:d=>o({key:e.key,value:`${e.op}:${d}`}),onCancel:()=>r(null)});let n=[...new Set(l.map(d=>d.group))];return(0,a.jsx)(a.Fragment,{children:n.map(d=>(0,a.jsxs)("div",{role:"group","aria-label":d,children:[(0,a.jsx)("p",{"aria-hidden":"true",children:d}),l.filter(t=>t.group===d).map(t=>(0,a.jsx)(c,{value:t.value,on:t.condition?i(t.condition):!1,onPress:()=>t.condition?o(t.condition):r(t.ask),children:t.label},t.value))]},d))})}function B({ask:l,testId:i,onDay:p,onCancel:o}){let[e,r]=(0,v.useState)(""),n=/^\d{4}-\d{2}-\d{2}$/.test(e)&&Number(e.slice(0,4))>=1e3,d=()=>{n&&p(e)};return(0,a.jsxs)("div",{role:"group","aria-label":`${l.label} ${l.op} which day`,"data-testid":`${i}-ask-day`,className:"graview-arrange-ask",children:[(0,a.jsx)("p",{"aria-hidden":"true",children:`${l.label} ${l.op}`}),(0,a.jsx)("input",{type:"date","data-testid":`${i}-day`,"aria-label":`${l.label} ${l.op} which day`,autoFocus:!0,value:e,onChange:t=>r(t.target.value),onKeyDown:t=>{t.key==="Enter"?(t.preventDefault(),d()):t.key==="Escape"&&(t.preventDefault(),t.stopPropagation(),t.nativeEvent.stopImmediatePropagation(),o())}}),(0,a.jsxs)("span",{children:[(0,a.jsx)("button",{type:"button","data-testid":`${i}-day-add`,disabled:!n,onClick:d,children:"Add"}),(0,a.jsx)("button",{type:"button",onClick:o,children:"Never mind"})]})]})}var W=`
|
|
2
|
-
.graview-arrange-list{display:grid;align-content:start;width:min(300px,calc(100vw - 24px));height:auto;max-height:min(70vh,520px);overflow:auto;margin:0;padding:6px;border-radius:10px;border:1px solid var(--graview-edge);background:var(--graview-float);box-shadow:var(--graview-lift-high);color:var(--graview-ink);font-size:.875rem;line-height:1.3}
|
|
3
|
-
.graview-arrange-list [role=group]{display:grid}
|
|
4
|
-
.graview-arrange-list p{margin:8px 8px 2px;font-size:.6875rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--graview-ink-muted)}
|
|
5
|
-
.graview-arrange-item{display:flex;align-items:flex-start;gap:8px;width:100%;min-height:30px;margin:0;padding:6px 8px;border:0;border-radius:7px;background:none;font:inherit;text-align:left;color:var(--graview-ink);cursor:pointer;overflow-wrap:anywhere}
|
|
6
|
-
.graview-arrange-item::before{content:"";flex:0 0 12px}
|
|
7
|
-
.graview-arrange-item[aria-pressed=true]{font-weight:600}
|
|
8
|
-
.graview-arrange-item[aria-pressed=true]::before{content:"\u2713";color:var(--graview-accent)}
|
|
9
|
-
.graview-arrange-item:hover{background:color-mix(in srgb,var(--graview-ink) 7%,transparent)}
|
|
10
|
-
.graview-arrange-ask{display:grid;gap:8px;padding:0 8px 8px}
|
|
11
|
-
.graview-arrange-ask p{margin:8px 0 0}
|
|
12
|
-
.graview-arrange-ask input{box-sizing:border-box;width:100%;min-height:32px;padding:0 8px;border:1px solid var(--graview-edge);border-radius:7px;background:var(--graview-panel);font:inherit;color:var(--graview-ink)}
|
|
13
|
-
.graview-arrange-ask span{display:flex;gap:8px}
|
|
14
|
-
.graview-arrange-ask button{min-height:30px;padding:0 12px;border:1px solid var(--graview-edge);border-radius:7px;background:var(--graview-panel);font:inherit;color:var(--graview-ink);cursor:pointer}
|
|
15
|
-
.graview-arrange-ask button:disabled{opacity:.5;cursor:default}
|
|
16
|
-
`;export{K as ArrangeLists,C as FAR_ENDS,R as filterEntries,G as roundSteps};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as y}from"./chunk.SSOTDXRS.js";import{Ba as g,a as f,ya as m}from"./chunk.2WFEFZAW.js";import{U as p}from"./chunk.RAE4M3KQ.js";import{a as R,b as c}from"./chunk.MRK6QJV5.js";import{b as u}from"./chunk.AJZBJBMO.js";var s=u(R(),1);var r=u(c(),1),S,h=()=>S??=m(f(()=>import("./chunk.RVEMN5WU.js")));function L(e){let[n,t]=(0,s.useState)(()=>h().current);return(0,s.useEffect)(()=>{if(!e||n)return;let i=!0;return h().load().then(a=>i&&t(a),()=>{}),()=>{i=!1}},[e,n]),n}function D(e,n){let t=L(n.length>0);return(0,s.useMemo)(()=>t?t.withLines(e,n):n,[t,e,n])}function I(e,n){let t=L(n.some(i=>i.shape));return(0,s.useMemo)(()=>{let i=new Map;if(!t)return i;for(let a of n){let l=t.ruleLine(a,e);l&&i.set(a.name,l)}return i},[t,e,n])}function M(e){let n=e.line;if(!(!n||e.message.endsWith(` \u2014 ${n.text}`)||e.message===b(e)))return e.message}function b(e){let n=e.line;return n?n.record!==void 0?`${n.record} \u2014 ${n.text}`:n.text:e.message}var P={name:{},op:{color:"var(--graview-ink-muted)",fontWeight:500},value:{fontWeight:600,fontVariantNumeric:"tabular-nums"},word:{color:"var(--graview-ink-muted)"},open:{color:"var(--graview-ink-faint)"},close:{color:"var(--graview-ink-faint)"}};function w({parts:e}){return(0,r.jsx)(r.Fragment,{children:e.map((n,t)=>(0,r.jsxs)("span",{children:[n.space?" ":"",(0,r.jsx)("span",{"data-graview-rule-part":n.as,style:P[n.as],children:n.text})]},t))})}function x(e,n){let t=p(e?.tryDefinition(n),n);return t.charAt(0).toUpperCase()+t.slice(1)}function C({line:e,schema:n,brand:t,lead:i=e.record===void 0?"kind":"record",stacked:a=!1,style:l}){let d=e.kind,o=i==="kind"?d?x(n,d):void 0:i==="record"?e.record:void 0,k=i==="kind"&&o?`${o}: ${e.said}`:i==="record"&&o?`${o} \u2014 ${e.said}`:e.said;return(0,r.jsxs)("span",{"data-graview-rule-line":"",style:{overflowWrap:"anywhere",...l},children:[(0,r.jsx)("span",{style:g,children:k}),(0,r.jsxs)("span",{"aria-hidden":"true",children:[i!=="none"&&d?(0,r.jsx)("span",{style:{display:"inline-flex",verticalAlign:"-0.1em",marginRight:"0.4em"},children:(0,r.jsx)(y,{kind:d,...n?{schema:n}:{},...t?{brand:t}:{},size:13})}):null,o?(0,r.jsxs)("span",{"data-graview-rule-head":"",style:{fontWeight:600,marginRight:i==="record"||a?0:"0.6em"},children:[o,i==="record"&&!a?(0,r.jsx)("span",{style:{color:"var(--graview-ink-faint)",fontWeight:400},children:" \u2014 "}):null]}):null,a&&o?(0,r.jsx)("br",{}):null,(0,r.jsx)(w,{parts:e.parts}),e.when&&e.when.length>0?(0,r.jsxs)("span",{"data-graview-rule-when":"",style:{color:"var(--graview-ink-faint)"},children:[", when ",(0,r.jsx)(w,{parts:e.when})]}):null]})]})}function z(e){return e.line?e.label&&e.label.trim().length>0?e.label:void 0:e.label&&e.label!==e.message?e.label:void 0}export{D as a,I as b,M as c,b as d,C as e,z as f};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as b,b as N,c as S}from"./chunk.US4KIJSW.js";import{Ba as y,va as m,wa as w}from"./chunk.2WFEFZAW.js";import{zb as x}from"./chunk.RAE4M3KQ.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
|
-
function t(n){if(Array.isArray(n))return n.map(t);if(n&&typeof n=="object"){let r={};for(let o of Object.keys(n).sort()){let e=n[o];e!==void 0&&(r[o]=t(e))}return r}return n}function i(n){return JSON.stringify(t(n))??"undefined"}export{i as a};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{g as ot,h as ue,k as st,l as he}from"./chunk.2YVXTTC2.js";import{a as ae,b as Q,c as ce,d as it,f as rt,g as ie}from"./chunk.BJ2Y5F66.js";import{a as ne,b as et}from"./chunk.SSOTDXRS.js";import{i as J,j,k as tt,l as nt}from"./chunk.ZRVDIVYY.js";import{a as lt,b as dt}from"./chunk.PY42PBMB.js";import{d as at}from"./chunk.JCZH55RX.js";import{C as Fe,F as Ke,G as _e,P as je,Y as Ue,a as Ge,ba as qe,ca as N,da as Xe,ea as le,fa as me,ia as _,j as Ie,ja as Ye,l as He,la as de,m as Oe,na as Je,pa as ye,q as ze,qa as Qe,ra as fe,y as ge,ya as Ze}from"./chunk.2WFEFZAW.js";import{J as T,K as Ve,M as I,N as Be,R as Le,S as De,U as Y,V as Z,W as Me,ea as We,fb as ee}from"./chunk.RAE4M3KQ.js";import{a as te,b as D}from"./chunk.MRK6QJV5.js";import{b as A}from"./chunk.AJZBJBMO.js";var M=A(te(),1);var H=A(D(),1);function ct({id:e,max:t=8,empty:a,hide:n}){let{store:r}=N();le();let d=Et(r,e,r.violations()),i=n?d.flatMap(c=>{let p=c.ids.filter(u=>!n.has(u));return p.length>0?[{...c,ids:p}]:[]}):d;return i.length===0?a&&d.length===0?(0,H.jsx)("p",{style:{margin:0,fontSize:"0.875rem",color:"var(--graview-ink-faint)"},children:a}):null:(0,H.jsx)("div",{"data-graview-primitive":"connections",style:{display:"flex",flexDirection:"column",gap:12},children:i.map(c=>{let p=c.ids.slice(0,t),u=c.ids.length-p.length;return(0,H.jsxs)("section",{style:{display:"flex",flexDirection:"column",gap:6},children:[(0,H.jsx)("h2",{...c.said?{"aria-label":c.said}:{},style:{margin:0,fontSize:"0.75rem",fontWeight:600,letterSpacing:"0.09em",textTransform:"uppercase",color:"var(--graview-ink-faint)"},children:c.label}),(0,H.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:[p.map(o=>{let s=r.graph.getNode(o);return s?(0,H.jsx)(j,{pickId:o,hue:ee(s.kind),title:`Go to the ${Y(r.schema.tryDefinition(s.kind),s.kind)}`,label:T(r.schema.tryDefinition(s.kind),s)},o):null}),u>0?(0,H.jsx)(j,{label:`+${u} more`}):null]})]},c.key)})})}function Et(e,t,a=[]){let n=e.graph.getNode(t);if(!n)return[];let r=new Map,d=[];for(let i of a)if(i.subjectId===t)for(let c of i.nodeIds)c!==t&&!d.includes(c)&&e.graph.has(c)&&d.push(c);d.length>0&&r.set("judges",{key:"judges",label:"what it finds wrong",ids:d});for(let i of e.graph.allEdges()){let c=i.from===t?i.to:i.to===t?i.from:null;if(c===null||c===t)continue;let p=e.graph.getNode(c);if(!p)continue;let u=i.from===t?"out":"in",o=u==="out"?n.kind:p.kind,s=Vt(e.schema,o,i.kind,u),w=`${i.kind}:${u}:${s.label}`,y=r.get(w)??{key:w,...s,ids:[]};y.ids.includes(c)||y.ids.push(c),r.set(w,y)}for(let i of r.values())i.ids.sort();return[...r.values()].sort((i,c)=>i.key<c.key?-1:i.key>c.key?1:0)}function Vt(e,t,a,n){let r=Le(e,t,a,n),d=I(a).toLowerCase();return r.trim().toLowerCase()!==d?{label:r}:n==="out"?{label:`\u2192 ${d}`,said:d}:{label:`\u2190 ${d}`,said:`${d}, pointing here`}}var P=A(te(),1);var W=A(D(),1),Bt=/^\s*(\d{1,6})[.)]\s+(.*)$/s,Lt=/^\s*[-*•]\s+(.*)$/s;function Dt(e){let t=[];for(let a of e.replace(/\r\n?/g,`
|
|
2
|
-
`).split(/\n[ \t]*\n+/)){let n=null,r=()=>{n&&(n.t==="p"?n.lines.length>0:n.items.length>0)&&t.push(n),n=null};for(let d of a.split(`
|
|
3
|
-
`)){let i=Bt.exec(d),c=i?null:Lt.exec(d);if(i)n?.t!=="ol"&&(r(),n={t:"ol",start:Number(i[1]),items:[]}),n.items.push(i[2]);else if(c)n?.t!=="ul"&&(r(),n={t:"ul",items:[]}),n.items.push(c[1]);else if(n&&n.t!=="p"&&/^\s+\S/.test(d)){let p=n.items;p[p.length-1]=`${p[p.length-1]} ${d.trim()}`}else d.trim().length>0&&(n?.t!=="p"&&(r(),n={t:"p",lines:[]}),n.lines.push(d.trim()))}r()}return t}function we(e){return/[\r\n]/.test(e)}var Mt={display:"grid",gap:"0.7em",minWidth:0,overflowWrap:"anywhere"},Wt={margin:0},ut={margin:0,paddingInlineStart:"1.6em",display:"grid",gap:"0.3em"};function re({text:e,className:t,style:a}){return(0,W.jsx)("div",{"data-graview-text-body":"",...t?{className:t}:{},style:{...Mt,...a},children:Dt(e).map((n,r)=>n.t==="p"?(0,W.jsx)("p",{style:Wt,children:n.lines.map((d,i)=>(0,W.jsxs)("span",{children:[i>0?(0,W.jsx)("br",{}):null,d]},i))},r):n.t==="ol"?(0,W.jsx)("ol",{start:n.start,style:ut,children:n.items.map((d,i)=>(0,W.jsx)("li",{children:d},i))},r):(0,W.jsx)("ul",{style:ut,children:n.items.map((d,i)=>(0,W.jsx)("li",{children:d},i))},r))})}var f=A(D(),1);function mt({nodeId:e,field:t,value:a,stored:n=a}){let{fields:r,commit:d}=ue(e),i=r.find(h=>h.field===t),{store:c}=N(),p=c.graph.getNode(e)?.kind,u=c.schema.definitions.find(h=>h.kind===p),o=De(u,t).toLowerCase(),[s,w]=(0,P.useState)(!1),[y,v]=(0,P.useState)(n),S=(0,P.useRef)(null),b=(0,P.useRef)(null),k=(0,P.useRef)(!1),R=h=>{k.current=h,w(!1)};if((0,P.useEffect)(()=>v(n),[n,s]),(0,P.useEffect)(()=>{s?S.current?.focus():k.current&&(k.current=!1,b.current?.focus())},[s]),!i)return(0,f.jsx)("span",{"data-graview-field":t,"data-graview-readonly":"",title:`Read-only \u2014 nothing this app declares changes the ${o}`,style:{color:"var(--graview-ink)",cursor:"default",overflowWrap:"anywhere"},children:a});if(!s)return(0,f.jsx)("button",{ref:b,type:"button","data-graview-field":t,"data-graview-editable":i.mutation,title:`${i.title} \u2014 changes the ${o}, and can be undone`,onClick:()=>w(!0),style:{all:"unset",cursor:"text",display:"inline-flex",alignItems:"flex-end",minHeight:24,minWidth:24,maxWidth:"100%",overflowWrap:"anywhere",paddingBottom:1,borderBottom:"1px dashed var(--graview-edge-bright)",color:"var(--graview-ink)"},children:a});let $=(h,{left:L=!1}={})=>{R(!L),!(h===n||h===""||h===void 0)&&d(i,h)};if(!i.takesValue){let h=[i,...i.alternatives];return(0,f.jsx)("span",{role:"group","aria-label":`Change ${I(t).toLowerCase()}`,"data-graview-field":t,style:{display:"inline-flex",gap:6,alignItems:"center",flexWrap:"wrap"},onKeyDown:L=>{L.key==="Escape"&&R(!0)},children:h.map((L,U)=>(0,f.jsx)("button",{type:"button",ref:U===0?S:void 0,"data-graview-act":L.mutation,onClick:()=>{R(!0),d(L,void 0)},onBlur:B=>{let O=B.relatedTarget;(!O||!B.currentTarget.parentElement?.contains(O))&&R(!1)},style:{padding:"2px 9px",fontSize:"0.8125rem",borderRadius:999},children:L.title},L.mutation))})}return(0,f.jsxs)("form",{style:{display:"inline-flex",gap:4},onSubmit:h=>{h.preventDefault(),$(pt(i,y))},children:[i.shape.type==="choice"?(0,f.jsx)("select",{ref:S,"aria-label":I(t),"data-graview-field":t,value:y,onChange:h=>$(h.target.value),onBlur:()=>R(!1),style:{font:"inherit",fontSize:"inherit"},children:i.shape.options.map(h=>(0,f.jsx)("option",{value:h,children:Be(u,t,h)},h))}):(0,f.jsx)("input",{ref:S,"aria-label":I(t),"data-graview-field":t,type:i.shape.type==="number"?"number":i.shape.type==="date"?i.shape.time?"datetime-local":"date":"text",...i.shape.type==="number"&&i.shape.min!==void 0?{min:i.shape.min}:{},...i.shape.type==="number"&&i.shape.max!==void 0?{max:i.shape.max}:{},...i.shape.type==="number"&&i.shape.step!==void 0?{step:i.shape.step}:{},value:y,onChange:h=>v(h.target.value),onBlur:()=>$(pt(i,y),{left:!0}),onKeyDown:h=>{h.key==="Escape"&&R(!0)},style:{font:"inherit",fontSize:"inherit",width:`${Math.max(6,y.length+1)}ch`,minHeight:24,display:"inline-flex",alignItems:"center",padding:"0 3px"}}),i.open.length>0?(0,f.jsxs)("span",{style:{fontSize:"0.75rem",color:"var(--graview-ink-faint)"},children:["also needs ",i.open.map(h=>h.name).join(", ")]}):null]})}function pt(e,t){return e.shape.type==="number"?Number(t):t}function yt({id:e,hide:t=[],limit:a=10,labels:n={},shown:r=[]}){let{store:d}=N(),i=me(e);if(!i)return null;let c=d.schema.tryDefinition(i.kind),p=Z(i,c,{limit:a,said:r}).filter(u=>!t.includes(u.key));return p.length===0?null:(0,f.jsx)("div",{"data-graview-fields":i.id,style:{display:"grid",gap:14,alignContent:"start",minWidth:0,fontSize:"0.875rem"},children:Me(c,p).map((u,o)=>{let s=(0,f.jsx)("dl",{style:{margin:0,display:"grid",gridTemplateColumns:"auto 1fr",gap:"5px 16px",alignContent:"start",minWidth:0},children:u.fields.map(y=>y.long?(0,f.jsx)(It,{nodeId:i.id,field:y.key,label:n[y.key]??y.label,value:y.value,labelStyle:gt,style:{gridColumn:"1 / -1",marginTop:6}},y.key):(0,f.jsxs)("div",{style:{display:"contents"},children:[(0,f.jsx)("dt",{style:{...gt,whiteSpace:"nowrap"},children:n[y.key]??y.label}),(0,f.jsx)("dd",{style:{margin:0,minWidth:0},children:(0,f.jsx)(mt,{nodeId:i.id,field:y.key,value:y.value,stored:y.stored})})]},y.key))});if(!u.title)return(0,f.jsx)("div",{children:s},o);let w=`graview-field-group-${i.id}-${o}`;return(0,f.jsxs)("div",{role:"group","aria-labelledby":w,style:{display:"grid",gap:6,minWidth:0},children:[(0,f.jsx)("p",{id:w,"data-graview-field-group":u.title,style:Gt,children:u.title}),s]},o)})})}var gt={color:"var(--graview-ink-faint)",fontSize:"0.8125rem"},Gt={margin:0,fontSize:"0.75rem",letterSpacing:"0.06em",textTransform:"uppercase",color:"var(--graview-ink-muted)",fontWeight:560};function It(e){return Xe()?(0,f.jsx)(Ot,{...e}):(0,f.jsx)(Ht,{...e})}function Ht({field:e,label:t,value:a,labelStyle:n,valueStyle:r,style:d}){return(0,f.jsxs)("div",{"data-graview-long":e,style:{display:"grid",gap:6,minWidth:0,...d},children:[(0,f.jsx)("dt",{style:n,children:t}),(0,f.jsx)("dd",{style:{margin:0,minWidth:0,...r},children:(0,f.jsx)("div",{"data-graview-field":e,children:(0,f.jsx)(re,{text:a})})})]})}function Ot({nodeId:e,field:t,label:a,value:n,labelStyle:r,valueStyle:d,style:i}){let{fields:c,commit:p}=ue(e),u=c.find(k=>k.field===t&&k.takesValue),[o,s]=(0,P.useState)(!1),w=(0,P.useRef)(null),y=(0,P.useRef)(!1);(0,P.useEffect)(()=>{!o&&y.current&&(y.current=!1,w.current?.focus())},[o]);let v=k=>{y.current=k,s(!1)},S=a.toLowerCase(),b=(0,f.jsx)(re,{text:n});return(0,f.jsxs)("div",{"data-graview-long":t,style:{display:"grid",gap:6,minWidth:0,...i},children:[(0,f.jsxs)("dt",{style:{display:"flex",alignItems:"baseline",gap:10,...r},children:[(0,f.jsx)("span",{children:a}),u&&!o?(0,f.jsx)("button",{ref:w,type:"button","data-graview-editable":u.mutation,"aria-label":`Edit the ${S}`,title:`${u.title} \u2014 changes the ${S}, and can be undone`,onClick:()=>s(!0),style:Ft,children:"Edit"}):null]}),(0,f.jsx)("dd",{style:{margin:0,minWidth:0,...d},children:o&&u?(0,f.jsx)(P.Suspense,{fallback:b,children:(0,f.jsx)(zt,{field:t,label:a,value:n,onCancel:()=>v(!0),onSave:(k,R)=>{v(!R),k!==n&&p(u,k)}})}):(0,f.jsx)("div",{"data-graview-field":t,...u?{}:{"data-graview-readonly":"",title:`Read-only \u2014 nothing this app declares changes the ${S}`},...u?{onClick:()=>s(!0)}:{},style:{cursor:u?"text":"default",minWidth:0},children:b})})]})}var zt=(0,P.lazy)(()=>import("./chunk.4HGBVU5B.js")),Ft={all:"unset",cursor:"pointer",fontSize:"0.75rem",letterSpacing:"normal",textTransform:"none",color:"var(--graview-accent)",borderBottom:"1px dashed currentColor",minHeight:24,minWidth:24,display:"inline-flex",alignItems:"flex-end"};function ft({nodeId:e,children:t}){let{fields:a}=ue(e),n=me(e);if(!n)return(0,f.jsx)(f.Fragment,{children:t});let r=a.find(d=>{let i=n[d.field];return typeof i=="string"&&i===t});return r?(0,f.jsx)(mt,{nodeId:e,field:r.field,value:t}):(0,f.jsx)(f.Fragment,{children:t})}var ht=A(te(),1),oe=(0,ht.createContext)(null);var g=A(D(),1),Kt=Ze(Ge(()=>import("./chunk.2AJMM7JG.js"))).part((e,t)=>(0,g.jsx)(e.ArrangeBar,{...t}),{what:"Arranging this list"});function ve(e){let{brand:t}=N();return ee(e,t?.accents)}function _t(e,t){if(!t.endsWith("\u2026")&&!t.endsWith("..."))return;let a=t.replace(/[…]|\.\.\.$/g,"").trim();if(!(a.length<12)){for(let n of Object.values(e))if(typeof n=="string"&&n.length>a.length&&n.startsWith(a))return n}}function jt(e,t){let n=Math.max(0,...e.slice(0,t*2).map(d=>d.length))*7.5+28<=212/2?2:1,r=t*n;return{columns:n,shown:Math.min(e.length,r)}}var Ut=8,wt=500,qt=12;function vt(e){return{x:e.clientX,y:e.clientY,pointerType:e.pointerType??""}}function Xt(e,t,a){let n=performance.now()+wt,r=["pointerdown","pointerup","mousedown","mouseup","dblclick"],d=s=>{if(performance.now()>n||!(s instanceof MouseEvent))return!1;let w=vt(s);return t.pointerType&&w.pointerType&&t.pointerType!==w.pointerType?!1:Math.hypot(w.x-t.x,w.y-t.y)<=qt},i=s=>{if(!d(s))return u();s.stopPropagation()},c=s=>{if(!d(s))return u();s.stopPropagation(),s.preventDefault(),e.removeEventListener("click",c,!0),setTimeout(u,50),a()},p=!1,u=()=>{if(!p){p=!0,clearTimeout(o),e.removeEventListener("click",c,!0);for(let s of r)e.removeEventListener(s,i,!0)}};for(let s of r)e.addEventListener(s,i,!0);e.addEventListener("click",c,!0);let o=setTimeout(u,wt)}function Yt({View:e,members:t,mode:a,flagged:n}){let{isSelected:r}=ye(),d=t.slice(0,Ut);return(0,g.jsxs)("div",{"data-graview-rows":"",style:{display:"grid",gap:4,minWidth:0},children:[d.map(i=>(0,g.jsx)("div",{"data-graview-pick":i.id,style:{minWidth:0,cursor:"pointer"},children:(0,g.jsx)(e,{node:i,cardinality:"one",fidelity:"glyph",mode:a,selected:r(i.id),...n?.includes(i.id)?{flagged:[i.id]}:{}})},i.id)),t.length>d.length?(0,g.jsx)(j,{label:`+${t.length-d.length} more`}):null]})}var Jt=11/15;function Qt({text:e,accent:t}){let a=(0,M.useRef)(null),n=(0,M.useRef)(null),[r,d]=(0,M.useState)(1),[i,c]=(0,M.useState)(!1),p=r<1?`${r}em`:void 0;return(0,M.useLayoutEffect)(()=>{let u=a.current,o=n.current;if(!u||!o)return;let s=()=>{let y=u.clientWidth,v=o.offsetWidth;if(y<=0||v<=0)return;let S=parseFloat(getComputedStyle(o).fontSize)/parseFloat(getComputedStyle(u).fontSize)||1,b=v/S,k=Math.max(Jt,Math.min(1,Math.floor(y/b*100)/100));d(R=>Math.abs(R-k)<.01?R:k),c(b*k>y+.5)};if(s(),typeof ResizeObserver>"u")return;let w=new ResizeObserver(s);return w.observe(u),()=>w.disconnect()},[e]),(0,g.jsx)("span",{ref:a,"data-graview-district-name":"",...r<1?{"data-graview-fitted":""}:{},...i?{title:e}:{},style:{display:"block",minWidth:0,fontSize:"0.9375rem",lineHeight:1.25,letterSpacing:"0.05em",textTransform:"uppercase",color:t?"var(--graview-accent)":"var(--graview-ink-muted)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:(0,g.jsx)("span",{ref:n,style:{fontSize:p},children:e})})}function Zt(e,t){return!!e?.display?.page?.groups?.length||Z(t,e).some(a=>a.long)}function St(e,t=de(e)){for(let a of e.kinds){let n=e.tryDefinition(a),r=n?.plural??`${String(a)}s`,d=o=>{let s=o.node,w=Qe(),y=(0,M.useContext)(oe);if(!s)return null;let v=y?.nodeId===s.id?y:null,S=T(n,s),b=o.mode==="fullscreen"?_t(s,S)??S:S,k=We(w,[s.id]);return(0,g.jsxs)(J,{title:(0,g.jsx)(ft,{nodeId:s.id,children:v?.title??b}),...v?{}:{subtitle:n?.describe?Ve(n,s):n?.description??String(a)},selected:o.selected,...o.flagged?.includes(s.id)?{tone:"warning"}:{},fit:!0,children:[v?(0,g.jsx)(oe.Provider,{value:null,children:v.body}):null,(0,g.jsxs)("div",{style:{display:"grid",gridTemplateColumns:Zt(n,s)?"minmax(0, 1fr)":"minmax(200px, 1fr) minmax(220px, 1.4fr)",gap:"22px 34px",alignItems:"start"},children:[(0,g.jsx)(yt,{id:s.id,shown:[b,S,n?.description,v?.title],...v?{hide:[...v.fields]}:{}}),(0,g.jsx)(ct,{id:s.id,empty:`Nothing is connected to this ${Y(n,String(a))} yet.`,...v?{hide:v.records}:{}})]}),k.length>0?(0,g.jsx)("p",{"data-graview-broken":"",style:{margin:"14px 0 0",paddingTop:12,borderTop:"1px solid var(--graview-edge)",fontSize:"0.875rem",color:"var(--graview-warn)"},children:k.map(R=>R.message).join(" \xB7 ")}):null]})},i=o=>{let s=o.node;if(!s)return null;let{store:w}=N(),y=n?.computed?rt(w.schema,w.graph,s):s,v=Z(y,n,{limit:3,said:[T(n,s)],glance:!0}),S=ve(a);return(0,g.jsx)(J,{title:T(n,s),selected:o.selected,tone:o.flagged?.includes(s.id)?"warning":"muted",fit:!0,children:(0,g.jsx)(tt,{items:v.map(b=>({id:b.key,label:b.alone,hue:S})),max:3})})},c=o=>{let s=o.node,w=ve(a),y=he().marks.flag;if(!s)return null;let v=o.flagged?.includes(s.id)??!1;return(0,g.jsx)(j,{label:v?`${T(n,s)} ${y}`:T(n,s),hue:w,selected:o.selected,title:v?`${I(Y(n,String(a)))} \u2014 implicated in a problem`:I(Y(n,String(a)))})},p=o=>{let{brand:s,store:w,views:y}=N(),{view:v,go:S}=fe(),b=o.nodes??[],k=y.lookup(String(a),{cardinality:"one",fidelity:"glyph"}),R=k!==void 0&&!Ye(k)?k:void 0,$=lt(v),h=at(b,$,{schema:e,graph:w.graph,flagged:new Set(o.flagged??[])}),L=C=>({id:C.id,label:T(e.tryDefinition(C.kind),C),hue:ee(C.kind,s?.accents)}),U=o.fidelity==="full"&&b.length>1?(0,g.jsx)(M.Suspense,{fallback:null,children:(0,g.jsx)(Kt,{schema:e,graph:w.graph,kind:String(a),arrangement:$,onChange:C=>S(dt(v,C)),kept:{shown:h.nodes.length,of:b.length},style:{marginBottom:8}})}):null,B=C=>C.some(E=>o.flagged?.includes(E.id)),O=(C,E,q)=>R?(0,g.jsx)(J,{title:C,meta:B(E)?`\u26A0 ${E.length}`:E.length,tone:B(E)?"warning":"muted",children:(0,g.jsx)(Yt,{View:R,members:E,mode:o.mode,...o.flagged?{flagged:o.flagged}:{}})},q):(0,g.jsx)(nt,{label:C,count:E.length,flagged:B(E),items:E.map(L)},q);return h.grouped?(0,g.jsxs)("div",{style:{display:"grid",gap:8},"data-graview-grouped":$.group?.by,children:[U,h.groups.map(C=>O(`${o.label??r} \xB7 ${C.label}`,C.nodes,C.key||"-"))]}):(0,g.jsxs)("div",{style:{display:"grid",gap:4},children:[U,O(o.label??r,h.nodes)]})},u=o=>{let s=o.nodes??[],w=jt(s.map(m=>T(n,m)),o.openedRows??je(s.length)),y=ve(a),{brand:v}=N(),S=et(String(a),e,v),b=he().marks.flag,{selection:k}=ye(),{toggle:R,view:$,go:h}=fe(),{views:L,hiddenKinds:U}=N(),B=$.overview&&!U.has(String(a))?L.places().filter(m=>m.kind===String(a)):[],O=ot(),C=o.focused?$.within?.view??B[0]?.as:void 0,E=s.filter(m=>o.flagged?.includes(m.id)).length,q=E>0,z=o.focused||o.raised,$e=o.rank==="secondary"&&!z,V=o.nestedUnder!==void 0,Ae=new Set(k),At=st(),F=z?0:s.filter(m=>At.includes(m.id)&&!Ae.has(m.id)).length,pe=F>0&&!q,se=qe(),X=se&&!V?se.byKind[String(a)]??0:0,Tt=V?8:Math.min(46,10+Math.round(Math.sqrt(s.length)*8)),Te=V?(0,g.jsx)("span",{style:{fontSize:"0.75rem",lineHeight:1.25,letterSpacing:"0.05em",textTransform:"uppercase",color:z?"var(--graview-accent)":"var(--graview-ink-muted)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:o.label??r}):(0,g.jsx)(Qt,{text:o.label??r,accent:!!z});return(0,g.jsxs)("div",{className:"graview-kind-card","data-graview-rank":o.rank,"data-graview-landmark":S||void 0,"data-graview-nested":V||void 0,"data-graview-tied":F||void 0,"data-graview-hits":se&&!V?X:void 0,"data-graview-emphasis":se&&!V?X>0?"lit":"dimmed":void 0,...n?.description||V?{title:V?[o.label??r,n?.description].filter(Boolean).join(" \u2014 "):n.description}:{},style:{position:"relative",height:"100%","--graview-hue":Math.round(y),"--graview-marquee-room":B.length>0&&O?`${O(B.map(m=>m.title))+(S?4:42)}px`:"0px"},children:[S?(0,g.jsx)("span",{className:"graview-kind-block graview-kind-landmark","data-graview-opened":o.opened||void 0,"aria-hidden":"true",style:{"--graview-rise":Tt},children:(0,g.jsx)(ne,{kind:String(a),schema:e,...v?{brand:v}:{},size:96})}):null,(0,g.jsxs)("div",{className:"graview-kind-face","data-graview-opened":o.opened||void 0,style:{display:"flex",flexDirection:"column",gap:V?1:3,padding:V?"5px 7px":"7px 10px",borderRadius:"var(--graview-radius-sm, 9px)",justifyContent:"center",position:"relative",height:"100%",overflow:"hidden",boxSizing:"border-box",border:z?"1px solid var(--graview-accent)":F>0?"1px solid var(--graview-accent-dim)":`1px solid hsl(${Math.round(y)} 55% var(--graview-tint-lightness) / 0.34)`,backgroundColor:"var(--graview-panel)",backgroundImage:`linear-gradient(hsl(${Math.round(y)} 55% var(--graview-tint-lightness) / calc(var(--graview-tint-alpha) * ${z?1.1:$e?.28:.5})), hsl(${Math.round(y)} 55% var(--graview-tint-lightness) / calc(var(--graview-tint-alpha) * ${z?1.1:$e?.28:.5})))`,boxShadow:z?"0 0 0 1px var(--graview-accent-dim)":void 0},children:[!V&&s.length>0?(0,g.jsx)("div",{"data-graview-tally":s.length,"data-graview-broken":E||void 0,"aria-hidden":"true",style:{position:"absolute",left:0,right:0,top:0,display:"flex",height:3,background:`hsl(${Math.round(y)} 55% var(--graview-tint-lightness) / 0.4)`},children:E>0?(0,g.jsx)("span",{style:{width:`${Math.max(6,Math.round(E/s.length*100))}%`,background:"var(--graview-warn)"}}):null}):null,S?(0,g.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",gap:V?4:6},children:[(0,g.jsx)(ne,{kind:String(a),schema:e,...v?{brand:v}:{},size:V?14:18}),Te]}):Te,(0,g.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:5,fontSize:"0.875rem"},children:[(0,g.jsx)("span",{style:{fontVariantNumeric:"tabular-nums",color:q?"var(--graview-warn)":pe?"var(--graview-accent)":"var(--graview-ink-faint)"},children:s.length===0?"none yet":pe?F===s.length?`${F} tied`:`${F} of ${s.length} tied`:`${q?`${b} `:""}${s.length}`}),(o.retired??0)>0?(0,g.jsxs)("button",{type:"button",className:"graview-kind-past","data-graview-retired":o.retired,title:`${o.retired} retired ${r.toLowerCase()} \u2014 press to widen the view to the past`,onClick:m=>{m.stopPropagation(),h(ze($,!0))},onDoubleClick:m=>m.stopPropagation(),onPointerDown:m=>m.stopPropagation(),children:["+",o.retired," past"]}):null,X>0?(0,g.jsxs)("button",{type:"button",className:"graview-kind-hits","data-testid":`hits-${String(a)}`,title:`${X} ${X===1?"match":"matches"} for \u201C${$.q??""}\u201D \u2014 press to go in, narrowed`,onClick:m=>{m.stopPropagation(),h(Ke($,ge(String(a)),{ownPicture:!0,...$.q?{carry:$.q}:{}}))},onDoubleClick:m=>m.stopPropagation(),onPointerDown:m=>m.stopPropagation(),children:[X," match"]}):null,F>0&&!pe?(0,g.jsxs)("span",{style:{fontSize:"0.8125rem",color:"var(--graview-accent)"},children:[F," tied"]}):null,o.hasOwnView?(0,g.jsx)("span",{title:`${r} has a view of its own`,"aria-label":"has its own view",style:{fontSize:"0.6875rem",color:"var(--graview-accent)"},children:"\u25C6"}):null,!V&&s.length>0&&!o.focused?(0,g.jsxs)("button",{type:"button",className:"graview-kind-open","data-testid":`open-${String(a)}`,"aria-expanded":o.opened??!1,title:o.opened?"Close it up":`See the ${r} in here`,onClick:m=>{m.stopPropagation(),R(ge(String(a)))},onDoubleClick:m=>m.stopPropagation(),onPointerDown:m=>m.stopPropagation(),children:[(0,g.jsx)("span",{className:"graview-kind-open-word",children:o.opened?"close":"open"})," ",o.opened?"\u25B4":"\u25BE"]}):null]}),o.opened?(0,g.jsxs)("div",{className:"graview-kind-members","data-graview-buildings":o.plot?.side??1,style:{display:"grid",gridTemplateColumns:`repeat(${w.columns}, minmax(0, 1fr))`,gap:3},children:[s.slice(0,w.shown).map(m=>{let K=o.flagged?.includes(m.id)??!1,G=T(n,m);return(0,g.jsx)(j,{pickId:m.id,label:K?`${G} ${b}`:G,title:K?`${G} \u2014 implicated in a problem`:void 0,hue:y,selected:Ae.has(m.id)},m.id)}),s.length>w.shown?(0,g.jsxs)("span",{style:{fontSize:"0.75rem",color:"var(--graview-ink-faint)",padding:"2px 4px",gridColumn:"1 / -1"},children:["+",s.length-w.shown," more \u2014 double-click to go in"]}):null]}):null]}),!V&&B.length>0?(0,g.jsx)("div",{className:"graview-drive-in","data-testid":`drive-in-${String(a)}`,"data-graview-showing":C,onPointerDown:m=>m.stopPropagation(),onDoubleClick:m=>m.stopPropagation(),children:(0,g.jsx)("div",{className:"graview-drive-in-marquee",role:"group","aria-label":`${r}: pictures`,"data-graview-thumbs":B.length===1?"one":"two",children:B.map(m=>{let K=C===m.as;return(0,g.jsxs)("div",{className:"graview-drive-in-thumb","data-graview-pressed":K||void 0,children:[(0,g.jsx)("span",{className:"graview-drive-in-thumb-title","aria-hidden":"true",children:m.title}),(0,g.jsx)("button",{type:"button",className:"graview-drive-in-thumb-press","data-testid":`showing-${m.as}`,"aria-label":`${r}: ${m.title}`,"aria-pressed":K,title:K?`${m.title} is showing \u2014 press again to open it`:`Show ${m.title} on the billboard \u2014 double-click to open it`,onClick:G=>{G.stopPropagation();let Ee=()=>h(_e($,String(a),m.as));if(G.detail>=2||K&&o.focused){Ee();return}h(He(Ie(Oe($,!0),Fe(String(a))),"view",m.as)),G.detail===1&&Xt(G.currentTarget.ownerDocument,vt(G.nativeEvent),Ee)}})]},m.as)})})}):null]})};p.generic=!0,u.generic=!0,t.register(a,{cardinality:"one",fidelity:"full"},_(d)).register(a,{cardinality:"one",fidelity:"summary"},_(i)).register(a,{cardinality:"one",fidelity:"glyph"},_(c)).register(a,{cardinality:"many",fidelity:"full"},_(p)).register(a,{cardinality:"many",fidelity:"summary"},_(p)).register(a,{cardinality:"many",fidelity:"glyph"},_(u))}return t}var x=A(te(),1);var Se=A(te(),1);var be=A(D(),1),kt=new WeakMap;function en(e){let t=kt.get(e);return t||kt.set(e,t=St(e,de(e))),t}var ke=Je;function bt(){return(0,Se.useContext)(ke)}function Kn({children:e}){return(0,be.jsx)(ke.Provider,{value:!0,children:e})}function xt(e){let t=(0,Se.useContext)(ke),{store:a}=N();if(t)return null;let n=e.kind??e.node?.kind??e.nodes?.[0]?.kind;if(!n)return null;let r=en(a.schema).lookup(n,{cardinality:e.cardinality,fidelity:e.fidelity});return r?(0,be.jsx)(r,{...e}):null}var l=A(D(),1),Nt=(0,x.createContext)(null),tn=(e,t)=>e.trim().toLowerCase().replace(/[_-]+/g," ")===t.trim().toLowerCase().replace(/[_-]+/g," "),nn=(0,x.createContext)(null),Re=(0,x.createContext)(null);function an({block:e}){let t=(0,x.useContext)(Re),a=t?.slots?.[e.key],n=(0,l.jsx)(rn,{block:e});return a?(0,l.jsx)(x.Suspense,{fallback:n,children:(0,l.jsx)(a,{block:e,node:t.node,drawn:n})}):n}function rn({block:e}){let t=(0,x.useContext)(Nt),a=(0,x.useContext)(ln),n=(0,x.useContext)(Ne);if(t&&e.t==="badge"&&t.values.some(r=>tn(r,e.text))||t&&e.t==="field"&&t.field!==void 0&&e.field===t.field)return null;switch(e.t){case"title":return(0,l.jsx)("strong",{className:"graview-spec-title",children:e.text});case"text":return we(e.text)?(0,l.jsx)("div",{className:"graview-spec-text",...e.tone?{"data-graview-tone":e.tone}:{},children:(0,l.jsx)(re,{text:e.text})}):(0,l.jsx)("p",{className:"graview-spec-text",...e.tone?{"data-graview-tone":e.tone}:{},children:e.text});case"badge":return(0,l.jsx)("span",{className:"graview-spec-badge","data-graview-tone":e.tone,children:e.text});case"field":return(0,l.jsxs)("span",{className:"graview-spec-field","data-graview-field":e.field,children:[(0,l.jsx)("span",{className:"graview-spec-label",children:e.label}),(0,l.jsx)("span",{className:"graview-spec-value",...we(e.text)?{style:{whiteSpace:"pre-line"}}:{},children:e.href?(0,l.jsx)("a",{className:"graview-spec-link",href:e.href,rel:"noopener noreferrer",target:"_blank",children:e.text}):e.text})]});case"progress":return e.value===void 0||e.max===void 0?(0,l.jsxs)("span",{className:"graview-spec-progress",children:[(0,l.jsx)("span",{className:"graview-spec-label",children:e.label}),(0,l.jsx)("span",{className:"graview-spec-value",children:e.text})]}):(0,l.jsxs)("span",{className:"graview-spec-progress",children:[(0,l.jsx)("span",{className:"graview-spec-label",children:e.label}),(0,l.jsx)("span",{className:"graview-spec-track",role:"progressbar","aria-label":e.label,"aria-valuemin":0,"aria-valuemax":e.max,"aria-valuenow":Math.max(0,Math.min(e.value,e.max)),"aria-valuetext":e.text,children:(0,l.jsx)("span",{className:"graview-spec-fill",style:{width:`${Math.round(Math.max(0,Math.min(e.value,e.max))/e.max*100)}%`}})}),(0,l.jsx)("span",{className:"graview-spec-value",children:e.text})]});case"group":return(0,l.jsx)("span",{className:"graview-spec-group","data-direction":e.direction,children:(0,l.jsx)(xe,{blocks:e.blocks})});case"when":return e.shown?(0,l.jsx)(xe,{blocks:e.blocks}):null;case"divider":return(0,l.jsx)("hr",{className:"graview-spec-divider"});case"figure":return(0,l.jsx)(on,{});case"headline":{let r=`h${Math.min(6,e.level+a)}`,d=(0,l.jsx)(r,{className:"graview-spec-headline","data-level":e.level,children:e.text});return n!==null&&e.level===1?(0,l.jsxs)(l.Fragment,{children:[d,n]}):d}case"number":return(0,l.jsxs)("span",{className:"graview-spec-number",children:[(0,l.jsx)("span",{className:"graview-spec-number-value",children:e.text}),e.label?(0,l.jsx)("span",{className:"graview-spec-label",children:e.label}):null]});case"list":return(0,l.jsx)(cn,{list:e})}}function on(){let e=(0,x.useContext)(Re)?.figure;return e?(0,l.jsx)("span",{className:"graview-spec-figure","aria-hidden":"true",children:e()}):null}function xe({blocks:e}){return e.map((t,a)=>(0,l.jsx)(an,{block:t},a))}function Rt({blocks:e,ctx:t,view:a}){let n=(0,x.useContext)(nn)?.[a];return(0,l.jsx)(Re.Provider,{value:{figure:t.figure,slots:n,node:t.node},children:(0,l.jsx)(xe,{blocks:e})})}function Ce({blocks:e,ctx:t,view:a}){return(0,l.jsx)(Rt,{blocks:Q(e,t),ctx:t,view:a})}var Ct=3,Pt=(0,x.createContext)(0),sn=(0,x.createContext)(null),ln=(0,x.createContext)(0),Ne=(0,x.createContext)(null);function dn({node:e,as:t,depth:a,said:n=null}){let{store:r,views:d}=N(),i=T(r.schema.tryDefinition(e.kind),e),c=d.lookup(e.kind,{cardinality:"one",fidelity:t==="card"?"summary":"glyph"});return(0,l.jsxs)("li",{className:"graview-spec-item","data-graview-listed":e.id,"data-as":t,children:[a<=Ct&&c?(0,l.jsx)(Ue,{mode:"scene",children:(0,l.jsx)(Pt.Provider,{value:a,children:(0,l.jsx)(Nt.Provider,{value:n,children:(0,l.jsx)(c,{node:e,cardinality:"one",fidelity:t==="card"?"summary":"glyph",mode:"scene",selected:!1})})})}):(0,l.jsx)("span",{className:"graview-spec-item-name",children:i}),(0,l.jsx)($t,{node:e,label:i})]})}function $t({node:e,label:t}){let a=(0,x.useContext)(sn);return a?(0,l.jsx)("a",{className:"graview-spec-item-link",href:a.href(e),"aria-label":t,onClick:n=>{n.metaKey||n.ctrlKey||n.shiftKey||n.button!==0||(n.preventDefault(),n.stopPropagation(),a.go(e))}}):(0,l.jsx)("button",{type:"button",className:"graview-spec-item-link","data-graview-pick":e.id,"aria-label":t})}function cn({list:e}){let t=(0,x.useContext)(Pt)+1,{store:a}=N();if(e.failed)return(0,l.jsx)("p",{className:"graview-spec-text",children:"\u2014"});if(e.members.length===0)return e.empty?(0,l.jsx)("p",{className:"graview-spec-text graview-spec-empty",children:e.empty}):null;let n=(i,c=null)=>t>Ct?(0,l.jsx)("ul",{className:"graview-spec-list","data-as":"names",children:i.map(p=>(0,l.jsxs)("li",{className:"graview-spec-item","data-graview-listed":p.id,"data-as":"name",children:[(0,l.jsx)("span",{className:"graview-spec-item-name",children:T(a.schema.tryDefinition(p.kind),p)}),(0,l.jsx)($t,{node:p,label:T(a.schema.tryDefinition(p.kind),p)})]},p.id))}):(0,l.jsx)("ul",{className:"graview-spec-list","data-as":e.as,children:i.map(p=>(0,l.jsx)(dn,{node:p,as:e.as,depth:t,said:c},p.id))}),r=e.more>0?(0,l.jsx)("p",{className:"graview-spec-text graview-spec-more",children:`and ${e.more} more`}):null;if(!e.groups)return(0,l.jsxs)("div",{className:"graview-spec-listing",children:[n(e.members),r]});let d=`h${e.headingLevel}`;return(0,l.jsxs)("div",{className:"graview-spec-listing",children:[e.groups.map(i=>(0,l.jsxs)("section",{className:"graview-spec-list-group","data-graview-group":i.value??"",children:[i.heading?(0,l.jsx)(d,{className:"graview-spec-list-heading",children:i.heading}):null,n(i.members,i.value!==null?{values:[i.value,...i.heading?[i.heading]:[]]}:null)]},i.value??"")),r]})}function na({blocks:e,heading:t=2,firstHeading:a,slot:n,view:r=n}){let{store:d,brand:i}=N();le();let c=ie(d,null,null,{heading:t,firstHeading:a,money:i}),p=(0,x.useContext)(Ne),u=e.some(o=>o.t==="headline");return(0,l.jsxs)("div",{className:`graview-spec graview-spec-${n}`,"data-graview-spec":n,children:[p!==null&&!u?p:null,(0,l.jsx)(Ne.Provider,{value:u?p:null,children:(0,l.jsx)(Ce,{blocks:e,ctx:c,view:r})})]})}function Pe(e,t="card"){let{store:a,brand:n}=N(),r=a.schema;return{...ie(a,null,e,{slot:t,money:n}),figure:()=>(0,l.jsx)(ne,{kind:e.kind,schema:r,...n?{brand:n}:{},size:22})}}function un({slot:e,blocks:t,node:a,selected:n}){let r=Pe(a,e);return(0,l.jsx)("div",{className:`graview-spec graview-spec-${e}`,"data-graview-spec":e,"data-graview-kind":a.kind,...e==="row"&&t.some(it)?{"data-graview-tall":""}:{},...n?{"data-selected":""}:{},children:(0,l.jsx)(Ce,{blocks:t,ctx:r,view:`${a.kind}.${e}`})})}function pn({blocks:e,node:t,selected:a,flagged:n}){let r=Pe(t),[d,...i]=e,c=d?.t==="title";return(0,l.jsx)(J,{...c?{title:Q([d],r)[0].text}:{},selected:a,tone:n?"warning":"muted",fit:!0,children:(0,l.jsx)("div",{className:"graview-spec graview-spec-card","data-graview-spec":"card","data-graview-kind":t.kind,children:(0,l.jsx)(Ce,{blocks:c?i:e,ctx:r,view:`${t.kind}.card`})})})}function gn({blocks:e,props:t}){let a=t.node,n=Pe(a,"page"),r=bt(),d=Q(e,n),i=ce(e,d),c=i.title!==void 0&&(!r||i.title===T(n.schema?.tryDefinition(a.kind),a)),p=(0,l.jsx)("div",{className:"graview-spec graview-spec-page","data-graview-spec":"page","data-graview-kind":a.kind,children:(0,l.jsx)(Rt,{blocks:c?d.slice(1):d,ctx:n,view:`${a.kind}.page`})});return r?p:(0,l.jsx)(oe.Provider,{value:{nodeId:a.id,...i.title!==void 0?{title:i.title}:{},body:p,fields:i.fields,records:i.records},children:(0,l.jsx)(xt,{...t})})}function aa(e,t,a){return typeof e=="function"?e.says?.(t,a):void 0}function mn({blocks:e,node:t,selected:a}){let{store:n}=N();return(0,l.jsx)("div",{title:T(n.schema.tryDefinition(t.kind),t),style:{minWidth:0,maxWidth:"100%"},children:(0,l.jsx)(un,{slot:"row",blocks:e,node:t,selected:a})})}function ia(e,t,a){if(!a)return e;let n=new Set(t.kinds);for(let[r,d]of Object.entries(a)){if(!n.has(r)||!d)continue;let i=r;if(d.card){let c=ae(d.card),p=u=>u.node?(0,l.jsx)(pn,{blocks:c,node:u.node,selected:u.selected,flagged:u.flagged?.includes(u.node.id)??!1}):null;e.register(i,{cardinality:"one",fidelity:"summary"},p)}if(d.row){let c=ae(d.row),p=u=>u.node?(0,l.jsx)(mn,{blocks:c,node:u.node,selected:u.selected}):null;p.says=(u,o)=>ce(c,Q(c,ie({graph:o,schema:t},null,u,{slot:"row"}))),e.register(i,{cardinality:"one",fidelity:"glyph"},p)}if(d.page){let c=ae(d.page),p=u=>u.node?(0,l.jsx)(gn,{blocks:c,props:u}):null;p.says=(u,o)=>ce(c,Q(c,ie({graph:o,schema:t},null,u))),e.register(i,{cardinality:"one",fidelity:"full"},p)}}return e}export{mt as a,It as b,St as c,Kn as d,Nt as e,sn as f,ln as g,Ne as h,$t as i,na as j,aa as k,ia as l};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import{a as k}from"./chunk.G4JJXA63.js";import{a as Q}from"./chunk.WX5CJ7PI.js";import"./chunk.Q5WEOX3Q.js";import"./chunk.I6T3FDQS.js";import"./chunk.DJ72CUS7.js";import{e as P}from"./chunk.A4SJ7EEY.js";import"./chunk.6KJSFIO7.js";import"./chunk.DEZEXD24.js";import{c as G}from"./chunk.YZZGD5OY.js";import"./chunk.DSZ3I557.js";import{Ib as C,Jb as J,Kb as K,Lb as X,Vb as Y,ha as z,ia as H}from"./chunk.RAE4M3KQ.js";import"./chunk.AJZBJBMO.js";var L=e=>"failed"in e;function ue(e,n){let r=e.schema.kinds,t=e.policy?.sees;if(!t?.length||H(n))return{kinds:r};let s=z(n).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 O(e,n){if(!n)return e;let r=new Set(n.kinds.filter(i=>e.tryDefinition(i)!==void 0));if(r.size===e.kinds.length)return e;let t=new Map,s=i=>{if(r.has(i)){if(!t.has(i)){let o=e.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{...e,definitions:e.definitions.filter(i=>r.has(i.kind)),kinds:e.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 fe=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),y=e=>fe(e).replace(/[-_]+/g," ").trim();function j(e){let n=[];for(let t of e.kinds){let s=e.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=P(c);return{name:d,type:u?.type,...u?.options?{options:u.options}:{},words:(i[d]??y(d)).toLowerCase()}}),a=Object.entries(s.edges??{}).map(([d,c])=>({name:d,from:t,to:c.to==="*"?e.kinds.filter(u=>u!==t):c.to,words:y(d)})),l=(s.plural??`${y(t)}s`).toLowerCase();n.push({kind:t,plural:l,noun:(s.noun??y(t)).toLowerCase(),fields:o,roles:s.fieldRoles??{},edges:a})}let r=new Map(n.map(t=>[t.kind,t]));return{schema:e,kinds:n,info:t=>r.get(t)}}var $=(e,n)=>n===void 0?void 0:e.fields.find(r=>r.name===n),A=e=>e?.type==="date"||e?.type==="datetime",N=e=>e?.type==="number"||e?.type==="integer",re=e=>` ${e.toLowerCase().replace(/[“”"’‘]/g,"'").replace(/[^\p{L}\p{N}' -]+/gu," ").replace(/\s+/g," ").trim()} `,E=(e,n)=>e.includes(` ${n} `),v=e=>e.endsWith("ies")?`${e.slice(0,-3)}y`:e.endsWith("ses")?e.slice(0,-2):e.endsWith("s")?e.slice(0,-1):e;function pe(e,n){let r=[];for(let t of n.kinds){let s=new Set([t.plural,t.noun,`${t.noun}s`,y(t.kind),`${y(t.kind)}s`]),i=-1;for(let o of s){let a=e.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 x(e,n,r){let t=n.trim().toLowerCase();if(t.length===0)return;let s=e.fields.filter(i=>!r||r(i));return s.find(i=>i.words===t||y(i.name)===t||i.name.toLowerCase()===t)??s.find(i=>i.words===v(t)||y(i.name)===v(t))??s.find(i=>t.split(" ").some(o=>o.length>2&&(i.words.split(" ").includes(o)||i.words.split(" ").includes(v(o)))))}function se(e,n,r){let t=n.trim().toLowerCase();if(t.length!==0)return e.edges.find(s=>s.words===t||s.name.toLowerCase()===t)??e.edges.find(s=>s.to.some(i=>{let o=r.info(i);return o!==void 0&&(o.noun===v(t)||o.plural===t||y(i)===v(t))}))??e.edges.find(s=>t.split(" ").some(i=>i.length>2&&s.words.split(" ").includes(i)))}function U(e){return/ (?:grouped |group |split |sorted |organi[sz]ed )?by ([\p{L}\p{N}' -]+?)(?= (?:and|with|for|in|on|only|where|from|this|that|as|sorted|grouped) |\s*$)/u.exec(e)?.[1]?.trim()}var ge=/\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/,me=/\bcalendar\b|\bmonth\b|\bagenda\b|\bschedule\b|\bdue\b|\bdeadlines?\b|\bdates?\b|\bwhen\b/,ye=/\btimeline\b|\bover time\b|\bgantt\b|\bspans?\b|\bweek\b/,he=/\bboard\b|\bkanban\b|\bcolumns?\b|\bpipeline\b|\bstages?\b|\bstatus\b/,be=/\blaid out\b|\blayout\b|\bseating\b|\bwhere (?:they|it|each) (?:sits?|lies?|stands?)\b|\bfloor\b/,we=/\bplan\b|\bmap\b|\bregions?\b/,ke=/\blist\b|\btable\b|\bgroup(?:ed)? by\b|\bsort(?:ed)? by\b|\bonly\b|\bjust the\b/;function $e(e){let n=[];return/\blist\b|\btable\b/.test(e)&&n.push("blocks"),ge.test(e)&&n.push("coverage"),be.test(e)&&n.push("board"),(/\bfloor plan\b/.test(e)||we.test(e))&&n.push("plan"),ye.test(e)&&n.push("timeline"),me.test(e)&&n.push("calendar"),he.test(e)&&n.push("columns"),ke.test(e)&&!n.includes("blocks")&&n.push("blocks"),n.length===0&&U(e)&&n.push("columns"),n}var oe=e=>{let n=r=>r?` and not ${r}`:"";if(/\boverdue\b|\blate\b|\bpast due\b/.test(e))return{cond:(r,t)=>`days(today(), ${r}) < 0${n(t)}`,says:r=>`overdue by ${r.words}`};if(/\btoday\b/.test(e))return{range:"day",cond:r=>`days(today(), ${r}) == 0`,says:r=>`with ${r.words} today`};if(/\bthis week\b|\bnext 7 days\b|\bnext week\b/.test(e))return{range:"week",cond:r=>`days(today(), ${r}) >= 0 and days(today(), ${r}) <= 6`,says:r=>`with ${r.words} in the next week`};if(/\bthis month\b|\bnext 30 days\b|\bnext month\b/.test(e))return{range:"month",cond:r=>`days(today(), ${r}) >= 0 and days(today(), ${r}) <= 30`,says:r=>`with ${r.words} in the next month`};if(/\blast month\b|\bpast month\b/.test(e))return{range:"month",cond:r=>`days(today(), ${r}) >= -30 and days(today(), ${r}) <= 0`,says:r=>`with ${r.words} in the last month`};if(/\bthis year\b/.test(e))return{range:"year",cond:r=>`days(today(), ${r}) >= 0 and days(today(), ${r}) <= 365`,says:r=>`with ${r.words} in the next year`};if(/\bquarter\b/.test(e))return{range:"quarter",cond:r=>`days(today(), ${r}) >= 0 and days(today(), ${r}) <= 91`,says:r=>`with ${r.words} in the next quarter`}},_=e=>{if(/\bagenda\b|\bin order\b/.test(e))return"agenda";if(/\btoday\b|\bday\b/.test(e))return"day";if(/\bweek\b/.test(e))return"week";if(/\bquarter\b/.test(e))return"quarter";if(/\byears\b/.test(e))return"years";if(/\byear\b/.test(e))return"year";if(/\bmonth\b/.test(e))return"month"},Z=/^(user|person|people|member|staff|gardener|volunteer|owner|agent|employee|worker|team|player|customer|client|contact|party|attendee|guest)s?$/,I=class extends Error{},h=e=>{throw new I(e)};function Se(e,n){let r=e.fields.filter(i=>i.type==="enum");if(n){let i=x(e,n);if(i&&i.type==="enum")return i;i&&h(`${e.plural}' ${i.words} is not a choice, so it has no columns`)}let t=$(e,e.roles.status??e.roles.column);if(t?.type==="enum")return t;let s=r.find(i=>/^(status|stage|state|phase)$/.test(i.name));return s||(r[0]?r[0]:h(`${e.plural} have no choice field to put in columns`))}function ee(e,n){let r=e.fields.filter(A),t=l=>{let d=$(e,e.roles[l]);return A(d)?d:void 0},i=r.find(l=>E(n,l.words)||E(n,y(l.name)))??t("start")??r.find(l=>/^(due|date|on|at|start|starts|begins|from|sown|when)/i.test(l.name))??r[0];if(!i)return h(`no date field on ${e.plural}`);let o=t("end")??r.find(l=>l!==i&&/^(end|ends|until|to|finish|finished|harvested|due|closes|through)/i.test(l.name)),a=e.fields.find(l=>l.type==="boolean"&&/^(done|finished|complete|completed|closed)$/.test(l.name));return{start:i,...o&&o!==i?{end:o}:{},...a?{done:a}:{}}}function ie(e){let n=$(e,e.roles.start),r=$(e,e.roles.end),t=$(e,e.roles.column??e.roles.day??e.roles.columns);if(N(n)&&N(r)&&t?.type==="enum")return{start:n,end:r,column:t}}function De(e,n,r,t){let s=[];for(let o of e.kinds)for(let a of o.edges)for(let l of a.to){let d=e.info(l);if(!d||d.kind===o.kind)continue;let c=0;n.includes(o)&&(c+=4),n.includes(d)&&(c+=4),(Z.test(d.kind)||Z.test(d.noun))&&(c+=3),t&&(a.words.includes(t)||d.noun===v(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||h(n[0]?`${n[0].plural} are joined to nothing else, so there is no who-covers-what to draw`:"nothing here is joined to anything else, so there is no who-covers-what to draw")}function ae(e,n,r,t,s){let i=U(t);switch(e){case"columns":{if(i){let o=x(n,i);if(!o||o.type!=="enum"){let a=se(n,i,r);if(a){let l=r.info(a.to[0]);return{lens:"coverage",kind:n.kind,across:l.kind,link:a.name}}}}return{lens:"columns",kind:n.kind,column:Se(n,i).name}}case"calendar":{let o=ee(n,t),a=_(t);return{lens:"calendar",kind:n.kind,start:o.start.name,...o.end?{end:o.end.name}:{},...o.done?{done:o.done.name}:{},...a?{range:a}:{}}}case"timeline":{let o=ie(n);if(o&&!/\bdates?\b|\bdue\b|\bdeadlines?\b|\bmonths?\b|\byears?\b/.test(t))return{lens:"timeline",kind:n.kind,start:o.start.name,end:o.end.name,column:o.column.name};let a=ee(n,t);return{lens:"calendar",kind:n.kind,start:a.start.name,...a.end?{end:a.end.name}:{},...a.done?{done:a.done.name}:{},range:_(t)??"quarter"}}case"coverage":{let o=De(r,s,t,i);return{lens:"coverage",kind:o.rows.kind,across:o.across.kind,link:o.link.name}}case"board":{let o=$(n,n.roles.x)??n.fields.find(c=>c.name==="x"),a=$(n,n.roles.y)??n.fields.find(c=>c.name==="y");if(!N(o)||!N(a))return h(`${n.plural} have no x and y to be laid out by`);let d=r.kinds.flatMap(c=>c.edges.filter(u=>u.to.includes(n.kind)&&c.kind!==n.kind))[0]??n.edges[0];return d?{lens:"board",kind:n.kind,x:o.name,y:a.name,fill:d.name,...d.from!==n.kind?{fillFrom:"occupant"}:{}}:h(`nothing is joined to ${n.plural} to fill them`)}case"plan":{let o=$(n,n.roles.outline)??n.fields.find(a=>a.name==="outline");return o?{lens:"plan",kind:n.kind,outline:o.name}:h(`${n.plural} have no outline to draw a plan from`)}case"blocks":{let o={lens:"blocks",kind:n.kind,as:/\bcards?\b/.test(t)?"card":"row"},a=/ group(?:ed)? by ([\p{L}\p{N} -]+?)(?= (?:and|only|sorted|with)|\s*$)/u.exec(t)?.[1]??(i&&!/ sort(?:ed)? by /.test(t)?i:void 0);if(a){let c=x(n,a);if(!c||c.type!=="enum")return h(c?`${n.plural}' ${c.words} is not a choice, so they cannot be grouped by it`:`${n.plural} have nothing called ${a} to group by`);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=x(n,l);if(!c)return h(`${n.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=M(n,t);return d.length>0&&(o.where=d),o}}}function M(e,n){let r=[],t=oe(n);if(t){let s=e.fields.filter(A),i=$(e,e.roles.start),o=s.find(l=>E(n,l.words))??(A(i)?i:void 0)??s[0];(!o||!A(o))&&h(`no date field on ${e.plural}`);let a=e.fields.find(l=>l.type==="boolean"&&/^(done|finished|complete|completed|closed)$/.test(l.name));r.push({expr:t.cond(o.name,/\boverdue\b|\blate\b|\bpast due\b/.test(n)?a?.name:void 0),says:t.says(o)})}if(/\bonly\b|\bjust\b|\bthat are\b|\bwhich are\b/.test(n)){for(let s of e.fields){if(s.type!=="enum")continue;let i=s.options?.find(o=>E(n,o.toLowerCase())||E(n,y(o)));i&&r.push({expr:`${s.name} == '${i.replace(/'/g,"")}'`,says:`that are ${y(i)}`})}if(/\bnot done\b|\bundone\b|\bunfinished\b|\bopen ones\b|\bstill to do\b/.test(n)){let s=e.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 B={columns:"A board",calendar:"A calendar",timeline:"A timeline",coverage:"A grid",board:"A layout",plan:"A plan",blocks:"A list",reach:"A picture"};function Re(e,n){let r=n.info(e.kind),t=s=>s?$(r,s)?.words??y(s):"";switch(e.lens){case"columns":return{title:`${k(r.plural)} by ${t(e.column)}`,detail:`of ${r.plural} by ${t(e.column)}`};case"calendar":{let s=e.range??"month";if(s==="agenda")return{title:`${k(r.plural)} in date order`,detail:`of ${r.plural} in order of ${t(e.start)}`};let i=s==="years"?"year":s;return{title:`${k(r.plural)} by ${i}`,detail:`of ${r.plural} by ${t(e.start)}, a ${i} at a time`}}case"timeline":return{title:`${k(r.plural)} over the ${t(e.column)}`,detail:`of ${r.plural} from ${t(e.start)} to ${t(e.end)}, by ${t(e.column)}`};case"coverage":{let s=n.info(e.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=[e.where?.map(i=>i.says).join(" and "),e.group?`by ${t(e.group)}`:void 0,e.sort?`in order of ${t(e.sort.by)}`:void 0].filter(i=>!!i);return{title:[k(r.plural),...s].join(" "),detail:[`of ${r.plural}`,...s].join(" ")}}}}function Ae(e,n){let r={title:n,on:e.kind};switch(e.lens){case"columns":return{name:"columns",...r,bindings:{[e.kind]:{column:e.column}}};case"calendar":return{name:"calendar",...r,bindings:{[e.kind]:{start:e.start,...e.end?{end:e.end}:{},...e.done?{done:e.done}:{}}},...e.range?{options:{range:e.range}}:{}};case"timeline":return{name:"timeline",...r,bindings:{[e.kind]:{start:e.start,end:e.end,column:e.column}}};case"coverage":return{name:"coverage",...r,bindings:{rows:{kind:e.kind},columns:{kind:e.across},link:{edge:e.link}}};case"board":return{name:"board",...r,bindings:{slots:{kind:e.kind},x:{field:e.x,on:"slots"},y:{field:e.y,on:"slots"},fill:{edge:e.fill}},...e.fillFrom?{options:{fillFrom:e.fillFrom}}:{}};case"plan":return{name:"plan",...r,bindings:{regions:{kind:e.kind},outline:{field:e.outline,on:"regions"}}};default:{let t=e.where?.length?` where ${e.where.map(i=>e.where.length>1?`(${i.expr})`:i.expr).join(" and ")}`:"",s={list:`all('${e.kind}')${t}`,as:e.as??"row"};return e.group&&(s.group=e.group),e.sort&&(s.sort=e.sort.direction?{by:e.sort.by,direction:e.sort.direction}:e.sort.by),s.empty="Nothing here yet.",{name:"blocks",...r,options:{blocks:[s]}}}}}function q(e,n){let r=s=>s.toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,""),t=new Set(["home","overview",...Y(n).map(s=>s.slug),...(n.lenses??[]).flatMap(s=>s.title?[r(s.title)]:[])]);if(!t.has(r(e)))return e;for(let s=2;;s++)if(!t.has(r(`${e} ${s}`)))return`${e} ${s}`}var ne={title:[],headline:[],text:["tone"],figure:["as","currency","label"],list:["sort","limit","group","empty","as"],progress:["label"],group:["direction"],when:["show"],divider:[]};function Ee(e,n){if(!Array.isArray(n)||n.length===0)return"it has no blocks to draw";if(n.length>40)return"it has more blocks than a place draws";let r=(o,a)=>{if(typeof o!="string"||o.trim()==="")return`its ${a} says nothing`;try{return G(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"?e.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(ne).find(p=>p in l);if(!d)return`"${Object.keys(l)[0]??""}" is not a block a place draws`;let c=Object.keys(l).find(p=>p!==d&&p!=="key"&&!ne[d].includes(p));if(c)return`a ${d} block takes no "${c}"`;let u=l[d];if(d==="list"||d==="figure"||d==="when"){if(d==="figure"&&u===!0)continue;let p=r(u,d);if(typeof p=="string")return p;let m=s(p,void 0);if(m)return m;if(d==="list"){let f=t(p);if(f==null)return f===null?"Nothing by that name here":"its list does not say which records it lists, like all('task')";for(let g of["group","sort"]){let b=l[g],S=typeof b=="string"?b:w(b)&&typeof b.by=="string"?b.by:void 0;if(b===void 0)continue;let D=S?f.fields.find(ce=>ce.name===S):void 0;if(!D)return`${f.plural} have nothing called ${String(S??b)} to ${g} by`;if(g==="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 g=i(f,a+1);if(g)return g}}else if(d==="group"){if(!Array.isArray(u))return"a group block holds a list of blocks";let p=i(u,a+1);if(p)return p}else{if(d!=="divider"&&typeof u!="string")return`a ${d} block says words`;if(typeof u=="string")for(let p of u.matchAll(/\{([^{}]*)\}/g)){let m=p[1].split(/\|(?![|])/)[0],f=r(m,`${d}'s braces`);if(typeof f=="string")return f;let g=s(f,void 0);if(g)return g}}}};return i(n,1)}function T(e,n,r){let t=O(e.schema,r),s=f=>({ok:!1,failed:`Couldn't draw that: ${f.replace(/\.$/,"")}.`});if(!K(n.name)||n.name==="reach")return s(`"${String(n.name)}" is not a picture the seat can draw; it draws ${J.filter(f=>f!=="reach").join(", ")}`);if(typeof n.title!="string"||n.title.trim().length===0||n.title.length>80)return s("it needs a title of a few words");if(typeof n.on!="string"||!t.tryDefinition(n.on))return s("Nothing by that name here");let i=C[n.name],o=n.bindings??{};if(i.binds==="fields")for(let[f,g]of Object.entries(o)){if(!t.tryDefinition(f))return s("Nothing by that name here");let b=Object.keys(t.tryDefinition(f).fields?.shape??{});for(let[S,D]of Object.entries(g??{}))if(typeof D!="string"||!b.includes(D))return s(`${y(f)} has no field "${String(D)}" for its ${S}`);for(let S of i.requiredRoles)if(!(S in(g??{})))return s(`a ${n.name} needs ${y(f)}'s ${S}`)}else if(i.binds==="entities")for(let f of i.requiredRoles){let g=o[f];if(!g)return s(`a ${n.name} needs its ${f}`);if(typeof g.kind=="string"&&!t.tryDefinition(g.kind))return s("Nothing by that name here")}let a={...e,schema:t,lenses:[...e.lenses??[],n]},l=a.lenses.length-1,d=X(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 p=d.undrawn.find(f=>f.index===l);if(p)return s(p.why);let m=d.drawn.find(f=>f.index===l);if(!m)return s("its bindings name something the app does not have");if(m.as==="overview")return s(`"${n.title}" is the scene's own address; give it another title`);if(n.name==="blocks"){let f=Ee(j(t),n.options?.blocks);if(f)return s(f)}return{ok:!0,drawn:m}}function F(e){return{op:"add-lens",title:e.title,lens:e.name,on:e.on,...e.bindings?{bindings:e.bindings}:{},...e.options?{options:e.options}:{}}}function ve(e){return{op:"remove-lens",title:e.title,on:e.on}}var w=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function de(e){let n=w(e)?e:{},r=String(n.lens??n.name??""),t=n.bindings,s=typeof n.on=="string"?n.on:w(t)&&C[r]?.binds==="fields"?Object.keys(t)[0]??"":"";return{name:r,title:typeof n.title=="string"?n.title.trim():"",on:s,...w(t)?{bindings:t}:{},...w(n.options)?{options:n.options}:{}}}function xe(e){let n=s=>w(e.bindings?.[s])?e.bindings[s]:{},r=s=>typeof s=="string"?s:void 0,t=n(e.on);switch(e.name){case"columns":return r(t.column)?{lens:"columns",kind:e.on,column:t.column}:void 0;case"calendar":{let s=r(e.options?.range);return r(t.start)?{lens:"calendar",kind:e.on,start:t.start,...r(t.end)?{end:t.end}:{},...r(t.done)?{done:t.done}:{},...s?{range:s}:{}}:void 0}case"timeline":return r(t.start)&&r(t.end)&&r(t.column)?{lens:"timeline",kind:e.on,start:t.start,end:t.end,column:t.column}:void 0;case"coverage":{let s=w(e.bindings?.columns)?r(e.bindings.columns.kind):void 0,i=w(e.bindings?.link)?r(e.bindings.link.edge):void 0;return s&&i?{lens:"coverage",kind:e.on,across:s,link:i}:void 0}case"blocks":{let s=e.options?.blocks;if(!Array.isArray(s)||s.length!==1||!w(s[0]))return;let i=s[0],o=new RegExp(`^all\\('${e.on}'\\)(?: where (.+))?$`).exec(String(i.list??""));if(!o)return;let a=i.sort;return{lens:"blocks",kind:e.on,as:i.as==="card"?"card":"row",...typeof i.group=="string"?{group:i.group}:{},...typeof a=="string"?{sort:{by:a}}:w(a)&&typeof a.by=="string"?{sort:{by:a.by,...a.direction==="desc"?{direction:"desc"}:{}}}:{},...o[1]?{where:[{expr:o[1],says:"as asked"}]}:{}}}default:return}}function V(e,n,r,t,s){let i=j(O(e.schema,t)).info(n.on),o=xe(n);return{title:n.title,said:`${B[n.name]??"A picture"} of ${i?.plural??y(n.on)}.`,kind:n.on,lens:n,drawn:r,edit:F(n),by:s,asks:[],...o?{recipe:o}:{}}}function te(e){return{title:e.title,said:e.said,lens:{title:e.lens.title,lens:e.lens.name,on:e.lens.on,...e.lens.bindings?{bindings:e.lens.bindings}:{},...e.lens.options?{options:e.lens.options}:{}},edit:e.edit,by:e.by,check:"It draws, and graview check would take it."}}function W(e,n,r,t,s){let i=Re(e,n),o=e.title??s??q(i.title,r.app),a=Ae(e,o),l=T(r.app,a,r.sight);return l.ok?{title:o,said:`${B[e.lens]} ${i.detail}.`,kind:e.kind,lens:a,drawn:l.drawn,edit:F(a),by:"template",asks:t,recipe:e}:{failed:l.failed,...r.lastGood?{lastGood:r.lastGood}:{}}}function Le(e,n,r,t){if(r.length>0)return r;let s=o=>{switch(e){case"columns":return o.fields.some(a=>a.type==="enum");case"calendar":return o.fields.some(A);case"timeline":return ie(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[...n.kinds.filter(s)].sort((o,a)=>Number(a.fields.some(l=>E(t,l.words)))-Number(o.fields.some(l=>E(t,l.words))))}function Ie(e,n){let r=j(O(n.app.schema,n.sight)),t=re(e),s=$e(t);if(s.length===0)return;let i=pe(t,r),o;for(let a of s){let l=a==="coverage"?[i[0]??r.kinds[0]].filter(d=>!!d):Le(a,r,i,t);for(let d of l)try{let c=ae(a,d,r,t,i),u=W(c,r,n,[e]);if(!L(u))return u;o??=u.failed}catch(c){if(!(c instanceof I))throw c;o??=`Couldn't draw that: ${c.message}.`}l.length===0&&i.length===0&&(o??=`Couldn't draw that: nothing here has what ${B[a].toLowerCase()} needs.`)}return{failed:o??"Couldn't draw that: Nothing by that name here.",...n.lastGood?{lastGood:n.lastGood}:{}}}async function Oe(e,n){let r=n.lastGood?{lastGood:n.lastGood}:{};if(e.trim().length===0)return{failed:"Say what you would like to see, like \u201Ca board of tasks by status\u201D.",...r};let t=Ie(e,n);if(t&&!L(t))return t;if(!n.complete)return t??{failed:"Couldn't draw that: drawing freely needs AI, which isn't on here. Ask for a board, a calendar, a timeline, a list or who covers what.",...r};let s=await le(e,n,void 0);return L(s)&&t?t:s}async function je(e,n,r){let t={lastGood:e},s={...r,lastGood:e},i=j(O(r.app.schema,r.sight)),o=re(n),a=i.info(e.kind),l=[...e.asks,n];if(!a)return{failed:"Couldn't change that: Nothing by that name here.",...t};let d=e.recipe,c=/^ (?:call|name|title) (?:it|this)? ?(.+?) $/.exec(o)??/ (?:call|name) it (.+?) $/.exec(o);try{if(c){let m=n.replace(/^.*?\b(?:call|name|title)\b\s*(?:it|this)?\s*/i,"").replace(/^["“']|["”']$/g,"").trim();if(m.length===0)return{failed:"Couldn't change that: say what to call it.",...t};let f={...e.lens,title:q(m,r.app)},g=T(r.app,f,r.sight);return g.ok?{...e,title:f.title,lens:f,drawn:g.drawn,edit:F(f),asks:l,...d?{recipe:{...d,title:f.title}}:{}}:{failed:g.failed,...t}}let p=/ as (?:a |an )?(board|kanban|calendar|timeline|list|table|cards|rows|grid|plan|layout)\b/.exec(o);if(p){let m=p[1]==="board"||p[1]==="kanban"?"columns":p[1]==="calendar"?"calendar":p[1]==="timeline"?"timeline":p[1]==="grid"?"coverage":p[1]==="plan"?"plan":p[1]==="layout"?"board":"blocks",f=ae(m,a,i,o,[a]),g=p[1]==="cards"?"card":p[1]==="rows"?"row":void 0,b=m==="blocks"&&d?.lens==="blocks"?{...d,...g?{as:g}:{}}:m==="blocks"&&d?.lens==="columns"?{...f,group:d.column,...g?{as:g}:{}}:f;return W(R(b),i,s,l)}if(d){let m=Te(d,a,i,o);if(m)return W(m,i,s,l)}}catch(p){if(!(p instanceof I))throw p;return{failed:`Couldn't change that: ${p.message}.`,...t}}if(!r.complete)return{failed:"Couldn't change that: changing it freely needs AI, which isn't on here. Try \u201Cgroup by status\u201D, \u201Conly this month\u201D or \u201Cas a calendar\u201D.",...t};let u=await le(n,s,e);return L(u)?u:{...u,asks:l}}var R=e=>{let{title:n,...r}=e;return r};function Te(e,n,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)?U(t):void 0);if(s){let d=x(n,s);if(d?.type==="enum")return e.lens==="blocks"?{...R(e),group:d.name}:{lens:"columns",kind:e.kind,column:d.name};let c=se(n,s,r);return c?{lens:"coverage",kind:e.kind,across:c.to[0],link:c.name}:h(d?`${n.plural}' ${d.words} is not a choice, so they cannot be grouped by it`:`${n.plural} have nothing called ${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=x(n,i);return d?{...e.lens==="blocks"?R(e):{lens:"blocks",kind:e.kind,as:"row",...e.lens==="columns"?{group:e.column}:{}},sort:{by:d.name,.../\b(newest|latest|desc|descending|most)\b/.test(t)?{direction:"desc"}:{}}}:h(`${n.plural} have nothing called ${i} to sort by`)}if(/\b(?:all of them|everything|show all|clear the filter|no filter|without the filter)\b/.test(t)){if(e.lens!=="blocks"||!e.where)return h("it already shows all of them");let{where:d,...c}=R(e);return c}let o=oe(t);if(o&&e.lens==="calendar"&&o.range)return{...R(e),range:o.range};if(o&&e.lens==="calendar"&&!o.range)return{lens:"blocks",kind:e.kind,as:"row",sort:{by:e.start},where:M(n,t)};let a=M(n,t);if(a.length>0){let d=e.lens==="blocks"?R(e):{lens:"blocks",kind:e.kind,as:"row",...e.lens==="columns"?{group:e.column}:{}};return{...d,where:[...d.where??[],...a]}}let l=e.lens==="calendar"?_(t):void 0;if(l)return{...R(e),range:l}}function Ne(e){return e.kinds.map(n=>{let r=n.fields.map(i=>`${i.name} (${i.type??"value"}${i.options?`: ${i.options.join(" | ")}`:""})`).join(", "),t=n.edges.map(i=>`${i.name} \u2192 ${i.to.join(" | ")}`).join(", "),s=Object.entries(n.roles).map(([i,o])=>`${i}=${o}`).join(", ");return`- ${n.kind} ("${n.plural}"): ${r}${t?`; relations: ${t}`:""}${s?`; roles: ${s}`:""}`}).join(`
|
|
2
|
-
`)}var Fe=['columns \u2014 a board, records in columns by one choice field: {"lens": "columns", "on": K, "bindings": {K: {"column": "<enum field>"}}}','calendar \u2014 records on a calendar by a date: {"lens": "calendar", "on": K, "bindings": {K: {"start": "<date field>", "end"?: "<date field>", "done"?: "<boolean field>"}}, "options": {"range"?: "day" | "week" | "month" | "quarter" | "year" | "agenda"}}','timeline \u2014 minutes of a day in columns: {"lens": "timeline", "on": K, "bindings": {K: {"start": "<number field>", "end": "<number field>", "column": "<enum field>"}}}','coverage \u2014 who covers what, a grid of two kinds joined by a relation: {"lens": "coverage", "on": K, "bindings": {"rows": {"kind": K}, "columns": {"kind": J}, "link": {"edge": "<relation of K to J>"}}}',`blocks \u2014 anything else, as blocks: {"lens": "blocks", "on": K, "options": {"blocks": [{"headline": "words"}, {"list": "all('K') where <condition>", "group"?: "<enum field>", "sort"?: "<field>" | {"by": "<field>", "direction": "desc"}, "as"?: "row" | "card", "empty"?: "words"}, {"figure": "count(all('K'))", "label": "words"}]}}. Conditions read a record's own fields: status == 'open', not done, days(today(), due) <= 7.`].join(`
|
|
3
|
-
`);function Ce(e,n,r){return["You draw a view of an app's data as JSON \u2014 never code. The app's kinds, their fields (with types) and relations:",Ne(n),"","The lenses you may use (prefer the first four; use blocks only when none of them fits):",Fe,"",r?`The view on screen now:
|
|
4
|
-
${JSON.stringify(r.lens)}
|
|
5
|
-
Change it as asked, and keep everything not asked about.`:"",`Asked: ${JSON.stringify(e)}`,'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 le(e,n,r){let t=n.lastGood?{lastGood:n.lastGood}:{},s=j(O(n.app.schema,n.sight)),i;try{i=await n.complete(Ce(e,s,r))}catch{return{failed:"Couldn't draw that: the model did not answer.",...t}}let o=Q(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=de(a);if(!K(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(e.trim()).slice(0,80),c={...l,title:r&&r.title===d?d:q(d,n.app)},u=T(n.app,c,n.sight);return u.ok?{...V(n.app,c,u.drawn,n.sight,"model"),asks:[e]}:{failed:u.failed,...t}}function Qe(e,n,r){let t=[...e.lenses??[]];for(let s of n){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;T({...e,lenses:t},i,r).ok&&(t=[...t,i])}return t.length===(e.lenses??[]).length?e:{...e,lenses:t}}async function Ze(e,n,r){let{app:t,drafts:s}=r,i=ue(t,r.principal),o=c=>{let u=de(c);return{lens:u,verdict:T(t,u,i)}};if(e==="keep_lens"){let{lens:c,verdict:u}=o(n);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 p=F(c),m=await s.keep(p);return m.ok?{ok:!0,data:{kept:p,said:m.said??`Adds \u201C${p.title}\u201D to the places.`,undo:ve(p)}}:{ok:!1,error:m.error}}if(n.lens!==void 0){let{lens:c,verdict:u}=o(n.lens);return u.ok?{ok:!0,data:te(V(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(n.ask??""),d;if(n.current!==void 0){let{lens:c,verdict:u}=o(n.current);if(!u.ok)return{ok:!1,error:u.failed,reason:"invalid"};d=await je(V(t,c,u.drawn,i,"model"),l,a)}else d=await Oe(l,a);return L(d)?{ok:!1,error:d.failed,reason:"invalid"}:{ok:!0,data:te(d)}}export{te as draftAnswer,V as draftFromLens,ue as draftSight,Oe as draftView,L as isDraftFailure,T as judgeLens,F as lensEditOf,de as lensFromSpec,xe as recipeOfLens,je as refineDraft,Ze as runDraftTool,ve as takeBackEditOf,Ie as templateDraft,Qe as withReaderLenses};
|