flowfig 0.11.0 → 0.12.0
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/README.md +148 -21
- package/dist/atlas.js +6 -2
- package/dist/browser.d.ts +1 -0
- package/dist/browser.js +9 -4
- package/dist/check.d.ts +2 -2
- package/dist/check.js +135 -5
- package/dist/cli.js +174 -70
- package/dist/diff.d.ts +2 -0
- package/dist/diff.js +79 -24
- package/dist/element-looks.js +4 -0
- package/dist/element-world.js +6 -0
- package/dist/element.d.ts +27 -0
- package/dist/element.js +67 -0
- package/dist/explain.d.ts +45 -0
- package/dist/explain.js +161 -0
- package/dist/frames.d.ts +34 -0
- package/dist/frames.js +117 -0
- package/dist/index.js +283 -131
- package/dist/load.js +9 -4
- package/dist/looks.d.ts +15 -0
- package/dist/looks.js +32 -0
- package/dist/mcp.d.ts +4 -0
- package/dist/mcp.js +14 -6
- package/dist/model.d.ts +97 -0
- package/dist/model.js +182 -1
- package/dist/scene.d.ts +2 -0
- package/dist/source.d.ts +4 -2
- package/dist/source.js +15 -9
- package/dist/svg.d.ts +12 -0
- package/dist/svg.js +235 -75
- package/dist/verify.d.ts +6 -0
- package/dist/verify.js +104 -56
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/world-art.d.ts +59 -0
- package/dist/world-art.js +854 -0
- package/dist/world.d.ts +233 -0
- package/dist/world.js +1577 -0
- package/package.json +9 -3
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{J as e,T as t,W as n,a as r,c as i,i as a,j as o,nt as s,o as c,r as l,s as u,t as d}from"./element-looks.js";var f=40*Math.cos(Math.PI/6),p=(e,t,n=0)=>[(e-t)*f,(e+t)*20-n*40],m=e=>Math.round(e*10)/10,h=e=>e.map(([e,t])=>`${m(e)},${m(t)}`).join(` `),g=(e,t,n=``)=>`<polygon points="${h(e)}" fill="${t}" ${n}/>`,_=4.6,v=5.4,y=6,b=8,x=8.6,S=1.6,C={ground:`#E8ECE3`,lawn:`#DDE6D4`,yard:`#D3DFC8`,walk:`#F4F5F0`,seam:`#E2E5DC`,curb:`#C3C8CE`,road:`#8A919B`,dash:`#EEF0F2`,glass:`#2a3446`,glassR:`#222a39`,light:`#f2b544`,lightR:`#d99a2b`,leaf:`#7DB27A`,leafD:`#5E9660`,trunk:`#6b5a49`,ink:`#141A22`,post:`#3b4252`,ao:`rgba(20,26,34,.11)`},w={brick:{l:`#c96a4b`,r:`#a4513a`,t:`#d6c0ab`,e:`#6e3424`,tex:`#b65d41`,texR:`#934733`,cap:`#f6ecdb`,capR:`#dccdb4`,fr:`#f3e8d6`,frR:`#d9cbb3`},stone:{l:`#e9dcc0`,r:`#cbbd9f`,t:`#d9cfb8`,e:`#8f8064`,tex:`#d6c8a8`,texR:`#b6a888`,cap:`#fbf7ee`,capR:`#ddd3bf`,fr:`#7d7058`,frR:`#6a5e48`},green:{l:`#86a581`,r:`#678663`,t:`#c3cac1`,e:`#3c533d`,tex:`#76946f`,texR:`#587553`,cap:`#eef0ea`,capR:`#cdd3ca`,fr:`#eef0ea`,frR:`#cdd3ca`},slate:{l:`#434b5a`,r:`#2e3440`,t:`#5a6372`,e:`#14181e`,tex:`#515a6a`,texR:`#3a414d`,cap:`#717a8a`,capR:`#5a6271`,fr:`#6b7484`,frR:`#555d6b`},pale:{l:`#e3e8ef`,r:`#c3ccd8`,t:`#d3dae4`,e:`#5d6878`,tex:`#d2d9e3`,texR:`#b3bdcb`,cap:`#f5f7fa`,capR:`#dce2ea`,fr:`#9aa5b5`,frR:`#818c9c`},clay:{l:`#e7d3b4`,r:`#c9b292`,t:`#d9c8ad`,e:`#7f6a4c`,tex:`#dbc5a3`,texR:`#b9a282`,cap:`#f8f0e1`,capR:`#ddd0b9`,fr:`#f8f0e1`,frR:`#ddd0b9`,roof:`#7a4f3a`,roofB:`#5f3c2c`},sand:{l:`#d8c49a`,r:`#b9a57c`,t:`#ccbf9f`,e:`#6f6043`,tex:`#cab68c`,texR:`#a9966e`,cap:`#f3ead6`,capR:`#d6cbb2`,fr:`#f3ead6`,frR:`#d6cbb2`},marble:{l:`#ece8df`,r:`#cfc9bc`,t:`#dfdacf`,e:`#7e776a`,tex:`#e0dbd0`,texR:`#bdb6a8`,cap:`#faf8f3`,capR:`#ddd8cc`,fr:`#5e584d`,frR:`#4e493f`},concrete:{l:`#cfd2cc`,r:`#b0b4ad`,t:`#c3c7c0`,e:`#5b6058`,tex:`#c2c6bf`,texR:`#a2a69f`,cap:`#eef0ec`,capR:`#d1d4ce`,fr:`#eef0ec`,frR:`#d1d4ce`},plain:{l:`#dcd8cf`,r:`#bfbab0`,t:`#d0ccc3`,e:`#716b60`,tex:`#cfcbc1`,texR:`#b0aba1`,cap:`#f6f4ef`,capR:`#d9d5cd`,fr:`#f6f4ef`,frR:`#d9d5cd`}},T=(e,t,n,r,i,a,o=``)=>g([p(e,n,i),p(t,n,i),p(t,r,i),p(e,r,i)],a,o),E=(e,t,n,r,i,a,o=``)=>g([p(t,e,r),p(n,e,r),p(n,e,i),p(t,e,i)],a,o),D=(e,t,n,r,i,a,o=``)=>g([p(e,t,r),p(e,n,r),p(e,n,i),p(e,t,i)],a,o),O=e=>`stroke="${e}" stroke-opacity=".55" stroke-width="1" stroke-linejoin="round"`,k=(e,t,n,r,i,a,o,s,c,l)=>{let u=l?O(l):``;return E(t+i,e,e+r,n,n+a,s,u)+D(e+r,t,t+i,n,n+a,c,u)+T(e,e+r,t,t+i,n+a,o,u)},A=(e,t,n,r,i,a,o)=>k(e,t,n,r,i,a,o.t,o.l,o.r,o.e),j=(e,t,n,r=1,i=``)=>`<line x1="${m(e[0])}" y1="${m(e[1])}" x2="${m(t[0])}" y2="${m(t[1])}" stroke="${n}" stroke-width="${r}" ${i}/>`,M=(e,t=28)=>Array.from({length:t},(n,r)=>e(r/t*Math.PI*2)),N=(e,t,n,r,i,a=``)=>g(M(i=>p(e+r*Math.cos(i),t+r*Math.sin(i),n)),i,a),P=(e,t,n,r)=>T(e-.05,e+n+.45,t-.05,t+r+.22,0,C.ao),F=(e,t,n,r,i,a,o)=>{let s=``;for(let c=r+a;c<i-.02;c+=a)s+=j(p(t,e,c),p(n,e,c),o,1);return s},I=(e,t,n,r,i,a,o)=>{let s=``;for(let c=r+a;c<i-.02;c+=a)s+=j(p(e,t,c),p(e,n,c),o,1);return s},L=(e,t,n,r,i,a,o)=>{let s=``;for(let c=t+a;c<n-.02;c+=a)s+=j(p(c,e,r),p(c,e,i),o,1);return s},R=(e,t,n,r,i,a,o)=>{let s=``;for(let c=t+a;c<n-.02;c+=a)s+=j(p(e,c,r),p(e,c,i),o,1);return s},z=(e,t,n,r,i,a)=>[[e,t,n],[e+r,t,n],[e,t+i,n],[e+r,t+i,n]].flatMap(([e,t])=>[[e,t,n],[e,t,n+a]]);function B(e,t,n,r,i,a,o,s=2,c=!0){let l=.05,u=E(t,n,r,i,a,e.fr)+E(t,n+l,r-l,i+l,a-l,o?C.light:C.glass);for(let o=1;o<s;o++){let c=n+(r-n)*o/s;u+=j(p(c,t,i+l),p(c,t,a-l),e.fr,1.5)}if(c){let o=i+(a-i)*.68;u+=j(p(n+l,t,o),p(r-l,t,o),e.fr,1.5)}return u+E(t,n-.03,r+.03,i-.06,i,e.cap)}function V(e,t,n,r,i,a,o,s=2,c=!0){let l=.05,u=D(t,n,r,i,a,e.frR)+D(t,n+l,r-l,i+l,a-l,o?C.lightR:C.glassR);for(let o=1;o<s;o++){let c=n+(r-n)*o/s;u+=j(p(t,c,i+l),p(t,c,a-l),e.frR,1.5)}if(c){let o=i+(a-i)*.68;u+=j(p(t,n+l,o),p(t,r-l,o),e.frR,1.5)}return u+D(t,n-.03,r+.03,i-.06,i,e.capR)}function H(e,t,n,r,i,a,o=.12){let s=T(e,e+n,t,t+r,i,a.cap,O(a.e));return s+=T(e+o,e+n-o,t+o,t+r-o,i-.1,a.t),s+=E(t+o,e+o,e+n-o,i-.1,i,a.tex)+D(e+o,t+o,t+r-o,i-.1,i,a.texR),s+=T(e,e+n,t+r-o,t+r,i,a.cap)+T(e+n-o,e+n,t,t+r,i,a.cap),s}var ee=(e,t,n,r=.8,i=.7,a=.35)=>k(e,t,n,r,i,a,`#e4e6e9`,`#cfd3d8`,`#aeb4bc`,`#6b717a`),U=(e,t,n,r,i)=>E(t,n,r,0,i,e.fr)+E(t,n+.06,r-.06,0,i-.05,C.glass)+E(t,(n+r)/2-.02,(n+r)/2+.02,0,i-.05,e.fr),te=(e,t,n,r,i,a,o)=>{let s=E(e,t-.05,n+.05,0,r+.05,i)+E(e,t,n,0,r,a);for(let i=.1;i<r-.05;i+=.105)s+=E(e,t,n,i,i+.035,o);return s};function ne(e,t){let n=w.clay,r=1.15,i=.95,a=.16,o=t+3,s=e+3,c=t+3/2,l=P(e,t,3,3)+A(e,t,0,3,3,r,n);l+=F(o,e,s,0,r,.13,n.tex)+I(s,t,o,0,r,.13,n.texR),l+=E(o,e,s,0,.1,n.texR)+D(s,t,o,0,.1,n.e,`fill-opacity=".35"`),l+=E(o,e+.3,e+.9,0,.92,`#5b3a2a`)+E(o,e+.36,e+.84,0,.86,`#6f4733`)+`<circle cx="${m(p(e+.76,o,.45)[0])}" cy="${m(p(e+.76,o,.45)[1])}" r="1.6" fill="${C.light}"/>`,l+=E(o,e+.22,e+.98,.92,.98,n.cap),l+=B(n,o,e+1.3,e+2,.32,.86,!0,2,!1)+B(n,o,e+2.2,e+2.8,.32,.86,!1,2,!1),l+=V(n,s,t+.45,t+1.15,.32,.86,!0,2,!1)+V(n,s,t+1.85,t+2.55,.32,.86,!1,2,!1),l+=g([p(e-a,t-a,r),p(s+a,t-a,r),p(s+a,c,2.0999999999999996),p(e-a,c,2.0999999999999996)],n.roofB),l+=g([p(s,t,r),p(s,o,r),p(s,c,2.0999999999999996)],n.r,O(n.e))+I(s,t+.5,o-.5,r,1.625,.13,n.texR),l+=V(n,s,c-.22,c+.22,1.3299999999999998,1.7,!0,1,!1),l+=g([p(e-a,o+a,r),p(s+a,o+a,r),p(s+a,c,2.0999999999999996),p(e-a,c,2.0999999999999996)],n.roof,O(n.e));for(let t=1;t<6;t++){let u=t/6;l+=j(p(e-a,o+a-(o+a-c)*u,r+i*u),p(s+a,o+a-(o+a-c)*u,r+i*u),n.roofB,1)}return l+=j(p(e-a,c,2.0999999999999996),p(s+a,c,2.0999999999999996),`#3e271c`,2),l+=k(e+.55,c+.25,1.7389999999999999,.36,.36,.611,`#9c4f3a`,`#8a4433`,`#6f3628`,`#4a241a`)+k(e+.5,c+.2,2.5999999999999996,.46,.46,.08,`#b9b0a2`,`#a39a8c`,`#8a8274`),{svg:l,ant:[e+2.5,c,2.0999999999999996],pts:[...z(e-a,t-a,0,3.32,3.32,r),[e-a,c,2.0999999999999996],[s+a,c,2.0999999999999996],[e+.5,c+.2,2.6999999999999997],[e+.96,c+.66,2.6999999999999997]]}}function W(e,t){let n=w.brick,r=1.5,i=t+3,a=e+3,o=P(e,t,3,3)+A(e,t,0,3,3,r,n);o+=F(i,e,a,0,r,.12,n.tex)+I(a,t,i,0,r,.12,n.texR),o+=E(i,e,a,0,.12,n.r)+D(a,t,i,0,.12,n.e,`fill-opacity=".5"`),o+=E(i,e+1.05,e+1.95,0,1,n.fr)+E(i,e+1.11,e+1.89,0,.94,C.glass)+E(i,e+1.49,e+1.51,0,.94,n.fr)+E(i,e+1.17,e+1.83,.72,.88,C.light),o+=B(n,i,e+.2,e+.85,.3,.95,!0,2,!1)+B(n,i,e+2.15,e+2.8,.3,.95,!0,2,!1);for(let t=0;t<7;t++){let r=e+.12+t*.395,a=r+.395;o+=g([p(r,i,1.14),p(a,i,1.14),p(a,i+.38,1),p(r,i+.38,1)],t%2?`#9c4632`:`#f6ecdb`,O(n.e))}return o+=g([p(e+.12,i+.38,1),p(e+2.89,i+.38,1),p(e+2.89,i+.38,.94),p(e+.12,i+.38,.94)],`#7c3626`),o+=V(n,a,t+.4,t+1.1,.45,1,!1)+V(n,a,t+1.5,t+2.2,.45,1,!0),o+=H(e,t,3,3,1.62,n),o+=ee(e+.4,t+.5,1.52)+ee(e+1.95,t+1.75,1.52,.45,.45,.24),{svg:o,ant:[e+2.5,t+.7,1.62],pts:z(e,t,0,3,3,1.9)}}function re(e,t,n){let r=w.stone,i=.04+1.38*n,a=t+3,o=e+3,s=P(e,t,3,3)+A(e,t,0,3,3,i,r);s+=F(a,e,o,0,i,.2,r.tex)+I(o,t,a,0,i,.2,r.texR);for(let i=1;i<n;i++)s+=E(a,e,o,i*1.38-.04,i*1.38+.06,r.cap)+D(o,t,a,i*1.38-.04,i*1.38+.06,r.capR);s+=E(a,e,o,0,.15,r.tex)+D(o,t,a,0,.15,r.texR);let c=e=>e*7%5<2;for(let i=0;i<n;i++)for(let n=0;n<4;n++){let l=.38+i*1.38,u=l+.74,d=e+.22+n*.68;(i!==0||n!==1&&n!==2)&&(s+=B(r,a,d,d+.48,l,u,c(i*4+n),2));let f=t+.22+n*.68;s+=V(r,o,f,f+.48,l,u,c(i*4+n+3),2)}s+=E(a,e+1,e+2,0,1.05,r.fr)+E(a,e+1.05,e+1.95,0,1,C.glass)+E(a,e+1.48,e+1.52,0,1,r.fr),s+=E(a,e+1.1,e+1.9,.75,.95,C.light),s+=k(e+.85,a,1.08,1.3,.45,.1,r.cap,r.cap,r.capR,r.e),s+=H(e,t,3,3,i+.12,r),s+=ee(e+1.7,t+.4,i+.02,.9,.7,.45);for(let n=0;n<3;n++)s+=E(t+1.1,e+1.8+n*.25,e+1.95+n*.25,i+.12,i+.37,`#8b939f`);return s+=k(e+.4,t+1.6,i+.02,.5,.5,.3,r.cap,r.cap,r.capR,r.e),{svg:s,ant:[e+2.4,t+2.3,i+.04],pts:z(e,t,0,3,3,i+.5)}}function ie(e,t){let n=w.green,r=1.4,i=t+2,a=e+3,o=P(e,t,3,2)+A(e,t,0,3,2,r,n);o+=L(i,e,a,0,r,.12,n.tex)+R(a,t,i,0,r,.12,n.texR),o+=E(i,e+.25,e+1.85,0,1.08,n.fr)+E(i,e+.3,e+1.8,0,1.03,`#1d222b`),o+=E(i,e+2.15,e+2.6,0,.88,n.fr)+E(i,e+2.2,e+2.55,0,.83,C.glass)+E(i,e+2.25,e+2.5,.6,.78,C.light),o+=V(n,a,t+.35,t+1.65,.55,1,!0,3,!1),o+=T(e-.05,a+.05,t-.05,i+.05,r,n.t,O(n.e));for(let n=t+.1;n<i;n+=.16)o+=j(p(e-.05,n,r),p(a+.05,n,r),`#a7b0a5`,1);o+=E(i+.05,e-.05,a+.05,1.3399999999999999,r,`#a7b0a5`)+D(a+.05,t-.05,i+.05,1.3399999999999999,r,`#8e978c`);for(let i=0;i<3;i++)o+=k(e+.4+i*.85,t+.6,r,.5,.8,.14,`#e9eee8`,`#dfe5dc`,`#c3cbc0`,n.e);return{svg:o,ant:[e+2.6,t+1.7,r],pts:z(e,t,0,3,2,1.54),depot:{x:e,y:i}}}function ae(e,t){let n=w.sand,r=1.35,i=t+3,a=e+3,o=P(e,t,3,3)+A(e,t,0,3,3,r,n);o+=L(i,e,a,0,r,.15,n.tex)+R(a,t,i,0,r,.15,n.texR);for(let t=0;t<3;t++){let r=e+.2+t*.95;o+=k(r-.04,i,0,.75,.28,.32,`#8b8f96`,`#9aa0a8`,`#767b83`,`#3b4252`),o+=te(i,r,r+.68,.86,n.fr,`#4f5866`,`#6a7482`),o+=E(i+.29,r+.02,r+.12,.12,.3,`#1d222b`)+E(i+.29,r+.56,r+.66,.12,.3,`#1d222b`)}return o+=g([p(e-.05,i,1.12),p(a+.05,i,1.12),p(a+.05,i+.3,1.06),p(e-.05,i+.3,1.06)],`#aab3be`,O(`#5b636f`)),o+=E(i+.3,e-.05,a+.05,1.01,1.06,`#7d8794`),o+=V(n,a,t+.4,t+2.6,.62,1.05,!0,4,!1),o+=H(e,t,3,3,1.4500000000000002,n),o+=k(e+.35,t+.35,1.37,2.3,.5,.18,`#e9e4d6`,`#d8d1bf`,`#bdb5a2`,n.e),o+=k(e+.35,t+1.25,1.37,2.3,.5,.18,`#e9e4d6`,`#d8d1bf`,`#bdb5a2`,n.e),{svg:o,ant:[e+2.6,t+2.4,1.37],pts:z(e,t,0,3,3.3,1.6500000000000001)}}function oe(e,t,n,r){let i=1.9,a=t+3,o=e+3,s=P(e,t,3,3)+A(e,t,0,3,3,i,n);s+=L(a,e,o,0,i,.5,n.tex)+R(o,t,a,0,i,.5,n.texR),s+=F(a,e,o,0,i,.63,n.tex)+I(o,t,a,0,i,.63,n.texR),s+=E(a,e+1.15,e+1.85,0,1.15,n.fr)+E(a,e+1.2,e+1.8,0,1.1,`#1d222b`)+E(a,e+1.49,e+1.51,0,1.1,n.fr),s+=E(a,e+1.92,e+2.04,.5,.68,`#1d222b`)+E(a,e+1.95,e+2.01,.6,.65,C.light);for(let t=0;t<6;t++)s+=E(a,e+.25,e+.95,.3+t*.17,.37+t*.17,n.e,`fill-opacity=".7"`),s+=E(a,e+2.2,e+2.8,.3+t*.17,.37+t*.17,n.e,`fill-opacity=".7"`);for(let e=0;e<4;e++){let i=t+.25+e*.68;s+=D(o,i,i+.42,.3,1.5,n.frR)+D(o,i+.04,i+.38,.34,1.46,`#1a1e26`);for(let t=0;t<5;t++)s+=D(o,i+.08,i+.14,.45+t*.22,.5+t*.22,t===2&&e===1?C.light:r)}s+=H(e,t,3,3,2.02,n),s+=k(e+.25,t+.3,1.92,.25,2.4,.08,n.cap,n.capR,n.texR);for(let[n,r]of[[e+.95,t+.55],[e+.95,t+1.65]]){s+=k(n,r,1.92,.95,.9,.32,`#c9ced6`,`#dfe3e9`,`#a9b0bb`,`#3d4659`);let e=[n+.475,r+.45];s+=N(e[0],e[1],2.25,.33,`#2a3142`)+N(e[0],e[1],2.26,.08,`#8b9099`);for(let t=0;t<3;t++){let n=t*2*Math.PI/3+.4;s+=j(p(e[0],e[1],2.26),p(e[0]+.3*Math.cos(n),e[1]+.3*Math.sin(n),2.26),`#8b9099`,1.5)}}return{svg:s,ant:[e+2.5,t+2.4,1.94],pts:z(e,t,0,3,3,2.3)}}function se(e,t){let n=w.marble,r=1.55,i=t+3,a=e+3,o=P(e,t,3,3.5);o+=k(e-.1,t-.1,0,3.2,3.6,.08,n.cap,n.tex,n.texR,n.e)+k(e-.05,t-.05,.08,3.1,3.35,.08,n.cap,n.tex,n.texR,n.e),o+=A(e,t,.16,3,3,1.3900000000000001,n),o+=I(a,t,i,.16,r,.24,n.texR),o+=E(i,e+1.15,e+1.85,.16,1.1,n.fr)+E(i,e+1.2,e+1.8,.16,1.05,`#3a352d`)+E(i,e+1.49,e+1.51,.16,1.05,n.fr);for(let t of[e+.18,e+.68,e+2.08,e+2.58])o+=E(i+.25,t,t+.26,.16,1.45,`#f7f4ee`)+E(i+.25,t+.18,t+.26,.16,1.45,`#d8d2c5`),o+=k(t-.03,i+.12,.16,.32,.16,.06,n.cap,n.tex,n.texR)+k(t-.03,i+.12,1.4100000000000001,.32,.16,.06,n.cap,n.tex,n.texR);for(let e=0;e<4;e++){let r=t+.35+e*.62;o+=D(a,r,r+.16,.45,1.25,n.frR)}o+=g([p(e-.05,i+.3,r),p(a+.05,i+.3,r),p(a+.05,t,r),p(e-.05,t,r)],n.cap,O(n.e)),o+=k(e-.05,t,1.45,3.1,3.3,.12,n.cap,n.tex,n.texR,n.e);let s=1.57;return o+=g([p(e,i+.3,s),p(a,i+.3,s),p(e+3/2,i+.3,2.09)],n.l,O(n.e))+g([p(e+.3,i+.3,1.6300000000000001),p(a-.3,i+.3,1.6300000000000001),p(e+3/2,i+.3,1.9700000000000002)],n.tex),o+=g([p(a,i+.3,s),p(e+3/2,i+.3,2.09),p(e+3/2,t+.2,2.09),p(a,t+.2,s)],n.r,O(n.e)),o+=T(e+.15,e+3/2-.1,t+.4,t+1.2,s,n.t),{svg:o,ant:[e+2.3,t+.7,1.57],pts:[...z(e-.1,t-.1,0,3.2,3.6,1.6500000000000001),[e+3/2,i+.3,2.09],[e+3/2,t+.2,2.09]]}}function ce(e,t){let n=w.concrete,r=1.25,i=t+3,a=e+3,o=P(e,t,3,3)+A(e,t,0,3,3,r,n);o+=L(i,e,a,0,r,.5,n.tex)+R(a,t,i,0,r,.5,n.texR),o+=te(i,e+.3,e+1.3,.95,n.fr,`#5a6b5f`,`#71837a`),o+=B(n,i,e+1.65,e+2.75,.55,.98,!0,3,!1)+V(n,a,t+.3,t+2.7,.55,.98,!0,4,!1);let s=n=>k(e+2.35,t+.25,0,.36,.36,n,`#a5503b`,`#93463a`,`#743628`,`#4a241a`)+k(e+2.31,t+.21,n,.44,.44,.08,`#6b717a`,`#5a6170`,`#454b57`);o+=T(e,a,t,i,r,n.t,O(n.e));for(let i=0;i<3;i++){let c=t+i,l=c+1;o+=g([p(e,c,r),p(a,c,r),p(a,l,1.8),p(e,l,1.8)],`#8f97a1`,O(`#3b4252`)),o+=E(l,e,a,r,1.8,`#2a3446`)+L(l,e,a,r,1.8,.3,`#5d6b80`),o+=g([p(a,c,r),p(a,l,r),p(a,l,1.8)],n.r,O(n.e)),i===0&&(o+=s(3))}return{svg:o,ant:[e+2.75,t+2.95,1.8],pts:[...z(e,t,0,3,3,1.8),[e+2.31,t+.21,3.08],[e+2.75,t+.65,3.08]]}}function le(e,t){let n=w.concrete,r=t+3,i=P(e+.2,t+1.3,2,1.7)+A(e+.2,t+1.3,0,2,1.7,1.05,n);i+=E(r,e+.9,e+1.5,0,.85,n.fr)+E(r,e+.95,e+1.45,0,.8,`#5b636f`)+E(r,e+.4,e+.7,.5,.75,`#2e3440`)+L(r,e+.4,e+.7,.5,.75,.06,`#5b636f`),i+=D(e+2.2,t+1.6,t+2.6,.55,.8,`#2e3440`)+R(e+2.2,t+1.6,t+2.6,.55,.8,.08,`#5b636f`),i+=H(e+.2,t+1.3,2,1.7,1.12,n,.08);let a=[e+1.6,t+.15],o=1.1,s=4.6,c=a[0]+o/2,l=a[1]+o/2,u=(e,t,n)=>{let r=o+n/s*-.8600000000000001;return[c+e*r/2,l+t*r/2,n]},d=`#4d5666`,f=e=>p(...e),h=``;for(let[e,t]of[[-1,-1],[1,-1],[-1,1],[1,1]])h+=j(f(u(e,t,0)),f(u(e,t,s)),d,2.2);let g=[0,.75,1.5,2.25,3,3.7,s];for(let e=0;e<g.length-1;e++)h+=j(f(u(-1,1,g[e])),f(u(1,1,g[e+1])),d,1.2)+j(f(u(1,1,g[e])),f(u(-1,1,g[e+1])),d,1.2),h+=j(f(u(1,-1,g[e])),f(u(1,1,g[e+1])),d,1.2)+j(f(u(1,1,g[e])),f(u(1,-1,g[e+1])),d,1.2),h+=j(f(u(-1,1,g[e+1])),f(u(1,1,g[e+1])),d,1.4)+j(f(u(1,-1,g[e+1])),f(u(1,1,g[e+1])),d,1.4);for(let[e,t]of[[0,.17],[.17,0],[.12,.12]])h+=k(c+e-.05,l+t-.05,3.55,.1,.1,.65,`#eef0f2`,`#dfe3e8`,`#b9c0ca`,`#5b636f`);let _=p(c+.15,l+.35,2.7);h+=`<ellipse cx="${m(_[0]+3)}" cy="${m(_[1])}" rx="7" ry="10" fill="#c9ced6" stroke="#5b636f" stroke-width="1"/><ellipse cx="${m(_[0]+4)}" cy="${m(_[1])}" rx="2" ry="3" fill="#5b636f"/>`;let v=f(u(0,0,s));return h+=j(v,[v[0],v[1]-14],d,1.6)+`<circle cx="${m(v[0])}" cy="${m(v[1]-15)}" r="3" fill="#D63B2F"/>`,i=`<ellipse cx="${m(p(c,l)[0]+6)}" cy="${m(p(c,l)[1]+2)}" rx="34" ry="12" fill="${C.ao}"/>`+h+i,{svg:i,ant:[c,l,5.05],own:!0,pts:[...z(e+.2,t+1.3,0,2,1.7,1.12),u(-1,-1,0),u(1,1,0),u(1,-1,0),[c,l,5.05]]}}function ue(e,t){let n=w.plain,r=1.6,i=t+3,a=e+3,o=P(e,t,3,3)+A(e,t,0,3,3,r,n);o+=F(i,e,a,0,r,.4,n.tex)+I(a,t,i,0,r,.4,n.texR),o+=U(n,i,e+1.15,e+1.85,.95)+E(i,e+1.05,e+1.95,.95,1.02,`#9a9488`),o+=B(n,i,e+.3,e+.9,.35,.85,!0,2,!1)+B(n,i,e+2.1,e+2.7,.35,.85,!1,2,!1),o+=B(n,i,e+.3,e+.9,1.05,1.42,!1,2,!1)+B(n,i,e+1.2,e+1.8,1.05,1.42,!0,2,!1)+B(n,i,e+2.1,e+2.7,1.05,1.42,!1,2,!1);for(let e=0;e<3;e++){let r=t+.3+e*.9;o+=V(n,a,r,r+.55,.35,.85,e===1,2,!1)+V(n,a,r,r+.55,1.05,1.42,e===2,2,!1)}return o+=H(e,t,3,3,1.7000000000000002,n),o+=ee(e+1.6,t+.5,1.62,.7,.6,.3),{svg:o,ant:[e+2.4,t+2.3,1.62],pts:z(e,t,0,3,3,1.9500000000000002)}}var de=([e,t,n])=>{let r=p(e,t,n),i=p(e,t,n+.8),a=`#3b4252`,o=`<ellipse cx="${m(r[0])}" cy="${m(r[1])}" rx="4" ry="2" fill="${a}"/>`+j(r,i,a,2);return o+=j(p(e-.16,t,n+.6),p(e+.16,t,n+.6),a,1.6)+j(p(e,t-.16,n+.45),p(e,t+.16,n+.45),a,1.6),o+`<circle cx="${m(i[0])}" cy="${m(i[1])}" r="3.4" fill="#ffffff" stroke="#3B4252" stroke-width="2"/>`},fe={person:ne,phone:ne,shop:W,desk:(e,t)=>re(e,t,2),team:(e,t)=>re(e,t,3),truck:ie,queue:ae,server:(e,t)=>oe(e,t,w.slate,`#6f95e3`),cloud:(e,t)=>oe(e,t,w.pale,`#3d7be0`),cabinet:se,gear:ce,tower:le};function pe(e,t,n=1,r=0){let[i,a]=p(e,t,0),o=`<ellipse cx="${m(i+6*n)}" cy="${m(a+2)}" rx="${m(13*n)}" ry="${m(6*n)}" fill="${C.ao}"/>`;o+=k(e-.06,t-.06,0,.12,.12,.4*n,C.trunk,C.trunk,`#574837`);let[s,c]=p(e,t,.4*n);if(r===0){let e=15*n;o+=`<circle cx="${m(s)}" cy="${m(c-e+4)}" r="${m(e)}" fill="${C.leafD}"/>`,o+=`<circle cx="${m(s-e*.2)}" cy="${m(c-e+4-e*.2)}" r="${m(e*.78)}" fill="${C.leaf}"/>`}else{let e=44*n,t=14*n;o+=g([[s,c-e],[s+t,c+2],[s,c+6*n]],C.leafD),o+=g([[s,c-e],[s,c+6*n],[s-t,c+2]],C.leaf)}return o}var me=(e,t,n)=>{let[r,i]=p(e,t,0),a=n*40;return`<ellipse cx="${m(r+3)}" cy="${m(i+1)}" rx="${m(a*1.15)}" ry="${m(a*.5)}" fill="${C.ao}"/><circle cx="${m(r)}" cy="${m(i-a*.62)}" r="${m(a*.72)}" fill="${C.leafD}"/><circle cx="${m(r-a*.16)}" cy="${m(i-a*.74)}" r="${m(a*.52)}" fill="${C.leaf}"/>`};function he(e){let t=e.slice().sort((e,t)=>e[0]-t[0]||e[1]-t[1]),n=(e,t,n)=>(t[0]-e[0])*(n[1]-e[1])-(t[1]-e[1])*(n[0]-e[0]),r=[],i=[];for(let e of t){for(;r.length>=2&&n(r[r.length-2],r[r.length-1],e)<=0;)r.pop();r.push(e)}for(let e of t.slice().reverse()){for(;i.length>=2&&n(i[i.length-2],i[i.length-1],e)<=0;)i.pop();i.push(e)}return r.slice(0,-1).concat(i.slice(0,-1))}function ge(e,t,n,r=0){let i=e.length,a=(i-1)*n+44,o=[];for(let e=0,t=0,n=0;r&&e<i;e++)o.push([t,n+7]),e%2?t+=r:n+=r;let s=r>0,c=e.map((e,t)=>s?o[t][0]-5.4:t*n),l=e.map((e,t)=>s?o[t][1]-7:0),u=``,d=[],f=[];if(s){let e=o[i-1],t=[[e[0],e[0]+(i%2?0:40),e[1],e[1]+(i%2?40:0)]];o.forEach(([e,n],r)=>{let[a,s]=o[r+1]??[e,n];r<i-1&&t.push([e,a,n,s]),(!r||r%2)&&t.push([c[r]-2,e,n,n])}),u=T(Math.min(...c)-40,Math.max(...c)+44,-40,Math.max(...l)+60,0,C.lawn);for(let[e,n]of[[1.6,C.walk],[1.05,C.curb],[1,C.road]])for(let[r,i,a,o]of t)u+=T(r-e,i+e,a-e,o+e,0,n);for(let[e,n,r,i]of t)for(let t=1.6;t<Math.max(n-e,i-r)-1.6;t+=1.2){let a=Math.min(t+.6,Math.max(n-e,i-r)-1.6);u+=r===i?T(e+t,e+a,r-.03,r+.03,0,C.dash):T(e-.03,e+.03,r+t,r+a,0,C.dash)}let n=(e,n)=>t.every(([t,r,i,a])=>e<t-2.5||e>r+2.5||n<i-2.5||n>a+2.5)&&c.every((t,r)=>e<t-1.4||e>t+4.4||n<l[r]+1.6-1.4||n>l[r]+_+1.4);c.forEach((e,t)=>{for(let[r,i]of[[-4.6,-1.6],[7.4,-1.6],[4.6,4],[-3,9]])n(e+r,l[t]+i)&&d.push([e+r+l[t]+i,pe(e+r,l[t]+i)])})}else{u=T(-40,a,-40,4.449999999999999,0,C.lawn)+T(-40,a,x,60,0,C.lawn);for(let e of c)for(let[t,n,r,i]of[[-7.5,-2.5,10.5,15],[3,8,10.8,14.6],[-6,-1.5,-6,.6]])u+=T(e+t,e+n,r,i,0,C.yard)}c.forEach((e,t)=>u+=T(e-.3,e+3.3,4.449999999999999+l[t],v+l[t],0,C.yard));let h=(e,t,n,r)=>{let i=``;for(let a=Math.ceil(e*2)/2;a<t;a+=.5)i+=j(p(a,n),p(a,r),C.seam,1);return i};if(!s){u+=T(-40,a,v,y,0,C.walk)+h(-40,a,v,y),u+=T(-40,a,b,x,0,C.walk)+h(-40,a,b,x),u+=T(-40,a,y,b,0,C.road),u+=T(-40,a,y,6.05,0,C.curb)+T(-40,a,7.95,b,0,C.curb);for(let e=-40;e<a;e+=1.2)u+=T(e,e+.6,7.18,7.24,0,C.dash)}c.forEach((e,t)=>u+=T(e+1.05,e+1.95,_+l[t],v+l[t],0,C.walk)+h(e+1.05,e+1.95,_+l[t],v+l[t])),e.forEach((e,n)=>{let r=c[n],i=l[n]+S,a=(e&&fe[e]||ue)(r,i),o=[a.ant[0],a.ant[1],a.ant[2]+(a.own?0:.8)];t[n]&&!a.own&&(a.svg+=de(a.ant));let s=he((t[n]?[...a.pts,o]:a.pts).map(e=>p(...e))).map(([e,t])=>[m(e),m(t)]),u=s.reduce((e,t)=>t[1]<e[1]?t:e),h=p(r,i,1.5),[g,_]=p(...o);f.push({x:r,y:l[n],hull:s,tag:[m(h[0]),m(u[1])],door:r+1.5,depot:a.depot??null,roof:t[n]?[m(g),m(_)]:null}),d.push([r+1.5+i+1.5,`<g class="bld" id="b-${n}">${a.svg}</g>`])});for(let e of s?[]:c){for(let[t,n,r,i]of[[-4.6,-1.6,1,0],[7.4,-1.6,1,0],[4.6,13.2,1,0]])d.push([e+t+n,pe(e+t,n,r,i)]);for(let[t,n]of[[-4.2,.34],[4.2,.36]])d.push([e+t+9.2,me(e+t,9.15,n)])}let g=c.map((e,t)=>`<g class="pad" id="pad-${t}">${T(e-.55,e+3.55,1.05+l[t],5.1+l[t],0,`#FBFAF3`)}</g>`).join(``);return{svg:u+g+d.sort((e,t)=>e[0]-t[0]).map(e=>e[1]).join(``),lots:f,bends:o}}var _e=6.6,G=.78,ve=5.7,ye=.8,be=1.2,xe=[6.409999999999999,6.79],K={ink:`#141A22`,data:`#2456D6`,fail:`#B8322A`,muted:`#646C79`},Se={side:`#D9822B`,shade:`#B4661D`,top:`#EDAA5E`,rim:`#6E3E10`},Ce=(e,t,n=``)=>`<g${n?` id="${n}"`:``} transform="translate(${m(e[0])} ${m(e[1])})">${t}</g>`;function we(){let e=.17,t=e*Math.SQRT2*f,n=e*Math.SQRT2*20,r=.35,i=Math.sqrt(1-r*r),a=Se,o=`<path d="M${m(-t)},${m(-18.400000000000002)} L${m(-t)},0 A${m(t)} ${m(n)} 0 0 0 ${m(t)},0 L${m(t)},${m(-18.400000000000002)} Z" fill="${a.side}"/>`;o+=`<path d="M${m(r*t)},${m(-18.400000000000002+n*i)} L${m(r*t)},${m(n*i)} A${m(t)} ${m(n)} 0 0 0 ${m(t)},0 L${m(t)},${m(-18.400000000000002)} A${m(t)} ${m(n)} 0 0 1 ${m(r*t)},${m(-18.400000000000002+n*i)} Z" fill="${a.shade}"/>`;for(let e of[.3,.68])o+=`<path d="M${m(-t)},${m(-18.400000000000002*e)} A${m(t)} ${m(n)} 0 0 0 ${m(t)},${m(-18.400000000000002*e)}" fill="none" stroke="${a.rim}" stroke-opacity=".7" stroke-width="1"/>`;return o+=`<path d="M${m(-t)},${m(-18.400000000000002)} L${m(-t)},0 A${m(t)} ${m(n)} 0 0 0 ${m(t)},0 L${m(t)},${m(-18.400000000000002)}" fill="none" stroke="${a.rim}" stroke-opacity=".8" stroke-width="1"/>`,o+=`<ellipse cx="0" cy="${m(-18.400000000000002)}" rx="${m(t)}" ry="${m(n)}" fill="${a.top}" stroke="${a.rim}" stroke-width="1"/>`,o+=`<ellipse cx="0" cy="${m(-18.400000000000002)}" rx="${m(t*.74)}" ry="${m(n*.74)}" fill="none" stroke="${a.rim}" stroke-opacity=".55" stroke-width=".8"/>`,o+`<ellipse cx="${m(t*.38)}" cy="${m(-18.400000000000002-n*.1)}" rx="1.6" ry="1" fill="${a.rim}"/>`}function Te(){let e=.38,t=-.48/2,n=k(-.24,t,0,.48,.48,e,`#e3c48f`,`#c99a5b`,`#ad8046`,`#6b4a22`);return n+=T(-.035,.035,t,.24,e,`#a07a45`)+E(.24,-.035,.035,.26,e,`#a07a45`),n+=E(.24,-.18,-.03999999999999998,.08,.16,`#f4ecdc`)+E(.24,-.18,-.06999999999999998,.2,.23,`#f4ecdc`),n}function Ee(){let e=.16,t=-.28/2,n=k(-.22,t,0,.44,.28,e,`#cfe3c9`,`#7fb07a`,`#5f9160`,`#2f5a33`);n+=E(.14,-.04,.04,0,e,`#f4f6fb`)+T(-.04,.04,t,.14,e,`#f4f6fb`);for(let e of[.05,.1])n+=E(.14,-.2,.2,e,e+.012,`#5f9160`);return n}var De={barrel:we(),box:Te(),notes:Ee()};function Oe(e){let t=_e-G/2,n=6.99,r=1.78,i=.68,a=w.green,o=[`#9aa2ae`,`#7d8592`,`#646c79`,`#2a3142`],s=(e,t,n,r,i,a)=>k(e,t,i,n,r,a,o[0],o[1],o[2],o[3]),c=e=>g(Array.from({length:20},(t,n)=>{let r=n/20*Math.PI*2;return p(e+.17*Math.cos(r),7,.2+.17*Math.sin(r))}),`#1b2130`)+g(Array.from({length:14},(t,n)=>{let r=n/14*Math.PI*2;return p(e+.07*Math.cos(r),7.01,.2+.07*Math.sin(r))}),`#8b9099`),l=T(-.05,2.6,t,7.24,0,C.ao)+k(0,t,.2,2.5,G,.16,`#3a4458`,`#2a3142`,`#222838`,`#11151c`);l+=k(0,t,.36,.64,G,.72,`#a9c2a4`,a.l,a.r,a.e)+k(.06,6.27,1.08,.54,.66,.05,`#c3d2bf`,`#8fac8a`,`#6f8c6b`),l+=E(n,.1,.52,.72,.98,C.glass)+D(.64,6.29,6.91,.5,.98,`#587553`)+E(n,.08,.58,.42,.48,a.cap)+E(n,.04,.14,.52,.6,C.light),l+=s(i,t,r,.05,.43,.36)+k(i,t,.36,r,G,.07,`#8b929d`,`#6b7280`,`#5a6170`,`#2a3142`)+s(i,t,.07,G,.43,.5);let u=s(i,6.94,r,.05,.43,.13)+s(2.41,t,.05,G,.43,.2);u+=D(2.46,6.26,6.36,.48,.56,K.fail)+D(2.46,6.84,6.94,.48,.56,K.fail),u+=[.36,1.64,2.14].map(c).join(``);let d=.04,f=T(-.05,2.6,t,7.24,0,C.ao)+k(0,t,.2,2.5,G,.16,`#3a4458`,`#2a3142`,`#222838`,`#11151c`);f+=s(d,t,r,.05,.43,.36)+k(d,t,.36,r,G,.07,`#8b929d`,`#6b7280`,`#5a6170`,`#2a3142`)+s(d,t,.05,G,.43,.2);let h=s(d,6.94,r,.05,.43,.13)+s(1.75,t,.07,G,.43,.5);h+=k(1.86,t,.36,.64,G,.72,`#a9c2a4`,a.l,a.r,a.e)+k(1.9000000000000001,6.27,1.08,.54,.66,.05,`#c3d2bf`,`#8fac8a`,`#6f8c6b`),h+=D(2.5,6.31,6.890000000000001,.72,1,C.glassR)+E(n,1.98,2.4000000000000004,.72,.98,C.glass)+E(n,1.9400000000000002,2.44,.42,.48,a.cap)+E(n,2.3600000000000003,2.46,.52,.6,C.light),h+=[.36,.86,2.14].map(c).join(``);let _=[.27,.69,1.11,1.53].map(e=>i+e+.06),v=[.27,.69,1.11,1.53].map(e=>d+e-.04),y=xe.flatMap((e,t)=>_.map((n,r)=>Ce(p(n,e,.43),``,`tl`+(t*4+r)))).join(``),b=xe.flatMap((e,t)=>v.map((n,r)=>Ce(p(n,e,.43),``,`tr`+(t*4+r)))).join(``),x=he([e.x+.2,e.x+1.9].flatMap(t=>[e.y,e.y+6].flatMap(e=>[0,2.5].map(n=>p(t,e,n))))).map(e=>e.map(e=>m(e)).join(`,`)).join(` `),S=e=>g(Array.from({length:20},(t,n)=>{let r=n/20*Math.PI*2;return p(.79,e+.17*Math.cos(r),.2+.17*Math.sin(r))}),`#1b2130`)+g(Array.from({length:14},(t,n)=>{let r=n/14*Math.PI*2;return p(.8,e+.07*Math.cos(r),.2+.07*Math.sin(r))}),`#8b9099`),O=T(-.05,1.03,-.05,2.6,0,C.ao)+k(0,0,.2,G,2.5,.16,`#3a4458`,`#2a3142`,`#222838`,`#11151c`),A=O+s(0,.04,.05,1.78,.43,.36)+k(0,.04,.36,G,1.78,.07,`#8b929d`,`#6b7280`,`#5a6170`,`#2a3142`)+s(0,.04,G,.05,.43,.2),j=s(.73,.04,.05,1.78,.43,.13)+s(0,1.75,G,.07,.43,.5);j+=k(0,1.86,.36,G,.64,.72,`#a9c2a4`,a.l,a.r,a.e)+k(.06,1.92,1.08,.66,.52,.05,`#c3d2bf`,`#8fac8a`,`#6f8c6b`),j+=E(2.5,.1,.68,.72,1,C.glass)+D(G,1.95,2.4,.72,.98,C.glassR)+E(2.5,.08,.7000000000000001,.42,.48,a.cap),j+=E(2.5,.05,.16,.52,.6,C.light)+E(2.5,.62,.73,.52,.6,C.light),j+=[.36,.86,2.14].map(S).join(``);let M=O+k(0,0,.36,G,.64,.72,`#a9c2a4`,a.l,a.r,a.e)+D(G,.1,.5,.72,.98,C.glassR);M+=s(0,.68,.05,1.78,.43,.36)+k(0,.68,.36,G,1.78,.07,`#8b929d`,`#6b7280`,`#5a6170`,`#2a3142`)+s(0,.68,G,.07,.43,.5);let N=s(.73,.68,.05,1.78,.43,.13)+s(0,2.41,G,.05,.43,.2);N+=E(2.46,.05,.16,.46,.56,K.fail)+E(2.46,.62,.73,.46,.56,K.fail),N+=[.36,1.64,2.14].map(S).join(``);let P=(e,t)=>[0,1].flatMap(n=>[.27,.69,1.11,1.53].map((r,i)=>Ce(p(G/2-.19+.38*n,t+r,.43),``,e+(n*4+i)))).join(``);return{door:`<g id="depotDoor">${E(e.y+.002,e.x+.3,e.x+1.8,0,1.03,`#1d222b`)}<g id="doorPanel"></g></g>`,yard:`<clipPath id="outDoor"><polygon points="${x}"/></clipPath><g clip-path="url(#outDoor)"><g id="truckY">${A+j}</g></g>`,road:`<g id="truck" display="none"><g>${l}</g><g>${y}</g><g>${u}</g></g><g id="truckR" display="none"><g>${f}</g><g>${b}</g><g>${h}</g></g><g id="truckD" display="none">${A+P(`td`,.1)+j}</g><g id="truckU" display="none">${M+P(`tu`,.74)+N}</g>`,slots:{L:_,R:v}}}var ke=`<g class="scr" data-s="idle"><path d="M-6,-5 h12 M-6,0 h9 M-6,5 h7" stroke="${K.ink}" stroke-opacity=".4" stroke-width="1.6" stroke-linecap="round"/></g>
|
|
2
|
+
<g class="scr" data-s="tx" display="none"><circle r="8" fill="${K.data}"/><path d="M0,4V-4M-3.5,-.5L0,-4L3.5,-.5" stroke="#fff" stroke-width="1.8" fill="none" stroke-linecap="round" stroke-linejoin="round"/></g>
|
|
3
|
+
<g class="scr" data-s="in" display="none"><rect x="-7" y="-9" width="14" height="9" rx="2" fill="${K.data}"/><path d="M-6,4 h12 M-6,8 h8" stroke="${K.ink}" stroke-opacity=".4" stroke-width="1.6" stroke-linecap="round"/></g>`;function Ae(e,t){let n=`<rect x="${-e/2}" y="${-t}" width="${e}" height="${t}" rx="${m(e*.2)}" fill="${K.ink}"/>`;return n+=`<rect x="${m(-e/2+e*.09)}" y="${m(-t+t*.12)}" width="${m(e*.82)}" height="${m(t*.76)}" rx="${m(e*.08)}" fill="#F4F5F0"/>`,n+=`<rect x="${m(-e*.12)}" y="${m(-t+t*.045)}" width="${m(e*.24)}" height="${m(t*.03)}" rx="1" fill="#3b4252"/>`,`${n}<g transform="translate(0 ${m(-t/2)})">${ke}</g>`}var je={svg:Ae(26,46),w:26,h:46};function Me(e){let t=(t,n)=>k(t-.09,e.y-.09,0,.18,.18,n,`#5a6372`,`#434b5a`,`#2e3440`,`#14181e`),n=p(e.px,e.y);return`<g class="gt"><ellipse cx="${m(n[0]+4)}" cy="${m(n[1]+1)}" rx="12" ry="5" fill="${C.ao}"/>
|
|
4
|
+
${t(e.ex,.7000000000000001)}${k(e.ex-.13,e.y-.13,.7000000000000001,.26,.26,.05,`#2e3440`,`#2e3440`,`#1d222b`)}
|
|
5
|
+
${t(e.px,.92)}${k(e.px-.32,e.y-.11,.66,.24,.22,.22,`#5a6372`,`#434b5a`,`#2e3440`,`#14181e`)}
|
|
6
|
+
<line class="arm" stroke-width="5" stroke-linecap="round"/><line class="armW" stroke="#ffffff" stroke-width="5" stroke-dasharray="6 6"/><circle class="hub" r="3.5" fill="#2e3440"/></g>`}var Ne=[`box`,`barrel`,`notes`],Pe=xe.length*4,Fe=e=>Math.min(4,Math.max(1,Math.round(e??1)));function Ie(s,d=`narrow`){let p=l(s),m=n(s.layout),h=new Map(m.map(e=>[e.id,e])),g=new Map(p.flatMap((e,t)=>e.boxes.map(e=>[e,t]))),_=/* @__PURE__ */ new Map,v=e=>{for(let t of e.children){if(!o(t))continue;let e=n(t)[0];t.id&&e&&_.set(t.id,e.id),v(t)}};v(s.layout);let y=p.findIndex(e=>e.look===`truck`),b=p.map((e,t)=>t===y?`cab`:e.look===`person`||e.look===`phone`?`phone`:`antenna`),x=d===`stack`||d===`spread`,{svg:S,lots:C,bends:w}=ge(p.map(e=>e.look),b.map(e=>e===`antenna`),d===`wide`?8.5:10.5,x?d===`spread`?15:12:0),T=/* @__PURE__ */ new Map;for(let t of s.edges){let n=typeof t.carries==`object`?t.carries:void 0;n&&e(n.thing)&&!T.has(n.thing)&&T.set(n.thing,{form:Ne.find(e=>e===n.form)??`box`,count:Fe(n.count)})}let E=p.map((e,t)=>{let n=b[t],r=e=>C[e].hull.map(e=>e[0]),i=Math.min(...r(t)),a=t>0&&!x?Math.max(...r(t-1)):i-160,o=C[t].y,s=(i-Math.min(44,(i-a)*.28))/f+ve+o;return{name:e.name,look:e.look,device:n,lot:C[t],gate:{px:s-be/2,ex:s+be/2,y:ve+o,z:ye,L:be},port:[(i-28)/f+4.95+o,4.95+o],checks:e.boxes.some(e=>c(h.get(e)))}}),D={};p.forEach((t,n)=>t.boxes.forEach(t=>{let r=h.get(t);r&&(D[t]={label:e(r.label),actor:n,dead:r.tone===`red`||r.tone===`gray`,check:i(r),done:r.done})}));let O=(s.steps??[]).map(n=>{let i=e(n.label),o=r(s,n),c=/* @__PURE__ */ new Set,l=n=>{let r=typeof n.edge.carries==`object`&&e(n.edge.carries.thing)?n.edge.carries:void 0,i={edge:t(n.edge),from:n.source,to:n.target,label:e(n.edge.label),data:e(n.data),async:!!n.async,fail:a(h,n)};if(r){let e=r.from?h.has(r.from)?r.from:_.get(r.from):n.source;i.carry={thing:r.thing,...T.get(r.thing),from:g.get(e??``)??-1}}for(let e of[g.get(n.source),g.get(n.target),i.carry?.from])e!==void 0&&e>=0&&c.add(e);return i},d=o.map(e=>e.hops.map(l));return{name:i,moments:d.length?[...d,[]]:[],acting:u(s,i).map(e=>e.actor),path:[...c],end:d.at(-1)?.at(-1)?.to??``}}),k=O.flatMap(e=>e.moments.flat()),A=e=>[D[e.from]?.actor,D[e.to]?.actor],j=[];k.some(e=>!e.carry&&new Set(A(e)).size===2&&A(e).every(e=>e!==void 0))&&j.push(`data`),k.some(e=>e.carry)&&j.push(`thing`),k.some(e=>c(h.get(e.from)))&&j.push(`check`);let M=y>=0?Oe(C[y].depot):null;return{clear:d===`wide`?64:Re,bends:w,svg:S+E.filter(e=>e.checks).map(e=>Me(e.gate)).join(``)+(M?.yard??``),actors:E,boxes:D,stories:O,truck:y,truckArt:M,things:T,keys:j}}var Le=(e,t)=>t&&e.done||e.label,Re=92;function ze(e,t,n,r){let i=3*e,a=3*(n-e)-i,o=1-i-a,s=3*t,c=3*(r-t)-s,l=1-s-c,u=e=>((o*e+a)*e+i)*e,d=e=>(3*o*e+2*a)*e+i;return e=>{if(e<=0)return 0;if(e>=1)return 1;let t=0,n=1,r=e;for(let i=0;i<24;i++){let i=u(r)-e;if(Math.abs(i)<1e-5)break;i>0?n=r:t=r;let a=d(r);r=Math.abs(a)>1e-6?r-i/a:(t+n)/2,(r<=t||r>=n)&&(r=(t+n)/2)}return((l*r+c)*r+s)*r}}var q={out:ze(.23,1,.32,1),inOut:ze(.77,0,.175,1)},Be=e=>e,Ve=(e,t,n)=>[e[0]+(t[0]-e[0])*n,e[1]+(t[1]-e[1])*n],J=(e,t)=>{let n=1-t,r=r=>n*n*n*e.a[r]+3*n*n*t*e.c1[r]+3*n*t*t*e.c2[r]+t*t*t*e.b[r];return[r(0),r(1)]},He=e=>`yDU`.includes(e.orient),Ue=e=>e.length?[e.reduce((e,t)=>e+t[0],0)/e.length,e.reduce((e,t)=>e+t[1],0)/e.length]:void 0,We=e=>e.slice(1).reduce((t,n,r)=>t+Math.hypot(n[0]-e[r][0],n[1]-e[r][1]),0),Ge=(e,t)=>{for(let n=1;n<e.length;n++){let r=Math.hypot(e[n][0]-e[n-1][0],e[n][1]-e[n-1][1]);if(t<=r||n===e.length-1)return Ve(e[n-1],e[n],r?Math.min(1,t/r):1);t-=r}return e[e.length-1]},Ke=(e,t,n)=>[e.actors[t].lot.x+2.2+n%2*.42,4.84+Math.floor(n/2)*.38+e.actors[t].lot.y];function qe(e,t){let n=!1;for(let r=0,i=t.length-1;r<t.length;i=r++){let[a,o]=t[r],[s,c]=t[i];o>e[1]!=c>e[1]&&e[0]<(s-a)*(e[1]-o)/(c-o)+a&&(n=!n)}return n}function Je(e,t){let n=1/0;for(let r=0;r<e.length;r++){let[i,a]=e[r],[o,s]=e[(r+1)%e.length];(t-i)*(t-o)<=0&&i!==o&&(n=Math.min(n,a+(s-a)*(t-i)/(o-i)))}return n}var Ye=e=>Array.from({length:e+1},(e,t)=>t).sort((e,t)=>(e%8?1:0)-(t%8?1:0)),Xe=Ye(160);function Ze(e,t,n,r=Re){for(let i of Xe){let a=J(e,i/160);if(!(Math.hypot(a[0]-e.a[0],a[1]-e.a[1])<10||Math.hypot(a[0]-e.b[0],a[1]-e.b[1])<10))for(let e=0;e<t.length;e++){if(n.includes(e))continue;let i=Je(t[e],a[0]);if(qe(a,t[e])||a[1]<i&&i-a[1]<r)return!1}}return!0}function Qe(e,t,n,r,i=Re){for(let a=Math.min(e[1],t[1])-80;;a-=20){let o={a:e,b:t,c1:[e[0],a],c2:[t[0],a]};if(a<-1200||Ze(o,n,r,i))return o}}var $e=[];for(let e=80;e<=480;e+=80)for(let t=80;t<=480;t+=80)for(let n=-240;n<=240;n+=120)for(let r=-240;r<=240;r+=120)$e.push([e,t,n,r]);var et=(e,t)=>Math.min(...t.map((n,r)=>{let i=t[(r+1)%t.length],a=i[0]-n[0],o=i[1]-n[1],s=Math.max(0,Math.min(1,((e[0]-n[0])*a+(e[1]-n[1])*o)/(a*a+o*o||1)));return Math.hypot(e[0]-n[0]-s*a,e[1]-n[1]-s*o)})),tt=Ye(96),nt=/* @__PURE__ */ new Map;function rt(e,t,n,r,i,a,o){let s=Math.sign(o-e[0]),c=Math.sign(o-t[0]),l=`${s}${c}`,u=nt.get(l);if(!u){let e=([e,t,n,r])=>e+t+(Math.abs(n)+Math.abs(r))/4+(n*s<0?200:0)+(r*c<0?200:0);nt.set(l,u=$e.map(t=>[...t,e(t)]).sort((e,t)=>e[4]-t[4]))}let d=n.map(Ct),f=Math.min(e[1],t[1])-60;next:for(let[o,s,c,l]of u){let u={a:e,b:t,c1:[e[0]+c,e[1]-o],c2:[t[0]+l,t[1]-s]},p=tt.map(e=>J(u,e/96));if(p.some(e=>e[1]<=f)){for(let o of p)if(!(Math.min(Math.hypot(o[0]-e[0],o[1]-e[1]),Math.hypot(o[0]-t[0],o[1]-t[1]))<16))for(let e=0;e<n.length;e++){let t=n[e],s=d[e];if(r.includes(e)||o[0]<s.x-a||o[0]>s.x+s.w+a||o[1]>s.y+s.h+a||o[1]<s.y-i)continue;let c=Je(t,o[0]);if(qe(o,t)||(o[1]<c?c-o[1]<i:et(o,t)<a))continue next}return u}}}function it(e,t){let n={story:t,moment:-1,summary:!1,hi:[],ever:{},arcs:[],units:{},truck:null,gates:{},dev:[],screens:{},frame:[]},r=e.truck>=0?e.actors[e.truck].lot.depot:null;r&&(n.truck={orient:`y`,x:r.x+.66,y:r.y-1.62,lot:e.truck,door:1,load:[]}),e.actors.forEach((e,t)=>n.gates[t]={rows:[],deg:0,fail:!1,on:-1});let i=/* @__PURE__ */ new Set;for(let r of e.stories[t].moments.flat()){let t=r.carry,a=t&&t.from>=0?t.from:e.boxes[r.from]?.actor;if(t&&!i.has(t.thing)&&a!==void 0){i.add(t.thing);for(let r=0;r<t.count;r++){let i=`${t.thing}/${r}`,o=a===e.truck&&t.form!==`notes`&&n.truck&&n.truck.load.length<Pe?n.truck:null;n.units[i]={thing:t.thing,k:r,p:o?[0,0]:p(...Ke(e,a,r)),where:o?`bed`:`yard`,at:a,fail:!1,moment:-1},o&&o.load.push(i)}}}return n}function at(e,t){let n=e.actors,r=e.truck,i=r>=0?n[r].lot.depot:{x:0,y:0},a=i.x+.66,o=()=>!t.truck||t.truck.orient===`y`&&t.truck.y+2.5<=i.y+.9,s=e=>e===r&&!o(),c=e=>He(e)?p(e.x+G+.03,e.y+(e.orient===`U`?.33:2.17),.58):p(e.orient===`R`?e.x+2.18:e.x+.31,e.y+G/2+.41,.58),l=e=>s(e)?c(t.truck):p(...n[e].port);return{YX:a,parked:o,inCab:s,devBase:l,devTop:e=>{let t=l(e);return[t[0],t[1]-je.h*(s(e)?.82:1)-4]},gateMid:e=>{let t=n[e].gate;return p((t.px+t.ex)/2,t.y,t.z)},gateEnds:e=>{let t=n[e].gate;return[p(t.ex,t.y,t.z-.05),p(t.ex,t.y)]},truckPts:(e,n=1)=>{let i=e.y+G/2,a=He(e)?[e.x,e.x+G].flatMap(t=>[p(t,e.y),p(t,e.y+2.5),p(t,e.y,e.orient===`y`?.9:1.13),p(t,e.y+2.5,1.13)]):[e.x,e.x+2.5].flatMap(e=>[i-.4,i+.4].flatMap(t=>[p(e,t),p(e,t,1.13)]));if(t.dev.includes(r)){let t=c(e);a.push([t[0]-11*n,t[1]-40*n],[t[0]+11*n,t[1]-40*n])}return a}}}var ot=e=>e.label.charAt(0).toUpperCase()+e.label.slice(1)||(e.fail?`✗`:`✓`),st=/* @__PURE__ */ new WeakMap;function ct(e,t,n){let r=st.get(e)??/* @__PURE__ */ new Map;st.set(e,r);let i=`${t}/${n}`;return r.has(i)||r.set(i,lt(e,t,n)),r.get(i)}function lt(e,t,n){let r=e.stories[t],i=r.moments[n]??[],a=e.actors,o=e.truck,s=dt(e,t,n-1,1/0);s.moment=n,s.summary=!i.length&&n===r.moments.length-1,s.arcs=s.arcs.filter(e=>e.hold||s.summary),s.frame=s.arcs.filter(e=>!s.summary||e.fail).map(e=>e.b),s.hi=[],s.dev=[];let c=structuredClone(s),l=[],u=(e,t,n,r,i,a=q.inOut,o)=>(l.push({kind:e,hop:t,start:n,end:n+r,curve:a,apply:i,head:o}),i(c,1),n+r),d=(e,t,n)=>u(null,e,t,0,n),{YX:m,gateMid:h,gateEnds:g,devBase:_,devTop:v,truckPts:y}=at(e,c),b=a.map(e=>e.lot.hull),x=Ue(b.flat())[0],S=(t,n)=>p(t.x+e.truckArt.slots[t.orient===`R`?`R`:`L`][n%4],xe[Math.floor(n/4)]+t.y+G/2-_e,.43),C=e=>e.orient===`y`?e.x:e.orient===`R`?e.x+2.18:e.x+.31,w=e=>He(e)?p(e.x+G/2,e.y+(e.orient===`U`?0:2.5),.6):p(e.orient===`R`?e.x+2.5:e.x,e.y+G/2,.6),T=(t,n,r)=>{let i=e.bends,a=[];for(let e=t;i.length&&t!==n&&(a.push([i[e][0]-r,i[e][1]-r]),e!==n);e+=n>t?1:-1);return a},E=(...e)=>e.forEach(e=>{c.hi.includes(e)||c.hi.push(e),c.frame.push(...a[e].lot.hull)}),D=e=>Object.keys(c.units).filter(t=>c.units[t].thing===e),O=e=>t=>Ue(e.filter(e=>[`air`,`road`].includes(t.units[e].where)).map(e=>t.units[e].p)),k=(e,t,n,r,i,a,o,s)=>u(`unit`,e,t,460,(e,t)=>{let r=e.units[n],c=e.truck,l=Ve(i,a,t);r.p=[l[0],l[1]-184*t*(1-t)],r.where=t<1?`air`:o,r.at=s,c.load=c.load.filter(e=>e!==n),o===`bed`&&t===1&&c.load.push(n)},q.inOut,O(r)),A=(t,n,r,i,o)=>e.boxes[i].check?(c.frame.push(...g(r)),h(r)):a[r].device===`antenna`?(o.push(r),a[r].lot.roof):(d(t,n,e=>{e.dev.includes(r)||e.dev.push(r),e.screens[r]??=`idle`}),c.frame.push(_(r),v(r)),v(r)),j=(t,r,i,a,o,s,l)=>{let d=e.bends.length?rt(a,o,b,l,Re,14,x)??rt(a,o,b,l,0,0,x)??Qe(a,o,b,l):Qe(a,o,b,l,e.clear),f=Array.from({length:9},(e,t)=>J(d,t/8));return c.frame.push(...f),u(t,r,i,Math.min(1500,450+.7*We(f)),(e,t)=>void e.arcs.push({...d,...s,t,moment:n,near:l}),q.inOut,(e,t)=>J(d,t))},M=(e,t,n)=>{let r=c.truck,i=e=>w(e.truck),s=a[n].lot,l=[[C(r),_e+a[r.lot].lot.y],...T(r.lot,n,.4),[s.door,_e+s.y]];for(let e=l.length-2;e>0;e--){let[t,n,r]=l.slice(e-1,e+2);Math.abs((n[0]-t[0])*(r[1]-t[1])-(n[1]-t[1])*(r[0]-t[0]))<1e-6&&l.splice(e,1)}let f=l[1][0]<l[0][0]?`L`:`R`,p=l.at(-1)[0]<l.at(-2)[0];if(c.frame.push(...y(r)),r.orient===`y`){let n=r.y,s=a[o].lot.depot.y+.53;r.door<1&&(t=u(`door`,e,t,500,(e,t)=>void(e.truck.door=t),q.inOut,i)),t=u(`drive`,e,t,1e3,(e,t)=>{let r=e.truck;r.y=n+(s-n)*t,t===1&&Object.assign(r,{orient:f,x:f===`R`?m-1.78:m,y:_e-G/2+a[o].lot.y})},q.inOut,i)}else if(r.orient!==f){let n=r.x+(f===`R`?-1.78:1.78);d(e,t,e=>Object.assign(e.truck,{orient:f,x:n}))}let h=p?s.x+.95:s.x+.2,g=l.slice(1,-1),_=[[r.x+1.25,r.y+G/2],...g,[h+1.25,_e+s.y]];for(let[e,t]of g)c.frame.push(...y({...r,orient:`D`,x:e-G/2,y:t-1.25}));return c.frame.push(...y({...r,orient:p?`L`:`R`,x:h,y:_e-G/2+s.y})),u(`drive`,e,t,Math.min(2200,900+We(_)*60),(e,t)=>{let r=e.truck,i=We(_)*t,[a,o]=Ge(_,i),s=1;for(;s<_.length-1&&We(_.slice(0,s+1))<i;)s++;let c=_[s][0]-_[s-1][0],l=_[s][1]-_[s-1][1],u=Math.abs(c)>=Math.abs(l)?c>0?`R`:`L`:l>0?`D`:`U`;Object.assign(r,u===`D`||u===`U`?{orient:u,x:a-G/2,y:o-1.25}:{orient:u,x:a-1.25,y:o-G/2}),t===1&&(r.lot=n)},q.inOut,i)},N=(e,t,n)=>{let r=c.truck;return r.orient!==`y`&&r.lot===n?(c.frame.push(...y(r)),t):M(e,t,n)},P=(t,r,i,s,l)=>{let m=D(i.carry.thing),h=!!e.boxes[i.to].check,g=h?`gate`:`yard`;if(!m.length)return r;let _=t=>h?[(a[l].gate.px+a[l].gate.ex)/2+.1-t*.42,6.45+a[l].lot.y]:Ke(e,l,t);d(t,r,e=>m.forEach(t=>e.units[t].moment=n)),h&&d(t,r,e=>void(e.gates[l].on=n));let v=i.carry.form!==`notes`&&c.truck;if(v&&l===o){let e=N(t,r,s),n=v.load.length,i=m.slice(0,Math.max(0,Pe-n));return c.frame.push(...i.map(e=>c.units[e].p)),Math.max(e,...i.map((r,a)=>k(t,e+280*a,r,i,c.units[r].p,S(c.truck,n+a),`bed`,l)))}if(v&&s===o){let e=N(t,r,l);return Math.max(...m.map((n,r)=>{let i=c.truck.load.indexOf(n);return k(t,e+280*r,n,m,i<0?c.units[n].p:S(c.truck,i),p(..._(r)),g,l)}))}let y=m.map((e,t)=>{let[n,r]=c.units[e].p,i=(n/f+r/20)/2,o=(r/20-n/f)/2,[s,u]=_(t);return[[i,o],[i,6.75+a[c.units[e].at].lot.y],...T(c.units[e].at,l,.25),[s,6.75+a[l].lot.y],[s,u]]});return y.forEach(e=>c.frame.push(...e.map(e=>p(...e)),p(...e.at(-1),1.2))),u(`parcel`,t,r,Math.min(2600,700+Math.max(...y.map(We))*130),(e,t)=>m.forEach((n,r)=>{let i=e.units[n],a=We(y[r])*t,o=p(...Ge(y[r],a));i.p=[o[0],o[1]-(t<1?Math.abs(Math.sin(a*Math.PI*1.6))*5:0)],i.where=t<1?`road`:g,i.at=l}),q.inOut,O(m))},F=(t,o)=>{let s=i[t],l=e.boxes[s.from],f=e.boxes[s.to];if(!l||!f)return o;let m=l.actor,_=f.actor,v=(s.carry&&Object.values(c.units).find(e=>e.thing===s.carry.thing)?.at)??m,y=(e,t)=>n=>void(n.ever[e]={label:t.label,fail:t.dead,done:t.done??(t.check?t.label.replace(/\?$/,``):void 0)});if(d(t,o,y(m,l)),E(v,_),l.check){if(E(m),c.frame.push(...g(m)),u(`answer`,t,o,0,e=>{let t=e.gates[m],r=t.rows.find(e=>e.box===s.from)??t.rows[t.rows.push({box:s.from,q:l.check,a:``,fail:!1})-1];Object.assign(r,{a:ot(s),fail:s.fail}),t.on=n,e.ever[m].fail=s.fail||/^(no|false)$/i.test(s.label)}),s.fail){for(let e of Object.values(c.units))e.where===`gate`&&e.at===m&&c.frame.push(e.p);u(null,t,o,160,(e,t)=>e.arcs.forEach(e=>{e.gate===m&&e.hold&&(e.t=t<1?1-8/We(Array.from({length:9},(t,n)=>J(e,n/8)))*Math.sin(Math.PI*t):1)})),o=u(`fail`,t,o,90,(e,t)=>{if(e.gates[m].deg=12*t,!(t<1)){e.gates[m].fail=!0,e.arcs.forEach(e=>e.fail||=e.gate===m&&e.hold);for(let t of Object.values(e.units))t.fail||=t.where===`gate`&&t.at===m;e.ever[m]={label:_===m?f.label:s.label?ot(s):l.label,fail:!0}}},q.out);let e=2*Math.PI/.25,n=e*Math.sqrt(.75);if(o=u(`arm`,t,o,290,(t,r)=>{let i=r*.29;t.gates[m].deg=r<1?Math.max(0,12*Math.exp(-.5*e*i)*(Math.cos(n*i)+.5*e/n*Math.sin(n*i))):0},Be),_!==m){let e=[];o=j(`reply`,t,o,h(m),A(t,o,_,s.to,e),{gate:-1,hold:!1,fail:!0,text:f.label,dashed:s.async,to:_},e)}return d(t,o,y(_,f)),o}o+=380;let e=.8,r=2*Math.PI/.4,i=r*Math.sqrt(1-e*e);o=u(`arm`,t,o,460,(t,n)=>{let a=n*.46;t.gates[m].deg=n<1?78*(1-Math.exp(-.8*r*a)*(Math.cos(i*a)+e*r/i*Math.sin(i*a))):78},Be),d(t,o,e=>e.arcs.forEach(e=>e.hold&&=e.gate!==m));let v=Object.keys(c.units).filter(e=>c.units[e].where===`gate`&&c.units[e].at===m);if(v.length){let e=v.map(e=>c.units[e].p),n=p(a[m].lot.door,4.75+a[m].lot.y);o=u(`release`,t,o,520,(t,r)=>v.forEach((i,a)=>{t.units[i].p=Ve(e[a],n,r),t.units[i].where=r<1?`gate`:`in`}),q.inOut,e=>Ue(v.map(t=>e.units[t].p)))}}if(v!==_&&s.carry)o=P(t,o,s,v,_);else if(v!==_){let e=[],r=A(t,o,v,s.from,e),i=A(t,o,_,s.to,e),c=!!f.check,u=!l.check&&a[v].device!==`antenna`;c&&d(t,o,e=>void(e.gates[_].on=n)),u&&d(t,o,e=>void(e.screens[v]=`tx`)),o=j(`pulse`,t,o,r,i,{gate:c?_:-1,hold:c,fail:!1,text:l.check?``:s.data||s.label,dashed:s.async,to:_},e),u&&d(t,o,e=>void(e.screens[v]=`idle`)),c||d(t,o,e=>void(e.dev.includes(_)&&(e.screens[_]=`in`)))}if(f.check){let e=v!==_,a=c.gates[_].deg;c.frame.push(...g(_)),a>0&&(o=u(`arm`,t,o,260,(e,t)=>void(e.gates[_].deg=a*(1-t)))),u(`question`,t,o,0,t=>{let r=t.gates[_];e&&Object.assign(r,{rows:[],fail:!1}),r.rows.some(e=>e.box===s.to)||r.rows.push({box:s.to,q:f.check,a:``,fail:!1}),r.on=n}),o+=250;let l=i.some(e=>e.from===s.to)?void 0:r.moments.slice(n+1).flat().find(e=>e.from===s.to);l&&u(`answer`,t,o,0,e=>{let t=e.gates[_].rows.find(e=>e.box===s.to);t&&Object.assign(t,{a:ot(l),fail:l.fail})})}return d(t,o,y(_,f)),o},I=c.summary?200:0;c.summary&&u(null,-1,0,I,(e,t)=>{e.fade=1-t,t===1&&(e.arcs=e.arcs.filter(e=>e.fail))},Be),u(`camera`,-1,I,c.summary?900:700,()=>{},q.out);let L=[];if(i.forEach((e,t)=>{let n=-1;for(let r=0;r<t;r++)i[r].to===e.from&&(n=r);L[t]=F(t,n>=0?L[n]:700)}),c.summary){for(let e of r.path)c.frame.push(...a[e].lot.hull);c.truck&&r.path.includes(o)&&c.frame.push(...y(c.truck));for(let e of Object.values(c.units))[`yard`,`gate`,`in`].includes(e.where)&&c.frame.push(e.p,[e.p[0],e.p[1]+40]);a.forEach((e,t)=>c.gates[t].fail&&c.frame.push(...g(t)))}return{steps:l,start:s,scratch:c,end:Math.max(c.summary?I+900:700,...L)}}function ut(e,t,n){let{steps:r,end:i}=ct(e,t,n);return{events:r.flatMap(({kind:e,hop:t,start:n,end:r})=>e?[{kind:e,hop:t,start:n,end:r}]:[]),end:i}}function dt(e,t,n,r){if(n<0)return it(e,t);let{steps:i,start:a,scratch:o}=ct(e,t,n),s=structuredClone(a),c=[];for(let e of i)e.hop>=0&&(c[e.hop]=Math.max(c[e.hop]??0,e.end));let l=-1;for(let e of[...i].sort((e,t)=>e.start-t.start)){if(e.start>r)continue;let t=e.end>e.start?Math.min(1,(r-e.start)/(e.end-e.start)):1,n=e.curve(t);e.apply(s,n);let i=t<1&&e.hop>=0&&c[e.hop]>=l?e.head?.(s,n):void 0;i&&([s.lead,l]=[i,c[e.hop]])}return s.frame=[...o.frame],s.hi=s.summary?r===1/0?[...e.stories[t].path]:[]:[...o.hi],s}var ft=.45,pt=/* @__PURE__ */ Error(`over`),Y=12,mt=32,ht={big:{name:14.8,hero:16,kick:12,status:13.8,mark:20,tag:46,q:15,a:13,row:30,chip:13,chipH:26},small:{name:13,hero:14,kick:0,status:12,mark:18,tag:41,q:13,a:12,row:24,chip:12,chipH:22}},gt=(e,t)=>e.where===`yard`||e.where===`gate`||t&&(e.where===`bed`||e.where===`in`),_t=(e,t)=>t.narrow?1:Math.min(1.9,Math.max(1,.85/e)),vt=(e,t)=>[Math.max(e.x,Math.min(t[0],e.x+e.w)),Math.max(e.y,Math.min(t[1],e.y+e.h))],yt=/* @__PURE__ */ new Map;function bt(e,t,n,r){let i=`${t},${n},${r}`,a=yt.get(i);if(!a){let e=(e,t)=>e>.38?[0]:e<-.38?[t]:[t/2,t*.1,t*.9];a=[];for(let i of r)for(let r=0;r<16;r++){let o=Math.cos(r*Math.PI/8),s=Math.sin(r*Math.PI/8);for(let r of e(o,t))for(let t of e(s,n))a.push(o*i-r,s*i-t)}yt.set(i,a)}let o=[];for(let r=0;r<a.length;r+=2)o.push({x:e[0]+a[r],y:e[1]+a[r+1],w:t,h:n,anchor:e});return o}var xt=e=>Math.abs(e.reduce((t,n,r)=>t+n[0]*e[(r+1)%e.length][1]-e[(r+1)%e.length][0]*n[1],0))/2;function St(e,{l:t,t:n,r,b:i}){let a=e;for(let[e,o,s]of[[0,t,1],[0,r,0],[1,n,1],[1,i,0]]){let t=t=>s?t[e]>=o:t[e]<=o,n=[];a.forEach((r,i)=>{let s=a[(i+1)%a.length];if(t(r)&&n.push(r),t(r)!==t(s)){let t=(o-r[e])/(s[e]-r[e]);n.push([r[0]+(s[0]-r[0])*t,r[1]+(s[1]-r[1])*t])}}),a=n}return a.length>2?xt(a)/xt(e):0}var Ct=e=>{let t=e.map(e=>e[0]),n=e.map(e=>e[1]),r=Math.min(...t),i=Math.min(...n);return{x:r,y:i,w:Math.max(...t)-r,h:Math.max(...n)-i}},wt=/* @__PURE__ */ new Map,Tt=(e,t,n)=>{let r=`${t}${n}${e}`,i=wt.get(r);return i===void 0&&wt.set(r,i=s(e,t)*(n?1.06:1)*1.12),i},Et=(e,t,n=0)=>e.x<t.x+t.w+n&&t.x<e.x+e.w+n&&e.y<t.y+t.h+n&&t.y<e.y+e.h+n,Dt=/* @__PURE__ */ new WeakMap;function Ot(e,t,n=0){let r=t.x-n,i=t.y-n,a=t.x+t.w+n,o=t.y+t.h+n,s=Dt.get(e);if(!s){let t=1/0,n=-1/0,r=1/0,i=-1/0;for(let[a,o]of e)t=Math.min(t,a),n=Math.max(n,a),r=Math.min(r,o),i=Math.max(i,o);s=[t,n,r,i];for(let t=0;t<e.length;t++){let[n,r]=e[t],[i,a]=e[(t+1)%e.length],o=a-r,c=n-i,l=1/0,u=-1/0;for(let[t,n]of e){let e=t*o+n*c;e<l&&(l=e),e>u&&(u=e)}s.push(o,c,l,u)}Dt.set(e,s)}if(s[1]<=r||a<=s[0]||s[3]<=i||o<=s[2])return!1;for(let e=4;e<s.length;e+=4){let t=s[e],n=s[e+1],c=Math.min(r*t,a*t)+Math.min(i*n,o*n),l=Math.max(r*t,a*t)+Math.max(i*n,o*n);if(s[e+3]<=c||l<=s[e+2])return!1}return!0}function kt(e,t,n=d.sheet){let r=e>=d.wide||t<d.short&&e>=d.slim*2;return{w:e,h:t,narrow:e<d.roomy,form:e>=d.slim*2?e<d.roomy?`narrow`:`wide`:t<740||t>780?`spread`:`stack`,region:r?{l:d.pad*2+(e>=d.wide?d.panel:d.slim),t:d.chips+d.pad,r:e-d.pad,b:t-d.pad}:{l:8,t:d.chips+8,r:e-8,b:t-n-8}}}var At=/* @__PURE__ */ new WeakMap,jt=/* @__PURE__ */ new WeakMap,Mt=/* @__PURE__ */ new WeakMap;function Nt(e,t,n,r,i=!1,a=1/0){let o=ht[n.w<d.slim*2?`small`:`big`],s=o.chipH,c=e.actors,l=e.stories[t.story],u=at(e,t),{l:f,t:m,r:h,b:g}=n.region,_=(f+h)/2,v=(m+g)/2,y=e=>[(e[0]-r.x)*r.z+_,(e[1]-r.y)*r.z+v],b=e=>Ct(e.map(y)),x=t.truck&&!u.parked()?u.truckPts(t.truck,_t(r.z,n)):null,S=c.flatMap((e,n)=>{let r=e.gate,i=t.gates[n];if(!e.checks||i.on!==t.moment&&!i.fail)return[];let a=i.deg>1?r.z+r.L:i.fail?r.z+1:r.z+.3;return[{actor:n,r:b([p(r.px-.35,r.y),p(r.ex+.12,r.y),p(r.px,r.y,a),p(r.ex,r.y,r.z)])}]}),C=_t(r.z,n),w=t.dev.filter(e=>!u.inCab(e)).map(e=>{let t=u.devBase(e);return{actor:e,r:b([[t[0]-je.w*C/2,t[1]-je.h*C],[t[0]+je.w*C/2,t[1]]])}}),T=At.get(t.arcs);T||At.set(t.arcs,T=t.arcs.filter(e=>e.t>0).map(t=>e.bends.length?Array.from({length:97},(e,n)=>J(t,t.t*n/96)):Array.from({length:33},(e,n)=>J(t,t.t*(.05+.9*n/32)))));let E=Mt.get(e);E||Mt.set(e,E=c.map(e=>({h:e.lot.hull,box:Ct(e.lot.hull)})));let D=[...w,...S].map(e=>e.r),O=0,k=e=>e.x>=f&&e.y>=m&&e.x+e.w<=h&&e.y+e.h<=g,A=x?he(x):void 0,j=A?[...E,{h:A,box:Ct(A)}]:E,M=e=>({x:(e.x-_)/r.z+r.x,y:(e.y-v)/r.z+r.y,w:e.w/r.z,h:e.h/r.z}),N=e=>{let t=M(e),n=2/r.z;return!j.some(({h:e,box:r})=>Et(r,t,n)&&Ot(e,t,n))},P=jt.get(T);P||jt.set(T,P=T.flatMap(e=>Array.from({length:Math.ceil(e.length/8)},(t,n)=>{let r=e.slice(n*8,n*8+8);return{ps:r,box:Ct(r)}})));let F=e=>{let t=M(e),n=4/r.z,i=t.x-n,a=t.x+t.w+n,o=t.y-n,s=t.y+t.h+n;for(let{ps:e,box:r}of P)if(Et(r,t,n)){for(let t of e)if(t[0]>i&&t[0]<a&&t[1]>o&&t[1]<s)return!1}return!0},I=e=>!D.some(t=>Et(t,e,6)),L=e=>k(e)&&I(e)&&F(e)&&N(e),R=(e,t)=>{for(let n of e)for(let e of typeof n==`function`?n():n)if(t(e))return e},z=e=>R(e,L),B=e=>{let t=R(e,L);if(t)return t;if(++O>a)throw pt;return R(e,e=>k(e)&&I(e))??e[0][0]},V=[],H=r=>{let s=t.ever[r],p=c[r].name,_=s?Le(s,t.summary):`Not reached`,v=s?s.fail?`✗`:`✓`:``,b=t.summary&&e.boxes[l.end]?.actor===r,S=!n.narrow&&t.summary&&r===e.truck?Object.values(t.units).filter(e=>e.where===`bed`&&e.moment>=0):[],C=[...new Set(S.map(e=>e.thing))],w=(b?22:20)+Math.max(Tt(p,b?o.hero:o.name,!0),o.mark+Tt(_,o.status,!1),...C.map(e=>20+Tt(e,13,!0))),T=o.tag+(b?3:0)+C.length*20,E=Y,k=r===e.truck&&x,j=k?x.reduce((e,t)=>t[1]<e[1]?t:e):c[r].lot.tag,[M,N]=y(j),P=[M,N],F=[];if(k){let[e,t]=y(x.reduce((e,t)=>t[1]>e[1]?t:e));for(let n of[e-w/2,e+4,e-w-4])F.push({x:n,y:t+E,w,h:T,anchor:[e,t]})}for(let[e,t]of[[M-w/2,N-E-T],[M+E,N-T/2],[M-E-w,N-T/2],[M+4,N-E-T],[M-w-4,N-E-T],[M-w/2,N+E],[M+E,N-E-T],[M-E-w,N-E-T],[M+E,N+4],[M-E-w,N+4],[M-w/2,N-24-T],[M+4,N-24-T],[M-w-4,N-24-T],[M-w+36,N-E-T],[M-36,N-E-T]])F.push({x:e,y:t,w,h:T,anchor:P});let I=n.w<d.slim*2&&t.summary,L=n.w<d.wide&&t.summary&&!(k&&I)?[12,20,30,40]:n.narrow?[12,20,30,44,58]:[12,18,24],R=[F,()=>bt(P,w,T,L),()=>k?bt(y(x.reduce((e,t)=>t[1]>e[1]?t:e)),w,T,L):[],()=>k&&(!n.narrow||I)?[]:bt(y(c[r].lot.hull.reduce((e,t)=>t[1]>e[1]?t:e)),w,T,L),()=>t.dev.includes(r)&&!u.inCab(r)?bt(y(u.devTop(r)),w,T,L):[]],H=t.hi.includes(r)||t.summary&&l.path.includes(r),ee=St((k?A:c[r].lot.hull).map(y),n.region),U=ee<.6;if(U&&(!H||i&&n.narrow&&t.summary&&!b&&ee>=.01))return;let te={actor:r,name:p,status:_,mark:v,quiet:!l.path.includes(r),end:b,cargo:C},ne=M<f||M>h||N<m||N>g;if(H&&n.narrow&&(ne||U)&&!(t.summary&&b&&U)){let e=ie(te,w,T,[M,N]);V.push(e),D.push(e.r);return}if(U&&++O>a)throw pt;let W=H?B(R):z(R);if(!W)return;let re={x:W.x,y:W.y,w,h:T};V.push({...te,r:re,anchor:W.anchor,line:[vt(re,W.anchor),W.anchor]}),D.push(W)};(!n.narrow||n.w<d.slim*2&&t.summary)&&x&&t.hi.includes(e.truck)&&H(e.truck);let ee=[],U=(e,t,r,i,o)=>{for(let[e,n]of i)for(let i of[10,30,50])for(let a=0;a<8;a++){let o=a*Math.PI/4;t.push([e+Math.cos(o)*(i+r/2)-r/2,n+Math.sin(o)*(i+s/2)-s/2])}let c=t.map(([e,t])=>({x:e,y:t,w:r,h:s})),l=e=>k(e)&&N(e)&&I(e),u=c.find(l)??i.flatMap(e=>bt(e,r,s,n.narrow?[20,30,44,58]:[18,24])).find(l);if(!u&&++O>a)throw pt;ee.push({text:e,r:u??c[0],mark:o}),D.push(u??c[0])};for(let e of t.arcs){if(e.moment!==t.moment||e.t!==1||!e.text||t.ever[e.to]?.label===e.text)continue;let n=20+Tt(e.text,o.chip,!0),r=e.a;for(let t=0;t<=40;t++){let n=J(e,t/40);n[1]<r[1]&&(r=n)}let[i,a]=y(r),c=[[i-n/2,a-s-10]];for(let t of[.8,.2,.65,.35]){let[r,i]=y(J(e,t));c.push([r+10,i-s/2],[r-10-n,i-s/2])}U(e.text,c,n,[.5,.3,.7].map(t=>y(J(e,t))))}let te=/* @__PURE__ */ new Set;for(let e of Object.values(t.units)){let r=t.summary&&e.where===`bed`?x?.reduce((e,t)=>t[1]<e[1]?t:e):e.p;if(e.moment!==t.moment&&!t.summary||e.moment<0||!r||!gt(e,t.summary)||te.has(e.thing)||!n.narrow&&t.summary&&e.where===`bed`)continue;te.add(e.thing);let i=t.summary&&!e.fail?`✓`:void 0,a=20+(i?o.mark:0)+Tt(e.thing,o.chip,!0),c=s,[l,u]=y([r[0],r[1]+6]);U(e.thing,[[l-a/2,u+10],[l+10,u-c/2],[l-10-a,u-c/2],[l+10,u+10],[l-10-a,u+10],[l-a/2,u+30]],a,[[l,u]],i)}let ne=[];for(let e of S){let r=t.gates[e.actor];if(!r.rows.length||!(r.on===t.moment||t.summary&&r.fail&&!n.narrow))continue;let i=r.rows.map(({q:n,a:r,fail:i})=>({q:n,a:t.ever[e.actor]?.label===r?``:r,fail:i})),a=22+Math.max(Tt(c[e.actor].name,o.kick,!1),...i.map(e=>Tt(e.q,o.q,!0)+(e.a?Tt(e.a,o.a,!0)+40:26))),s=i.length*o.row+(i.length-1)*6+14+(o.kick&&16),l=e.r,u=c[e.actor].gate,d=y(p(u.ex,u.y)),f=l.y+l.h,m=l.x+l.w/2,h=l.y+l.h/2,g=[[m-14,l.y-Y-s,[m,l.y]],[m-a+14,l.y-Y-s,[m,l.y]],[l.x+l.w+Y,h-s/2,[l.x+l.w,h]],[l.x-Y-a,h-s/2,[l.x,h]],[l.x+l.w+Y,f-s,[l.x+l.w,f-4]],[l.x-Y-a,f-s,[l.x,f-4]],[d[0]-14,f+Y,d],[d[0]-a+14,f+Y,d],[m-a/2,f+Y,d]].map(([e,t,n])=>({x:e,y:t,w:a,h:s,anchor:n})),_=B([n.narrow?[...g.slice(6),...g.slice(0,6)]:g,...[d,[m,l.y],[l.x,h],[l.x+l.w,h]].map(e=>()=>bt(e,a,s,[12,24]))]);ne.push({actor:e.actor,r:{x:_.x,y:_.y,w:a,h:s},anchor:_.anchor,rows:i,kick:!!o.kick}),D.push(_)}let W=e=>t.hi.includes(e)?0:l.path.includes(e)?1:2,re=c.map((e,t)=>t).sort((e,t)=>W(e)-W(t));for(let e of re)V.some(t=>t.actor===e)||H(e);function ie(e,t,n,[r,i]){let a={l:f-r,r:r-h,t:m-i,b:i-g},o=Object.keys(a).reduce((e,t)=>a[t]>a[e]?t:e),s=o===`l`||o===`r`,c=s?m:f,l=Math.max(c,s?g-n:h-t),u=Math.max(c,Math.min(l,s?i-n/2:r-t/2)),d=[];for(let e=0;e<=l-c;e+=8)for(let a of e?[u-e,u+e]:[u]){if(a<c||a>l)continue;let e=s?o===`l`?f:h-t:a,u=s?a:o===`t`?m:g-n;d.push({x:e,y:u,w:t,h:n,anchor:[r,i]})}let p=B([d]),_={x:p.x,y:p.y,w:t,h:n};return{...e,r:_,anchor:p.anchor,line:[vt(_,p.anchor),p.anchor],pin:o}}for(let e of ne){let t=V.find(t=>t.actor===e.actor)?.r,n=e.r;!e.kick||!t||Math.max(t.x-n.x-n.w,n.x-t.x-t.w,t.y-n.y-n.h,n.y-t.y-t.h)>120||(e.kick=!1,e.r={...n,y:e.anchor[1]>n.y+n.h-16?n.y+16:n.y,h:n.h-16})}return O+=w.filter(e=>!k(e.r)||!N(e.r)).length+S.filter(e=>t.summary&&!k(e.r)).length,{placed:{cam:r,tags:V,signs:ne,chips:ee,devices:w,gates:S,hulls:i?c.map(e=>e.lot.hull.map(y)):[],truck:i&&x?he(x.map(y)):void 0,arcs:i?T.map(e=>e.map(y)):[],faults:O},bad:O,pr:y}}function Pt(e,t,n,r=n.narrow?1:n.w>=1800?1.3:1.2){let i=at(e,t),a=t.summary&&n.w<d.wide?e.stories[t.story].moments.slice(-3,-1).flat():[],o=[...new Set(a.flatMap(t=>[e.boxes[t.from]?.actor,e.boxes[t.to]?.actor]))].filter(e=>e!==void 0),s=o.length?[...o.flatMap(n=>n===e.truck&&t.truck&&!i.parked()?i.truckPts(t.truck):e.actors[n].lot.hull),...e.actors.flatMap((e,n)=>t.gates[n].fail?i.gateEnds(n):[])]:t.frame.length?t.frame:e.actors.flatMap(e=>e.lot.hull),c=s.map(e=>e[0]),l=s.map(e=>e[1]),u=Math.min(...c),f=Math.max(...c),m=Math.min(...l),h=Math.max(...l);f-u<520&&([u,f]=[(u+f)/2-260,(u+f)/2+260]);let{l:g,t:_,r:v,b:y}=n.region,b=v-g,x=y-_,S=n.narrow?0:mt,C=at(e,t),w=[];e.actors.forEach(({checks:e,gate:n},r)=>{let i=t.gates[r];e&&i.rows.length&&(i.on===t.moment||t.summary&&i.fail)&&w.push([p(n.px,n.y),24],[p(n.ex,n.y),24])});for(let e of t.dev)C.inCab(e)||w.push([C.devBase(e),0],[C.devTop(e),0]);for(let e of t.arcs)e.moment===t.moment&&e.t===1&&e.text&&w.push([J(e,.5),80]);for(let e of Object.values(t.units))(e.moment===t.moment||t.summary)&&e.moment>=0&>(e,t.summary)&&w.push([e.where===`bed`?C.truckPts(t.truck).reduce((e,t)=>t[1]<e[1]?t:e):e.p,80]);let T=t.dev.filter(C.inCab).map(C.devTop),E=t.arcs.filter(e=>e.t>0).flatMap(e=>Array.from({length:9},(t,n)=>J(e,e.t*n/8)));if(!n.narrow)for(let e of E)w.push([e,-14]);let D=(e,t,n,r)=>{let i=(t-e.x)*e.z+(g+v)/2,a=(n-e.y)*e.z+(_+y)/2;return i>=g-r&&i<=v+r&&a>=_-r&&a<=y+r},O=e=>w.every(([[t,n],r])=>D(e,t,n,r)),k=r=>{let i=Nt(e,t,n,r),a=(n.narrow?[...i.placed.signs,...i.placed.tags,...i.placed.devices,...i.placed.chips]:[]).map(e=>e.r),o=[...s,...E,...T].map(i.pr);return{lay:i,L:Math.min(...a.map(e=>e.x),...o.map(e=>e[0])),R:Math.max(...a.map(e=>e.x+e.w),...o.map(e=>e[0])),T:Math.min(...a.map(e=>e.y),...o.map(e=>e[1])),B:Math.max(...a.map(e=>e.y+e.h),...o.map(e=>e[1]))}},A=(e=>{let t=null,n,i=Math.max(e,Math.min((b-S)/(f-u),(x-2*S)/(h-m),r));for(let r=0;r<60&&i>=e;r++,i*=.96){let e={x:(u+f)/2,y:(m+h)/2,z:i};for(let r=0;r<3;r++){let a=k(e);if(n=a.lay,r<2){e={x:e.x+((a.L+a.R)/2-(g+v)/2)/i,y:e.y+((a.T+a.B)/2-(_+y)/2)/i,z:i};continue}if(a.R-a.L<=b-S&&a.B-a.T<=x-2*S){if(!a.lay.bad&&O(e))return{lay:a.lay,ok:!0};(!t||a.lay.bad<t.bad)&&(t=a.lay)}}}return{lay:t??n,ok:!1}})(Math.min(n.narrow?ft:.3,r)),j=r=>Nt(e,t,n,r.placed.cam,!0).placed;if(A.ok)return j(A.lay);let M=n.narrow?Math.min(ft,r):A.lay.placed.cam.z,N={x:(u+f)/2,y:(m+h)/2},P=e.stories[t.story],F=t.truck&&!C.parked()?C.truckPts(t.truck).reduce((e,t)=>t[1]<e[1]?t:e):null,I=e.actors.flatMap((n,r)=>t.hi.includes(r)||t.summary&&P.path.includes(r)?[r===e.truck&&F?F:n.lot.tag]:[]),L=e=>n.narrow?I.filter(([t,n])=>!D(e,t,n,0)).length:0,R=[],z=0,B=(e,t)=>t+Math.abs(e.z-M)*1e3+L(e)*300,V=r=>{for(let{c:i}of r.sort((e,t)=>e.score-t.score)){if(!O(i))continue;if(++z>zt)return;let r=R.length<4?1/0:R.map(e=>e.bad).sort((e,t)=>e-t)[3];try{let a=Nt(e,t,n,i,!1,r);if(!a.bad)return a;R.push({c:i,bad:a.bad})}catch(e){if(e!==pt)throw e}}},H=(e,t)=>V(t.flatMap(t=>Lt.flatMap(n=>Lt.map(r=>{let i={x:e.x+r/t,y:e.y+n/t,z:t};return{c:i,score:B(i,Math.hypot(r,n))}})))),ee=()=>V(R.sort((e,t)=>e.bad-t.bad).slice(0,4).flatMap(({c:e})=>Rt.flatMap(t=>Rt.map(n=>{let r={x:e.x+n/e.z,y:e.y+t/e.z,z:e.z};return{c:r,score:B(r,Math.hypot(r.x-N.x,r.y-N.y)*e.z)}})))),U=[...new Set([0,1,2,3,4,5].map(e=>Math.min(r,n.narrow?ft+e*.1:M*(1-e*.08))))],te=[.4,.35,.3,.25].filter(e=>e<Math.min(...U));return j(H(Bt(e,t)??N,U)??H(N,U)??H(N,te)??ee()??A.lay)}function Ft(e,t,n){let r=e.stories[t].moments.length,i=[];if(!r)return i;i[r-1]=Pt(e,dt(e,t,r-1,1/0),n);for(let a=r-2;a>=0;a--)i[a]=Pt(e,dt(e,t,a,1/0),n,Math.min(n.narrow?1:n.w>=1800?1.3:1.2,i[a+1].cam.z*(a===r-2&&n.w<d.wide?1:1.2)));let a=i[r-1].cam.z,o=e.stories[t].path.flatMap(t=>e.actors[t].lot.hull.map(e=>e[0])),s=n.w<d.wide?i[r-2].cam.z*2:(Math.max(...o)-Math.min(...o))*a<.7*(n.region.r-n.region.l)?i[r-2].cam.z*.92:i[r-2].cam.z*1.2,c=dt(e,t,r-1,1/0);if(a>s){let t=Pt(e,c,n,s);t.faults||(i[r-1]=t)}return i}function It(e,t,n){let r=n.form===`stack`||n.form===`spread`?[n.form,`narrow`]:[n.form],i={sc:e(r[0]),cams:[]};for(let a of r)if(i={sc:e(a),cams:Ft(e(a),t,n)},!i.cams.some(e=>e.faults))break;return i}var Lt=Array.from({length:13},(e,t)=>(t-6)*40),Rt=[-30,-20,-10,0,10,20,30],zt=400;function Bt(e,t){if(t.lead)return{x:t.lead[0],y:t.lead[1]};let n=e.stories[t.story].moments[t.moment]??[],r=[];for(let n of ct(e,t.story,t.moment).steps)n.hop>=0&&(r[n.hop]=Math.max(r[n.hop]??0,n.end));let i=-1;r.forEach((e,t)=>i=i<0||e>=r[i]?t:i);let a=i>=0?e.boxes[n[i].to]?.actor:void 0,o=a===void 0?void 0:Ue(e.actors[a].lot.hull);return o?{x:o[0],y:o[1]}:null}var X=`#141A22`,Vt=[`[data-stage=world]{overflow:hidden}[data-stage=world]>svg,.fw-ov>svg{position:absolute;inset:0;width:100%;height:100%}`,`.bld{transition:opacity .3s,filter .3s}.bld.quiet{opacity:.4;filter:saturate(.15)}.pad{opacity:0;transition:opacity .3s}.pad.on{opacity:1}`,`.fw-ov{position:absolute;inset:0;pointer-events:none;overflow:hidden;font-family:var(--flowfig-font);color:${X}}`,`.fw-tag,.fw-sign,.fw-dchip{position:absolute;left:0;top:0;box-sizing:border-box;overflow:hidden;white-space:nowrap;background:#fff;border:1px solid rgba(20,26,34,.16);transition:opacity .2s}`,`.fw-tag{padding:4px 9px;border-radius:6px}`,`.fw-tn{display:block;font:600 14.8px/19px var(--flowfig-font);color:${X}}`,`.fw-ts{display:flex;font:400 13.8px/17px var(--flowfig-font);color:#4B5361}`,`.fw-mk{display:inline-grid;place-items:center;flex:none;width:14px;height:14px;margin:2px 6px 0 0;border-radius:3px;background:${X};color:#fff;font:700 10px/1 var(--flowfig-font);font-style:normal}`,`.fw-no{color:${K.fail}}.fw-no>.fw-mk{background:${K.fail}}.fw-dchip>.fw-mk{margin-top:0}`,`.fw-tag{transition:opacity .2s,border-color .16s .2s,background-color .16s .2s}.fw-end{border:2px solid ${X};background:#EEF1EA}.fw-end.fw-x{border-color:${K.fail};background:#FCEBE8}.fw-end .fw-tn{font-size:16px;line-height:20px}`,`.fw-cg{font:500 13px/20px var(--flowfig-font)}`,`.fw-sk{font:500 12px/16px var(--flowfig-font);color:#5B6370}`,`.fw-quiet .fw-tn,.fw-quiet .fw-ts{color:#646C79}`,`.fw-sign{padding:6px 10px;border-radius:8px}`,`.fw-row{display:flex;align-items:center;justify-content:space-between;height:30px}.fw-row+.fw-row{margin-top:6px}`,`.fw-q{font:600 15px/20px var(--flowfig-font);color:${X}}`,`.fw-a{margin-left:12px;padding:0 6px;border-radius:5px;font:600 13px/24px var(--flowfig-font);background:#EEF1EA;color:${X}}`,`.fw-a.fw-no{background:#FCEBE8;color:${K.fail}}.fw-a.fw-no::before{content:"\\2717";margin-right:4px}`,`.fw-a.fw-m{display:inline-grid;place-items:center;width:14px;height:14px;padding:0;border-radius:3px;font:700 10px/1 var(--flowfig-font)}.fw-a.fw-m::before{content:none}`,`.fw-dchip{display:flex;align-items:center;padding:0 9px;border-radius:6px;font:600 13px/1 var(--flowfig-font);color:${K.data}}`,`.fw-dchip.fw-thing{color:${X}}.fw-dchip{transition:opacity .2s,scale .2s cubic-bezier(.23,1,.32,1)}.fw-dchip.fw-off{scale:.96}.gt{transition:opacity .2s}`,`.fw-off{opacity:0}`,`@container ff-guide (width < ${d.slim*2}px){.fw-tn{font-size:13px;line-height:16px}.fw-ts{font-size:12px;line-height:15px}.fw-mk{margin:1px 4px 0 0}.fw-sk{display:none}.fw-end .fw-tn{font-size:14px;line-height:17px}.fw-row{height:24px}.fw-q{font-size:13px;line-height:17px}.fw-a{font-size:12px;line-height:20px}.fw-dchip{font-size:12px}}`].join(``),Z=e=>e.toFixed(1),Q=e=>`${Z(e[0])},${Z(e[1])}`,Ht=(e,t)=>{let n=Ve(e.a,e.c1,t),r=Ve(e.c1,e.c2,t),i=Ve(e.c2,e.b,t),a=Ve(n,r,t),o=Ve(r,i,t),s=Ve(a,o,t);return[{a:e.a,c1:n,c2:a,b:s},{a:s,c1:o,c2:i,b:e.b}]},Ut=(e,t,n)=>{let r=t>0?Ht(e,t)[1]:e;return n<1&&(r=Ht(r,(n-t)/(1-t))[0]),`M${Q(r.a)}C${Q(r.c1)} ${Q(r.c2)} ${Q(r.b)}`},Wt=`http://www.w3.org/2000/svg`,$=(e,t,n)=>{let r=document.createElement(e);return r.className=t,n!==void 0&&(r.textContent=n),r},Gt=(e,t)=>{e.style.transform=`translate(${Z(t.x)}px,${Z(t.y)}px)`,e.style.width=`${Z(t.w)}px`,e.style.height=`${Z(t.h)}px`},Kt=(e,t)=>{e.textContent!==t&&(e.textContent=t)},qt;function Jt(e,t,n,r){let i=e.getRootNode();qt||(qt=new CSSStyleSheet,qt.replaceSync(Vt)),i.adoptedStyleSheets.includes(qt)||(i.adoptedStyleSheets=[...i.adoptedStyleSheets,qt]),e.dataset.stage=`world`;let a={},o=e=>a[e]??=Ie(t,e),s=document.createElementNS(Wt,`svg`);s.setAttribute(`role`,`img`);let c=$(`div`,`fw-ov`);e.append(s,c);let l=e=>s.querySelector(e),u=/* @__PURE__ */ new Map,d=o(`narrow`),f=()=>{let e=d.truckArt;return s.innerHTML=`<g class="fw-cam">${d.svg}${e?.door??``}<g class="fw-units"></g>${e?.road??``}`+d.actors.map((e,t)=>e.device===`antenna`?``:`<g class="fw-dev" data-a="${t}">${je.svg}</g>`).join(``)+`<g class="fw-arcs"></g></g>`,u.clear(),{art:e,depot:d.truck>=0?d.actors[d.truck].lot.depot:null,camG:l(`.fw-cam`),unitsG:l(`.fw-units`),arcsG:l(`.fw-arcs`),doorPanel:l(`#doorPanel`),devs:new Map([...s.querySelectorAll(`.fw-dev`)].map(e=>[Number(e.dataset.a),e])),arms:[...s.querySelectorAll(`.arm`)],arms2:[...s.querySelectorAll(`.armW`)],hubs:[...s.querySelectorAll(`.hub`)],gts:[...s.querySelectorAll(`.gt`)],checkers:d.actors.flatMap((e,t)=>e.checks?[t]:[])}},m=f(),h=(e,t)=>e?.setAttribute(`display`,t?`inline`:`none`),g=(e,t,n=1)=>e?.setAttribute(`transform`,`translate(${Z(t[0])} ${Z(t[1])})${n===1?``:` scale(${n})`}`),_=kt(0,0),v,y,b=0,x=``,S=``,C=/* @__PURE__ */ new Map,w=[],T=[],E=[],D=e=>kt(_.w,_.h,r(e)),O=e=>C.get(e)??C.set(e,It(o,e,D(e))).get(e),k=e=>{e!==d&&(d=e,m=f(),x=``,v=void 0)},A=(e,t)=>{let n=O(e);return k(n.sc),n.cams[t]};function j(e,t){let{l:n,t:r,r:i,b:a}=_.region;m.camG.setAttribute(`transform`,`translate(${Z((n+i)/2)} ${Z((r+a)/2)}) scale(${t.z.toFixed(4)}) translate(${Z(-t.x)} ${Z(-t.y)})`);let o=at(d,e),s=!!e.truck&&!o.parked();if(e.truck&&m.depot){let t=e.truck;for(let[e,n]of[[`#truck`,`L`],[`#truckR`,`R`],[`#truckY`,`y`],[`#truckD`,`D`],[`#truckU`,`U`]])h(l(e),t.orient===n),g(l(e),p(t.x,t.y-(`LR`.includes(n)?_e-G/2:0)));let n=m.depot.y+.004,r=m.depot.x+.3,i=m.depot.x+1.8,a=1.03*t.door,o=(e,t,a)=>`<polygon points="${[p(r,n,e),p(i,n,e),p(i,n,t),p(r,n,t)].map(Q).join(` `)}" fill="${a}"/>`,s=o(a,1.03,`#3b463d`);for(let e=0;e<9;e++){let t=.1+e*.105;t>a&&(s+=o(t,Math.min(1.03,t+.035),`#56645a`))}m.doorPanel&&m.doorPanel.dataset.k!==s&&(m.doorPanel.innerHTML=s,m.doorPanel.dataset.k=s);for(let n of`lrdu`)for(let r=0;r<8;r++){let i=l(`#t${n}${r}`),a=t.load[r]?d.things.get(e.units[t.load[r]].thing)?.form:void 0;i&&i.dataset.k!==(a??``)&&(i.innerHTML=a?De[a]:``,i.dataset.k=a??``)}}for(let[t,n]of Object.entries(e.units)){let e=u.get(t);e||(e=document.createElementNS(Wt,`g`),e.innerHTML=De[d.things.get(n.thing)?.form??`box`],m.unitsG.append(e),u.set(t,e));let r=n.where===`yard`||n.where===`road`||n.where===`gate`||n.where===`air`;h(e,r),r&&g(e,n.p)}for(let[t,n]of u)e.units[t]||h(n,!1);for(let[n,r]of m.devs){h(r,e.dev.includes(n)),g(r,o.devBase(n),(o.inCab(n)?.82:1)*_t(t.z,_));for(let t of r.querySelectorAll(`.scr`))h(t,t.getAttribute(`data-s`)===(e.screens[n]??`idle`))}m.checkers.forEach((t,n)=>{let r=d.actors[t].gate,i=e.gates[t],a=i.deg*Math.PI/180,o=p(r.px,r.y,r.z),s=p(r.px+r.L*Math.cos(a),r.y,r.z+r.L*Math.sin(a));for(let e of[m.arms[n],m.arms2[n]])e.setAttribute(`x1`,Z(o[0])),e.setAttribute(`y1`,Z(o[1])),e.setAttribute(`x2`,Z(s[0])),e.setAttribute(`y2`,Z(s[1]));m.arms[n].setAttribute(`stroke`,i.fail?K.fail:`#2e3440`),m.gts[n].style.opacity=i.on===e.moment||i.fail?``:`0`,m.hubs[n].setAttribute(`cx`,Z(o[0])),m.hubs[n].setAttribute(`cy`,Z(o[1]))});let c=``;for(let t of e.arcs){let n=t.fail?K.fail:K.data,r=t.dashed?` stroke-dasharray="7 6"`:``;c+=`<path d="${Ut(t,0,t.t)}" fill="none" stroke="${K.data}" stroke-opacity="${e.summary?t.fail?.38:.38*(e.fade??0):t.moment===e.moment||t.hold?.38:.16}" stroke-width="2" stroke-linecap="round"${r}/>`,t.t<1?c+=`<path d="${Ut(t,Math.max(0,t.t-.16),t.t)}" fill="none" stroke="${n}" stroke-width="3.2" stroke-linecap="round"/>`:t.fail&&(c+=`<path d="${Ut(t,.86,1)}" fill="none" stroke="${K.fail}" stroke-width="3.2" stroke-linecap="round"/>`),t.t>0&&(t.t<1||t.hold)&&(c+=`<circle cx="${Z(J(t,t.t)[0])}" cy="${Z(J(t,t.t)[1])}" r="7" fill="${n}" stroke="#fff" stroke-width="2.4"/>`)}m.arcsG.innerHTML=c,d.actors.forEach((t,n)=>{l(`#pad-${n}`)?.classList.toggle(`on`,e.hi.includes(n)&&!(n===d.truck&&s)),l(`#b-${n}`)?.classList.toggle(`quiet`,!d.stories[e.story].path.includes(n))})}function M(e,t){let n=document.createElementNS(Wt,`svg`),r=``;w=e.tags.map(e=>{let n=$(`div`,`fw-tag${e.quiet?` fw-quiet`:``}`),i=$(`i`,`fw-mk`),a=$(`span`,`fw-ts`);n.dataset.actor=e.name,a.append(i,``),n.append($(`b`,`fw-tn`,e.name),a);for(let t of e.cargo){let e=$(`span`,`fw-ts fw-cg`);e.append($(`i`,`fw-mk`,`✓`),t),n.append(e)}if(Gt(n,e.r),t.acting[y?.moment??-1]===e.name&&n.setAttribute(`aria-current`,`true`),e.pin){let{r:t}=e,[n,i]=e.anchor,a=e.pin===`l`?t.x:e.pin===`r`?t.x+t.w:Math.max(t.x+9,Math.min(t.x+t.w-9,n)),o=e.pin===`t`?t.y:e.pin===`b`?t.y+t.h:Math.max(t.y+9,Math.min(t.y+t.h-9,i));r+=`<path d="M-6 0H6L0 8Z" transform="translate(${Q([a,o])}) rotate(${{l:90,t:180,r:-90,b:0}[e.pin]})" fill="${X}"/>`}else r+=`<path d="M${Q(e.line[0])}L${Q(e.line[1])}" stroke="${X}" stroke-opacity=".55"/><circle cx="${Z(e.line[1][0])}" cy="${Z(e.line[1][1])}" r="2.5" fill="${X}"/>`;return{el:n,actor:e.actor,name:e.name,mk:i,st:a,end:e.end,w:n.style.width}}),T=e.signs.map(e=>{let t=$(`div`,`fw-sign`);e.kick&&t.append($(`div`,`fw-sk`,d.actors[e.actor].name));let n=e.rows.map(e=>{let n=$(`div`,`fw-row`),r=$(`span`,`fw-q`,e.q),i=$(`span`,e.a?`fw-a`:`fw-a fw-m`);return n.append(r,i),t.append(n),{q:r,a:i,m:!e.a}});return Gt(t,e.r),r+=`<path d="M${Q(e.anchor)}L${Q(vt(e.r,e.anchor))}" stroke="#2e3440" stroke-width="2"/>`,{el:t,actor:e.actor,rows:n}});let i=0;E=e.chips.map(e=>{let t=$(`div`,`fw-dchip${d.things.has(e.text)?` fw-thing`:``}`);return e.mark&&(t.append($(`i`,`fw-mk`,e.mark)),t.style.transitionDelay=`${i++*60}ms`),t.append(e.text),Gt(t,e.r),{el:t,text:e.text}}),n.innerHTML=r,c.replaceChildren(n,...w.map(e=>e.el),...T.map(e=>e.el),...E.map(e=>e.el))}function N(e,t){let n=d.stories[e.story],r=e.summary?n.path:e.hi,i=d.boxes[n.end],a=[];if(e.summary&&i){a.push(`End: ${i.label}${e.ever[i.actor]?.fail?`, failed`:``}.`);let t=/* @__PURE__ */ new Set;for(let n of Object.values(e.units))n.moment>=0&&!t.has(n.thing)&&a.push(`${t.add(n.thing)&&n.thing}: ${n.fail?`stopped`:`kept`}.`)}for(let t of w){let n=e.ever[t.actor];n&&r.includes(t.actor)&&a.push(`${t.name}: ${Le(n,e.summary)}${n.fail?`, failed`:``}.`)}s.setAttribute(`aria-label`,a.join(` `)||S);for(let n of w){let r=e.ever[n.actor];n.mk.hidden=!r,Kt(n.mk,r?r.fail?`✗`:`✓`:``),Kt(n.st.lastChild,r?Le(r,e.summary):`Not reached`),n.st.classList.toggle(`fw-no`,!!r?.fail),n.el.classList.toggle(`fw-end`,e.summary&&t&&n.end),n.el.style.width=t?n.w:`max-content`,n.el.style.minWidth=t?``:n.w,n.el.classList.toggle(`fw-x`,!!r?.fail)}for(let n of T){let r=e.gates[n.actor];n.el.classList.toggle(`fw-off`,!t&&(!r.rows.length||r.on!==e.moment&&!e.summary)),n.rows.forEach((e,t)=>{let n=r.rows[t];e.q.parentElement.style.visibility=n?``:`hidden`,Kt(e.a,e.m&&n?.a?n.fail?`✗`:`✓`:n?.a??``),e.a.hidden=!n?.a,e.a.classList.toggle(`fw-no`,!!n?.fail)})}let o=/* @__PURE__ */ new Set;for(let t of e.arcs)t.moment===e.moment&&t.t===1&&t.text&&o.add(t.text);for(let t of Object.values(e.units))t.moment===e.moment&&(t.where===`yard`||t.where===`gate`)&&o.add(t.thing);for(let e of E)e.el.classList.toggle(`fw-off`,!t&&!o.has(e.text))}function P(e,t){let{story:n,moment:r}=y,i=A(n,r),a=`${n}/${r}/${_.w}x${_.h}`;x!==a&&(x=a,M(i,d.stories[n]));let o=dt(d,n,r,e?1/0:t);j(o,v),N(o,e)}let F=()=>{let{width:t,height:n}=e.getBoundingClientRect();return t===_.w&&n===_.h?!1:(_=kt(t,n),C.clear(),k(o(_.form)),s.setAttribute(`viewBox`,`0 0 ${t} ${n}`),!0)},I=new ResizeObserver(()=>{F()&&y&&_.w&&(cancelAnimationFrame(b),n())});return I.observe(e),F(),{show(e,t,n,r){if(cancelAnimationFrame(b),S=r,y={story:e,moment:t},!_.w||!_.h)return 0;_=D(e);let i=A(e,t).cam,a=v??i;if(!n)return v=i,P(!0,0),0;let{end:o,events:s}=ut(d,e,t),c=s.find(e=>e.kind===`camera`),l=performance.now(),u=e=>{let t=e-l;if(t>=o)return v=i,P(!0,0);let n=q.out(Math.min(1,Math.max(0,(t-c.start)/(c.end-c.start))));v={x:a.x+(i.x-a.x)*n,y:a.y+(i.y-a.y)*n,z:a.z+(i.z-a.z)*n},P(!1,t),b=requestAnimationFrame(u)};return u(l),o},fits(e){try{return!_.w||O(e).cams.every(e=>!e.faults)}catch{return!1}},stop(){cancelAnimationFrame(b),I.disconnect()}}}export{Jt as mountWorld,Ie as scene};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type FlowProps } from './model.ts';
|
|
2
|
+
declare const Base: typeof HTMLElement;
|
|
3
|
+
export declare class FlowfigExplain extends Base {
|
|
4
|
+
#private;
|
|
5
|
+
static observedAttributes: string[];
|
|
6
|
+
constructor();
|
|
7
|
+
connectedCallback(): void;
|
|
8
|
+
disconnectedCallback(): void;
|
|
9
|
+
attributeChangedCallback(name: string, old: string | null, value: string | null): void;
|
|
10
|
+
get spec(): FlowProps | undefined;
|
|
11
|
+
set spec(v: FlowProps | undefined);
|
|
12
|
+
get beforeSpec(): FlowProps | undefined;
|
|
13
|
+
set beforeSpec(v: FlowProps | undefined);
|
|
14
|
+
get moment(): number;
|
|
15
|
+
set moment(i: number);
|
|
16
|
+
next(): void;
|
|
17
|
+
back(): void;
|
|
18
|
+
play(): void;
|
|
19
|
+
pause(): void;
|
|
20
|
+
show(stepLabel: string): void;
|
|
21
|
+
}
|
|
22
|
+
declare global {
|
|
23
|
+
interface HTMLElementTagNameMap {
|
|
24
|
+
'flowfig-explain': FlowfigExplain;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export {};
|
package/dist/element.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import{$ as e,A as t,B as n,C as r,D as i,E as a,F as o,G as s,H as c,I as l,J as u,K as d,L as f,M as p,N as m,O as h,P as g,Q as _,R as v,S as y,T as b,U as x,V as S,W as C,X as w,Y as T,Z as E,_ as D,b as O,d as k,et as A,f as j,g as M,h as N,j as P,k as F,l as I,m as L,n as R,nt as z,p as ee,q as te,rt as ne,s as re,t as B,tt as ie,u as ae,v as oe,w as se,x as ce,y as le,z as ue}from"./element-looks.js";var de=(e,t,n)=>[...t,...e.map(e=>n?e:{...e,box:!0})],fe=4,V=e=>e.x+e.w/2,pe=e=>e.y+e.h/2,me=([e,t,n,r],i)=>{let a=1-i,[o,s,c,l]=[a*a*a,3*a*a*i,3*a*i*i,i*i*i];return{x:o*e.x+s*t.x+c*n.x+l*r.x,y:o*e.y+s*t.y+c*n.y+l*r.y}},he=(e,t)=>e.x===t.x&&e.y===t.y&&e.w===t.w&&e.h===t.h,H=(e,t)=>t===`l`?{x:e.x,y:pe(e)}:t===`r`?{x:e.x+e.w,y:pe(e)}:t===`t`?{x:V(e),y:e.y}:{x:V(e),y:e.y+e.h},ge=(e,t,n)=>t===`l`||t===`r`?{x:e.x+(t===`r`?e.w:0),y:e.y+e.h*n}:{x:e.x+e.w*n,y:e.y+(t===`b`?e.h:0)},_e=(e,t,n)=>{let r=n===`l`||n===`r`,i=Math.abs(r?t.x-e.x:t.y-e.y)/2,a=n===`r`||n===`b`?1:-1;return[e,r?{x:e.x+a*i,y:e.y}:{x:e.x,y:e.y+a*i},r?{x:t.x-a*i,y:t.y}:{x:t.x,y:t.y-a*i},t]},ve=(e,t,n,r)=>n===`above`||n===`below`?[e,{x:e.x,y:r},{x:t.x,y:r},t]:[e,{x:r,y:e.y},{x:r,y:t.y},t],ye=50,be=16,xe=24,Se=e=>e===`left`||e===`right`,Ce=(e,t,n,r,i=0)=>{let a=[e,t,...r],o=Se(n)?Math.max(ye,(i/2+12)/.75):ye;return n===`above`?Math.min(...a.map(e=>e.y))-o:n===`below`?Math.max(...a.map(e=>e.y+e.h))+o:n===`left`?Math.min(...a.map(e=>e.x))-o:Math.max(...a.map(e=>e.x+e.w))+o},we=(e,t,n)=>{let[r,i]=Se(n)?[pe(e),pe(t)]:[V(e),V(t)];return[Math.min(r,i),Math.max(r,i)]},U={above:[`t`,`t`],below:[`b`,`b`],left:[`l`,`l`],right:[`r`,`r`]},Te=e=>{let t=e.slice(1).reduce((t,n,r)=>t+Math.hypot(n.x-e[r].x,n.y-e[r].y),0),n=Math.max(32,Math.ceil(t/4));return Array.from({length:n+1},(t,r)=>me(e,r/n))},W=(e,t,n)=>{let r=e.map(e=>e.x),i=e.map(e=>e.y),a=t.filter(e=>e.x+e.w+n>Math.min(...r)&&e.x-n<Math.max(...r)&&e.y+e.h+n>Math.min(...i)&&e.y-n<Math.max(...i));if(!a.length)return[];let o=Te(e);return a.filter(e=>o.some(t=>t.x>e.x-n&&t.x<e.x+e.w+n&&t.y>e.y-n&&t.y<e.y+e.h+n))};function Ee(e,t,n=/* @__PURE__ */ new Set,r=[],i,a,o=24){let s=[],c=[];for(let n of e){let e=t[n.from],i=t[n.to];if(!e||!i)continue;let a=e.x<i.x+i.w&&i.x<e.x+e.w,o=r.filter(t=>t.box&&!he(t,e)&&!he(t,i)),l=a?e.y<i.y?[`b`,`t`]:[`t`,`b`]:e.x<i.x?[`r`,`l`]:[`l`,`r`],u=W(_e(H(e,l[0]),H(i,l[1]),l[0]),o,-2),d=(t,n)=>[.2,.5,.8].filter(r=>W(ve(ge(e,U[t][0],r),ge(i,U[t][1],r),t,n),o,-6).length>0).length,f=(e,t)=>d(e,t)===3,p=n.around,m=n.elbow,h=p&&Ce(e,i,p,u,n.labelW),g=(t,n)=>Ce(e,i,t,u)+(t===`above`||t===`left`?-1:1)*n*be;p&&f(p,h)&&(h=Array.from({length:25},(e,t)=>[p,g(p,t)]).find(([e,t])=>!f(e,t))?.[1]??h,f(p,h)&&(p=void 0));let _=n.drop&&!W(_e(H(e,`b`),H(i,`t`),`b`),o,-2).length;if(n.drop&&!p)m=!_;else if(!p&&!n.sides&&!n.stub&&!n.elbow&&u.length){let t=a?[`left`,`right`]:[`above`,`below`],r=[];for(let a of[!1,!0])for(let o of t){let[t,s]=we(e,i,o),l=c.filter(e=>e.way===o&&e.lo<s&&t<e.hi).map(e=>e.at);if(l.length&&!a)continue;let d=o===`above`||o===`left`?-1:1;r.push([o,d*Math.max(d*Ce(e,i,o,u,n.labelW),...l.map(e=>d*e+be))])}for(let e=0;e<=xe;e++)for(let n of t)r.push([n,g(n,e)]);let o=r.reduce((e,t)=>{let n=d(...t);return n<e[0]?[n,t]:e},[3,void 0])[1];[p,h]=o??[],m=n.elbow||!p}if(p){let[t,n]=we(e,i,p);c.push({way:p,lo:t,hi:n,at:h})}let[v,y]=n.sides??(n.stub?[`r`,`l`]:_?[`b`,`t`]:p?U[p]:l);s.push({...n,plain:l,a:e,b:i,sa:v,sb:y,around:p,arc:h,elbow:m})}let l=/* @__PURE__ */ new Map,u=()=>{l=/* @__PURE__ */ new Map;let e=/* @__PURE__ */ new Map;for(let t of s)for(let n of[!0,!1]){let r=(n?t.from:t.to)+`:`+(n?t.sa:t.sb);e.has(r)||e.set(r,[]),e.get(r).push({pick:t,start:n})}for(let[t,r]of e){let e=n.has(t.slice(0,t.lastIndexOf(`:`))),i=r[0].start?r[0].pick.sa:r[0].pick.sb,a=i===`t`||i===`b`,o=e=>{let t=e.start?e.pick.b:e.pick.a;return a?V(t):pe(t)};r.sort((e,t)=>o(e)-o(t)),r.forEach((t,n)=>{let a=t.start?t.pick.a:t.pick.b,o=e?.5:(n+1)/(r.length+1),s=i===`l`?{x:a.x,y:a.y+a.h*o}:i===`r`?{x:a.x+a.w,y:a.y+a.h*o}:i===`t`?{x:a.x+a.w*o,y:a.y}:{x:a.x+a.w*o,y:a.y+a.h};l.set(t.pick.id+(t.start?`:s`:`:e`),s)})}};u();let d=!1;for(let e of s){let[t,n]=[l.get(e.id+`:s`),l.get(e.id+`:e`)];if(!e.around||!t||!n)continue;let i=r.filter(t=>t.box&&!he(t,e.a)&&!he(t,e.b));if(!W(ve(t,n,e.around,e.arc),i,-6).length)continue;let[a,o]=e.plain,s=W(_e(H(e.a,a),H(e.b,o),a),i,-6).length>0;[e.sa,e.sb,e.around,e.arc,e.elbow,d]=[a,o,void 0,void 0,e.elbow||s,!0]}d&&u();let f=(e,t,n)=>{let[r,i,a,o]=t;return{id:e,d:`M ${r.x} ${r.y} C ${i.x} ${i.y}, ${a.x} ${a.y}, ${o.x} ${o.y}`,mid:n,curve:t}},p=[],m=[],h=[],g=e=>{m.push(...e),e.slice(1).forEach((t,n)=>h.push([e[n],t]))},_=(e,t)=>!t||e.x>=t.x+4&&e.x+e.w<=t.x+t.w-4&&e.y>=t.y+4&&e.y+e.h<=t.y+t.h-4,v=(e,t)=>_(e,t)&&(!i||e.x>=i.x&&e.x+e.w<=i.x+i.w&&e.y>=i.y&&e.y+e.h<=i.y+i.h)&&![...r,...p].some(t=>e.x<t.x+t.w+2&&t.x<e.x+e.w+2&&e.y<t.y+t.h+2&&t.y<e.y+e.h+2)&&!m.some(t=>t.x>e.x-2&&t.x<e.x+e.w+2&&t.y>e.y-2&&t.y<e.y+e.h+2),y=Object.values(t),[b,x]=[Math.min(...y.map(e=>e.x)),Math.min(...y.map(e=>e.y))],[S,C]=[Math.max(...y.map(e=>e.x+e.w)),Math.max(...y.map(e=>e.y+e.h))],w=e=>e>0?e+1:0,T=(e,{x:t,y:n})=>e===`above`?x-n:e===`below`?n-C:e===`left`?b-t:t-S,E=(e,t,n,r)=>Math.max(44,a||!r?T(e,{x:t,y:t})-6:T(e,me(n,.5))+(Se(e)?r/2:9)),D=e=>{let t=!e.stub&&e.elbow&&e.sa===`l`,[i,a]=[l.get(e.id+(t?`:e`:`:s`)),l.get(e.id+(t?`:s`:`:e`))],o=e=>{if(!t)return e;let n=[...e.elbow].reverse(),r=n.slice(1).reduce((e,t,r)=>e+(t.y===n[r].y?` H ${t.x}`:` V ${t.y}`),`M ${n[0].x} ${n[0].y}`);return{...e,d:r,curve:[...e.curve].reverse(),elbow:n}};if(e.stub){let[t,o,s]=e.stub,[c,l]=e.bands??[],u=(e,t,n)=>[t,...(n?Array.from({length:Math.max(0,Math.floor((n.h-26)/4))+1},(e,t)=>n.y+4+t*4):[e.y+e.h+2,e.y-20]).filter(e=>e!==t)],d=(e,t,n,r,i,a)=>{let o,s;if(i)[o,s]=[t,{x:n>0?r.x:r.x+r.w,y:r.y+9}];else{let t=a?V(e):Math.min(Math.max(r.x+r.w/2,e.x+8,r.x+8),e.x+e.w-8,r.x+r.w-8),n=r.y>=e.y+e.h;[o,s]=[{x:t,y:n?e.y+e.h:e.y},{x:t,y:n?r.y:r.y+r.h}]}return n>0?[r,o,s]:[r,s,o]};function*f(t,r,i,a,o){let s=n.has(a>0?e.from:e.to),c=u(r,i.y-9,o).map((e,t)=>({y:e,d:Math.abs(e+9-i.y),i:t})).sort((e,t)=>e.d-t.d||e.i-t.i),l=[];for(let e=12-8*Math.ceil((r.w+t)/8);e<=252;e+=8){let n=a>0?i.x+e:i.x-e-t;e<12&&s&&!(n+8<=V(r)&&V(r)<=n+t-8)||c.length&&l.push({dx:e,x:n,k:0,key:Math.abs(e-12)+c[0].d,i:l.length})}let f=(e,t)=>e.key<t.key||e.key===t.key&&e.i<t.i;for(l.sort((e,t)=>e.key-t.key||e.i-t.i);l.length;){let e=l[0],{y:n}=c[e.k++];if(e.k<c.length)e.key=Math.abs(e.dx-12)+c[e.k].d;else{let e=l.pop();l.length&&(l[0]=e)}for(let e=0;;){let t=2*e+1,n=e;if(t<l.length&&f(l[t],l[n])&&(n=t),t+1<l.length&&f(l[t+1],l[n])&&(n=t+1),n===e)break;[l[e],l[n]]=[l[n],l[e]],e=n}e.dx<12&&!(n>=r.y+r.h+6||n+18<=r.y-6)||(yield d(r,i,a,{x:e.x,y:n,w:t,h:18},e.dx>=12,s))}}let m=(t,r,i,a,o)=>{if(!n.has(a>0?e.from:e.to))return[];let s=[];for(let e of u(r,i.y+12,o))for(let n=i.x-t+8;n<=i.x-8;n+=8){let r=e>=i.y+12;if(!r&&e+18>i.y-12)continue;let o={x:n,y:e,w:t,h:18},[c,l]=[i,{x:i.x,y:r?e:e+18}];s.push([o,...a>0?[c,l]:[l,c],Math.abs(e+9-i.y)+Math.abs(n+t/2-i.x)])}return s.sort((e,t)=>e[3]-t[3]).map(([e,t,n])=>[e,t,n])};function*_(t){yield*f(t,e.a,i,1,c),yield[{x:V(e.a)-t/2,y:e.a.y+e.a.h+12,w:t,h:18},{x:V(e.a),y:e.a.y+e.a.h},{x:V(e.a),y:e.a.y+e.a.h+12}],yield[{x:V(e.a)-t/2,y:e.a.y-12-18,w:t,h:18},{x:V(e.a),y:e.a.y},{x:V(e.a),y:e.a.y-12}],yield*m(t,e.a,i,1,c)}function*y(){yield*f(o,e.b,a,-1,l),yield[{x:V(e.b)-o/2,y:e.b.y-12-18,w:o,h:18},{x:V(e.b),y:e.b.y-12},{x:V(e.b),y:e.b.y}],yield[{x:V(e.b)-o/2,y:e.b.y+e.b.h+12,w:o,h:18},{x:V(e.b),y:e.b.y+e.b.h+12},{x:V(e.b),y:e.b.y+e.b.h}],yield*m(o,e.b,a,-1,l)}let b=(e,t)=>Array.from({length:9},(n,r)=>({x:e.x+(t.x-e.x)*r/8,y:e.y+(t.y-e.y)*r/8})),x=(e,t,n)=>b(e,t).every(e=>![...r,...p].some(t=>t!==n&&e.x>t.x+2&&e.x<t.x+t.w-2&&e.y>t.y+2&&e.y<t.y+t.h-2)),S=(e,t)=>!h.some(([n,r])=>Pe(e,t,n,r)),C=(e,t,n)=>([r,i,a])=>v(r,t)&&x(i,a,e)&&(!n||S(i,a)),w=(e,t,n)=>{for(let r of[!0,!1]){let i=C(e,t,r);for(let[e,t]of n.entries())for(let n of t())if(i(n))return[n,e,!r]}},T=w(e.a,c,[()=>_(t),...s==null?[]:[()=>_(s)]]),E=T?.[1]===1,[D,O,k]=T?.[0]??_(t).next().value;p.push(D),g(b(O,k));let A=w(e.b,l,[y]),[j,M,N]=A?.[0]??y().next().value;p.push(j),g(b(M,N));let P=(e,t)=>`M ${e.x} ${e.y} L ${t.x} ${t.y}`,F=[P(O,k),P(M,N)];return{id:e.id,d:F.join(` `),mid:{x:D.x+D.w/2,y:D.y+9},curve:[O,O,N,N],stub:{parts:F,pills:[D,j],pts:[[O,k],[M,N]],tight:[T?.[2]!==!1,A?.[2]!==!1],...E&&{short:!0}}}}if(e.elbow){if(a.x-i.x<16&&i.y===a.y)return o({id:e.id,d:`M ${i.x} ${i.y} H ${a.x}`,mid:{x:(i.x+a.x)/2,y:i.y},curve:[i,i,a,a],elbow:[i,a]});let t=t=>[e.a,e.b].some(e=>he(e,t)),n=r.filter(e=>!t(e)),s=n.filter(e=>e.box),c=(e,t,r,i=2)=>!n.some(n=>e>n.x-i&&e<n.x+n.w+i&&Math.max(t,r)>n.y&&Math.min(t,r)<n.y+n.h),l=(e,t,n,r=s,i=2)=>!r.some(r=>e>r.y-i&&e<r.y+r.h+i&&Math.max(t,n)>r.x&&Math.min(t,n)<r.x+r.w);if(a.x-i.x<16){let t=i.x+8,r=a.x-8,s=(i.y+a.y)/2,u=Array.from({length:Math.floor((C-x+24)/4)+1},(e,t)=>x-12+t*4).sort((e,t)=>Math.abs(e-s)-Math.abs(t-s)).find(e=>c(t,i.y,e)&&l(e,r,t,n)&&c(r,e,a.y))??s;return o({id:e.id,d:`M ${i.x} ${i.y} H ${t} V ${u} H ${r} V ${a.y} H ${a.x}`,mid:{x:(t+r)/2,y:u},curve:[i,{x:t,y:u},{x:r,y:u},a],elbow:[i,{x:t,y:i.y},{x:t,y:u},{x:r,y:u},{x:r,y:a.y},a],bleed:{above:w(x-u),below:w(u-C)}})}let u=(i.x+a.x)/2,d=Array.from({length:Math.floor((a.x-i.x-16)/4)+1},(e,t)=>i.x+8+t*4).sort((e,t)=>Math.abs(e-u)-Math.abs(t-u)),f=[u,a.x-8,i.x+8,...d].find(e=>c(e,i.y,a.y)&&l(i.y,i.x,e)&&l(a.y,e,a.x));if(f==null&&s.length){let t=Math.max(...s.map(e=>e.x+e.w))+12,r=Math.min(...s.map(e=>e.x)),[u,d]=[Math.min(...s.map(e=>e.y))-12,Math.max(...s.map(e=>e.y+e.h))+12],f;for(let e=i.x+8;e<=t;e+=4)if(l(i.y,i.x,e)){for(let t=a.x-8;t>=r;t-=4)if(l(a.y,t,a.x))for(let r=u;r<=d;r+=4){let o=e-i.x+Math.abs(r-i.y)+Math.abs(e-t)+Math.abs(a.y-r)+a.x-t,s=Math.abs(r-(i.y+a.y)/2);f&&(o>f.len||o===f.len&&s>=f.off)||c(e,i.y,r,8)&&l(r,e,t,n,8)&&c(t,r,a.y)&&(f={len:o,off:s,x:e,y:r,ex:t})}}if(f){let{x:t,y:n,ex:r}=f;return o({id:e.id,d:`M ${i.x} ${i.y} H ${t} V ${n} H ${r} V ${a.y} H ${a.x}`,mid:{x:(t+r)/2,y:n},curve:[i,{x:t,y:n},{x:r,y:n},a],elbow:[i,{x:t,y:i.y},{x:t,y:n},{x:r,y:n},{x:r,y:a.y},a],bleed:{left:w(b-Math.min(t,r)),right:w(Math.max(t,r)-S),above:w(x-n),below:w(n-C)}})}}let p=f??u,m={x:p,y:i.y},h={x:p,y:a.y};return o({id:e.id,d:`M ${i.x} ${i.y} H ${p} V ${a.y} H ${a.x}`,mid:{x:p,y:(i.y+a.y)/2},curve:[i,m,h,a],elbow:[i,m,h,a]})}if(e.around){let t=ve(i,a,e.around,e.arc);return{...f(e.id,t,me(t,.5)),around:e.around,room:E(e.around,e.arc,t,e.labelW)}}return f(e.id,_e(i,a,e.sa),{x:(i.x+a.x)/2,y:(i.y+a.y)/2})},O=/* @__PURE__ */ new Map;for(let e of s)e.stub||O.set(e,D(e));let k=[...O.values()],A=e=>{let t=t=>Math.max(e,Oe(k,t)),[n,r]=[t(`left`),t(`above`)];return{x:b-n,y:x-r,w:S-b+n+t(`right`),h:C-x+r+t(`below`)}},[j,M]=[A(Math.min(o,ke)),A(o)],N=e=>e.elbow?e.elbow.slice(1).flatMap((t,n)=>Array.from({length:17},(r,i)=>G(e.elbow[n],t,i/16))):Array.from({length:33},(t,n)=>me(e.curve,n/32)),P=r.filter(e=>e.box),F=(e,t)=>({x:e.x-t/2,y:e.y-9,w:t,h:18}),I=e=>{let t=[],n=[],r=0;for(let[i,o]of O){if(!i.labelW)continue;let s=a?Ne(o,i.labelW,a,t):e?Me(o,i.labelW,P,t,j,k.filter(e=>e!==o).flatMap(N)):Me(o,i.labelW,P,t),c=F(s,i.labelW);(!Ae(c,M)||[...P,...t].some(e=>je(c,e,1)))&&r++,t.push(c),n.push(s)}return{out:t,mids:n,bad:r}},L=I(!0),R=L.bad&&!a?I(!1):L,z=R.bad<L.bad?R:L;p.push(...z.out);let ee=0;for(let[e,t]of O){if(e.labelW){t.mid=z.mids[ee++];let[n,r]=[b-t.mid.x+e.labelW/2,t.mid.x+e.labelW/2-S];t.bleed={...t.bleed,left:Math.max(t.bleed?.left??0,n,0),right:Math.max(t.bleed?.right??0,r,0)}}g(Array.from({length:33},(e,n)=>me(t.curve,n/32)))}for(let e of s)e.stub&&O.set(e,D(e));return s.map(e=>({...O.get(e),ends:[`${e.from}:${e.sa}`,`${e.to}:${e.sb}`]}))}var De=(e,t,n)=>{let r=new Set(n.flatMap(e=>e.ends??[])),i=t===`start`?[`l`,`t`,`b`,`r`]:[`r`,`b`,`t`,`l`];return i.find(t=>!r.has(`${e}:${t}`))??i[0]},Oe=(e,t)=>Math.max(0,...e.map(e=>e.around===t?e.room:e.bleed?.[t]??0)),ke=4,Ae=(e,t)=>e.x>=t.x-.5&&e.x+e.w<=t.x+t.w+.5&&e.y>=t.y-.5&&e.y+e.h<=t.y+t.h+.5,je=(e,t,n)=>e.x<t.x+t.w+n&&t.x<e.x+e.w+n&&e.y<t.y+t.h+n&&t.y<e.y+e.h+n,G=(e,t,n)=>({x:e.x+(t.x-e.x)*n,y:e.y+(t.y-e.y)*n});function Me(e,t,n,r,i,a=[]){let[o,s,c,l]=e.curve,u=[],d=e.elbow,f=d?.slice(1).map((e,t)=>Math.hypot(e.x-d[t].x,e.y-d[t].y)),p=f?.reduce((e,t)=>e+t,0)??0;for(let t of[.5,.45,.55,.4,.6,.35,.65,.3,.7,.25,.75,.2,.8]){let n,r,i;if(d&&f&&p>0){let e=0,a=t*p;for(;e<f.length-1&&a>f[e];)a-=f[e++];let o=f[e]?a/f[e]:0;n=G(d[e],d[e+1],o),[r,i]=[d[e+1].x-d[e].x,d[e+1].y-d[e].y]}else{let a=1-t;r=3*(a*a*(s.x-o.x)+2*a*t*(c.x-s.x)+t*t*(l.x-c.x)),i=3*(a*a*(s.y-o.y)+2*a*t*(c.y-s.y)+t*t*(l.y-c.y)),n=t===.5?e.mid:me(e.curve,t)}let a=Math.hypot(r,i)||1;for(let e of[0,11,-11])u.push({x:n.x-i/a*e,y:n.y+r/a*e})}let m=e=>!i||Ae({x:e.x-t/2,y:e.y-9,w:t,h:18},i),h=e=>i?{x:Math.max(i.x+t/2,Math.min(e.x,i.x+i.w-t/2)),y:Math.max(i.y+9,Math.min(e.y,i.y+i.h-9))}:e,g=(e,i,o=1)=>{let s={x:e.x-t/2,y:e.y-9,w:t,h:18};return m(e)&&!n.some(e=>je(s,e,o))&&!r.some(e=>je(s,e,1))&&(!i||!a.some(e=>e.x>s.x-2&&e.x<s.x+t+2&&e.y>s.y-2&&e.y<s.y+20))};for(let e of u)if(g(e,!0,6))return e;for(let e of[!0,!1])for(let t of u)if(g(t,e))return t;for(let e of u.map(h))if(g(e,!1))return e;return i?Me(e,t,n,r):e.mid}function Ne(e,t,{bands:n,boxes:r},i){let a=Array.from({length:65},(e,t)=>t/64).sort((e,t)=>Math.abs(e-.5)-Math.abs(t-.5)).map(t=>me(e.curve,t)),o=e=>!r.some(t=>je(e,t,1))&&!i.some(t=>je(e,t,1)),s=(e,n)=>e-t/2>=n.x+fe&&e+t/2<=n.x+n.w-fe;for(let e of a){let r={x:e.x-t/2,y:e.y-9,w:t,h:18};if(n.some(t=>s(e.x,t)&&r.y>=t.y+fe&&r.y+18<=t.y+t.h-fe)&&o(r))return e}for(let e of a)for(let r of n){if(!s(e.x,r)||r.h<26)continue;let n=Math.min(Math.max(e.y,r.y+fe+9),r.y+r.h-fe-9),i={x:e.x-t/2,y:n-9,w:t,h:18};if(o(i)&&a.some(e=>e.x>=i.x&&e.x<=i.x+t&&e.y>=i.y&&e.y<=i.y+18))return{x:e.x,y:n}}return e.mid}function Pe(e,t,n,r){let i=Math.hypot(t.x-e.x,t.y-e.y);if(i<4)return!1;let a=1.5/i,[o,s]=[{x:e.x+(t.x-e.x)*a,y:e.y+(t.y-e.y)*a},{x:t.x-(t.x-e.x)*a,y:t.y-(t.y-e.y)*a}],c=(e,t,n)=>Math.sign((t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x));return c(o,s,n)*c(o,s,r)<0&&c(n,r,o)*c(n,r,s)<0}var K={gap:24,band:20,cols:28,phase:30,row:34,minCol:120,pad:24,bandInset:8,clear:12,inset:6,maxOpen:10},Fe=e=>`▸ ${e.label} · ${e.messages} messages`,Ie=e=>P(e)?[...e.id?[{id:e.id,label:u(e.label)}]:[],...e.children.flatMap(Ie)]:[{id:e.id,label:u(e.label)}];function Le(e,t){return e.states[Math.min(t,e.states.length-1)]??e.states[0]}function Re(e,t){let n=e.steps??[],r=new Map(e.edges.map(e=>[b(e),e])),i=new Set(Ie(e.layout).map(e=>e.id)),a=n.map((e,t)=>e.flow.map(_).map((e,n)=>e.hops.filter(e=>{if(!r.has(e.edge))return!1;let t=r.get(e.edge);return i.has(t.from)&&i.has(t.to)}).map(e=>({step:t,beat:n,edge:e.edge,back:e.back,text:u(e.data)||u(r.get(e.edge).label),async:e.async===!0,tone:e.tone})))),o=a.flat(2);if(!o.length)return null;let s=new Set(o.flatMap(e=>[r.get(e.edge).from,r.get(e.edge).to])),c=Ie(e.layout).filter(e=>s.has(e.id)),d=new Map(c.map((e,t)=>[e.id,t])),f=K.minCol;for(let e of c)f=Math.max(f,z(e.label,12)+16+K.bandInset*2);for(let e of o)e.text&&(f=Math.max(f,l(e.text)+16));let p=o.length>K.maxOpen,m=e=>z(e,13,!0),h=(()=>{let e=`${o.length} of ${o.length}`;return z(e,11)+.44*e.length})(),g=Math.max(...a.map((e,t)=>{let r=u(n[t].label);return m(p?Fe({label:r,messages:e.flat().length}):r)})),v=(t,n,r)=>{let i=t+r*c.length+n,a=c.map((e,n)=>({id:e.id,label:e.label,x:t+r*(n+.5),w:r})),o=[],s=(e,t)=>{let n=new Set(Ie(e).map(e=>e.id)),r=a.filter(e=>n.has(e.id));if(e.label!=null&&r.length){let n=Math.min(...r.map(e=>e.x-e.w/2))+K.bandInset+t*4,i=Math.max(...r.map(e=>e.x+e.w/2))-K.bandInset-t*4;o.push({id:e.id??u(e.label),label:u(e.label),rect:{x:n,y:t*K.band,w:i-n,h:0}})}for(let n of e.children)P(n)&&s(n,t+(e.label==null?0:1))};s(e.layout,0);let l=o.flatMap(e=>[e.rect.x,e.rect.x+e.rect.w]);return{width:i,columns:a,bands:o,dl:Math.max(0,K.pad+g+K.clear-Math.min(1/0,...l)),dr:Math.max(0,Math.max(-1/0,...l)-(i-K.pad-h-K.clear))}},y=(e,n)=>Math.max(f,(t-e-n)/c.length),[x,S]=[K.pad,K.pad],C=y(x,S),w=v(x,S,C);for(let e=0;w.dl>.01||w.dr>.01;e++)x+=w.dl,S+=w.dr,e<8&&(C=y(x,S)),w=v(x,S,C);let{width:T,columns:E,bands:D}=w,O=(D.length?Math.max(...D.map(e=>e.rect.y))+K.band:0)+K.cols,k=[],A=[],j=0;a.forEach((e,t)=>{let i=u(n[t].label),a=e.flat().length,o=e=>K.pad+m(e)+K.clear,s={open:o(i),folded:o(Fe({label:i,messages:a})),end:T-K.pad-h-K.clear};k.push({kind:`phase`,step:t,label:i,messages:a,line:s});for(let n of e){let e=n.length>1?A.push({step:t,rows:[]})-1:void 0;for(let i of n){let n=r.get(i.edge),[a,o]=i.back?[n.to,n.from]:[n.from,n.to],s=d.get(a),c=d.get(o),u=(E[s].x+E[c].x)/2,f=i.text?{x:u-l(i.text)/2,w:l(i.text)}:void 0;e!=null&&A[e].rows.push(k.length),k.push({kind:`message`,step:t,beat:i.beat,n:++j,edge:i.edge,from:s,to:c,text:i.text,async:i.async,tone:i.tone,pill:f,group:e})}}});let M=n.map((e,t)=>{let n=O;return k.map(e=>{let r=!p||e.kind===`phase`||e.step===t,i={y:n,shown:r};return r&&(n+=e.kind===`phase`?K.phase:K.row),i})}),N=Math.max(...M.map(e=>e.reduce((e,t,n)=>t.shown?Math.max(e,t.y+(k[n].kind===`phase`?K.phase:K.row)):e,0)))+8;for(let e of D)e.rect.h=N-e.rect.y-e.rect.y/K.band*4;return{width:T,head:O,height:N,columns:E,bands:D,rows:k,groups:A,total:j,folds:p,states:M}}function ze(e,t){let n=t.rows.flatMap(t=>{let n=e.rows[t];return n.kind===`message`?[e.columns[n.from].x,e.columns[n.to].x,...n.pill?[n.pill.x,n.pill.x+n.pill.w]:[]]:[]}),r=Math.min(...n)-K.inset,i=(K.row-18)/2-K.inset;return{x:r,y:i,w:Math.max(...n)+K.inset-r,h:t.rows.length*K.row-i*2}}function Be(e,t){if(e.timeline||!e.lanes||!p(e.layout))return null;let n=e.rail?Re(e,560)?.width??0:0;return S(e,{width:t.width,minText:t.minText,padding:t.padding??24,floor:n})}var Ve=830,q=8,He=2.5,J=105,Y=10,Ue=e=>P(e)&&e.label==null&&e.id==null?e.children.flatMap(Ue):[e],We=/* @__PURE__ */ new WeakSet,Ge=(e,t)=>{let n=e.findIndex((e,n)=>e!==t[n]);return n>=0&&e[n]<t[n]};function Ke(e,n,r,i,a){let o=e.length,s=n.map(e=>[r.get(e.from),r.get(e.to)].sort((e,t)=>e-t)),c=/* @__PURE__ */ new Map,l=(t,n)=>c.get(t*o+n)??c.set(t*o+n,g({direction:`row`,children:e.slice(t,n)},i,a)).get(t*o+n),u;for(let e=0;n.length<=6&&e<3**n.length;e++){let t=s.map((t,n)=>Math.floor(e/3**n)%3),n=/* @__PURE__ */ new Set,r=/* @__PURE__ */ new Set,i=/* @__PURE__ */ new Set;s.forEach(([e,a],o)=>{if(t[o])for(let i of t[o]===1?[e+1,a+1]:[e,a])n.add(i),t[o]===1&&r.add(i);else for(let t=e+1;t<=a;t++)i.add(t)});let a=[{cost:[0,0],from:-1}];for(let e=1;e<=o;e++)for(let t=e-1;t>=Math.max(0,e-4)&&!(t<e-1&&n.has(t+1)||l(t,e)>782);t--){let n=a[t];if(!n||t&&i.has(t)||r.has(e)&&e-t<4)continue;let o=[n.cost[0]+1,Math.max(n.cost[1],l(t,e))];(!a[e]||Ge(o,a[e].cost))&&(a[e]={cost:o,from:t})}if(!a[o]||u&&!Ge(a[o].cost,u.cost))continue;let c=[];for(let e=o;e>0;e=a[e].from)c.unshift(a[e].from);let d=e=>c.findLastIndex(t=>t<=e),f=e=>l(c[e],c[e+1]??o);s.some(([e,n],r)=>{let[i,a]=[d(e),d(n)],o=Array.from({length:a-i+1},(e,t)=>f(i+t));return!t[r]&&i>0&&i<c.length-1||t[r]===1&&Math.min(f(i),f(a))<Math.max(...o)||s.some(([i,a],o)=>o>r&&t[r]&&t[r]===t[o]&&e<a&&i<n)})||(u={cost:a[o].cost,cuts:c,sides:t})}if(!u)return;let d=u.cuts[1]??o;n.forEach((e,t)=>e.around=[r.get(e.from)<d?`above`:`below`,`right`,`left`][u.sides[t]]);let f=u.cuts.map((t,n)=>({direction:`row`,children:e.slice(t,u.cuts[n+1]??o)})),p=e=>f.findIndex(n=>t(n).includes(e));for(let e of a)!n.includes(e)&&p(e.from)>=0&&p(e.from)<p(e.to)&&We.add(e);return{direction:`column`,align:`start`,children:f}}function qe(e){let t=/* @__PURE__ */ new Map,n=new Map(e.edges.map(e=>[b(e),e]));for(let r of e.steps??[])for(let e of r.flow)for(let r of _(e).hops){let e=n.get(r.edge);if(e)for(let n of r.back?[e.to,e.from]:[e.from,e.to])t.has(n)||t.set(n,t.size)}for(let n of C(e.layout))t.has(n.id)||t.set(n.id,t.size);return t}function Je(e,n,r){let i=e.length,a=/* @__PURE__ */ new Map;e.forEach((e,n)=>t(e).forEach(e=>a.set(e,n)));let o=e.map(e=>Math.min(...t(e).map(e=>r.at.get(e)??1/0))),s=r.edges.flatMap(e=>{let t=a.get(e.from),n=a.get(e.to);return t==null||n==null||t===n?[]:[[t,n,e]]}),c=[...e.keys()].sort((e,t)=>o[e]-o[t]),l=Array.from({length:i},()=>0),u=/* @__PURE__ */ new Set,d=e=>{l[e]=1;let t=[...s.keys()].filter(t=>s[t][0]===e).sort((e,t)=>o[s[e][1]]-o[s[t][1]]);for(let e of t){let t=s[e][1];l[t]===1?u.add(e):l[t]===0&&d(t)}l[e]=2};for(let e of c)l[e]||d(e);let f=s.map(([e,t],n)=>u.has(n)?[t,e]:[e,t]),p=Array.from({length:i},()=>0);for(let e=0;e<i;e++)for(let[e,t]of f)p[t]=Math.max(p[t],p[e]+1);let m=Math.max(0,...p)+1,h=Array.from({length:m},()=>[]),_=[...p];for(let e of c)h[p[e]].push(e);let v=[],y=f.map(()=>[]);for(let[e,[t,n]]of f.entries()){let r=t;for(let i=p[t]+1;i<p[n];i++){let t=_.length;_.push(i),h[i].push(t),y[e].push(t),v.push([r,t]),r=t}v.push([r,n])}let b=[],x=()=>h.forEach(e=>e.forEach((e,t)=>b[e]=t)),S=()=>{x();let e=0;for(let t=0;t<v.length;t++)for(let n=t+1;n<v.length;n++){let[r,i]=v[t],[a,o]=v[n];_[r]===_[a]&&(b[r]-b[a])*(b[i]-b[o])<0&&e++}return e},C=h.map(e=>[...e]),w=S();for(let e=0;e<q;e++){let t=e%2==0,n=[...h.keys()].slice(1).map(e=>t?e:m-1-e);for(let e of n){x();let n=e=>{let n=v.filter(([n,r])=>(t?r:n)===e).map(([e,n])=>b[t?e:n]);return n.length?n.reduce((e,t)=>e+t,0)/n.length:b[e]},r=new Map(h[e].map(e=>[e,n(e)]));h[e].sort((e,t)=>r.get(e)-r.get(t))}let r=S();r<w&&([w,C]=[r,h.map(e=>[...e])])}let T=n===`row`?`column`:`row`,E=e.map(e=>P(e)?{...e,direction:n,children:Je(e.children.flatMap(Ue),n,r)}:e),D=/* @__PURE__ */ new Map,O=e=>{let t=D.get(e);if(t==null)return E[e];let n=C.find(t=>t.includes(e)).filter(e=>e<i),r=[E[e],E[t]];return{direction:`row`,children:n.indexOf(e)<(n.length-1)/2?r.reverse():r}},k=e=>{let t=e.filter(e=>e<i);return t.length===1?O(t[0]):{direction:T,children:t.map(O)}};if(n===`column`){let e=e=>g(k(e),r.carded,r.edges,190)<=782;for(let t of C){let n=t.filter(e=>e<i&&!f.some(([t])=>t===e)&&f.filter(([,t])=>t===e).length===1).sort((e,t)=>o[t]-o[e]);for(let r of n){if(e(t))break;let n=f.find(([,e])=>e===r)[0];if(D.has(n))continue;let i=C.find(e=>e.includes(n)),a=t.indexOf(r);t.splice(a,1),D.set(n,r),e(i)||(D.delete(n),t.splice(a,0,r))}}}let A=(e,t)=>e.every(e=>{let n=C[_[e]],r=n.indexOf(e);return(t>0?n.slice(r+1):n.slice(0,r)).every(e=>e>=i)}),j=()=>y.map((e,t)=>{let[n,r]=f[t],a=[n,r].every(e=>C[p[e]].filter(e=>e<i).length===1);return!u.has(t)&&(!e.length||a)?0:A([n,...e,r],1)?1:A([n,...e,r],-1)?-1:0}),M=(e,t,n)=>Math.sign((t[0]-e[0])*(n[1]-e[1])-(t[1]-e[1])*(n[0]-e[0])),N=e=>{let t=[];C.forEach((e,n)=>e.filter(e=>e<i).forEach((e,r,i)=>t[e]=[n,r-(i.length-1)/2]));let n=0;for(let r=0;r<f.length;r++)for(let i=r+1;i<f.length;i++){let[a,o]=f[r],[s,c]=f[i];a!==s&&a!==c&&o!==s&&o!==c&&[a,o,s,c].every(e=>t[e])&&(e[r]||e[i]?n+=+(e[r]===e[i]&&p[a]<p[c]&&p[s]<p[o]):n+=+(M(t[a],t[o],t[s])*M(t[a],t[o],t[c])<0&&M(t[s],t[c],t[a])*M(t[s],t[c],t[o])<0))}return n},F=j();for(let e of F.keys())for(let t of F.keys()){let n=F[e],[r,i]=f[e],[a,o]=f[t];if(!(t<=e||!n||n!==F[t]||p[r]>=p[o]||p[a]>=p[i]))for(let r of y[e].length<=y[t].length?[e,t]:[t,e]){let i=[f[r][0],...y[r],f[r][1]];if(i.some(e=>!C[_[e]].includes(e)))continue;let a=C.map(e=>[...e]),o=N(F);for(let e of i){let t=C[_[e]];t.splice(t.indexOf(e),1),n>0?t.unshift(e):t.push(e)}let s=j();if(s[r]===-n&&s[e+t-r]===n&&N(s)<o){F=s;break}C=a}}F.forEach((e,t)=>{e&&(s[t][2].around=n===`column`?e>0?`right`:`left`:e>0?`below`:`above`)});let I=C.filter(e=>e.some(e=>e<i)),L=I.map(k);if(n===`row`||I.length*J<=He*Ve)return L;let R=[],z=[],ee=[],te=new Map(y.flatMap((e,t)=>e.map(e=>[e,s[t][2]]))),ne=(e,t)=>{let n=Math.ceil(e.length/t),r=Math.ceil(e.length/n);return Array.from({length:n},(t,n)=>({direction:`row`,children:e.slice(n*r,(n+1)*r)}))},re=e=>{let t=e.length<4?void 0:[4,3].map(t=>ne(e,t)).find(e=>e.every(e=>g(e,r.carded,r.edges)<=782));R.push(...t??e)},B=()=>{let e=new Map(z.map((e,t)=>[e.id,t])),t=r.edges.filter(t=>e.has(t.from)&&e.has(t.to)&&Math.abs(e.get(t.from)-e.get(t.to))>1),n=ee.every(e=>I[e].every(e=>e<i||t.includes(te.get(e)))),a=z.length>=4&&t.length&&n?Ke(z,t,e,r.carded,r.edges):void 0;if(a)R.push(a);else{let e=[];z.forEach((t,n)=>{I[ee[n]].length===1?e.push(t):(re(e),e=[],R.push(t))}),re(e)}z=[],ee=[]};return L.forEach((e,t)=>{I[t].filter(e=>e<i).length===1&&!P(e)?(z.push(e),ee.push(t)):(B(),R.push(e))}),B(),R}var Ye=e=>({...e,children:e.children.map(e=>P(e)?Ye(e):e).filter(e=>!P(e)||e.children.length)}),Xe=e=>P(e)&&(e.label!=null||e.children.some(Xe));function Ze(e,t){return(e.steps??[]).flatMap(e=>e.flow.flatMap(e=>Object.values(_(e).show??{}))).some(e=>m(e)&&e.some(e=>e.mono))?10.5:t.size||e.edges.some(e=>e.label!=null)||Xe(e.layout)?11:(e.steps??[]).some(e=>e.flow.some(e=>_(e).hops.some(e=>e.data!=null)))?11.5:C(e.layout).some(e=>e.sub!=null)?12:e.steps?.length?13.5:14}function Qe(e,n){let r=Ve*Ze(e,n)/Y-48;if(e.rail||g(e.layout,n,e.edges,i(e,Ve))<=r)return e;let a=e.layout.children,o=a.length,s=new Map(a.flatMap((e,n)=>t(e).map(e=>[e,n]))),c=e.edges.filter(e=>s.has(e.from)&&s.has(e.to)).map(e=>[s.get(e.from),s.get(e.to)]),l=e=>c.filter(([t,n])=>t<e!=n<e).length,u=Math.min(o-1,...e.edges.filter(e=>e.around).flatMap(e=>[e.from,e.to].map(e=>s.get(e)??o))),d=(e,t)=>e[0]-t[0]||e[1]-t[1]||e[2]-t[2],f=[{cost:[0,0,0],from:-1}];for(let t=1;t<=o;t++)for(let i=t-1;i>=0;i--){let s=g({direction:`row`,children:a.slice(i,t)},n,e.edges);if(s>r)break;let c=f[i];if(!c||t===o&&i>u)continue;let p=[c.cost[0]+1,c.cost[1]+(i?l(i):0),Math.max(c.cost[2],s)];(!f[t]||d(p,f[t].cost)<0)&&(f[t]={cost:p,from:i})}if(!f[o]||f[o].cost[0]<2){let t=e.edges.filter(e=>s.has(e.from)&&s.has(e.to)&&(e.around||Math.abs(s.get(e.from)-s.get(e.to))>1)),r=o>=4&&t.some(e=>e.around)&&!a.some(P)?Ke(a,t,s,n,e.edges):void 0;return r?{...e,layout:r}:e}let p=[];for(let e=o;e>0;e=f[e].from)p.unshift(f[e].from);let m=p.map((e,t)=>a.slice(e,p[t+1]??o));for(let t of e.edges)p.some(e=>e&&s.get(t.from)<e&&s.get(t.to)>=e)&&We.add(t);let h=m.map(e=>e.length===1?e[0]:{direction:`row`,children:e});return{...e,layout:{direction:`column`,children:h}}}function $e(e){if(e.lanes||e.timeline)return e;let t={...e,layout:Ye(e.layout)};if(!t.layout.auto)return t;let n=new Set((t.steps??[]).flatMap(e=>e.flow.flatMap(e=>Object.keys(_(e).show??{})))),r=qe(t),a=t.layout.children.flatMap(Ue),o=e=>{let i=t.edges.map(e=>({...e,around:void 0}));return{...t,edges:i,layout:{direction:e,children:Je(a,e,{edges:i,at:r,carded:n})}}};if(t.layout.direction===`row`)return Qe(o(`row`),n);if(t.layout.direction)return o(t.layout.direction);let s=o(`row`);return g(s.layout,n,s.edges,i(s,Ve))+48<=Ve?s:o(`column`)}var et=e=>e==null?`(none)`:`"${u(e)}"`,tt=(e,t,n)=>n.filter(n=>u(e[n])!==u(t[n])).map(n=>`${String(n)} ${et(e[n])} -> ${et(t[n])}`);function nt(e,t,n,r){let i=(t,n)=>({kind:e,op:`added`,id:n.id??t,...n.path&&{path:n.path}}),a=[];for(let[e,o]of t){let t=n.get(e);if(!t)continue;let s=r(o,t);s.length&&a.push({...i(e,t),op:`changed`,detail:s.join(`; `)})}for(let[e,r]of t)n.has(e)||a.push({...i(e,r),op:`removed`});for(let[e,r]of n)t.has(e)||a.push(i(e,r));return a}var rt=e=>{let t=/* @__PURE__ */ new Map;return new Map(te(e).flatMap(e=>(e.props.steps??[]).flatMap(n=>n.flow.flatMap(r=>_(r).hops.map(r=>{let i=`${u(n.label)}: ${r.edge}${r.back?` back`:``}${r.data==null?``:` "${u(r.data)}"`}${r.tone?` [${r.tone}]`:``}${r.source?` <${r.source}>`:``}${r.via?` via ${r.via}`:``}`,a=`${e.path.join(`>`)}\n${i}`,o=(t.get(a)??0)+1;t.set(a,o);let s=o>1?`${i} #${o}`:i;return[`${e.path.join(`>`)}\n${s}`,{id:s,path:e.line}]})))))},it=e=>{let t=/* @__PURE__ */ new Map;for(let n of te(e)){let e=new Set(n.ports.map(e=>e.id)),r=(i,a)=>i.children.forEach(i=>P(i)?r(i,i.label==null?i.id:u(i.label)):e.has(i.id)||t.set(i.id,{...i,group:a,path:n.line,owner:n.path.at(-1),top:n.path[0]}));r(n.props.layout)}return t},at=[`label`,`sub`,`shape`,`tone`,`mark`,`from`,`to`,`source`,`group`],ot=(e,t)=>!e||!t||e.owner!==t.owner||tt(e,t,at).length>0;function st(e,t){let n=e=>new Map(te(e).flatMap(e=>e.props.edges.map(t=>[b(t),{...t,path:e.line}]))),r=e=>new Map(te(e).flatMap(e=>(e.props.steps??[]).map(t=>[`${e.path.join(`>`)}\n${u(t.label)}`,{...t,id:u(t.label),path:e.line}]))),i=it(e),a=it(t),o=[...nt(`box`,i,a,(e,t)=>[...e.owner===t.owner?[]:[`moved from ${e.path||`the root`} to ${t.path||`the root`}`],...tt(e,t,at)]),...nt(`edge`,n(e),n(t),(e,t)=>tt(e,t,[`from`,`to`,`label`,`source`,`via`])),...nt(`step`,r(e),r(t),(e,t)=>tt(e,t,[`caption`])),...nt(`message`,rt(e),rt(t),()=>[])],s=/* @__PURE__ */ new Map,c=(e,t)=>{e&&s.set(e,{added:0,removed:0,changed:0,...s.get(e),[t]:(s.get(e)?.[t]??0)+1})};for(let e of/* @__PURE__ */ new Set([...i.keys(),...a.keys()])){let t=i.get(e),n=a.get(e);ot(t,n)&&(t?n?(c(n.owner,`changed`),t.owner!==n.owner&&c(t.owner,`removed`)):c(t.owner,`removed`):c(n.owner,`added`))}for(let[e,t]of s){if(!i.has(e)||!a.has(e))continue;let n=`parts: ${t.added} added, ${t.removed} removed, ${t.changed} changed`,r=o.find(t=>t.kind===`box`&&t.id===e),s=a.get(e).path;r?r.detail=r.detail?`${r.detail}; ${n}`:n:o.push({kind:`box`,op:`changed`,id:e,detail:n,...s&&{path:s}})}return(e.rail??!1)!==(t.rail??!1)&&o.push({kind:`rail`,op:`changed`,id:`rail`,detail:`${e.rail??`(none)`} -> ${t.rail??`(none)`}`}),o}function ct(e,t){return e.length?e.map(e=>{let n=t===`md`?`\`${e.id}\``:e.id,r=`${e.path?`[${e.path}] `:``}${e.kind} ${e.op}: ${n}${e.detail?` (${e.detail})`:``}`;return t===`md`?`- ${r}`:r}).join(`
|
|
2
|
+
`):t===`md`?`- no change in the spec`:`no change in the spec`}var lt=15,ut=8,dt=4,ft=15,pt=320,mt=37,ht=(e,t)=>{let n=String(e[t]),r=[...n].reduce((e,t)=>e<0?e:e+(t===`(`?1:t===`)`?-1:0),0);return/^[#a-zA-Z0-9 ,.%()/+-]+$/.test(n)&&!/url\(/i.test(n)&&r===0?n:L[t]},gt=(e,t)=>`--accent:${ht(e,`accent`)}; --fg:${ht(e,`fg`)}; --muted:${ht(e,`muted`)}; --bg:${ht(e,`bg`)}; --surface:${ht(e,`surface`)}; --border:${ht(e,`border`)}; --card-on:${t}; --tint:color-mix(in srgb, var(--accent) 10%, var(--surface));`,_t=e=>m(e)?e:u(e),X=e=>e.replace(/[<>&"]/g,e=>({"<":`<`,">":`>`,"&":`&`,'"':`"`})[e]),vt=e=>Math.round(e*1e4)/1e4,Z=e=>Math.round(e*1e4)/100+`%`,yt=e=>z(e.toUpperCase(),9)+e.length*.27+8;function bt(e,t){let n=t-16;if(e==null)return{rows:[],height:lt+12};let r=_t(e);if(!Array.isArray(r)){let e=ne(r||` `,n,11);return{rows:[{row:{text:r},heads:!1,lines:e,room:n}],height:e.length*lt+12}}let i=r.map(e=>{let t=(e.tag?.length??0)>2,r=e.tag&&!t?yt(e.tag)+5:0,i=e.mark&&!t?z(u(e.mark),11)+6:0,a=u(e.text)+(e.meta==null?``:` · `+u(e.meta)),o=n-r-i;return{row:e,heads:t,lines:ne(a,o,e.mono?10.5:11,e.mono),room:o}});return{rows:i,height:i.reduce((e,t)=>e+(t.heads?lt:0)+t.lines.length*lt,0)+dt*Math.max(0,i.length-1)+12}}function xt(e,t){if(!P(e)){let n=t.cards.get(e.id),i=g(e,t.cards,t.fig.edges,t.cap),a=e.shape===`store`?24:10,s=n?8+t.cardH.get(e.id):0,c=o(e,i).length*18,l=Math.max(a+c+(e.sub?ft:0)+s+10,t.minH(e.id));return e.shape===`decision`?{w:i,h:n?l+24:Math.max(r(e,i).h,t.minH(e.id)+24)}:{w:i,h:l}}let n=e.children.map(e=>xt(e,t)),i=e.direction===`column`?n.reduce((e,t)=>e+t.h,0)+t.gap(e)*(n.length-1):Math.max(...n.map(e=>e.h));return{w:g(e,t.cards,t.fig.edges,t.cap),h:i+(e.label==null?0:55)}}function St(e,t,r,i,a){let o=e.layout.children,{cols:s,starts:c,gaps:l,lead:u,blocks:d}=i.plan,f=Array.from({length:Math.max(-1,...s.values())+1},()=>0);for(let e of o)for(let t of e.children)f[s.get(t.id)]=Math.max(f[s.get(t.id)],xt(t,i).w);let p=n(o),m=e=>f.slice(c[e],c[e+1]),h=f.map((e,t)=>{let n=v(c,t);return p+u[n]+m(n).slice(0,t-c[n]).reduce((e,t,r)=>e+t+l[c[n]+r],0)}),g=Math.max(...d.map(e=>{let t=m(e);return p+u[e]+t.reduce((e,t)=>e+t,0)+l.slice(c[e],c[e]+t.length-1).reduce((e,t)=>e+t,0)+(l[c[e]+t.length-1]??18)})),_=a.length;a.push({x:t,y:r,w:g,h:0,item:e.layout});let y=r;d.forEach((e,n)=>{n&&(y+=20);for(let n of o){let r=n.children.filter(t=>v(c,s.get(t.id))===e).map(e=>({b:e,...xt(e,i)}));if(d.length>1&&!r.length)continue;let l=Math.max(38,...r.map(e=>e.h)),u=l+48+(i.tall.has(`${o.indexOf(n)}@${e}`)?30:0);a.push({x:t,y,w:g,h:u,item:n,lane:!0,block:e});for(let e of r)a.push({x:t+h[s.get(e.b.id)],y:y+24+(l-e.h)/2,w:e.w,h:e.h,item:e.b});y+=u+20}}),a[_].h=y-20-r}function Q(e,t,r,i){let a=e.layout.children,o=n(a),s=E(e,640),c=o+640+18,l=i.length;i.push({x:t,y:r,w:c,h:0,item:e.layout});let u=r+28;a.forEach((e,n)=>{let r=s.rows[n],a=r*28+(r-1)*8+48;i.push({x:t,y:u,w:c,h:a,item:e,lane:!0});for(let r of s.items){if(r.track!==n)continue;let a=e.children.find(e=>!P(e)&&e.id===r.id),s=u+24+r.row*36,c=r.milestone?r.w:28;i.push({x:t+o+r.x,y:s+(28-c)/2,w:r.w,h:c,item:a,tl:{milestone:r.milestone,labelInside:r.labelInside}})}u+=a+20}),i[l].h=u-20-r}function Ct(e,t,n,r,i){if(e===r.fig.layout&&r.fig.timeline&&p(r.fig.layout))return Q(r.fig,t,n,i);if(e===r.fig.layout&&r.fig.lanes&&p(r.fig.layout))return St(r.fig,t,n,r,i);let{w:a,h:o}=xt(e,r);if(i.push({x:t,y:n,w:a,h:o,item:e}),!P(e))return;let s=e.label!=null,c=t+(s?18:0),l=n+(s?mt:0),u=a-(s?36:0),d=o-(s?55:0),f=r.gap(e);for(let t of e.children){let n=xt(t,r),a=e.align??`center`,o=(e,t)=>a===`start`?0:a===`end`?e-t:(e-t)/2;e.direction===`column`?(Ct(t,c+o(u,n.w),l,r,i),l+=n.h+f):(Ct(t,c,l+o(d,n.h),r,i),c+=n.w+f)}}var wt={added:oe.green,removed:oe.red,changed:oe.orange},Tt=(e,t,n)=>e?`<g data-diff="${e}" data-id="${X(t)}">${n}</g>`:n,Et=(e,t)=>e===`removed`?`<g opacity="0.5" stroke-dasharray="5 4">${t}</g>`:e?`<g stroke-width="2">${t}</g>`:t;function Dt(e){let t=t=>Object.values(e.boxes).filter(e=>e===t).length+Object.values(e.edges).filter(e=>e===t).length,n=[`added`,`removed`,`changed`].filter(t).map(e=>({color:wt[e],text:`${e} ${t(e)}`}));return e.steps&&n.push({color:`none`,text:`steps: see the text diff`}),n.length?n:[{color:`none`,text:`no change in boxes and edges`}]}var Ot=e=>e.map(e=>z(e.text,12)+(e.color===`none`?0:16)),kt=e=>Ot(e).reduce((e,t)=>e+t+20,-20);function At(e,t,n){if(!e.length)return``;let r=Ot(e),i=(t-kt(e))/2;return e.map((e,t)=>{let a=`${e.color===`none`?``:`<rect x="${x(i)}" y="${x(n-24)}" width="10" height="10" rx="2" fill="${e.color}" data-diff="${e.text.split(` `)[0]}"/>`}<text x="${x(i+(e.color===`none`?0:16))}" y="${x(n-15)}" font-size="12" fill="var(--muted)">${X(e.text)}</text>\n`;return i+=r[t]+20,a}).join(``)}var jt=`-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif`;function Mt(t,m,h){let g=$e(t),v=m.scope??``,S=h?.prefix??v,C=m.padding??24,O=g.timeline&&p(g.layout)?E(g,640):null,j=O!=null&&!g.steps?.length&&!m.marks,M=j?w(g):g.steps??[],I=M.map(e=>e.flow.map(_)),L=/* @__PURE__ */ new Map;for(let e of I.flat())for(let[t,n]of Object.entries(e.show??{}))L.set(t,[...L.get(t)??[],n]);let R={},te={};for(let e of g.edges)R[e.from]=(R[e.from]??0)+1,te[e.to]=(te[e.to]??0)+1;let re=e=>{let t=Math.max(R[e]??0,te[e]??0);return t>2?t*30:0},B=/* @__PURE__ */ new Map,ie=!O&&g.lanes&&p(g.layout),le=ie?Be(g,m):null,fe={cards:L,cardH:B,minH:re,gap:e=>F(e,g.edges),fig:g,plan:le,tall:new Set(le?.tall),cap:i(g,m.width??830,C)};for(let[e,t]of L){let n=[166];B.set(e,Math.max(lt+12,...t.map(e=>bt(e,Math.min(...n)-20).height)))}let V=[];Ct(g.layout,C,C,fe,V);let pe=V.filter(e=>!P(e.item));for(let e of pe){if(!L.has(e.item.id))continue;let t=e.w-20;B.set(e.item.id,Math.max(...L.get(e.item.id).map(e=>bt(e,t).height),lt+12))}let me={},he=new Set(V.filter(e=>!P(e.item)&&(e.item.shape===`decision`||e.tl?.milestone)).map(e=>e.item.id)),H=g.edges.map(b),ge=le?.stubs??/* @__PURE__ */ new Map,_e=le?n(g.layout.children):0,ve=(e,t)=>V.find(n=>n.lane&&n.item.id===e&&n.block===t),ye=g.layout.children,be=(e,t,n)=>{let r=le?.ends.get(e)?.[n],i=ye.find(e=>e.id===t||e.children.some(e=>e.id===t));return V.find(e=>e.lane&&e.item===i&&e.block===r)},xe=(e,t,n)=>le?ue(le,e,t,n,ve,me):t,Se=()=>{V.length=0,Ct(g.layout,C,C,fe,V);for(let e of V)e.item.id&&(me[e.item.id]=e);return Ee(g.edges.map((e,t)=>({id:H[t],from:xe(H[t],e.from,!0),to:xe(H[t],e.to,!1),around:e.around??(le?.around.has(H[t])?`below`:void 0),...O&&{sides:[`r`,`l`],elbow:!0},...We.has(e)&&{drop:!0},...ge.has(H[t])&&{stub:ge.get(H[t]).map(l),bands:[be(H[t],e.from,0),be(H[t],e.to,1)]},...!O&&e.label!=null&&{labelW:l(u(e.label))}})),me,he,de(V.filter(e=>!P(e.item)),ge.size?V.filter(e=>e.lane).map(e=>({x:e.x,y:e.y,w:_e,h:e.h})):V.filter(e=>e.tl&&!e.tl.labelInside).map(e=>s(e,u(e.item.label))),ge.size>0),ge.size?{x:V[0].x+_e,y:V[0].y,w:V[0].w-_e,h:V[0].h}:void 0,ie?{bands:V.filter(e=>e.lane),boxes:V.filter(e=>!P(e.item))}:void 0,C)},Ce=Se();for(let e=0;le&&e<3;e++){let e=[...T(ye,le.ends,g.edges,Ce)].filter(e=>!fe.tall.has(e));if(!e.length)break;e.forEach(e=>fe.tall.add(e)),Ce=Se()}pe=V.filter(e=>!P(e.item));let we=Object.fromEntries(Ce.map(e=>[e.id,e])),U=[14,...M.length?[13.5]:[]],Te=pe.map(e=>{if(e.tl){let t=u(e.item.label),n=O.items.find(t=>t.id===e.item.id),r=O.items.filter(e=>e.track===n.track&&e.row===n.row&&e.x>n.x).map(t=>e.x-n.x+t.x-8),i=Math.min(V[0].x+V[0].w-18,...r),a=e.tl.labelInside?e.w-16:i-(e.x+e.w)-6;return U.push(13),{id:e.item.id,rect:{x:e.x,y:e.y,w:e.w,h:e.h},texts:[{text:t,fontSize:13,room:a}]}}let t=e.item.shape===`decision`&&!L.has(e.item.id)?r(e.item,e.w):null,n=t=>se(e.w,e.h,t),i=(e.item.shape===`decision`?e.w-70:e.w)-16,a=o(e.item,e.w).map((e,r)=>({text:e,fontSize:14,room:t?n(t.label[r].far):i}));if(t)for(let e of t.subs)a.push({text:e.text,fontSize:12,room:n(e.far)});else e.item.sub&&a.push({text:u(e.item.sub),fontSize:12,room:i});e.item.sub&&U.push(12);for(let t of L.get(e.item.id)??[])for(let n of bt(t,e.w-20).rows){let e=n.row.mono?10.5:11;U.push(e);for(let t of n.lines)a.push({text:t,fontSize:e,room:n.room,mono:n.row.mono})}return{id:e.item.id,rect:{x:e.x,y:e.y,w:e.w,h:e.h},texts:a}});V.some(e=>P(e.item)&&e.item.label!=null)&&U.push(11);let W=[],ke=[],Ae=Object.fromEntries(g.edges.map((e,t)=>[H[t],e])),je=h?.times??ce(I,m.speed??g.speed??900);I.forEach((e,t)=>{e.forEach((n,r)=>{let{t0:i,t1:a,tEnd:o}=je.beats[t][r];n.hops.forEach((e,n)=>{we[e.edge]&&ke.push({si:t,bi:r,lane:n,edge:e.edge,dest:e.back?Ae[e.edge].from:Ae[e.edge].to,back:e.back,data:e.data,tone:e.tone&&oe[e.tone],t0:i,t1:a,tEnd:o})}),W.push({t0:i,t1:r===e.length-1?je.ends[t]:o,si:t,bi:r})})});let G=h?.total??(je.ends.at(-1)||1),Me=W.map(({si:e,bi:t})=>Object.assign({},...I[e].slice(0,t+1).map(e=>e.show))),Ne=W.map(({si:e,bi:t})=>new Set(I[e].slice(0,t+1).flatMap(e=>e.hops.map(e=>e.edge)))),Pe=W.map((e,t)=>{let n=/* @__PURE__ */ new Set([...M[e.si].nodes??[],...Object.keys(Me[t]),...I[e.si][e.bi].light??[],...I[e.si][e.bi].focus??[]]);return g.edges.forEach((e,r)=>{Ne[t].has(H[r])&&n.add(e.from).add(e.to)}),n}),Ie=W.map(({si:e,bi:t})=>{let n=I[e].slice(0,t+1).findLastIndex(e=>e.say!=null);return u(n===-1?M[e].caption:I[e][n].say)}),Ve=[],q=/* @__PURE__ */ new Map,He=e=>{let t=[];for(let n=0;n<W.length;){let r=n;for(;r+1<W.length&&e[r+1]===e[n];)r++;t.push(`${Z(W[n].t0/G)},${Z(W[r].t1/G-1e-4)} { ${e[n]} }`),n=r+1}return t.join(` `)},J=(e,t,n,r)=>{if(!W.length||e.every(e=>!e))return``;let i=r+e.map(e=>+!!e).join(``);if(!q.has(i)){let r=`${S}a${q.size}`;q.set(i,r);let a=He(e.map(e=>e?t:n));Ve.push(`@keyframes ${r} { ${a} }\n.${r} { animation: ${r} ${x(G)}s infinite step-end; }`)}return q.get(i)},Y=(...e)=>{let t=e.filter(Boolean).join(` `);return t?` class="${t}"`:``},Ue=(e,t,n=e[0])=>{if(!W.length||e.every(e=>e===n))return``;let r=t+e.join(`|`);if(!q.has(r)){let t=`${S}a${q.size}`;q.set(r,t);let n=He(e);Ve.push(`@keyframes ${t} { ${n} }\n.${t} { animation: ${t} ${x(G)}s infinite step-end; }`)}return q.get(r)},Ge=.4,Ke=.4,qe=(e,t,n)=>{let r=t?A(t,`var(--bg)`):`var(--bg)`;if(e===`off`)return[r,t??`var(--border)`,1,`drop-shadow(0 0 0 transparent)`];if(e===`trail`)return[r,t??`var(--accent)`,1,`drop-shadow(0 0 0 transparent)`];let i=n??t;return i?[A(i,`var(--surface)`,10),i,2,`drop-shadow(0 0 4px ${i})`]:[`var(--tint)`,`var(--accent)`,2,`drop-shadow(0 0 4px var(--accent))`]},Je=/* @__PURE__ */ new Map;for(let e of ke){let t=`${e.si}:${e.bi}:${e.dest}`,n=Je.get(t);n?n.push(e):Je.set(t,[e])}let Ye=(e,t,n)=>{let r=[];if(W.forEach((t,n)=>{if(!Pe[n].has(e))return void r.push({a:t.t0,b:t.t1,look:`off`});let i=Je.get(`${t.si}:${t.bi}:${e}`)??[],a=I[t.si][t.bi].focus?.includes(e),o=Math.min(...i.map(e=>e.t1),a?Math.min(t.t0+(O?Ke:0),t.t1):t.t1,t.t1);o>t.t0&&r.push({a:t.t0,b:o,look:`trail`}),o<t.t1&&r.push({a:o,b:t.t1,look:`active`,hop:i.find(e=>e.tone)?.tone})}),!r.length||r.every(e=>e.look===`off`))return``;let i=r.at(-1);i.look===`active`&&(i.b-=Ge,r.push({a:i.b,b:i.b+Ge,look:r[0].look,hop:r[0].hop,ramp:Ge-2e-4*G}));let a=[];r.forEach((e,i)=>{let o=e.ramp??(e.look!==`active`&&r[i-1]?.look===`active`?Math.min(Ge,(e.b-e.a)/2):0),[s,c,l,u]=qe(e.look,n,e.hop),d=`${t?`fill: ${s}; `:``}stroke: ${c}; stroke-width: ${l}${t?`; filter: ${u}`:``}`,f=a.at(-1);f?.css===d?f.b=e.b:a.push({a:e.a+o,b:e.b,css:d})});let o=a.map(e=>`${Z(e.a/G)},${Z(e.b/G-1e-4)} { ${e.css} }`),s=(t?`B`:`R`)+o.join(` `);if(!q.has(s)){let e=`${S}a${q.size}`;q.set(s,e),Ve.push(`@keyframes ${e} { ${o.join(` `)} }\n.${e} { animation: ${e} ${x(G)}s infinite linear; }`)}return q.get(s)},Xe=V.map(e=>{let{item:t}=e;if(P(t)){if(t.label==null)return``;let n=t.id?W.map((e,n)=>Pe[n].has(t.id)):[];return`<rect x="${x(e.x)}" y="${x(e.y)}" width="${x(e.w)}" height="${x(e.h)}" rx="14" fill="var(--surface)" stroke="var(--border)"`+Y(e.lane&&`lane`,J(n,`stroke: var(--accent)`,`stroke: var(--border)`,`n`))+`/><text x="${x(e.x+18)}" y="${x(e.lane?e.y+e.h/2+4:e.y+20)}" class="frame">${X(u(t.label).toUpperCase())}</text>`}let n=m.marks?.boxes[t.id],i=m.links?.[t.id],a=h?.fades?.get(t.id),s=e=>{let r=Tt(n,t.id,Et(n,t.source?`<g><title>${X(t.source)}</title>${e}</g>`:e)),o=i==null?r:`<a href="${X(i)}" tabindex="-1">${r}</a>`;return a?`<g class="${a}">${o}</g>`:o},c=n?wt[n]:t.tone&&oe[t.tone],l=Y(Ye(t.id,!0,c));if(e.tl){let n=c?A(c,`var(--bg)`):`var(--bg)`,r=c??`var(--border)`,i=u(t.label),a=e.tl.labelInside,o=e.x+e.w/2,d=e.y+e.h/2,f=e.tl.milestone?`<polygon points="${x(o)},${x(e.y)} ${x(e.x+e.w)},${x(d)} ${x(o)},${x(e.y+e.h)} ${x(e.x)},${x(d)}" fill="${n}" stroke="${r}"${l}/>`:`<rect x="${x(e.x)}" y="${x(e.y)}" width="${x(e.w)}" height="${x(e.h)}" rx="6" fill="${n}" stroke="${r}"${l}/>`,p=a?e.x+8:e.x+e.w+6;return s(f+`<text x="${x(p)}" y="${x(d+4.5)}" class="bar">${X(i)}</text>`)}let d=t.shape===`store`?Y(Ye(t.id,!1,c)):``,f=h?.ports.has(t.id),p=c?A(c,`var(--bg)`):`var(--bg)`,g=c??`var(--border)`,_=e.x+e.w/2,v=L.get(t.id),y=e.y+e.h-10-(v?B.get(t.id):0),b=t.shape===`decision`&&!v?r(t,e.w):null,S=t.shape===`store`?e.y+24+13:v?e.y+10+13:e.y+e.h/2+(b?b.label[0].dy:t.sub?-2:5),C=t.shape===`decision`?`<polygon points="${x(_)},${x(e.y)} ${x(e.x+e.w)},${x(e.y+e.h/2)} ${x(_)},${x(e.y+e.h)} ${x(e.x)},${x(e.y+e.h/2)}" fill="${p}" stroke="${g}"${l}/>`:t.shape===`store`?`<path d="M${x(e.x)} ${x(e.y+12)} a ${x(e.w/2)} 12 0 0 1 ${x(e.w)} 0 v ${x(e.h-24)} a ${x(e.w/2)} 12 0 0 1 ${x(-e.w)} 0 z" fill="${p}" stroke="${g}"${l}/><path d="M${x(e.x)} ${x(e.y+12)} a ${x(e.w/2)} 12 0 0 0 ${x(e.w)} 0" fill="none" stroke="${g}"${d}/>`:`<rect x="${x(e.x)}" y="${x(e.y)}" width="${x(e.w)}" height="${x(e.h)}" rx="10" fill="${p}" stroke="${g}"${f?` stroke-dasharray="4 3"`:``}${l}/>`,w=h?.owners.has(t.id)&&t.shape!==`decision`?`<rect x="${x(e.x+3)}" y="${x(e.y+3)}" width="${x(e.w)}" height="${x(e.h)}" rx="10" fill="var(--bg)" stroke="var(--border)"/>`:``,T=o(t,e.w),E=(T.length-1)*18,D=t.shape===`store`||v||b?S:S-E/2,O=T.map((e,t)=>`<text x="${x(_)}" y="${x(D+t*18)}"${Y(`label`,f&&`muted`)}>${X(e)}</text>`).join(``),k=b?b.subs.map(t=>`<text x="${x(_)}" y="${x(e.y+e.h/2+t.dy)}" class="sub">${X(t.text)}</text>`).join(``):t.sub?`<text x="${x(_)}" y="${x(D+E+ft)}" class="sub">${X(u(t.sub))}</text>`:``,j=c??`var(--accent)`,M=t.mark&&De(t.id,t.mark,Ce),N=x(M===`l`?e.x-12:M===`r`?e.x+e.w+12:_),F=x(M===`t`?e.y-12:M===`b`?e.y+e.h+12:e.y+e.h/2),I=t.mark===`start`?`<circle cx="${N}" cy="${F}" r="5" fill="${j}"/>`:t.mark===`end`?`<circle cx="${N}" cy="${F}" r="6.25" fill="none" stroke="${j}" stroke-width="1.5"/><circle cx="${N}" cy="${F}" r="4" fill="${j}"/>`:``;return s(w+C+O+k+I+(v?Ze(e,y,v):``))});function Ze(e,t,n){let r=e.item.id,i=e.x+10,a=e.w-20,o=B.get(r),s=W.map((e,t)=>Me[t][r]!=null),c=`<rect x="${x(i)}" y="${x(t)}" width="${x(a)}" height="${x(o)}" rx="6" fill="var(--surface)" stroke="var(--border)" stroke-dasharray="3 3"`+Y(J(s,`stroke: var(--accent); fill: var(--card-on)`,`stroke: var(--border); fill: var(--surface)`,`c`))+`/>`,l=n.map((e,o)=>{let s=W.map((e,t)=>n.indexOf(Me[t][r])===o);return s.every(e=>!e)?``:`<g opacity="0"${Y(J(s,`opacity: 1`,`opacity: 0`,`v`))}>${Qe(e,i,t,a)}</g>`}).join(``),u=W.map((e,t)=>Me[t][r]==null),d=u.some(Boolean)?`<text x="${x(i+ut)}" y="${x(t+6+11)}" opacity="0"${Y(`row`,`muted`,J(u,`opacity: 1`,`opacity: 0`,`v`))}>—</text>`:``;return c+l+d}function Qe(e,t,n,r){let{rows:i}=bt(e,r),a=n+6;return i.map(({row:e,heads:n,lines:i})=>{let o=oe[e.tone??`blue`],s=t+ut,c=[],l=e.tag?yt(e.tag):0,d=(t,n)=>e.tag?`<rect x="${x(t)}" y="${x(n)}" width="${x(l)}" height="14" rx="4" fill="${o}" fill-opacity="0.15"/><text x="${x(t+l/2)}" y="${x(n+10.5)}" class="tag" fill="${o}">${X(e.tag.toUpperCase())}</text>`:``,f=e.mark?`<text x="${x(t+r-ut)}" y="${x(a+11)}" class="mark">${X(u(e.mark))}</text>`:``;n&&(c.push(d(s,a+1),f),a+=lt);let p=n?0:l?l+5:0;return n||c.push(d(s,a+1),f),i.forEach((t,n)=>{c.push(`<text x="${x(s+(n===0?p:0))}" y="${x(a+11)}"${Y(`row`,e.mono&&`mono`)}>${X(t)}</text>`),a+=lt}),a+=dt,c.join(``)}).join(``)}let et={},tt=Ce.map(t=>{let n=g.edges[H.indexOf(t.id)],r=W.map((e,n)=>Ne[n].has(t.id)),i=n.quiet&&!r.every(Boolean),o=i?Y(J(r,`opacity: 1`,`opacity: 0`,`q`)):``,s=W.map(({si:e,bi:n})=>I[e][n].hops.find(e=>e.edge===t.id&&e.tone)?.tone??void 0),c=s.map(e=>e?oe[e]:`var(--accent)`),d=`stroke: var(--muted); stroke-width: ${ee}`,f=s.some(Boolean),p=Y(f?Ue(r.map((e,t)=>e?`stroke: ${c[t]}; stroke-width: 2`:d),`e`,d):J(r,`stroke: var(--accent); stroke-width: 2`,d,`e`)),h=m.marks?.edges[t.id],_=h&&(h!==`changed`||n.label==null)?wt[h]:`var(--muted)`,y=a(t.id,n.source,I.flat()),b=t.stub?t.stub.parts.map(e=>`<path d="${e}" fill="none" stroke="${_}" stroke-width="${ee}" marker-end="url(#${v}arrow)"${p}/>`).join(``)+`<path id="${S}p-${X(t.id)}" d="${t.d}" fill="none" stroke="none"/>`:`<path id="${S}p-${X(t.id)}" d="${t.d}" fill="none" stroke="${_}" stroke-width="${ee}" marker-end="url(#${v}arrow)"${p}/>`,C=y?`<g><title>${X(y)}</title>${b}</g>`:b,w=h?wt[h]:void 0,T=(t,n,i,a)=>`<rect x="${x(t-i/2)}" y="${x(n-9)}" width="${x(i)}" height="18" rx="9" fill="${w?A(w,`var(--bg)`,14):`var(--bg)`}" stroke="${w??`var(--border)`}"`+Y(f?Ue(r.map((t,n)=>t?`fill: ${s[n]?e(c[n]):c[n]}; stroke: ${c[n]}`:`fill: var(--bg); stroke: var(--border)`),`l`,`fill: var(--bg); stroke: var(--border)`):J(r,`fill: var(--accent); stroke: var(--accent)`,`fill: var(--bg); stroke: var(--border)`,`l`))+`/><text x="${x(t)}" y="${x(n+4)}"${Y(`edgelabel`,J(r,`fill: ${N}`,`fill: var(--muted)`,`x`))}${w?` style="fill: var(--fg)"`:``}>${X(a)}</text>`,E=``;if(t.stub){U.push(11);let e=ge.get(t.id);E=t.stub.pills.map((n,r)=>T(n.x+n.w/2,n.y+9,n.w,r===0&&t.stub.short?e[2]:e[r])).join(``)}else if(n.label!=null&&!O){let e=l(u(n.label));et[t.id]={x:t.mid.x-e/2,y:t.mid.y-9,w:e,h:18},U.push(11),E=T(t.mid.x,t.mid.y,e,u(n.label))}return Tt(h,t.id,Et(h===`removed`?h:void 0,i?`<g opacity="0"${o}>${C}${E}</g>`:C+E))}),nt=ke.map((t,n)=>{let r=t.t0/G,i=Math.min(t.t1/G,1),a=t.tEnd/G,o=vt((i-r)/(t.t1/G-r)),s=`${S}p${n}`;Ve.push(`@keyframes ${s} { 0%,${Z(r)} { opacity: 0 } ${Z(r+1e-4)},${Z(a-1e-4)} { opacity: 1 } ${Z(a)},100% { opacity: 0 } }\n.${s} { animation: ${s} ${x(G)}s infinite step-end; }`);let c=(()=>{let n=u(t.data);if(!n)return``;U.push(11.5);let r=ne(n,210,11.5),i=Math.max(...r.map(e=>z(e,11.5)))+18,a=r.length*15+8;return`<rect x="${x(-i/2)}" y="${x(-a-12)}" width="${x(i)}" height="${x(a)}" rx="8" fill="${t.tone?e(t.tone):`var(--accent)`}"/>`+r.map((e,t)=>`<text x="0" y="${x(-a-12+15*t+15)}" class="chip">${X(e)}</text>`).join(``)})();return`<g${Y(s)} opacity="0"><circle r="10" fill="${t.tone??`var(--accent)`}" opacity="0.2"/><circle r="4.5" fill="${t.tone??`var(--accent)`}"/>${c}<animateMotion dur="${x(G)}s" repeatCount="indefinite" keyTimes="0;${vt(r)};${vt(i)};1" keyPoints="${t.back?`1;1;${vt(1-o)};${vt(1-o)}`:`0;0;${o};${o}`}" calcMode="linear"><mpath href="#${S}p-${X(t.edge)}" xlink:href="#${S}p-${X(t.edge)}"/></animateMotion></g>`}),rt=``,it=``,at=``;if(O){let e=V[0],t=e.x+n(g.layout.children),r=e.y+28;U.push(11),rt=`<path d="M ${x(t)} ${x(r-1)} H ${x(t+640)}" stroke="var(--border)"/>`+O.ticks.map(n=>`<path d="M ${x(t+n.x)} ${x(r-5)} V ${x(r-1)}" stroke="var(--border)"/><text x="${x(t+n.x+3)}" y="${x(e.y+10)}" class="tick">${X(n.label)}</text>`).join(``);let i=x(e.y+e.h);if(O.today!=null){let n=t+O.today;it=`<path d="M ${x(n)} ${x(e.y+12)} V ${i}" stroke="var(--accent)" stroke-opacity="0.6" stroke-width="1" stroke-dasharray="3 3"/>`,at=`<text x="${x(n-3)}" y="${x(e.y+22)}" text-anchor="end" class="today">today</text>`}if(O.last!=null&&W.length){let n=O.last,r=new Map(O.items.map(e=>[e.id,e.x+(e.milestone?e.w/2:0)])),a=new Map(O.items.map(e=>[e.id,e.date])),o=D/1e3/k,s=c(O.items,M),l=s?r.get(s.id):n,u=[[0,l]],p=[],m=l;W.forEach((e,t)=>{let i=d(O.items,I[e.si],e.bi),s=i?r.get(i.id):n,c=i?a.get(i.id):O.lastDate,h=t===W.length-1||W[t+1].si!==e.si,g=h?e.t1-o:e.t1;u.push([e.t0,m],[Math.min(e.t0+Ke,g),s],[g,s]);let[_,v]=t===0&&s===l?[e.t0,g]:f(e.t0,g,Ke);if(_<v&&p.push({a:_,b:v,d:c,x:s}),m=s,h){let r=t===W.length-1?Math.max(g+Ke,e.t1-Ke):e.t1;u.push([Math.min(g+Ke,e.t1),n],[r,n]);let[i,a]=f(g,r,Ke);i<a&&p.push({a:i,b:a,d:O.lastDate,x:n}),r<e.t1&&u.push([e.t1,l]),m=n}});let h=`${S}a${q.size}`;q.set(`playhead`,h);let g=u.map(([e,t])=>`${Z(e/G)} { transform: translateX(${x(t-n)}px) }`).join(` `);Ve.push(`@keyframes ${h} { ${g} }\n.${h} { animation: ${h} ${x(G)}s infinite linear; }`);let _=t+n,v=[...new Set(p.map(e=>e.d))].map(t=>{let n=`d${t}${p.map(e=>e.d===t).map(e=>+!!e).join(``)}`;if(!q.has(n)){let e=`${S}a${q.size}`;q.set(n,e);let r=p.map(e=>`${Z(e.a/G)},${Z(e.b/G-1e-4)} { opacity: ${+(e.d===t)} } ${Z(e.b/G)} { opacity: 0 }`).join(` `);Ve.push(`@keyframes ${e} { ${r} }\n.${e} { animation: ${e} ${x(G)}s infinite step-end; }`)}let r=y(p.find(e=>e.d===t).x,O.today,z(t,11),z(`today`,11));return`<text x="${x(_+3)}" y="${x(e.y+(r?10:22))}" opacity="0"${Y(`today`,q.get(n))}>${X(t)}</text>`});it+=`<g${Y(h)}><path d="M ${x(_)} ${x(e.y+12)} V ${i}" stroke="var(--accent)" stroke-width="1.5"/></g>`,at+=`<g${Y(h)}>${v.join(``)}</g>`}}let ot=V[0],[st,ct,mt,ht]=[`above`,`below`,`left`,`right`].map(e=>Oe(Ce,e)),gt=m.marks?Dt(m.marks):[],_t=g.rail||j?[]:M.map(e=>z(u(e.label),13,!0)),xt=Math.max(pt,...[..._t,gt.length?kt(gt):0].map(e=>e+16)),St=Math.max(ot.w+C*2+mt+ht,xt),Q=g.rail?Re(g,g.rail===`only`?560:St):null,Ot=g.rail===`only`&&Q!=null,jt=Math.max(Ot?560:pt,ot.w),Mt=[...new Set(Ie)].flatMap(e=>ne(e,jt,13.5).length),Nt=Q?20:26,Pt=M.length?Nt+4+Math.max(0,...Mt)*20:0,Ft=Ot?Math.max(560,xt,Q.width):Math.max(St,Q?.width??0),It=Ot?0:ot.h+C*2+st+ct,Lt=Ot?C:It+K.gap,Rt=m.marks?34:0,zt=(Ot?C+Q.height+Pt:It+(Q?K.gap+Q.height:0)+Pt)+Rt,Bt=(Ft-(ot.w+C*2+mt+ht))/2+mt,Vt=Q?(Ft-Q.width)/2:0,Ht=e=>!!h?.fades&&e.every(Boolean),Ut=Q||j?[]:M.map((e,t)=>{let n=W.map(e=>e.si===t);return`<text x="${x(Ft/2)}" y="${x(zt-Rt-Pt+16)}"${Ht(n)?``:` opacity="0"`}${Y(`steplabel`,!Ht(n)&&J(n,`opacity: 1`,`opacity: 0`,`s`))}>${X(u(M[t].label))}</text>`}),Wt=[...new Set(Ie)].map(e=>{let t=Ie.map(t=>t===e),n=ne(e,jt,13.5);return`<g${Ht(t)?``:` opacity="0"${Y(J(t,`opacity: 1`,`opacity: 0`,`y`))}`}>`+n.map((e,t)=>`<text x="${x(Ft/2)}" y="${x(zt-Rt-Pt+Nt+16+t*20)}" class="caption">${X(e)}</text>`).join(``)+`</g>`}),Gt=Q?(()=>{let t=[],n=Q.head-K.cols/2+4;for(let e of Q.bands)t.push(`<rect x="${x(e.rect.x)}" y="${x(Lt+e.rect.y)}" width="${x(e.rect.w)}" height="${x(e.rect.h)}" rx="10" fill="var(--surface)" stroke="var(--border)"/><text x="${x(e.rect.x+10)}" y="${x(Lt+e.rect.y+14)}" class="frame">${X(e.label.toUpperCase())}</text>`);for(let e of Q.columns)t.push(`<text x="${x(e.x)}" y="${x(Lt+n)}" class="railcol">${X(e.label)}</text>`);let r=e=>W.map(t=>Le(Q,t.si)[e]),i=e=>Le(Q,0)[e].y,o=e=>Ue(r(e).map(t=>`transform: translateY(${x(t.y-i(e))}px); opacity: ${+!!t.shown}`),`m`);return Q.rows.forEach((e,n)=>{if(e.kind!==`message`)return;let r=Lt+i(n),a=Q.columns.map(e=>`M ${x(e.x)} ${x(r)} V ${x(r+K.row)}`).join(` `);t.push(`<g${Y(o(n))}><path d="${a}" stroke="var(--border)" stroke-dasharray="2 3"/></g>`)}),Q.groups.forEach(e=>{let n=ze(Q,e),r=Lt+i(e.rows[0]);t.push(`<g${Y(o(e.rows[0]))}><rect x="${x(n.x)}" y="${x(r+n.y)}" width="${x(n.w)}" height="${x(n.h)}" rx="6" fill="var(--card-on)" stroke="var(--accent)" stroke-dasharray="3 3"/></g>`)}),Q.rows.forEach((n,r)=>{let s=Lt+i(r);if(n.kind===`phase`){let e=W.map(e=>Q.folds&&e.si!==n.step),i=e=>`<path d="M ${x(e)} ${x(s+15)} H ${x(n.line.end)}" stroke="var(--border)"/>`,a=/* @__PURE__ */ new Map;for(let e of Q.rows)e.kind===`message`&&e.step===n.step&&!a.has(e.beat)&&a.set(e.beat,e.n);let c=[...a].map(([e,t])=>{let r=W.map(t=>t.si===n.step&&t.bi===e);return`<text x="${x(Q.width-K.pad)}" y="${x(s+19)}" opacity="0"${Y(`frame`,`end`,J(r,`opacity: 1`,`opacity: 0`,`c`))}>${t} of ${Q.total}</text>`});t.push(`<g${Y(o(r))}><g${Y(J(e,`opacity: 0`,`opacity: 1`,`o`))}><text x="${x(K.pad)}" y="${x(s+19)}" class="railphase">${X(n.label)}</text>${i(n.line.open)}</g>`+(Q.folds?`<g opacity="0"${Y(J(e,`opacity: 1`,`opacity: 0`,`f`))}><text x="${x(K.pad)}" y="${x(s+19)}" class="railphase muted">${X(Fe(n))}</text>${i(n.line.folded)}</g>`:``)+c.join(``)+`</g>`);return}let c=W.map(e=>e.si===n.step&&e.bi===n.beat),l=W.map(e=>e.si<n.step||e.si===n.step&&e.bi<n.beat),[u,d]=[Q.columns[n.from].x,Q.columns[n.to].x],f=s+K.row/2,p=n.tone?oe[n.tone]:`var(--accent)`,m=J(c,`stroke: ${p}; stroke-width: 2`,`stroke: var(--muted); stroke-width: ${ee}`,n.tone?`e`+p:`e`),h=ae,_=n.pill?d>u?n.pill.x-h-4:n.pill.x+n.pill.w+4:(u+d)/2-h/2,y=n.async?`<rect x="${x(_)}" y="${x(f-6)}" width="${x(h)}" height="12" rx="4" fill="var(--bg)"/><rect x="${x(_)}" y="${x(f-6)}" width="${x(h)}" height="12" rx="4" fill="${oe.gray}" fill-opacity="0.15"/><text x="${x(_+h/2)}" y="${x(f+3)}" class="tag" fill="${oe.gray}">ASYNC</text>`:``,b=n.pill?`<rect x="${x(n.pill.x)}" y="${x(f-9)}" width="${x(n.pill.w)}" height="18" rx="9" fill="var(--bg)" stroke="var(--border)"${Y(J(c,`fill: ${n.tone?e(p):p}; stroke: ${p}`,`fill: var(--bg); stroke: var(--border)`,n.tone?`l`+p:`l`))}/><text x="${x(n.pill.x+n.pill.w/2)}" y="${x(f+4)}"${Y(`edgelabel`,J(c,`fill: ${N}`,`fill: var(--muted)`,`x`))}>${X(n.text)}</text>`:``,S=a(n.edge,g.edges[H.indexOf(n.edge)].source,I.flat());t.push(`<g${Y(`railrow`,o(r))}>${S?`<title>${X(S)}</title>`:``}<g${Y(J(l,`opacity: .45`,`opacity: 1`,`r`))}><path d="M ${x(u)} ${x(f)} H ${x(d)}" fill="none" stroke="var(--muted)" stroke-width="${ee}"${n.async?` stroke-dasharray="4 3"`:``} marker-end="url(#${v}arrow)"${Y(m)}/>`+y+b+`</g></g>`)}),`<g transform="translate(${x(Vt)} 0)">${t.join(``)}</g>`})():``,Kt=I[0]?.length?x(W[I[0].length-1].t1-.1):0,qt=`${Ot?``:`<g transform="translate(${x(Bt)} ${st})">
|
|
3
|
+
${rt}
|
|
4
|
+
${O?Xe.filter((e,t)=>e&&P(V[t].item)).join(`
|
|
5
|
+
`):``}${it&&`\n${it}`}
|
|
6
|
+
${O?tt.join(`
|
|
7
|
+
`):``}
|
|
8
|
+
${Xe.filter((e,t)=>e&&!(O&&P(V[t].item))).join(`
|
|
9
|
+
`)}
|
|
10
|
+
${O?``:tt.join(`
|
|
11
|
+
`)}
|
|
12
|
+
${nt.join(`
|
|
13
|
+
`)}
|
|
14
|
+
${at}
|
|
15
|
+
</g>
|
|
16
|
+
`}${Gt}
|
|
17
|
+
${Ut.join(`
|
|
18
|
+
`)}
|
|
19
|
+
${Wt.join(`
|
|
20
|
+
`)}
|
|
21
|
+
${At(gt,Ft,zt)}`;Q&&U.push(12,13),gt.length&&U.push(12);let Jt={width:x(Ft),...!Ot&&{area:{x:-Bt,y:-st,w:Ft,h:It}},boxes:Ot?[]:Te,edges:[...(Ot?[]:Ce).flatMap(e=>{let t=g.edges[H.indexOf(e.id)];return e.stub?e.stub.pts.map((n,r)=>({id:e.id,from:t.from,to:t.to,curve:e.curve,pts:n,label:e.stub.pills[r]})):[{id:e.id,from:t.from,to:t.to,curve:e.curve,label:et[e.id],...O&&{behind:!0},...e.elbow&&{elbow:e.elbow}}]}),...(Q?.rows??[]).flatMap((e,t)=>{if(e.kind!==`message`)return[];let n=Ot?Vt:Vt-Bt,r=(Ot?Lt:Lt-st)+Le(Q,e.step)[t].y+K.row/2,[i,a]=[n+Q.columns[e.from].x,n+Q.columns[e.to].x],o={x:i,y:r},s={x:a,y:r};return[{id:`rail:${e.n}`,step:e.step,from:Q.columns[e.from].id,to:Q.columns[e.to].id,curve:[o,o,s,s],label:e.pill&&{x:n+e.pill.x,y:r-9,w:e.pill.w,h:18}}]})],minFont:Math.min(...U),...ie&&{lanes:V.filter(e=>e.lane).map(e=>({id:u(e.item.label),rect:{x:e.x,y:e.y,w:e.w,h:e.h}}))}},Yt={x:Bt-mt,w:ot.w+C*2+mt+ht,h:It};return{W:Ft,H:zt,css:Ve.join(`
|
|
22
|
+
`),body:qt,holdAt:Kt,scene:Jt,fig:g,frame:Yt}}var Nt=(e,t,n,r,i,a,o)=>{let{font:s,...c}={...L,...e.theme,...t.theme},l=le(e);return`<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="${x(n)}" height="${x(r)}" viewBox="0 0 ${x(n)} ${x(r)}" font-family="${X(s??jt)}" role="img">
|
|
23
|
+
<title>${X(l.title)}</title>
|
|
24
|
+
<desc>${X(l.desc)}</desc>
|
|
25
|
+
<style>
|
|
26
|
+
svg { ${gt(c,`#eef5fd`)} }
|
|
27
|
+
@media (prefers-color-scheme: dark) { svg { ${gt(j,`#1d2733`)} } }
|
|
28
|
+
.label { fill: var(--fg); font-size: 14px; font-weight: 500; text-anchor: middle; }
|
|
29
|
+
.sub { fill: var(--muted); font-size: 12px; text-anchor: middle; }
|
|
30
|
+
.frame { fill: var(--muted); font-size: 11px; font-weight: 600; letter-spacing: .04em; }
|
|
31
|
+
.edgelabel { fill: var(--muted); font-size: 11px; text-anchor: middle; font-family: ui-monospace, Menlo, monospace; }
|
|
32
|
+
.row { fill: var(--fg); font-size: 11px; }
|
|
33
|
+
.row.mono { font-size: 10.5px; font-family: ui-monospace, Menlo, monospace; }
|
|
34
|
+
.muted { fill: var(--muted); }
|
|
35
|
+
.bar { fill: var(--fg); font-size: 13px; font-weight: 500; }
|
|
36
|
+
.tick { fill: var(--muted); font-size: 11px; }
|
|
37
|
+
.today { fill: var(--accent); font-size: 11px; font-weight: 600; }
|
|
38
|
+
.tag { font-size: 9px; font-weight: 600; letter-spacing: .03em; text-anchor: middle; }
|
|
39
|
+
.mark { fill: var(--accent); font-size: 11px; font-weight: 600; text-anchor: end; }
|
|
40
|
+
.chip { fill: ${N}; font-size: 11.5px; text-anchor: middle; }
|
|
41
|
+
.steplabel { fill: var(--fg); font-size: 13px; font-weight: 600; text-anchor: middle; font-family: ui-monospace, Menlo, monospace; }
|
|
42
|
+
.caption { fill: var(--muted); font-size: 13.5px; text-anchor: middle; }
|
|
43
|
+
.railcol { fill: var(--fg); font-size: 12px; font-weight: 500; text-anchor: middle; }
|
|
44
|
+
.railphase { fill: var(--fg); font-size: 13px; font-weight: 600; font-family: ui-monospace, Menlo, monospace; }
|
|
45
|
+
.railphase.muted { fill: var(--muted); }
|
|
46
|
+
.end { text-anchor: end; }
|
|
47
|
+
${i}
|
|
48
|
+
@media (prefers-reduced-motion: reduce) { * { animation-play-state: paused !important; animation-delay: -${a}s !important; } }
|
|
49
|
+
</style>
|
|
50
|
+
<defs><marker id="${t.scope??``}arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M 0 1 L 9 5 L 0 9 z" fill="context-stroke"/></marker></defs>
|
|
51
|
+
<rect width="100%" height="100%" fill="var(--bg)"/>
|
|
52
|
+
${o}</svg>
|
|
53
|
+
`},Pt=`(()=>{const s=document.currentScript.closest('svg'),G=[...s.querySelectorAll('.scene')],S=[G[0]],R=matchMedia('(prefers-reduced-motion: reduce)').matches,
|
|
54
|
+
W=(g,k)=>g.dataset[k].split(' ').map(p=>p.split(',').map(Number));let q=[],L=W(G[0],'loop'),w=[0,-1],o,t=0,p=performance.now();
|
|
55
|
+
const seek=t=>{s.pauseAnimations();s.setCurrentTime(t);for(const a of s.getAnimations({subtree:true}))a.pause(),a.currentTime=t*1e3+a.effect.getTiming().delay},
|
|
56
|
+
tick=n=>{if(t>=w[1]){o=q.length>0;if(!o)q=L.slice();w=q.shift();t=w[0]}seek(R?w[1]:Math.min(t,w[1]));t+=R?(o?1e9:0):(n-p)/1e3;p=n;requestAnimationFrame(tick)},
|
|
57
|
+
show=()=>{const c=S.at(-1);for(const g of G){g.style.pointerEvents=g==c?'':'none';for(const x of g.querySelectorAll('.hit,.back'))x.setAttribute('role','button'),x.setAttribute('tabindex',g==c?0:-1)}},
|
|
58
|
+
go=(a,b)=>{q=a;L=b;w=[0,-1];t=0;show()},
|
|
59
|
+
back=()=>{if(S.length>1){const g=S.pop();go(W(g,'back'),W(S.at(-1),'loop'))}},
|
|
60
|
+
act=e=>{const x=e.target.closest('.hit,.back');if(!x||x.closest('.scene')!=S.at(-1))return;if(x.classList.contains('back'))back();else{const g=G.find(g=>g.id=='s-'+x.dataset.open);S.push(g);go(W(g,'open'),W(g,'loop'))}return 1};
|
|
61
|
+
s.setAttribute('role','group');s.addEventListener('click',act);
|
|
62
|
+
s.addEventListener('keydown',e=>{const k=e.key;if(k=='Escape'||k=='Backspace')back();else if(!((k=='Enter'||k==' ')&&act(e)))return;e.preventDefault()});
|
|
63
|
+
show();requestAnimationFrame(tick)})()`,Ft=28;function It(e,t={}){let{scene:n,script:r,...i}=t,a=te(e),o=e=>e.join(`>`),s=(e,t)=>e.filter(e=>e.path.length===t.length+1&&o(e.path.slice(0,-1))===o(t)),c=e=>({ports:new Set(e.ports.map(e=>e.id)),owners:new Map(s(a,e.path).map(e=>[e.path.at(-1),e.parts]))});if(n!=null){let e=a.find(e=>e.path.at(-1)===n);if(!e)throw Error(`box "${n}" has no level to open`);let t=e=>({...e,children:e.children.map(e=>P(e)?t(e):{...e,inside:void 0})}),r=Mt({...e.props,layout:t(e.props.layout)},i,c(e));return{svg:Nt(r.fig,i,r.W,r.H,r.css,r.holdAt,r.body),scene:r.scene}}if(a.length<2){let t=Mt(e,i);return{svg:Nt(t.fig,i,t.W,t.H,t.css,t.holdAt,t.body),scene:t.scene}}let l=ie(e,t.speed??e.speed),u=l.ms/1e3,d=l.ms/1e4,{fade:f,grow:p,stagger:m,hide:g,shrink:_}=M,v=[],y=`${t.scope??``}f${([...JSON.stringify(e)].reduce((e,t)=>e*31+t.charCodeAt(0)|0,7)>>>0).toString(36)}`,b=e=>{let t=`${y}t${v.length}`,n=e.map(([e,t,n])=>`${Z(e/l.ms)} { ${t}${n?`; animation-timing-function: ${n}`:``} }`).join(` `);return v.push(`@keyframes ${t} { ${n} }\n.${t} { animation: ${t} ${x(u)}s infinite linear; }`),t},S=e=>e.grown-p-f,C=e=>s(l.opens,e).flatMap(e=>[[S(e),1],[S(e)+f,0],[e.back[1]-f,0],[e.back[1],1]]),w=a.map((t,n)=>{let r=l.opens.find(e=>o(e.path)===o(t.path)),a=r?{...t.props,steps:r.step===-1?[]:[t.props.steps[r.step]]}:e,s=r&&new Map(h(t).map((e,t)=>{let n=r.grown+m*t;return[e,b([[0,`opacity: 0`],[n,`opacity: 0`],[n+f,`opacity: 1`],[l.ms,`opacity: 1`]])]})),d=r?r.times:l.times;return{s:t,o:r,props:a,d:Mt(a,i,{prefix:`${y}s${n}`,...c(t),fades:s,times:d,total:u})}}),T=Math.max(...w.map(e=>e.d.W)),E=Math.max(...w.map(e=>e.d.H))+Ft,D=e=>[(T-e.W)/2,(E+Ft-e.H)/2],O=(e,t)=>(e.length?e:[[t,t]]).map(([e,t])=>`${x(e/1e3)},${x(t/1e3)}`).join(` `),k=w.map(({s:e,o:t,d:n})=>{let i=t?[[0,0],[t.grown,0],[t.grown+d,1],...C(e.path),[t.back[1]-f-_-g,1],[t.back[1]-f-_,0],[l.ms,0]]:[[0,1],...C(e.path),[l.ms,1]],o=t?`<text class="back ${y}back" x="16" y="19">Back</text><text class="${y}path" x="${x(16+z(`Back`,14)+12)}" y="19">${X(e.line)}</text>`:``,c=n.scene.area,u=r?s(a,e.path).map(e=>{let t=n.scene.boxes.find(t=>t.id===e.path.at(-1)).rect;return`<rect class="hit" x="${x(t.x-c.x)}" y="${x(t.y-c.y)}" width="${x(t.w)}" height="${x(t.h)}" fill="transparent" tabindex="0" role="button" aria-label="Open ${X(e.name)}, ${e.parts} parts" data-open="${X(e.path.at(-1))}"/>`}).join(``):``,p=r?t?` data-open="${O([t.open],0)}" data-loop="${O(t.loop,t.open[1])}" data-back="${O([t.back],0)}"`:` data-loop="${O(l.loop,0)}"`:``;return`<g class="${b(i.map(([e,t])=>[e,`opacity: ${t}`]))}"><g class="scene"${t?` id="s-${X(e.path.at(-1))}"`:``}${p}>${o}<g transform="translate(${x(D(n)[0])} ${x(D(n)[1])})">\n${n.body}${u}</g></g></g>`}),A=w.slice(1).map(({s:e,o:t,d:n})=>{let r=w.find(t=>o(t.s.path)===o(e.path.slice(0,-1))).d,i=r.scene.boxes.find(t=>t.id===e.path.at(-1)).rect,[a,s]=D(r),c=D(n)[0]+n.frame.x,u=D(n)[1],p=a+i.x-r.scene.area.x-c,m=s+i.y-r.scene.area.y-u,h=`transform: translate(${x(p)}px, ${x(m)}px) scale(${vt(i.w/n.frame.w)}, ${vt(i.h/n.frame.h)})`,g=`transform: translate(0px, 0px) scale(1, 1)`,v=S(t),y=t.back[1]-f;return`<rect class="open-frame ${b([[0,`opacity: 0; ${h}`],[v,`opacity: 0; ${h}`],[v+d,`opacity: 1; ${h}`],[v+f,`opacity: 1; ${h}`,`cubic-bezier(0.2, 0, 0, 1)`],[t.grown,`opacity: 1; ${g}`],...C(e.path).map(([e,t])=>[e,`opacity: ${t}; ${g}`]),[y-_,`opacity: 1; ${g}`,`cubic-bezier(0.4, 0, 1, 1)`],[y,`opacity: 1; ${h}`],[y+d,`opacity: 0; ${h}`],[l.ms,`opacity: 0; ${h}`]])}" data-for="${X(e.path.at(-1))}" x="${x(c)}" y="${x(u)}" width="${x(n.frame.w)}" height="${x(n.frame.h)}" rx="10" fill="none" stroke="var(--border)" vector-effect="non-scaling-stroke" style="transform-box: view-box; transform-origin: ${x(c)}px ${x(u)}px"/>`}),j=w[0].d,N=[...w.map(e=>e.d.css),`.${y}back { fill: var(--accent); font-size: 14px; }\n.${y}path { fill: var(--fg); font-size: 14px; }`,...v],F=`${k.join(`
|
|
64
|
+
`)}\n<g pointer-events="none">${A.join(``)}</g>\n${r?`<script><![CDATA[${Pt}]]><\/script>\n`:``}`;return{svg:Nt(j.fig,i,T,E,N.join(`
|
|
65
|
+
`),j.holdAt,F),scene:j.scene,levels:w.map(({s:e,props:t,d:n})=>({line:e.line,props:t,scene:n.scene}))}}var Lt={data:`Data through the air`,thing:`Things on the road or by hand`,check:`A check`},Rt={data:`<path d="M2 14C3 5 13 5 14 14" fill="none" stroke="#2456D6" stroke-width="1.6"/><circle cx="8" cy="7.3" r="2.6" fill="#2456D6"/>`,thing:`<rect x="4" y="2" width="8" height="12" rx="2" fill="#D9822B"/><path d="M4 6h8M4 10h8" stroke="#A35F1C"/>`,check:`<path d="M3 3v11" stroke="#2e3440" stroke-width="2.4"/><path d="M3 6h11" stroke="#2e3440" stroke-width="2.6" stroke-dasharray="3 2"/>`},zt=[`diagram`,`guide`,`change`],Bt=e=>Object.entries(e).map(([e,t])=>`--flowfig-${e}:${t};`).join(``),Vt=e=>Object.entries(e).map(([e,t])=>`--${e}:${t};`).join(``),Ht=[`:host{display:block;container:ff-host/inline-size;${Bt(R.light)}}`,`:host([theme=dark]){${Bt(R.dark)}}`,`@media (prefers-color-scheme:dark){:host(:not([theme=light])){${Bt(R.dark)}}}`,`:host{color:var(--flowfig-ink)!important;font-size:15px!important;font-family:var(--flowfig-font)!important;line-height:1.5!important;letter-spacing:normal!important}`,`:host([theme=light]) svg[role=img]{${Vt(L)}}`,`:host([theme=dark]) svg[role=img]{${Vt(j)}}`,`:host(:focus-visible),:focus-visible{outline:2px solid var(--flowfig-accent);outline-offset:2px}`,`[hidden]{display:none!important}`,`.ff-root{display:grid;gap:12px;padding:16px;background:var(--flowfig-bg);border:1px solid var(--flowfig-border);border-radius:12px}`,`.ff-title{margin:0;font-size:18px;font-weight:600}`,`.ff-row{display:flex;flex-wrap:wrap;gap:6px}`,`button{font:inherit;font-size:13px;color:inherit;background:var(--flowfig-surface);border:1px solid var(--flowfig-border);border-radius:999px;padding:4px 12px;cursor:pointer}`,`button[aria-pressed=true]{background:var(--flowfig-accent);border-color:var(--flowfig-accent);color:var(--flowfig-on-accent)}`,`button:disabled{cursor:default;opacity:.5}`,`.ff-pane{overflow-x:auto}`,`.ff-pane>svg{display:block;width:100%;height:auto;min-width:var(--ff-min);max-width:var(--ff-max);margin:0 auto}`,`.ff-live{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}`,`.ff-alert{margin:0;color:var(--flowfig-bad)}`,`.ff-g{position:relative;box-sizing:border-box;width:100%;height:100%;aspect-ratio:16/10;max-height:100vh;display:flex;flex-direction:column;gap:0;padding:0;border:0;overflow:hidden}`,`.ff-row:empty{display:none}`,`.ff-g>.ff-view{position:relative;flex:1;min-height:0}`,`.ff-guide{position:relative;height:100%;overflow:hidden;container:ff-guide/size;--ff-well:#EDEFE9;--flowfig-border:#D7DAD3;--flowfig-muted:#5B6370}`,`:host([theme=dark]) .ff-guide{${Bt(R.dark)}--ff-well:#2a313c}`,`@media (prefers-color-scheme:dark){:host(:not([theme=light])) .ff-guide{${Bt(R.dark)}--ff-well:#2a313c}}`,`.ff-stage{position:absolute;inset:0}`,`.ff-stage[data-stage=world]{background:#E8ECE3}`,`.ff-stage[data-stage=diagram]{background:var(--flowfig-bg)}`,`.ff-stage>.ff-pane{position:absolute;inset:0;overflow:auto}`,`.ff-chips{position:absolute;top:${B.pad}px;left:${B.pad*2+B.panel}px;max-width:calc(100% - ${B.pad*3+B.panel}px);box-sizing:border-box;display:flex;gap:2px;padding:4px;overflow-x:auto;background:var(--flowfig-surface);border:1px solid var(--flowfig-border);border-radius:10px}`,`.ff-cut{mask-image:linear-gradient(90deg,#000 calc(100% - 40px),transparent)}`,`.ff-chip,.ff-hd .ff-btn{flex:none;border:0;border-radius:7px;padding:6px 12px;font:500 14px/20px var(--flowfig-font);color:var(--flowfig-muted);background:none}`,`.ff-chip[aria-pressed=true],.ff-hd .ff-btn[aria-pressed=true]{background:var(--ff-well);color:var(--flowfig-ink);font-weight:600}`,`.ff-hd{display:flex;flex-wrap:wrap;align-items:center;gap:8px}`,`.ff-hd>.ff-row{gap:2px;padding:2px;border:1px solid var(--flowfig-border);border-radius:8px}`,`.ff-hd .ff-btn{padding:2px 10px;border-radius:6px;font-size:13px;line-height:18px}`,`.ff-hud{position:absolute;top:${B.pad}px;left:${B.pad}px;max-height:calc(100% - ${B.pad*2}px);width:${B.panel}px;box-sizing:border-box;display:flex;flex-direction:column;gap:12px;padding:20px;overflow:auto;background:var(--flowfig-surface);color:var(--flowfig-ink);border:1px solid var(--flowfig-border);border-radius:8px}`,`.ff-ht{margin:0;font-size:15px;font-weight:600}`,`.ff-kick{margin:0;font-size:13px;color:var(--flowfig-muted)}`,`.ff-say{margin:0;font-size:26px;line-height:1.18;font-weight:600;letter-spacing:-0.01em}`,`.ff-note{margin:0;font-size:15px;line-height:1.4;color:var(--flowfig-muted)}`,`.ff-note.ff-bad{color:var(--flowfig-bad)}`,`.ff-code{margin:0;padding:8px 12px;max-height:160px;overflow:auto;font:13px/1.45 ui-monospace,Menlo,monospace;white-space:pre;background:var(--flowfig-bg);border:1px solid var(--flowfig-border);border-radius:6px}`,`.ff-lbl{margin:0;font-size:13px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--flowfig-muted)}`,`.ff-hud .ff-lbl{letter-spacing:0;text-transform:none}`,`.ff-skip ul{margin:6px 0 0;padding:0;list-style:none;display:flex;flex-direction:column;font-size:14px;line-height:22px;color:var(--flowfig-muted)}`,`.ff-moments{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:2px}`,`.ff-skip,.ff-moments{padding-top:16px;border-top:1px solid var(--flowfig-border)}`,`.ff-moments button{display:flex;align-items:center;gap:10px;width:100%;box-sizing:border-box;padding:7px 8px;border:0;border-radius:6px;background:none;font-size:14px;text-align:left}`,`.ff-moments button[aria-current=true]{background:var(--ff-well);font-weight:600}`,`.ff-moments .ff-fail{color:var(--flowfig-bad)}`,`.ff-mk{display:inline-grid;place-items:center;flex:none;width:18px;height:18px;border-radius:4px;font:600 11px/1 var(--flowfig-font);background:var(--ff-well);color:var(--flowfig-ink)}`,`[data-s=no]>.ff-mk{background:#FCEBE8;color:#B8322A}`,`[data-s=now]>.ff-mk{background:var(--flowfig-ink);color:var(--flowfig-surface)}`,`[data-s=next]>.ff-mk{background:none;color:var(--flowfig-muted);box-shadow:inset 0 0 0 1px var(--flowfig-border)}`,`.ff-ctl{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:4px}`,`.ff-b{padding:9px 16px;font-size:14px;font-weight:600;border-radius:8px}`,`.ff-b:disabled{opacity:1;color:#8A919C;background:var(--flowfig-surface)}`,`.ff-play{background:var(--flowfig-ink);border-color:var(--flowfig-ink);color:var(--flowfig-surface)}`,`.ff-ft{display:flex;gap:16px}`,`.ff-txt,.ff-txt[aria-pressed]{border:0;background:none;padding:4px 0;font:500 13px var(--flowfig-font);color:var(--flowfig-muted);text-decoration:underline 1px;text-underline-offset:3px}`,`.ff-back::before{content:"\\2190 "/""}`,`.ff-next::after{content:" \\2192"/""}`,`.ff-more{display:none}`,`.ff-key{margin:0;padding:12px 0 0;list-style:none;display:flex;flex-direction:column;gap:4px;border-top:1px solid var(--flowfig-border);font-size:13px;color:var(--flowfig-muted)}`,`.ff-key li{display:flex;align-items:center;gap:10px}`,`@container ff-host (width < ${B.wide}px){.ff-g{aspect-ratio:auto;height:min(100svh,${B.tall}px);max-height:none}.ff-chips{top:8px;left:8px;max-width:calc(100% - 16px)}.ff-hud{top:auto;left:0;right:0;bottom:0;width:auto;height:${B.sheet}px;max-height:none;gap:8px;padding:12px 16px;border-radius:12px 12px 0 0;font-size:13px}.ff-say{font-size:16px}.ff-note{font-size:13px}.ff-moments button,.ff-key{font-size:11px}.ff-ht,.ff-kick,.ff-code,.ff-ft,.ff-key,.ff-moments:not(.ff-open),.ff-skip:not(.ff-open){display:none}.ff-hd{order:-3}.ff-say,.ff-note{order:-2}.ff-ctl{order:-1}.ff-more{display:inline-block}}`,`@container ff-guide (${B.slim*2}px <= width < ${B.wide}px) and (height < ${B.short}px){.ff-chips{top:${B.pad}px;left:${B.pad*2+B.slim}px;max-width:calc(100% - ${B.pad*3+B.slim}px)}.ff-hud{top:${B.pad}px;left:${B.pad}px;right:auto;bottom:auto;width:${B.slim}px;height:auto;max-height:calc(100% - ${B.pad*2}px);border-radius:8px}}`,`.ff-verdict{padding:12px 16px;background:var(--flowfig-surface);border:1px solid var(--flowfig-border);border-radius:10px;font-size:16px;font-weight:500}`,`.ff-list{margin:6px 0 0;padding-left:20px;font-size:15px;font-weight:400}`,`.ff-all{margin-top:8px;font-size:13px;font-weight:400;color:var(--flowfig-muted)}`,`.ff-all summary{cursor:pointer}`,`.ff-all pre{margin:6px 0 0;max-height:12em;overflow:auto;font:13px/1.45 ui-monospace,Menlo,monospace;color:var(--flowfig-ink);white-space:pre-wrap}`,`.ff-tiles{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px}`,`.ff-tile{padding:8px 14px;background:var(--flowfig-surface);border:1px solid var(--flowfig-border);border-radius:10px}`,`.ff-out{margin:2px 0 0;min-height:1.5em;font-size:16px;font-weight:600}`,`.ff-out:empty::before{content:"Press a step to compare";color:var(--flowfig-muted);font-weight:400}`,`.ff-wait .ff-out:empty::before{content:"Playing…"}`,`.ff-none .ff-out{color:var(--flowfig-muted);font-weight:400}`,`.ff-tile.ff-bad{border-color:var(--flowfig-bad)}`,`.ff-bad .ff-out{color:var(--flowfig-bad)}`,`.ff-tile.ff-good{border-color:var(--flowfig-good)}`,`.ff-good .ff-out{color:var(--flowfig-good)}`,`.ff-sides{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px}`,`.ff-sides.ff-big{grid-template-columns:minmax(0,1fr)}`,`@container ff-host (width < 700px){.ff-sides{grid-template-columns:minmax(0,1fr)}}`,`.ff-side{display:flex;flex-direction:column;gap:8px;min-width:0;padding:12px 14px;background:var(--flowfig-surface);border:1px solid var(--flowfig-border);border-radius:12px}`,`.ff-sh{display:flex;align-items:center;justify-content:space-between;gap:8px}`,`.ff-sh h3{margin:0;font-size:15px;font-weight:600}`,`.ff-sides:not(.ff-big) .ff-pane{cursor:zoom-in}`,`.ff-sides:not(.ff-big) .ff-pane>svg{min-width:0}`,`.ff-big .ff-pane{max-height:80vh;overflow:auto}`,`.ff-side svg[role=img]{--accent:var(--flowfig-play)!important}`,`[data-diff] :is(rect,path:not([stroke=none]),polygon){stroke:var(--flowfig-accent)!important;filter:none!important}`,`[data-diff] :is(rect,polygon,path:not([fill=none])){fill:color-mix(in srgb,var(--flowfig-accent) 8%,var(--bg))!important}`,`rect[data-diff]{fill:var(--flowfig-accent)}`,`[data-diff] text{fill:var(--fg)!important}`,`@media (prefers-reduced-motion:reduce){.ff-guide *{animation:none!important;transition:none!important;scroll-behavior:auto!important}}`].join(`
|
|
66
|
+
`),Ut,Wt=(e,t)=>{let n=e.speed??900,r=0;for(let i of e.steps??[]){let e=i.flow.reduce((e,t)=>e+O(_(t),n),0);if(u(i.label)===t)return[r,e];r+=e+(i.flow.length?D:0)}return[r,0]},Gt=(e,t)=>{let[n,r]=Wt(e,t);return n+r+D/2},Kt=e=>e?.classList.toggle(`ff-cut`,e.scrollLeft+e.clientWidth<e.scrollWidth-1),qt=()=>matchMedia(`(prefers-reduced-motion: reduce)`).matches,Jt=(e,t,n=!1)=>{let r=t/k;n?e.unpauseAnimations():e.pauseAnimations(),e.setCurrentTime(r/1e3);for(let t of e.getAnimations({subtree:!0}))t.effect?.updateTiming({delay:0}),n?t.play():t.pause(),t.currentTime=r},Yt=(e,t)=>{let{svg:n,scene:r}=It(e,t),i=$(`div`,`ff-pane`);return i.innerHTML=n,i.style.setProperty(`--ff-min`,`${r.width*11/r.minFont}px`),i.style.setProperty(`--ff-max`,`${r.width}px`),i},$=(e,t,...n)=>{let r=document.createElement(e);return r.className=t,r.append(...n),r},Xt=(e,t,n)=>{let r=$(`button`,`ff-btn`,e);return r.type=`button`,n!==void 0&&r.setAttribute(`aria-pressed`,String(n)),r.addEventListener(`click`,t),r};async function Zt(e){try{let t=await fetch(e);if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.text(),r;if(n.trimStart().startsWith(`<`)){let e=new DOMParser().parseFromString(n,`image/svg+xml`).querySelector(`metadata#figure-spec`);if(!e)throw Error(`no figure spec inside this SVG`);r=JSON.parse(e.textContent??``)}else r=JSON.parse(n);let i=r?.props??r;if(!i?.layout)throw Error(`no figure props (expected { props: { layout, edges, steps } })`);return{props:i,title:u(r.title)}}catch(t){throw Error(`${e}: ${t.message}`)}}var Qt=globalThis.HTMLElement??class{},$t=class extends Qt{static observedAttributes=[`src`,`before`,`form`,`step`,`theme`,`code`,`forms`];#e;#t;#n=``;#r=`spec`;#i=[];#a=0;#o={src:0,before:0};#s;#c;#l;#u;#d;#f;#p;#m=0;#h=0;#g;#_;#v=[];#y=[];#b={};#x=$(`h2`,`ff-title`);#S=$(`div`,`ff-row`);#C=$(`div`,`ff-view`);#w=$(`p`,`ff-live`);#T=$(`div`,`ff-root`);constructor(){super();let e=this.attachShadow({mode:`open`});Ut||(Ut=new CSSStyleSheet,Ut.replaceSync(Ht)),e.adoptedStyleSheets=[Ut],this.#w.setAttribute(`aria-live`,`polite`);let t=document.createElement(`slot`);t.name=`title`,t.append(this.#x);let n=document.createElement(`slot`);n.name=`caption`,this.#T.append(t,this.#S,this.#C,this.#w,n),e.append(this.#T),this.addEventListener(`keydown`,this.#A)}connectedCallback(){this.hasAttribute(`tabindex`)||this.setAttribute(`tabindex`,`0`);for(let e of[`spec`,`beforeSpec`,`moment`]){if(!Object.hasOwn(this,e))continue;let t=this[e];delete this[e],this[e]=t}this.#e&&this.#f&&!this.#p&&this.#f.ready&&this.#N()}disconnectedCallback(){this.pause(),clearTimeout(this.#g),this.#p?.stop(),this.#p=void 0}attributeChangedCallback(e,t,n){t!==n&&(e===`src`||e===`before`?this.#j(e):e===`step`?n&&this.show(n):e===`code`&&this.#f?(this.#f.tog.setAttribute(`aria-pressed`,String(n!==null)),this.#P()):e!==`theme`&&this.#N())}get spec(){return this.#e}set spec(e){this.#o.src++,this.#e=e,this.#n=``,this.#r=`spec`,this.#N(!0)}get beforeSpec(){return this.#t}set beforeSpec(e){this.#o.before++,this.#t=e,this.#N()}get moment(){return this.#a}set moment(e){let t=Math.min(Math.max(0,Math.trunc(e)||0),Math.max(0,this.#i.length-1));t!==this.#a&&(this.#a=t,this.#P(),this.#R())}next(){this.moment=this.#a+1}back(){this.moment=this.#a-1}play(){this.pause();let e=()=>{if(this.#a>=this.#i.length-1)return this.pause();this.#s=setTimeout(()=>{this.next(),e()},this.#h+this.#i[this.#a].ms),this.#P()};e()}pause(){clearTimeout(this.#s),this.#s=void 0,this.#b.play&&this.#P()}show(e){let t=this.#i.findIndex(t=>t.step===e);t>=0&&(this.moment=t)}#E(){let e=e=>(e?.steps??[]).map(e=>u(e.label));return this.#_?[.../* @__PURE__ */ new Set([...e(this.#e),...e(this.#t)])]:e(this.#e)}#D(e){if(this.#_&&!this.#i.some(t=>t.step===e))return this.#O(e);this.#l=void 0,this.show(e),this.#P()}#O(e){this.#v.forEach(clearTimeout),this.#u=e;for(let t of this.#y)t.setAttribute(`aria-pressed`,String(t.textContent===e));let t=qt();this.#v=(this.#_??[]).map(n=>{let r=n.spec.steps?.find(t=>u(t.label)===e);if(n.out.textContent=r?``:`This step is not in ${n.name}`,n.tile.className=`ff-tile ${r?`ff-wait`:`ff-none`}`,!r)return void Jt(n.svg,0);let i=Wt(n.spec,e)[0],a=Gt(n.spec,e),o=r.flow.flatMap(e=>_(e).hops).at(-1),s=n.spec.edges.find(e=>b(e)===o?.edge),c=C(n.spec.layout).find(e=>e.id===(o?.back?s?.from:s?.to))?.tone;return Jt(n.svg,t?a:i,!t),setTimeout(()=>{Jt(n.svg,a),n.out.textContent=re(n.spec,e).at(-1)?.summary?.outcome??``,n.tile.className=`ff-tile${c===`red`||c===`gray`?` ff-bad`:c===`green`?` ff-good`:``}`},t?0:(a-i)/k)})}#k(e){let t=this.#E(),n=t.indexOf((this.#_?this.#u:this.#i[this.#a]?.step)??``),r=t[Math.min(Math.max(0,n+e),t.length-1)];r!==void 0&&(this.#_?this.#D(r):this.show(r))}#A=e=>{if(e.altKey||e.ctrlKey||e.metaKey)return;e.key!==` `&&this.pause();let t=this.#c===`guide`;if(e.key===`ArrowRight`)t?this.next():this.#k(1);else if(e.key===`ArrowLeft`)t?this.back():this.#k(-1);else if(e.key===` `&&e.composedPath()[0]===this)this.#s?this.pause():this.play();else if(/^[1-9]$/.test(e.key)){let t=this.#E()[Number(e.key)-1];t!==void 0&&this.#D(t)}else return;e.preventDefault()};async#j(e){let t=++this.#o[e],n=this.getAttribute(e);if(n)try{let{props:r,title:i}=await Zt(n);if(t!==this.#o[e])return;if(e===`before`)return this.#t=r,this.#N();this.#e=r,this.#n=i,this.#r=n,this.#N(!0)}catch(n){t===this.#o[e]&&this.#M(n.message)}}#M(e){this.pause(),clearTimeout(this.#g),this.#p?.stop(),this.#p=void 0,this.#m++,this.#i=[],this.#a=0,this.#d=void 0,this.#y=[],this.#b={},this.#S.replaceChildren(),this.#w.textContent=``;let t=$(`p`,`ff-alert`,e);t.setAttribute(`role`,`alert`),this.#C.replaceChildren(t)}#N(e=!1){let t=this.#e;if(t)try{if(e){this.pause();let e=t.speed??900,n=new Map(t.edges.map(e=>[b(e),e])),r=new Map(C(t.layout).map(e=>[e.id,e]));this.#i=(t.steps??[]).flatMap(i=>{let a=u(i.label),o=i.flow.map(_);return re(t,a).map((t,i)=>{let s=o[i]?.hops??[],c=s.flatMap(e=>{let t=n.get(e.edge);return[e.source,e.via,t?.source,t?.via,r.get(t?.from??``)?.source,r.get(t?.to??``)?.source]}),l=s[0],d=n.get(l?.edge??``);return{...t,step:a,title:t.summary?t.summary.outcome:t.stamp?t.question:u(r.get((l?.back?d?.to:d?.from)??``)?.label)||t.say,ms:i<o.length?O(o[i],e):D,code:[...new Set(c.filter(e=>!!e))]}})});let i=this.getAttribute(`step`);this.#a=Math.max(0,i?this.#i.findIndex(e=>e.step===i):0)}let n=zt.filter(e=>e===`guide`?!!t.steps?.length:e!==`change`||!!this.#t),r=this.getAttribute(`forms`)?.split(/\s+/),i=r?n.filter(e=>r.includes(e)):n,a=this.getAttribute(`form`),o=a&&i.includes(a)?a:i.includes(`guide`)?`guide`:i[0]??`diagram`;if(this.#C.before(this.#S),this.#S.replaceChildren(...i.length>1?i.map(e=>Xt(e,()=>this.setAttribute(`form`,e),e===o)):[]),clearTimeout(this.#g),this.#p?.stop(),this.#p=void 0,this.#m++,this.#h=0,this.#x.textContent=this.#n,this.#x.hidden=!this.#n||o===`guide`,this.#d=void 0,this.#f=void 0,this.#_=void 0,this.#u=void 0,this.#T.classList.toggle(`ff-g`,o===`guide`),this.#l=void 0,this.#y=[],this.#b={},this.#C.replaceChildren(),a===`change`&&!this.#t&&!this.hasAttribute(`before`)){let e=$(`p`,`ff-alert`,`${this.#r}: the change form needs a before spec`);e.setAttribute(`role`,`alert`),this.#C.append(e)}if(o===`diagram`){let e=Yt(t);this.#d=e.querySelector(`svg`)??void 0,this.#y=this.#E().map(e=>Xt(e,()=>this.show(e),!1)),this.#C.append(e,$(`div`,`ff-row`,...this.#y))}else if(o===`change`&&this.#t){let e=st(this.#t,t),n=e=>{i.classList.toggle(`ff-big`,!!e);for(let t of i.children){t.hidden=!!e&&t!==e;let n=t.querySelector(`button`);n.textContent=e?`Back to both`:`Enlarge`,n.setAttribute(`aria-label`,e?`Back to both`:`Enlarge ${t.querySelector(`h3`).textContent}`)}let t=this.#u;for(let e of this.#_)Jt(e.svg,t&&e.spec.steps?.some(e=>u(e.label)===t)?Gt(e.spec,t):0)},r=(t,r,a,o)=>{let s={boxes:{},edges:{},steps:0};for(let t of e)a.includes(t.op)&&(t.kind===`box`||t.kind===`edge`)&&(s[t.kind===`box`?`boxes`:`edges`][t.id]=t.op);let c=Yt(r,{marks:s,scope:o}),l=Xt(`Enlarge`,()=>n(i.classList.contains(`ff-big`)?void 0:u));l.setAttribute(`aria-label`,`Enlarge ${t}`);let u=$(`section`,`ff-side`,$(`div`,`ff-sh`,$(`h3`,``,t),l),c);c.addEventListener(`click`,()=>i.classList.contains(`ff-big`)||n(u));let d=$(`p`,`ff-out`);d.dataset.outcome=``,d.setAttribute(`aria-live`,`polite`);let f=$(`div`,`ff-tile`,$(`span`,`ff-lbl`,t),d);return f.dataset.side=t.toLowerCase(),i.append(u),{name:t,spec:r,svg:c.querySelector(`svg`),out:d,tile:f}},i=$(`div`,`ff-sides`);this.#_=[r(`Before`,this.#t,[`removed`,`changed`],`b`),r(`After`,t,[`added`,`changed`],`a`)];let a=(e,t,n)=>{for(let r of e.children)P(r)?a(r,r.label==null?t:u(r.label),n):n.set(r.id,[u(r.label)||r.id,t]);return n},o=a(this.#t.layout,``,/* @__PURE__ */ new Map),s=a(t.layout,``,/* @__PURE__ */ new Map),c=e=>(s.get(e)??o.get(e))?.[0]??e,l={box:0,step:1,edge:2},d=e.filter(e=>e.kind in l).sort((e,t)=>l[e.kind]-l[t.kind]).map(e=>{let t=e.op===`added`?`Added`:e.op===`removed`?`Removed`:`Changed`;if(e.kind===`step`)return`${t} step: ${e.id}`;if(e.kind===`edge`)return`${t} link: ${e.id.split(`->`).map(c).join(` → `)}`;let[n,r]=[o.get(e.id)?.[1],s.get(e.id)?.[1]];return e.op===`changed`&&n!==r?`Moved: ${c(e.id)}, ${[n&&`from ${n}`,r&&`to ${r}`].filter(Boolean).join(` `)}`:`${t}: ${c(e.id)}`}),f=document.createElement(`slot`);f.name=`verdict`,f.append($(`p`,`ff-lbl`,`What changed`),$(`ul`,`ff-list`,...[...d.slice(0,6),...d.length>6?[`and ${d.length-6} more`]:[]].map(e=>$(`li`,``,e)))),this.#y=this.#E().map(e=>Xt(e,()=>this.#D(e),!1)),this.#C.append($(`div`,`ff-verdict`,f,$(`details`,`ff-all`,$(`summary`,``,`Show all changes`),$(`pre`,``,ct(e,`text`)))),$(`div`,`ff-row`,...this.#y),$(`div`,`ff-tiles`,...this.#_.map(e=>e.tile)),i);for(let e of this.#_)Jt(e.svg,0);this.#l=this.#i[this.#a]?.step}else if(o===`guide`){this.#b={back:Xt(`Back`,()=>this.back()),play:Xt(`Play`,()=>this.#s?this.pause():this.play()),next:Xt(`Next`,()=>this.next())},this.#b.back.className=`ff-btn ff-b ff-back`,this.#b.play.className=`ff-btn ff-b ff-play`,this.#b.next.className=`ff-btn ff-b ff-next`;let e=(e,t,n)=>{let r=Xt(e,t,n);return r.className=`ff-btn ff-chip`,r},n=I(t),r={ht:$(`h2`,`ff-ht`,this.#n),kick:$(`p`,`ff-kick`),say:$(`h3`,`ff-say`),note:$(`p`,`ff-note`),code:$(`pre`,`ff-code`),skip:$(`div`,`ff-skip`),list:$(`ol`,`ff-moments`),key:$(`ul`,`ff-key`),items:[],chips:this.#E().map(t=>e(t,()=>this.show(t),!1)),tog:e(`Show the code`,()=>this.toggleAttribute(`code`),this.hasAttribute(`code`)),more:Xt(`Moments`,()=>{let e=r.list.classList.toggle(`ff-open`);r.skip.classList.toggle(`ff-open`,e),r.more.setAttribute(`aria-expanded`,String(e))}),stage:$(`div`,`ff-stage`),ready:n,step:``,last:-1,lastStep:``,drawn:``,sheets:/* @__PURE__ */ new Map};r.ht.hidden=!this.#n,r.tog.className=`ff-btn ff-txt ff-tog`,r.more.className=`ff-btn ff-b ff-more`,r.more.setAttribute(`aria-expanded`,`false`);let i=Xt(`Full screen`,()=>void this.requestFullscreen?.());if(i.className=`ff-btn ff-txt`,i.hidden=!document.fullscreenEnabled,r.key.hidden=!0,n){r.stage.dataset.stage=`world`;let e=++this.#m;import(`./element-world.js`).then(n=>{if(e!==this.#m||this.#f!==r)return;let i=n.scene(t);r.key.replaceChildren(...i.keys.map(e=>{let t=$(`li`,``,Lt[e]);return t.insertAdjacentHTML(`afterbegin`,`<svg width="16" height="16" viewBox="0 0 16 16" aria-hidden="true">${Rt[e]}</svg>`),t.dataset.k=e,t})),this.#p=n.mountWorld(r.stage,t,()=>{let e=this.#i[this.#a];this.#f===r&&e&&(r.drawn=``,this.#F(r,e))},e=>this.#I(r,this.#E()[e])),r.drawn=``,this.#P()}).catch(()=>{e===this.#m&&this.#f===r&&(this.#p?.stop(),this.#p=void 0,r.ready=!1,this.#P())})}else r.stage.dataset.stage=`diagram`,r.stage.append(Yt(t)),r.diagram=r.stage;let a=$(`div`,`ff-guide`,r.stage,$(`div`,`ff-chips`,...r.chips),$(`section`,`ff-hud`,r.ht,$(`div`,`ff-hd`,this.#S,r.kick),r.say,r.note,r.code,r.skip,r.list,$(`div`,`ff-ctl`,this.#b.back,this.#b.play,this.#b.next,r.more,i),r.key,$(`div`,`ff-ft`,r.tog)));a.querySelector(`.ff-chips`).addEventListener(`scroll`,e=>Kt(e.currentTarget)),a.addEventListener(`click`,e=>{e.composedPath()[0]!==this.#b.play&&this.pause()}),this.#f=r,this.#C.append(a)}o!==this.#c&&(this.pause(),this.#c=o,this.dispatchEvent(new CustomEvent(`flowfig-form`,{detail:{form:o},bubbles:!0,composed:!0}))),this.#P(),e&&this.#R()}catch(e){this.#M(`${this.#r}: ${e.message}`)}}#P(){let e=this.#i[this.#a];if(this.#w.textContent=e?this.#f?[e.say,e.note].filter(Boolean).join(` `):this.#d?e.step:``:``,!this.#_)for(let t of this.#y)t.setAttribute(`aria-pressed`,String(t.textContent===e?.step));this.#b.back&&(this.#b.back.disabled=this.#a===0,this.#b.next.disabled=this.#a>=this.#i.length-1,this.#b.play.textContent=this.#s?`Pause`:`Play`),this.#f&&e&&this.#F(this.#f,e),e&&e.step!==this.#l&&(this.#d||this.#_)&&(this.#l=e.step,this.#d?qt()?Jt(this.#d,Gt(this.#e,e.step)):Jt(this.#d,Wt(this.#e,e.step)[0],!0):this.#O(e.step))}#F(e,t){let n=this.#i.filter(e=>e.step===t.step),r=this.#i.indexOf(n[0]),i=this.#a-r,a=!!t.summary,o=n.slice(0,i+1).reverse().find(e=>e.stamp)?.stamp;e.kick.textContent=a?``:`Moment ${i+1} of ${n.length-1} · ${t.step}`,e.say.textContent=t.say,e.note.textContent=t.note,e.note.classList.toggle(`ff-bad`,o?.mark===`✗`&&(a||t.stamp===o)),e.code.hidden=a||!this.hasAttribute(`code`),e.code.textContent=t.code.length?t.code.join(`
|
|
67
|
+
`):`No source in the spec.`;for(let n of e.chips)n.setAttribute(`aria-pressed`,String(n.textContent===t.step));Kt(e.chips[0]?.parentElement);let s=t.summary?.notReached??[];e.skip.hidden=!s.length,e.skip.replaceChildren(...s.length?[$(`p`,`ff-lbl`,`Skipped, because of the refusal`),$(`ul`,``,...s.map(e=>$(`li`,``,e)))]:[]),e.step!==t.step&&(e.step=t.step,e.items=n.map((e,t)=>{let n=Xt(``,()=>this.moment=r+t);return n.className=``,n.append($(`span`,`ff-mk`),$(`span`,``,e.title)),e.stamp?.mark===`✗`&&(n.classList.add(`ff-fail`),n.setAttribute(`aria-label`,`${e.title}, failed`)),n}),e.list.replaceChildren(...e.items.map(e=>$(`li`,``,e)))),e.items.forEach((e,t)=>{let r=t<i?n[t].stamp?.mark:void 0;e.dataset.s=t===i?`now`:t>i?`next`:r===`✗`?`no`:`past`,e.querySelector(`.ff-mk`).textContent=r??String(t+1),t===i?e.setAttribute(`aria-current`,`true`):e.removeAttribute(`aria-current`)}),this.#I(e,t.step),this.#L(e,t,i)}#I(e,t){let n=e.say.parentElement,{width:r,height:i}=n.parentElement.getBoundingClientRect();if(r>=B.wide||i<B.short&&r>=B.slim*2)return n.style.height=``,B.sheet;let a=`${t}/${r}x${i}`,o=e.sheets.get(a);if(o===void 0){let r=[e.say.textContent,e.note.textContent],s=e.list.classList.contains(`ff-open`);e.list.classList.remove(`ff-open`),e.skip.classList.remove(`ff-open`),n.style.height=`auto`,o=B.sheet;for(let r of this.#i.filter(e=>e.step===t))e.say.textContent=r.say,e.note.textContent=r.note,o=Math.max(o,n.offsetHeight);[e.say.textContent,e.note.textContent]=r,e.list.classList.toggle(`ff-open`,s),e.skip.classList.toggle(`ff-open`,s),e.sheets.set(a,o=Math.max(B.sheet,Math.min(o,Math.round(i*.42))))}return n.style.height=`${o}px`,o}#L(e,t,n){let r=this.#p;if(e.ready&&!r)return;let i=`${r?`w`:`d`}/${this.#a}`;if(e.drawn===i)return;let a=!qt()&&e.lastStep===t.step&&e.last===this.#a-1;[e.drawn,e.last,e.lastStep]=[i,this.#a,t.step],clearTimeout(this.#g);let o=this.#E().indexOf(t.step);if(r?.fits(o)){e.diagram&&(e.diagram.hidden=!0),e.key.hidden=!1,this.#h=r.show(o,n,a,t.say);return}this.#h=0,e.key.hidden=!0,e.diagram||(e.diagram=$(`div`,`ff-stage`,Yt(this.#e)),e.diagram.dataset.stage=`diagram`,e.stage.after(e.diagram)),e.diagram.hidden=!1;let s=e.diagram.querySelector(`svg`),c=this.#e,l=(c.steps?.find(e=>u(e.label)===t.step)?.flow??[]).map(_);if(t.summary||n>=l.length)return Jt(s,Gt(c,t.step));let d=Wt(c,t.step)[0]+l.slice(0,n).reduce((e,t)=>e+O(t,c.speed??900),0),f=d+O(l[n],c.speed??900);if(qt())return Jt(s,f);Jt(s,d,!0),this.#g=setTimeout(()=>Jt(s,f),(f-d)/k)}#R(){let e=this.#i[this.#a];this.dispatchEvent(new CustomEvent(`flowfig-moment`,{detail:{step:e?.step??``,moment:this.#a,total:this.#i.length},bubbles:!0,composed:!0}))}};globalThis.customElements&&!customElements.get(`flowfig-explain`)&&customElements.define(`flowfig-explain`,$t);export{$t as FlowfigExplain};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { toBeat } from './model.ts';
|
|
2
|
+
import type { FigLook, FigNode, FigTone, FlowProps } from './model.ts';
|
|
3
|
+
export type Actor = {
|
|
4
|
+
name: string;
|
|
5
|
+
look?: FigLook;
|
|
6
|
+
boxes: string[];
|
|
7
|
+
};
|
|
8
|
+
export type Moment = {
|
|
9
|
+
actor: string;
|
|
10
|
+
say: string;
|
|
11
|
+
note: string;
|
|
12
|
+
stamp?: {
|
|
13
|
+
mark: '✓' | '✗';
|
|
14
|
+
label: string;
|
|
15
|
+
};
|
|
16
|
+
question?: string;
|
|
17
|
+
records: string[];
|
|
18
|
+
summary?: {
|
|
19
|
+
outcome: string;
|
|
20
|
+
notReached: string[];
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
type Hop = ReturnType<typeof hopsOf>[number]['hops'][number];
|
|
24
|
+
export declare const isCheck: (n?: FigNode) => boolean;
|
|
25
|
+
export declare const question: (n: FigNode) => string;
|
|
26
|
+
export declare const failed: (byId: Map<string, FigNode>, h: Hop) => boolean;
|
|
27
|
+
export declare const hopsOf: (fig: FlowProps, step: {
|
|
28
|
+
flow: Parameters<typeof toBeat>[0][];
|
|
29
|
+
}) => {
|
|
30
|
+
beat: import("./model.ts").Beat;
|
|
31
|
+
hops: {
|
|
32
|
+
back: boolean;
|
|
33
|
+
data?: import("react").ReactNode;
|
|
34
|
+
tone?: FigTone;
|
|
35
|
+
async?: boolean;
|
|
36
|
+
via?: string;
|
|
37
|
+
edge: import("./model.ts").FigEdge;
|
|
38
|
+
source: string;
|
|
39
|
+
target: string;
|
|
40
|
+
}[];
|
|
41
|
+
}[];
|
|
42
|
+
export declare function cast(fig: FlowProps): Actor[];
|
|
43
|
+
export declare function moments(fig: FlowProps, step: string): Moment[];
|
|
44
|
+
export declare const worldReady: (fig: FlowProps) => boolean;
|
|
45
|
+
export {};
|