grooph 0.4.0 → 0.4.1

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.
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/builtins-Cbs5iQtH.js","assets/share-BzIzB4EY.js","assets/plan-templates-BQu8G2sX.js"])))=>i.map(i=>d[i]);
2
- import{n as e,r as t}from"./index-BoSi6XYh.js";import{Bt as n,Lt as r,ot as i,pn as a,tt as o,zt as s}from"./share-BzIzB4EY.js";var c,l=()=>e(`builtins`,()=>t(()=>import(`./builtins-Cbs5iQtH.js`),__vite__mapDeps([0,1]))).then(e=>c=e.BUILT_IN_TEMPLATES),u=()=>c;function d(e){let t=e=>+(e.template?.kind===`fragment`);return[...e].sort((e,n)=>t(e)-t(n)||e.template.title.localeCompare(n.template.title))}var f=e=>c?.find(t=>t.id===e),p,m=()=>e(`plan-templates`,()=>t(()=>import(`./plan-templates-BQu8G2sX.js`),__vite__mapDeps([2,1]))).then(e=>p=e.PLAN_TEMPLATES),h=`A plan: a graph a person follows. It has no recorded run, and no package for a harness is made of a graph with a person's step.`,g=()=>p;function _(e,t){let n=o(e);if(!a(n))return null;let r=[],i=new Set(e.nodes.map(e=>e.id));for(let e of t?.loops??[]){let n=e.members.filter(e=>!i.has(e));if(n.length>0&&n.length<e.members.length){let i=n.map(e=>{let n=t.nodes.find(t=>t.id===e)?.name;return n?`${e} (${n})`:e});r.push(`loop "${e.id}" stayed behind: a loop comes along only with all its members; add ${i.join(`, `)} to the selected nodes`)}}return{issues:n,hints:r}}function v(e){let t=e.template?.slots??[];return i(e).map(e=>t.find(t=>t.key===e)??{key:e,ask:`What should "${e}" be?`,example:``})}function y(e){let t={};for(let[n,r]of Object.entries(e))r.trim()!==``&&(t[n]=r.trim());return t}function b(e,t,i){let a=r(t);a.delete(t.id);for(let e of i)a.add(e);return n(s(e,`graph`),a)}var x={cost:{low:`Low cost`,medium:`Medium cost`,high:`High cost`},speed:{fast:`Fast`,medium:`Medium speed`,slow:`Slow`},rigor:{light:`Light rigor`,standard:`Standard rigor`,high:`High rigor`}},S={cost:{low:1,medium:2,high:3},speed:{fast:3,medium:2,slow:1},rigor:{light:1,standard:2,high:3}},C={cost:[`low`,`medium`,`high`],speed:[`fast`,`medium`,`slow`],rigor:[`light`,`standard`,`high`]};export{f as a,b as c,g as d,v as f,x as i,l,_ as m,S as n,u as o,d as p,C as r,y as s,h as t,m as u};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/builtins-D_22fKRF.js","assets/share-BzIzB4EY.js","assets/plan-templates-BQu8G2sX.js"])))=>i.map(i=>d[i]);
2
+ import{n as e,r as t}from"./index-CeaKwKuU.js";import{Bt as n,Lt as r,ot as i,pn as a,tt as o,zt as s}from"./share-BzIzB4EY.js";var c,l=()=>e(`builtins`,()=>t(()=>import(`./builtins-D_22fKRF.js`),__vite__mapDeps([0,1]))).then(e=>c=e.BUILT_IN_TEMPLATES),u=()=>c;function d(e){let t=e=>+(e.template?.kind===`fragment`);return[...e].sort((e,n)=>t(e)-t(n)||e.template.title.localeCompare(n.template.title))}var f=e=>c?.find(t=>t.id===e),p,m=()=>e(`plan-templates`,()=>t(()=>import(`./plan-templates-BQu8G2sX.js`),__vite__mapDeps([2,1]))).then(e=>p=e.PLAN_TEMPLATES),h=`A plan: a graph a person follows. It has no recorded run, and no package for a harness is made of a graph with a person's step.`,g=()=>p;function _(e,t){let n=o(e);if(!a(n))return null;let r=[],i=new Set(e.nodes.map(e=>e.id));for(let e of t?.loops??[]){let n=e.members.filter(e=>!i.has(e));if(n.length>0&&n.length<e.members.length){let i=n.map(e=>{let n=t.nodes.find(t=>t.id===e)?.name;return n?`${e} (${n})`:e});r.push(`loop "${e.id}" stayed behind: a loop comes along only with all its members; add ${i.join(`, `)} to the selected nodes`)}}return{issues:n,hints:r}}function v(e){let t=e.template?.slots??[];return i(e).map(e=>t.find(t=>t.key===e)??{key:e,ask:`What should "${e}" be?`,example:``})}function y(e){let t={};for(let[n,r]of Object.entries(e))r.trim()!==``&&(t[n]=r.trim());return t}function b(e,t,i){let a=r(t);a.delete(t.id);for(let e of i)a.add(e);return n(s(e,`graph`),a)}var x={cost:{low:`Low cost`,medium:`Medium cost`,high:`High cost`},speed:{fast:`Fast`,medium:`Medium speed`,slow:`Slow`},rigor:{light:`Light rigor`,standard:`Standard rigor`,high:`High rigor`}},S={cost:{low:1,medium:2,high:3},speed:{fast:3,medium:2,slow:1},rigor:{light:1,standard:2,high:3}},C={cost:[`low`,`medium`,`high`],speed:[`fast`,`medium`,`slow`],rigor:[`light`,`standard`,`high`]};export{f as a,b as c,g as d,v as f,x as i,l,_ as m,S as n,u as o,d as p,C as r,y as s,h as t,m as u};
@@ -1 +1 @@
1
- import{a as e,c as t,t as n}from"./index-BoSi6XYh.js";import{t as r}from"./groups-CjEPiwfv.js";var i=(e,t)=>e===0?[]:[`${e} ${t}${e===1?``:`s`}`];function a(e,t=[]){let n=(e.groups??[]).filter(e=>e.from!==void 0),i=new Map,a=new Map(n.map(e=>[e.id,0])),o=new Map;for(let t of n){let n=r(e,t.id);i.set(t.id,new Set(n.nodes)),o.set(t.id,n.loops);for(let e of n.groups)a.has(e)&&a.set(e,a.get(e)+1)}let s=e=>n.filter(t=>i.get(t.id).has(e)).sort((e,t)=>a.get(e.id)-a.get(t.id)),c=e=>t===`all`||t.includes(e.id),l=e=>s(e).find(e=>!c(e))?.id??e,u=new Map(n.map(e=>[e.id,e])),d=new Set,f=[];for(let t of e.nodes){let e=l(t.id);d.has(e)||(d.add(e),f.push(e===t.id?t:{id:e,kind:`merge`,name:u.get(e).name,merges:[]}))}let p=e.edges.flatMap(e=>{let t=l(e.from),n=l(e.to);return t===n&&e.from!==e.to?[]:[{...e,from:t,to:n}]}),m=new Set(p.map(e=>e.id)),h=e.loops.flatMap(e=>{let t=[...new Set(e.members.map(l))];return t.length===1&&u.has(t[0])?[]:[{...e,members:t,back:e.back.filter(e=>m.has(e))}]}),{groups:g,layout:_,...v}=e,y=n.filter(e=>i.get(e.id).size>0&&(d.has(e.id)||c(e)&&[...i.get(e.id)].some(t=>s(t).every(t=>a.get(t.id)>a.get(e.id)||c(t))))).sort((e,t)=>a.get(e.id)-a.get(t.id)).map(t=>({group:t,open:!d.has(t.id),depth:a.get(t.id),nodes:e.nodes.filter(e=>i.get(t.id).has(e.id)).map(e=>e.id),cards:[...new Set([...i.get(t.id)].map(l))],loops:o.get(t.id)}));return{doc:{...v,nodes:f,edges:p,loops:h},boxes:y,stands:l,chain:s}}function o(e,t){let n=new Set(t.nodes),{groups:r,layout:i,...a}=e;return{...a,name:t.group.name,nodes:e.nodes.filter(e=>n.has(e.id)),edges:e.edges.filter(e=>n.has(e.from)&&n.has(e.to)),loops:e.loops.filter(e=>t.loops.includes(e.id))}}function s(e,t){let n=new Set(t.nodes),r=e.nodes.filter(e=>n.has(e.id));return{line:[t.group.from,...i(r.length,`node`),...i(r.filter(e=>e.kind===`human-gate`).length,`human gate`),...i(t.loops.length,`loop`)].join(` · `),irreversible:r.flatMap(e=>e.kind===`agent`?e.irreversible??[]:[])}}var c=t(e(),1),l=`.unit{border-radius:14px;width:100%;height:100%}.unit-closed{border:1px solid var(--line-strong);background:var(--surface);box-shadow:5px 5px 0 -1px var(--surface-2), 5px 5px 0 0 var(--line-strong), var(--shadow);outline-offset:7px;outline-color:#0000;flex-direction:column;gap:2px;padding:10px 14px 12px;display:flex;position:relative}.unit-kind{color:var(--ink-2);align-items:center;gap:6px;font-size:12px;font-weight:650;display:flex}.unit-mark{border:2px solid var(--ink-2);width:10px;height:10px;box-shadow:2px 2px 0 0 var(--ink-3);border-radius:3px;flex:none}.unit-name{overflow-wrap:anywhere;font-size:15px;font-weight:650;line-height:1.25}.unit-line,.unit-about{color:var(--ink-2);font-size:12.5px}.unit-about{color:var(--ink-3)}.unit-warn{color:var(--kind-human-gate);font-size:12px;font-weight:650}.unit-glyph{flex:1;align-items:center;min-height:0;margin-top:4px;display:flex}.unit-glyph svg{width:auto;max-width:100%;height:auto;max-height:100%}.unit-hint{border:1px solid var(--line-strong);color:var(--ink-2);background:var(--surface);border-radius:999px;padding:1px 8px;font-size:11.5px;font-weight:650;position:absolute;top:9px;right:12px}.react-flow__node:focus-visible .unit-closed{outline:2px solid var(--focus);outline-offset:5px}.react-flow__node.unit-frame{pointer-events:none;cursor:default}.unit-open{border:1.5px dashed var(--line-strong);background:color-mix(in srgb, var(--surface-2) 45%, transparent)}.unit-head{align-items:center;gap:8px;height:34px;padding:0 6px 0 14px;display:flex}.unit-head .unit-name{color:var(--ink-2);text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.unit-from{min-width:0;color:var(--ink-3);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12px;overflow:hidden}.unit-close{pointer-events:all;border:1px solid var(--line-strong);min-height:26px;font:inherit;color:var(--ink);background:var(--surface);cursor:pointer;border-radius:999px;padding:0 10px;font-size:12px;font-weight:650}.unit-close:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.unit-close:after{content:"";position:absolute;inset:-9px}.unit-close{position:relative}.outline-unit{border:1.5px dashed var(--line-strong);border-radius:14px;margin:12px 0;padding:0 12px}.outline-unit>summary{cursor:pointer;gap:1px;padding:12px 26px 12px 0;list-style:none;display:grid;position:relative}.outline-unit>summary::-webkit-details-marker{display:none}.outline-unit>summary:after{content:"";border-right:2px solid var(--ink-3);border-bottom:2px solid var(--ink-3);width:9px;height:9px;position:absolute;top:22px;right:4px;transform:rotate(45deg)}.outline-unit[open]>summary:after{top:26px;transform:rotate(-135deg)}.outline-unit>summary:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:8px}.outline-unit-name{font-size:18px;font-weight:650;line-height:1.3}.outline-unit-line{color:var(--ink-3);font-size:13px}.outline-unit[open]>summary{border-bottom:1px solid var(--line)}`,u=n(),d=document.createElement(`style`);d.textContent=l,document.head.append(d);var f=14,p=34,m={w:200,h:84};function h(e,t,n,r){let i=a(e,t),c=new Map;for(let e of[...i.boxes].reverse()){let t=new Set(e.nodes),a=e.nodes.map(e=>({...n[e]??{x:0,y:0},...r(e)}));for(let n of i.boxes)n.depth>e.depth&&n.nodes.every(e=>t.has(e))&&c.has(n.group.id)&&a.push(c.get(n.group.id));let o=Math.min(...a.map(e=>e.x))-f,s=Math.min(...a.map(e=>e.y))-p;c.set(e.group.id,{x:o,y:s,w:Math.max(...a.map(e=>e.x+e.w))+f-o,h:Math.max(...a.map(e=>e.y+e.h))+f-s})}let l=new Map(i.boxes.map(e=>[e.group.id,e]));return{doc:i.doc,boxes:i.boxes.map(t=>{let n=s(e,t),r=t.group.name||t.group.id;return{rect:c.get(t.group.id),face:{id:t.group.id,name:r,open:t.open,line:n.line,...t.group.description?{about:t.group.description}:{},irreversible:n.irreversible,holds:o(e,t),label:`Subgrooph: ${r}, ${n.line.split(` · `).slice(1).join(`, `)}${t.open?``:`. Closed: Enter opens it`}`}}}),nodesOf:e=>l.get(e)?.nodes??[],hides:e=>{let n=i.chain(e).map(e=>e.id),r=n.findIndex(e=>!(t===`all`||t.includes(e)));return r<0?[]:n.slice(r)}}}function g({section:e,count:t,open:n,onToggle:r,children:i}){let a=e.items.find(e=>e.label===`Placed from`)?.text;return(0,u.jsxs)(`details`,{className:`outline-unit`,"data-outline-id":e.id,open:n,onToggle:e=>r(e.currentTarget.open),children:[(0,u.jsxs)(`summary`,{children:[(0,u.jsx)(`span`,{className:`outline-kind`,children:`Subgrooph`}),(0,u.jsx)(`span`,{className:`outline-unit-name`,children:e.title}),(0,u.jsxs)(`span`,{className:`outline-unit-line`,children:[t,` `,t===1?`node`:`nodes`,a?`, placed from ${a}`:``]})]}),i]})}function _({sections:e,current:t,one:n}){let[r,i]=(0,c.useState)(new Set),a=t=>{let n=e.find(e=>e.id===t)?.inside;return n===void 0?[]:[n,...a(n)]},o=a(t).join(` `);(0,c.useEffect)(()=>{o!==``&&(i(e=>new Set([...e,...o.split(` `)])),requestAnimationFrame(()=>document.querySelector(`.outline .is-current`)?.scrollIntoView({block:`nearest`})))},[t,o]);let s=t=>{let o=new Set;return e.flatMap((c,l)=>{let d=[c.id,...a(c.id)],f=t===void 0?d.length:d.indexOf(t),p=f>0?d[f-1]:void 0;if(p===void 0||o.has(p))return[];o.add(p);let m=p===c.id?c:e.find(e=>e.id===p&&e.kind===`Subgrooph`);if(!m)return[];if(m.kind!==`Subgrooph`)return[n(m,l)];let h=e.filter(e=>e.kind!==`Subgrooph`&&a(e.id).includes(m.id)).length;return[(0,u.jsxs)(g,{section:m,count:h,open:r.has(m.id),onToggle:e=>i(t=>new Set(e?[...t,m.id]:[...t].filter(e=>e!==m.id))),children:[n(m,e.indexOf(m)),s(m.id)]},`unit-${m.id}`)]})};return(0,u.jsx)(u.Fragment,{children:s(void 0)})}function v({face:e,severity:t,onToggle:n,glyph:r}){let i=(0,c.useMemo)(()=>e.open?``:r(e.holds),[e,r]);return e.open?(0,u.jsx)(`div`,{className:`unit unit-open`,"data-unit-id":e.id,"data-open":``,children:(0,u.jsxs)(`div`,{className:`unit-head`,children:[(0,u.jsx)(`span`,{className:`unit-name`,children:e.name}),(0,u.jsx)(`span`,{className:`unit-from`,children:e.line.split(` · `)[0]}),(0,u.jsx)(`button`,{type:`button`,className:`unit-close nodrag nopan`,"aria-label":`Close ${e.name}`,"aria-expanded":`true`,onClick:e=>{e.stopPropagation(),n()},children:`Close`})]})}):(0,u.jsxs)(`div`,{className:`unit unit-closed`,"data-unit-id":e.id,role:`button`,tabIndex:0,"aria-expanded":`false`,"aria-label":e.label,onClick:e=>{e.stopPropagation(),n()},onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),e.stopPropagation(),n())},children:[(0,u.jsxs)(`div`,{className:`unit-kind`,children:[(0,u.jsx)(`span`,{className:`unit-mark`,"aria-hidden":`true`}),`Subgrooph`]}),(0,u.jsx)(`div`,{className:`unit-name`,children:e.name}),(0,u.jsx)(`div`,{className:`unit-line`,children:e.line}),e.about?(0,u.jsx)(`div`,{className:`unit-about`,children:e.about}):null,e.irreversible.length>0?(0,u.jsxs)(`div`,{className:`unit-warn`,children:[`irreversible inside: `,e.irreversible.join(`, `)]}):null,(0,u.jsx)(`div`,{className:`unit-glyph`,"aria-hidden":`true`,dangerouslySetInnerHTML:{__html:i}}),(0,u.jsx)(`div`,{className:`unit-hint`,children:`Open`}),t?(0,u.jsx)(`span`,{className:`gnode-issue issue-dot-${t}`,role:`img`,"aria-label":`has ${t}s inside`}):null]})}var y=(0,c.memo)(function({unit:e,Handle:t,glyph:n}){return(0,u.jsxs)(`div`,{style:{width:e.rect.w,height:e.rect.h},children:[e.face.open?null:(0,u.jsx)(t,{type:`target`,position:`top`,isConnectable:!1,className:`ghandle`}),(0,u.jsx)(v,{...e,glyph:n}),e.face.open?null:(0,u.jsx)(t,{type:`source`,position:`bottom`,isConnectable:!1,className:`ghandle`})]})}),b=[];function x(e,t,n,r,i=b,a,o=!1){let[s,l]=(0,c.useState)(b),u=(0,c.useCallback)(e=>l(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e]),[]),d=(0,c.useMemo)(()=>h(e,o?`all`:s,t,e=>({w:Math.max(n[e]?.width??0,m.w),h:Math.max(n[e]?.height??0,m.h)})),[e,o,s,t,n]),f=[...i,...a===void 0?[]:[a]].join(` `);return(0,c.useEffect)(()=>{let e=f===``?[]:[...new Set(f.split(` `).flatMap(e=>d.hides(e)))];e.length>0&&l(t=>[...new Set([...t,...e])])},[d,f]),(0,c.useMemo)(()=>{let e=e=>{let t=d.nodesOf(e).map(e=>r.get(e));return t.includes(`error`)?`error`:t.includes(`warning`)?`warning`:void 0},n=new Map(d.boxes.map(({face:t,rect:n})=>{let r=t.open?void 0:e(t.id);return[t.id,{face:t,rect:n,...r?{severity:r}:{},onToggle:()=>u(t.id)}]})),i=(e,t)=>({id:e,kind:`merge`,name:t.face.name,merges:[],unit:t}),a=[...n].filter(([,e])=>e.face.open).map(([e,t])=>({id:e,type:`graph`,position:{x:t.rect.x,y:t.rect.y},measured:{width:t.rect.w,height:t.rect.h},zIndex:-1,draggable:!1,focusable:!1,className:`unit-frame`,data:{node:i(e,t),loops:[],selected:!1,highlighted:!1,connectFrom:!1}})),o=new WeakMap;return{doc:{...d.doc,nodes:d.doc.nodes.map(e=>n.has(e.id)?i(e.id,n.get(e.id)):e)},positions:{...t,...Object.fromEntries([...n].map(([e,t])=>[e,{x:t.rect.x,y:t.rect.y}]))},with:e=>o.get(e)??o.set(e,[...a,...e.map(e=>n.has(e.id)?{...e,focusable:!1,draggable:!1}:e)]).get(e)}},[d,t,r,u])}export{_ as OutlineFold,y as UnitNode,h as boxesFor,x as useBoxes};
1
+ import{a as e,c as t,t as n}from"./index-CeaKwKuU.js";import{t as r}from"./groups-CjEPiwfv.js";var i=(e,t)=>e===0?[]:[`${e} ${t}${e===1?``:`s`}`];function a(e,t=[]){let n=(e.groups??[]).filter(e=>e.from!==void 0),i=new Map,a=new Map(n.map(e=>[e.id,0])),o=new Map;for(let t of n){let n=r(e,t.id);i.set(t.id,new Set(n.nodes)),o.set(t.id,n.loops);for(let e of n.groups)a.has(e)&&a.set(e,a.get(e)+1)}let s=e=>n.filter(t=>i.get(t.id).has(e)).sort((e,t)=>a.get(e.id)-a.get(t.id)),c=e=>t===`all`||t.includes(e.id),l=e=>s(e).find(e=>!c(e))?.id??e,u=new Map(n.map(e=>[e.id,e])),d=new Set,f=[];for(let t of e.nodes){let e=l(t.id);d.has(e)||(d.add(e),f.push(e===t.id?t:{id:e,kind:`merge`,name:u.get(e).name,merges:[]}))}let p=e.edges.flatMap(e=>{let t=l(e.from),n=l(e.to);return t===n&&e.from!==e.to?[]:[{...e,from:t,to:n}]}),m=new Set(p.map(e=>e.id)),h=e.loops.flatMap(e=>{let t=[...new Set(e.members.map(l))];return t.length===1&&u.has(t[0])?[]:[{...e,members:t,back:e.back.filter(e=>m.has(e))}]}),{groups:g,layout:_,...v}=e,y=n.filter(e=>i.get(e.id).size>0&&(d.has(e.id)||c(e)&&[...i.get(e.id)].some(t=>s(t).every(t=>a.get(t.id)>a.get(e.id)||c(t))))).sort((e,t)=>a.get(e.id)-a.get(t.id)).map(t=>({group:t,open:!d.has(t.id),depth:a.get(t.id),nodes:e.nodes.filter(e=>i.get(t.id).has(e.id)).map(e=>e.id),cards:[...new Set([...i.get(t.id)].map(l))],loops:o.get(t.id)}));return{doc:{...v,nodes:f,edges:p,loops:h},boxes:y,stands:l,chain:s}}function o(e,t){let n=new Set(t.nodes),{groups:r,layout:i,...a}=e;return{...a,name:t.group.name,nodes:e.nodes.filter(e=>n.has(e.id)),edges:e.edges.filter(e=>n.has(e.from)&&n.has(e.to)),loops:e.loops.filter(e=>t.loops.includes(e.id))}}function s(e,t){let n=new Set(t.nodes),r=e.nodes.filter(e=>n.has(e.id));return{line:[t.group.from,...i(r.length,`node`),...i(r.filter(e=>e.kind===`human-gate`).length,`human gate`),...i(t.loops.length,`loop`)].join(` · `),irreversible:r.flatMap(e=>e.kind===`agent`?e.irreversible??[]:[])}}var c=t(e(),1),l=`.unit{border-radius:14px;width:100%;height:100%}.unit-closed{border:1px solid var(--line-strong);background:var(--surface);box-shadow:5px 5px 0 -1px var(--surface-2), 5px 5px 0 0 var(--line-strong), var(--shadow);outline-offset:7px;outline-color:#0000;flex-direction:column;gap:2px;padding:10px 14px 12px;display:flex;position:relative}.unit-kind{color:var(--ink-2);align-items:center;gap:6px;font-size:12px;font-weight:650;display:flex}.unit-mark{border:2px solid var(--ink-2);width:10px;height:10px;box-shadow:2px 2px 0 0 var(--ink-3);border-radius:3px;flex:none}.unit-name{overflow-wrap:anywhere;font-size:15px;font-weight:650;line-height:1.25}.unit-line,.unit-about{color:var(--ink-2);font-size:12.5px}.unit-about{color:var(--ink-3)}.unit-warn{color:var(--kind-human-gate);font-size:12px;font-weight:650}.unit-glyph{flex:1;align-items:center;min-height:0;margin-top:4px;display:flex}.unit-glyph svg{width:auto;max-width:100%;height:auto;max-height:100%}.unit-hint{border:1px solid var(--line-strong);color:var(--ink-2);background:var(--surface);border-radius:999px;padding:1px 8px;font-size:11.5px;font-weight:650;position:absolute;top:9px;right:12px}.react-flow__node:focus-visible .unit-closed{outline:2px solid var(--focus);outline-offset:5px}.react-flow__node.unit-frame{pointer-events:none;cursor:default}.unit-open{border:1.5px dashed var(--line-strong);background:color-mix(in srgb, var(--surface-2) 45%, transparent)}.unit-head{align-items:center;gap:8px;height:34px;padding:0 6px 0 14px;display:flex}.unit-head .unit-name{color:var(--ink-2);text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.unit-from{min-width:0;color:var(--ink-3);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12px;overflow:hidden}.unit-close{pointer-events:all;border:1px solid var(--line-strong);min-height:26px;font:inherit;color:var(--ink);background:var(--surface);cursor:pointer;border-radius:999px;padding:0 10px;font-size:12px;font-weight:650}.unit-close:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.unit-close:after{content:"";position:absolute;inset:-9px}.unit-close{position:relative}.outline-unit{border:1.5px dashed var(--line-strong);border-radius:14px;margin:12px 0;padding:0 12px}.outline-unit>summary{cursor:pointer;gap:1px;padding:12px 26px 12px 0;list-style:none;display:grid;position:relative}.outline-unit>summary::-webkit-details-marker{display:none}.outline-unit>summary:after{content:"";border-right:2px solid var(--ink-3);border-bottom:2px solid var(--ink-3);width:9px;height:9px;position:absolute;top:22px;right:4px;transform:rotate(45deg)}.outline-unit[open]>summary:after{top:26px;transform:rotate(-135deg)}.outline-unit>summary:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:8px}.outline-unit-name{font-size:18px;font-weight:650;line-height:1.3}.outline-unit-line{color:var(--ink-3);font-size:13px}.outline-unit[open]>summary{border-bottom:1px solid var(--line)}`,u=n(),d=document.createElement(`style`);d.textContent=l,document.head.append(d);var f=14,p=34,m={w:200,h:84};function h(e,t,n,r){let i=a(e,t),c=new Map;for(let e of[...i.boxes].reverse()){let t=new Set(e.nodes),a=e.nodes.map(e=>({...n[e]??{x:0,y:0},...r(e)}));for(let n of i.boxes)n.depth>e.depth&&n.nodes.every(e=>t.has(e))&&c.has(n.group.id)&&a.push(c.get(n.group.id));let o=Math.min(...a.map(e=>e.x))-f,s=Math.min(...a.map(e=>e.y))-p;c.set(e.group.id,{x:o,y:s,w:Math.max(...a.map(e=>e.x+e.w))+f-o,h:Math.max(...a.map(e=>e.y+e.h))+f-s})}let l=new Map(i.boxes.map(e=>[e.group.id,e]));return{doc:i.doc,boxes:i.boxes.map(t=>{let n=s(e,t),r=t.group.name||t.group.id;return{rect:c.get(t.group.id),face:{id:t.group.id,name:r,open:t.open,line:n.line,...t.group.description?{about:t.group.description}:{},irreversible:n.irreversible,holds:o(e,t),label:`Subgrooph: ${r}, ${n.line.split(` · `).slice(1).join(`, `)}${t.open?``:`. Closed: Enter opens it`}`}}}),nodesOf:e=>l.get(e)?.nodes??[],hides:e=>{let n=i.chain(e).map(e=>e.id),r=n.findIndex(e=>!(t===`all`||t.includes(e)));return r<0?[]:n.slice(r)}}}function g({section:e,count:t,open:n,onToggle:r,children:i}){let a=e.items.find(e=>e.label===`Placed from`)?.text;return(0,u.jsxs)(`details`,{className:`outline-unit`,"data-outline-id":e.id,open:n,onToggle:e=>r(e.currentTarget.open),children:[(0,u.jsxs)(`summary`,{children:[(0,u.jsx)(`span`,{className:`outline-kind`,children:`Subgrooph`}),(0,u.jsx)(`span`,{className:`outline-unit-name`,children:e.title}),(0,u.jsxs)(`span`,{className:`outline-unit-line`,children:[t,` `,t===1?`node`:`nodes`,a?`, placed from ${a}`:``]})]}),i]})}function _({sections:e,current:t,one:n}){let[r,i]=(0,c.useState)(new Set),a=t=>{let n=e.find(e=>e.id===t)?.inside;return n===void 0?[]:[n,...a(n)]},o=a(t).join(` `);(0,c.useEffect)(()=>{o!==``&&(i(e=>new Set([...e,...o.split(` `)])),requestAnimationFrame(()=>document.querySelector(`.outline .is-current`)?.scrollIntoView({block:`nearest`})))},[t,o]);let s=t=>{let o=new Set;return e.flatMap((c,l)=>{let d=[c.id,...a(c.id)],f=t===void 0?d.length:d.indexOf(t),p=f>0?d[f-1]:void 0;if(p===void 0||o.has(p))return[];o.add(p);let m=p===c.id?c:e.find(e=>e.id===p&&e.kind===`Subgrooph`);if(!m)return[];if(m.kind!==`Subgrooph`)return[n(m,l)];let h=e.filter(e=>e.kind!==`Subgrooph`&&a(e.id).includes(m.id)).length;return[(0,u.jsxs)(g,{section:m,count:h,open:r.has(m.id),onToggle:e=>i(t=>new Set(e?[...t,m.id]:[...t].filter(e=>e!==m.id))),children:[n(m,e.indexOf(m)),s(m.id)]},`unit-${m.id}`)]})};return(0,u.jsx)(u.Fragment,{children:s(void 0)})}function v({face:e,severity:t,onToggle:n,glyph:r}){let i=(0,c.useMemo)(()=>e.open?``:r(e.holds),[e,r]);return e.open?(0,u.jsx)(`div`,{className:`unit unit-open`,"data-unit-id":e.id,"data-open":``,children:(0,u.jsxs)(`div`,{className:`unit-head`,children:[(0,u.jsx)(`span`,{className:`unit-name`,children:e.name}),(0,u.jsx)(`span`,{className:`unit-from`,children:e.line.split(` · `)[0]}),(0,u.jsx)(`button`,{type:`button`,className:`unit-close nodrag nopan`,"aria-label":`Close ${e.name}`,"aria-expanded":`true`,onClick:e=>{e.stopPropagation(),n()},children:`Close`})]})}):(0,u.jsxs)(`div`,{className:`unit unit-closed`,"data-unit-id":e.id,role:`button`,tabIndex:0,"aria-expanded":`false`,"aria-label":e.label,onClick:e=>{e.stopPropagation(),n()},onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),e.stopPropagation(),n())},children:[(0,u.jsxs)(`div`,{className:`unit-kind`,children:[(0,u.jsx)(`span`,{className:`unit-mark`,"aria-hidden":`true`}),`Subgrooph`]}),(0,u.jsx)(`div`,{className:`unit-name`,children:e.name}),(0,u.jsx)(`div`,{className:`unit-line`,children:e.line}),e.about?(0,u.jsx)(`div`,{className:`unit-about`,children:e.about}):null,e.irreversible.length>0?(0,u.jsxs)(`div`,{className:`unit-warn`,children:[`irreversible inside: `,e.irreversible.join(`, `)]}):null,(0,u.jsx)(`div`,{className:`unit-glyph`,"aria-hidden":`true`,dangerouslySetInnerHTML:{__html:i}}),(0,u.jsx)(`div`,{className:`unit-hint`,children:`Open`}),t?(0,u.jsx)(`span`,{className:`gnode-issue issue-dot-${t}`,role:`img`,"aria-label":`has ${t}s inside`}):null]})}var y=(0,c.memo)(function({unit:e,Handle:t,glyph:n}){return(0,u.jsxs)(`div`,{style:{width:e.rect.w,height:e.rect.h},children:[e.face.open?null:(0,u.jsx)(t,{type:`target`,position:`top`,isConnectable:!1,className:`ghandle`}),(0,u.jsx)(v,{...e,glyph:n}),e.face.open?null:(0,u.jsx)(t,{type:`source`,position:`bottom`,isConnectable:!1,className:`ghandle`})]})}),b=[];function x(e,t,n,r,i=b,a,o=!1){let[s,l]=(0,c.useState)(b),u=(0,c.useCallback)(e=>l(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e]),[]),d=(0,c.useMemo)(()=>h(e,o?`all`:s,t,e=>({w:Math.max(n[e]?.width??0,m.w),h:Math.max(n[e]?.height??0,m.h)})),[e,o,s,t,n]),f=[...i,...a===void 0?[]:[a]].join(` `);return(0,c.useEffect)(()=>{let e=f===``?[]:[...new Set(f.split(` `).flatMap(e=>d.hides(e)))];e.length>0&&l(t=>[...new Set([...t,...e])])},[d,f]),(0,c.useMemo)(()=>{let e=e=>{let t=d.nodesOf(e).map(e=>r.get(e));return t.includes(`error`)?`error`:t.includes(`warning`)?`warning`:void 0},n=new Map(d.boxes.map(({face:t,rect:n})=>{let r=t.open?void 0:e(t.id);return[t.id,{face:t,rect:n,...r?{severity:r}:{},onToggle:()=>u(t.id)}]})),i=(e,t)=>({id:e,kind:`merge`,name:t.face.name,merges:[],unit:t}),a=[...n].filter(([,e])=>e.face.open).map(([e,t])=>({id:e,type:`graph`,position:{x:t.rect.x,y:t.rect.y},measured:{width:t.rect.w,height:t.rect.h},zIndex:-1,draggable:!1,focusable:!1,className:`unit-frame`,data:{node:i(e,t),loops:[],selected:!1,highlighted:!1,connectFrom:!1}})),o=new WeakMap;return{doc:{...d.doc,nodes:d.doc.nodes.map(e=>n.has(e.id)?i(e.id,n.get(e.id)):e)},positions:{...t,...Object.fromEntries([...n].map(([e,t])=>[e,{x:t.rect.x,y:t.rect.y}]))},with:e=>o.get(e)??o.set(e,[...a,...e.map(e=>n.has(e.id)?{...e,focusable:!1,draggable:!1}:e)]).get(e)}},[d,t,r,u])}export{_ as OutlineFold,y as UnitNode,h as boxesFor,x as useBoxes};
@@ -1 +1 @@
1
- import{a as e,c as t,n,r,t as i}from"./index-BoSi6XYh.js";function a(e){let[t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,x,S,C,w,T,E,D,O,k]=e;return{BADGE_R:t,M:n,PAD:r,SLOT:i,TRACK:a,TRACK_MIN:o,PICTURE_WIDTH:s,assignTracks:c,badgeHalf:l,carriedBy:u,drawn:d,fmt:f,frame:p,handoffRow:m,heading:h,inkFor:g,laneHead:_,numberBadge:v,numberRing:y,numberText:b,personCard:x,placeNumber:S,rect:C,sessionCard:w,stroke:T,styleOf:E,text:D,textWidth:O,wrap:k}}var o=168,s=150,c=9,l=18,u=10,d=11,f=5.5,p=3,m=2.5,h=150,g=340,_=(e,t,n)=>Math.max(t,Math.min(n,e));function v(e){let t=[];for(let n of e){let e=t[t.length-1],r=t[t.length-2];e&&e[0]===n[0]&&e[1]===n[1]||(e&&r&&(r[0]===e[0]&&e[0]===n[0]||r[1]===e[1]&&e[1]===n[1])&&t.pop(),t.push(n))}return t}function y(e,t,n={}){let{BADGE_R:r,M:i,PAD:y,SLOT:b,TRACK:x,TRACK_MIN:S,assignTracks:C,badgeHalf:w,drawn:T,fmt:E,frame:D,handoffRow:O,heading:k,inkFor:A,laneHead:ee,numberRing:j,numberText:M,personCard:te,placeNumber:ne,rect:N,sessionCard:P,stroke:re,styleOf:F,text:I}=a(e),L=n.theme??`auto`,R=A(L),z=t.lanes,B=z.length,{sessions:ie,people:V,handoffs:H,numberOf:U}=T(t),ae=z.map(e=>ie.filter(t=>t.lane===e.id)),W=new Map;V.forEach((e,t)=>W.set(e.id,{lane:-1,k:t})),ae.forEach((e,t)=>e.forEach((e,n)=>W.set(e.id,{lane:t,k:n})));let oe=H.map(e=>[W.get(e.from),W.get(e.to)]),G=z.map(()=>[0,0]),se=z.map(()=>!1);for(let[e,t]of oe)e.lane>=0&&t.lane>=0&&e.lane!==t.lane?(G[e.lane][+(e.lane<t.lane)]++,G[t.lane][+(t.lane<e.lane)]++):e.lane<0!=t.lane<0&&(se[Math.max(e.lane,t.lane)]=!0);let ce=G.map(([e,t])=>e<=t?0:1),le=G.map(([e,t],n)=>se[n]?1-ce[n]:+(t<=e)),ue=[],de=[],fe=H.map((e,t)=>{let[n,r]=oe[t],i=(e,t,n,r)=>ue[ue.push({g:e,group:t,lo:Math.min(n,r),hi:Math.max(n,r),t:0})-1],a=(n,r,i,a)=>de[de.push({id:n?e.from:e.to,other:n?e.to:e.from,side:r,lean:i,run:a,arc:t,from:n,y:0})-1];if(n.lane<0&&r.lane<0)return{};if(n.lane<0||r.lane<0){let e=n.lane<0?r:n,t=ce[e.lane],o=a(n.lane>=0,t,-1,i(e.lane+t,t?0:2,-1,e.k));return n.lane<0?{to:o}:{from:o}}if(n.lane===r.lane){let e=le[n.lane],t=i(n.lane+e,e?0:2,n.k,r.k);return{from:a(!0,e,Math.sign(r.k-n.k),t),to:a(!1,e,Math.sign(n.k-r.k),t)}}let o=+(n.lane<r.lane);if(Math.abs(n.lane-r.lane)===1){let e=i(Math.max(n.lane,r.lane),1,0,0);return{from:a(!0,o,0,e),to:a(!1,1-o,0,e)}}return{from:a(!0,o,-1,i(n.lane+o,o?0:2,-1,n.k)),to:a(!1,1-o,-1,i(r.lane+1-o,o?2:0,-1,r.k))}}),pe=Array.from({length:B+1},()=>[0,0,0]);for(let e=0;e<=B;e++)for(let t of[0,2]){let n=ue.filter(n=>n.g===e&&n.group===t),{tracks:r,count:i}=C(n.map(e=>({from:e.lo,to:e.hi})));n.forEach((e,t)=>e.t=r[t]),pe[e][t]=i}for(let e of ue)e.group===1&&(e.t=pe[e.g][1]++);let me=pe.map(e=>e[0]+e[1]+e[2]),he=me.reduce((e,t)=>e+Math.max(0,t-1),0),ge=e=>e===0&&V.length?l:c,_e=e=>me[e]?ge(e)+(e===B&&V.length?l:c):e>0&&e<B?u:0,ve=2*i+B*2*y+me.reduce((e,t,n)=>e+_e(n),0),ye=x,K=o,be=n.width;if(be!==void 0&&Number.isFinite(be)&&B>0){let e=e=>(be-ve-he*e)/B;e(x)<s&&he&&(ye=_((be-ve-B*s)/he,S,x)),K=_(e(ye),s,o)}let xe=[],q=[],J=i;for(let e=0;e<=B;e++)xe.push(J),J+=_e(e)+Math.max(0,me[e]-1)*ye,e<B&&(q.push(J),J+=K+2*y);let Y=Math.max(J+i,g,V.length?2*(i+y)+V.length*h+(V.length-1)*8:0),Se=(Y-J-i)/2;q.forEach((e,t)=>q[t]=e+Se);let X=e=>Se+xe[e.g]+ge(e.g)+(e.group===0?e.t:e.group===1?pe[e.g][0]+e.t:me[e.g]-1-e.t)*ye,Z=[],Ce=[],Q=k(t,Y,n,R,Z),we=new Map,Te=Q;if(V.length>0){let e=Q,t=(Y-2*i-2*y-(V.length-1)*8)/V.length,n=V.map(e=>te(e,t,0,R,p)),r=Math.max(...n.map(e=>e.height));V.forEach((a,o)=>{let s=i+y+o*(t+8);we.set(a.id,[s,s+t]),Ce.push(n[o].draw(s,e+y+21.5,r))}),Te=e+y+21.5+r,Q=Te+y,Z.push(`<g data-people="">${N(i,e,Y-2*i,Q-e,{fill:R(`surface-2`),stroke:R(`line`),rx:12,dash:`5 4`})}${I(i+y+2,e+y+12,V.length===1?`Person`:`People`,{size:12.5,fill:R(`ink`),weight:`bold`})}</g>`)}let Ee=V.map(()=>[]),De=e=>(we.get(V[e].id)[0]+we.get(V[e].id)[1])/2;H.forEach((e,t)=>{let[n,r]=oe[t],{from:i,to:a}=fe[t];n.lane<0&&Ee[n.k].push({arc:t,end:0,toward:a?X(a.run):n.k===r.k?NaN:De(r.k)}),r.lane<0&&Ee[r.k].push({arc:t,end:1,toward:i?X(i.run):n.k===r.k?NaN:De(n.k)})});let Oe=H.map(()=>[0,0]),ke=ue.map(X);V.forEach((e,t)=>{let[n,r]=we.get(e.id),i=e=>e>=n+9.5&&e<=r-9.5,a=_((r-n-16)/(Ee[t].filter(e=>!i(e.toward)).length+1),3,b),o=[],s=(e,t)=>{let i=_(e,n+8,r-8);for(let e=a;e>=1.5;e/=2)for(let a=i;a>=n+8&&a<=r-8;a+=t)if(ke.every(t=>Math.abs(t-a)>=Math.min(5,e))&&o.every(t=>Math.abs(t-a)>=e-.01))return o.push(a),a;return o.push(i),i};for(let e of Ee[t]){let a=e.toward;Oe[e.arc][e.end]=i(a)?a:Number.isNaN(a)?s(De(t)+(e.end?7:-7),e.end?1:-1):a<n+9.5?s(n+12,1):s(r-12,-1)}});let Ae=H.map((e,t)=>{let{from:n,to:r}=fe[t];if(!(n&&r&&n.run===r.run))return[n?X(n.run):Oe[t][0],r?X(r.run):Oe[t][1]]}),je=Ae.flatMap((e,t)=>e&&e[0]!==e[1]?[{arc:t,from:e[0],to:e[1]}]:[]),Me=C(je,6),$=Q+(Me.count?20+(Me.count-1)*d:V.length?10:0),Ne=new Map(je.map((e,t)=>[e.arc,$-10-Me.tracks[t]*d])),Pe=z.map((e,t)=>ee(e,q[t]+y,K,$+y+12,R,p)),Fe=Math.max($+y,...Pe.map(e=>e.cardsTop)),Ie=new Map;for(let e of de)(Ie.get(e.id)??Ie.set(e.id,[[],[]]).get(e.id))[e.side].push(e);let Le=new Map,Re=Fe;ae.forEach((e,r)=>{let i=Fe;for(let a of e){let e=Ie.get(a.id)??[[],[]],o=P(t,a,K,Math.max(e[0].length,e[1].length),R,n,p);Le.set(a.id,{x:q[r]+y,y:i,h:o.height}),Ce.push(o.draw(q[r]+y,i)),i+=o.height+(o.family?14:8)}e.length===0&&(Pe[r].svg.push(I(q[r]+y+2,Fe+12,`no sessions`,{size:10.5,fill:R(`ink-3`)})),i+=20),Re=Math.max(Re,i+y-8)}),z.forEach((e,t)=>Z.push(`<g data-lane="${e.id}">${N(q[t],$,K+2*y,Re-$,{fill:R(`surface-2`),stroke:R(`line`),rx:12})}${Pe[t].svg.join(``)}</g>`)),Z.push(...Ce),Q=B>0?Re+10:$;let ze=e=>Le.get(e).y+Le.get(e).h/2,Be=e=>e.lean?-e.lean*e.run.t:e.run.group===1?ze(e.other):-1/0;for(let[e,t]of Ie)for(let n of t)n.sort((e,t)=>e.lean-t.lean||Be(e)-Be(t)||e.arc-t.arc||(e.from?-1:1)),n.forEach((t,r)=>t.y=ze(e)+(r-(n.length-1)/2)*b+(t.side?-2.5:m));for(let e=1;e<B;e++){let t=fe.flatMap(({from:t,to:n})=>t&&n&&t.run===n.run&&t.run.g===e&&t.run.group===1?[t.side?{run:t.run,left:t.y,right:n.y}:{run:t.run,left:n.y,right:t.y}]:[]),n=e=>e.right<e.left;t.sort((e,t)=>Number(n(t))-Number(n(e))||(n(e)?e.left-t.left:t.left-e.left));let r=(e,t)=>Math.abs(e.left-t.right)<2;for(let e=0;e<t.length;e++)for(let n=e+1;n<t.length;n++)r(t[n],t[e])&&!r(t[e],t[n])&&([t[e],t[n]]=[t[n],t[e]]);t.forEach((e,t)=>e.run.t=t)}let Ve=e=>[Le.get(e.id).x+(e.side?K:0),e.y],He=H.map((e,t)=>{let{from:n,to:r}=fe[t];if(n&&r&&n.run===r.run)return v([Ve(n),[X(n.run),n.y],[X(r.run),r.y],Ve(r)]);let[i,a]=Ae[t],o=Ne.get(t)??$,s=(e,t)=>e?[Ve(e),[t,e.y]]:[[t,Te]];return v([...s(n,i),[i,o],[a,o],...s(r,a).reverse()])}),Ue=He.flatMap((e,t)=>e.slice(1).flatMap((n,r)=>n[1]===e[r][1]?[{y:n[1],from:Math.min(n[0],e[r][0]),to:Math.max(n[0],e[r][0]),of:t}]:[])),We=He.flatMap((e,t)=>e.slice(1).flatMap((n,r)=>n[0]===e[r][0]?[{y:n[0],from:Math.min(n[1],e[r][1]),to:Math.max(n[1],e[r][1]),of:t}]:[])),Ge=[],Ke=[],qe=[],Je=[],Ye=[];if(H.forEach((e,t)=>{let n=He[t],i=F(e),a=R(i.color),o=String(U.get(e.id)),s=n.length-2;if(s<0)return;let c=e=>Math.abs(n[e+1][0]-n[e][0])+Math.abs(n[e+1][1]-n[e][1]),l=e=>n[e][0]===n[e+1][0],u=n.map((e,t)=>t===0||t>s?0:Math.min(6,c(t-1)/2,c(t)/2)),d=e=>{let t=-1;for(let n=0;n<=s;n++)l(n)===e&&(t<0||c(n)>c(t))&&(t=n);return t},p=d(!1),m=d(!0);p>=0&&(m<0||c(m)<24&&c(p)>=40)&&(m=-1);let h=w(o),[g,_,v]=[0,0,!1];if(m>=0){let[e,i]=[n[m][1],n[m+1][1]],a=Math.sign(i-e);g=n[m][0],_=ne(g,e,i,h,t,Ge,Ue),Ke.push({x:_,y:g,half:r}),v=(_-a*r-(e+a*u[m]))*a>=0&&(i-a*(m===s?f:u[m+1])-(_+a*r))*a>=0}else p>=0&&(_=n[p][1],g=ne(_,n[p][0],n[p+1][0],r,t,Ke,We),Ge.push({x:g,y:_,half:h}));let y=`M${E(n[0][0])},${E(n[0][1])}`,b=0,x=0;for(let e=0;e<=s;e++){let[t,i]=n[e+1];b=Math.sign(t-n[e][0]),x=Math.sign(i-n[e][1]);let a=e===s?f:u[e+1];v&&e===m&&(y+=` L${E(g)},${E(_-x*r)} M${E(g)},${E(_+x*r)}`),y+=` L${E(t-b*a)},${E(i-x*a)}`,e<s&&(y+=` Q${E(t)},${E(i)} ${E(t+Math.sign(n[e+2][0]-t)*a)},${E(i+Math.sign(n[e+2][1]-i)*a)}`)}let[S,C]=[n[s+1][0]-.5*b,n[s+1][1]-.5*x],T=`<path d="M${E(S)},${E(C)} L${E(S-6.5*b-3.6*x)},${E(C-6.5*x-3.6*b)} L${E(S-6.5*b+3.6*x)},${E(C-6.5*x+3.6*b)} z" style="fill:${a}"/>`,D=`<circle cx="${E(n[0][0])}" cy="${E(n[0][1])}" r="2.2" style="fill:${a}"/>`,O=`<g data-plate="${e.id}">${j(g,_,o,a,R)}</g>`;v&&qe.push(O),Je.push(`<g data-handoff="${e.id}"><path d="${y}" ${re(i,a)}/>${D}${T}</g>${v?``:O}`),Ye.push(`<g data-number="${e.id}">${M(g,_,o,R)}</g>`)}),Z.push(...qe,...Je,...Ye),t.handoffs.length>0){Q+=6,Z.push(I(i,Q+11,`Handoffs`,{size:12.5,fill:R(`ink`),weight:`bold`})),Q+=20;let e=_(Math.floor((Y-2*i+16)/306),1,t.handoffs.length),n=(Y-2*i-(e-1)*16)/e,r=(e,r,i)=>O(t,e,U.get(e.id),r,i,n,R,p),a=t.handoffs.map(e=>r(e,0,0).bottom),o=a.reduce((e,t)=>e+t,0),s=0,c=Q,l=0,u=Q;t.handoffs.forEach((t,d)=>{let f=Math.min(e-1,Math.floor((l+a[d]/2)*e/o));f!==s&&(c=Q),s=f;let p=r(t,i+s*(n+16),c);Z.push(p.svg),c=p.bottom,l+=a[d],u=Math.max(u,c)}),Q=u}return D(Y,Q+i-6,t.name||t.id,L,R,Z.join(``),`map`)}var b=104,x=62,S=270,C=190,w=360,T=30,E=`Read down: the order the map lists its handoffs in. An order, not a clock: a map records no times.`;function D(e,t,n={}){let{M:r,PICTURE_WIDTH:i,carriedBy:o,drawn:s,fmt:c,frame:l,heading:u,inkFor:d,numberBadge:f,rect:p,stroke:m,styleOf:h,text:g,textWidth:_,wrap:v}=a(e),y=n.theme??`auto`,D=d(y),{sessions:O,people:k,handoffs:A,numberOf:ee}=s(t),j=[...k.length?[{id:``,name:k.length===1?`Person`:`People`,person:!0,of:k.map(e=>({id:e.id,name:e.name||e.id}))}]:[],...t.lanes.map(e=>({id:e.id,name:e.name||e.id,person:!1,of:O.filter(t=>t.lane===e.id).map(e=>({id:e.id,name:`${e.name||e.id}${(e.count??1)>1?` ×${e.count}`:``}`}))}))].filter(e=>e.of.length>0),M=j.flatMap(e=>e.of),te=Math.max(1,M.length),ne=Math.max(0,...M.flatMap(e=>e.name.split(/\s+/).map(e=>_(e,10,`bold`)))),N=Math.min(b,Math.max(x,ne+14)),P=r+te*N+14,re=Number.isFinite(n.width)?Math.min(w,Math.max(C,n.width-r-P)):S,F=P+re+r,I=new Map(M.map((e,t)=>[e.id,r+(t+.5)*N])),L=[],R=Math.min(F,i),z=u(t,R,n,D,L)-12;for(let e of v(E,R-2*r,11,3))z+=14,L.push(g(r,z,e,{size:11,fill:D(`ink-2`)}));z+=12;let B=z,ie=j.map(e=>v(e.name,e.of.length*N-14,9.5,3,`bold`)),V=M.map(e=>v(e.name,N-12,10,6,`bold`)),H=B+8+Math.max(0,...ie.map(e=>e.length))*12+3,U=9+Math.max(1,...V.map(e=>e.length))*12.5,ae=[],W=[],oe=0;j.forEach((e,t)=>{let n=r+oe*N,i=e.of.length*N,a=ie[t].map((e,t)=>g(n+i/2,B+16+t*12,e,{size:9.5,fill:D(`ink-2`),weight:`bold`,anchor:`middle`})).join(``);ae.push(t=>`<g data-${e.person?`people=""`:`lane="${e.id}"`}>${p(n+1.5,B,i-3,t-B,{fill:D(`surface-2`),stroke:D(`line`),rx:12,...e.person?{dash:`5 4`}:{}})}${a}</g>`);for(let t of e.of){let n=I.get(t.id),r=V[oe++];W.push(`<g data-${e.person?`person`:`session`}="${t.id}">${p(n-N/2+4,H,N-8,U,e.person?{fill:D(`gate-soft`),stroke:D(`gate`),rx:12,width:1.4,mark:`card`}:{fill:D(`surface`),stroke:D(`line-strong`),rx:8,mark:`card`})}${r.map((e,t)=>g(n,H+(U-r.length*12.5)/2+9.5+t*12.5,e,{size:10,fill:D(`ink`),weight:`bold`,anchor:`middle`})).join(``)}</g>`)}}),L.push(g(P,H+U/2+3.5,`Carried by, and what is handed`,{size:10,fill:D(`ink-3`)})),z=H+U+8;let G=[],se=[];A.forEach((e,n)=>{let i=h(e),a=D(i.color),s=v(o(t,e),re,10.5,3,`bold`),l=e.what?v(e.what,re,10.5,8):[],u=Math.max(T,(s.length+l.length)*13+12),d=z+u/2;n>0&&se.push(`<path d="M${c(r)},${c(z)} H${c(F-r)}" stroke-width="1" style="stroke:${D(`line`)}"/>`);let _=I.get(e.from),y=I.get(e.to),b=Math.sign(y-_),x=b===0?`M${c(_)},${c(d-6)} h20 v12 H${c(_+5.5)}`:`M${c(_)},${c(d)} H${c(y-b*5.5)}`,[S,C,w]=b===0?[_+.5,d+6,-1]:[y-b*.5,d,b],E=d-(s.length+l.length)*13/2-3;G.push(`<g data-handoff="${e.id}">${p(r-4,z+1.5,F-2*r+8,u-3,{fill:`transparent`,rx:8,mark:`row`})}<path d="${x}" ${m(i,a)}/><circle cx="${c(_)}" cy="${c(b===0?d-6:d)}" r="2.2" style="fill:${a}"/><path d="M${c(S)},${c(C)} l${c(-6.5*w)},-3.6 v7.2 z" style="fill:${a}"/>`+f(b===0?_+20:_+b*Math.min(19,Math.abs(y-_)*.42),d,String(ee.get(e.id)),a,D)+s.map(e=>g(P,E+=13,e,{size:10.5,fill:a,weight:`bold`})).join(``)+l.map(e=>g(P,E+=13,e,{size:10.5,fill:D(`ink-2`)})).join(``)+`</g>`),z+=u}),A.length===0&&(z+=T);let ce=z+6,le=M.map(e=>`<path d="M${c(I.get(e.id))},${c(H+U)} V${c(ce-6)}" stroke-width="1" style="stroke:${D(`line-strong`)}"/>`);return L.push(...ae.map(e=>e(ce)),...se,...le,...W,...G),l(F,ce+r,t.name||t.id,y,D,L.join(``),`sequence`)}var O=t(e(),1),k=`.map-views{width:-moz-fit-content;width:fit-content;margin:10px auto 12px}.map-views .seg{min-width:min(104px,27vw)}.map-views-note{text-align:center;max-width:44ch;color:var(--ink-3);margin:-4px auto 12px;font-size:13px}.map-picture.is-sequence{max-width:min(100%, calc(var(--map-units) * 1.25));overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch;overflow-x:auto}.map-picture.is-sequence svg{min-width:var(--map-units)}.map-picture [data-picture=sequence] [data-handoff]:is(.is-on,.is-hot,:focus-visible)>rect[data-row]{fill-opacity:.6;fill:var(--accent-soft)!important}@media (min-width:1100px){.is-wide .map-stage{scrollbar-gutter:stable}.is-wide .map-picture.is-sequence{max-width:min(100%, calc(var(--map-units) * 1.25));overflow-x:auto}.is-wide .map-picture.is-sequence svg{min-width:calc(var(--map-units) * .85)}.is-wide .map-picture [data-picture=sequence] :is([data-handoff],[data-plate],[data-number]){opacity:1!important}.map-side .map-list{align-content:start}}`,A=i(),ee=document.createElement(`style`);ee.textContent=k,document.head.append(ee);var j,M=[[`picture`,`Picture`],[`sequence`,`Sequence`],[`space`,`3D`]],te=1.3,ne=(e,t)=>{let n=Number(/viewBox="0 0 ([\d.]+)/.exec(e)?.[1]??0);return{svg:e,sequence:t,style:t?{"--map-units":`${n}px`}:{maxWidth:`${Math.round(n*te)}px`}}};function N({map:e,kit:t,wide:i,stage:a,onDrawn:o,live:s,at:c}){let[l,u]=(0,O.useState)(`picture`),[d,f]=(0,O.useState)(`picture`),[p,m]=(0,O.useState)(j),[h,g]=(0,O.useState)(),_=d===`sequence`,v=l===`space`&&p?p:void 0,b=(0,O.useRef)(d);b.current=d;let x=e=>{if(u(e),e!==`space`)return f(e);p||n(`space`,()=>r(()=>import(`./space-DWgrlnfB.js`),[])).then(e=>m(j=e),()=>(m(null),u(e=>e===`space`?b.current:e)))};F(a.current),(0,O.useEffect)(()=>I(a.current)),(0,O.useLayoutEffect)(()=>{let e=a.current;if(!e)return;let t=()=>{let t=getComputedStyle(e);g(Math.max(0,Math.floor((e.clientWidth-parseFloat(t.paddingLeft)-parseFloat(t.paddingRight))/20)*20))};if(t(),typeof ResizeObserver!=`function`)return;let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]);let S=(0,O.useMemo)(()=>v?``:(_?D:y)(t,e,i&&h?{width:h}:{}),[e,i,_,h,v]),C=!h||h<640?3:h<900?4:6,w=(0,O.useMemo)(()=>v?.plan(t,e,{per:C,...s?{live:s}:{},...c?{at:c}:{}}),[e,v,C,s,c]);(0,O.useLayoutEffect)(()=>o(w?{svg:w.html,sequence:!1,style:{}}:i||_?ne(S,_):void 0),[S,i,_,w]);let T=(0,O.useRef)(void 0),E=(0,O.useRef)(void 0);return(0,O.useEffect)(()=>{let e=w&&a.current?.querySelector(`.space`)||void 0;(e!==E.current?.el||e&&w!==E.current?.made)&&(E.current?.off(),E.current=e&&v&&w?{el:e,made:w,off:v.attach(e,w,T.current??=v.held(),x)}:void 0)}),(0,O.useEffect)(()=>()=>E.current?.off(),[]),(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(`div`,{className:`segmented map-views`,role:`radiogroup`,"aria-label":`View of the map`,children:M.map(([e,t])=>(0,A.jsx)(`button`,{type:`button`,role:`radio`,"aria-checked":l===e,className:l===e?`seg seg-on`:`seg`,onClick:()=>x(e),children:t},e))}),p===null?(0,A.jsx)(`p`,{className:`map-views-note`,role:`status`,children:`The view in three dimensions could not be fetched. The picture and the sequence show the same map.`}):null]})}var P,re=[`session`,`person`,`handoff`,`handoff-row`];function F(e){let t=e?.contains(document.activeElement)?document.activeElement:null,n=re.find(e=>t?.hasAttribute(`data-${e}`));P=n?`[data-${n}="${CSS.escape(t.getAttribute(`data-${n}`))}"]`:t?.closest(`.space`)?t.dataset.do?`.space [data-do="${t.dataset.do}"]`:t.matches(`input`)?`.space input`:t.matches(`.space-scene`)?`.space-scene`:void 0:void 0}function I(e){if(!P||document.activeElement!==document.body)return;let t=e?.querySelector(P);P.startsWith(`[`)&&t?.setAttribute(`tabindex`,`0`),t?.focus({preventScroll:!0})}export{N as Views,ne as drawn};
1
+ import{a as e,c as t,n,r,t as i}from"./index-CeaKwKuU.js";function a(e){let[t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,x,S,C,w,T,E,D,O,k]=e;return{BADGE_R:t,M:n,PAD:r,SLOT:i,TRACK:a,TRACK_MIN:o,PICTURE_WIDTH:s,assignTracks:c,badgeHalf:l,carriedBy:u,drawn:d,fmt:f,frame:p,handoffRow:m,heading:h,inkFor:g,laneHead:_,numberBadge:v,numberRing:y,numberText:b,personCard:x,placeNumber:S,rect:C,sessionCard:w,stroke:T,styleOf:E,text:D,textWidth:O,wrap:k}}var o=168,s=150,c=9,l=18,u=10,d=11,f=5.5,p=3,m=2.5,h=150,g=340,_=(e,t,n)=>Math.max(t,Math.min(n,e));function v(e){let t=[];for(let n of e){let e=t[t.length-1],r=t[t.length-2];e&&e[0]===n[0]&&e[1]===n[1]||(e&&r&&(r[0]===e[0]&&e[0]===n[0]||r[1]===e[1]&&e[1]===n[1])&&t.pop(),t.push(n))}return t}function y(e,t,n={}){let{BADGE_R:r,M:i,PAD:y,SLOT:b,TRACK:x,TRACK_MIN:S,assignTracks:C,badgeHalf:w,drawn:T,fmt:E,frame:D,handoffRow:O,heading:k,inkFor:A,laneHead:ee,numberRing:j,numberText:M,personCard:te,placeNumber:ne,rect:N,sessionCard:P,stroke:re,styleOf:F,text:I}=a(e),L=n.theme??`auto`,R=A(L),z=t.lanes,B=z.length,{sessions:ie,people:V,handoffs:H,numberOf:U}=T(t),ae=z.map(e=>ie.filter(t=>t.lane===e.id)),W=new Map;V.forEach((e,t)=>W.set(e.id,{lane:-1,k:t})),ae.forEach((e,t)=>e.forEach((e,n)=>W.set(e.id,{lane:t,k:n})));let oe=H.map(e=>[W.get(e.from),W.get(e.to)]),G=z.map(()=>[0,0]),se=z.map(()=>!1);for(let[e,t]of oe)e.lane>=0&&t.lane>=0&&e.lane!==t.lane?(G[e.lane][+(e.lane<t.lane)]++,G[t.lane][+(t.lane<e.lane)]++):e.lane<0!=t.lane<0&&(se[Math.max(e.lane,t.lane)]=!0);let ce=G.map(([e,t])=>e<=t?0:1),le=G.map(([e,t],n)=>se[n]?1-ce[n]:+(t<=e)),ue=[],de=[],fe=H.map((e,t)=>{let[n,r]=oe[t],i=(e,t,n,r)=>ue[ue.push({g:e,group:t,lo:Math.min(n,r),hi:Math.max(n,r),t:0})-1],a=(n,r,i,a)=>de[de.push({id:n?e.from:e.to,other:n?e.to:e.from,side:r,lean:i,run:a,arc:t,from:n,y:0})-1];if(n.lane<0&&r.lane<0)return{};if(n.lane<0||r.lane<0){let e=n.lane<0?r:n,t=ce[e.lane],o=a(n.lane>=0,t,-1,i(e.lane+t,t?0:2,-1,e.k));return n.lane<0?{to:o}:{from:o}}if(n.lane===r.lane){let e=le[n.lane],t=i(n.lane+e,e?0:2,n.k,r.k);return{from:a(!0,e,Math.sign(r.k-n.k),t),to:a(!1,e,Math.sign(n.k-r.k),t)}}let o=+(n.lane<r.lane);if(Math.abs(n.lane-r.lane)===1){let e=i(Math.max(n.lane,r.lane),1,0,0);return{from:a(!0,o,0,e),to:a(!1,1-o,0,e)}}return{from:a(!0,o,-1,i(n.lane+o,o?0:2,-1,n.k)),to:a(!1,1-o,-1,i(r.lane+1-o,o?2:0,-1,r.k))}}),pe=Array.from({length:B+1},()=>[0,0,0]);for(let e=0;e<=B;e++)for(let t of[0,2]){let n=ue.filter(n=>n.g===e&&n.group===t),{tracks:r,count:i}=C(n.map(e=>({from:e.lo,to:e.hi})));n.forEach((e,t)=>e.t=r[t]),pe[e][t]=i}for(let e of ue)e.group===1&&(e.t=pe[e.g][1]++);let me=pe.map(e=>e[0]+e[1]+e[2]),he=me.reduce((e,t)=>e+Math.max(0,t-1),0),ge=e=>e===0&&V.length?l:c,_e=e=>me[e]?ge(e)+(e===B&&V.length?l:c):e>0&&e<B?u:0,ve=2*i+B*2*y+me.reduce((e,t,n)=>e+_e(n),0),ye=x,K=o,be=n.width;if(be!==void 0&&Number.isFinite(be)&&B>0){let e=e=>(be-ve-he*e)/B;e(x)<s&&he&&(ye=_((be-ve-B*s)/he,S,x)),K=_(e(ye),s,o)}let xe=[],q=[],J=i;for(let e=0;e<=B;e++)xe.push(J),J+=_e(e)+Math.max(0,me[e]-1)*ye,e<B&&(q.push(J),J+=K+2*y);let Y=Math.max(J+i,g,V.length?2*(i+y)+V.length*h+(V.length-1)*8:0),Se=(Y-J-i)/2;q.forEach((e,t)=>q[t]=e+Se);let X=e=>Se+xe[e.g]+ge(e.g)+(e.group===0?e.t:e.group===1?pe[e.g][0]+e.t:me[e.g]-1-e.t)*ye,Z=[],Ce=[],Q=k(t,Y,n,R,Z),we=new Map,Te=Q;if(V.length>0){let e=Q,t=(Y-2*i-2*y-(V.length-1)*8)/V.length,n=V.map(e=>te(e,t,0,R,p)),r=Math.max(...n.map(e=>e.height));V.forEach((a,o)=>{let s=i+y+o*(t+8);we.set(a.id,[s,s+t]),Ce.push(n[o].draw(s,e+y+21.5,r))}),Te=e+y+21.5+r,Q=Te+y,Z.push(`<g data-people="">${N(i,e,Y-2*i,Q-e,{fill:R(`surface-2`),stroke:R(`line`),rx:12,dash:`5 4`})}${I(i+y+2,e+y+12,V.length===1?`Person`:`People`,{size:12.5,fill:R(`ink`),weight:`bold`})}</g>`)}let Ee=V.map(()=>[]),De=e=>(we.get(V[e].id)[0]+we.get(V[e].id)[1])/2;H.forEach((e,t)=>{let[n,r]=oe[t],{from:i,to:a}=fe[t];n.lane<0&&Ee[n.k].push({arc:t,end:0,toward:a?X(a.run):n.k===r.k?NaN:De(r.k)}),r.lane<0&&Ee[r.k].push({arc:t,end:1,toward:i?X(i.run):n.k===r.k?NaN:De(n.k)})});let Oe=H.map(()=>[0,0]),ke=ue.map(X);V.forEach((e,t)=>{let[n,r]=we.get(e.id),i=e=>e>=n+9.5&&e<=r-9.5,a=_((r-n-16)/(Ee[t].filter(e=>!i(e.toward)).length+1),3,b),o=[],s=(e,t)=>{let i=_(e,n+8,r-8);for(let e=a;e>=1.5;e/=2)for(let a=i;a>=n+8&&a<=r-8;a+=t)if(ke.every(t=>Math.abs(t-a)>=Math.min(5,e))&&o.every(t=>Math.abs(t-a)>=e-.01))return o.push(a),a;return o.push(i),i};for(let e of Ee[t]){let a=e.toward;Oe[e.arc][e.end]=i(a)?a:Number.isNaN(a)?s(De(t)+(e.end?7:-7),e.end?1:-1):a<n+9.5?s(n+12,1):s(r-12,-1)}});let Ae=H.map((e,t)=>{let{from:n,to:r}=fe[t];if(!(n&&r&&n.run===r.run))return[n?X(n.run):Oe[t][0],r?X(r.run):Oe[t][1]]}),je=Ae.flatMap((e,t)=>e&&e[0]!==e[1]?[{arc:t,from:e[0],to:e[1]}]:[]),Me=C(je,6),$=Q+(Me.count?20+(Me.count-1)*d:V.length?10:0),Ne=new Map(je.map((e,t)=>[e.arc,$-10-Me.tracks[t]*d])),Pe=z.map((e,t)=>ee(e,q[t]+y,K,$+y+12,R,p)),Fe=Math.max($+y,...Pe.map(e=>e.cardsTop)),Ie=new Map;for(let e of de)(Ie.get(e.id)??Ie.set(e.id,[[],[]]).get(e.id))[e.side].push(e);let Le=new Map,Re=Fe;ae.forEach((e,r)=>{let i=Fe;for(let a of e){let e=Ie.get(a.id)??[[],[]],o=P(t,a,K,Math.max(e[0].length,e[1].length),R,n,p);Le.set(a.id,{x:q[r]+y,y:i,h:o.height}),Ce.push(o.draw(q[r]+y,i)),i+=o.height+(o.family?14:8)}e.length===0&&(Pe[r].svg.push(I(q[r]+y+2,Fe+12,`no sessions`,{size:10.5,fill:R(`ink-3`)})),i+=20),Re=Math.max(Re,i+y-8)}),z.forEach((e,t)=>Z.push(`<g data-lane="${e.id}">${N(q[t],$,K+2*y,Re-$,{fill:R(`surface-2`),stroke:R(`line`),rx:12})}${Pe[t].svg.join(``)}</g>`)),Z.push(...Ce),Q=B>0?Re+10:$;let ze=e=>Le.get(e).y+Le.get(e).h/2,Be=e=>e.lean?-e.lean*e.run.t:e.run.group===1?ze(e.other):-1/0;for(let[e,t]of Ie)for(let n of t)n.sort((e,t)=>e.lean-t.lean||Be(e)-Be(t)||e.arc-t.arc||(e.from?-1:1)),n.forEach((t,r)=>t.y=ze(e)+(r-(n.length-1)/2)*b+(t.side?-2.5:m));for(let e=1;e<B;e++){let t=fe.flatMap(({from:t,to:n})=>t&&n&&t.run===n.run&&t.run.g===e&&t.run.group===1?[t.side?{run:t.run,left:t.y,right:n.y}:{run:t.run,left:n.y,right:t.y}]:[]),n=e=>e.right<e.left;t.sort((e,t)=>Number(n(t))-Number(n(e))||(n(e)?e.left-t.left:t.left-e.left));let r=(e,t)=>Math.abs(e.left-t.right)<2;for(let e=0;e<t.length;e++)for(let n=e+1;n<t.length;n++)r(t[n],t[e])&&!r(t[e],t[n])&&([t[e],t[n]]=[t[n],t[e]]);t.forEach((e,t)=>e.run.t=t)}let Ve=e=>[Le.get(e.id).x+(e.side?K:0),e.y],He=H.map((e,t)=>{let{from:n,to:r}=fe[t];if(n&&r&&n.run===r.run)return v([Ve(n),[X(n.run),n.y],[X(r.run),r.y],Ve(r)]);let[i,a]=Ae[t],o=Ne.get(t)??$,s=(e,t)=>e?[Ve(e),[t,e.y]]:[[t,Te]];return v([...s(n,i),[i,o],[a,o],...s(r,a).reverse()])}),Ue=He.flatMap((e,t)=>e.slice(1).flatMap((n,r)=>n[1]===e[r][1]?[{y:n[1],from:Math.min(n[0],e[r][0]),to:Math.max(n[0],e[r][0]),of:t}]:[])),We=He.flatMap((e,t)=>e.slice(1).flatMap((n,r)=>n[0]===e[r][0]?[{y:n[0],from:Math.min(n[1],e[r][1]),to:Math.max(n[1],e[r][1]),of:t}]:[])),Ge=[],Ke=[],qe=[],Je=[],Ye=[];if(H.forEach((e,t)=>{let n=He[t],i=F(e),a=R(i.color),o=String(U.get(e.id)),s=n.length-2;if(s<0)return;let c=e=>Math.abs(n[e+1][0]-n[e][0])+Math.abs(n[e+1][1]-n[e][1]),l=e=>n[e][0]===n[e+1][0],u=n.map((e,t)=>t===0||t>s?0:Math.min(6,c(t-1)/2,c(t)/2)),d=e=>{let t=-1;for(let n=0;n<=s;n++)l(n)===e&&(t<0||c(n)>c(t))&&(t=n);return t},p=d(!1),m=d(!0);p>=0&&(m<0||c(m)<24&&c(p)>=40)&&(m=-1);let h=w(o),[g,_,v]=[0,0,!1];if(m>=0){let[e,i]=[n[m][1],n[m+1][1]],a=Math.sign(i-e);g=n[m][0],_=ne(g,e,i,h,t,Ge,Ue),Ke.push({x:_,y:g,half:r}),v=(_-a*r-(e+a*u[m]))*a>=0&&(i-a*(m===s?f:u[m+1])-(_+a*r))*a>=0}else p>=0&&(_=n[p][1],g=ne(_,n[p][0],n[p+1][0],r,t,Ke,We),Ge.push({x:g,y:_,half:h}));let y=`M${E(n[0][0])},${E(n[0][1])}`,b=0,x=0;for(let e=0;e<=s;e++){let[t,i]=n[e+1];b=Math.sign(t-n[e][0]),x=Math.sign(i-n[e][1]);let a=e===s?f:u[e+1];v&&e===m&&(y+=` L${E(g)},${E(_-x*r)} M${E(g)},${E(_+x*r)}`),y+=` L${E(t-b*a)},${E(i-x*a)}`,e<s&&(y+=` Q${E(t)},${E(i)} ${E(t+Math.sign(n[e+2][0]-t)*a)},${E(i+Math.sign(n[e+2][1]-i)*a)}`)}let[S,C]=[n[s+1][0]-.5*b,n[s+1][1]-.5*x],T=`<path d="M${E(S)},${E(C)} L${E(S-6.5*b-3.6*x)},${E(C-6.5*x-3.6*b)} L${E(S-6.5*b+3.6*x)},${E(C-6.5*x+3.6*b)} z" style="fill:${a}"/>`,D=`<circle cx="${E(n[0][0])}" cy="${E(n[0][1])}" r="2.2" style="fill:${a}"/>`,O=`<g data-plate="${e.id}">${j(g,_,o,a,R)}</g>`;v&&qe.push(O),Je.push(`<g data-handoff="${e.id}"><path d="${y}" ${re(i,a)}/>${D}${T}</g>${v?``:O}`),Ye.push(`<g data-number="${e.id}">${M(g,_,o,R)}</g>`)}),Z.push(...qe,...Je,...Ye),t.handoffs.length>0){Q+=6,Z.push(I(i,Q+11,`Handoffs`,{size:12.5,fill:R(`ink`),weight:`bold`})),Q+=20;let e=_(Math.floor((Y-2*i+16)/306),1,t.handoffs.length),n=(Y-2*i-(e-1)*16)/e,r=(e,r,i)=>O(t,e,U.get(e.id),r,i,n,R,p),a=t.handoffs.map(e=>r(e,0,0).bottom),o=a.reduce((e,t)=>e+t,0),s=0,c=Q,l=0,u=Q;t.handoffs.forEach((t,d)=>{let f=Math.min(e-1,Math.floor((l+a[d]/2)*e/o));f!==s&&(c=Q),s=f;let p=r(t,i+s*(n+16),c);Z.push(p.svg),c=p.bottom,l+=a[d],u=Math.max(u,c)}),Q=u}return D(Y,Q+i-6,t.name||t.id,L,R,Z.join(``),`map`)}var b=104,x=62,S=270,C=190,w=360,T=30,E=`Read down: the order the map lists its handoffs in. An order, not a clock: a map records no times.`;function D(e,t,n={}){let{M:r,PICTURE_WIDTH:i,carriedBy:o,drawn:s,fmt:c,frame:l,heading:u,inkFor:d,numberBadge:f,rect:p,stroke:m,styleOf:h,text:g,textWidth:_,wrap:v}=a(e),y=n.theme??`auto`,D=d(y),{sessions:O,people:k,handoffs:A,numberOf:ee}=s(t),j=[...k.length?[{id:``,name:k.length===1?`Person`:`People`,person:!0,of:k.map(e=>({id:e.id,name:e.name||e.id}))}]:[],...t.lanes.map(e=>({id:e.id,name:e.name||e.id,person:!1,of:O.filter(t=>t.lane===e.id).map(e=>({id:e.id,name:`${e.name||e.id}${(e.count??1)>1?` ×${e.count}`:``}`}))}))].filter(e=>e.of.length>0),M=j.flatMap(e=>e.of),te=Math.max(1,M.length),ne=Math.max(0,...M.flatMap(e=>e.name.split(/\s+/).map(e=>_(e,10,`bold`)))),N=Math.min(b,Math.max(x,ne+14)),P=r+te*N+14,re=Number.isFinite(n.width)?Math.min(w,Math.max(C,n.width-r-P)):S,F=P+re+r,I=new Map(M.map((e,t)=>[e.id,r+(t+.5)*N])),L=[],R=Math.min(F,i),z=u(t,R,n,D,L)-12;for(let e of v(E,R-2*r,11,3))z+=14,L.push(g(r,z,e,{size:11,fill:D(`ink-2`)}));z+=12;let B=z,ie=j.map(e=>v(e.name,e.of.length*N-14,9.5,3,`bold`)),V=M.map(e=>v(e.name,N-12,10,6,`bold`)),H=B+8+Math.max(0,...ie.map(e=>e.length))*12+3,U=9+Math.max(1,...V.map(e=>e.length))*12.5,ae=[],W=[],oe=0;j.forEach((e,t)=>{let n=r+oe*N,i=e.of.length*N,a=ie[t].map((e,t)=>g(n+i/2,B+16+t*12,e,{size:9.5,fill:D(`ink-2`),weight:`bold`,anchor:`middle`})).join(``);ae.push(t=>`<g data-${e.person?`people=""`:`lane="${e.id}"`}>${p(n+1.5,B,i-3,t-B,{fill:D(`surface-2`),stroke:D(`line`),rx:12,...e.person?{dash:`5 4`}:{}})}${a}</g>`);for(let t of e.of){let n=I.get(t.id),r=V[oe++];W.push(`<g data-${e.person?`person`:`session`}="${t.id}">${p(n-N/2+4,H,N-8,U,e.person?{fill:D(`gate-soft`),stroke:D(`gate`),rx:12,width:1.4,mark:`card`}:{fill:D(`surface`),stroke:D(`line-strong`),rx:8,mark:`card`})}${r.map((e,t)=>g(n,H+(U-r.length*12.5)/2+9.5+t*12.5,e,{size:10,fill:D(`ink`),weight:`bold`,anchor:`middle`})).join(``)}</g>`)}}),L.push(g(P,H+U/2+3.5,`Carried by, and what is handed`,{size:10,fill:D(`ink-3`)})),z=H+U+8;let G=[],se=[];A.forEach((e,n)=>{let i=h(e),a=D(i.color),s=v(o(t,e),re,10.5,3,`bold`),l=e.what?v(e.what,re,10.5,8):[],u=Math.max(T,(s.length+l.length)*13+12),d=z+u/2;n>0&&se.push(`<path d="M${c(r)},${c(z)} H${c(F-r)}" stroke-width="1" style="stroke:${D(`line`)}"/>`);let _=I.get(e.from),y=I.get(e.to),b=Math.sign(y-_),x=b===0?`M${c(_)},${c(d-6)} h20 v12 H${c(_+5.5)}`:`M${c(_)},${c(d)} H${c(y-b*5.5)}`,[S,C,w]=b===0?[_+.5,d+6,-1]:[y-b*.5,d,b],E=d-(s.length+l.length)*13/2-3;G.push(`<g data-handoff="${e.id}">${p(r-4,z+1.5,F-2*r+8,u-3,{fill:`transparent`,rx:8,mark:`row`})}<path d="${x}" ${m(i,a)}/><circle cx="${c(_)}" cy="${c(b===0?d-6:d)}" r="2.2" style="fill:${a}"/><path d="M${c(S)},${c(C)} l${c(-6.5*w)},-3.6 v7.2 z" style="fill:${a}"/>`+f(b===0?_+20:_+b*Math.min(19,Math.abs(y-_)*.42),d,String(ee.get(e.id)),a,D)+s.map(e=>g(P,E+=13,e,{size:10.5,fill:a,weight:`bold`})).join(``)+l.map(e=>g(P,E+=13,e,{size:10.5,fill:D(`ink-2`)})).join(``)+`</g>`),z+=u}),A.length===0&&(z+=T);let ce=z+6,le=M.map(e=>`<path d="M${c(I.get(e.id))},${c(H+U)} V${c(ce-6)}" stroke-width="1" style="stroke:${D(`line-strong`)}"/>`);return L.push(...ae.map(e=>e(ce)),...se,...le,...W,...G),l(F,ce+r,t.name||t.id,y,D,L.join(``),`sequence`)}var O=t(e(),1),k=`.map-views{width:-moz-fit-content;width:fit-content;margin:10px auto 12px}.map-views .seg{min-width:min(104px,27vw)}.map-views-note{text-align:center;max-width:44ch;color:var(--ink-3);margin:-4px auto 12px;font-size:13px}.map-picture.is-sequence{max-width:min(100%, calc(var(--map-units) * 1.25));overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch;overflow-x:auto}.map-picture.is-sequence svg{min-width:var(--map-units)}.map-picture [data-picture=sequence] [data-handoff]:is(.is-on,.is-hot,:focus-visible)>rect[data-row]{fill-opacity:.6;fill:var(--accent-soft)!important}@media (min-width:1100px){.is-wide .map-stage{scrollbar-gutter:stable}.is-wide .map-picture.is-sequence{max-width:min(100%, calc(var(--map-units) * 1.25));overflow-x:auto}.is-wide .map-picture.is-sequence svg{min-width:calc(var(--map-units) * .85)}.is-wide .map-picture [data-picture=sequence] :is([data-handoff],[data-plate],[data-number]){opacity:1!important}.map-side .map-list{align-content:start}}`,A=i(),ee=document.createElement(`style`);ee.textContent=k,document.head.append(ee);var j,M=[[`picture`,`Picture`],[`sequence`,`Sequence`],[`space`,`3D`]],te=1.3,ne=(e,t)=>{let n=Number(/viewBox="0 0 ([\d.]+)/.exec(e)?.[1]??0);return{svg:e,sequence:t,style:t?{"--map-units":`${n}px`}:{maxWidth:`${Math.round(n*te)}px`}}};function N({map:e,kit:t,wide:i,stage:a,onDrawn:o,live:s,at:c}){let[l,u]=(0,O.useState)(`picture`),[d,f]=(0,O.useState)(`picture`),[p,m]=(0,O.useState)(j),[h,g]=(0,O.useState)(),_=d===`sequence`,v=l===`space`&&p?p:void 0,b=(0,O.useRef)(d);b.current=d;let x=e=>{if(u(e),e!==`space`)return f(e);p||n(`space`,()=>r(()=>import(`./space-DWgrlnfB.js`),[])).then(e=>m(j=e),()=>(m(null),u(e=>e===`space`?b.current:e)))};F(a.current),(0,O.useEffect)(()=>I(a.current)),(0,O.useLayoutEffect)(()=>{let e=a.current;if(!e)return;let t=()=>{let t=getComputedStyle(e);g(Math.max(0,Math.floor((e.clientWidth-parseFloat(t.paddingLeft)-parseFloat(t.paddingRight))/20)*20))};if(t(),typeof ResizeObserver!=`function`)return;let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]);let S=(0,O.useMemo)(()=>v?``:(_?D:y)(t,e,i&&h?{width:h}:{}),[e,i,_,h,v]),C=!h||h<640?3:h<900?4:6,w=(0,O.useMemo)(()=>v?.plan(t,e,{per:C,...s?{live:s}:{},...c?{at:c}:{}}),[e,v,C,s,c]);(0,O.useLayoutEffect)(()=>o(w?{svg:w.html,sequence:!1,style:{}}:i||_?ne(S,_):void 0),[S,i,_,w]);let T=(0,O.useRef)(void 0),E=(0,O.useRef)(void 0);return(0,O.useEffect)(()=>{let e=w&&a.current?.querySelector(`.space`)||void 0;(e!==E.current?.el||e&&w!==E.current?.made)&&(E.current?.off(),E.current=e&&v&&w?{el:e,made:w,off:v.attach(e,w,T.current??=v.held(),x)}:void 0)}),(0,O.useEffect)(()=>()=>E.current?.off(),[]),(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(`div`,{className:`segmented map-views`,role:`radiogroup`,"aria-label":`View of the map`,children:M.map(([e,t])=>(0,A.jsx)(`button`,{type:`button`,role:`radio`,"aria-checked":l===e,className:l===e?`seg seg-on`:`seg`,onClick:()=>x(e),children:t},e))}),p===null?(0,A.jsx)(`p`,{className:`map-views-note`,role:`status`,children:`The view in three dimensions could not be fetched. The picture and the sequence show the same map.`}):null]})}var P,re=[`session`,`person`,`handoff`,`handoff-row`];function F(e){let t=e?.contains(document.activeElement)?document.activeElement:null,n=re.find(e=>t?.hasAttribute(`data-${e}`));P=n?`[data-${n}="${CSS.escape(t.getAttribute(`data-${n}`))}"]`:t?.closest(`.space`)?t.dataset.do?`.space [data-do="${t.dataset.do}"]`:t.matches(`input`)?`.space input`:t.matches(`.space-scene`)?`.space-scene`:void 0:void 0}function I(e){if(!P||document.activeElement!==document.body)return;let t=e?.querySelector(P);P.startsWith(`[`)&&t?.setAttribute(`tabindex`,`0`),t?.focus({preventScroll:!0})}export{N as Views,ne as drawn};
@@ -1 +1 @@
1
- {"app":"grooph","version":"0.4.0"}
1
+ {"app":"grooph","version":"0.4.1"}
@@ -29,12 +29,12 @@
29
29
  <link rel="preload" as="font" type="font/woff2" crossorigin media="not all" href="/grooph/assets/fonts/atkinson-hyperlegible-mono.v1.woff2" />
30
30
  <link rel="preload" as="image" media="not all" href="/grooph/assets/site-icons.v1.svg" />
31
31
  <title>grooph: loop graphs for coding agents</title>
32
- <script>if(!/^#\/embed(\?|$)/.test(location.hash)){for(const h of ["/grooph/assets/base-CeJeskZg.css","/grooph/assets/styles-BA1aVO9R.css","/grooph/assets/App-Cv1auMeh.css","/grooph/assets/screens-DWbqIw6l.css"]){const l=document.createElement("link");l.rel="stylesheet";l.href=h;document.head.appendChild(l)}const r=document.createElement("link").relList,m=r&&r.supports&&r.supports("modulepreload");for(const h of ["/grooph/assets/App-CFO6bPna.js","/grooph/assets/share-BzIzB4EY.js","/grooph/assets/templates-DvzLa5sE.js","/grooph/assets/runs-DcjRi7S6.js"].concat(/^#\/(g\/|open\?|run|live|templates\/)/.test(location.hash)?["/grooph/assets/screens-YUd2HaLm.js"]:[],/^#\/templates(?:$|\/built-in\/[^/?]+(?:\/use)?$)/.test(location.hash)?["/grooph/assets/builtins-Cbs5iQtH.js"]:[],/^(?!#\/(?:run\?live$|live$|run\/[^?]+$|templates$|embed(?:\?|$)|templates\/(?:built-in|yours|plan)\/[^/?]+(?:\/use)?$|g\/[^/?]+(?:\?new)?$|open\?))/.test(location.hash)?["/grooph/assets/front-BRl7rl-u.js"]:[])){const l=document.createElement("link");if(m)l.rel="modulepreload";else{l.rel="preload";l.as="script";l.crossOrigin=""}l.href=h;document.head.appendChild(l)}}void ["/grooph/assets/compile-BAvi-rd0.js","/grooph/assets/groups-CjEPiwfv.js","/grooph/assets/views-DCEDX6Qx.js","/grooph/assets/space-DWgrlnfB.js","/grooph/assets/units-DRaa5U2m.js","/grooph/assets/Import-YEKofx4_.js","/grooph/assets/graph-views-tFUJK-be.js","/grooph/assets/themes-DtOBrLk0.js","/grooph/assets/brakes-9E9PsV_Z.js","/grooph/assets/EmbedApp-B5LWao3x.js","/grooph/assets/EmbedApp-CWb_HGpW.css","/grooph/assets/graph-stage-CWh3OWga.js","/grooph/assets/graph-more-BKW9C4-h.js","/grooph/assets/builtins-Cbs5iQtH.js","/grooph/assets/front-BRl7rl-u.js","/grooph/assets/offline-Byh4d-Wf.js","/grooph/assets/ExportPanel-VWus7GM3.js","/grooph/assets/plan-templates-BQu8G2sX.js"]</script>
32
+ <script>if(!/^#\/embed(\?|$)/.test(location.hash)){for(const h of ["/grooph/assets/base-CeJeskZg.css","/grooph/assets/styles-BA1aVO9R.css","/grooph/assets/App-Cv1auMeh.css","/grooph/assets/screens-DWbqIw6l.css"]){const l=document.createElement("link");l.rel="stylesheet";l.href=h;document.head.appendChild(l)}const r=document.createElement("link").relList,m=r&&r.supports&&r.supports("modulepreload");for(const h of ["/grooph/assets/App-48y1Ec5B.js","/grooph/assets/share-BzIzB4EY.js","/grooph/assets/templates-CoNTzuuz.js","/grooph/assets/runs-DcjRi7S6.js"].concat(/^#\/(g\/|open\?|run|live|templates\/)/.test(location.hash)?["/grooph/assets/screens-aIjMSzZg.js"]:[],/^#\/templates(?:$|\/built-in\/[^/?]+(?:\/use)?$)/.test(location.hash)?["/grooph/assets/builtins-D_22fKRF.js"]:[],/^(?!#\/(?:run\?live$|live$|run\/[^?]+$|templates$|embed(?:\?|$)|templates\/(?:built-in|yours|plan)\/[^/?]+(?:\/use)?$|g\/[^/?]+(?:\?new)?$|open\?))/.test(location.hash)?["/grooph/assets/front-BRl7rl-u.js"]:[])){const l=document.createElement("link");if(m)l.rel="modulepreload";else{l.rel="preload";l.as="script";l.crossOrigin=""}l.href=h;document.head.appendChild(l)}}void ["/grooph/assets/compile-BAvi-rd0.js","/grooph/assets/groups-CjEPiwfv.js","/grooph/assets/views-CLwg5VNv.js","/grooph/assets/space-DWgrlnfB.js","/grooph/assets/units-DOIUgOIU.js","/grooph/assets/Import-ByMI7Uz9.js","/grooph/assets/graph-views-COQF_QTQ.js","/grooph/assets/themes-DtOBrLk0.js","/grooph/assets/brakes-BJPDrrJT.js","/grooph/assets/EmbedApp-390Z2d4x.js","/grooph/assets/EmbedApp-CWb_HGpW.css","/grooph/assets/graph-stage-BkrQGQ-z.js","/grooph/assets/graph-more-393HTgQE.js","/grooph/assets/builtins-D_22fKRF.js","/grooph/assets/front-BRl7rl-u.js","/grooph/assets/offline-Byh4d-Wf.js","/grooph/assets/ExportPanel-Ca3wBB38.js","/grooph/assets/plan-templates-BQu8G2sX.js"]</script>
33
33
  <!-- The theme chosen in the header, before the first paint: ?theme= wins and is kept. An embed has its own colors. -->
34
34
  <script>
35
35
  (() => { if (/^#\/embed(\?|$)/.test(location.hash)) return; const ids = ["grooph", "meteor"]; let id = new URLSearchParams(location.search).get("theme"); try { if (ids.includes(id)) localStorage.setItem("groophTheme", id); else id = localStorage.getItem("groophTheme"); } catch {} if (ids.indexOf(id) > 0) document.documentElement.dataset.theme = id; })();
36
36
  </script>
37
- <script type="module" crossorigin src="/grooph/assets/index-BoSi6XYh.js"></script>
37
+ <script type="module" crossorigin src="/grooph/assets/index-CeaKwKuU.js"></script>
38
38
  </head>
39
39
  <body>
40
40
  <div id="root"></div>
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "entry": [
3
- "assets/index-BoSi6XYh.js"
3
+ "assets/index-CeaKwKuU.js"
4
4
  ],
5
5
  "app": {
6
6
  "js": [
7
- "assets/App-CFO6bPna.js",
7
+ "assets/App-48y1Ec5B.js",
8
8
  "assets/share-BzIzB4EY.js",
9
- "assets/templates-DvzLa5sE.js",
9
+ "assets/templates-CoNTzuuz.js",
10
10
  "assets/runs-DcjRi7S6.js"
11
11
  ],
12
12
  "css": [
@@ -18,28 +18,28 @@
18
18
  },
19
19
  "canvas": {
20
20
  "js": [
21
- "assets/screens-YUd2HaLm.js"
21
+ "assets/screens-aIjMSzZg.js"
22
22
  ],
23
23
  "css": []
24
24
  },
25
25
  "later": [
26
26
  "assets/compile-BAvi-rd0.js",
27
27
  "assets/groups-CjEPiwfv.js",
28
- "assets/views-DCEDX6Qx.js",
28
+ "assets/views-CLwg5VNv.js",
29
29
  "assets/space-DWgrlnfB.js",
30
- "assets/units-DRaa5U2m.js",
31
- "assets/Import-YEKofx4_.js",
32
- "assets/graph-views-tFUJK-be.js",
30
+ "assets/units-DOIUgOIU.js",
31
+ "assets/Import-ByMI7Uz9.js",
32
+ "assets/graph-views-COQF_QTQ.js",
33
33
  "assets/themes-DtOBrLk0.js",
34
- "assets/brakes-9E9PsV_Z.js",
35
- "assets/EmbedApp-B5LWao3x.js",
34
+ "assets/brakes-BJPDrrJT.js",
35
+ "assets/EmbedApp-390Z2d4x.js",
36
36
  "assets/EmbedApp-CWb_HGpW.css",
37
- "assets/graph-stage-CWh3OWga.js",
38
- "assets/graph-more-BKW9C4-h.js",
39
- "assets/builtins-Cbs5iQtH.js",
37
+ "assets/graph-stage-BkrQGQ-z.js",
38
+ "assets/graph-more-393HTgQE.js",
39
+ "assets/builtins-D_22fKRF.js",
40
40
  "assets/front-BRl7rl-u.js",
41
41
  "assets/offline-Byh4d-Wf.js",
42
- "assets/ExportPanel-VWus7GM3.js",
42
+ "assets/ExportPanel-Ca3wBB38.js",
43
43
  "assets/plan-templates-BQu8G2sX.js"
44
44
  ],
45
45
  "space": [
@@ -47,7 +47,7 @@
47
47
  ],
48
48
  "embed": {
49
49
  "js": [
50
- "assets/EmbedApp-B5LWao3x.js",
50
+ "assets/EmbedApp-390Z2d4x.js",
51
51
  "assets/share-BzIzB4EY.js"
52
52
  ],
53
53
  "css": [
@@ -55,25 +55,25 @@
55
55
  ]
56
56
  },
57
57
  "templates": [
58
- "assets/builtins-Cbs5iQtH.js"
58
+ "assets/builtins-D_22fKRF.js"
59
59
  ],
60
60
  "front": [
61
61
  "assets/front-BRl7rl-u.js"
62
62
  ],
63
63
  "more": [
64
- "assets/graph-more-BKW9C4-h.js"
64
+ "assets/graph-more-393HTgQE.js"
65
65
  ],
66
66
  "stage": [
67
- "assets/graph-stage-CWh3OWga.js"
67
+ "assets/graph-stage-BkrQGQ-z.js"
68
68
  ],
69
69
  "views": [
70
- "assets/graph-views-tFUJK-be.js"
70
+ "assets/graph-views-COQF_QTQ.js"
71
71
  ],
72
72
  "offline": [
73
73
  "assets/offline-Byh4d-Wf.js"
74
74
  ],
75
75
  "exporting": [
76
- "assets/ExportPanel-VWus7GM3.js"
76
+ "assets/ExportPanel-Ca3wBB38.js"
77
77
  ],
78
78
  "plans": [
79
79
  "assets/plan-templates-BQu8G2sX.js"