chalk-talk 0.14.0 → 0.15.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 +1 -1
- package/assets/player.html +3 -3
- package/embed-mermaid.js +344 -344
- package/embed.js +5 -5
- package/kit/browser.mjs +21 -4
- package/kit/format.check.ts +1 -0
- package/kit/format.ts +4 -2
- package/kit/tools/gallery.mjs +6 -5
- package/markdown.js +1 -1
- package/mount.global.js +374 -374
- package/mount.js +1 -1
- package/package.json +1 -1
- package/player.js +4 -4
- package/scripts/browser.mjs +21 -4
- package/scripts/contract.mjs +26 -4
- package/scripts/mermaid.mjs +1 -1
- package/scripts/syntax.mjs +1 -0
package/assets/player.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
-
<meta name="generator" content="chalk-talk v0.
|
|
6
|
+
<meta name="generator" content="chalk-talk v0.255.0">
|
|
7
7
|
<title>chalk-talk</title>
|
|
8
8
|
<style id="chalk-fonts">@font-face{font-family:'Caveat';font-style:normal;font-weight:700;font-display:block;src:url(data:font/woff2;base64,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) format('woff2')}
|
|
9
9
|
@font-face{font-family:'Shantell Sans';font-style:normal;font-weight:400;font-display:block;src:url(data:font/woff2;base64,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) format('woff2')}
|
|
@@ -136,7 +136,7 @@ body.still #stage { padding: 0; max-width: none; }
|
|
|
136
136
|
<div id="lesson"></div>
|
|
137
137
|
</main>
|
|
138
138
|
<script type="application/json" id="chalk-recipe">{{RECIPE}}</script>
|
|
139
|
-
<script>"use strict";(()=>{var Ar=Object.create;var ke=Object.defineProperty;var Or=Object.getOwnPropertyDescriptor;var Pr=Object.getOwnPropertyNames;var Lr=Object.getPrototypeOf,Cr=Object.prototype.hasOwnProperty;var Tr=(e,t,n)=>t in e?ke(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var zr=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Br=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Pr(t))!Cr.call(e,o)&&o!==n&&ke(e,o,{get:()=>t[o],enumerable:!(r=Or(t,o))||r.enumerable});return e};var Rr=(e,t,n)=>(n=e!=null?Ar(Lr(e)):{},Br(t||!e||!e.__esModule?ke(n,"default",{value:e,enumerable:!0}):n,e));var Y=(e,t,n)=>Tr(e,typeof t!="symbol"?t+"":t,n);var kr=zr(ln=>{var dr=Object.defineProperty,So=e=>dr(e,"__esModule",{value:!0}),Mo=(e,t)=>{for(var n in t)dr(e,n,{get:t[n],enumerable:!0})};So(ln);Mo(ln,{GIFEncoder:()=>wr,applyPalette:()=>Bo,default:()=>Xo,nearestColor:()=>Io,nearestColorIndex:()=>br,nearestColorIndexWithDistance:()=>yr,prequantize:()=>zo,quantize:()=>Co,snapColorsToPalette:()=>No});var Eo={signature:"GIF",version:"89a",trailer:59,extensionIntroducer:33,applicationExtensionLabel:255,graphicControlExtensionLabel:249,imageSeparator:44,signatureSize:3,versionSize:3,globalColorTableFlagMask:128,colorResolutionMask:112,sortFlagMask:8,globalColorTableSizeMask:7,applicationIdentifierSize:8,applicationAuthCodeSize:3,disposalMethodMask:28,userInputFlagMask:2,transparentColorFlagMask:1,localColorTableFlagMask:128,interlaceFlagMask:64,idSortFlagMask:32,localColorTableSizeMask:7};function pr(e=256){let t=0,n=new Uint8Array(e);return{get buffer(){return n.buffer},reset(){t=0},bytesView(){return n.subarray(0,t)},bytes(){return n.slice(0,t)},writeByte(o){r(t+1),n[t]=o,t++},writeBytes(o,s=0,a=o.length){r(t+a);for(let i=0;i<a;i++)n[t++]=o[i+s]},writeBytesView(o,s=0,a=o.byteLength){r(t+a),n.set(o.subarray(s,s+a),t),t+=a}};function r(o){var s=n.length;if(s>=o)return;var a=1024*1024;o=Math.max(o,s*(s<a?2:1.125)>>>0),s!=0&&(o=Math.max(o,256));let i=n;n=new Uint8Array(o),t>0&&n.set(i.subarray(0,t),0)}}var sn=12,lr=5003,Ao=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535];function Oo(e,t,n,r,o=pr(512),s=new Uint8Array(256),a=new Int32Array(lr),i=new Int32Array(lr)){let l=a.length,c=Math.max(2,r);s.fill(0),i.fill(0),a.fill(-1);let h=0,u=0,d=c+1,p=d,f=!1,m=p,g=(1<<m)-1,b=1<<d-1,y=b+1,x=b+2,k=0,$=n[0],E=0;for(let C=l;C<65536;C*=2)++E;E=8-E,o.writeByte(c),z(b);let v=n.length;for(let C=1;C<v;C++)t:{let L=n[C],j=(L<<sn)+$,N=L<<E^$;if(a[N]===j){$=i[N];break t}let U=N===0?1:l-N;for(;a[N]>=0;)if(N-=U,N<0&&(N+=l),a[N]===j){$=i[N];break t}z($),$=L,x<1<<sn?(i[N]=x++,a[N]=j):(a.fill(-1),x=b+2,f=!0,z(b))}return z($),z(y),o.writeByte(0),o.bytesView();function z(C){for(h&=Ao[u],u>0?h|=C<<u:h=C,u+=m;u>=8;)s[k++]=h&255,k>=254&&(o.writeByte(k),o.writeBytesView(s,0,k),k=0),h>>=8,u-=8;if((x>g||f)&&(f?(m=p,g=(1<<m)-1,f=!1):(++m,g=m===sn?1<<m:(1<<m)-1)),C==y){for(;u>0;)s[k++]=h&255,k>=254&&(o.writeByte(k),o.writeBytesView(s,0,k),k=0),h>>=8,u-=8;k>0&&(o.writeByte(k),o.writeBytesView(s,0,k),k=0)}}}var Po=Oo;function fr(e,t,n){return e<<8&63488|t<<2&992|n>>3}function gr(e,t,n,r){return e>>4|t&240|(n&240)<<4|(r&240)<<8}function mr(e,t,n){return e>>4<<8|t&240|n>>4}function be(e,t,n){return e<t?t:e>n?n:e}function Zt(e){return e*e}function hr(e,t,n){var r=0,o=1e100;let s=e[t],a=s.cnt,i=s.ac,l=s.rc,c=s.gc,h=s.bc;for(var u=s.fw;u!=0;u=e[u].fw){let p=e[u],f=p.cnt,m=a*f/(a+f);if(!(m>=o)){var d=0;n&&(d+=m*Zt(p.ac-i),d>=o)||(d+=m*Zt(p.rc-l),!(d>=o)&&(d+=m*Zt(p.gc-c),!(d>=o)&&(d+=m*Zt(p.bc-h),!(d>=o)&&(o=d,r=u))))}}s.err=o,s.nn=r}function an(){return{ac:0,rc:0,gc:0,bc:0,cnt:0,nn:0,fw:0,bk:0,tm:0,mtm:0,err:0}}function Lo(e,t){let n=t==="rgb444"?4096:65536,r=new Array(n),o=e.length;if(t==="rgba4444")for(let s=0;s<o;++s){let a=e[s],i=a>>24&255,l=a>>16&255,c=a>>8&255,h=a&255,u=gr(h,c,l,i),d=u in r?r[u]:r[u]=an();d.rc+=h,d.gc+=c,d.bc+=l,d.ac+=i,d.cnt++}else if(t==="rgb444")for(let s=0;s<o;++s){let a=e[s],i=a>>16&255,l=a>>8&255,c=a&255,h=mr(c,l,i),u=h in r?r[h]:r[h]=an();u.rc+=c,u.gc+=l,u.bc+=i,u.cnt++}else for(let s=0;s<o;++s){let a=e[s],i=a>>16&255,l=a>>8&255,c=a&255,h=fr(c,l,i),u=h in r?r[h]:r[h]=an();u.rc+=c,u.gc+=l,u.bc+=i,u.cnt++}return r}function Co(e,t,n={}){let{format:r="rgb565",clearAlpha:o=!0,clearAlphaColor:s=0,clearAlphaThreshold:a=0,oneBitAlpha:i=!1}=n;if(!e||!e.buffer)throw new Error("quantize() expected RGBA Uint8Array data");if(!(e instanceof Uint8Array)&&!(e instanceof Uint8ClampedArray))throw new Error("quantize() expected RGBA Uint8Array data");let l=new Uint32Array(e.buffer),c=n.useSqrt!==!1,h=r==="rgba4444",u=Lo(l,r),d=u.length,p=d-1,f=new Uint32Array(d+1);for(var m=0,b=0;b<d;++b){let X=u[b];if(X!=null){var g=1/X.cnt;h&&(X.ac*=g),X.rc*=g,X.gc*=g,X.bc*=g,u[m++]=X}}Zt(t)/m<.022&&(c=!1);for(var b=0;b<m-1;++b)u[b].fw=b+1,u[b+1].bk=b,c&&(u[b].cnt=Math.sqrt(u[b].cnt));c&&(u[b].cnt=Math.sqrt(u[b].cnt));var y,x,k;for(b=0;b<m;++b){hr(u,b,!1);var $=u[b].err;for(x=++f[0];x>1&&(k=x>>1,!(u[y=f[k]].err<=$));x=k)f[x]=y;f[x]=b}var E=m-t;for(b=0;b<E;){for(var v;;){var z=f[1];if(v=u[z],v.tm>=v.mtm&&u[v.nn].mtm<=v.tm)break;v.mtm==p?z=f[1]=f[f[0]--]:(hr(u,z,!1),v.tm=b);var $=u[z].err;for(x=1;(k=x+x)<=f[0]&&(k<f[0]&&u[f[k]].err>u[f[k+1]].err&&k++,!($<=u[y=f[k]].err));x=k)f[x]=y;f[x]=z}var C=u[v.nn],L=v.cnt,j=C.cnt,g=1/(L+j);h&&(v.ac=g*(L*v.ac+j*C.ac)),v.rc=g*(L*v.rc+j*C.rc),v.gc=g*(L*v.gc+j*C.gc),v.bc=g*(L*v.bc+j*C.bc),v.cnt+=C.cnt,v.mtm=++b,u[C.bk].fw=C.fw,u[C.fw].bk=C.bk,C.mtm=p}let N=[];var U=0;for(b=0;;++U){let G=be(Math.round(u[b].rc),0,255),X=be(Math.round(u[b].gc),0,255),S=be(Math.round(u[b].bc),0,255),A=255;h&&(A=be(Math.round(u[b].ac),0,255),i&&(A=A<=(typeof i=="number"?i:127)?0:255),o&&A<=a&&(G=X=S=s,A=0));let B=h?[G,X,S,A]:[G,X,S];if(To(N,B)||N.push(B),(b=u[b].fw)==0)break}return N}function To(e,t){for(let n=0;n<e.length;n++){let r=e[n],o=r[0]===t[0]&&r[1]===t[1]&&r[2]===t[2],s=r.length>=4&&t.length>=4?r[3]===t[3]:!0;if(o&&s)return!0}return!1}function we(e,t){var n=0,r;for(r=0;r<e.length;r++){let o=e[r]-t[r];n+=o*o}return n}function ye(e,t){return t>1?Math.round(e/t)*t:e}function zo(e,{roundRGB:t=5,roundAlpha:n=10,oneBitAlpha:r=null}={}){let o=new Uint32Array(e.buffer);for(let s=0;s<o.length;s++){let a=o[s],i=a>>24&255,l=a>>16&255,c=a>>8&255,h=a&255;i=ye(i,n),r&&(i=i<=(typeof r=="number"?r:127)?0:255),h=ye(h,t),c=ye(c,t),l=ye(l,t),o[s]=i<<24|l<<16|c<<8|h<<0}}function Bo(e,t,n="rgb565"){if(!e||!e.buffer)throw new Error("quantize() expected RGBA Uint8Array data");if(!(e instanceof Uint8Array)&&!(e instanceof Uint8ClampedArray))throw new Error("quantize() expected RGBA Uint8Array data");if(t.length>256)throw new Error("applyPalette() only works with 256 colors or less");let r=new Uint32Array(e.buffer),o=r.length,s=n==="rgb444"?4096:65536,a=new Uint8Array(o),i=new Array(s),l=n==="rgba4444";if(n==="rgba4444")for(let c=0;c<o;c++){let h=r[c],u=h>>24&255,d=h>>16&255,p=h>>8&255,f=h&255,m=gr(f,p,d,u),g=m in i?i[m]:i[m]=Ro(f,p,d,u,t);a[c]=g}else{let c=n==="rgb444"?mr:fr;for(let h=0;h<o;h++){let u=r[h],d=u>>16&255,p=u>>8&255,f=u&255,m=c(f,p,d),g=m in i?i[m]:i[m]=jo(f,p,d,t);a[h]=g}}return a}function Ro(e,t,n,r,o){let s=0,a=1e100;for(let i=0;i<o.length;i++){let l=o[i],c=l[3],h=At(c-r);if(h>a)continue;let u=l[0];if(h+=At(u-e),h>a)continue;let d=l[1];if(h+=At(d-t),h>a)continue;let p=l[2];h+=At(p-n),!(h>a)&&(a=h,s=i)}return s}function jo(e,t,n,r){let o=0,s=1e100;for(let a=0;a<r.length;a++){let i=r[a],l=i[0],c=At(l-e);if(c>s)continue;let h=i[1];if(c+=At(h-t),c>s)continue;let u=i[2];c+=At(u-n),!(c>s)&&(s=c,o=a)}return o}function No(e,t,n=5){if(!e.length||!t.length)return;let r=e.map(a=>a.slice(0,3)),o=n*n,s=e[0].length;for(let a=0;a<t.length;a++){let i=t[a];i.length<s?i=[i[0],i[1],i[2],255]:i.length>s?i=i.slice(0,3):i=i.slice();let l=yr(r,i.slice(0,3),we),c=l[0],h=l[1];h>0&&h<=o&&(e[c]=i)}}function At(e){return e*e}function br(e,t,n=we){let r=1/0,o=-1;for(let s=0;s<e.length;s++){let a=e[s],i=n(t,a);i<r&&(r=i,o=s)}return o}function yr(e,t,n=we){let r=1/0,o=-1;for(let s=0;s<e.length;s++){let a=e[s],i=n(t,a);i<r&&(r=i,o=s)}return[o,r]}function Io(e,t,n=we){return e[br(e,t,n)]}function wr(e={}){let{initialCapacity:t=4096,auto:n=!0}=e,r=pr(t),o=5003,s=new Uint8Array(256),a=new Int32Array(o),i=new Int32Array(o),l=!1;return{reset(){r.reset(),l=!1},finish(){r.writeByte(Eo.trailer)},bytes(){return r.bytes()},bytesView(){return r.bytesView()},get buffer(){return r.buffer},get stream(){return r},writeHeader:c,writeFrame(h,u,d,p={}){let{transparent:f=!1,transparentIndex:m=0,delay:g=0,palette:b=null,repeat:y=0,colorDepth:x=8,dispose:k=-1}=p,$=!1;if(n?l||($=!0,c(),l=!0):$=!!p.first,u=Math.max(0,Math.floor(u)),d=Math.max(0,Math.floor(d)),$){if(!b)throw new Error("First frame must include a { palette } option");_o(r,u,d,b,x),ur(r,b),y>=0&&Do(r,y)}let E=Math.round(g/10);Fo(r,k,E,f,m);let v=!!b&&!$;qo(r,u,d,v?b:null),v&&ur(r,b),Go(r,h,u,d,x,s,a,i)}};function c(){xr(r,"GIF89a")}}function Fo(e,t,n,r,o){e.writeByte(33),e.writeByte(249),e.writeByte(4),o<0&&(o=0,r=!1);var s,a;r?(s=1,a=2):(s=0,a=0),t>=0&&(a=t&7),a<<=2,e.writeByte(0|a|0|s),wt(e,n),e.writeByte(o||0),e.writeByte(0)}function _o(e,t,n,r,o=8){let i=cn(r.length)-1,l=128|o-1<<4|0|i,c=0,h=0;wt(e,t),wt(e,n),e.writeBytes([l,c,h])}function Do(e,t){e.writeByte(33),e.writeByte(255),e.writeByte(11),xr(e,"NETSCAPE2.0"),e.writeByte(3),e.writeByte(1),wt(e,t),e.writeByte(0)}function ur(e,t){let n=1<<cn(t.length);for(let r=0;r<n;r++){let o=[0,0,0];r<t.length&&(o=t[r]),e.writeByte(o[0]),e.writeByte(o[1]),e.writeByte(o[2])}}function qo(e,t,n,r){if(e.writeByte(44),wt(e,0),wt(e,0),wt(e,t),wt(e,n),r){let a=cn(r.length)-1;e.writeByte(128|a)}else e.writeByte(0)}function Go(e,t,n,r,o=8,s,a,i){Po(n,r,t,o,e,s,a,i)}function wt(e,t){e.writeByte(t&255),e.writeByte(t>>8&255)}function xr(e,t){for(var n=0;n<t.length;n++)e.writeByte(t.charCodeAt(n))}function cn(e){return Math.max(Math.ceil(Math.log2(e)),1)}var Xo=wr});function ve(e,t,n){if(e&&e.length){let[r,o]=t,s=Math.PI/180*n,a=Math.cos(s),i=Math.sin(s);for(let l of e){let[c,h]=l;l[0]=(c-r)*a-(h-o)*i+r,l[1]=(c-r)*i+(h-o)*a+o}}}function jr(e,t){return e[0]===t[0]&&e[1]===t[1]}function Nr(e,t,n,r=1){let o=n,s=Math.max(t,.1),a=e[0]&&e[0][0]&&typeof e[0][0]=="number"?[e]:e,i=[0,0];if(o)for(let c of a)ve(c,i,o);let l=function(c,h,u){let d=[];for(let y of c){let x=[...y];jr(x[0],x[x.length-1])||x.push([x[0][0],x[0][1]]),x.length>2&&d.push(x)}let p=[];h=Math.max(h,.1);let f=[];for(let y of d)for(let x=0;x<y.length-1;x++){let k=y[x],$=y[x+1];if(k[1]!==$[1]){let E=Math.min(k[1],$[1]);f.push({ymin:E,ymax:Math.max(k[1],$[1]),x:E===k[1]?k[0]:$[0],islope:($[0]-k[0])/($[1]-k[1])})}}if(f.sort((y,x)=>y.ymin<x.ymin?-1:y.ymin>x.ymin?1:y.x<x.x?-1:y.x>x.x?1:y.ymax===x.ymax?0:(y.ymax-x.ymax)/Math.abs(y.ymax-x.ymax)),!f.length)return p;let m=[],g=f[0].ymin,b=0;for(;m.length||f.length;){if(f.length){let y=-1;for(let x=0;x<f.length&&!(f[x].ymin>g);x++)y=x;f.splice(0,y+1).forEach(x=>{m.push({s:g,edge:x})})}if(m=m.filter(y=>!(y.edge.ymax<=g)),m.sort((y,x)=>y.edge.x===x.edge.x?0:(y.edge.x-x.edge.x)/Math.abs(y.edge.x-x.edge.x)),(u!==1||b%h==0)&&m.length>1)for(let y=0;y<m.length;y+=2){let x=y+1;if(x>=m.length)break;let k=m[y].edge,$=m[x].edge;p.push([[Math.round(k.x),g],[Math.round($.x),g]])}g+=u,m.forEach(y=>{y.edge.x=y.edge.x+u*y.edge.islope}),b++}return p}(a,s,r);if(o){for(let c of a)ve(c,i,-o);(function(c,h,u){let d=[];c.forEach(p=>d.push(...p)),ve(d,h,u)})(l,i,-o)}return l}function Xt(e,t){var n;let r=t.hachureAngle+90,o=t.hachureGap;o<0&&(o=4*t.strokeWidth),o=Math.round(Math.max(o,.1));let s=1;return t.roughness>=1&&(((n=t.randomizer)===null||n===void 0?void 0:n.next())||Math.random())>.7&&(s=o),Nr(e,o,r,s||1)}var Gt=class{constructor(t){this.helper=t}fillPolygons(t,n){return this._fillPolygons(t,n)}_fillPolygons(t,n){let r=Xt(t,n);return{type:"fillSketch",ops:this.renderLines(r,n)}}renderLines(t,n){let r=[];for(let o of t)r.push(...this.helper.doubleLineOps(o[0][0],o[0][1],o[1][0],o[1][1],n));return r}};function ie(e){let t=e[0],n=e[1];return Math.sqrt(Math.pow(t[0]-n[0],2)+Math.pow(t[1]-n[1],2))}var Ae=class extends Gt{fillPolygons(t,n){let r=n.hachureGap;r<0&&(r=4*n.strokeWidth),r=Math.max(r,.1);let o=Xt(t,Object.assign({},n,{hachureGap:r})),s=Math.PI/180*n.hachureAngle,a=[],i=.5*r*Math.cos(s),l=.5*r*Math.sin(s);for(let[c,h]of o)ie([c,h])&&a.push([[c[0]-i,c[1]+l],[...h]],[[c[0]+i,c[1]-l],[...h]]);return{type:"fillSketch",ops:this.renderLines(a,n)}}},Oe=class extends Gt{fillPolygons(t,n){let r=this._fillPolygons(t,n),o=Object.assign({},n,{hachureAngle:n.hachureAngle+90}),s=this._fillPolygons(t,o);return r.ops=r.ops.concat(s.ops),r}},Pe=class{constructor(t){this.helper=t}fillPolygons(t,n){let r=Xt(t,n=Object.assign({},n,{hachureAngle:0}));return this.dotsOnLines(r,n)}dotsOnLines(t,n){let r=[],o=n.hachureGap;o<0&&(o=4*n.strokeWidth),o=Math.max(o,.1);let s=n.fillWeight;s<0&&(s=n.strokeWidth/2);let a=o/4;for(let i of t){let l=ie(i),c=l/o,h=Math.ceil(c)-1,u=l-h*o,d=(i[0][0]+i[1][0])/2-o/4,p=Math.min(i[0][1],i[1][1]);for(let f=0;f<h;f++){let m=p+u+f*o,g=d-a+2*Math.random()*a,b=m-a+2*Math.random()*a,y=this.helper.ellipse(g,b,s,s,n);r.push(...y.ops)}}return{type:"fillSketch",ops:r}}},Le=class{constructor(t){this.helper=t}fillPolygons(t,n){let r=Xt(t,n);return{type:"fillSketch",ops:this.dashedLine(r,n)}}dashedLine(t,n){let r=n.dashOffset<0?n.hachureGap<0?4*n.strokeWidth:n.hachureGap:n.dashOffset,o=n.dashGap<0?n.hachureGap<0?4*n.strokeWidth:n.hachureGap:n.dashGap,s=[];return t.forEach(a=>{let i=ie(a),l=Math.floor(i/(r+o)),c=(i+o-l*(r+o))/2,h=a[0],u=a[1];h[0]>u[0]&&(h=a[1],u=a[0]);let d=Math.atan((u[1]-h[1])/(u[0]-h[0]));for(let p=0;p<l;p++){let f=p*(r+o),m=f+r,g=[h[0]+f*Math.cos(d)+c*Math.cos(d),h[1]+f*Math.sin(d)+c*Math.sin(d)],b=[h[0]+m*Math.cos(d)+c*Math.cos(d),h[1]+m*Math.sin(d)+c*Math.sin(d)];s.push(...this.helper.doubleLineOps(g[0],g[1],b[0],b[1],n))}}),s}},Ce=class{constructor(t){this.helper=t}fillPolygons(t,n){let r=n.hachureGap<0?4*n.strokeWidth:n.hachureGap,o=n.zigzagOffset<0?r:n.zigzagOffset,s=Xt(t,n=Object.assign({},n,{hachureGap:r+o}));return{type:"fillSketch",ops:this.zigzagLines(s,o,n)}}zigzagLines(t,n,r){let o=[];return t.forEach(s=>{let a=ie(s),i=Math.round(a/(2*n)),l=s[0],c=s[1];l[0]>c[0]&&(l=s[1],c=s[0]);let h=Math.atan((c[1]-l[1])/(c[0]-l[0]));for(let u=0;u<i;u++){let d=2*u*n,p=2*(u+1)*n,f=Math.sqrt(2*Math.pow(n,2)),m=[l[0]+d*Math.cos(h),l[1]+d*Math.sin(h)],g=[l[0]+p*Math.cos(h),l[1]+p*Math.sin(h)],b=[m[0]+f*Math.cos(h+Math.PI/4),m[1]+f*Math.sin(h+Math.PI/4)];o.push(...this.helper.doubleLineOps(m[0],m[1],b[0],b[1],r),...this.helper.doubleLineOps(b[0],b[1],g[0],g[1],r))}}),o}},nt={},Te=class{constructor(t){this.seed=t}next(){return this.seed?(2**31-1&(this.seed=Math.imul(48271,this.seed)))/2**31:Math.random()}},Ir=0,$e=1,gn=2,Qt={A:7,a:7,C:6,c:6,H:1,h:1,L:2,l:2,M:2,m:2,Q:4,q:4,S:4,s:4,T:2,t:2,V:1,v:1,Z:0,z:0};function Se(e,t){return e.type===t}function Ie(e){let t=[],n=function(a){let i=new Array;for(;a!=="";)if(a.match(/^([ \t\r\n,]+)/))a=a.substr(RegExp.$1.length);else if(a.match(/^([aAcChHlLmMqQsStTvVzZ])/))i[i.length]={type:Ir,text:RegExp.$1},a=a.substr(RegExp.$1.length);else{if(!a.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))return[];i[i.length]={type:$e,text:`${parseFloat(RegExp.$1)}`},a=a.substr(RegExp.$1.length)}return i[i.length]={type:gn,text:""},i}(e),r="BOD",o=0,s=n[o];for(;!Se(s,gn);){let a=0,i=[];if(r==="BOD"){if(s.text!=="M"&&s.text!=="m")return Ie("M0,0"+e);o++,a=Qt[s.text],r=s.text}else Se(s,$e)?a=Qt[r]:(o++,a=Qt[s.text],r=s.text);if(!(o+a<n.length))throw new Error("Path data ended short");for(let l=o;l<o+a;l++){let c=n[l];if(!Se(c,$e))throw new Error("Param not a number: "+r+","+c.text);i[i.length]=+c.text}if(typeof Qt[r]!="number")throw new Error("Bad segment: "+r);{let l={key:r,data:i};t.push(l),o+=a,s=n[o],r==="M"&&(r="L"),r==="m"&&(r="l")}}return t}function $n(e){let t=0,n=0,r=0,o=0,s=[];for(let{key:a,data:i}of e)switch(a){case"M":s.push({key:"M",data:[...i]}),[t,n]=i,[r,o]=i;break;case"m":t+=i[0],n+=i[1],s.push({key:"M",data:[t,n]}),r=t,o=n;break;case"L":s.push({key:"L",data:[...i]}),[t,n]=i;break;case"l":t+=i[0],n+=i[1],s.push({key:"L",data:[t,n]});break;case"C":s.push({key:"C",data:[...i]}),t=i[4],n=i[5];break;case"c":{let l=i.map((c,h)=>h%2?c+n:c+t);s.push({key:"C",data:l}),t=l[4],n=l[5];break}case"Q":s.push({key:"Q",data:[...i]}),t=i[2],n=i[3];break;case"q":{let l=i.map((c,h)=>h%2?c+n:c+t);s.push({key:"Q",data:l}),t=l[2],n=l[3];break}case"A":s.push({key:"A",data:[...i]}),t=i[5],n=i[6];break;case"a":t+=i[5],n+=i[6],s.push({key:"A",data:[i[0],i[1],i[2],i[3],i[4],t,n]});break;case"H":s.push({key:"H",data:[...i]}),t=i[0];break;case"h":t+=i[0],s.push({key:"H",data:[t]});break;case"V":s.push({key:"V",data:[...i]}),n=i[0];break;case"v":n+=i[0],s.push({key:"V",data:[n]});break;case"S":s.push({key:"S",data:[...i]}),t=i[2],n=i[3];break;case"s":{let l=i.map((c,h)=>h%2?c+n:c+t);s.push({key:"S",data:l}),t=l[2],n=l[3];break}case"T":s.push({key:"T",data:[...i]}),t=i[0],n=i[1];break;case"t":t+=i[0],n+=i[1],s.push({key:"T",data:[t,n]});break;case"Z":case"z":s.push({key:"Z",data:[]}),t=r,n=o}return s}function Sn(e){let t=[],n="",r=0,o=0,s=0,a=0,i=0,l=0;for(let{key:c,data:h}of e){switch(c){case"M":t.push({key:"M",data:[...h]}),[r,o]=h,[s,a]=h;break;case"C":t.push({key:"C",data:[...h]}),r=h[4],o=h[5],i=h[2],l=h[3];break;case"L":t.push({key:"L",data:[...h]}),[r,o]=h;break;case"H":r=h[0],t.push({key:"L",data:[r,o]});break;case"V":o=h[0],t.push({key:"L",data:[r,o]});break;case"S":{let u=0,d=0;n==="C"||n==="S"?(u=r+(r-i),d=o+(o-l)):(u=r,d=o),t.push({key:"C",data:[u,d,...h]}),i=h[0],l=h[1],r=h[2],o=h[3];break}case"T":{let[u,d]=h,p=0,f=0;n==="Q"||n==="T"?(p=r+(r-i),f=o+(o-l)):(p=r,f=o);let m=r+2*(p-r)/3,g=o+2*(f-o)/3,b=u+2*(p-u)/3,y=d+2*(f-d)/3;t.push({key:"C",data:[m,g,b,y,u,d]}),i=p,l=f,r=u,o=d;break}case"Q":{let[u,d,p,f]=h,m=r+2*(u-r)/3,g=o+2*(d-o)/3,b=p+2*(u-p)/3,y=f+2*(d-f)/3;t.push({key:"C",data:[m,g,b,y,p,f]}),i=u,l=d,r=p,o=f;break}case"A":{let u=Math.abs(h[0]),d=Math.abs(h[1]),p=h[2],f=h[3],m=h[4],g=h[5],b=h[6];u===0||d===0?(t.push({key:"C",data:[r,o,g,b,g,b]}),r=g,o=b):(r!==g||o!==b)&&(Mn(r,o,g,b,u,d,p,f,m).forEach(function(y){t.push({key:"C",data:y})}),r=g,o=b);break}case"Z":t.push({key:"Z",data:[]}),r=s,o=a}n=c}return t}function Dt(e,t,n){return[e*Math.cos(n)-t*Math.sin(n),e*Math.sin(n)+t*Math.cos(n)]}function Mn(e,t,n,r,o,s,a,i,l,c){let h=(u=a,Math.PI*u/180);var u;let d=[],p=0,f=0,m=0,g=0;if(c)[p,f,m,g]=c;else{[e,t]=Dt(e,t,-h),[n,r]=Dt(n,r,-h);let U=(e-n)/2,G=(t-r)/2,X=U*U/(o*o)+G*G/(s*s);X>1&&(X=Math.sqrt(X),o*=X,s*=X);let S=o*o,A=s*s,B=S*A-S*G*G-A*U*U,I=S*G*G+A*U*U,W=(i===l?-1:1)*Math.sqrt(Math.abs(B/I));m=W*o*G/s+(e+n)/2,g=W*-s*U/o+(t+r)/2,p=Math.asin(parseFloat(((t-g)/s).toFixed(9))),f=Math.asin(parseFloat(((r-g)/s).toFixed(9))),e<m&&(p=Math.PI-p),n<m&&(f=Math.PI-f),p<0&&(p=2*Math.PI+p),f<0&&(f=2*Math.PI+f),l&&p>f&&(p-=2*Math.PI),!l&&f>p&&(f-=2*Math.PI)}let b=f-p;if(Math.abs(b)>120*Math.PI/180){let U=f,G=n,X=r;f=l&&f>p?p+120*Math.PI/180*1:p+120*Math.PI/180*-1,d=Mn(n=m+o*Math.cos(f),r=g+s*Math.sin(f),G,X,o,s,a,0,l,[f,U,m,g])}b=f-p;let y=Math.cos(p),x=Math.sin(p),k=Math.cos(f),$=Math.sin(f),E=Math.tan(b/4),v=4/3*o*E,z=4/3*s*E,C=[e,t],L=[e+v*x,t-z*y],j=[n+v*$,r-z*k],N=[n,r];if(L[0]=2*C[0]-L[0],L[1]=2*C[1]-L[1],c)return[L,j,N].concat(d);{d=[L,j,N].concat(d);let U=[];for(let G=0;G<d.length;G+=3){let X=Dt(d[G][0],d[G][1],h),S=Dt(d[G+1][0],d[G+1][1],h),A=Dt(d[G+2][0],d[G+2][1],h);U.push([X[0],X[1],S[0],S[1],A[0],A[1]])}return U}}var Fr={randOffset:function(e,t){return O(e,t)},randOffsetWithRange:function(e,t,n){return re(e,t,n)},ellipse:function(e,t,n,r,o){let s=An(n,r,o);return ze(e,t,o,s).opset},doubleLineOps:function(e,t,n,r,o){return mt(e,t,n,r,o,!0)}};function En(e,t,n,r,o){return{type:"path",ops:mt(e,t,n,r,o)}}function ee(e,t,n){let r=(e||[]).length;if(r>2){let o=[];for(let s=0;s<r-1;s++)o.push(...mt(e[s][0],e[s][1],e[s+1][0],e[s+1][1],n));return t&&o.push(...mt(e[r-1][0],e[r-1][1],e[0][0],e[0][1],n)),{type:"path",ops:o}}return r===2?En(e[0][0],e[0][1],e[1][0],e[1][1],n):{type:"path",ops:[]}}function _r(e,t,n,r,o){return function(s,a){return ee(s,!0,a)}([[e,t],[e+n,t],[e+n,t+r],[e,t+r]],o)}function mn(e,t){if(e.length){let n=typeof e[0][0]=="number"?[e]:e,r=Jt(n[0],1*(1+.2*t.roughness),t),o=t.disableMultiStroke?[]:Jt(n[0],1.5*(1+.22*t.roughness),wn(t));for(let s=1;s<n.length;s++){let a=n[s];if(a.length){let i=Jt(a,1*(1+.2*t.roughness),t),l=t.disableMultiStroke?[]:Jt(a,1.5*(1+.22*t.roughness),wn(t));for(let c of i)c.op!=="move"&&r.push(c);for(let c of l)c.op!=="move"&&o.push(c)}}return{type:"path",ops:r.concat(o)}}return{type:"path",ops:[]}}function An(e,t,n){let r=Math.sqrt(2*Math.PI*Math.sqrt((Math.pow(e/2,2)+Math.pow(t/2,2))/2)),o=Math.ceil(Math.max(n.curveStepCount,n.curveStepCount/Math.sqrt(200)*r)),s=2*Math.PI/o,a=Math.abs(e/2),i=Math.abs(t/2),l=1-n.curveFitting;return a+=O(a*l,n),i+=O(i*l,n),{increment:s,rx:a,ry:i}}function ze(e,t,n,r){let[o,s]=xn(r.increment,e,t,r.rx,r.ry,1,r.increment*re(.1,re(.4,1,n),n),n),a=oe(o,null,n);if(!n.disableMultiStroke&&n.roughness!==0){let[i]=xn(r.increment,e,t,r.rx,r.ry,1.5,0,n),l=oe(i,null,n);a=a.concat(l)}return{estimatedPoints:s,opset:{type:"path",ops:a}}}function bn(e,t,n,r,o,s,a,i,l){let c=e,h=t,u=Math.abs(n/2),d=Math.abs(r/2);u+=O(.01*u,l),d+=O(.01*d,l);let p=o,f=s;for(;p<0;)p+=2*Math.PI,f+=2*Math.PI;f-p>2*Math.PI&&(p=0,f=2*Math.PI);let m=2*Math.PI/l.curveStepCount,g=Math.min(m/2,(f-p)/2),b=kn(g,c,h,u,d,p,f,1,l);if(!l.disableMultiStroke){let y=kn(g,c,h,u,d,p,f,1.5,l);b.push(...y)}return a&&(i?b.push(...mt(c,h,c+u*Math.cos(p),h+d*Math.sin(p),l),...mt(c,h,c+u*Math.cos(f),h+d*Math.sin(f),l)):b.push({op:"lineTo",data:[c,h]},{op:"lineTo",data:[c+u*Math.cos(p),h+d*Math.sin(p)]})),{type:"path",ops:b}}function yn(e,t){let n=Sn($n(Ie(e))),r=[],o=[0,0],s=[0,0];for(let{key:a,data:i}of n)switch(a){case"M":s=[i[0],i[1]],o=[i[0],i[1]];break;case"L":r.push(...mt(s[0],s[1],i[0],i[1],t)),s=[i[0],i[1]];break;case"C":{let[l,c,h,u,d,p]=i;r.push(...Dr(l,c,h,u,d,p,s,t)),s=[d,p];break}case"Z":r.push(...mt(s[0],s[1],o[0],o[1],t)),s=[o[0],o[1]]}return{type:"path",ops:r}}function Me(e,t){let n=[];for(let r of e)if(r.length){let o=t.maxRandomnessOffset||0,s=r.length;if(s>2){n.push({op:"move",data:[r[0][0]+O(o,t),r[0][1]+O(o,t)]});for(let a=1;a<s;a++)n.push({op:"lineTo",data:[r[a][0]+O(o,t),r[a][1]+O(o,t)]})}}return{type:"fillPath",ops:n}}function Lt(e,t){return function(n,r){let o=n.fillStyle||"hachure";if(!nt[o])switch(o){case"zigzag":nt[o]||(nt[o]=new Ae(r));break;case"cross-hatch":nt[o]||(nt[o]=new Oe(r));break;case"dots":nt[o]||(nt[o]=new Pe(r));break;case"dashed":nt[o]||(nt[o]=new Le(r));break;case"zigzag-line":nt[o]||(nt[o]=new Ce(r));break;default:o="hachure",nt[o]||(nt[o]=new Gt(r))}return nt[o]}(t,Fr).fillPolygons(e,t)}function wn(e){let t=Object.assign({},e);return t.randomizer=void 0,e.seed&&(t.seed=e.seed+1),t}function On(e){return e.randomizer||(e.randomizer=new Te(e.seed||0)),e.randomizer.next()}function re(e,t,n,r=1){return n.roughness*r*(On(n)*(t-e)+e)}function O(e,t,n=1){return re(-e,e,t,n)}function mt(e,t,n,r,o,s=!1){let a=s?o.disableMultiStrokeFill:o.disableMultiStroke,i=Be(e,t,n,r,o,!0,!1);if(a)return i;let l=Be(e,t,n,r,o,!0,!0);return i.concat(l)}function Be(e,t,n,r,o,s,a){let i=Math.pow(e-n,2)+Math.pow(t-r,2),l=Math.sqrt(i),c=1;c=l<200?1:l>500?.4:-.0016668*l+1.233334;let h=o.maxRandomnessOffset||0;h*h*100>i&&(h=l/10);let u=h/2,d=.2+.2*On(o),p=o.bowing*o.maxRandomnessOffset*(r-t)/200,f=o.bowing*o.maxRandomnessOffset*(e-n)/200;p=O(p,o,c),f=O(f,o,c);let m=[],g=()=>O(u,o,c),b=()=>O(h,o,c),y=o.preserveVertices;return s&&(a?m.push({op:"move",data:[e+(y?0:g()),t+(y?0:g())]}):m.push({op:"move",data:[e+(y?0:O(h,o,c)),t+(y?0:O(h,o,c))]})),a?m.push({op:"bcurveTo",data:[p+e+(n-e)*d+g(),f+t+(r-t)*d+g(),p+e+2*(n-e)*d+g(),f+t+2*(r-t)*d+g(),n+(y?0:g()),r+(y?0:g())]}):m.push({op:"bcurveTo",data:[p+e+(n-e)*d+b(),f+t+(r-t)*d+b(),p+e+2*(n-e)*d+b(),f+t+2*(r-t)*d+b(),n+(y?0:b()),r+(y?0:b())]}),m}function Jt(e,t,n){if(!e.length)return[];let r=[];r.push([e[0][0]+O(t,n),e[0][1]+O(t,n)]),r.push([e[0][0]+O(t,n),e[0][1]+O(t,n)]);for(let o=1;o<e.length;o++)r.push([e[o][0]+O(t,n),e[o][1]+O(t,n)]),o===e.length-1&&r.push([e[o][0]+O(t,n),e[o][1]+O(t,n)]);return oe(r,null,n)}function oe(e,t,n){let r=e.length,o=[];if(r>3){let s=[],a=1-n.curveTightness;o.push({op:"move",data:[e[1][0],e[1][1]]});for(let i=1;i+2<r;i++){let l=e[i];s[0]=[l[0],l[1]],s[1]=[l[0]+(a*e[i+1][0]-a*e[i-1][0])/6,l[1]+(a*e[i+1][1]-a*e[i-1][1])/6],s[2]=[e[i+1][0]+(a*e[i][0]-a*e[i+2][0])/6,e[i+1][1]+(a*e[i][1]-a*e[i+2][1])/6],s[3]=[e[i+1][0],e[i+1][1]],o.push({op:"bcurveTo",data:[s[1][0],s[1][1],s[2][0],s[2][1],s[3][0],s[3][1]]})}if(t&&t.length===2){let i=n.maxRandomnessOffset;o.push({op:"lineTo",data:[t[0]+O(i,n),t[1]+O(i,n)]})}}else r===3?(o.push({op:"move",data:[e[1][0],e[1][1]]}),o.push({op:"bcurveTo",data:[e[1][0],e[1][1],e[2][0],e[2][1],e[2][0],e[2][1]]})):r===2&&o.push(...Be(e[0][0],e[0][1],e[1][0],e[1][1],n,!0,!0));return o}function xn(e,t,n,r,o,s,a,i){let l=[],c=[];if(i.roughness===0){e/=4,c.push([t+r*Math.cos(-e),n+o*Math.sin(-e)]);for(let h=0;h<=2*Math.PI;h+=e){let u=[t+r*Math.cos(h),n+o*Math.sin(h)];l.push(u),c.push(u)}c.push([t+r*Math.cos(0),n+o*Math.sin(0)]),c.push([t+r*Math.cos(e),n+o*Math.sin(e)])}else{let h=O(.5,i)-Math.PI/2;c.push([O(s,i)+t+.9*r*Math.cos(h-e),O(s,i)+n+.9*o*Math.sin(h-e)]);let u=2*Math.PI+h-.01;for(let d=h;d<u;d+=e){let p=[O(s,i)+t+r*Math.cos(d),O(s,i)+n+o*Math.sin(d)];l.push(p),c.push(p)}c.push([O(s,i)+t+r*Math.cos(h+2*Math.PI+.5*a),O(s,i)+n+o*Math.sin(h+2*Math.PI+.5*a)]),c.push([O(s,i)+t+.98*r*Math.cos(h+a),O(s,i)+n+.98*o*Math.sin(h+a)]),c.push([O(s,i)+t+.9*r*Math.cos(h+.5*a),O(s,i)+n+.9*o*Math.sin(h+.5*a)])}return[c,l]}function kn(e,t,n,r,o,s,a,i,l){let c=s+O(.1,l),h=[];h.push([O(i,l)+t+.9*r*Math.cos(c-e),O(i,l)+n+.9*o*Math.sin(c-e)]);for(let u=c;u<=a;u+=e)h.push([O(i,l)+t+r*Math.cos(u),O(i,l)+n+o*Math.sin(u)]);return h.push([t+r*Math.cos(a),n+o*Math.sin(a)]),h.push([t+r*Math.cos(a),n+o*Math.sin(a)]),oe(h,null,l)}function Dr(e,t,n,r,o,s,a,i){let l=[],c=[i.maxRandomnessOffset||1,(i.maxRandomnessOffset||1)+.3],h=[0,0],u=i.disableMultiStroke?1:2,d=i.preserveVertices;for(let p=0;p<u;p++)p===0?l.push({op:"move",data:[a[0],a[1]]}):l.push({op:"move",data:[a[0]+(d?0:O(c[0],i)),a[1]+(d?0:O(c[0],i))]}),h=d?[o,s]:[o+O(c[p],i),s+O(c[p],i)],l.push({op:"bcurveTo",data:[e+O(c[p],i),t+O(c[p],i),n+O(c[p],i),r+O(c[p],i),h[0],h[1]]});return l}function qt(e){return[...e]}function vn(e,t=0){let n=e.length;if(n<3)throw new Error("A curve must have at least three points.");let r=[];if(n===3)r.push(qt(e[0]),qt(e[1]),qt(e[2]),qt(e[2]));else{let o=[];o.push(e[0],e[0]);for(let i=1;i<e.length;i++)o.push(e[i]),i===e.length-1&&o.push(e[i]);let s=[],a=1-t;r.push(qt(o[0]));for(let i=1;i+2<o.length;i++){let l=o[i];s[0]=[l[0],l[1]],s[1]=[l[0]+(a*o[i+1][0]-a*o[i-1][0])/6,l[1]+(a*o[i+1][1]-a*o[i-1][1])/6],s[2]=[o[i+1][0]+(a*o[i][0]-a*o[i+2][0])/6,o[i+1][1]+(a*o[i][1]-a*o[i+2][1])/6],s[3]=[o[i+1][0],o[i+1][1]],r.push(s[1],s[2],s[3])}}return r}function ne(e,t){return Math.pow(e[0]-t[0],2)+Math.pow(e[1]-t[1],2)}function qr(e,t,n){let r=ne(t,n);if(r===0)return ne(e,t);let o=((e[0]-t[0])*(n[0]-t[0])+(e[1]-t[1])*(n[1]-t[1]))/r;return o=Math.max(0,Math.min(1,o)),ne(e,xt(t,n,o))}function xt(e,t,n){return[e[0]+(t[0]-e[0])*n,e[1]+(t[1]-e[1])*n]}function Re(e,t,n,r){let o=r||[];if(function(i,l){let c=i[l+0],h=i[l+1],u=i[l+2],d=i[l+3],p=3*h[0]-2*c[0]-d[0];p*=p;let f=3*h[1]-2*c[1]-d[1];f*=f;let m=3*u[0]-2*d[0]-c[0];m*=m;let g=3*u[1]-2*d[1]-c[1];return g*=g,p<m&&(p=m),f<g&&(f=g),p+f}(e,t)<n){let i=e[t+0];o.length?(s=o[o.length-1],a=i,Math.sqrt(ne(s,a))>1&&o.push(i)):o.push(i),o.push(e[t+3])}else{let l=e[t+0],c=e[t+1],h=e[t+2],u=e[t+3],d=xt(l,c,.5),p=xt(c,h,.5),f=xt(h,u,.5),m=xt(d,p,.5),g=xt(p,f,.5),b=xt(m,g,.5);Re([l,d,m,b],0,n,o),Re([b,g,f,u],0,n,o)}var s,a;return o}function Gr(e,t){return se(e,0,e.length,t)}function se(e,t,n,r,o){let s=o||[],a=e[t],i=e[n-1],l=0,c=1;for(let h=t+1;h<n-1;++h){let u=qr(e[h],a,i);u>l&&(l=u,c=h)}return Math.sqrt(l)>r?(se(e,t,c+1,r,s),se(e,c,n,r,s)):(s.length||s.push(a),s.push(i)),s}function Ee(e,t=.15,n){let r=[],o=(e.length-1)/3;for(let s=0;s<o;s++)Re(e,3*s,t,r);return n&&n>0?se(r,0,r.length,n):r}var ot="none",Ct=class{constructor(t){this.defaultOptions={maxRandomnessOffset:2,roughness:1,bowing:1,stroke:"#000",strokeWidth:1,curveTightness:0,curveFitting:.95,curveStepCount:9,fillStyle:"hachure",fillWeight:-1,hachureAngle:-41,hachureGap:-1,dashOffset:-1,dashGap:-1,zigzagOffset:-1,seed:0,disableMultiStroke:!1,disableMultiStrokeFill:!1,preserveVertices:!1,fillShapeRoughnessGain:.8},this.config=t||{},this.config.options&&(this.defaultOptions=this._o(this.config.options))}static newSeed(){return Math.floor(Math.random()*2**31)}_o(t){return t?Object.assign({},this.defaultOptions,t):this.defaultOptions}_d(t,n,r){return{shape:t,sets:n||[],options:r||this.defaultOptions}}line(t,n,r,o,s){let a=this._o(s);return this._d("line",[En(t,n,r,o,a)],a)}rectangle(t,n,r,o,s){let a=this._o(s),i=[],l=_r(t,n,r,o,a);if(a.fill){let c=[[t,n],[t+r,n],[t+r,n+o],[t,n+o]];a.fillStyle==="solid"?i.push(Me([c],a)):i.push(Lt([c],a))}return a.stroke!==ot&&i.push(l),this._d("rectangle",i,a)}ellipse(t,n,r,o,s){let a=this._o(s),i=[],l=An(r,o,a),c=ze(t,n,a,l);if(a.fill)if(a.fillStyle==="solid"){let h=ze(t,n,a,l).opset;h.type="fillPath",i.push(h)}else i.push(Lt([c.estimatedPoints],a));return a.stroke!==ot&&i.push(c.opset),this._d("ellipse",i,a)}circle(t,n,r,o){let s=this.ellipse(t,n,r,r,o);return s.shape="circle",s}linearPath(t,n){let r=this._o(n);return this._d("linearPath",[ee(t,!1,r)],r)}arc(t,n,r,o,s,a,i=!1,l){let c=this._o(l),h=[],u=bn(t,n,r,o,s,a,i,!0,c);if(i&&c.fill)if(c.fillStyle==="solid"){let d=Object.assign({},c);d.disableMultiStroke=!0;let p=bn(t,n,r,o,s,a,!0,!1,d);p.type="fillPath",h.push(p)}else h.push(function(d,p,f,m,g,b,y){let x=d,k=p,$=Math.abs(f/2),E=Math.abs(m/2);$+=O(.01*$,y),E+=O(.01*E,y);let v=g,z=b;for(;v<0;)v+=2*Math.PI,z+=2*Math.PI;z-v>2*Math.PI&&(v=0,z=2*Math.PI);let C=(z-v)/y.curveStepCount,L=[];for(let j=v;j<=z;j+=C)L.push([x+$*Math.cos(j),k+E*Math.sin(j)]);return L.push([x+$*Math.cos(z),k+E*Math.sin(z)]),L.push([x,k]),Lt([L],y)}(t,n,r,o,s,a,c));return c.stroke!==ot&&h.push(u),this._d("arc",h,c)}curve(t,n){let r=this._o(n),o=[],s=mn(t,r);if(r.fill&&r.fill!==ot)if(r.fillStyle==="solid"){let a=mn(t,Object.assign(Object.assign({},r),{disableMultiStroke:!0,roughness:r.roughness?r.roughness+r.fillShapeRoughnessGain:0}));o.push({type:"fillPath",ops:this._mergedShape(a.ops)})}else{let a=[],i=t;if(i.length){let l=typeof i[0][0]=="number"?[i]:i;for(let c of l)c.length<3?a.push(...c):c.length===3?a.push(...Ee(vn([c[0],c[0],c[1],c[2]]),10,(1+r.roughness)/2)):a.push(...Ee(vn(c),10,(1+r.roughness)/2))}a.length&&o.push(Lt([a],r))}return r.stroke!==ot&&o.push(s),this._d("curve",o,r)}polygon(t,n){let r=this._o(n),o=[],s=ee(t,!0,r);return r.fill&&(r.fillStyle==="solid"?o.push(Me([t],r)):o.push(Lt([t],r))),r.stroke!==ot&&o.push(s),this._d("polygon",o,r)}path(t,n){let r=this._o(n),o=[];if(!t)return this._d("path",o,r);t=(t||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");let s=r.fill&&r.fill!=="transparent"&&r.fill!==ot,a=r.stroke!==ot,i=!!(r.simplification&&r.simplification<1),l=function(h,u,d){let p=Sn($n(Ie(h))),f=[],m=[],g=[0,0],b=[],y=()=>{b.length>=4&&m.push(...Ee(b,u)),b=[]},x=()=>{y(),m.length&&(f.push(m),m=[])};for(let{key:$,data:E}of p)switch($){case"M":x(),g=[E[0],E[1]],m.push(g);break;case"L":y(),m.push([E[0],E[1]]);break;case"C":if(!b.length){let v=m.length?m[m.length-1]:g;b.push([v[0],v[1]])}b.push([E[0],E[1]]),b.push([E[2],E[3]]),b.push([E[4],E[5]]);break;case"Z":y(),m.push([g[0],g[1]])}if(x(),!d)return f;let k=[];for(let $ of f){let E=Gr($,d);E.length&&k.push(E)}return k}(t,1,i?4-4*(r.simplification||1):(1+r.roughness)/2),c=yn(t,r);if(s)if(r.fillStyle==="solid")if(l.length===1){let h=yn(t,Object.assign(Object.assign({},r),{disableMultiStroke:!0,roughness:r.roughness?r.roughness+r.fillShapeRoughnessGain:0}));o.push({type:"fillPath",ops:this._mergedShape(h.ops)})}else o.push(Me(l,r));else o.push(Lt(l,r));return a&&(i?l.forEach(h=>{o.push(ee(h,!1,r))}):o.push(c)),this._d("path",o,r)}opsToPath(t,n){let r="";for(let o of t.ops){let s=typeof n=="number"&&n>=0?o.data.map(a=>+a.toFixed(n)):o.data;switch(o.op){case"move":r+=`M${s[0]} ${s[1]} `;break;case"bcurveTo":r+=`C${s[0]} ${s[1]}, ${s[2]} ${s[3]}, ${s[4]} ${s[5]} `;break;case"lineTo":r+=`L${s[0]} ${s[1]} `}}return r.trim()}toPaths(t){let n=t.sets||[],r=t.options||this.defaultOptions,o=[];for(let s of n){let a=null;switch(s.type){case"path":a={d:this.opsToPath(s),stroke:r.stroke,strokeWidth:r.strokeWidth,fill:ot};break;case"fillPath":a={d:this.opsToPath(s),stroke:ot,strokeWidth:0,fill:r.fill||ot};break;case"fillSketch":a=this.fillSketch(s,r)}a&&o.push(a)}return o}fillSketch(t,n){let r=n.fillWeight;return r<0&&(r=n.strokeWidth/2),{d:this.opsToPath(t),stroke:n.fill||ot,strokeWidth:r,fill:ot}}_mergedShape(t){return t.filter((n,r)=>r===0||n.op!=="move")}},je=class{constructor(t,n){this.canvas=t,this.ctx=this.canvas.getContext("2d"),this.gen=new Ct(n)}draw(t){let n=t.sets||[],r=t.options||this.getDefaultOptions(),o=this.ctx,s=t.options.fixedDecimalPlaceDigits;for(let a of n)switch(a.type){case"path":o.save(),o.strokeStyle=r.stroke==="none"?"transparent":r.stroke,o.lineWidth=r.strokeWidth,r.strokeLineDash&&o.setLineDash(r.strokeLineDash),r.strokeLineDashOffset&&(o.lineDashOffset=r.strokeLineDashOffset),this._drawToContext(o,a,s),o.restore();break;case"fillPath":{o.save(),o.fillStyle=r.fill||"";let i=t.shape==="curve"||t.shape==="polygon"||t.shape==="path"?"evenodd":"nonzero";this._drawToContext(o,a,s,i),o.restore();break}case"fillSketch":this.fillSketch(o,a,r)}}fillSketch(t,n,r){let o=r.fillWeight;o<0&&(o=r.strokeWidth/2),t.save(),r.fillLineDash&&t.setLineDash(r.fillLineDash),r.fillLineDashOffset&&(t.lineDashOffset=r.fillLineDashOffset),t.strokeStyle=r.fill||"",t.lineWidth=o,this._drawToContext(t,n,r.fixedDecimalPlaceDigits),t.restore()}_drawToContext(t,n,r,o="nonzero"){t.beginPath();for(let s of n.ops){let a=typeof r=="number"&&r>=0?s.data.map(i=>+i.toFixed(r)):s.data;switch(s.op){case"move":t.moveTo(a[0],a[1]);break;case"bcurveTo":t.bezierCurveTo(a[0],a[1],a[2],a[3],a[4],a[5]);break;case"lineTo":t.lineTo(a[0],a[1])}}n.type==="fillPath"?t.fill(o):t.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(t,n,r,o,s){let a=this.gen.line(t,n,r,o,s);return this.draw(a),a}rectangle(t,n,r,o,s){let a=this.gen.rectangle(t,n,r,o,s);return this.draw(a),a}ellipse(t,n,r,o,s){let a=this.gen.ellipse(t,n,r,o,s);return this.draw(a),a}circle(t,n,r,o){let s=this.gen.circle(t,n,r,o);return this.draw(s),s}linearPath(t,n){let r=this.gen.linearPath(t,n);return this.draw(r),r}polygon(t,n){let r=this.gen.polygon(t,n);return this.draw(r),r}arc(t,n,r,o,s,a,i=!1,l){let c=this.gen.arc(t,n,r,o,s,a,i,l);return this.draw(c),c}curve(t,n){let r=this.gen.curve(t,n);return this.draw(r),r}path(t,n){let r=this.gen.path(t,n);return this.draw(r),r}},te="http://www.w3.org/2000/svg",Ne=class{constructor(t,n){this.svg=t,this.gen=new Ct(n)}draw(t){let n=t.sets||[],r=t.options||this.getDefaultOptions(),o=this.svg.ownerDocument||window.document,s=o.createElementNS(te,"g"),a=t.options.fixedDecimalPlaceDigits;for(let i of n){let l=null;switch(i.type){case"path":l=o.createElementNS(te,"path"),l.setAttribute("d",this.opsToPath(i,a)),l.setAttribute("stroke",r.stroke),l.setAttribute("stroke-width",r.strokeWidth+""),l.setAttribute("fill","none"),r.strokeLineDash&&l.setAttribute("stroke-dasharray",r.strokeLineDash.join(" ").trim()),r.strokeLineDashOffset&&l.setAttribute("stroke-dashoffset",`${r.strokeLineDashOffset}`);break;case"fillPath":l=o.createElementNS(te,"path"),l.setAttribute("d",this.opsToPath(i,a)),l.setAttribute("stroke","none"),l.setAttribute("stroke-width","0"),l.setAttribute("fill",r.fill||""),t.shape!=="curve"&&t.shape!=="polygon"||l.setAttribute("fill-rule","evenodd");break;case"fillSketch":l=this.fillSketch(o,i,r)}l&&s.appendChild(l)}return s}fillSketch(t,n,r){let o=r.fillWeight;o<0&&(o=r.strokeWidth/2);let s=t.createElementNS(te,"path");return s.setAttribute("d",this.opsToPath(n,r.fixedDecimalPlaceDigits)),s.setAttribute("stroke",r.fill||""),s.setAttribute("stroke-width",o+""),s.setAttribute("fill","none"),r.fillLineDash&&s.setAttribute("stroke-dasharray",r.fillLineDash.join(" ").trim()),r.fillLineDashOffset&&s.setAttribute("stroke-dashoffset",`${r.fillLineDashOffset}`),s}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(t,n){return this.gen.opsToPath(t,n)}line(t,n,r,o,s){let a=this.gen.line(t,n,r,o,s);return this.draw(a)}rectangle(t,n,r,o,s){let a=this.gen.rectangle(t,n,r,o,s);return this.draw(a)}ellipse(t,n,r,o,s){let a=this.gen.ellipse(t,n,r,o,s);return this.draw(a)}circle(t,n,r,o){let s=this.gen.circle(t,n,r,o);return this.draw(s)}linearPath(t,n){let r=this.gen.linearPath(t,n);return this.draw(r)}polygon(t,n){let r=this.gen.polygon(t,n);return this.draw(r)}arc(t,n,r,o,s,a,i=!1,l){let c=this.gen.arc(t,n,r,o,s,a,i,l);return this.draw(c)}curve(t,n){let r=this.gen.curve(t,n);return this.draw(r)}path(t,n){let r=this.gen.path(t,n);return this.draw(r)}},Pn={canvas:(e,t)=>new je(e,t),svg:(e,t)=>new Ne(e,t),generator:e=>new Ct(e),newSeed:()=>Ct.newSeed()};var Ln={sqrt:Math.sqrt,abs:Math.abs,sin:Math.sin,cos:Math.cos,tan:Math.tan,min:Math.min,max:Math.max,round:Math.round,floor:Math.floor,ceil:Math.ceil,pow:Math.pow,log:Math.log,exp:Math.exp},Cn={pi:Math.PI,e:Math.E},_e=["and","or","not"],ut=class extends Error{};function Xr(e){let t=[],n=/\s*(\d+(?:\.\d+)?|\.\d+|[A-Za-z_][A-Za-z_0-9]*|>=|<=|==|!=|[-+*/^(),<>])/y,r=0;for(;r<e.length&&!/^\s*$/.test(e.slice(r));){n.lastIndex=r;let o=n.exec(e);if(!o)throw new ut(`Unexpected character in "${e}" (position ${r})`);let s=o[1];/^[\d.]/.test(s)?t.push({kind:"num",value:parseFloat(s)}):/^[A-Za-z_]/.test(s)?t.push({kind:"id",value:s}):t.push({kind:"op",value:s}),r=n.lastIndex}return t}var Fe=class{constructor(t,n,r){Y(this,"i",0);Y(this,"tokens");Y(this,"scope");Y(this,"src");this.tokens=t,this.scope=n,this.src=r}parse(){let t=this.or();if(this.i<this.tokens.length)throw new ut(`Leftover input at the end of "${this.src}"`);return t}peekOp(...t){let n=this.tokens[this.i];return n&&n.kind==="op"&&t.includes(n.value)?n.value:null}expect(t){if(!this.peekOp(t))throw new ut(`Expected "${t}" in "${this.src}"`);this.i++}word(t){let n=this.tokens[this.i];return!!n&&n.kind==="id"&&n.value===t}or(){let t=this.and();for(;this.word("or");){this.i++;let n=this.and();t=t!==0||n!==0?1:0}return t}and(){let t=this.not();for(;this.word("and");){this.i++;let n=this.not();t=t!==0&&n!==0?1:0}return t}not(){return this.word("not")?(this.i++,this.not()===0?1:0):this.compare()}compare(){let t=this.sum(),n=this.peekOp(">","<",">=","<=","==","!=");if(!n)return t;this.i++;let r=this.sum();return(n===">"?t>r:n==="<"?t<r:n===">="?t>=r:n==="<="?t<=r:n==="=="?t===r:t!==r)?1:0}sum(){let t=this.term(),n;for(;n=this.peekOp("+","-");){this.i++;let r=this.term();t=n==="+"?t+r:t-r}return t}term(){let t=this.unary(),n;for(;n=this.peekOp("*","/");){this.i++;let r=this.unary();t=n==="*"?t*r:t/r}return t}unary(){return this.peekOp("-")?(this.i++,-this.unary()):this.peekOp("+")?(this.i++,this.unary()):this.power()}power(){let t=this.primary();return this.peekOp("^")?(this.i++,Math.pow(t,this.unary())):t}primary(){let t=this.tokens[this.i];if(!t)throw new ut(`Incomplete expression: "${this.src}"`);if(t.kind==="num")return this.i++,t.value;if(t.kind==="id"){if(this.i++,this.peekOp("(")){if(!Object.hasOwn(Ln,t.value))throw new ut(`Unknown function "${t.value}"`);let n=Ln[t.value];this.i++;let r=[];if(!this.peekOp(")"))for(r.push(this.or());this.peekOp(",");)this.i++,r.push(this.or());return this.expect(")"),n(...r)}if(_e.includes(t.value))throw new ut(`"${t.value}" needs parentheses here, in "${this.src}"`);if(Object.hasOwn(this.scope,t.value))return this.scope[t.value];if(Object.hasOwn(Cn,t.value))return Cn[t.value];throw new ut(`Unknown variable "${t.value}" in "${this.src}"`)}if(t.value==="("){this.i++;let n=this.or();return this.expect(")"),n}throw new ut(`Unexpected symbol "${t.value}" in "${this.src}"`)}};function Yr(e,t){return new Fe(Xr(e),t,e).parse()}function R(e,t){let n=typeof e=="number"?e:Yr(e,t);if(!Number.isFinite(n))throw new ut(`Non-finite result in "${e}".`);return n}var Tn="pt-BR";function ae(e,t,n=Tn){if(!isFinite(e))return"?";let r=t===void 0?{maximumFractionDigits:2,minimumFractionDigits:0}:{maximumFractionDigits:t,minimumFractionDigits:t};return new Intl.NumberFormat(n,r).format(e)}function st(e,t,n=Tn){return e.replace(/\{([^{}:]+)(?::(\d))?\}/g,(r,o,s)=>ae(R(o,t),s===void 0?void 0:Number(s),n))}var Yt=["person","person-pointing","person-sitting","house","car","bus","coin","phone","document","server","bank","cloud","queue","desk","computer","clock","lock","money-arrow","tree","school","hospital","factory","truck","cart","safe","bulb","gear","database","robot","ship","container","warehouse","box","pallet","shop","shelf","field","cup","function","api-gateway","cache","cluster","board","book","pencil"],Tt={pessoa:"person","pessoa-apontando":"person-pointing","pessoa-sentada":"person-sitting",casa:"house",carro:"car",onibus:"bus",moeda:"coin",celular:"phone",documento:"document",servidor:"server",banco:"bank",nuvem:"cloud",fila:"queue",mesa:"desk",computador:"computer",relogio:"clock",cadeado:"lock","seta-dinheiro":"money-arrow"},zt=e=>Yt.includes(e)?e:typeof e=="string"&&Object.hasOwn(Tt,e)?Tt[e]:void 0,De=80,Bn=e=>zt(e)!==void 0,w={skin:"#E8C6A5",shirt:"#A9BCC3",wood:"#D8C29C",gold:"#F2C94C",paper:"#FFFFFF",screen:"#DCE8F0",device:"#5B6B7C",roof:"#D9785F",wall:"#F3E3C3",car:"#7FA7C9",bus:"#E9C46A",green:"#7DBE8A",dark:"#4A4A4A",metal:"#C9D3DD",board:"#2F4F3F",chalk:"#F2EFE6"},M=(e,t,n,r,o,s)=>({kind:"polygon",points:[[e,t],[e+n,t],[e+n,t+r],[e,t+r]],fill:o,main:s}),P=(...e)=>({kind:"polyline",points:e});function Rn(e){return[{kind:"polygon",points:[[-.15,-.72],[.15,-.72],[.19,-.38],[-.19,-.38]],fill:w.shirt,main:!0},{kind:"circle",c:[0,-.87],r:.11,fill:w.skin},...e,P([-.08,-.38],[-.1,0]),P([.08,-.38],[.1,0])]}var zn=Rn([P([-.15,-.7],[-.25,-.42]),P([.15,-.7],[.25,-.42])]);function Vr(e,t,n){let r=([o,s])=>[n+o*t,s*t];return e.map(o=>o.kind==="circle"?{...o,c:r(o.c),r:o.r*t}:{...o,points:o.points.map(r)})}function Wr(){let e=[[-.28,-.3,.18],[-.06,-.45,.25],[.2,-.4,.21],[.37,-.27,.13]],t=[];for(let n=0;n<=24;n++){let r=-.46+.96*n/24,o=e.filter(([s,,a])=>Math.abs(r-s)<=a).map(([s,a,i])=>a-Math.sqrt(Math.max(0,i*i-(r-s)**2)));o.length&&t.push([r,Math.min(...o)])}return[...t,[.42,-.12],[-.4,-.12]]}var Hr={person:zn,"person-pointing":Rn([P([-.15,-.7],[-.25,-.42]),P([.15,-.69],[.47,-.73])]),"person-sitting":[P([-.3,-.8],[-.27,-.4]),P([-.32,-.4],[.2,-.4]),P([-.27,-.4],[-.27,0]),P([.16,-.4],[.16,0]),{kind:"polygon",points:[[-.22,-.77],[.04,-.77],[.06,-.44],[-.22,-.44]],fill:w.shirt,main:!0},{kind:"circle",c:[-.08,-.9],r:.1,fill:w.skin},P([-.1,-.44],[.3,-.44],[.32,0]),P([0,-.74],[.18,-.55],[.3,-.58])],house:[M(-.4,-.6,.8,.6,w.wall,!0),{kind:"polygon",points:[[-.5,-.58],[0,-1],[.5,-.58]],fill:w.roof},M(-.08,-.32,.16,.32,w.wood),M(.16,-.46,.16,.14,w.screen)],car:[{kind:"polygon",fill:w.car,main:!0,points:[[-.5,-.14],[-.5,-.32],[-.3,-.36],[-.18,-.56],[.2,-.56],[.32,-.36],[.5,-.32],[.5,-.14]]},{kind:"polygon",points:[[-.14,-.51],[.17,-.51],[.25,-.37],[-.22,-.37]],fill:w.screen},{kind:"circle",c:[-.28,-.12],r:.1,fill:w.dark},{kind:"circle",c:[.28,-.12],r:.1,fill:w.dark}],bus:[M(-.5,-.66,1,.52,w.bus,!0),...[-.42,-.21,0,.21].map(e=>M(e,-.6,.15,.16,w.screen)),P([-.5,-.3],[.5,-.3]),{kind:"circle",c:[-.3,-.12],r:.1,fill:w.dark},{kind:"circle",c:[.3,-.12],r:.1,fill:w.dark}],coin:[{kind:"circle",c:[0,-.42],r:.4,fill:w.gold,main:!0},{kind:"circle",c:[0,-.42],r:.3},{kind:"curve",points:[[.1,-.56],[-.08,-.57],[-.09,-.46],[.08,-.39],[.08,-.29],[-.11,-.28]]},P([0,-.64],[0,-.2])],phone:[M(-.26,-1,.52,1,w.device,!0),M(-.2,-.92,.4,.76,w.screen),{kind:"circle",c:[0,-.08],r:.035,fill:w.paper}],document:[{kind:"polygon",points:[[-.36,-1],[.16,-1],[.36,-.8],[.36,0],[-.36,0]],fill:w.paper,main:!0},P([.16,-1],[.16,-.8],[.36,-.8]),...[-.66,-.5,-.34,-.18].map(e=>P([-.22,e],[.22,e]))],server:[-1,-.66,-.32].flatMap(e=>[M(-.36,e,.72,.3,w.metal,!0),P([-.26,e+.15],[.06,e+.15]),{kind:"circle",c:[.22,e+.15],r:.035,fill:w.green}]),bank:[{kind:"polygon",points:[[-.5,-.74],[0,-1],[.5,-.74]],fill:w.wall,main:!0},M(-.45,-.74,.9,.08,w.wall),...[-.33,-.11,.11,.33].map(e=>M(e-.04,-.66,.08,.56,w.paper)),M(-.5,-.1,1,.1,w.wall)],cloud:[{kind:"polygon",points:Wr(),fill:w.paper,main:!0}],queue:[-.32,0,.32].flatMap(e=>Vr(zn,.7,e)),desk:[M(-.5,-.5,1,.07,w.wood,!0),P([-.42,-.43],[-.42,0]),P([.42,-.43],[.42,0])],computer:[M(-.45,-1,.9,.6,w.device,!0),M(-.39,-.94,.78,.48,w.screen),{kind:"polygon",points:[[-.06,-.4],[.06,-.4],[.1,-.1],[-.1,-.1]],fill:w.device},M(-.25,-.1,.5,.08,w.device)],clock:[{kind:"circle",c:[0,-.48],r:.45,fill:w.paper,main:!0},...[[0,-.9,0,-.82],[.42,-.48,.34,-.48],[0,-.06,0,-.14],[-.42,-.48,-.34,-.48]].map(([e,t,n,r])=>P([e,t],[n,r])),P([0,-.48],[0,-.78]),P([0,-.48],[.2,-.48])],lock:[{kind:"curve",points:[[-.22,-.52],[-.22,-.76],[0,-.96],[.22,-.76],[.22,-.52]]},M(-.36,-.54,.72,.54,w.bus,!0),{kind:"circle",c:[0,-.32],r:.06,fill:w.dark},P([0,-.28],[0,-.14])],"money-arrow":[{kind:"polygon",fill:w.green,main:!0,points:[[-.5,-.4],[.12,-.4],[.12,-.56],[.5,-.3],[.12,-.04],[.12,-.2],[-.5,-.2]]},{kind:"circle",c:[-.2,-.3],r:.16,fill:w.gold},P([-.2,-.4],[-.2,-.2])],tree:[M(-.07,-.36,.14,.36,w.wood),{kind:"circle",c:[0,-.64],r:.3,fill:w.green,main:!0}],school:[M(-.45,-.6,.9,.6,w.wall,!0),{kind:"polygon",points:[[-.5,-.6],[0,-.82],[.5,-.6]],fill:w.roof},M(-.08,-.28,.16,.28,w.wood),M(-.36,-.48,.16,.12,w.screen),M(.2,-.48,.16,.12,w.screen),P([0,-.82],[0,-1]),{kind:"polygon",points:[[0,-1],[.17,-.95],[0,-.9]],fill:w.roof}],hospital:[M(-.4,-.8,.8,.8,w.paper,!0),M(-.045,-.7,.09,.26,"#C8442C"),M(-.13,-.615,.26,.09,"#C8442C"),M(-.1,-.24,.2,.24,w.metal)],factory:[{kind:"polygon",points:[[-.5,0],[-.5,-.5],[-.25,-.65],[-.25,-.5],[0,-.65],[0,-.5],[.25,-.65],[.25,-.5],[.5,-.5],[.5,0]],fill:w.wall,main:!0},M(.3,-.95,.12,.3,w.dark),M(-.38,-.32,.16,.12,w.screen),M(-.08,-.32,.16,.12,w.screen),M(.22,-.32,.16,.12,w.screen)],truck:[M(-.5,-.62,.62,.46,w.metal,!0),{kind:"polygon",points:[[.12,-.16],[.12,-.5],[.34,-.5],[.48,-.32],[.48,-.16]],fill:w.bus},{kind:"polygon",points:[[.18,-.46],[.32,-.46],[.42,-.33],[.18,-.33]],fill:w.screen},{kind:"circle",c:[-.3,-.1],r:.1,fill:w.dark},{kind:"circle",c:[.3,-.1],r:.1,fill:w.dark}],cart:[P([-.48,-.78],[-.4,-.62]),{kind:"polygon",points:[[-.4,-.62],[.42,-.62],[.32,-.26],[-.3,-.26]],fill:w.metal,main:!0},P([-.3,-.26],[-.3,-.14],[.32,-.14]),{kind:"circle",c:[-.22,-.07],r:.06,fill:w.dark},{kind:"circle",c:[.24,-.07],r:.06,fill:w.dark}],safe:[M(-.4,-.82,.8,.82,w.device,!0),M(-.3,-.72,.6,.62,w.metal),{kind:"circle",c:[0,-.41],r:.13,fill:w.paper},P([0,-.41],[.08,-.47])],bulb:[{kind:"circle",c:[0,-.62],r:.3,fill:w.gold,main:!0},M(-.13,-.33,.26,.2,w.metal),{kind:"curve",points:[[-.09,-.52],[0,-.66],[.09,-.52]]},P([-.08,-.08],[.08,-.08])],gear:[{kind:"polygon",points:[[.42,-.5],[.296,-.378],[.297,-.203],[.122,-.204],[0,-.08],[-.122,-.204],[-.297,-.203],[-.296,-.378],[-.42,-.5],[-.296,-.622],[-.297,-.797],[-.122,-.796],[-0,-.92],[.122,-.796],[.297,-.797],[.296,-.622]],fill:w.metal,main:!0},{kind:"circle",c:[0,-.5],r:.12,fill:w.paper}],database:[{kind:"polygon",points:[[-.35,-.8],[.35,-.8],[.35,-.16],[-.35,-.16]],fill:w.screen,main:!0},{kind:"polygon",points:[[.35,-.8],[.303,-.755],[.175,-.722],[0,-.71],[-.175,-.722],[-.303,-.755],[-.35,-.8],[-.303,-.845],[-.175,-.878],[-0,-.89],[.175,-.878],[.303,-.845]],fill:w.metal},{kind:"curve",points:[[-.35,-.16],[0,-.06],[.35,-.16]]},{kind:"curve",points:[[-.35,-.58],[0,-.48],[.35,-.58]]},{kind:"curve",points:[[-.35,-.37],[0,-.27],[.35,-.37]]}],robot:[P([0,-.95],[0,-1]),M(-.22,-.95,.44,.3,w.metal),{kind:"circle",c:[-.09,-.81],r:.045,fill:w.screen},{kind:"circle",c:[.09,-.81],r:.045,fill:w.screen},M(-.28,-.62,.56,.42,w.metal,!0),P([-.28,-.55],[-.42,-.35]),P([.28,-.55],[.42,-.35]),M(-.2,-.2,.12,.2,w.device),M(.08,-.2,.12,.2,w.device)],ship:[{kind:"polygon",points:[[-.48,-.3],[.48,-.3],[.36,-.04],[-.4,-.04]],fill:w.car,main:!0},M(-.42,-.62,.14,.32,w.wall),M(-.24,-.5,.2,.2,w.roof),M(-.02,-.5,.2,.2,w.bus),M(.2,-.5,.2,.2,w.green),{kind:"curve",points:[[-.5,0],[-.3,-.04],[-.1,0],[.1,-.04],[.3,0],[.5,-.04]]}],container:[M(-.46,-.52,.92,.52,w.roof,!0),...[-.3,-.15,0,.15,.3].map(e=>P([e,-.48],[e,-.04]))],warehouse:[{kind:"polygon",points:[[-.46,0],[.46,0],[.46,-.55],[0,-.82],[-.46,-.55]],fill:w.wall,main:!0},M(-.2,-.38,.4,.38,w.metal),P([-.2,-.26],[.2,-.26]),P([-.2,-.13],[.2,-.13])],box:[M(-.36,-.5,.52,.5,w.wood,!0),{kind:"polygon",points:[[-.36,-.5],[.16,-.5],[.36,-.64],[-.16,-.64]],fill:w.wood},{kind:"polygon",points:[[.16,0],[.36,-.14],[.36,-.64],[.16,-.5]],fill:w.wood},P([-.1,-.5],[.1,-.64])],pallet:[M(-.46,-.12,.92,.06,w.wood),...[-.42,-.05,.32].map(e=>M(e,-.06,.1,.06,w.wood)),M(-.42,-.5,.4,.38,w.wood,!0),M(.02,-.5,.4,.38,w.wood),M(-.2,-.82,.4,.32,w.wood)],shop:[M(-.42,-.6,.84,.6,w.wall,!0),{kind:"polygon",points:[[-.48,-.6],[.48,-.6],[.42,-.78],[-.42,-.78]],fill:w.roof},M(-.34,-.48,.34,.26,w.screen),M(.08,-.42,.24,.42,w.wood)],shelf:[M(-.4,-.92,.8,.92,w.paper,!0),P([-.4,-.62],[.4,-.62]),P([-.4,-.32],[.4,-.32]),M(-.32,-.8,.16,.18,w.roof),M(-.1,-.78,.14,.16,w.bus),M(.1,-.5,.22,.18,w.green),M(-.3,-.2,.24,.2,w.wood)],field:[P([-.48,0],[.48,0]),...[-.3,0,.3].flatMap(e=>[{kind:"curve",points:[[e,0],[e-.02,-.25],[e,-.5]]},{kind:"circle",c:[e-.08,-.32],r:.07,fill:w.green,main:!0},{kind:"circle",c:[e+.08,-.42],r:.07,fill:w.green,main:!0},{kind:"circle",c:[e,-.52],r:.06,fill:w.roof}])],cup:[{kind:"polygon",points:[[-.26,-.52],[.26,-.52],[.2,-.1],[-.2,-.1]],fill:w.paper,main:!0},{kind:"curve",points:[[.24,-.44],[.4,-.38],[.22,-.2]]},{kind:"polygon",points:[[-.46,-.1],[.46,-.1],[.36,0],[-.36,0]],fill:w.paper},{kind:"curve",points:[[-.08,-.62],[-.02,-.72],[-.08,-.84]]},{kind:"curve",points:[[.08,-.62],[.14,-.72],[.08,-.84]]}],function:[M(-.38,-.72,.76,.62,w.screen,!0),P([-.14,-.62],[0,-.62],[.14,-.2]),P([.02,-.42],[-.14,-.2])],"api-gateway":[M(-.12,-.8,.24,.8,w.metal,!0),P([-.48,-.55],[-.16,-.55]),P([-.24,-.62],[-.16,-.55],[-.24,-.48]),P([.16,-.3],[.48,-.3]),P([.4,-.37],[.48,-.3],[.4,-.23])],cache:[M(-.34,-.66,.68,.66,w.metal,!0),{kind:"polygon",points:[[.04,-.58],[-.12,-.3],[0,-.3],[-.06,-.08],[.14,-.38],[.02,-.38]],fill:w.gold}],cluster:[{kind:"curve",points:[[-.4,-.8],[0,-.86],[.4,-.8],[.48,-.45],[.4,-.1],[0,-.04],[-.4,-.1],[-.48,-.45],[-.4,-.8]]},M(-.3,-.7,.24,.2,w.screen,!0),M(.06,-.7,.24,.2,w.screen,!0),M(-.12,-.38,.24,.2,w.screen,!0)],board:[M(-.48,-.9,.96,.6,w.board,!0),M(-.34,-.76,.42,.03,w.chalk),M(-.34,-.62,.58,.03,w.chalk),M(-.34,-.48,.3,.03,w.chalk),P([-.3,-.3],[-.36,0]),P([.3,-.3],[.36,0])],book:[{kind:"polygon",points:[[0,-.62],[-.46,-.7],[-.46,-.1],[0,-.04]],fill:w.paper,main:!0},{kind:"polygon",points:[[0,-.62],[.46,-.7],[.46,-.1],[0,-.04]],fill:w.paper,main:!0},P([-.36,-.52],[-.1,-.48]),P([-.36,-.38],[-.1,-.34]),P([.1,-.48],[.36,-.52]),P([.1,-.34],[.36,-.38])],pencil:[{kind:"polygon",points:[[-.38,-.12],[.22,-.72],[.34,-.6],[-.26,0]],fill:w.bus,main:!0},{kind:"polygon",points:[[.22,-.72],[.34,-.6],[.44,-.86]],fill:w.wood},{kind:"polygon",points:[[-.38,-.12],[-.26,0],[-.46,-.02]],fill:w.roof}]},jn=["happy","sad","surprised","worried","idea"],Nn={person:[0,-.87,.11],"person-pointing":[0,-.87,.11],"person-sitting":[-.08,-.9,.1]},In=e=>{let t=zt(e);return!!t&&t in Nn};function Ur(e,t){let n=zt(e),r=n&&Nn[n];if(!r)return[];let[o,s,a]=r,i=a/.11,l=(u,d)=>[o+u*i,s+d*i],c=[{kind:"circle",c:l(-.04,-.015),r:.012*i,fill:w.dark},{kind:"circle",c:l(.04,-.015),r:.012*i,fill:w.dark}],h={kind:"curve",points:[l(-.05,.03),l(0,.06),l(.05,.03)]};switch(t){case"happy":return[...c,h];case"sad":return[...c,{kind:"curve",points:[l(-.05,.065),l(0,.035),l(.05,.065)]}];case"surprised":return[...c,{kind:"circle",c:l(0,.05),r:.022*i}];case"worried":return[...c,{kind:"polyline",points:[l(-.05,.055),l(-.017,.04),l(.017,.065),l(.05,.05)]}];case"idea":return[...c,h,{kind:"circle",c:l(0,-.26),r:.07*i,fill:w.gold},{kind:"polygon",points:[l(-.03,-.19),l(.03,-.19),l(.03,-.16),l(-.03,-.16)],fill:w.metal},{kind:"polyline",points:[l(-.11,-.3),l(-.15,-.33)]},{kind:"polyline",points:[l(.11,-.3),l(.15,-.33)]},{kind:"polyline",points:[l(0,-.36),l(0,-.41)]}]}}function Fn(e,t,n=De,r=!1,o,s){let[a,i]=t,l=([d,p])=>[a+(r?-d:d)*n,i+p*n],c=s&&Object.hasOwn(s,e)?s[e]:void 0,h=zt(e);if(!c&&!h)throw new Error(`Unknown prop "${e}".`);return(c??[...Hr[h],...o?Ur(h,o).map(d=>({...d,fine:!0})):[]]).map(d=>d.kind==="circle"?{...d,c:l(d.c),r:d.r*n}:{...d,points:d.points.map(l)})}var _n=8,Dn=24;function ht(e){let t={};for(let[n,r]of Object.entries(e.params??{}))t[n]=r.value;for(let[n,r]of Object.entries(e.switches??{}))t[n]=r.on?1:0;return t}var Gn=["card","line","arrow","polyline","polygon","curve","circle","ellipse","plot","text","highlight","pause","prop","repeat","when","move","link","counter","row","column","grid","axis","timeline","balloon","brace","note","table","bars","chain"],bt=["text","prop","card","counter","circle","ellipse"],qn=["row","column","grid","chain"],Zr=50;function K(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${t}: expected an object.`)}function V(e,t){if(typeof e!="string"||!e.trim()||e.length>2e3)throw new Error(`${t}: expected text of 1 to 2000 characters.`)}function _(e,t,n=-1e4,r=1e4){if(typeof e!="number"||!Number.isFinite(e)||e<n||e>r)throw new Error(`${t}: expected a number between ${n} and ${r}.`)}function et(e,t){if(typeof e=="string"){if(V(e,t),e.length>300)throw new Error(`${t}: expression too long.`)}else _(e,t)}function tt(e,t){if(!Array.isArray(e)||e.length!==2)throw new Error(`${t}: expected [x, y].`);e.forEach((n,r)=>et(n,`${t}[${r}]`))}function dt(e,t){e!==void 0&&V(e,t)}function it(e,t,n){if(e!==void 0&&(typeof e!="string"||!t.includes(e)))throw new Error(`${n}: choose one of ${t.join(", ")}.`)}function ce(e){if(!/^[A-Za-z_][A-Za-z_0-9]*$/.test(e)||["__proto__","constructor","prototype",..._e].includes(e))throw new Error(`Invalid variable name: "${e}".`)}var Vt=(e,t)=>t.includes("{")||e.exact.has(t)||[...e.repeated].some(n=>t.startsWith(`${n}-`)&&/^\d+$/.test(t.slice(n.length+1)));function kt(e,t,n,r){r&&e[t]===void 0&&(e[t]=[0,0]),tt(e[t],`${n}.${t}`)}function Wt(e,t,n,r,o=!1){if(K(e,t),++n.count>500)throw new Error(`${t}: a recipe draws at most 500 steps, counting those inside repeat and when.`);if(r){for(let i of["chapter","say","duration"])if(e[i]!==void 0)throw new Error(`${t}.${i}: put it on the ${r} step itself, not on a step inside it.`);if(e.type==="pause")throw new Error(`${t}: a pause cannot go inside ${r}.`);if(e.type==="repeat"&&r==="repeat")throw new Error(`${t}: a repeat cannot go inside another repeat.`);if(qn.includes(r)&&e.place!==void 0)throw new Error(`${t}.place: the ${r} places the steps inside it.`)}if(!Gn.includes(e.type))throw new Error(`${t}: unknown type "${e.type}".`);for(let i of["id","say","chapter"])dt(e[i],`${t}.${i}`);if(e.duration!==void 0&&_(e.duration,`${t}.duration`,0,3e4),e.nudge!==void 0){if(["pause","move","link"].includes(e.type))throw new Error(`${t}.nudge: a ${e.type} has no place of its own to move.`);if(!Array.isArray(e.nudge)||e.nudge.length!==2)throw new Error(`${t}.nudge: use [dx, dy].`);e.nudge.forEach((i,l)=>_(i,`${t}.nudge[${l}]`,-900,900))}let s=r!==null&&qn.includes(r)||o;if(e.place!==void 0){if(!bt.includes(e.type))throw new Error(`${t}.place: only ${bt.join(", ")} can be placed.`);if(K(e.place,`${t}.place`),V(e.place.to,`${t}.place.to`),!Vt(n,String(e.place.to)))throw new Error(`${t}.place.to: no earlier step has the id "${e.place.to}".`);if(!["below","above","left","right"].includes(e.place.side))throw new Error(`${t}.place.side: choose one of below, above, left, right.`);e.place.gap!==void 0&&_(e.place.gap,`${t}.place.gap`,-200,400),it(e.place.align,["center","start","end"],`${t}.place.align`)}let a=s||e.place!==void 0;if(e.style!==void 0){K(e.style,`${t}.style`);for(let i of["color","fill"]){let l=e.style[i];if(l!==void 0&&(typeof l!="string"||!/^(#[\da-f]{3,8}|[a-z]+)$/i.test(l)))throw new Error(`${t}.style.${i}: use a hex colour or a colour name, no URLs.`)}for(let i of["width","roughness","bowing"])e.style[i]!==void 0&&_(e.style[i],`${t}.style.${i}`,0,20);if(e.style.opacity!==void 0&&_(e.style.opacity,`${t}.style.opacity`,0,1),e.style.dashed!==void 0&&typeof e.style.dashed!="boolean")throw new Error(`${t}: dashed must be a boolean.`);it(e.style.fillStyle,["hachure","solid","zigzag","cross-hatch","dots"],`${t}.style.fillStyle`)}switch(e.type){case"line":case"arrow":case"highlight":tt(e.from,`${t}.from`),tt(e.to,`${t}.to`),e.thickness!==void 0&&_(e.thickness,`${t}.thickness`,1,200);break;case"polyline":case"polygon":case"curve":if(!Array.isArray(e.points)||e.points.length<(e.type==="polygon"?3:2)||e.points.length>500)throw new Error(`${t}: points needs ${e.type==="polygon"?3:2} to 500 points.`);e.points.forEach((i,l)=>tt(i,`${t}.points[${l}]`));break;case"circle":case"ellipse":kt(e,"center",t,a);for(let i of e.type==="circle"?["r"]:["rx","ry"])et(e[i],`${t}.${i}`),typeof e[i]=="number"&&_(e[i],`${t}.${i}`,0);break;case"text":kt(e,"at",t,a),V(e.text,`${t}.text`),e.size!==void 0&&_(e.size,`${t}.size`,1,200),e.rotate!==void 0&&_(e.rotate,`${t}.rotate`,-360,360),it(e.font,["hand","body"],`${t}.font`),it(e.anchor,["start","middle","end"],`${t}.anchor`);break;case"card":kt(e,"at",t,a),et(e.w,`${t}.w`),et(e.h,`${t}.h`);for(let i of["w","h"])typeof e[i]=="number"&&_(e[i],`${t}.${i}`,40);if(V(e.title,`${t}.title`),e.lines!==void 0){if(!Array.isArray(e.lines)||e.lines.length>6)throw new Error(`${t}: at most 6 lines per card.`);e.lines.forEach((i,l)=>V(i,`${t}.lines[${l}]`))}break;case"plot":V(e.fn,`${t}.fn`),e.var!==void 0&&(V(e.var,`${t}.var`),ce(String(e.var))),tt(e.domain,`${t}.domain`),tt(e.range,`${t}.range`),K(e.box,`${t}.box`);for(let i of["x","y","w","h"])et(e.box[i],`${t}.box.${i}`);if(e.samples!==void 0&&(_(e.samples,`${t}.samples`,2,1e3),!Number.isInteger(e.samples)))throw new Error(`${t}: samples must be an integer.`);break;case"pause":_(e.ms,`${t}.ms`,0,3e4),dt(e.ask,`${t}.ask`);break;case"prop":if(!Bn(e.name)&&!n.figures.has(String(e.name))){let i=n.figures.size?`, or one the recipe defines (${[...n.figures].join(", ")})`:"";throw new Error(`${t}.name: unknown prop "${String(e.name)}"; use one of ${Yt.join(", ")}${i}.`)}if(kt(e,"at",t,a),e.size!==void 0&&(et(e.size,`${t}.size`),typeof e.size=="number"&&_(e.size,`${t}.size`,10,1e3)),dt(e.label,`${t}.label`),e.flip!==void 0&&typeof e.flip!="boolean")throw new Error(`${t}.flip: expected true or false.`);if(e.mood!==void 0){if(!In(e.name))throw new Error(`${t}.mood: only a person (person, person-pointing, person-sitting) has a face.`);it(e.mood,jn,`${t}.mood`)}break;case"repeat":if(et(e.times,`${t}.times`),typeof e.times=="number"&&(_(e.times,`${t}.times`,0,Zr),!Number.isInteger(e.times)))throw new Error(`${t}.times: expected a whole number.`);Wt(e.step,`${t}.step`,n,"repeat",s);break;case"when":if(et(e.if,`${t}.if`),!Array.isArray(e.steps)||e.steps.length===0||e.steps.length>50)throw new Error(`${t}.steps: expected 1 to 50 steps.`);e.steps.forEach((i,l)=>Wt(i,`${t}.steps[${l}]`,n,r??"when"));break;case"move":if(V(e.target,`${t}.target`),!Vt(n,String(e.target)))throw new Error(`${t}.target: no earlier step has the id "${e.target}".`);tt(e.to,`${t}.to`),it(e.along,["line","curve"],`${t}.along`),e.ms!==void 0&&_(e.ms,`${t}.ms`,200,5e3);break;case"link":for(let i of["from","to"])if(V(e[i],`${t}.${i}`),!Vt(n,String(e[i])))throw new Error(`${t}.${i}: no earlier step has the id "${e[i]}".`);dt(e.label,`${t}.label`);break;case"counter":if(kt(e,"at",t,a),et(e.value,`${t}.value`),e.format!==void 0&&(V(e.format,`${t}.format`),!String(e.format).includes("{v")))throw new Error(`${t}.format: show the number as {v}, e.g. "R$ {v:0}".`);e.size!==void 0&&_(e.size,`${t}.size`,1,200),it(e.anchor,["start","middle","end"],`${t}.anchor`);break;case"row":case"column":case"grid":if(s)throw new Error(`${t}: a ${e.type} cannot go inside another ${r}.`);if(kt(e,"at",t,!1),e.gap!==void 0&&_(e.gap,`${t}.gap`,0,400),e.type==="grid"){if(_(e.columns,`${t}.columns`,1,12),!Number.isInteger(e.columns))throw new Error(`${t}.columns: expected a whole number.`)}else it(e.align,["center","start","end"],`${t}.align`);if(!Array.isArray(e.steps)||e.steps.length===0||e.steps.length>50)throw new Error(`${t}.steps: expected 1 to 50 steps.`);e.steps.forEach((i,l)=>{K(i,`${t}.steps[${l}]`);let c=i.type==="repeat"?i.step?.type:i.type;if(!bt.includes(c))throw new Error(`${t}.steps[${l}]: a ${e.type} holds only ${bt.join(", ")} (or a repeat of one).`);Wt(i,`${t}.steps[${l}]`,n,e.type)});break;case"chain":if(s)throw new Error(`${t}: a chain cannot go inside a ${r}.`);if(kt(e,"at",t,!1),e.gap!==void 0&&e.gap!=="auto"&&_(e.gap,`${t}.gap`,0,400),it(e.direction,["right","down"],`${t}.direction`),e.wrap!==void 0&&typeof e.wrap!="boolean")throw new Error(`${t}.wrap: expected true or false.`);if(dt(e.forward,`${t}.forward`),dt(e.back,`${t}.back`),e.size!==void 0&&(et(e.size,`${t}.size`),typeof e.size=="number"&&_(e.size,`${t}.size`,10,1e3)),!Array.isArray(e.steps)||e.steps.length<2||e.steps.length>12)throw new Error(`${t}.steps: a chain joins 2 to 12 pieces.`);e.steps.forEach((i,l)=>{if(K(i,`${t}.steps[${l}]`),!bt.includes(i.type))throw new Error(`${t}.steps[${l}]: a chain holds only ${bt.join(", ")}.`);Wt(i,`${t}.steps[${l}]`,n,"chain")});break;case"axis":case"timeline":if(tt(e.from,`${t}.from`),tt(e.to,`${t}.to`),tt(e.domain,`${t}.domain`),e.type==="axis"){if(e.ticks!==void 0){if(Array.isArray(e.ticks)){if(e.ticks.length>30)throw new Error(`${t}.ticks: at most 30 marks.`);e.ticks.forEach((i,l)=>_(i,`${t}.ticks[${l}]`))}else if(_(e.ticks,`${t}.ticks`,0,30),!Number.isInteger(e.ticks))throw new Error(`${t}.ticks: expected a whole number.`)}if(dt(e.label,`${t}.label`),e.format!==void 0&&(V(e.format,`${t}.format`),!String(e.format).includes("{v")))throw new Error(`${t}.format: show the number as {v}, e.g. "{v} km".`)}else{if(!Array.isArray(e.marks)||e.marks.length===0||e.marks.length>20)throw new Error(`${t}.marks: expected 1 to 20 marks.`);e.marks.forEach((i,l)=>{K(i,`${t}.marks[${l}]`),et(i.at,`${t}.marks[${l}].at`),dt(i.label,`${t}.marks[${l}].label`),dt(i.text,`${t}.marks[${l}].text`)})}break;case"balloon":if(V(e.to,`${t}.to`),!Vt(n,String(e.to)))throw new Error(`${t}.to: no earlier step has the id "${e.to}".`);if(V(e.text,`${t}.text`),String(e.text).length>300)throw new Error(`${t}.text: keep a balloon under 300 characters.`);it(e.side,["below","above","left","right"],`${t}.side`),it(e.kind,["speech","thought"],`${t}.kind`),e.width!==void 0&&_(e.width,`${t}.width`,80,600),e.size!==void 0&&_(e.size,`${t}.size`,12,60);break;case"brace":if(tt(e.from,`${t}.from`),tt(e.to,`${t}.to`),dt(e.label,`${t}.label`),e.flip!==void 0&&typeof e.flip!="boolean")throw new Error(`${t}.flip: expected true or false.`);break;case"note":if(tt(e.at,`${t}.at`),V(e.text,`${t}.text`),e.to===void 0==(e.point===void 0))throw new Error(`${t}: a note points either to an element (to) or to a point (point).`);if(e.to!==void 0){if(V(e.to,`${t}.to`),!Vt(n,String(e.to)))throw new Error(`${t}.to: no earlier step has the id "${e.to}".`)}else tt(e.point,`${t}.point`);e.size!==void 0&&_(e.size,`${t}.size`,12,60);break;case"table":if(tt(e.at,`${t}.at`),!Array.isArray(e.rows)||e.rows.length===0||e.rows.length>12)throw new Error(`${t}.rows: expected 1 to 12 rows.`);if(e.rows.forEach((i,l)=>{if(!Array.isArray(i)||i.length===0||i.length>6)throw new Error(`${t}.rows[${l}]: expected 1 to 6 cells.`);i.forEach((c,h)=>{if(typeof c!="string"||c.length>120)throw new Error(`${t}.rows[${l}][${h}]: expected text of up to 120 characters.`)})}),e.header!==void 0&&typeof e.header!="boolean")throw new Error(`${t}.header: expected true or false.`);e.size!==void 0&&_(e.size,`${t}.size`,12,40);break;case"bars":K(e.box,`${t}.box`);for(let i of["x","y","w","h"])et(e.box[i],`${t}.box.${i}`);if(!Array.isArray(e.values)||e.values.length===0||e.values.length>12)throw new Error(`${t}.values: expected 1 to 12 values.`);if(e.values.forEach((i,l)=>et(i,`${t}.values[${l}]`)),e.labels!==void 0){if(!Array.isArray(e.labels)||e.labels.length>e.values.length)throw new Error(`${t}.labels: at most one label per value.`);e.labels.forEach((i,l)=>V(i,`${t}.labels[${l}]`))}if(e.max!==void 0&&et(e.max,`${t}.max`),e.format!==void 0&&(V(e.format,`${t}.format`),!String(e.format).includes("{v")))throw new Error(`${t}.format: show the number as {v}, e.g. "{v}%".`);break}typeof e.id=="string"&&(r==="repeat"?n.repeated:n.exact).add(e.id)}function Kr(e,t){let n=`defs.${e}`;if(!/^[a-z][a-z0-9-]{1,30}$/.test(e))throw new Error(`${n}: a figure's name is 2 to 31 lowercase letters, digits or -, starting with a letter.`);if(zt(e)||Object.hasOwn(Tt,e)||Gn.includes(e)||["define","title","param","switch","var"].includes(e))throw new Error(`${n}: "${e}" is already a prop or a step; choose another name.`);if(K(t,n),!Array.isArray(t.shapes)||t.shapes.length===0||t.shapes.length>Dn)throw new Error(`${n}.shapes: expected 1 to ${Dn} shapes.`);let r=(o,s)=>{if(typeof o!="number"||!Number.isInteger(o)||o<0||o>100)throw new Error(`${s}: expected a whole number from 0 to 100 (the figure's grid, y down; it stands at 50,100).`)};t.shapes.forEach((o,s)=>{let a=`${n}.shapes[${s}]`;if(K(o,a),o.fill!==void 0&&(typeof o.fill!="string"||!/^(#[0-9a-fA-F]{3,8}|[a-z]{3,20})$/.test(o.fill)))throw new Error(`${a}.fill: a colour, as hex or a plain name.`);if(o.kind==="circle"){if(!Array.isArray(o.c)||o.c.length!==2)throw new Error(`${a}.c: expected [x, y].`);o.c.forEach((l,c)=>r(l,`${a}.c[${c}]`)),r(o.r,`${a}.r`);return}if(!["polygon","polyline","curve"].includes(o.kind))throw new Error(`${a}.kind: choose one of polygon, polyline, curve, circle.`);let i=o.kind==="polygon"?3:2;if(!Array.isArray(o.points)||o.points.length<i||o.points.length>40)throw new Error(`${a}.points: a ${o.kind} takes ${i} to 40 points.`);o.points.forEach((l,c)=>{if(!Array.isArray(l)||l.length!==2)throw new Error(`${a}.points[${c}]: expected [x, y].`);l.forEach((h,u)=>r(h,`${a}.points[${c}][${u}]`))})})}function qe(e){K(e,"The recipe");let t=e;_(t.width,"width",100,4e3),_(t.height,"height",100,4e3);for(let o of["id","title","category"])dt(t[o],o);if(t.locale!==void 0&&!(typeof t.locale=="string"&&/^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$/.test(t.locale)&&Intl.NumberFormat.supportedLocalesOf([t.locale]).length>0))throw new Error('locale: expected a language tag such as "en-US" or "pt-BR".');if(it(t.background,["dots","grid","plain"],"background"),it(t.theme,["paper","chalkboard"],"theme"),t.quiz!==void 0){if(K(t.quiz,"quiz"),V(t.quiz.question,"quiz.question"),!Array.isArray(t.quiz.options)||t.quiz.options.length<2||t.quiz.options.length>4)throw new Error("quiz.options: expected 2 to 4 options.");if(t.quiz.options.forEach((o,s)=>{if(K(o,`quiz.options[${s}]`),V(o.text,`quiz.options[${s}].text`),V(o.why,`quiz.options[${s}].why`),typeof o.right!="boolean")throw new Error(`quiz.options[${s}].right: expected true or false.`)}),t.quiz.options.filter(o=>o.right===!0).length!==1)throw new Error("quiz.options: exactly one option is right.")}if(t.learning!==void 0){K(t.learning,"learning");for(let o of["goal","question","answer","caveat"])V(t.learning[o],`learning.${o}`)}if(t.params!==void 0){K(t.params,"params");for(let[o,s]of Object.entries(t.params))if(ce(o),K(s,`params.${o}`),V(s.label,`params.${o}.label`),_(s.min,`${o}.min`),_(s.max,`${o}.max`),_(s.step,`${o}.step`,1e-6),_(s.value,`${o}.value`,s.min,s.max),s.max<=s.min)throw new Error(`${o}: max must be greater than min.`)}if(t.vars!==void 0){K(t.vars,"vars");for(let[o,s]of Object.entries(t.vars))ce(o),et(s,`vars.${o}`)}if(t.switches!==void 0){K(t.switches,"switches");let o=Object.entries(t.switches);if(o.length>8)throw new Error("switches: at most 8.");for(let[s,a]of o){if(ce(s),Object.hasOwn(t.params??{},s)||Object.hasOwn(t.vars??{},s))throw new Error(`switches.${s}: the name is already a param or a var.`);if(K(a,`switches.${s}`),V(a.label,`switches.${s}.label`),typeof a.on!="boolean")throw new Error(`switches.${s}.on: expected true or false.`)}}if(!Array.isArray(t.steps)||t.steps.length===0||t.steps.length>250)throw new Error("A recipe needs 1 to 250 steps.");let n=new Set;if(t.defs!==void 0){K(t.defs,"defs");let o=Object.entries(t.defs);if(o.length>_n)throw new Error(`defs: at most ${_n} figures.`);for(let[s,a]of o)Kr(s,a),n.add(s)}let r={exact:new Set,repeated:new Set,count:0,figures:n};return t.steps.forEach((o,s)=>Wt(o,`Step ${s+1}`,r,null)),{...t,id:t.id??"pasted",title:t.title??"",background:t.background??"dots"}}function le(e,t="Start"){let n=e.steps.flatMap((r,o)=>r.chapter?[{title:r.chapter,start:o}]:[]);return(!n.length||n[0].start!==0)&&n.unshift({title:t,start:0}),n.map((r,o)=>({...r,end:(n[o+1]?.start??e.steps.length)-1}))}var Qr=50,Jr=(e,t)=>Math.max(0,Math.min(Qr,Math.round(R(e,t)))),Bt=(e,t)=>t===0?e:typeof e=="number"?Math.round((e+t)*100)/100:`(${e})${t<0?"-":"+"}${Math.abs(t)}`,pt=(e,t,n)=>[Bt(e[0],t),Bt(e[1],n)];function $t(e,t,n){switch(e.type){case"prop":case"text":case"card":case"counter":return{...e,at:pt(e.at,t,n)};case"circle":case"ellipse":return{...e,center:pt(e.center,t,n)};case"line":case"arrow":case"highlight":return{...e,from:pt(e.from,t,n),to:pt(e.to,t,n)};case"polyline":case"polygon":case"curve":return{...e,points:e.points.map(r=>pt(r,t,n))};case"plot":return{...e,box:{...e.box,x:Bt(e.box.x,t),y:Bt(e.box.y,n)}};case"repeat":return{...e,step:$t(e.step,t,n)};case"row":case"column":case"grid":case"chain":return{...e,at:pt(e.at,t,n)};case"axis":case"timeline":case"brace":return{...e,from:pt(e.from,t,n),to:pt(e.to,t,n)};case"note":return{...e,at:pt(e.at,t,n),...e.point?{point:pt(e.point,t,n)}:{}};case"table":return{...e,at:pt(e.at,t,n)};case"bars":return{...e,box:{...e.box,x:Bt(e.box.x,t),y:Bt(e.box.y,n)}};case"when":return{...e,steps:e.steps.map(r=>$t(r,t,n))};default:return e}}function vt(e,t,n=[]){if(e.nudge){let{nudge:r,...o}=e;return vt($t(o,r[0],r[1]),t,n).map(s=>({...s,nudge:[(s.nudge?.[0]??0)+r[0],(s.nudge?.[1]??0)+r[1]]}))}return e.type==="repeat"?Array.from({length:Jr(e.times,t)},(r,o)=>vt(e.step,{...t,i:o},[...n,o]).map(s=>({...s,id:s.id&&`${s.id}-${o}`}))).flat():e.type==="when"?R(e.if,t)!==0?e.steps.flatMap((r,o)=>vt(r,t,[...n,o])):[]:[{step:e,scope:t,path:n,id:e.id}]}var St=(e,t)=>e.includes("{")?st(e,t):e;function Yn(e,t){let n=r=>[R(r[0],t),R(r[1],t)];switch(e.type){case"prop":case"text":case"card":case"counter":return n(e.at);case"circle":case"ellipse":return n(e.center);case"line":case"arrow":case"highlight":return n(e.from);case"polyline":case"polygon":case"curve":return n(e.points[0]);case"plot":return[R(e.box.x,t),R(e.box.y,t)];case"row":case"column":case"grid":case"chain":return n(e.at);case"axis":case"timeline":case"brace":return n(e.from);case"note":case"table":return n(e.at);case"bars":return[R(e.box.x,t),R(e.box.y,t)];default:return null}}function Rt(e,t,n=0){let[r,o]=[e.x+e.w/2,e.y+e.h/2],[s,a]=[t[0]-r,t[1]-o],i=Math.hypot(s,a);if(i===0)return[r,o];let l=s===0?1/0:e.w/2/Math.abs(s),c=a===0?1/0:e.h/2/Math.abs(a),h=Math.min(l,c);return[r+s*h+s/i*n,o+a*h+a/i*n]}function Xe(e,t,n=8){let r=[e.x+e.w/2,e.y+e.h/2],o=[t.x+t.w/2,t.y+t.h/2];return[Rt(e,o,n),Rt(t,r,n)]}function Vn(e,t,n=16){let[r,o]=[t[0]-e[0],t[1]-e[1]],s=Math.hypot(r,o)||1,[a,i]=[-o/s,r/s];(i>0||i===0&&a<0)&&([a,i]=[-a,-i]);let l=[(e[0]+t[0])/2,(e[1]+t[1])/2];return{at:[l[0]+a*n,l[1]+i*n],anchor:a>.5?"start":a<-.5?"end":"middle"}}function Ye(e,t,n,r="line"){if(r==="line")return[e[0]+(t[0]-e[0])*n,e[1]+(t[1]-e[1])*n];let[o,s]=[t[0]-e[0],t[1]-e[1]],a=Math.hypot(o,s),[i,l]=a?[-s/a,o/a]:[0,0];l>0&&([i,l]=[-i,-l]);let c=[(e[0]+t[0])/2+i*a*.3,(e[1]+t[1])/2+l*a*.3],h=1-n;return[h*h*e[0]+2*h*n*c[0]+n*n*t[0],h*h*e[1]+2*h*n*c[1]+n*n*t[1]]}var Ve=(e,t)=>Number.isInteger(e)?Math.round(e*t):e*t,ue=(e,t,n,r)=>st(e??"{v}",{...n,v:t},r);function he(e){let t=0;for(let n of e)n.type==="move"&&n.ms?t=Math.max(t,n.ms):n.type==="repeat"?t=Math.max(t,he([n.step])):n.type==="when"&&(t=Math.max(t,he(n.steps)));return t}var at=e=>Math.round(e*100)/100,Xn=e=>Math.max(0,e.w)*Math.max(0,e.h);function to(e,t){let n=Math.min(e.x+e.w,t.x+t.w)-Math.max(e.x,t.x),r=Math.min(e.y+e.h,t.y+t.h)-Math.max(e.y,t.y);return n>0&&r>0?n*r:0}function We(e,t,n,r=24,o="center"){let s=(l,c,h)=>o==="start"?l:o==="end"?l+c-h:l+(c-h)/2,[a,i]=n==="below"?[s(t.x,t.w,e.w),t.y+t.h+r]:n==="above"?[s(t.x,t.w,e.w),t.y-r-e.h]:n==="right"?[t.x+t.w+r,s(t.y,t.h,e.h)]:[t.x-r-e.w,s(t.y,t.h,e.h)];return[at(a-e.x),at(i-e.y)]}function Wn(e,t,n,r=24,o="center",s=1){if(!t.length)return[];if(e==="grid"){let c=Math.max(1,s),h=Math.max(...t.map(d=>d.w)),u=Math.max(...t.map(d=>d.h));return t.map((d,p)=>{let[f,m]=[p%c,Math.floor(p/c)];return[at(n[0]+f*(h+r)+(h-d.w)/2-d.x),at(n[1]+m*(u+r)+(u-d.h)/2-d.y)]})}let a=e==="row",i=Math.max(...t.map(c=>a?c.h:c.w)),l=a?n[0]:n[1];return t.map(c=>{let[h,u]=a?[c.w,c.h]:[c.h,c.w],d=o==="start"?0:o==="end"?i-u:(i-u)/2,[p,f]=a?[l,n[1]+d]:[n[0]+d,l];return l+=h+r,[at(p-c.x),at(f-c.y)]})}var Ge=16,eo=240,no=90;function Hn(e,t,n,r={},o=30){if(!e.length)return{deltas:[],lines:[]};let s=r.direction==="down",a=p=>s?p.h:p.w,i=(s?n.h-t[1]:n.w-t[0])-o,l=p=>r.gap!==void 0&&r.gap!=="auto"?r.gap:p.length<2?Ge:Math.min(eo,Math.max(Ge,(i-p.reduce((f,m)=>f+m,0))/(p.length-1))),c=[[]],h=0;e.forEach((p,f)=>{let m=c[c.length-1],g=(m.length?Ge:0)+a(p);r.wrap&&m.length&&h+g>i?(c.push([f]),h=a(p)):(m.push(f),h+=g)});let u=new Array(e.length),d=s?t[0]:t[1];for(let p of c){let f=l(p.map(b=>a(e[b]))),m=Math.max(...p.map(b=>s?e[b].w:e[b].h)),g=s?t[1]:t[0];for(let b of p){let y=e[b],[x,k]=s?[d+(m-y.w)/2,g]:[g,d+m-y.h];u[b]=[at(x-y.x),at(k-y.y)],g+=a(y)+f}d+=m+no}return{deltas:u,lines:c}}function Un(e,t,n=!1,r=8){if(n){let[i,l]=[e.x+e.w/2,t.x+t.w/2],[c,h]=[e.y+e.h+24,t.y-24],u=(e.x+e.w+t.x)/2;return[[i,e.y+e.h+r],[i,c],[u,c],[u,h],[l,h],[l,t.y-r]]}let o=e.x+e.w+24,s=(e.y+e.h+t.y)/2,a=t.x+t.w/2;return[[e.x+e.w+r,e.y+e.h/2],[o,e.y+e.h/2],[o,s],[a,s],[a,t.y-r]]}function He(e,t,n,r=30){let o=(s,a,i)=>a>i-2*r?s<0||s+a>i?(i-a)/2-s:0:s<0?r-s:s+a>i?i-r-(s+a):0;return[at(o(e.x,e.w,t)),at(o(e.y,e.h,n))]}function Zn(e,t,n,r=60,o=4){let s=a=>t.some(i=>to(a,i)>.2*Math.min(Xn(a),Xn(i)));if(!s(e))return 0;for(let a=o;a<=r;a+=o)for(let i of[a,-a]){let l={...e,y:e.y+i};if(l.y>=0&&l.y+l.h<=n&&!s(l))return i}return 0}function Kn(e,t){if(Array.isArray(t))return t;let n=t??5;return n===0?[]:Array.from({length:n+1},(r,o)=>at(e[0]+(e[1]-e[0])*o/n))}function Ue(e,t,n,r){let o=(r-n[0])/(n[1]-n[0]);return!Number.isFinite(o)||o<-1e-9||o>1+1e-9?null:[at(e[0]+(t[0]-e[0])*o),at(e[1]+(t[1]-e[1])*o)]}function Ze(e,t){let[n,r]=[t[0]-e[0],t[1]-e[1]],o=Math.hypot(n,r)||1,s=[-r/o,n/o];return(Math.abs(n)>=Math.abs(r)?s[1]<0:s[0]>0)&&(s=[-s[0],-s[1]]),[s[0]||0,s[1]||0]}var ro="http://www.w3.org/2000/svg",ft="#2B2B2B",oo={"#2b2b2b":"#F4F1E8","#242424":"#F4F1E8",black:"#F4F1E8","#2f5bea":"#A8C1FF","#1f4e9a":"#A8C1FF",blue:"#A8C1FF","#c8442c":"#FF9F8A",red:"#FF9F8A","#2e8f62":"#93E2AE","#0e7a0b":"#93E2AE",green:"#93E2AE","#8c8578":"#CFC9BC","#5e5a52":"#D9D3C6",grey:"#CFC9BC",gray:"#CFC9BC","#ffffff":"#34493D","#fff":"#34493D",white:"#34493D"},so=["text","card","prop","counter"],Ke={hand:"'Caveat', cursive",body:"'Shantell Sans', system-ui, sans-serif"},jt=class extends Error{},Qn=e=>e<.5?2*e*e:1-Math.pow(-2*e+2,2)/2,io="cubic-bezier(.45,0,.55,1)",Jn="@keyframes ct-draw{from{stroke-dasharray:var(--l) var(--l);stroke-dashoffset:var(--l)}to{stroke-dasharray:var(--l) var(--l);stroke-dashoffset:0}}@keyframes ct-write{from{transform:scaleX(0)}}@keyframes ct-fade{from{opacity:0}}@keyframes ct-show{0%,100%{opacity:1}}@keyframes ct-wait{0%,100%{opacity:0}}@keyframes ct-move{from{transform:translate(var(--fx),var(--fy))}50%{transform:translate(var(--mx),var(--my))}}@media (prefers-reduced-motion:reduce){*{animation:none!important}}";function q(e,t={}){let n=document.createElementNS(ro,e);for(let[r,o]of Object.entries(t))n.setAttribute(r,String(o));return n}var Qe=e=>[e.x+e.w/2,e.y+e.h/2];function ao(e){return 1e3+e*97}function Je(e,t=e.steps.length-1){let n=[],r=Math.min(t,e.steps.length-1);for(let o=0;o<=r;){let s=e.steps[o],a=o;if(s.type!=="pause")for(;a<r;){let l=e.steps[a+1];if(l.type==="pause"||l.say||l.chapter)break;a++}let i=s.type==="pause"?s.ms:s.duration===0?0:Math.min(1600,Math.max(1e3,s.duration??(s.type==="text"?1400:1100)));n.push({start:o,end:a,duration:s.type==="pause"?i:Math.max(i,he(e.steps.slice(o,a+1)))}),o=a+1}return n}function de(e,t){let n={};for(let[r,o]of Object.entries(e.params??{}))n[r]=t[r]??o.value;for(let[r,o]of Object.entries(e.switches??{}))n[r]=t[r]??(o.on?1:0)?1:0;for(let[r,o]of Object.entries(e.vars??{}))n[r]=R(o,n);return n}var co=0,ct=class{constructor(t,n=()=>{}){Y(this,"uid",`dw${++co}`);Y(this,"gen",Pn.generator());Y(this,"run",0);Y(this,"speed",1);Y(this,"layers");Y(this,"defs");Y(this,"named",new Map);Y(this,"locale");Y(this,"paper",{w:0,h:0});Y(this,"textBoxes",[]);Y(this,"leafNudge");Y(this,"theme","paper");Y(this,"css",!1);Y(this,"figures",{});Y(this,"svg");Y(this,"onSay");this.svg=t,this.onSay=n}stop(){this.run++,this.layers&&(this.layers.pencil.style.opacity="0")}setSpeed(t){if(!Number.isFinite(t)||t<=0)throw new Error("The speed must be a positive number.");this.speed=t}async render(t,n,r){let o=++this.run;this.setSpeed(r.speed??1);let s=de(t,n);this.locale=t.locale,this.theme=r.theme??t.theme??"paper",this.css=!!r.css&&!r.animate,this.setup(t);let a=0;try{for(let i of Je(t,r.until)){if(o!==this.run)throw new jt;let l=[],c,h=r.animate&&i.start>=(r.from??0);for(let u=i.start;u<=i.end;u++){let d=t.steps[u];if(r.onStep?.(u),d.say&&this.onSay(c=st(d.say,s,t.locale)),d.type!=="pause"){let p=this.made(()=>{for(let f of vt(d,s))l.push(...this.buildLeaf(f,u,h))});for(let f of p)f.dataset.step=String(u)}}if(this.css&&(t.steps[i.start].type!=="pause"&&this.schedule(l,a,i.duration),a+=i.duration),h&&r.beforeBeat&&(await r.beforeBeat(c,i.start),o!==this.run))throw new jt;h&&(t.steps[i.start].type==="pause"?(this.layers.pencil.style.opacity="0",await this.tween(i.duration,o,()=>{})):await this.play(l,i.duration,o))}r.animate&&(this.layers.pencil.style.opacity="0")}catch(i){if(!(i instanceof jt))throw i}}setup(t){this.figures=lo(t.defs);let n=this.svg;n.replaceChildren(),n.setAttribute("viewBox",`0 0 ${t.width} ${t.height}`),n.style.aspectRatio=`${t.width} / ${t.height}`,n.setAttribute("aria-label",t.title),this.defs=q("defs"),n.append(this.defs);let r=t.background??"dots",o=this.theme==="chalkboard";if(r!=="plain"){let l=q("pattern",{id:`${this.uid}-paper`,width:r==="grid"?24:22,height:r==="grid"?24:22,patternUnits:"userSpaceOnUse"});l.append(r==="grid"?q("path",{d:"M24 0H0V24",fill:"none",stroke:o?"#33473B":"#DCE5EF","stroke-width":1}):q("circle",{cx:11,cy:11,r:1.2,fill:o?"#3A5043":"#D9D2C3"})),this.defs.append(l)}n.append(q("rect",{width:t.width,height:t.height,fill:o?"#26372E":"#FBF7EE"})),r!=="plain"&&n.append(q("rect",{width:t.width,height:t.height,fill:`url(#${this.uid}-paper)`}));let s=q("g"),a=q("g"),i=this.makePencil();n.append(s,a,i),this.layers={highlight:s,ink:a,pencil:i},this.named.clear(),this.paper={w:t.width,h:t.height},this.textBoxes=[]}made(t){let n=[this.layers.ink,this.layers.highlight],r=n.map(o=>o.childElementCount);return t(),n.flatMap((o,s)=>[...o.children].slice(r[s]))}seedOf(t,n){return ao(t)+n.reduce((r,o)=>r*31+o+1,0)*7}buildLeaf(t,n,r){var h;let o=t.step.type;if(o==="row"||o==="column"||o==="grid")return this.arrange(t,n,r);if(o==="chain")return this.chain(t,n,r);let s=[n,...t.path].join("_"),a=this.seedOf(n,t.path),i=t.arranged?t.step:this.settle(t,s,a),l=[];this.leafNudge=t.nudge;let c=this.made(()=>{l=this.build(i,s,a,t.scope,r)});this.leafNudge=void 0;for(let u of c)(h=u.dataset).type??(h.type=i.type);if(c.length&&(i.type==="text"||i.type==="counter")&&this.textBoxes.push(this.boxOf(c,0,0)),t.id&&c.length){let u=Yn(i,t.scope)??Qe(this.boxOf(c,0,0));this.named.set(t.id,{els:c,anchor:u,dx:0,dy:0})}return l}measure(t){let n=[this.layers.ink,this.layers.highlight,this.defs],r=n.map(i=>i.childElementCount);t();let o=n.map((i,l)=>[...i.children].slice(r[l])),s=[...o[0],...o[1]],a=s.length?this.boxOf(s,0,0):null;return o.flat().forEach(i=>i.remove()),a}settle(t,n,r){let o=t.step,s=o.type==="text"?!o.rotate:so.includes(o.type);if(!(o.place&&bt.includes(o.type))&&!s)return o;let a=this.measure(()=>this.build(o,n,r,t.scope,!1));if(!a)return o;let[i,l]=[0,0],c=o.place&&this.named.get(St(o.place.to,t.scope));if(o.place&&c&&([i,l]=We(a,this.boxOf(c.els,c.dx,c.dy),o.place.side,o.place.gap,o.place.align),i+=t.nudge?.[0]??0,l+=t.nudge?.[1]??0),s){let h={...a,x:a.x+i,y:a.y+l},[u,d]=He(h,this.paper.w,this.paper.h);i+=u,l+=d,(o.type==="text"||o.type==="counter")&&(l+=Zn({...h,x:h.x+u,y:h.y+d},this.textBoxes,this.paper.h))}return i||l?$t(o,i,l):o}arrange(t,n,r){let o=t.step,s=o.steps.flatMap((h,u)=>vt(h,t.scope,[...t.path,u])),a=s.map(h=>this.measure(()=>this.build(h.step,[n,...h.path].join("_"),this.seedOf(n,h.path),h.scope,!1))??{x:0,y:0,w:0,h:0}),i=Wn(o.type,a,this.pt(o.at,t.scope),o.gap??24,o.type==="grid"?"center":o.align??"center",o.type==="grid"?o.columns:1),l=[],c=this.made(()=>{l=s.flatMap((h,u)=>this.buildLeaf({...h,step:$t(h.step,...i[u]),arranged:!0},n,r))});if(t.id&&c.length){let h=this.boxOf(c,0,0);this.named.set(t.id,{els:c,anchor:Qe(h),dx:0,dy:0})}return l}chain(t,n,r){let o=t.step,a=o.steps.map(m=>o.size!==void 0&&m.type==="prop"&&m.size===void 0?{...m,size:o.size}:m).flatMap((m,g)=>vt(m,t.scope,[...t.path,g])),i=a.map(m=>this.measure(()=>this.build(m.step,[n,...m.path].join("_"),this.seedOf(n,m.path),m.scope,!1))??{x:0,y:0,w:0,h:0}),l=o.direction==="down",{deltas:c,lines:h}=Hn(i,this.pt(o.at,t.scope),this.paper,{gap:o.gap,direction:o.direction,wrap:o.wrap}),u=i.map((m,g)=>({...m,x:m.x+c[g][0],y:m.y+c[g][1]})),d=this.roughOpts(o.style,this.seedOf(n,[...t.path,99])),p=[],f=this.made(()=>{p=a.flatMap((y,x)=>this.buildLeaf({...y,step:$t(y.step,...c[x]),arranged:!0},n,r));let m={...o.style,color:o.style?.color??"#8C8578"};h.forEach((y,x)=>{y.slice(1).forEach(E=>p.push(...this.arrow(...Xe(u[E-1],u[E]),{...d,seed:d.seed+E},m,r)));let k=h[x+1];if(!k)return;let $=Un(u[y[y.length-1]],u[k[0]],l);p.push(...this.addDrawable(this.gen.linearPath($.slice(0,-1),{...d,seed:d.seed+50+x}),m,r)),p.push(...this.arrow($[$.length-2],$[$.length-1],{...d,seed:d.seed+60+x},m,r))});let g={x:Math.min(...u.map(y=>y.x)),y:Math.min(...u.map(y=>y.y)),w:0,h:0};g.w=Math.max(...u.map(y=>y.x+y.w))-g.x,g.h=Math.max(...u.map(y=>y.y+y.h))-g.y;let b=(y,x,k,$)=>{let E=34+x*70,[v,z]=l?[[g.x+g.w+E,g.y],[g.x+g.w+E,g.y+g.h]]:[[g.x,g.y+g.h+E],[g.x+g.w,g.y+g.h+E]],C={...o.style,color:k,width:3};p.push(...this.arrow($?z:v,$?v:z,{...this.roughOpts(C,d.seed+80+x)},C,r));let L=l?{type:"text",at:[v[0]+14,(v[1]+z[1])/2],text:y,size:24,anchor:"start",style:{color:k}}:{type:"text",at:[(v[0]+z[0])/2,v[1]+32],text:y,size:24,anchor:"middle",style:{color:k}};p.push(this.addText(L,`${n}-chain-${x}`,t.scope,r))};o.forward&&b(o.forward,0,"#2E8F62",!1),o.back&&b(o.back,o.forward?1:0,"#2F5BEA",!0)});if(t.id&&f.length){let m=this.boxOf(f,0,0);this.named.set(t.id,{els:f,anchor:Qe(m),dx:0,dy:0})}return p}boxOf(t,n,r){let o=t.map(c=>c.getBBox()),s=Math.min(...o.map(c=>c.x)),a=Math.min(...o.map(c=>c.y)),i=Math.max(...o.map(c=>c.x+c.width))-s,l=Math.max(...o.map(c=>c.y+c.height))-a;return{x:s+n,y:a+r,w:i,h:l}}place(t,n,r){for(let o of t.els)o.dataset.base===void 0&&(o.dataset.base=o.getAttribute("transform")??""),o.setAttribute("transform",`translate(${n} ${r}) ${o.dataset.base}`.trim()),o.dataset.dx=String(n),o.dataset.dy=String(r)}makePencil(){let t=q("g",{"aria-hidden":"true",class:"dw-pencil"});t.style.opacity="0",t.style.transition="opacity .25s",t.style.pointerEvents="none";let n=q("g",{transform:"translate(-3,-46) scale(1.15)"});return n.append(q("path",{d:"M3 40 L 8 28 L 33 3 L 41 11 L 16 36 Z",fill:"#FFD25E",stroke:ft,"stroke-width":2,"stroke-linejoin":"round"}),q("path",{d:"M3 40 L 8 28 L 16 36 Z",fill:"#F1D9B5",stroke:ft,"stroke-width":2,"stroke-linejoin":"round"}),q("path",{d:"M3 40 L 5.3 34.4 L 8.6 37.7 Z",fill:ft}),q("path",{d:"M29 7 L 37 15",stroke:ft,"stroke-width":2})),t.append(n),t}roughOpts(t,n){return{stroke:t?.color??ft,strokeWidth:t?.width??2.6,roughness:t?.roughness??1.6,bowing:t?.bowing??1.4,fill:t?.fill,fillStyle:t?.fillStyle??"hachure",hachureGap:7,seed:n}}tint(t){return t&&this.theme==="chalkboard"?oo[t.toLowerCase()]??t:t}pt(t,n){return[R(t[0],n),R(t[1],n)]}build(t,n,r,o,s){let a=this.roughOpts(t.style,r),i=this.gen,l=c=>this.pt(c,o);switch(t.type){case"card":{let[c,h]=l(t.at),u=R(t.w,o),d=R(t.h,o),p=t.lines??[];if(u<40||d<70+p.length*28)throw new Error(`Card "${t.title}": not enough room for its content.`);let f=this.addDrawable(i.rectangle(c,h,u,d,a),t.style,s);return[t.title,...p].forEach((g,b)=>{let y=this.addText({type:"text",at:[c+u/2,h+38+b*28],text:g,size:b===0?30:22,anchor:"middle",style:{color:t.style?.color}},`${n}-${b}`,o,s);if(y.width>u-24)throw new Error(`Card "${t.title}": text too wide; raise w or shorten the line.`);f.push(y)}),f}case"line":return this.addDrawable(i.line(...l(t.from),...l(t.to),a),t.style,s);case"arrow":return this.arrow(l(t.from),l(t.to),a,t.style,s);case"polyline":return this.addDrawable(i.linearPath(t.points.map(l),a),t.style,s);case"polygon":return this.addDrawable(i.polygon(t.points.map(l),a),t.style,s);case"curve":return this.addDrawable(i.curve(t.points.map(l),a),t.style,s);case"circle":{let[c,h]=l(t.center);return this.addDrawable(i.circle(c,h,R(t.r,o)*2,a),t.style,s)}case"ellipse":{let[c,h]=l(t.center);return this.addDrawable(i.ellipse(c,h,R(t.rx,o)*2,R(t.ry,o)*2,a),t.style,s)}case"plot":return this.addDrawable(i.curve(this.samplePlot(t,o),a),t.style,s);case"highlight":{let[c,h]=l(t.from),[u,d]=l(t.to),p=q("path",{d:`M${c} ${h} L${u} ${d}`,stroke:this.theme==="chalkboard"&&!t.style?.color?"#7C6E26":this.tint(t.style?.color??"#FFE45C")??"#FFE45C","stroke-width":t.thickness??18,"stroke-linecap":"round",fill:"none",opacity:t.style?.opacity??.8});return p.dataset.marker="1",this.layers.highlight.append(p),[this.hide(p,s)]}case"text":return[this.addText(t,n,o,s)];case"pause":case"repeat":case"when":case"row":case"column":case"grid":case"chain":return[];case"axis":case"timeline":return this.line(t,n,a,o,s);case"balloon":return this.balloon(t,n,a,o,s);case"brace":return this.brace(t,n,a,o,s);case"note":return this.note(t,n,a,o,s);case"table":return this.table(t,n,a,o,s);case"bars":return this.bars(t,n,a,o,s);case"prop":return this.prop(t,n,a,o,s);case"counter":{let[c,h]=l(t.at),u=R(t.value,o),d=q("g"),p=q("text",{x:c,y:h,fill:this.tint(t.style?.color??ft)??ft,"font-family":Ke.hand,"font-size":t.size??34,"font-weight":700,"text-anchor":t.anchor??"start"});return p.textContent=ue(t.format,s?0:u,o,this.locale),d.append(p),this.layers.ink.append(d),[{kind:"count",el:p,format:t.format,value:u,scope:o,locale:this.locale}]}case"link":{let[c,h]=[this.named.get(St(t.from,o)),this.named.get(St(t.to,o))];if(!c||!h)return[];let[u,d]=Xe(this.boxOf(c.els,c.dx,c.dy),this.boxOf(h.els,h.dx,h.dy)),p=this.arrow(u,d,a,t.style,s);if(t.label){let f=Vn(u,d);p.push(this.addText({type:"text",at:f.at,text:t.label,size:22,anchor:f.anchor,style:{color:t.style?.color}},`${n}-label`,o,s))}return p}case"move":{let c=this.named.get(St(t.target,o));if(!c)return[];let[h,u]=l(t.to),d=[c.dx,c.dy],p=[h-c.anchor[0],u-c.anchor[1]];return[c.dx,c.dy]=p,s?[{kind:"move",entry:c,from:d,to:p,along:t.along??"line",ms:t.ms}]:(this.place(c,...p),this.css?[{kind:"move",entry:c,from:d,to:p,along:t.along??"line",ms:t.ms}]:[])}}}line(t,n,r,o,s){let[a,i]=[this.pt(t.from,o),this.pt(t.to,o)],l=[R(t.domain[0],o),R(t.domain[1],o)];if(l[0]===l[1])throw new Error(`${t.type==="axis"?"Axis":"Timeline"}: the domain needs two different ends.`);let c=Ze(a,i),h=Math.abs(i[0]-a[0])>=Math.abs(i[1]-a[1]),u=t.style?.color,d=(g,b,y,x=22,k=h?"middle":c[0]<0?"end":"start",$="hand")=>this.addText({type:"text",at:g,text:b,size:x,anchor:k,font:$,style:{color:u}},`${n}-${y}`,o,s),p=(g,b,y)=>this.addDrawable(this.gen.line(g[0]-c[0]*y,g[1]-c[1]*y,g[0]+c[0]*y,g[1]+c[1]*y,{...r,seed:r.seed+10+b}),t.style,s),f=(g,b)=>[g[0]+c[0]*b,g[1]+c[1]*b+(h?c[1]>0?8:-2:7)];if(t.type==="axis"){let g=this.arrow(a,i,r,t.style,s);return Kn(l,t.ticks).forEach((b,y)=>{let x=Ue(a,i,l,b);x&&g.push(...p(x,y,7),d(f(x,22),st(t.format??"{v}",{...o,v:b},this.locale),`t${y}`))}),t.label&&g.push(d(h?[i[0],i[1]+c[1]*56+8]:[i[0],i[1]-22],t.label,"label",24,h?"end":"middle")),g}let m=this.addDrawable(this.gen.line(...a,...i,r),t.style,s);return t.marks.forEach((g,b)=>{let y=Ue(a,i,l,R(g.at,o));y&&(m.push(...p(y,b,10)),g.label&&m.push(d(f(y,-26),g.label,`l${b}`,26,h?"middle":c[0]<0?"start":"end")),g.text&&m.push(d(f(y,30),g.text,`x${b}`,21)))}),m}arrow(t,n,r,o,s){return[...this.addDrawable(this.gen.line(...t,...n,r),o,s),...this.head(t,n,r,o,s)]}head(t,n,r,o,s){let a=Math.atan2(n[1]-t[1],n[0]-t[0]),i=16,l=[n[0]-i*Math.cos(a-.45),n[1]-i*Math.sin(a-.45)],c=[n[0]-i*Math.cos(a+.45),n[1]-i*Math.sin(a+.45)];return this.addDrawable(this.gen.linearPath([l,n,c],{...r,seed:r.seed+1}),o,s)}textWidth(t,n,r,o=r==="body"?400:700){let s=q("text",{"font-family":Ke[r],"font-size":n,"font-weight":o});s.textContent=t,this.layers.ink.append(s);let a=s.getComputedTextLength();return s.remove(),a}wrap(t,n,r){let o=[];for(let s of t.split(/\s+/).filter(Boolean)){let a=o.at(-1);a!==void 0&&this.textWidth(`${a} ${s}`,n,"hand")<=r?o[o.length-1]=`${a} ${s}`:o.push(s)}return o}balloon(t,n,r,o,s){let a=this.named.get(St(t.to,o));if(!a)return[];let i=this.boxOf(a.els,a.dx,a.dy),l=t.size??24,c=this.wrap(st(t.text,o,this.locale),l,t.width??240),h=Math.max(...c.map(L=>this.textWidth(L,l,"hand")))+32,u=c.length*l*1.2+22,d=[t.side??"above","right","left","above","below"],p=(L,[j,N])=>L==="above"||L==="below"?[Math.max(30,Math.min(j,this.paper.w-30-h)),N]:[j,Math.max(30,Math.min(N,this.paper.h-30-u))],f=d.map(L=>p(L,We({x:0,y:0,w:h,h:u},i,L,28))),[m,g]=f.find(([L,j])=>L>=0&&j>=0&&L+h<=this.paper.w&&j+u<=this.paper.h)??f[0];m+=this.leafNudge?.[0]??0,g+=this.leafNudge?.[1]??0;let[b,y]=He({x:m,y:g,w:h,h:u},this.paper.w,this.paper.h);[m,g]=[m+b,g+y];let x=16,k=`M${m+x} ${g} H${m+h-x} Q${m+h} ${g} ${m+h} ${g+x} V${g+u-x} Q${m+h} ${g+u} ${m+h-x} ${g+u} H${m+x} Q${m} ${g+u} ${m} ${g+u-x} V${g+x} Q${m} ${g} ${m+x} ${g} Z`,$={...r,fill:t.style?.fill??"#FFFFFF",fillStyle:"solid",roughness:Math.min(r.roughness??1.6,1)},E=this.addDrawable(this.gen.path(k,$),t.style,s),v=[m+h/2,g+u/2],z=Rt(i,v,6),C=Rt({x:m,y:g,w:h,h:u},z,0);if(t.kind==="thought")for(let[L,j,N]of[[.35,7,2],[.7,4,3]]){let U=[C[0]+(z[0]-C[0])*L,C[1]+(z[1]-C[1])*L];E.push(...this.addDrawable(this.gen.circle(U[0],U[1],j*2,{...$,seed:r.seed+N}),t.style,s))}else{let L=Math.abs(C[0]-v[0])*u>Math.abs(C[1]-v[1])*h?[0,1]:[1,0],j=[C[0]-L[0]*10,C[1]-L[1]*10],N=[C[0]+L[0]*10,C[1]+L[1]*10];E.push(...this.addDrawable(this.gen.polygon([j,z,N],{...$,seed:r.seed+2}),t.style,s))}return c.forEach((L,j)=>{E.push(this.addText({type:"text",at:[v[0],g+11+l*1.2*(j+1)-l*.25],text:L,size:l,anchor:"middle",style:{color:t.style?.color}},`${n}-${j}`,o,s))}),E}brace(t,n,r,o,s){let[a,i]=[this.pt(t.from,o),this.pt(t.to,o)],l=Ze(a,i),c=t.flip?[-l[0],-l[1]]:l,h=Math.hypot(i[0]-a[0],i[1]-a[1])||1,u=[(i[0]-a[0])/h,(i[1]-a[1])/h],d=Math.min(16,h*.08),p=(m,g)=>[a[0]+u[0]*h*m+c[0]*g,a[1]+u[1]*h*m+c[1]*g],f=this.addDrawable(this.gen.curve([a,p(.06,d),p(.44,d),p(.5,d*2),p(.56,d),p(.94,d),i],r),t.style,s);if(t.label){let m=Math.abs(u[0])>=Math.abs(u[1]),g=p(.5,d*2+22),b=m?"middle":c[0]<0?"end":"start";f.push(this.addText({type:"text",at:[g[0],g[1]+(m?c[1]>0?8:-2:7)],text:t.label,size:24,anchor:b,style:{color:t.style?.color}},`${n}-label`,o,s))}return f}note(t,n,r,o,s){let a=t.style?.color??"#2F5BEA",i=[],l=this.made(()=>{i.push(this.addText({type:"text",at:t.at,text:t.text,size:t.size??24,style:{color:a}},`${n}-text`,o,s))}),c=this.boxOf(l,0,0),h=t.to!==void 0?this.named.get(St(t.to,o)):void 0;if(t.to!==void 0&&!h)return i;let u=h?this.boxOf(h.els,h.dx,h.dy):null,d=u?[u.x+u.w/2,u.y+u.h/2]:this.pt(t.point,o),[p,f]=[c.x+c.w/2,c.y+c.h/2],m=d[1]>c.y+c.h,g=d[1]<c.y,b=m?[p,c.y+c.h+6]:g?[p,c.y-6]:d[0]>p?[c.x+c.w+8,f]:[c.x-8,f],y=u?Rt(u,b,8):d,[x,k]=[(b[0]+y[0])/2,(b[1]+y[1])/2],$=Math.hypot(y[0]-b[0],y[1]-b[1])||1,E=N=>[x-(y[1]-b[1])/$*$*.22*N,k+(y[0]-b[0])/$*$*.22*N],[v,z]=[c.x+c.w/2,c.y+c.h/2],C=N=>Math.hypot(N[0]-v,N[1]-z),L=C(E(1))>=C(E(-1))?E(1):E(-1),j={...r,stroke:a};return i.push(...this.addDrawable(this.gen.curve([b,L,y],j),{...t.style,color:a},s),...this.head(L,y,j,{...t.style,color:a},s)),i}table(t,n,r,o,s){let[a,i]=this.pt(t.at,o),l=t.size??22,c=t.header??!0,h=t.rows.map(k=>k.map($=>st($,o,this.locale))),u=Math.max(...h.map(k=>k.length)),d=k=>c&&k===0?"hand":"body",p=Array.from({length:u},(k,$)=>Math.max(40,...h.map((E,v)=>E[$]?this.textWidth(E[$],l,d(v)):0))+28),f=l*1.7,[m,g]=[p.reduce((k,$)=>k+$,0),f*h.length],b=this.addDrawable(this.gen.rectangle(a,i,m,g,r),t.style,s),y=r.seed+3;for(let k=1;k<h.length;k++)b.push(...this.addDrawable(this.gen.line(a,i+f*k,a+m,i+f*k,{...r,seed:y++,strokeWidth:c&&k===1?2.6:1.4}),t.style,s));let x=a;return p.slice(0,-1).forEach(k=>{x+=k,b.push(...this.addDrawable(this.gen.line(x,i,x,i+g,{...r,seed:y++,strokeWidth:1.4}),t.style,s))}),h.forEach((k,$)=>{let E=a;k.forEach((v,z)=>{v&&b.push(this.addText({type:"text",at:[E+p[z]/2,i+f*$+f*.66],text:v,size:l,font:d($),anchor:"middle",style:{color:t.style?.color}},`${n}-${$}-${z}`,{},s)),E+=p[z]})}),b}bars(t,n,r,o,s){let[a,i,l,c]=[R(t.box.x,o),R(t.box.y,o),R(t.box.w,o),R(t.box.h,o)],h=t.values.map(m=>R(m,o)),u=t.max!==void 0?R(t.max,o):Math.max(...h,0)||1,d=l/h.length,p=t.style?.fill??"#2F5BEA",f=this.addDrawable(this.gen.line(a,i+c,a+l,i+c,r),t.style,s);return h.forEach((m,g)=>{let b=Math.max(0,Math.min(c,m/u*c)),y=a+d*g+d/2;b>=1&&f.push(...this.addDrawable(this.gen.rectangle(y-d*.3,i+c-b,d*.6,b,{...r,fill:p,fillStyle:t.style?.fillStyle??"hachure",seed:r.seed+5+g}),{...t.style,fill:p},s)),f.push(this.addText({type:"text",at:[y,i+c-b-10],text:st(t.format??"{v}",{...o,v:m},this.locale),size:22,anchor:"middle",style:{color:t.style?.color}},`${n}-v${g}`,o,s));let x=t.labels?.[g];x&&f.push(this.addText({type:"text",at:[y,i+c+30],text:x,size:22,anchor:"middle",style:{color:t.style?.color}},`${n}-l${g}`,o,s))}),f}prop(t,n,r,o,s){let[a,i]=this.pt(t.at,o),l=t.size===void 0?De:R(t.size,o),c=q("g");c.dataset.prop=t.name,this.layers.ink.append(c);let h=t.style?.width??Math.max(1.2,Math.min(2.6,l/36)),u=[];return Fn(t.name,[a,i],l,t.flip??!1,t.mood,this.figures).forEach((d,p)=>{let f=d.kind!=="circle"&&d.kind!=="polygon"?void 0:d.main&&t.style?.fill?t.style.fill:d.fill,m=d.fine?{...r,strokeWidth:Math.max(.8,h*.45),roughness:.3,bowing:0,fill:f,fillStyle:"solid",seed:r.seed+p}:{...r,strokeWidth:h,fill:f,fillStyle:t.style?.fillStyle??"solid",seed:r.seed+p},g=d.kind==="circle"?this.gen.circle(d.c[0],d.c[1],d.r*2,m):d.kind==="polygon"?this.gen.polygon(d.points,m):d.kind==="curve"?this.gen.curve(d.points,m):this.gen.linearPath(d.points,m);u.push(...this.addDrawable(g,{opacity:t.style?.opacity,dashed:t.style?.dashed},s,c))}),t.label&&u.push(this.addText({type:"text",at:[a,i+28],text:t.label,size:22,anchor:"middle",style:{color:t.style?.color}},`${n}-label`,o,s,c)),u}samplePlot(t,n){let r=t.var??"x",[o,s]=[R(t.domain[0],n),R(t.domain[1],n)],[a,i]=[R(t.range[0],n),R(t.range[1],n)];if(o===s||a===i)throw new Error("Plot: domain and range need different ends.");let l=R(t.box.x,n),c=R(t.box.y,n),h=R(t.box.w,n),u=R(t.box.h,n),d=t.samples??40,p=[];for(let f=0;f<=d;f++){let m=o+(s-o)*f/d,g=R(t.fn,{...n,[r]:m}),b=c+u-(g-a)/(i-a)*u;p.push([l+(m-o)/(s-o)*h,Math.max(c,Math.min(c+u,b))])}return p}addDrawable(t,n,r,o=this.layers.ink){let s=[];return this.gen.toPaths(t).forEach(a=>{let i=q("path",{d:a.d,stroke:this.tint(a.stroke)??"none","stroke-width":a.strokeWidth,fill:this.tint(a.fill)??"none","stroke-linecap":"round","stroke-linejoin":"round"});n?.opacity!==void 0&&i.setAttribute("opacity",String(n.opacity)),n?.fill&&a.stroke===n.fill&&(a.fill??"none")==="none"&&(i.dataset.hatch="1"),o.append(i),a.fill&&a.fill!=="none"?(r&&(i.style.opacity="0"),s.push({kind:"fade",el:i,opacity:n?.opacity??1})):(s.push(this.hide(i,r)),n?.dashed&&(i.dataset.dashed="1"),n?.dashed&&!r&&i.setAttribute("stroke-dasharray","9 8"))}),s}hide(t,n){let r=t.getTotalLength();return n&&(t.style.strokeDasharray=`${r} ${r}`,t.style.strokeDashoffset=`${r}`),{kind:"path",el:t,length:r}}addText(t,n,r,o,s=this.layers.ink){let[a,i]=this.pt(t.at,r),l=t.rotate??0,c=q("g",l?{transform:`rotate(${l} ${a} ${i})`}:{}),h=q("text",{x:a,y:i,fill:this.tint(t.style?.color??ft)??ft,"font-family":Ke[t.font??"hand"],"font-size":t.size??30,"font-weight":t.font==="body"?400:700,"text-anchor":t.anchor??"start"});h.textContent=st(t.text,r,this.locale),c.append(h),s.append(c);let u=h.getBBox(),d=`${this.uid}-clip-${this.run}-${n}`,p=q("clipPath",{id:d}),f=q("rect",{x:u.x-4,y:u.y-12,width:o?0:u.width+8,height:u.height+24});return p.append(f),this.defs.append(p),h.setAttribute("clip-path",`url(#${d})`),{kind:"text",clip:f,width:u.width+8,x:u.x-4,y:i+2,angle:l,ox:a,oy:i}}play(t,n,r){let o=t.find(s=>s.kind==="text")??t.find(s=>s.kind==="path");return this.layers.pencil.style.opacity=o?"1":"0",this.tween(n,r,s=>{for(let a of t)if(a.kind==="path")this.revealPath(a,s,a===o);else if(a.kind==="text")this.revealText(a,s,a===o);else if(a.kind==="count")a.el.textContent=ue(a.format,s===1?a.value:Ve(a.value,s),a.scope,a.locale);else if(a.kind==="move"){let i=a.ms?Math.min(1,s*n/a.ms):s;this.place(a.entry,...Ye(a.from,a.to,i,a.along))}else a.el.style.opacity=String(s*a.opacity)})}revealPath(t,n,r){let o=t.length*n;if(t.el.style.strokeDashoffset=String(t.length-o),r){let s=t.el.getPointAtLength(o);this.layers.pencil.setAttribute("transform",`translate(${s.x} ${s.y})`)}n===1&&(t.el.style.strokeDasharray="",t.el.style.strokeDashoffset="",t.el.dataset.dashed&&t.el.setAttribute("stroke-dasharray","9 8"))}revealText(t,n,r){let o=t.width*n;if(t.clip.setAttribute("width",String(o)),!r)return;let s=this.layers.pencil,a=t.angle*Math.PI/180,i=t.x+o-t.ox,l=t.y-t.oy,c=t.ox+i*Math.cos(a)-l*Math.sin(a),h=t.oy+i*Math.sin(a)+l*Math.cos(a);s.setAttribute("transform",`translate(${c} ${h-6-Math.abs(Math.sin(n*40))*7})`)}schedule(t,n,r){if(r<=0)return;let o=(s,a,i=r,l=n,c=io,h="backwards")=>{s.style.animation=`${a} ${Math.round(i)}ms ${c} ${Math.round(l)}ms ${h}`};for(let s of t)if(s.kind==="path")s.el.style.setProperty("--l",String(Math.ceil(s.length)+1)),o(s.el,"ct-draw");else if(s.kind==="text")s.clip.style.transformBox="fill-box",s.clip.style.transformOrigin="0 0",o(s.clip,"ct-write");else if(s.kind==="fade")o(s.el,"ct-fade");else if(s.kind==="count"){let i=r/12;for(let l=0;l<12;l++){let c=s.el.cloneNode();c.textContent=ue(s.format,Ve(s.value,Qn(l/12)),s.scope,s.locale),c.style.opacity="0",o(c,"ct-show",i,n+l*i,"step-end","none"),s.el.before(c)}o(s.el,"ct-wait",n+r,0,"step-end")}else if(s.kind==="move"){let a=Ye(s.from,s.to,.5,s.along);for(let i of s.entry.els){let l=q("g");i.replaceWith(l),l.append(i),l.style.setProperty("--fx",`${s.from[0]-s.to[0]}px`),l.style.setProperty("--fy",`${s.from[1]-s.to[1]}px`),l.style.setProperty("--mx",`${a[0]-s.to[0]}px`),l.style.setProperty("--my",`${a[1]-s.to[1]}px`),o(l,"ct-move",s.ms??r)}}}tween(t,n,r){return new Promise((o,s)=>{let a=performance.now(),i=0,l=c=>{if(n!==this.run)return s(new jt);i+=(c-a)*this.speed,a=c;let h=Math.min(1,i/Math.max(1,t));r(h===1?1:Qn(h)),h<1?requestAnimationFrame(l):o()};requestAnimationFrame(l)})}};function lo(e){let t=([n,r])=>[(n-50)/100,(r-100)/100];return Object.fromEntries(Object.entries(e??{}).map(([n,r])=>[n,r.shapes.map((o,s)=>o.kind==="circle"?{kind:"circle",c:t(o.c),r:o.r/100,fill:o.fill,main:s===0}:o.kind==="polygon"?{kind:"polygon",points:o.points.map(t),fill:o.fill,main:s===0}:{kind:o.kind,points:o.points.map(t)})]))}var F=class extends Error{constructor(n,r){super(`line ${n}: ${r}`);Y(this,"line");this.line=n}};function ho(e,t){let n=[],r="",o=!1;for(let s=0;s<e.length;s++){let a=e[s];if(a==="\\"&&o&&s+1<e.length){r+=a+e[++s];continue}a==='"'&&(o=!o),/\s/.test(a)&&!o?(r&&n.push(r),r=""):r+=a}if(o)throw new F(t,"a quote is not closed.");return r&&n.push(r),n}function uo(e){let t={no:0,indent:-1,tokens:[],children:[]},n=[t];return e.split(/\r?\n/).forEach((r,o)=>{let s=o+1;if(!r.trim()||r.trim().startsWith("//"))return;let a=r.length-r.trimStart().length,i=r.trim(),l=i.startsWith("#")?["#",i.slice(1).trim()]:i.startsWith(">")?[">",i.slice(1).trim()]:i.startsWith("json ")?["json",i.slice(5).trim()]:i.startsWith("|")?["|",i]:ho(i,s),c={no:s,indent:a,tokens:l,children:[]};for(;n.length>1&&n[n.length-1].indent>=a;)n.pop();n[n.length-1].children.push(c),n.push(c)}),t.children}var rt=e=>e.length>=2&&e.startsWith('"')&&e.endsWith('"'),Z=e=>rt(e)?e.slice(1,-1).replace(/\\(.)/g,"$1"):e,en=/^-?\d+(\.\d+)?$/;function lt(e,t){if(en.test(e))return Number(e);if(rt(e))return Z(e);if(/^[A-Za-z_][A-Za-z_0-9]*$/.test(e))return e;throw new F(t,`expected a number or an expression in quotes, got ${e}.`)}function Et(e){let t=[],n="",r=!1;for(let o of e)o==='"'&&(r=!r),o===","&&!r?(t.push(n),n=""):n+=o;return t.push(n),t}function Mt(e,t){let n=e?Et(e):[];if(n.length!==2)throw new F(t,`expected a point x,y, got ${e??"nothing"}.`);return[lt(n[0],t),lt(n[1],t)]}function pe(e,t){let n=e?.match(/^(.+?)\.\.(.+)$/);if(!n)throw new F(t,`expected a range a..b, got ${e??"nothing"}.`);return[lt(n[1],t),lt(n[2],t)]}var po=new Set(["text","card","line","arrow","highlight","polyline","polygon","curve","circle","ellipse","plot","pause","row","column","grid","repeat","when","move","counter","axis","timeline","brace","note","table","bars","json","chain"]),tn={"right-of":"right","left-of":"left",above:"above",below:"below"},fo=["color","fill","roughness","bowing","fillStyle","opacity"],tr=new Set(["gap","size","r","rx","ry","w","h","columns","ms","thickness"]),er=new Set(["dashed","flip","noheader","wrap"]);function Q(e,t,n){let r={};for(let o=0;o<e.length;o++){let s=e[o],a,i;if(er.has(s)){s==="dashed"?r.dashed=!0:s==="flip"?t.flip=!0:s==="wrap"?t.wrap=!0:t.header=!1;continue}let l=s.indexOf("=");if(l>0&&!rt(s))[a,i]=[s.slice(0,l),s.slice(l+1)];else if(tr.has(s)&&o+1<e.length)[a,i]=[s,e[++o]];else throw new F(n,`did not understand \xAB${s}\xBB.`);a==="stroke"?r.width=Number(i):fo.includes(a)?r[a]=en.test(i)?Number(i):Z(i):a==="nudge"?t.nudge=Mt(i,n).map(Number):a==="ticks"?t.ticks=i.includes(",")?Et(i).map(Number):Number(i):a==="labels"?t.labels=Et(i).map(Z):a==="id"||a==="anchor"||a==="font"||a==="mood"||a==="along"||a==="side"||a==="kind"||a==="var"||a==="align"||a==="label"||a==="format"||a==="fn"||a==="forward"||a==="back"||a==="direction"?t[a]=Z(i):t[a]=lt(i,n)}return Object.keys(r).length&&(t.style=r),t}function yt(e,t,n,r){let[o,s]=e;if(o==="at")return t[n]=Mt(s,r),e.slice(2);if(o in tn){if(!s||rt(s))throw new F(r,`${o} needs the id of an earlier step.`);t.place={to:s,side:tn[o]};let a=e.slice(2);if(a[0]==="gap"||a[0]?.startsWith("gap=")){let l=a[0]==="gap"?a[1]:a[0].slice(4);t.place.gap=Number(l),a=a.slice(a[0]==="gap"?2:1)}let i=a.findIndex(l=>l.startsWith("align="));return i>=0&&(t.place.align=a[i].slice(6),a=a.filter((l,c)=>c!==i)),a}return e}function fe(e,t){let{no:n,tokens:r}=e,[o,...s]=r,a=()=>e.children.map(c=>fe(c,t)),i=(c,h)=>{if(!c||!rt(c))throw new F(n,`${o} needs ${h} in quotes.`);return Z(c)},l=c=>{if(s[1]!=="->")throw new F(n,`write ${c} x,y -> x,y.`);return{type:c,from:Mt(s[0],n),to:Mt(s[2],n)}};if(o==="json")try{return JSON.parse(s[0])}catch{throw new F(n,"the JSON on this line is not valid.")}if(s[0]==="->"&&!po.has(o)&&!t.has(o)){let c={type:"link",from:o,to:s[1]},h=s.slice(2);return h[0]&&rt(h[0])&&([c.label,h]=[Z(h[0]),h.slice(1)]),Q(h,c,n)}if(s[0]==="says"||s[0]==="thinks"){let c={type:"balloon",to:o,text:i(s[1],"what is said"),...s[0]==="thinks"?{kind:"thought"}:{}};return Q(s.slice(2),c,n)}if(t.has(o)){let c={type:"prop",name:o},h=s,u=h[0];return u&&!rt(u)&&!u.includes("=")&&u!=="at"&&!(u in tn)&&!tr.has(u)&&!er.has(u)&&([c.id,h]=[u,h.slice(1)]),h=yt(h,c,"at",n),h[0]&&rt(h[0])&&([c.label,h]=[Z(h[0]),h.slice(1)]),Q(h,c,n)}switch(o){case"text":{let c={type:"text",text:i(s[0],"its text")};return Q(yt(s.slice(1),c,"at",n),c,n)}case"card":{let c={type:"card"},h=yt(s,c,"at",n),u=h.filter(rt).map(Z);if(h=h.filter(d=>!rt(d)),!u.length)throw new F(n,"a card needs a title in quotes.");return[c.title]=u,u.length>1&&(c.lines=u.slice(1)),Q(h,c,n)}case"line":case"arrow":case"highlight":return Q(s.slice(3),l(o),n);case"brace":{let c=l("brace"),h=s.slice(3);return h[0]&&rt(h[0])&&([c.label,h]=[Z(h[0]),h.slice(1)]),Q(h,c,n)}case"polyline":case"polygon":case"curve":{let c=s.filter(h=>/,/.test(h)&&!h.includes("="));return Q(s.slice(c.length),{type:o,points:c.map(h=>Mt(h,n))},n)}case"circle":case"ellipse":{let c={type:o};return Q(yt(s,c,"center",n),c,n)}case"plot":{let c={type:"plot",fn:i(s[0],"the formula")},h=[];for(let u=1;u<s.length;u++)if(s[u]==="domain")c.domain=pe(s[++u],n);else if(s[u]==="range")c.range=pe(s[++u],n);else if(s[u]==="box"){let d=Et(s[++u]??"");if(d.length!==4)throw new F(n,"write box x,y,w,h.");let[p,f,m,g]=d.map(b=>lt(b,n));c.box={x:p,y:f,w:m,h:g}}else h.push(s[u]);return Q(h,c,n)}case"pause":{let c={type:"pause",ms:600},h=s;return h[0]&&en.test(h[0])&&([c.ms,h]=[Number(h[0]),h.slice(1)]),h[0]==="ask"&&([c.ask,h]=[i(h[1],"the question"),h.slice(2)]),Q(h,c,n)}case"row":case"column":case"grid":case"chain":{let c={type:o},h=yt(s,c,"at",n);return Q(h,c,n),c.steps=a(),c}case"repeat":{let c=s[0]?.replace(/:$/,"");if(!c)throw new F(n,"write repeat n: <step>.");let h={type:"repeat",times:lt(c,n)},u=s.slice(1);if(u.length)h.step=fe({...e,tokens:u,children:[]},t);else if(e.children.length===1)[h.step]=a();else throw new F(n,"a repeat holds one step: on the same line after \xAB:\xBB, or one line under it.");return h}case"when":{let c=s[0]?.replace(/:$/,"");if(!c)throw new F(n,"write when <condition>:.");let h=s.slice(1);return{type:"when",if:lt(c,n),steps:h.length?[fe({...e,tokens:h,children:[]},t)]:a()}}case"move":{if(s[1]!=="to")throw new F(n,"write move <id> to x,y.");return Q(s.slice(3),{type:"move",target:s[0],to:Mt(s[2],n)},n)}case"counter":{let c={type:"counter"},h=yt(s,c,"at",n);return c.value=lt(h[0]??"",n),h=h.slice(1),h[0]&&rt(h[0])&&([c.format,h]=[Z(h[0]),h.slice(1)]),Q(h,c,n)}case"axis":case"timeline":{let c=l(o),h=s.slice(3);if(h[0]!=="domain")throw new F(n,`write ${o} x,y -> x,y domain a..b.`);return c.domain=pe(h[1],n),h=h.slice(2),o==="timeline"&&(c.marks=e.children.map(u=>{let[d,p,f,m]=u.tokens;if(d!=="mark")throw new F(u.no,'under a timeline, write mark <when> "label" "text".');return{at:lt(p??"",u.no),...f?{label:Z(f)}:{},...m?{text:Z(m)}:{}}})),Q(h,c,n)}case"note":{let c={type:"note"},h=yt(s,c,"at",n);if(c.text=i(h[0],"its text"),h[1]!=="->")throw new F(n,'write note at x,y "text" -> <id or x,y>.');let u=h[2]??"";return/,/.test(u)?c.point=Mt(u,n):c.to=u,h=h.slice(3),Q(h,c,n)}case"table":{let c={type:"table"};return Q(yt(s,c,"at",n),c,n),c.rows=e.children.map(h=>{if(h.tokens[0]!=="|")throw new F(h.no,"under a table, write rows as | a | b |.");return h.tokens[1].replace(/^\||\|$/g,"").split("|").map(u=>u.trim())}),c}case"bars":{let c={type:"bars"},h=[];for(let u=0;u<s.length;u++)if(s[u]==="box"){let d=Et(s[++u]??"");if(d.length!==4)throw new F(n,"write box x,y,w,h.");let[p,f,m,g]=d.map(b=>lt(b,n));c.box={x:p,y:f,w:m,h:g}}else s[u]==="values"?c.values=Et(s[++u]??"").map(d=>lt(d,n)):s[u]==="labels"?c.labels=Et(s[++u]??"").map(Z):h.push(s[u]);return Q(h,c,n)}}throw new F(n,`\xAB${o}\xBB is not a step, a prop or an id followed by -> / says.`)}function go(e){let{no:t,tokens:n}=e,r=[],o=n[0],s=1;for(;n[s]==="->";){let i=n[s+1];if(!i||rt(i))throw new F(t,'write a -> b "label" -> c "label".');let l={type:"link",from:o,to:i};s+=2,n[s]&&rt(n[s])&&(l.label=Z(n[s++])),r.push(l),o=i}let a=n.slice(s);return r.map(i=>Q([...a],i,t))}function mo(e){let{no:t,tokens:n}=e,[r,...o]=n,s=l=>{let c=l?.match(/^(\d{1,3}),(\d{1,3})$/);if(!c||Number(c[1])>100||Number(c[2])>100)throw new F(t,`on a figure's grid a point is two whole numbers from 0 to 100, like 24,48 (got ${l??"nothing"}).`);return[Number(c[1]),Number(c[2])]},a={kind:r},i=o;if(r==="circle")i[0]==="at"&&(i=i.slice(1)),a.c=s(i[0]),i=i.slice(1);else if(r==="polygon"||r==="polyline"||r==="curve"){let l=i.filter(c=>c.includes(",")&&!c.includes("="));a.points=l.map(s),i=i.slice(l.length)}else throw new F(t,`a figure is made of polygon, polyline, curve and circle lines, not \xAB${r}\xBB.`);for(let l of i){let[c,h]=l.split("=");if(c==="fill"&&h)a.fill=Z(h);else if(c==="r"&&h&&/^\d{1,3}$/.test(h))a.r=Number(h);else throw new F(t,`did not understand \xAB${l}\xBB in a figure (only fill=\u2026 and, on a circle, r=\u2026).`)}return a}function nr(e,t){let n=new Set(t),r={id:"lesson",title:"",width:900,height:560},o=[],s,a;for(let i of uo(e)){let{no:l,tokens:c}=i,[h,...u]=c,d=g=>{if(!u[0])throw new F(l,`${h} needs ${g}.`);return Z(u.join(" "))};switch(!["->","says","thinks"].includes(u[0])?h:""){case"#":s=u[0];continue;case">":a=u[0];continue;case"title":r.title=d("a title");continue;case"id":r.id=d("an id");continue;case"category":r.category=d("a category");continue;case"theme":r.theme=d("paper or chalkboard");continue;case"locale":r.locale=d("a language tag");continue;case"background":r.background=d("dots, grid or plain");continue;case"size":{let g=u[0]?.match(/^(\d+)x(\d+)$/);if(!g)throw new F(l,"write size 900x560.");[r.width,r.height]=[Number(g[1]),Number(g[2])];continue}case"param":{let[g,b,y,...x]=u,[k,$]=pe(y,l).map(Number),E={label:Z(b??""),min:k,max:$,step:1,value:k};for(let v=0;v<x.length;v++)if(x[v].startsWith("step="))E.step=Number(x[v].slice(5));else if(x[v]==="=")E.value=Number(x[++v]);else throw new F(l,`did not understand \xAB${x[v]}\xBB.`);r.params={...r.params,[g]:E};continue}case"switch":{let[g,b,y]=u;r.switches={...r.switches,[g]:{label:Z(b??""),on:y==="on"}};continue}case"var":{if(u[1]!=="=")throw new F(l,"write var name = value.");r.vars={...r.vars,[u[0]]:lt(u[2]??"",l)};continue}case"learning":{let[g,b]=u;if(!["goal","question","answer","caveat"].includes(g))throw new F(l,'write learning goal|question|answer|caveat "\u2026".');r.learning={...r.learning,[g]:Z(b??"")};continue}case"define":{let g=u[0];if(!g)throw new F(l,"write define <name> and its shapes under it.");r.defs={...r.defs,[g]:{shapes:i.children.map(mo)}},n.add(g);continue}case"quiz":{r.quiz={question:Z(u[0]??""),options:i.children.map(g=>{let[b,...y]=g.tokens;if(b!=="*"&&b!=="-")throw new F(g.no,"under a quiz, write * right option -- why, or - wrong option -- why.");let x=y.map(Z).join(" "),[k,$=""]=x.split(/\s+--\s+/);return{text:k.trim(),right:b==="*",why:$.trim()}})};continue}}let f=u[0]==="->"&&u.indexOf("->",1)>0?go(i):[fe(i,n)],[m]=f;s!==void 0&&([m.chapter,s]=[s,void 0]),a!==void 0&&([m.say,a]=[a,void 0]),o.push(...f)}return r.steps=o,r}var ge=2,rr=.2,bo=3,yo=.5,Ht=e=>Math.max(0,e.w)*Math.max(0,e.h);function nn(e,t){let n=Math.min(e.x+e.w,t.x+t.w)-Math.max(e.x,t.x),r=Math.min(e.y+e.h,t.y+t.h)-Math.max(e.y,t.y);return n>0&&r>0?n*r:0}var wo=(e,[t,n])=>t>e.x+2&&t<e.x+e.w-2&&n>e.y+2&&n<e.y+e.h-2,Ut=e=>e.text?` (\xAB${e.text.slice(0,40)}\xBB)`:"",xo=(e,t)=>{let[n,r]=[e.box,t.box];return(e.type==="circle"||e.type==="ellipse")&&r.x>=n.x-2&&r.y>=n.y-2&&r.x+r.w<=n.x+n.w+2&&r.y+r.h<=n.y+n.h+2};function ko(e,t,n){let r=new Map;for(let a of e){let i=a.box;(i.x<-ge||i.y<-ge||i.x+i.w>t+ge||i.y+i.h>n+ge)&&r.set(`off:${a.step}`,`step ${a.step+1}${Ut(a)} goes off the paper (${t}\xD7${n})`)}let o=e.filter(a=>a.kind==="text");for(let a=0;a<o.length;a++)for(let i=a+1;i<o.length;i++){let[l,c]=[o[a],o[i]];l.step!==c.step&&nn(l.box,c.box)>rr*Math.min(Ht(l.box),Ht(c.box))&&r.set(`texts:${l.step}:${c.step}`,`the texts of steps ${l.step+1}${Ut(l)} and ${c.step+1}${Ut(c)} overlap`)}for(let a of o)for(let i of e)i.kind!=="stroke"||i.step===a.step||xo(i,a)||(i.points??[]).filter(l=>wo(a.box,l)).length>bo&&r.set(`cross:${i.step}:${a.step}`,`a line of step ${i.step+1} crosses the text of step ${a.step+1}${Ut(a)}`);for(let a of o)for(let i of e)i.kind!=="shape"||i.step===a.step||nn(a.box,i.box)>rr*Ht(a.box)&&r.set(`on:${i.step}:${a.step}`,`the text of step ${a.step+1}${Ut(a)} sits on the drawing of step ${i.step+1}`);let s=e.filter(a=>a.kind==="shape");for(let a=0;a<s.length;a++)for(let i=a+1;i<s.length;i++){let[l,c]=[s[a],s[i]];l.step!==c.step&&nn(l.box,c.box)>yo*Math.min(Ht(l.box),Ht(c.box))&&r.set(`piled:${l.step}:${c.step}`,`the drawings of steps ${l.step+1} and ${c.step+1} sit on each other`)}return[...r].map(([a,i])=>({key:a,text:i}))}function rn(e){let t=Object.entries(e.params??{}),n=ht(e),r=[n];for(let o of Object.keys(e.switches??{}))r.length<9&&r.push({...n,[o]:n[o]?0:1});for(let[o,s]of t)for(let a of[s.min,s.max])a!==s.value&&r.length<9&&r.push({...n,[o]:a});return r}function vo(e,t){let n=[];for(let r of e.querySelectorAll("[data-step]")){let o=Number(r.dataset.step),s=r.dataset.type??t.steps[o]?.type,[a,i]=[Number(r.dataset.dx??0),Number(r.dataset.dy??0)],l=u=>({x:u.x+a,y:u.y+i,w:u.width,h:u.height}),c=r.querySelector("text");if(r.dataset.prop){let u=[...r.querySelectorAll("path")].map(f=>l(f.getBBox())),d=Math.min(...u.map(f=>f.x)),p=Math.min(...u.map(f=>f.y));n.push({step:o,type:s,kind:"shape",box:{x:d,y:p,w:Math.max(...u.map(f=>f.x+f.w))-d,h:Math.max(...u.map(f=>f.y+f.h))-p}})}if(c){n.push({step:o,type:s,kind:"text",text:c.textContent??"",box:l(c.getBBox())});continue}if(!(r instanceof SVGPathElement))continue;let h=l(r.getBBox());if(r.dataset.marker)n.push({step:o,type:s,kind:"marker",box:h});else if(r.dataset.hatch)n.push({step:o,type:s,kind:"hatch",box:h});else if((r.getAttribute("fill")??"none")!=="none")n.push({step:o,type:s,kind:"fill",box:h});else{if(r.getAttribute("stroke")==="none"||Number(r.getAttribute("stroke-width")??1)===0)continue;{let u=r.getTotalLength(),d=Math.min(300,Math.max(2,Math.ceil(u/6))),p=[];for(let f=0;f<=d;f++){let m=r.getPointAtLength(u*f/d);p.push([m.x+a,m.y+i])}n.push({step:o,type:s,kind:"stroke",box:h,points:p})}}}return n}async function me(e){let t=document.createElement("div");t.setAttribute("aria-hidden","true"),t.style.cssText="position:fixed;left:-20000px;top:0;width:900px;visibility:hidden;pointer-events:none";let n=document.createElementNS("http://www.w3.org/2000/svg","svg");t.append(n),document.body.append(t);let r=new Map,o=rn(e);try{let a=new ct(n);for(let i of o){await a.render(e,i,{animate:!1});let l=Object.entries(i).map(([c,h])=>`${c}=${h}`).join(", ");for(let c of ko(vo(n,e),e.width,e.height)){let h=r.get(c.key);r.set(c.key,{text:h?.text??c.text,at:[...h?.at??[],l]})}}}finally{t.remove()}let s=o.length;return{combos:s,keys:[...r.keys()],problems:[...r.values()].map(({text:a,at:i})=>i.length===s||!i[0]?a:`${a} (at ${i.join("; ")})`)}}var Nt="http://www.w3.org/2000/svg",sr=e=>{let t=e.viewBox.baseVal;return t&&t.width?{w:t.width,h:t.height}:{w:e.clientWidth||900,h:e.clientHeight||560}};function $o(e,t,n){let{w:r,h:o}=sr(e),s=e.cloneNode(!0);s.querySelectorAll(".dw-pointer").forEach(l=>l.remove()),s.setAttribute("xmlns",Nt),s.setAttribute("width",String(r)),s.setAttribute("height",String(o));let a=document.createElementNS(Nt,"style");a.textContent=t;let i=document.createElementNS(Nt,"rect");return i.setAttribute("width","100%"),i.setAttribute("height","100%"),i.setAttribute("fill",n),s.prepend(i),s.prepend(a),new XMLSerializer().serializeToString(s)}async function ir(e,t,n,r){let{svg:o,done:s}=ar(e.width);try{await new ct(o).render(e,t,{animate:!1,css:!0,theme:r});let a=o.cloneNode(!0);a.querySelector(".dw-pencil")?.remove(),a.removeAttribute("style"),a.setAttribute("xmlns",Nt),a.setAttribute("width",String(e.width)),a.setAttribute("height",String(e.height));let i=new XMLSerializer().serializeToString(a),l=n.split(/(?=@font-face)/).filter(h=>{let u=h.match(/font-family:\s*['"]?([^'";]+)/)?.[1],d=h.match(/font-weight:\s*(\d+)/)?.[1];return u&&i.includes(u)&&(!d||new RegExp(`font-weight="${d}"`).test(i))}),c=document.createElementNS(Nt,"style");return c.textContent=l.join("")+Jn,a.prepend(c),new XMLSerializer().serializeToString(a)}finally{s()}}async function or(e,t,n,r=2,o){let{w:s,h:a}=sr(e),i=new Image;i.src=`data:image/svg+xml;charset=utf-8,${encodeURIComponent($o(e,t,n))}`,await i.decode();let l=o??document.createElement("canvas");l.width=Math.round(s*r),l.height=Math.round(a*r);let c=l.getContext("2d");return c.fillStyle=n,c.fillRect(0,0,l.width,l.height),c.drawImage(i,0,0,l.width,l.height),l}function ar(e){let t=document.createElement("div");t.setAttribute("aria-hidden","true"),t.style.cssText=`position:fixed;left:-20000px;top:0;width:${e}px;pointer-events:none`;let n=document.createElementNS(Nt,"svg");return t.append(n),document.body.append(t),{svg:n,done:()=>t.remove()}}async function on(e,t,n,r){let{svg:o,done:s}=ar(e.width),a=document.createElement("canvas"),i=new ct(o),l=!1,c=async()=>{if(!l){l=!0;try{await or(o,n.faces,n.paper,n.scale,a),await r(a)}finally{l=!1}}},h=setInterval(()=>void c(),1e3/n.fps);try{await i.render(e,t,{animate:!0,theme:n.theme,beforeBeat:n.say,onStep:u=>n.onProgress?.((u+1)/e.steps.length)}),await new Promise(u=>setTimeout(u,1500))}finally{for(clearInterval(h);l;)await new Promise(u=>setTimeout(u,20));await or(o,n.faces,n.paper,n.scale,a),await r(a),i.stop(),s()}}async function cr(e,t,n){let r=document.createElement("canvas");r.width=e.width,r.height=e.height;let o=r.getContext("2d");o.fillStyle=n.paper,o.fillRect(0,0,r.width,r.height);let s=r.captureStream(24),a=n.audio?.(s),i=["video/webm;codecs=vp9,opus","video/webm;codecs=vp8,opus","video/webm"].find(u=>MediaRecorder.isTypeSupported(u)),l=new MediaRecorder(s,i?{mimeType:i}:void 0),c=[];l.ondataavailable=u=>u.data.size&&c.push(u.data);let h=new Promise(u=>l.onstop=()=>u());l.start(500);try{await on(e,t,{...n,fps:12,scale:1},u=>{o.drawImage(u,0,0,r.width,r.height)})}finally{l.stop(),await h,a?.()}return new Blob(c,{type:l.mimeType||"video/webm"})}var It=Rr(kr(),1),un={en:{start:"Start",back:"Back",next:"Next",playAll:"Play all",chapter:(e,t)=>`Chapter ${e} of ${t}`,values:"Move the values",think:"Think about it",answer:"One possible answer",caveat:"Where the comparison stops",download:"Download",checking:"Checking the drawing\u2026",checked:e=>`Checked at ${e} ${e===1?"setting":"settings"}: nothing leaves the paper and no text covers another.`,problems:"The check found:",broken:"This drawing could not be opened:",keys:"\u2192 next \xB7 \u2190 back \xB7 Space play all",made:"Made with chalk-talk",board:"Chalkboard",voice:"Narration",recording:e=>`Recording\u2026 ${e}%`,show:"Show me",yourTurn:"Your turn",transcript:"Transcript",again:"Try another",valuesShort:e=>`Values (${e})`,expand:"Expand",all:"All"},pt:{start:"In\xEDcio",back:"Voltar",next:"Pr\xF3ximo",playAll:"Tocar tudo",chapter:(e,t)=>`Cap\xEDtulo ${e} de ${t}`,values:"Mexa nos valores",think:"Para pensar",answer:"Uma resposta poss\xEDvel",caveat:"Onde a compara\xE7\xE3o para",download:"Baixar",checking:"Conferindo o desenho\u2026",checked:e=>`Conferido em ${e} ${e===1?"posi\xE7\xE3o":"posi\xE7\xF5es"}: nada sai do papel e nenhum texto cobre outro.`,problems:"A confer\xEAncia achou:",broken:"Este desenho n\xE3o p\xF4de ser aberto:",keys:"\u2192 pr\xF3ximo \xB7 \u2190 voltar \xB7 Espa\xE7o tocar tudo",made:"Feito com chalk-talk",board:"Quadro-negro",voice:"Narra\xE7\xE3o",recording:e=>`Gravando\u2026 ${e}%`,show:"Mostrar",yourTurn:"Sua vez",transcript:"Transcri\xE7\xE3o",again:"Tentar outra",valuesShort:e=>`Valores (${e})`,expand:"Expandir",all:"Tudo"}},dn=()=>navigator.language.toLowerCase().startsWith("pt")?"pt":"en",Yo=`
|
|
139
|
+
<script>"use strict";(()=>{var Ar=Object.create;var ke=Object.defineProperty;var Pr=Object.getOwnPropertyDescriptor;var Lr=Object.getOwnPropertyNames;var Cr=Object.getPrototypeOf,Tr=Object.prototype.hasOwnProperty;var Br=(e,t,n)=>t in e?ke(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var zr=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Rr=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Lr(t))!Tr.call(e,o)&&o!==n&&ke(e,o,{get:()=>t[o],enumerable:!(r=Pr(t,o))||r.enumerable});return e};var jr=(e,t,n)=>(n=e!=null?Ar(Cr(e)):{},Rr(t||!e||!e.__esModule?ke(n,"default",{value:e,enumerable:!0}):n,e));var G=(e,t,n)=>Br(e,typeof t!="symbol"?t+"":t,n);var vr=zr(ln=>{var pr=Object.defineProperty,Oo=e=>pr(e,"__esModule",{value:!0}),Ao=(e,t)=>{for(var n in t)pr(e,n,{get:t[n],enumerable:!0})};Oo(ln);Ao(ln,{GIFEncoder:()=>xr,applyPalette:()=>No,default:()=>Wo,nearestColor:()=>Do,nearestColorIndex:()=>yr,nearestColorIndexWithDistance:()=>wr,prequantize:()=>jo,quantize:()=>zo,snapColorsToPalette:()=>Fo});var Po={signature:"GIF",version:"89a",trailer:59,extensionIntroducer:33,applicationExtensionLabel:255,graphicControlExtensionLabel:249,imageSeparator:44,signatureSize:3,versionSize:3,globalColorTableFlagMask:128,colorResolutionMask:112,sortFlagMask:8,globalColorTableSizeMask:7,applicationIdentifierSize:8,applicationAuthCodeSize:3,disposalMethodMask:28,userInputFlagMask:2,transparentColorFlagMask:1,localColorTableFlagMask:128,interlaceFlagMask:64,idSortFlagMask:32,localColorTableSizeMask:7};function fr(e=256){let t=0,n=new Uint8Array(e);return{get buffer(){return n.buffer},reset(){t=0},bytesView(){return n.subarray(0,t)},bytes(){return n.slice(0,t)},writeByte(o){r(t+1),n[t]=o,t++},writeBytes(o,s=0,a=o.length){r(t+a);for(let i=0;i<a;i++)n[t++]=o[i+s]},writeBytesView(o,s=0,a=o.byteLength){r(t+a),n.set(o.subarray(s,s+a),t),t+=a}};function r(o){var s=n.length;if(s>=o)return;var a=1024*1024;o=Math.max(o,s*(s<a?2:1.125)>>>0),s!=0&&(o=Math.max(o,256));let i=n;n=new Uint8Array(o),t>0&&n.set(i.subarray(0,t),0)}}var sn=12,hr=5003,Lo=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535];function Co(e,t,n,r,o=fr(512),s=new Uint8Array(256),a=new Int32Array(hr),i=new Int32Array(hr)){let l=a.length,c=Math.max(2,r);s.fill(0),i.fill(0),a.fill(-1);let h=0,u=0,d=c+1,p=d,f=!1,g=p,m=(1<<g)-1,b=1<<d-1,y=b+1,x=b+2,k=0,$=n[0],E=0;for(let C=l;C<65536;C*=2)++E;E=8-E,o.writeByte(c),B(b);let v=n.length;for(let C=1;C<v;C++)t:{let L=n[C],N=(L<<sn)+$,I=L<<E^$;if(a[I]===N){$=i[I];break t}let U=I===0?1:l-I;for(;a[I]>=0;)if(I-=U,I<0&&(I+=l),a[I]===N){$=i[I];break t}B($),$=L,x<1<<sn?(i[I]=x++,a[I]=N):(a.fill(-1),x=b+2,f=!0,B(b))}return B($),B(y),o.writeByte(0),o.bytesView();function B(C){for(h&=Lo[u],u>0?h|=C<<u:h=C,u+=g;u>=8;)s[k++]=h&255,k>=254&&(o.writeByte(k),o.writeBytesView(s,0,k),k=0),h>>=8,u-=8;if((x>m||f)&&(f?(g=p,m=(1<<g)-1,f=!1):(++g,m=g===sn?1<<g:(1<<g)-1)),C==y){for(;u>0;)s[k++]=h&255,k>=254&&(o.writeByte(k),o.writeBytesView(s,0,k),k=0),h>>=8,u-=8;k>0&&(o.writeByte(k),o.writeBytesView(s,0,k),k=0)}}}var To=Co;function mr(e,t,n){return e<<8&63488|t<<2&992|n>>3}function gr(e,t,n,r){return e>>4|t&240|(n&240)<<4|(r&240)<<8}function br(e,t,n){return e>>4<<8|t&240|n>>4}function be(e,t,n){return e<t?t:e>n?n:e}function Zt(e){return e*e}function ur(e,t,n){var r=0,o=1e100;let s=e[t],a=s.cnt,i=s.ac,l=s.rc,c=s.gc,h=s.bc;for(var u=s.fw;u!=0;u=e[u].fw){let p=e[u],f=p.cnt,g=a*f/(a+f);if(!(g>=o)){var d=0;n&&(d+=g*Zt(p.ac-i),d>=o)||(d+=g*Zt(p.rc-l),!(d>=o)&&(d+=g*Zt(p.gc-c),!(d>=o)&&(d+=g*Zt(p.bc-h),!(d>=o)&&(o=d,r=u))))}}s.err=o,s.nn=r}function an(){return{ac:0,rc:0,gc:0,bc:0,cnt:0,nn:0,fw:0,bk:0,tm:0,mtm:0,err:0}}function Bo(e,t){let n=t==="rgb444"?4096:65536,r=new Array(n),o=e.length;if(t==="rgba4444")for(let s=0;s<o;++s){let a=e[s],i=a>>24&255,l=a>>16&255,c=a>>8&255,h=a&255,u=gr(h,c,l,i),d=u in r?r[u]:r[u]=an();d.rc+=h,d.gc+=c,d.bc+=l,d.ac+=i,d.cnt++}else if(t==="rgb444")for(let s=0;s<o;++s){let a=e[s],i=a>>16&255,l=a>>8&255,c=a&255,h=br(c,l,i),u=h in r?r[h]:r[h]=an();u.rc+=c,u.gc+=l,u.bc+=i,u.cnt++}else for(let s=0;s<o;++s){let a=e[s],i=a>>16&255,l=a>>8&255,c=a&255,h=mr(c,l,i),u=h in r?r[h]:r[h]=an();u.rc+=c,u.gc+=l,u.bc+=i,u.cnt++}return r}function zo(e,t,n={}){let{format:r="rgb565",clearAlpha:o=!0,clearAlphaColor:s=0,clearAlphaThreshold:a=0,oneBitAlpha:i=!1}=n;if(!e||!e.buffer)throw new Error("quantize() expected RGBA Uint8Array data");if(!(e instanceof Uint8Array)&&!(e instanceof Uint8ClampedArray))throw new Error("quantize() expected RGBA Uint8Array data");let l=new Uint32Array(e.buffer),c=n.useSqrt!==!1,h=r==="rgba4444",u=Bo(l,r),d=u.length,p=d-1,f=new Uint32Array(d+1);for(var g=0,b=0;b<d;++b){let V=u[b];if(V!=null){var m=1/V.cnt;h&&(V.ac*=m),V.rc*=m,V.gc*=m,V.bc*=m,u[g++]=V}}Zt(t)/g<.022&&(c=!1);for(var b=0;b<g-1;++b)u[b].fw=b+1,u[b+1].bk=b,c&&(u[b].cnt=Math.sqrt(u[b].cnt));c&&(u[b].cnt=Math.sqrt(u[b].cnt));var y,x,k;for(b=0;b<g;++b){ur(u,b,!1);var $=u[b].err;for(x=++f[0];x>1&&(k=x>>1,!(u[y=f[k]].err<=$));x=k)f[x]=y;f[x]=b}var E=g-t;for(b=0;b<E;){for(var v;;){var B=f[1];if(v=u[B],v.tm>=v.mtm&&u[v.nn].mtm<=v.tm)break;v.mtm==p?B=f[1]=f[f[0]--]:(ur(u,B,!1),v.tm=b);var $=u[B].err;for(x=1;(k=x+x)<=f[0]&&(k<f[0]&&u[f[k]].err>u[f[k+1]].err&&k++,!($<=u[y=f[k]].err));x=k)f[x]=y;f[x]=B}var C=u[v.nn],L=v.cnt,N=C.cnt,m=1/(L+N);h&&(v.ac=m*(L*v.ac+N*C.ac)),v.rc=m*(L*v.rc+N*C.rc),v.gc=m*(L*v.gc+N*C.gc),v.bc=m*(L*v.bc+N*C.bc),v.cnt+=C.cnt,v.mtm=++b,u[C.bk].fw=C.fw,u[C.fw].bk=C.bk,C.mtm=p}let I=[];var U=0;for(b=0;;++U){let Y=be(Math.round(u[b].rc),0,255),V=be(Math.round(u[b].gc),0,255),S=be(Math.round(u[b].bc),0,255),O=255;h&&(O=be(Math.round(u[b].ac),0,255),i&&(O=O<=(typeof i=="number"?i:127)?0:255),o&&O<=a&&(Y=V=S=s,O=0));let z=h?[Y,V,S,O]:[Y,V,S];if(Ro(I,z)||I.push(z),(b=u[b].fw)==0)break}return I}function Ro(e,t){for(let n=0;n<e.length;n++){let r=e[n],o=r[0]===t[0]&&r[1]===t[1]&&r[2]===t[2],s=r.length>=4&&t.length>=4?r[3]===t[3]:!0;if(o&&s)return!0}return!1}function we(e,t){var n=0,r;for(r=0;r<e.length;r++){let o=e[r]-t[r];n+=o*o}return n}function ye(e,t){return t>1?Math.round(e/t)*t:e}function jo(e,{roundRGB:t=5,roundAlpha:n=10,oneBitAlpha:r=null}={}){let o=new Uint32Array(e.buffer);for(let s=0;s<o.length;s++){let a=o[s],i=a>>24&255,l=a>>16&255,c=a>>8&255,h=a&255;i=ye(i,n),r&&(i=i<=(typeof r=="number"?r:127)?0:255),h=ye(h,t),c=ye(c,t),l=ye(l,t),o[s]=i<<24|l<<16|c<<8|h<<0}}function No(e,t,n="rgb565"){if(!e||!e.buffer)throw new Error("quantize() expected RGBA Uint8Array data");if(!(e instanceof Uint8Array)&&!(e instanceof Uint8ClampedArray))throw new Error("quantize() expected RGBA Uint8Array data");if(t.length>256)throw new Error("applyPalette() only works with 256 colors or less");let r=new Uint32Array(e.buffer),o=r.length,s=n==="rgb444"?4096:65536,a=new Uint8Array(o),i=new Array(s),l=n==="rgba4444";if(n==="rgba4444")for(let c=0;c<o;c++){let h=r[c],u=h>>24&255,d=h>>16&255,p=h>>8&255,f=h&255,g=gr(f,p,d,u),m=g in i?i[g]:i[g]=Io(f,p,d,u,t);a[c]=m}else{let c=n==="rgb444"?br:mr;for(let h=0;h<o;h++){let u=r[h],d=u>>16&255,p=u>>8&255,f=u&255,g=c(f,p,d),m=g in i?i[g]:i[g]=_o(f,p,d,t);a[h]=m}}return a}function Io(e,t,n,r,o){let s=0,a=1e100;for(let i=0;i<o.length;i++){let l=o[i],c=l[3],h=Ot(c-r);if(h>a)continue;let u=l[0];if(h+=Ot(u-e),h>a)continue;let d=l[1];if(h+=Ot(d-t),h>a)continue;let p=l[2];h+=Ot(p-n),!(h>a)&&(a=h,s=i)}return s}function _o(e,t,n,r){let o=0,s=1e100;for(let a=0;a<r.length;a++){let i=r[a],l=i[0],c=Ot(l-e);if(c>s)continue;let h=i[1];if(c+=Ot(h-t),c>s)continue;let u=i[2];c+=Ot(u-n),!(c>s)&&(s=c,o=a)}return o}function Fo(e,t,n=5){if(!e.length||!t.length)return;let r=e.map(a=>a.slice(0,3)),o=n*n,s=e[0].length;for(let a=0;a<t.length;a++){let i=t[a];i.length<s?i=[i[0],i[1],i[2],255]:i.length>s?i=i.slice(0,3):i=i.slice();let l=wr(r,i.slice(0,3),we),c=l[0],h=l[1];h>0&&h<=o&&(e[c]=i)}}function Ot(e){return e*e}function yr(e,t,n=we){let r=1/0,o=-1;for(let s=0;s<e.length;s++){let a=e[s],i=n(t,a);i<r&&(r=i,o=s)}return o}function wr(e,t,n=we){let r=1/0,o=-1;for(let s=0;s<e.length;s++){let a=e[s],i=n(t,a);i<r&&(r=i,o=s)}return[o,r]}function Do(e,t,n=we){return e[yr(e,t,n)]}function xr(e={}){let{initialCapacity:t=4096,auto:n=!0}=e,r=fr(t),o=5003,s=new Uint8Array(256),a=new Int32Array(o),i=new Int32Array(o),l=!1;return{reset(){r.reset(),l=!1},finish(){r.writeByte(Po.trailer)},bytes(){return r.bytes()},bytesView(){return r.bytesView()},get buffer(){return r.buffer},get stream(){return r},writeHeader:c,writeFrame(h,u,d,p={}){let{transparent:f=!1,transparentIndex:g=0,delay:m=0,palette:b=null,repeat:y=0,colorDepth:x=8,dispose:k=-1}=p,$=!1;if(n?l||($=!0,c(),l=!0):$=!!p.first,u=Math.max(0,Math.floor(u)),d=Math.max(0,Math.floor(d)),$){if(!b)throw new Error("First frame must include a { palette } option");Go(r,u,d,b,x),dr(r,b),y>=0&&Xo(r,y)}let E=Math.round(m/10);qo(r,k,E,f,g);let v=!!b&&!$;Yo(r,u,d,v?b:null),v&&dr(r,b),Vo(r,h,u,d,x,s,a,i)}};function c(){kr(r,"GIF89a")}}function qo(e,t,n,r,o){e.writeByte(33),e.writeByte(249),e.writeByte(4),o<0&&(o=0,r=!1);var s,a;r?(s=1,a=2):(s=0,a=0),t>=0&&(a=t&7),a<<=2,e.writeByte(0|a|0|s),xt(e,n),e.writeByte(o||0),e.writeByte(0)}function Go(e,t,n,r,o=8){let i=cn(r.length)-1,l=128|o-1<<4|0|i,c=0,h=0;xt(e,t),xt(e,n),e.writeBytes([l,c,h])}function Xo(e,t){e.writeByte(33),e.writeByte(255),e.writeByte(11),kr(e,"NETSCAPE2.0"),e.writeByte(3),e.writeByte(1),xt(e,t),e.writeByte(0)}function dr(e,t){let n=1<<cn(t.length);for(let r=0;r<n;r++){let o=[0,0,0];r<t.length&&(o=t[r]),e.writeByte(o[0]),e.writeByte(o[1]),e.writeByte(o[2])}}function Yo(e,t,n,r){if(e.writeByte(44),xt(e,0),xt(e,0),xt(e,t),xt(e,n),r){let a=cn(r.length)-1;e.writeByte(128|a)}else e.writeByte(0)}function Vo(e,t,n,r,o=8,s,a,i){To(n,r,t,o,e,s,a,i)}function xt(e,t){e.writeByte(t&255),e.writeByte(t>>8&255)}function kr(e,t){for(var n=0;n<t.length;n++)e.writeByte(t.charCodeAt(n))}function cn(e){return Math.max(Math.ceil(Math.log2(e)),1)}var Wo=xr});function ve(e,t,n){if(e&&e.length){let[r,o]=t,s=Math.PI/180*n,a=Math.cos(s),i=Math.sin(s);for(let l of e){let[c,h]=l;l[0]=(c-r)*a-(h-o)*i+r,l[1]=(c-r)*i+(h-o)*a+o}}}function Nr(e,t){return e[0]===t[0]&&e[1]===t[1]}function Ir(e,t,n,r=1){let o=n,s=Math.max(t,.1),a=e[0]&&e[0][0]&&typeof e[0][0]=="number"?[e]:e,i=[0,0];if(o)for(let c of a)ve(c,i,o);let l=function(c,h,u){let d=[];for(let y of c){let x=[...y];Nr(x[0],x[x.length-1])||x.push([x[0][0],x[0][1]]),x.length>2&&d.push(x)}let p=[];h=Math.max(h,.1);let f=[];for(let y of d)for(let x=0;x<y.length-1;x++){let k=y[x],$=y[x+1];if(k[1]!==$[1]){let E=Math.min(k[1],$[1]);f.push({ymin:E,ymax:Math.max(k[1],$[1]),x:E===k[1]?k[0]:$[0],islope:($[0]-k[0])/($[1]-k[1])})}}if(f.sort((y,x)=>y.ymin<x.ymin?-1:y.ymin>x.ymin?1:y.x<x.x?-1:y.x>x.x?1:y.ymax===x.ymax?0:(y.ymax-x.ymax)/Math.abs(y.ymax-x.ymax)),!f.length)return p;let g=[],m=f[0].ymin,b=0;for(;g.length||f.length;){if(f.length){let y=-1;for(let x=0;x<f.length&&!(f[x].ymin>m);x++)y=x;f.splice(0,y+1).forEach(x=>{g.push({s:m,edge:x})})}if(g=g.filter(y=>!(y.edge.ymax<=m)),g.sort((y,x)=>y.edge.x===x.edge.x?0:(y.edge.x-x.edge.x)/Math.abs(y.edge.x-x.edge.x)),(u!==1||b%h==0)&&g.length>1)for(let y=0;y<g.length;y+=2){let x=y+1;if(x>=g.length)break;let k=g[y].edge,$=g[x].edge;p.push([[Math.round(k.x),m],[Math.round($.x),m]])}m+=u,g.forEach(y=>{y.edge.x=y.edge.x+u*y.edge.islope}),b++}return p}(a,s,r);if(o){for(let c of a)ve(c,i,-o);(function(c,h,u){let d=[];c.forEach(p=>d.push(...p)),ve(d,h,u)})(l,i,-o)}return l}function Yt(e,t){var n;let r=t.hachureAngle+90,o=t.hachureGap;o<0&&(o=4*t.strokeWidth),o=Math.round(Math.max(o,.1));let s=1;return t.roughness>=1&&(((n=t.randomizer)===null||n===void 0?void 0:n.next())||Math.random())>.7&&(s=o),Ir(e,o,r,s||1)}var Xt=class{constructor(t){this.helper=t}fillPolygons(t,n){return this._fillPolygons(t,n)}_fillPolygons(t,n){let r=Yt(t,n);return{type:"fillSketch",ops:this.renderLines(r,n)}}renderLines(t,n){let r=[];for(let o of t)r.push(...this.helper.doubleLineOps(o[0][0],o[0][1],o[1][0],o[1][1],n));return r}};function ie(e){let t=e[0],n=e[1];return Math.sqrt(Math.pow(t[0]-n[0],2)+Math.pow(t[1]-n[1],2))}var Oe=class extends Xt{fillPolygons(t,n){let r=n.hachureGap;r<0&&(r=4*n.strokeWidth),r=Math.max(r,.1);let o=Yt(t,Object.assign({},n,{hachureGap:r})),s=Math.PI/180*n.hachureAngle,a=[],i=.5*r*Math.cos(s),l=.5*r*Math.sin(s);for(let[c,h]of o)ie([c,h])&&a.push([[c[0]-i,c[1]+l],[...h]],[[c[0]+i,c[1]-l],[...h]]);return{type:"fillSketch",ops:this.renderLines(a,n)}}},Ae=class extends Xt{fillPolygons(t,n){let r=this._fillPolygons(t,n),o=Object.assign({},n,{hachureAngle:n.hachureAngle+90}),s=this._fillPolygons(t,o);return r.ops=r.ops.concat(s.ops),r}},Pe=class{constructor(t){this.helper=t}fillPolygons(t,n){let r=Yt(t,n=Object.assign({},n,{hachureAngle:0}));return this.dotsOnLines(r,n)}dotsOnLines(t,n){let r=[],o=n.hachureGap;o<0&&(o=4*n.strokeWidth),o=Math.max(o,.1);let s=n.fillWeight;s<0&&(s=n.strokeWidth/2);let a=o/4;for(let i of t){let l=ie(i),c=l/o,h=Math.ceil(c)-1,u=l-h*o,d=(i[0][0]+i[1][0])/2-o/4,p=Math.min(i[0][1],i[1][1]);for(let f=0;f<h;f++){let g=p+u+f*o,m=d-a+2*Math.random()*a,b=g-a+2*Math.random()*a,y=this.helper.ellipse(m,b,s,s,n);r.push(...y.ops)}}return{type:"fillSketch",ops:r}}},Le=class{constructor(t){this.helper=t}fillPolygons(t,n){let r=Yt(t,n);return{type:"fillSketch",ops:this.dashedLine(r,n)}}dashedLine(t,n){let r=n.dashOffset<0?n.hachureGap<0?4*n.strokeWidth:n.hachureGap:n.dashOffset,o=n.dashGap<0?n.hachureGap<0?4*n.strokeWidth:n.hachureGap:n.dashGap,s=[];return t.forEach(a=>{let i=ie(a),l=Math.floor(i/(r+o)),c=(i+o-l*(r+o))/2,h=a[0],u=a[1];h[0]>u[0]&&(h=a[1],u=a[0]);let d=Math.atan((u[1]-h[1])/(u[0]-h[0]));for(let p=0;p<l;p++){let f=p*(r+o),g=f+r,m=[h[0]+f*Math.cos(d)+c*Math.cos(d),h[1]+f*Math.sin(d)+c*Math.sin(d)],b=[h[0]+g*Math.cos(d)+c*Math.cos(d),h[1]+g*Math.sin(d)+c*Math.sin(d)];s.push(...this.helper.doubleLineOps(m[0],m[1],b[0],b[1],n))}}),s}},Ce=class{constructor(t){this.helper=t}fillPolygons(t,n){let r=n.hachureGap<0?4*n.strokeWidth:n.hachureGap,o=n.zigzagOffset<0?r:n.zigzagOffset,s=Yt(t,n=Object.assign({},n,{hachureGap:r+o}));return{type:"fillSketch",ops:this.zigzagLines(s,o,n)}}zigzagLines(t,n,r){let o=[];return t.forEach(s=>{let a=ie(s),i=Math.round(a/(2*n)),l=s[0],c=s[1];l[0]>c[0]&&(l=s[1],c=s[0]);let h=Math.atan((c[1]-l[1])/(c[0]-l[0]));for(let u=0;u<i;u++){let d=2*u*n,p=2*(u+1)*n,f=Math.sqrt(2*Math.pow(n,2)),g=[l[0]+d*Math.cos(h),l[1]+d*Math.sin(h)],m=[l[0]+p*Math.cos(h),l[1]+p*Math.sin(h)],b=[g[0]+f*Math.cos(h+Math.PI/4),g[1]+f*Math.sin(h+Math.PI/4)];o.push(...this.helper.doubleLineOps(g[0],g[1],b[0],b[1],r),...this.helper.doubleLineOps(b[0],b[1],m[0],m[1],r))}}),o}},rt={},Te=class{constructor(t){this.seed=t}next(){return this.seed?(2**31-1&(this.seed=Math.imul(48271,this.seed)))/2**31:Math.random()}},_r=0,$e=1,mn=2,Qt={A:7,a:7,C:6,c:6,H:1,h:1,L:2,l:2,M:2,m:2,Q:4,q:4,S:4,s:4,T:2,t:2,V:1,v:1,Z:0,z:0};function Se(e,t){return e.type===t}function Ie(e){let t=[],n=function(a){let i=new Array;for(;a!=="";)if(a.match(/^([ \t\r\n,]+)/))a=a.substr(RegExp.$1.length);else if(a.match(/^([aAcChHlLmMqQsStTvVzZ])/))i[i.length]={type:_r,text:RegExp.$1},a=a.substr(RegExp.$1.length);else{if(!a.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))return[];i[i.length]={type:$e,text:`${parseFloat(RegExp.$1)}`},a=a.substr(RegExp.$1.length)}return i[i.length]={type:mn,text:""},i}(e),r="BOD",o=0,s=n[o];for(;!Se(s,mn);){let a=0,i=[];if(r==="BOD"){if(s.text!=="M"&&s.text!=="m")return Ie("M0,0"+e);o++,a=Qt[s.text],r=s.text}else Se(s,$e)?a=Qt[r]:(o++,a=Qt[s.text],r=s.text);if(!(o+a<n.length))throw new Error("Path data ended short");for(let l=o;l<o+a;l++){let c=n[l];if(!Se(c,$e))throw new Error("Param not a number: "+r+","+c.text);i[i.length]=+c.text}if(typeof Qt[r]!="number")throw new Error("Bad segment: "+r);{let l={key:r,data:i};t.push(l),o+=a,s=n[o],r==="M"&&(r="L"),r==="m"&&(r="l")}}return t}function $n(e){let t=0,n=0,r=0,o=0,s=[];for(let{key:a,data:i}of e)switch(a){case"M":s.push({key:"M",data:[...i]}),[t,n]=i,[r,o]=i;break;case"m":t+=i[0],n+=i[1],s.push({key:"M",data:[t,n]}),r=t,o=n;break;case"L":s.push({key:"L",data:[...i]}),[t,n]=i;break;case"l":t+=i[0],n+=i[1],s.push({key:"L",data:[t,n]});break;case"C":s.push({key:"C",data:[...i]}),t=i[4],n=i[5];break;case"c":{let l=i.map((c,h)=>h%2?c+n:c+t);s.push({key:"C",data:l}),t=l[4],n=l[5];break}case"Q":s.push({key:"Q",data:[...i]}),t=i[2],n=i[3];break;case"q":{let l=i.map((c,h)=>h%2?c+n:c+t);s.push({key:"Q",data:l}),t=l[2],n=l[3];break}case"A":s.push({key:"A",data:[...i]}),t=i[5],n=i[6];break;case"a":t+=i[5],n+=i[6],s.push({key:"A",data:[i[0],i[1],i[2],i[3],i[4],t,n]});break;case"H":s.push({key:"H",data:[...i]}),t=i[0];break;case"h":t+=i[0],s.push({key:"H",data:[t]});break;case"V":s.push({key:"V",data:[...i]}),n=i[0];break;case"v":n+=i[0],s.push({key:"V",data:[n]});break;case"S":s.push({key:"S",data:[...i]}),t=i[2],n=i[3];break;case"s":{let l=i.map((c,h)=>h%2?c+n:c+t);s.push({key:"S",data:l}),t=l[2],n=l[3];break}case"T":s.push({key:"T",data:[...i]}),t=i[0],n=i[1];break;case"t":t+=i[0],n+=i[1],s.push({key:"T",data:[t,n]});break;case"Z":case"z":s.push({key:"Z",data:[]}),t=r,n=o}return s}function Sn(e){let t=[],n="",r=0,o=0,s=0,a=0,i=0,l=0;for(let{key:c,data:h}of e){switch(c){case"M":t.push({key:"M",data:[...h]}),[r,o]=h,[s,a]=h;break;case"C":t.push({key:"C",data:[...h]}),r=h[4],o=h[5],i=h[2],l=h[3];break;case"L":t.push({key:"L",data:[...h]}),[r,o]=h;break;case"H":r=h[0],t.push({key:"L",data:[r,o]});break;case"V":o=h[0],t.push({key:"L",data:[r,o]});break;case"S":{let u=0,d=0;n==="C"||n==="S"?(u=r+(r-i),d=o+(o-l)):(u=r,d=o),t.push({key:"C",data:[u,d,...h]}),i=h[0],l=h[1],r=h[2],o=h[3];break}case"T":{let[u,d]=h,p=0,f=0;n==="Q"||n==="T"?(p=r+(r-i),f=o+(o-l)):(p=r,f=o);let g=r+2*(p-r)/3,m=o+2*(f-o)/3,b=u+2*(p-u)/3,y=d+2*(f-d)/3;t.push({key:"C",data:[g,m,b,y,u,d]}),i=p,l=f,r=u,o=d;break}case"Q":{let[u,d,p,f]=h,g=r+2*(u-r)/3,m=o+2*(d-o)/3,b=p+2*(u-p)/3,y=f+2*(d-f)/3;t.push({key:"C",data:[g,m,b,y,p,f]}),i=u,l=d,r=p,o=f;break}case"A":{let u=Math.abs(h[0]),d=Math.abs(h[1]),p=h[2],f=h[3],g=h[4],m=h[5],b=h[6];u===0||d===0?(t.push({key:"C",data:[r,o,m,b,m,b]}),r=m,o=b):(r!==m||o!==b)&&(Mn(r,o,m,b,u,d,p,f,g).forEach(function(y){t.push({key:"C",data:y})}),r=m,o=b);break}case"Z":t.push({key:"Z",data:[]}),r=s,o=a}n=c}return t}function qt(e,t,n){return[e*Math.cos(n)-t*Math.sin(n),e*Math.sin(n)+t*Math.cos(n)]}function Mn(e,t,n,r,o,s,a,i,l,c){let h=(u=a,Math.PI*u/180);var u;let d=[],p=0,f=0,g=0,m=0;if(c)[p,f,g,m]=c;else{[e,t]=qt(e,t,-h),[n,r]=qt(n,r,-h);let U=(e-n)/2,Y=(t-r)/2,V=U*U/(o*o)+Y*Y/(s*s);V>1&&(V=Math.sqrt(V),o*=V,s*=V);let S=o*o,O=s*s,z=S*O-S*Y*Y-O*U*U,_=S*Y*Y+O*U*U,W=(i===l?-1:1)*Math.sqrt(Math.abs(z/_));g=W*o*Y/s+(e+n)/2,m=W*-s*U/o+(t+r)/2,p=Math.asin(parseFloat(((t-m)/s).toFixed(9))),f=Math.asin(parseFloat(((r-m)/s).toFixed(9))),e<g&&(p=Math.PI-p),n<g&&(f=Math.PI-f),p<0&&(p=2*Math.PI+p),f<0&&(f=2*Math.PI+f),l&&p>f&&(p-=2*Math.PI),!l&&f>p&&(f-=2*Math.PI)}let b=f-p;if(Math.abs(b)>120*Math.PI/180){let U=f,Y=n,V=r;f=l&&f>p?p+120*Math.PI/180*1:p+120*Math.PI/180*-1,d=Mn(n=g+o*Math.cos(f),r=m+s*Math.sin(f),Y,V,o,s,a,0,l,[f,U,g,m])}b=f-p;let y=Math.cos(p),x=Math.sin(p),k=Math.cos(f),$=Math.sin(f),E=Math.tan(b/4),v=4/3*o*E,B=4/3*s*E,C=[e,t],L=[e+v*x,t-B*y],N=[n+v*$,r-B*k],I=[n,r];if(L[0]=2*C[0]-L[0],L[1]=2*C[1]-L[1],c)return[L,N,I].concat(d);{d=[L,N,I].concat(d);let U=[];for(let Y=0;Y<d.length;Y+=3){let V=qt(d[Y][0],d[Y][1],h),S=qt(d[Y+1][0],d[Y+1][1],h),O=qt(d[Y+2][0],d[Y+2][1],h);U.push([V[0],V[1],S[0],S[1],O[0],O[1]])}return U}}var Fr={randOffset:function(e,t){return A(e,t)},randOffsetWithRange:function(e,t,n){return re(e,t,n)},ellipse:function(e,t,n,r,o){let s=On(n,r,o);return Be(e,t,o,s).opset},doubleLineOps:function(e,t,n,r,o){return gt(e,t,n,r,o,!0)}};function En(e,t,n,r,o){return{type:"path",ops:gt(e,t,n,r,o)}}function ee(e,t,n){let r=(e||[]).length;if(r>2){let o=[];for(let s=0;s<r-1;s++)o.push(...gt(e[s][0],e[s][1],e[s+1][0],e[s+1][1],n));return t&&o.push(...gt(e[r-1][0],e[r-1][1],e[0][0],e[0][1],n)),{type:"path",ops:o}}return r===2?En(e[0][0],e[0][1],e[1][0],e[1][1],n):{type:"path",ops:[]}}function Dr(e,t,n,r,o){return function(s,a){return ee(s,!0,a)}([[e,t],[e+n,t],[e+n,t+r],[e,t+r]],o)}function gn(e,t){if(e.length){let n=typeof e[0][0]=="number"?[e]:e,r=Jt(n[0],1*(1+.2*t.roughness),t),o=t.disableMultiStroke?[]:Jt(n[0],1.5*(1+.22*t.roughness),wn(t));for(let s=1;s<n.length;s++){let a=n[s];if(a.length){let i=Jt(a,1*(1+.2*t.roughness),t),l=t.disableMultiStroke?[]:Jt(a,1.5*(1+.22*t.roughness),wn(t));for(let c of i)c.op!=="move"&&r.push(c);for(let c of l)c.op!=="move"&&o.push(c)}}return{type:"path",ops:r.concat(o)}}return{type:"path",ops:[]}}function On(e,t,n){let r=Math.sqrt(2*Math.PI*Math.sqrt((Math.pow(e/2,2)+Math.pow(t/2,2))/2)),o=Math.ceil(Math.max(n.curveStepCount,n.curveStepCount/Math.sqrt(200)*r)),s=2*Math.PI/o,a=Math.abs(e/2),i=Math.abs(t/2),l=1-n.curveFitting;return a+=A(a*l,n),i+=A(i*l,n),{increment:s,rx:a,ry:i}}function Be(e,t,n,r){let[o,s]=xn(r.increment,e,t,r.rx,r.ry,1,r.increment*re(.1,re(.4,1,n),n),n),a=oe(o,null,n);if(!n.disableMultiStroke&&n.roughness!==0){let[i]=xn(r.increment,e,t,r.rx,r.ry,1.5,0,n),l=oe(i,null,n);a=a.concat(l)}return{estimatedPoints:s,opset:{type:"path",ops:a}}}function bn(e,t,n,r,o,s,a,i,l){let c=e,h=t,u=Math.abs(n/2),d=Math.abs(r/2);u+=A(.01*u,l),d+=A(.01*d,l);let p=o,f=s;for(;p<0;)p+=2*Math.PI,f+=2*Math.PI;f-p>2*Math.PI&&(p=0,f=2*Math.PI);let g=2*Math.PI/l.curveStepCount,m=Math.min(g/2,(f-p)/2),b=kn(m,c,h,u,d,p,f,1,l);if(!l.disableMultiStroke){let y=kn(m,c,h,u,d,p,f,1.5,l);b.push(...y)}return a&&(i?b.push(...gt(c,h,c+u*Math.cos(p),h+d*Math.sin(p),l),...gt(c,h,c+u*Math.cos(f),h+d*Math.sin(f),l)):b.push({op:"lineTo",data:[c,h]},{op:"lineTo",data:[c+u*Math.cos(p),h+d*Math.sin(p)]})),{type:"path",ops:b}}function yn(e,t){let n=Sn($n(Ie(e))),r=[],o=[0,0],s=[0,0];for(let{key:a,data:i}of n)switch(a){case"M":s=[i[0],i[1]],o=[i[0],i[1]];break;case"L":r.push(...gt(s[0],s[1],i[0],i[1],t)),s=[i[0],i[1]];break;case"C":{let[l,c,h,u,d,p]=i;r.push(...qr(l,c,h,u,d,p,s,t)),s=[d,p];break}case"Z":r.push(...gt(s[0],s[1],o[0],o[1],t)),s=[o[0],o[1]]}return{type:"path",ops:r}}function Me(e,t){let n=[];for(let r of e)if(r.length){let o=t.maxRandomnessOffset||0,s=r.length;if(s>2){n.push({op:"move",data:[r[0][0]+A(o,t),r[0][1]+A(o,t)]});for(let a=1;a<s;a++)n.push({op:"lineTo",data:[r[a][0]+A(o,t),r[a][1]+A(o,t)]})}}return{type:"fillPath",ops:n}}function Lt(e,t){return function(n,r){let o=n.fillStyle||"hachure";if(!rt[o])switch(o){case"zigzag":rt[o]||(rt[o]=new Oe(r));break;case"cross-hatch":rt[o]||(rt[o]=new Ae(r));break;case"dots":rt[o]||(rt[o]=new Pe(r));break;case"dashed":rt[o]||(rt[o]=new Le(r));break;case"zigzag-line":rt[o]||(rt[o]=new Ce(r));break;default:o="hachure",rt[o]||(rt[o]=new Xt(r))}return rt[o]}(t,Fr).fillPolygons(e,t)}function wn(e){let t=Object.assign({},e);return t.randomizer=void 0,e.seed&&(t.seed=e.seed+1),t}function An(e){return e.randomizer||(e.randomizer=new Te(e.seed||0)),e.randomizer.next()}function re(e,t,n,r=1){return n.roughness*r*(An(n)*(t-e)+e)}function A(e,t,n=1){return re(-e,e,t,n)}function gt(e,t,n,r,o,s=!1){let a=s?o.disableMultiStrokeFill:o.disableMultiStroke,i=ze(e,t,n,r,o,!0,!1);if(a)return i;let l=ze(e,t,n,r,o,!0,!0);return i.concat(l)}function ze(e,t,n,r,o,s,a){let i=Math.pow(e-n,2)+Math.pow(t-r,2),l=Math.sqrt(i),c=1;c=l<200?1:l>500?.4:-.0016668*l+1.233334;let h=o.maxRandomnessOffset||0;h*h*100>i&&(h=l/10);let u=h/2,d=.2+.2*An(o),p=o.bowing*o.maxRandomnessOffset*(r-t)/200,f=o.bowing*o.maxRandomnessOffset*(e-n)/200;p=A(p,o,c),f=A(f,o,c);let g=[],m=()=>A(u,o,c),b=()=>A(h,o,c),y=o.preserveVertices;return s&&(a?g.push({op:"move",data:[e+(y?0:m()),t+(y?0:m())]}):g.push({op:"move",data:[e+(y?0:A(h,o,c)),t+(y?0:A(h,o,c))]})),a?g.push({op:"bcurveTo",data:[p+e+(n-e)*d+m(),f+t+(r-t)*d+m(),p+e+2*(n-e)*d+m(),f+t+2*(r-t)*d+m(),n+(y?0:m()),r+(y?0:m())]}):g.push({op:"bcurveTo",data:[p+e+(n-e)*d+b(),f+t+(r-t)*d+b(),p+e+2*(n-e)*d+b(),f+t+2*(r-t)*d+b(),n+(y?0:b()),r+(y?0:b())]}),g}function Jt(e,t,n){if(!e.length)return[];let r=[];r.push([e[0][0]+A(t,n),e[0][1]+A(t,n)]),r.push([e[0][0]+A(t,n),e[0][1]+A(t,n)]);for(let o=1;o<e.length;o++)r.push([e[o][0]+A(t,n),e[o][1]+A(t,n)]),o===e.length-1&&r.push([e[o][0]+A(t,n),e[o][1]+A(t,n)]);return oe(r,null,n)}function oe(e,t,n){let r=e.length,o=[];if(r>3){let s=[],a=1-n.curveTightness;o.push({op:"move",data:[e[1][0],e[1][1]]});for(let i=1;i+2<r;i++){let l=e[i];s[0]=[l[0],l[1]],s[1]=[l[0]+(a*e[i+1][0]-a*e[i-1][0])/6,l[1]+(a*e[i+1][1]-a*e[i-1][1])/6],s[2]=[e[i+1][0]+(a*e[i][0]-a*e[i+2][0])/6,e[i+1][1]+(a*e[i][1]-a*e[i+2][1])/6],s[3]=[e[i+1][0],e[i+1][1]],o.push({op:"bcurveTo",data:[s[1][0],s[1][1],s[2][0],s[2][1],s[3][0],s[3][1]]})}if(t&&t.length===2){let i=n.maxRandomnessOffset;o.push({op:"lineTo",data:[t[0]+A(i,n),t[1]+A(i,n)]})}}else r===3?(o.push({op:"move",data:[e[1][0],e[1][1]]}),o.push({op:"bcurveTo",data:[e[1][0],e[1][1],e[2][0],e[2][1],e[2][0],e[2][1]]})):r===2&&o.push(...ze(e[0][0],e[0][1],e[1][0],e[1][1],n,!0,!0));return o}function xn(e,t,n,r,o,s,a,i){let l=[],c=[];if(i.roughness===0){e/=4,c.push([t+r*Math.cos(-e),n+o*Math.sin(-e)]);for(let h=0;h<=2*Math.PI;h+=e){let u=[t+r*Math.cos(h),n+o*Math.sin(h)];l.push(u),c.push(u)}c.push([t+r*Math.cos(0),n+o*Math.sin(0)]),c.push([t+r*Math.cos(e),n+o*Math.sin(e)])}else{let h=A(.5,i)-Math.PI/2;c.push([A(s,i)+t+.9*r*Math.cos(h-e),A(s,i)+n+.9*o*Math.sin(h-e)]);let u=2*Math.PI+h-.01;for(let d=h;d<u;d+=e){let p=[A(s,i)+t+r*Math.cos(d),A(s,i)+n+o*Math.sin(d)];l.push(p),c.push(p)}c.push([A(s,i)+t+r*Math.cos(h+2*Math.PI+.5*a),A(s,i)+n+o*Math.sin(h+2*Math.PI+.5*a)]),c.push([A(s,i)+t+.98*r*Math.cos(h+a),A(s,i)+n+.98*o*Math.sin(h+a)]),c.push([A(s,i)+t+.9*r*Math.cos(h+.5*a),A(s,i)+n+.9*o*Math.sin(h+.5*a)])}return[c,l]}function kn(e,t,n,r,o,s,a,i,l){let c=s+A(.1,l),h=[];h.push([A(i,l)+t+.9*r*Math.cos(c-e),A(i,l)+n+.9*o*Math.sin(c-e)]);for(let u=c;u<=a;u+=e)h.push([A(i,l)+t+r*Math.cos(u),A(i,l)+n+o*Math.sin(u)]);return h.push([t+r*Math.cos(a),n+o*Math.sin(a)]),h.push([t+r*Math.cos(a),n+o*Math.sin(a)]),oe(h,null,l)}function qr(e,t,n,r,o,s,a,i){let l=[],c=[i.maxRandomnessOffset||1,(i.maxRandomnessOffset||1)+.3],h=[0,0],u=i.disableMultiStroke?1:2,d=i.preserveVertices;for(let p=0;p<u;p++)p===0?l.push({op:"move",data:[a[0],a[1]]}):l.push({op:"move",data:[a[0]+(d?0:A(c[0],i)),a[1]+(d?0:A(c[0],i))]}),h=d?[o,s]:[o+A(c[p],i),s+A(c[p],i)],l.push({op:"bcurveTo",data:[e+A(c[p],i),t+A(c[p],i),n+A(c[p],i),r+A(c[p],i),h[0],h[1]]});return l}function Gt(e){return[...e]}function vn(e,t=0){let n=e.length;if(n<3)throw new Error("A curve must have at least three points.");let r=[];if(n===3)r.push(Gt(e[0]),Gt(e[1]),Gt(e[2]),Gt(e[2]));else{let o=[];o.push(e[0],e[0]);for(let i=1;i<e.length;i++)o.push(e[i]),i===e.length-1&&o.push(e[i]);let s=[],a=1-t;r.push(Gt(o[0]));for(let i=1;i+2<o.length;i++){let l=o[i];s[0]=[l[0],l[1]],s[1]=[l[0]+(a*o[i+1][0]-a*o[i-1][0])/6,l[1]+(a*o[i+1][1]-a*o[i-1][1])/6],s[2]=[o[i+1][0]+(a*o[i][0]-a*o[i+2][0])/6,o[i+1][1]+(a*o[i][1]-a*o[i+2][1])/6],s[3]=[o[i+1][0],o[i+1][1]],r.push(s[1],s[2],s[3])}}return r}function ne(e,t){return Math.pow(e[0]-t[0],2)+Math.pow(e[1]-t[1],2)}function Gr(e,t,n){let r=ne(t,n);if(r===0)return ne(e,t);let o=((e[0]-t[0])*(n[0]-t[0])+(e[1]-t[1])*(n[1]-t[1]))/r;return o=Math.max(0,Math.min(1,o)),ne(e,kt(t,n,o))}function kt(e,t,n){return[e[0]+(t[0]-e[0])*n,e[1]+(t[1]-e[1])*n]}function Re(e,t,n,r){let o=r||[];if(function(i,l){let c=i[l+0],h=i[l+1],u=i[l+2],d=i[l+3],p=3*h[0]-2*c[0]-d[0];p*=p;let f=3*h[1]-2*c[1]-d[1];f*=f;let g=3*u[0]-2*d[0]-c[0];g*=g;let m=3*u[1]-2*d[1]-c[1];return m*=m,p<g&&(p=g),f<m&&(f=m),p+f}(e,t)<n){let i=e[t+0];o.length?(s=o[o.length-1],a=i,Math.sqrt(ne(s,a))>1&&o.push(i)):o.push(i),o.push(e[t+3])}else{let l=e[t+0],c=e[t+1],h=e[t+2],u=e[t+3],d=kt(l,c,.5),p=kt(c,h,.5),f=kt(h,u,.5),g=kt(d,p,.5),m=kt(p,f,.5),b=kt(g,m,.5);Re([l,d,g,b],0,n,o),Re([b,m,f,u],0,n,o)}var s,a;return o}function Xr(e,t){return se(e,0,e.length,t)}function se(e,t,n,r,o){let s=o||[],a=e[t],i=e[n-1],l=0,c=1;for(let h=t+1;h<n-1;++h){let u=Gr(e[h],a,i);u>l&&(l=u,c=h)}return Math.sqrt(l)>r?(se(e,t,c+1,r,s),se(e,c,n,r,s)):(s.length||s.push(a),s.push(i)),s}function Ee(e,t=.15,n){let r=[],o=(e.length-1)/3;for(let s=0;s<o;s++)Re(e,3*s,t,r);return n&&n>0?se(r,0,r.length,n):r}var st="none",Ct=class{constructor(t){this.defaultOptions={maxRandomnessOffset:2,roughness:1,bowing:1,stroke:"#000",strokeWidth:1,curveTightness:0,curveFitting:.95,curveStepCount:9,fillStyle:"hachure",fillWeight:-1,hachureAngle:-41,hachureGap:-1,dashOffset:-1,dashGap:-1,zigzagOffset:-1,seed:0,disableMultiStroke:!1,disableMultiStrokeFill:!1,preserveVertices:!1,fillShapeRoughnessGain:.8},this.config=t||{},this.config.options&&(this.defaultOptions=this._o(this.config.options))}static newSeed(){return Math.floor(Math.random()*2**31)}_o(t){return t?Object.assign({},this.defaultOptions,t):this.defaultOptions}_d(t,n,r){return{shape:t,sets:n||[],options:r||this.defaultOptions}}line(t,n,r,o,s){let a=this._o(s);return this._d("line",[En(t,n,r,o,a)],a)}rectangle(t,n,r,o,s){let a=this._o(s),i=[],l=Dr(t,n,r,o,a);if(a.fill){let c=[[t,n],[t+r,n],[t+r,n+o],[t,n+o]];a.fillStyle==="solid"?i.push(Me([c],a)):i.push(Lt([c],a))}return a.stroke!==st&&i.push(l),this._d("rectangle",i,a)}ellipse(t,n,r,o,s){let a=this._o(s),i=[],l=On(r,o,a),c=Be(t,n,a,l);if(a.fill)if(a.fillStyle==="solid"){let h=Be(t,n,a,l).opset;h.type="fillPath",i.push(h)}else i.push(Lt([c.estimatedPoints],a));return a.stroke!==st&&i.push(c.opset),this._d("ellipse",i,a)}circle(t,n,r,o){let s=this.ellipse(t,n,r,r,o);return s.shape="circle",s}linearPath(t,n){let r=this._o(n);return this._d("linearPath",[ee(t,!1,r)],r)}arc(t,n,r,o,s,a,i=!1,l){let c=this._o(l),h=[],u=bn(t,n,r,o,s,a,i,!0,c);if(i&&c.fill)if(c.fillStyle==="solid"){let d=Object.assign({},c);d.disableMultiStroke=!0;let p=bn(t,n,r,o,s,a,!0,!1,d);p.type="fillPath",h.push(p)}else h.push(function(d,p,f,g,m,b,y){let x=d,k=p,$=Math.abs(f/2),E=Math.abs(g/2);$+=A(.01*$,y),E+=A(.01*E,y);let v=m,B=b;for(;v<0;)v+=2*Math.PI,B+=2*Math.PI;B-v>2*Math.PI&&(v=0,B=2*Math.PI);let C=(B-v)/y.curveStepCount,L=[];for(let N=v;N<=B;N+=C)L.push([x+$*Math.cos(N),k+E*Math.sin(N)]);return L.push([x+$*Math.cos(B),k+E*Math.sin(B)]),L.push([x,k]),Lt([L],y)}(t,n,r,o,s,a,c));return c.stroke!==st&&h.push(u),this._d("arc",h,c)}curve(t,n){let r=this._o(n),o=[],s=gn(t,r);if(r.fill&&r.fill!==st)if(r.fillStyle==="solid"){let a=gn(t,Object.assign(Object.assign({},r),{disableMultiStroke:!0,roughness:r.roughness?r.roughness+r.fillShapeRoughnessGain:0}));o.push({type:"fillPath",ops:this._mergedShape(a.ops)})}else{let a=[],i=t;if(i.length){let l=typeof i[0][0]=="number"?[i]:i;for(let c of l)c.length<3?a.push(...c):c.length===3?a.push(...Ee(vn([c[0],c[0],c[1],c[2]]),10,(1+r.roughness)/2)):a.push(...Ee(vn(c),10,(1+r.roughness)/2))}a.length&&o.push(Lt([a],r))}return r.stroke!==st&&o.push(s),this._d("curve",o,r)}polygon(t,n){let r=this._o(n),o=[],s=ee(t,!0,r);return r.fill&&(r.fillStyle==="solid"?o.push(Me([t],r)):o.push(Lt([t],r))),r.stroke!==st&&o.push(s),this._d("polygon",o,r)}path(t,n){let r=this._o(n),o=[];if(!t)return this._d("path",o,r);t=(t||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");let s=r.fill&&r.fill!=="transparent"&&r.fill!==st,a=r.stroke!==st,i=!!(r.simplification&&r.simplification<1),l=function(h,u,d){let p=Sn($n(Ie(h))),f=[],g=[],m=[0,0],b=[],y=()=>{b.length>=4&&g.push(...Ee(b,u)),b=[]},x=()=>{y(),g.length&&(f.push(g),g=[])};for(let{key:$,data:E}of p)switch($){case"M":x(),m=[E[0],E[1]],g.push(m);break;case"L":y(),g.push([E[0],E[1]]);break;case"C":if(!b.length){let v=g.length?g[g.length-1]:m;b.push([v[0],v[1]])}b.push([E[0],E[1]]),b.push([E[2],E[3]]),b.push([E[4],E[5]]);break;case"Z":y(),g.push([m[0],m[1]])}if(x(),!d)return f;let k=[];for(let $ of f){let E=Xr($,d);E.length&&k.push(E)}return k}(t,1,i?4-4*(r.simplification||1):(1+r.roughness)/2),c=yn(t,r);if(s)if(r.fillStyle==="solid")if(l.length===1){let h=yn(t,Object.assign(Object.assign({},r),{disableMultiStroke:!0,roughness:r.roughness?r.roughness+r.fillShapeRoughnessGain:0}));o.push({type:"fillPath",ops:this._mergedShape(h.ops)})}else o.push(Me(l,r));else o.push(Lt(l,r));return a&&(i?l.forEach(h=>{o.push(ee(h,!1,r))}):o.push(c)),this._d("path",o,r)}opsToPath(t,n){let r="";for(let o of t.ops){let s=typeof n=="number"&&n>=0?o.data.map(a=>+a.toFixed(n)):o.data;switch(o.op){case"move":r+=`M${s[0]} ${s[1]} `;break;case"bcurveTo":r+=`C${s[0]} ${s[1]}, ${s[2]} ${s[3]}, ${s[4]} ${s[5]} `;break;case"lineTo":r+=`L${s[0]} ${s[1]} `}}return r.trim()}toPaths(t){let n=t.sets||[],r=t.options||this.defaultOptions,o=[];for(let s of n){let a=null;switch(s.type){case"path":a={d:this.opsToPath(s),stroke:r.stroke,strokeWidth:r.strokeWidth,fill:st};break;case"fillPath":a={d:this.opsToPath(s),stroke:st,strokeWidth:0,fill:r.fill||st};break;case"fillSketch":a=this.fillSketch(s,r)}a&&o.push(a)}return o}fillSketch(t,n){let r=n.fillWeight;return r<0&&(r=n.strokeWidth/2),{d:this.opsToPath(t),stroke:n.fill||st,strokeWidth:r,fill:st}}_mergedShape(t){return t.filter((n,r)=>r===0||n.op!=="move")}},je=class{constructor(t,n){this.canvas=t,this.ctx=this.canvas.getContext("2d"),this.gen=new Ct(n)}draw(t){let n=t.sets||[],r=t.options||this.getDefaultOptions(),o=this.ctx,s=t.options.fixedDecimalPlaceDigits;for(let a of n)switch(a.type){case"path":o.save(),o.strokeStyle=r.stroke==="none"?"transparent":r.stroke,o.lineWidth=r.strokeWidth,r.strokeLineDash&&o.setLineDash(r.strokeLineDash),r.strokeLineDashOffset&&(o.lineDashOffset=r.strokeLineDashOffset),this._drawToContext(o,a,s),o.restore();break;case"fillPath":{o.save(),o.fillStyle=r.fill||"";let i=t.shape==="curve"||t.shape==="polygon"||t.shape==="path"?"evenodd":"nonzero";this._drawToContext(o,a,s,i),o.restore();break}case"fillSketch":this.fillSketch(o,a,r)}}fillSketch(t,n,r){let o=r.fillWeight;o<0&&(o=r.strokeWidth/2),t.save(),r.fillLineDash&&t.setLineDash(r.fillLineDash),r.fillLineDashOffset&&(t.lineDashOffset=r.fillLineDashOffset),t.strokeStyle=r.fill||"",t.lineWidth=o,this._drawToContext(t,n,r.fixedDecimalPlaceDigits),t.restore()}_drawToContext(t,n,r,o="nonzero"){t.beginPath();for(let s of n.ops){let a=typeof r=="number"&&r>=0?s.data.map(i=>+i.toFixed(r)):s.data;switch(s.op){case"move":t.moveTo(a[0],a[1]);break;case"bcurveTo":t.bezierCurveTo(a[0],a[1],a[2],a[3],a[4],a[5]);break;case"lineTo":t.lineTo(a[0],a[1])}}n.type==="fillPath"?t.fill(o):t.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(t,n,r,o,s){let a=this.gen.line(t,n,r,o,s);return this.draw(a),a}rectangle(t,n,r,o,s){let a=this.gen.rectangle(t,n,r,o,s);return this.draw(a),a}ellipse(t,n,r,o,s){let a=this.gen.ellipse(t,n,r,o,s);return this.draw(a),a}circle(t,n,r,o){let s=this.gen.circle(t,n,r,o);return this.draw(s),s}linearPath(t,n){let r=this.gen.linearPath(t,n);return this.draw(r),r}polygon(t,n){let r=this.gen.polygon(t,n);return this.draw(r),r}arc(t,n,r,o,s,a,i=!1,l){let c=this.gen.arc(t,n,r,o,s,a,i,l);return this.draw(c),c}curve(t,n){let r=this.gen.curve(t,n);return this.draw(r),r}path(t,n){let r=this.gen.path(t,n);return this.draw(r),r}},te="http://www.w3.org/2000/svg",Ne=class{constructor(t,n){this.svg=t,this.gen=new Ct(n)}draw(t){let n=t.sets||[],r=t.options||this.getDefaultOptions(),o=this.svg.ownerDocument||window.document,s=o.createElementNS(te,"g"),a=t.options.fixedDecimalPlaceDigits;for(let i of n){let l=null;switch(i.type){case"path":l=o.createElementNS(te,"path"),l.setAttribute("d",this.opsToPath(i,a)),l.setAttribute("stroke",r.stroke),l.setAttribute("stroke-width",r.strokeWidth+""),l.setAttribute("fill","none"),r.strokeLineDash&&l.setAttribute("stroke-dasharray",r.strokeLineDash.join(" ").trim()),r.strokeLineDashOffset&&l.setAttribute("stroke-dashoffset",`${r.strokeLineDashOffset}`);break;case"fillPath":l=o.createElementNS(te,"path"),l.setAttribute("d",this.opsToPath(i,a)),l.setAttribute("stroke","none"),l.setAttribute("stroke-width","0"),l.setAttribute("fill",r.fill||""),t.shape!=="curve"&&t.shape!=="polygon"||l.setAttribute("fill-rule","evenodd");break;case"fillSketch":l=this.fillSketch(o,i,r)}l&&s.appendChild(l)}return s}fillSketch(t,n,r){let o=r.fillWeight;o<0&&(o=r.strokeWidth/2);let s=t.createElementNS(te,"path");return s.setAttribute("d",this.opsToPath(n,r.fixedDecimalPlaceDigits)),s.setAttribute("stroke",r.fill||""),s.setAttribute("stroke-width",o+""),s.setAttribute("fill","none"),r.fillLineDash&&s.setAttribute("stroke-dasharray",r.fillLineDash.join(" ").trim()),r.fillLineDashOffset&&s.setAttribute("stroke-dashoffset",`${r.fillLineDashOffset}`),s}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(t,n){return this.gen.opsToPath(t,n)}line(t,n,r,o,s){let a=this.gen.line(t,n,r,o,s);return this.draw(a)}rectangle(t,n,r,o,s){let a=this.gen.rectangle(t,n,r,o,s);return this.draw(a)}ellipse(t,n,r,o,s){let a=this.gen.ellipse(t,n,r,o,s);return this.draw(a)}circle(t,n,r,o){let s=this.gen.circle(t,n,r,o);return this.draw(s)}linearPath(t,n){let r=this.gen.linearPath(t,n);return this.draw(r)}polygon(t,n){let r=this.gen.polygon(t,n);return this.draw(r)}arc(t,n,r,o,s,a,i=!1,l){let c=this.gen.arc(t,n,r,o,s,a,i,l);return this.draw(c)}curve(t,n){let r=this.gen.curve(t,n);return this.draw(r)}path(t,n){let r=this.gen.path(t,n);return this.draw(r)}},Pn={canvas:(e,t)=>new je(e,t),svg:(e,t)=>new Ne(e,t),generator:e=>new Ct(e),newSeed:()=>Ct.newSeed()};var Ln={sqrt:Math.sqrt,abs:Math.abs,sin:Math.sin,cos:Math.cos,tan:Math.tan,min:Math.min,max:Math.max,round:Math.round,floor:Math.floor,ceil:Math.ceil,pow:Math.pow,log:Math.log,exp:Math.exp},Cn={pi:Math.PI,e:Math.E},Fe=["and","or","not"],ut=class extends Error{};function Yr(e){let t=[],n=/\s*(\d+(?:\.\d+)?|\.\d+|[A-Za-z_][A-Za-z_0-9]*|>=|<=|==|!=|[-+*/^(),<>])/y,r=0;for(;r<e.length&&!/^\s*$/.test(e.slice(r));){n.lastIndex=r;let o=n.exec(e);if(!o)throw new ut(`Unexpected character in "${e}" (position ${r})`);let s=o[1];/^[\d.]/.test(s)?t.push({kind:"num",value:parseFloat(s)}):/^[A-Za-z_]/.test(s)?t.push({kind:"id",value:s}):t.push({kind:"op",value:s}),r=n.lastIndex}return t}var _e=class{constructor(t,n,r){G(this,"i",0);G(this,"tokens");G(this,"scope");G(this,"src");this.tokens=t,this.scope=n,this.src=r}parse(){let t=this.or();if(this.i<this.tokens.length)throw new ut(`Leftover input at the end of "${this.src}"`);return t}peekOp(...t){let n=this.tokens[this.i];return n&&n.kind==="op"&&t.includes(n.value)?n.value:null}expect(t){if(!this.peekOp(t))throw new ut(`Expected "${t}" in "${this.src}"`);this.i++}word(t){let n=this.tokens[this.i];return!!n&&n.kind==="id"&&n.value===t}or(){let t=this.and();for(;this.word("or");){this.i++;let n=this.and();t=t!==0||n!==0?1:0}return t}and(){let t=this.not();for(;this.word("and");){this.i++;let n=this.not();t=t!==0&&n!==0?1:0}return t}not(){return this.word("not")?(this.i++,this.not()===0?1:0):this.compare()}compare(){let t=this.sum(),n=this.peekOp(">","<",">=","<=","==","!=");if(!n)return t;this.i++;let r=this.sum();return(n===">"?t>r:n==="<"?t<r:n===">="?t>=r:n==="<="?t<=r:n==="=="?t===r:t!==r)?1:0}sum(){let t=this.term(),n;for(;n=this.peekOp("+","-");){this.i++;let r=this.term();t=n==="+"?t+r:t-r}return t}term(){let t=this.unary(),n;for(;n=this.peekOp("*","/");){this.i++;let r=this.unary();t=n==="*"?t*r:t/r}return t}unary(){return this.peekOp("-")?(this.i++,-this.unary()):this.peekOp("+")?(this.i++,this.unary()):this.power()}power(){let t=this.primary();return this.peekOp("^")?(this.i++,Math.pow(t,this.unary())):t}primary(){let t=this.tokens[this.i];if(!t)throw new ut(`Incomplete expression: "${this.src}"`);if(t.kind==="num")return this.i++,t.value;if(t.kind==="id"){if(this.i++,this.peekOp("(")){if(!Object.hasOwn(Ln,t.value))throw new ut(`Unknown function "${t.value}"`);let n=Ln[t.value];this.i++;let r=[];if(!this.peekOp(")"))for(r.push(this.or());this.peekOp(",");)this.i++,r.push(this.or());return this.expect(")"),n(...r)}if(Fe.includes(t.value))throw new ut(`"${t.value}" needs parentheses here, in "${this.src}"`);if(Object.hasOwn(this.scope,t.value))return this.scope[t.value];if(Object.hasOwn(Cn,t.value))return Cn[t.value];throw new ut(`Unknown variable "${t.value}" in "${this.src}"`)}if(t.value==="("){this.i++;let n=this.or();return this.expect(")"),n}throw new ut(`Unexpected symbol "${t.value}" in "${this.src}"`)}};function Vr(e,t){return new _e(Yr(e),t,e).parse()}function R(e,t){let n=typeof e=="number"?e:Vr(e,t);if(!Number.isFinite(n))throw new ut(`Non-finite result in "${e}".`);return n}var Tn="pt-BR";function ae(e,t,n=Tn){if(!isFinite(e))return"?";let r=t===void 0?{maximumFractionDigits:2,minimumFractionDigits:0}:{maximumFractionDigits:t,minimumFractionDigits:t};return new Intl.NumberFormat(n,r).format(e)}function it(e,t,n=Tn){return e.replace(/\{([^{}:]+)(?::(\d))?\}/g,(r,o,s)=>ae(R(o,t),s===void 0?void 0:Number(s),n))}var Vt=["person","person-pointing","person-sitting","house","car","bus","coin","phone","document","server","bank","cloud","queue","desk","computer","clock","lock","money-arrow","tree","school","hospital","factory","truck","cart","safe","bulb","gear","database","robot","ship","container","warehouse","box","pallet","shop","shelf","field","cup","function","api-gateway","cache","cluster","board","book","pencil"],Tt={pessoa:"person","pessoa-apontando":"person-pointing","pessoa-sentada":"person-sitting",casa:"house",carro:"car",onibus:"bus",moeda:"coin",celular:"phone",documento:"document",servidor:"server",banco:"bank",nuvem:"cloud",fila:"queue",mesa:"desk",computador:"computer",relogio:"clock",cadeado:"lock","seta-dinheiro":"money-arrow"},Bt=e=>Vt.includes(e)?e:typeof e=="string"&&Object.hasOwn(Tt,e)?Tt[e]:void 0,De=80,zn=e=>Bt(e)!==void 0,w={skin:"#E8C6A5",shirt:"#A9BCC3",wood:"#D8C29C",gold:"#F2C94C",paper:"#FFFFFF",screen:"#DCE8F0",device:"#5B6B7C",roof:"#D9785F",wall:"#F3E3C3",car:"#7FA7C9",bus:"#E9C46A",green:"#7DBE8A",dark:"#4A4A4A",metal:"#C9D3DD",board:"#2F4F3F",chalk:"#F2EFE6"},M=(e,t,n,r,o,s)=>({kind:"polygon",points:[[e,t],[e+n,t],[e+n,t+r],[e,t+r]],fill:o,main:s}),P=(...e)=>({kind:"polyline",points:e});function Rn(e){return[{kind:"polygon",points:[[-.15,-.72],[.15,-.72],[.19,-.38],[-.19,-.38]],fill:w.shirt,main:!0},{kind:"circle",c:[0,-.87],r:.11,fill:w.skin},...e,P([-.08,-.38],[-.1,0]),P([.08,-.38],[.1,0])]}var Bn=Rn([P([-.15,-.7],[-.25,-.42]),P([.15,-.7],[.25,-.42])]);function Wr(e,t,n){let r=([o,s])=>[n+o*t,s*t];return e.map(o=>o.kind==="circle"?{...o,c:r(o.c),r:o.r*t}:{...o,points:o.points.map(r)})}function Hr(){let e=[[-.28,-.3,.18],[-.06,-.45,.25],[.2,-.4,.21],[.37,-.27,.13]],t=[];for(let n=0;n<=24;n++){let r=-.46+.96*n/24,o=e.filter(([s,,a])=>Math.abs(r-s)<=a).map(([s,a,i])=>a-Math.sqrt(Math.max(0,i*i-(r-s)**2)));o.length&&t.push([r,Math.min(...o)])}return[...t,[.42,-.12],[-.4,-.12]]}var Ur={person:Bn,"person-pointing":Rn([P([-.15,-.7],[-.25,-.42]),P([.15,-.69],[.47,-.73])]),"person-sitting":[P([-.3,-.8],[-.27,-.4]),P([-.32,-.4],[.2,-.4]),P([-.27,-.4],[-.27,0]),P([.16,-.4],[.16,0]),{kind:"polygon",points:[[-.22,-.77],[.04,-.77],[.06,-.44],[-.22,-.44]],fill:w.shirt,main:!0},{kind:"circle",c:[-.08,-.9],r:.1,fill:w.skin},P([-.1,-.44],[.3,-.44],[.32,0]),P([0,-.74],[.18,-.55],[.3,-.58])],house:[M(-.4,-.6,.8,.6,w.wall,!0),{kind:"polygon",points:[[-.5,-.58],[0,-1],[.5,-.58]],fill:w.roof},M(-.08,-.32,.16,.32,w.wood),M(.16,-.46,.16,.14,w.screen)],car:[{kind:"polygon",fill:w.car,main:!0,points:[[-.5,-.14],[-.5,-.32],[-.3,-.36],[-.18,-.56],[.2,-.56],[.32,-.36],[.5,-.32],[.5,-.14]]},{kind:"polygon",points:[[-.14,-.51],[.17,-.51],[.25,-.37],[-.22,-.37]],fill:w.screen},{kind:"circle",c:[-.28,-.12],r:.1,fill:w.dark},{kind:"circle",c:[.28,-.12],r:.1,fill:w.dark}],bus:[M(-.5,-.66,1,.52,w.bus,!0),...[-.42,-.21,0,.21].map(e=>M(e,-.6,.15,.16,w.screen)),P([-.5,-.3],[.5,-.3]),{kind:"circle",c:[-.3,-.12],r:.1,fill:w.dark},{kind:"circle",c:[.3,-.12],r:.1,fill:w.dark}],coin:[{kind:"circle",c:[0,-.42],r:.4,fill:w.gold,main:!0},{kind:"circle",c:[0,-.42],r:.3},{kind:"curve",points:[[.1,-.56],[-.08,-.57],[-.09,-.46],[.08,-.39],[.08,-.29],[-.11,-.28]]},P([0,-.64],[0,-.2])],phone:[M(-.26,-1,.52,1,w.device,!0),M(-.2,-.92,.4,.76,w.screen),{kind:"circle",c:[0,-.08],r:.035,fill:w.paper}],document:[{kind:"polygon",points:[[-.36,-1],[.16,-1],[.36,-.8],[.36,0],[-.36,0]],fill:w.paper,main:!0},P([.16,-1],[.16,-.8],[.36,-.8]),...[-.66,-.5,-.34,-.18].map(e=>P([-.22,e],[.22,e]))],server:[-1,-.66,-.32].flatMap(e=>[M(-.36,e,.72,.3,w.metal,!0),P([-.26,e+.15],[.06,e+.15]),{kind:"circle",c:[.22,e+.15],r:.035,fill:w.green}]),bank:[{kind:"polygon",points:[[-.5,-.74],[0,-1],[.5,-.74]],fill:w.wall,main:!0},M(-.45,-.74,.9,.08,w.wall),...[-.33,-.11,.11,.33].map(e=>M(e-.04,-.66,.08,.56,w.paper)),M(-.5,-.1,1,.1,w.wall)],cloud:[{kind:"polygon",points:Hr(),fill:w.paper,main:!0}],queue:[-.32,0,.32].flatMap(e=>Wr(Bn,.7,e)),desk:[M(-.5,-.5,1,.07,w.wood,!0),P([-.42,-.43],[-.42,0]),P([.42,-.43],[.42,0])],computer:[M(-.45,-1,.9,.6,w.device,!0),M(-.39,-.94,.78,.48,w.screen),{kind:"polygon",points:[[-.06,-.4],[.06,-.4],[.1,-.1],[-.1,-.1]],fill:w.device},M(-.25,-.1,.5,.08,w.device)],clock:[{kind:"circle",c:[0,-.48],r:.45,fill:w.paper,main:!0},...[[0,-.9,0,-.82],[.42,-.48,.34,-.48],[0,-.06,0,-.14],[-.42,-.48,-.34,-.48]].map(([e,t,n,r])=>P([e,t],[n,r])),P([0,-.48],[0,-.78]),P([0,-.48],[.2,-.48])],lock:[{kind:"curve",points:[[-.22,-.52],[-.22,-.76],[0,-.96],[.22,-.76],[.22,-.52]]},M(-.36,-.54,.72,.54,w.bus,!0),{kind:"circle",c:[0,-.32],r:.06,fill:w.dark},P([0,-.28],[0,-.14])],"money-arrow":[{kind:"polygon",fill:w.green,main:!0,points:[[-.5,-.4],[.12,-.4],[.12,-.56],[.5,-.3],[.12,-.04],[.12,-.2],[-.5,-.2]]},{kind:"circle",c:[-.2,-.3],r:.16,fill:w.gold},P([-.2,-.4],[-.2,-.2])],tree:[M(-.07,-.36,.14,.36,w.wood),{kind:"circle",c:[0,-.64],r:.3,fill:w.green,main:!0}],school:[M(-.45,-.6,.9,.6,w.wall,!0),{kind:"polygon",points:[[-.5,-.6],[0,-.82],[.5,-.6]],fill:w.roof},M(-.08,-.28,.16,.28,w.wood),M(-.36,-.48,.16,.12,w.screen),M(.2,-.48,.16,.12,w.screen),P([0,-.82],[0,-1]),{kind:"polygon",points:[[0,-1],[.17,-.95],[0,-.9]],fill:w.roof}],hospital:[M(-.4,-.8,.8,.8,w.paper,!0),M(-.045,-.7,.09,.26,"#C8442C"),M(-.13,-.615,.26,.09,"#C8442C"),M(-.1,-.24,.2,.24,w.metal)],factory:[{kind:"polygon",points:[[-.5,0],[-.5,-.5],[-.25,-.65],[-.25,-.5],[0,-.65],[0,-.5],[.25,-.65],[.25,-.5],[.5,-.5],[.5,0]],fill:w.wall,main:!0},M(.3,-.95,.12,.3,w.dark),M(-.38,-.32,.16,.12,w.screen),M(-.08,-.32,.16,.12,w.screen),M(.22,-.32,.16,.12,w.screen)],truck:[M(-.5,-.62,.62,.46,w.metal,!0),{kind:"polygon",points:[[.12,-.16],[.12,-.5],[.34,-.5],[.48,-.32],[.48,-.16]],fill:w.bus},{kind:"polygon",points:[[.18,-.46],[.32,-.46],[.42,-.33],[.18,-.33]],fill:w.screen},{kind:"circle",c:[-.3,-.1],r:.1,fill:w.dark},{kind:"circle",c:[.3,-.1],r:.1,fill:w.dark}],cart:[P([-.48,-.78],[-.4,-.62]),{kind:"polygon",points:[[-.4,-.62],[.42,-.62],[.32,-.26],[-.3,-.26]],fill:w.metal,main:!0},P([-.3,-.26],[-.3,-.14],[.32,-.14]),{kind:"circle",c:[-.22,-.07],r:.06,fill:w.dark},{kind:"circle",c:[.24,-.07],r:.06,fill:w.dark}],safe:[M(-.4,-.82,.8,.82,w.device,!0),M(-.3,-.72,.6,.62,w.metal),{kind:"circle",c:[0,-.41],r:.13,fill:w.paper},P([0,-.41],[.08,-.47])],bulb:[{kind:"circle",c:[0,-.62],r:.3,fill:w.gold,main:!0},M(-.13,-.33,.26,.2,w.metal),{kind:"curve",points:[[-.09,-.52],[0,-.66],[.09,-.52]]},P([-.08,-.08],[.08,-.08])],gear:[{kind:"polygon",points:[[.42,-.5],[.296,-.378],[.297,-.203],[.122,-.204],[0,-.08],[-.122,-.204],[-.297,-.203],[-.296,-.378],[-.42,-.5],[-.296,-.622],[-.297,-.797],[-.122,-.796],[-0,-.92],[.122,-.796],[.297,-.797],[.296,-.622]],fill:w.metal,main:!0},{kind:"circle",c:[0,-.5],r:.12,fill:w.paper}],database:[{kind:"polygon",points:[[-.35,-.8],[.35,-.8],[.35,-.16],[-.35,-.16]],fill:w.screen,main:!0},{kind:"polygon",points:[[.35,-.8],[.303,-.755],[.175,-.722],[0,-.71],[-.175,-.722],[-.303,-.755],[-.35,-.8],[-.303,-.845],[-.175,-.878],[-0,-.89],[.175,-.878],[.303,-.845]],fill:w.metal},{kind:"curve",points:[[-.35,-.16],[0,-.06],[.35,-.16]]},{kind:"curve",points:[[-.35,-.58],[0,-.48],[.35,-.58]]},{kind:"curve",points:[[-.35,-.37],[0,-.27],[.35,-.37]]}],robot:[P([0,-.95],[0,-1]),M(-.22,-.95,.44,.3,w.metal),{kind:"circle",c:[-.09,-.81],r:.045,fill:w.screen},{kind:"circle",c:[.09,-.81],r:.045,fill:w.screen},M(-.28,-.62,.56,.42,w.metal,!0),P([-.28,-.55],[-.42,-.35]),P([.28,-.55],[.42,-.35]),M(-.2,-.2,.12,.2,w.device),M(.08,-.2,.12,.2,w.device)],ship:[{kind:"polygon",points:[[-.48,-.3],[.48,-.3],[.36,-.04],[-.4,-.04]],fill:w.car,main:!0},M(-.42,-.62,.14,.32,w.wall),M(-.24,-.5,.2,.2,w.roof),M(-.02,-.5,.2,.2,w.bus),M(.2,-.5,.2,.2,w.green),{kind:"curve",points:[[-.5,0],[-.3,-.04],[-.1,0],[.1,-.04],[.3,0],[.5,-.04]]}],container:[M(-.46,-.52,.92,.52,w.roof,!0),...[-.3,-.15,0,.15,.3].map(e=>P([e,-.48],[e,-.04]))],warehouse:[{kind:"polygon",points:[[-.46,0],[.46,0],[.46,-.55],[0,-.82],[-.46,-.55]],fill:w.wall,main:!0},M(-.2,-.38,.4,.38,w.metal),P([-.2,-.26],[.2,-.26]),P([-.2,-.13],[.2,-.13])],box:[M(-.36,-.5,.52,.5,w.wood,!0),{kind:"polygon",points:[[-.36,-.5],[.16,-.5],[.36,-.64],[-.16,-.64]],fill:w.wood},{kind:"polygon",points:[[.16,0],[.36,-.14],[.36,-.64],[.16,-.5]],fill:w.wood},P([-.1,-.5],[.1,-.64])],pallet:[M(-.46,-.12,.92,.06,w.wood),...[-.42,-.05,.32].map(e=>M(e,-.06,.1,.06,w.wood)),M(-.42,-.5,.4,.38,w.wood,!0),M(.02,-.5,.4,.38,w.wood),M(-.2,-.82,.4,.32,w.wood)],shop:[M(-.42,-.6,.84,.6,w.wall,!0),{kind:"polygon",points:[[-.48,-.6],[.48,-.6],[.42,-.78],[-.42,-.78]],fill:w.roof},M(-.34,-.48,.34,.26,w.screen),M(.08,-.42,.24,.42,w.wood)],shelf:[M(-.4,-.92,.8,.92,w.paper,!0),P([-.4,-.62],[.4,-.62]),P([-.4,-.32],[.4,-.32]),M(-.32,-.8,.16,.18,w.roof),M(-.1,-.78,.14,.16,w.bus),M(.1,-.5,.22,.18,w.green),M(-.3,-.2,.24,.2,w.wood)],field:[P([-.48,0],[.48,0]),...[-.3,0,.3].flatMap(e=>[{kind:"curve",points:[[e,0],[e-.02,-.25],[e,-.5]]},{kind:"circle",c:[e-.08,-.32],r:.07,fill:w.green,main:!0},{kind:"circle",c:[e+.08,-.42],r:.07,fill:w.green,main:!0},{kind:"circle",c:[e,-.52],r:.06,fill:w.roof}])],cup:[{kind:"polygon",points:[[-.26,-.52],[.26,-.52],[.2,-.1],[-.2,-.1]],fill:w.paper,main:!0},{kind:"curve",points:[[.24,-.44],[.4,-.38],[.22,-.2]]},{kind:"polygon",points:[[-.46,-.1],[.46,-.1],[.36,0],[-.36,0]],fill:w.paper},{kind:"curve",points:[[-.08,-.62],[-.02,-.72],[-.08,-.84]]},{kind:"curve",points:[[.08,-.62],[.14,-.72],[.08,-.84]]}],function:[M(-.38,-.72,.76,.62,w.screen,!0),P([-.14,-.62],[0,-.62],[.14,-.2]),P([.02,-.42],[-.14,-.2])],"api-gateway":[M(-.12,-.8,.24,.8,w.metal,!0),P([-.48,-.55],[-.16,-.55]),P([-.24,-.62],[-.16,-.55],[-.24,-.48]),P([.16,-.3],[.48,-.3]),P([.4,-.37],[.48,-.3],[.4,-.23])],cache:[M(-.34,-.66,.68,.66,w.metal,!0),{kind:"polygon",points:[[.04,-.58],[-.12,-.3],[0,-.3],[-.06,-.08],[.14,-.38],[.02,-.38]],fill:w.gold}],cluster:[{kind:"curve",points:[[-.4,-.8],[0,-.86],[.4,-.8],[.48,-.45],[.4,-.1],[0,-.04],[-.4,-.1],[-.48,-.45],[-.4,-.8]]},M(-.3,-.7,.24,.2,w.screen,!0),M(.06,-.7,.24,.2,w.screen,!0),M(-.12,-.38,.24,.2,w.screen,!0)],board:[M(-.48,-.9,.96,.6,w.board,!0),M(-.34,-.76,.42,.03,w.chalk),M(-.34,-.62,.58,.03,w.chalk),M(-.34,-.48,.3,.03,w.chalk),P([-.3,-.3],[-.36,0]),P([.3,-.3],[.36,0])],book:[{kind:"polygon",points:[[0,-.62],[-.46,-.7],[-.46,-.1],[0,-.04]],fill:w.paper,main:!0},{kind:"polygon",points:[[0,-.62],[.46,-.7],[.46,-.1],[0,-.04]],fill:w.paper,main:!0},P([-.36,-.52],[-.1,-.48]),P([-.36,-.38],[-.1,-.34]),P([.1,-.48],[.36,-.52]),P([.1,-.34],[.36,-.38])],pencil:[{kind:"polygon",points:[[-.38,-.12],[.22,-.72],[.34,-.6],[-.26,0]],fill:w.bus,main:!0},{kind:"polygon",points:[[.22,-.72],[.34,-.6],[.44,-.86]],fill:w.wood},{kind:"polygon",points:[[-.38,-.12],[-.26,0],[-.46,-.02]],fill:w.roof}]},jn=["happy","sad","surprised","worried","idea"],Nn={person:[0,-.87,.11],"person-pointing":[0,-.87,.11],"person-sitting":[-.08,-.9,.1]},In=e=>{let t=Bt(e);return!!t&&t in Nn};function Zr(e,t){let n=Bt(e),r=n&&Nn[n];if(!r)return[];let[o,s,a]=r,i=a/.11,l=(u,d)=>[o+u*i,s+d*i],c=[{kind:"circle",c:l(-.04,-.015),r:.012*i,fill:w.dark},{kind:"circle",c:l(.04,-.015),r:.012*i,fill:w.dark}],h={kind:"curve",points:[l(-.05,.03),l(0,.06),l(.05,.03)]};switch(t){case"happy":return[...c,h];case"sad":return[...c,{kind:"curve",points:[l(-.05,.065),l(0,.035),l(.05,.065)]}];case"surprised":return[...c,{kind:"circle",c:l(0,.05),r:.022*i}];case"worried":return[...c,{kind:"polyline",points:[l(-.05,.055),l(-.017,.04),l(.017,.065),l(.05,.05)]}];case"idea":return[...c,h,{kind:"circle",c:l(0,-.26),r:.07*i,fill:w.gold},{kind:"polygon",points:[l(-.03,-.19),l(.03,-.19),l(.03,-.16),l(-.03,-.16)],fill:w.metal},{kind:"polyline",points:[l(-.11,-.3),l(-.15,-.33)]},{kind:"polyline",points:[l(.11,-.3),l(.15,-.33)]},{kind:"polyline",points:[l(0,-.36),l(0,-.41)]}]}}function _n(e,t,n=De,r=!1,o,s){let[a,i]=t,l=([d,p])=>[a+(r?-d:d)*n,i+p*n],c=s&&Object.hasOwn(s,e)?s[e]:void 0,h=Bt(e);if(!c&&!h)throw new Error(`Unknown prop "${e}".`);return(c??[...Ur[h],...o?Zr(h,o).map(d=>({...d,fine:!0})):[]]).map(d=>d.kind==="circle"?{...d,c:l(d.c),r:d.r*n}:{...d,points:d.points.map(l)})}var Fn=["spin","drive","steam","talk","pulse","float"],Dn=8,qn=24;function ht(e){let t={};for(let[n,r]of Object.entries(e.params??{}))t[n]=r.value;for(let[n,r]of Object.entries(e.switches??{}))t[n]=r.on?1:0;return t}var Xn=["card","line","arrow","polyline","polygon","curve","circle","ellipse","plot","text","highlight","pause","prop","repeat","when","move","link","counter","row","column","grid","axis","timeline","balloon","brace","note","table","bars","chain","animate"],bt=["text","prop","card","counter","circle","ellipse"],Gn=["row","column","grid","chain"],Kr=50;function K(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${t}: expected an object.`)}function X(e,t){if(typeof e!="string"||!e.trim()||e.length>2e3)throw new Error(`${t}: expected text of 1 to 2000 characters.`)}function F(e,t,n=-1e4,r=1e4){if(typeof e!="number"||!Number.isFinite(e)||e<n||e>r)throw new Error(`${t}: expected a number between ${n} and ${r}.`)}function et(e,t){if(typeof e=="string"){if(X(e,t),e.length>300)throw new Error(`${t}: expression too long.`)}else F(e,t)}function tt(e,t){if(!Array.isArray(e)||e.length!==2)throw new Error(`${t}: expected [x, y].`);e.forEach((n,r)=>et(n,`${t}[${r}]`))}function dt(e,t){e!==void 0&&X(e,t)}function nt(e,t,n){if(e!==void 0&&(typeof e!="string"||!t.includes(e)))throw new Error(`${n}: choose one of ${t.join(", ")}.`)}function ce(e){if(!/^[A-Za-z_][A-Za-z_0-9]*$/.test(e)||["__proto__","constructor","prototype",...Fe].includes(e))throw new Error(`Invalid variable name: "${e}".`)}var zt=(e,t)=>t.includes("{")||e.exact.has(t)||[...e.repeated].some(n=>t.startsWith(`${n}-`)&&/^\d+$/.test(t.slice(n.length+1)));function vt(e,t,n,r){r&&e[t]===void 0&&(e[t]=[0,0]),tt(e[t],`${n}.${t}`)}function Wt(e,t,n,r,o=!1){if(K(e,t),++n.count>500)throw new Error(`${t}: a recipe draws at most 500 steps, counting those inside repeat and when.`);if(r){for(let i of["chapter","say","duration"])if(e[i]!==void 0)throw new Error(`${t}.${i}: put it on the ${r} step itself, not on a step inside it.`);if(e.type==="pause")throw new Error(`${t}: a pause cannot go inside ${r}.`);if(e.type==="repeat"&&r==="repeat")throw new Error(`${t}: a repeat cannot go inside another repeat.`);if(Gn.includes(r)&&e.place!==void 0)throw new Error(`${t}.place: the ${r} places the steps inside it.`)}if(!Xn.includes(e.type))throw new Error(`${t}: unknown type "${e.type}".`);for(let i of["id","say","chapter"])dt(e[i],`${t}.${i}`);if(e.duration!==void 0&&F(e.duration,`${t}.duration`,0,3e4),e.nudge!==void 0){if(["pause","move","link","animate"].includes(e.type))throw new Error(`${t}.nudge: a ${e.type} has no place of its own to move.`);if(!Array.isArray(e.nudge)||e.nudge.length!==2)throw new Error(`${t}.nudge: use [dx, dy].`);e.nudge.forEach((i,l)=>F(i,`${t}.nudge[${l}]`,-900,900))}let s=r!==null&&Gn.includes(r)||o;if(e.place!==void 0){if(!bt.includes(e.type))throw new Error(`${t}.place: only ${bt.join(", ")} can be placed.`);if(K(e.place,`${t}.place`),X(e.place.to,`${t}.place.to`),!zt(n,String(e.place.to)))throw new Error(`${t}.place.to: no earlier step has the id "${e.place.to}".`);if(!["below","above","left","right"].includes(e.place.side))throw new Error(`${t}.place.side: choose one of below, above, left, right.`);e.place.gap!==void 0&&F(e.place.gap,`${t}.place.gap`,-200,400),nt(e.place.align,["center","start","end"],`${t}.place.align`)}let a=s||e.place!==void 0;if(e.style!==void 0){K(e.style,`${t}.style`);for(let i of["color","fill"]){let l=e.style[i];if(l!==void 0&&(typeof l!="string"||!/^(#[\da-f]{3,8}|[a-z]+)$/i.test(l)))throw new Error(`${t}.style.${i}: use a hex colour or a colour name, no URLs.`)}for(let i of["width","roughness","bowing"])e.style[i]!==void 0&&F(e.style[i],`${t}.style.${i}`,0,20);if(e.style.opacity!==void 0&&F(e.style.opacity,`${t}.style.opacity`,0,1),e.style.dashed!==void 0&&typeof e.style.dashed!="boolean")throw new Error(`${t}: dashed must be a boolean.`);nt(e.style.fillStyle,["hachure","solid","zigzag","cross-hatch","dots"],`${t}.style.fillStyle`)}switch(e.type){case"line":case"arrow":case"highlight":tt(e.from,`${t}.from`),tt(e.to,`${t}.to`),e.thickness!==void 0&&F(e.thickness,`${t}.thickness`,1,200);break;case"polyline":case"polygon":case"curve":if(!Array.isArray(e.points)||e.points.length<(e.type==="polygon"?3:2)||e.points.length>500)throw new Error(`${t}: points needs ${e.type==="polygon"?3:2} to 500 points.`);e.points.forEach((i,l)=>tt(i,`${t}.points[${l}]`));break;case"circle":case"ellipse":vt(e,"center",t,a);for(let i of e.type==="circle"?["r"]:["rx","ry"])et(e[i],`${t}.${i}`),typeof e[i]=="number"&&F(e[i],`${t}.${i}`,0);break;case"text":vt(e,"at",t,a),X(e.text,`${t}.text`),e.size!==void 0&&F(e.size,`${t}.size`,1,200),e.rotate!==void 0&&F(e.rotate,`${t}.rotate`,-360,360),nt(e.font,["hand","body"],`${t}.font`),nt(e.anchor,["start","middle","end"],`${t}.anchor`);break;case"card":vt(e,"at",t,a),et(e.w,`${t}.w`),et(e.h,`${t}.h`);for(let i of["w","h"])typeof e[i]=="number"&&F(e[i],`${t}.${i}`,40);if(X(e.title,`${t}.title`),e.lines!==void 0){if(!Array.isArray(e.lines)||e.lines.length>6)throw new Error(`${t}: at most 6 lines per card.`);e.lines.forEach((i,l)=>X(i,`${t}.lines[${l}]`))}break;case"plot":X(e.fn,`${t}.fn`),e.var!==void 0&&(X(e.var,`${t}.var`),ce(String(e.var))),tt(e.domain,`${t}.domain`),tt(e.range,`${t}.range`),K(e.box,`${t}.box`);for(let i of["x","y","w","h"])et(e.box[i],`${t}.box.${i}`);if(e.samples!==void 0&&(F(e.samples,`${t}.samples`,2,1e3),!Number.isInteger(e.samples)))throw new Error(`${t}: samples must be an integer.`);break;case"pause":F(e.ms,`${t}.ms`,0,3e4),dt(e.ask,`${t}.ask`);break;case"prop":if(!zn(e.name)&&!n.figures.has(String(e.name))){let i=n.figures.size?`, or one the recipe defines (${[...n.figures].join(", ")})`:"";throw new Error(`${t}.name: unknown prop "${String(e.name)}"; use one of ${Vt.join(", ")}${i}.`)}if(vt(e,"at",t,a),e.size!==void 0&&(et(e.size,`${t}.size`),typeof e.size=="number"&&F(e.size,`${t}.size`,10,1e3)),dt(e.label,`${t}.label`),e.flip!==void 0&&typeof e.flip!="boolean")throw new Error(`${t}.flip: expected true or false.`);if(e.mood!==void 0){if(!In(e.name))throw new Error(`${t}.mood: only a person (person, person-pointing, person-sitting) has a face.`);nt(e.mood,jn,`${t}.mood`)}break;case"repeat":if(et(e.times,`${t}.times`),typeof e.times=="number"&&(F(e.times,`${t}.times`,0,Kr),!Number.isInteger(e.times)))throw new Error(`${t}.times: expected a whole number.`);Wt(e.step,`${t}.step`,n,"repeat",s);break;case"when":if(et(e.if,`${t}.if`),!Array.isArray(e.steps)||e.steps.length===0||e.steps.length>50)throw new Error(`${t}.steps: expected 1 to 50 steps.`);e.steps.forEach((i,l)=>Wt(i,`${t}.steps[${l}]`,n,r??"when"));break;case"move":if(X(e.target,`${t}.target`),!zt(n,String(e.target)))throw new Error(`${t}.target: no earlier step has the id "${e.target}".`);tt(e.to,`${t}.to`),nt(e.along,["line","curve"],`${t}.along`),e.ms!==void 0&&F(e.ms,`${t}.ms`,200,5e3);break;case"animate":if(X(e.target,`${t}.target`),!zt(n,String(e.target)))throw new Error(`${t}.target: no earlier step has the id "${e.target}".`);if(nt(e.effect,[...Fn,"stop"],`${t}.effect`),e.effect===void 0)throw new Error(`${t}.effect: choose one of ${[...Fn,"stop"].join(", ")}.`);nt(e.speed,["slow","fast"],`${t}.speed`);break;case"link":for(let i of["from","to"])if(X(e[i],`${t}.${i}`),!zt(n,String(e[i])))throw new Error(`${t}.${i}: no earlier step has the id "${e[i]}".`);dt(e.label,`${t}.label`);break;case"counter":if(vt(e,"at",t,a),et(e.value,`${t}.value`),e.format!==void 0&&(X(e.format,`${t}.format`),!String(e.format).includes("{v")))throw new Error(`${t}.format: show the number as {v}, e.g. "R$ {v:0}".`);e.size!==void 0&&F(e.size,`${t}.size`,1,200),nt(e.anchor,["start","middle","end"],`${t}.anchor`);break;case"row":case"column":case"grid":if(s)throw new Error(`${t}: a ${e.type} cannot go inside another ${r}.`);if(vt(e,"at",t,!1),e.gap!==void 0&&F(e.gap,`${t}.gap`,0,400),e.type==="grid"){if(F(e.columns,`${t}.columns`,1,12),!Number.isInteger(e.columns))throw new Error(`${t}.columns: expected a whole number.`)}else nt(e.align,["center","start","end"],`${t}.align`);if(!Array.isArray(e.steps)||e.steps.length===0||e.steps.length>50)throw new Error(`${t}.steps: expected 1 to 50 steps.`);e.steps.forEach((i,l)=>{K(i,`${t}.steps[${l}]`);let c=i.type==="repeat"?i.step?.type:i.type;if(!bt.includes(c))throw new Error(`${t}.steps[${l}]: a ${e.type} holds only ${bt.join(", ")} (or a repeat of one).`);Wt(i,`${t}.steps[${l}]`,n,e.type)});break;case"chain":if(s)throw new Error(`${t}: a chain cannot go inside a ${r}.`);if(vt(e,"at",t,!1),e.gap!==void 0&&e.gap!=="auto"&&F(e.gap,`${t}.gap`,0,400),nt(e.direction,["right","down"],`${t}.direction`),e.wrap!==void 0&&typeof e.wrap!="boolean")throw new Error(`${t}.wrap: expected true or false.`);if(dt(e.forward,`${t}.forward`),dt(e.back,`${t}.back`),e.size!==void 0&&(et(e.size,`${t}.size`),typeof e.size=="number"&&F(e.size,`${t}.size`,10,1e3)),!Array.isArray(e.steps)||e.steps.length<2||e.steps.length>12)throw new Error(`${t}.steps: a chain joins 2 to 12 pieces.`);e.steps.forEach((i,l)=>{if(K(i,`${t}.steps[${l}]`),!bt.includes(i.type))throw new Error(`${t}.steps[${l}]: a chain holds only ${bt.join(", ")}.`);Wt(i,`${t}.steps[${l}]`,n,"chain")});break;case"axis":case"timeline":if(tt(e.from,`${t}.from`),tt(e.to,`${t}.to`),tt(e.domain,`${t}.domain`),e.type==="axis"){if(e.ticks!==void 0){if(Array.isArray(e.ticks)){if(e.ticks.length>30)throw new Error(`${t}.ticks: at most 30 marks.`);e.ticks.forEach((i,l)=>F(i,`${t}.ticks[${l}]`))}else if(F(e.ticks,`${t}.ticks`,0,30),!Number.isInteger(e.ticks))throw new Error(`${t}.ticks: expected a whole number.`)}if(dt(e.label,`${t}.label`),e.format!==void 0&&(X(e.format,`${t}.format`),!String(e.format).includes("{v")))throw new Error(`${t}.format: show the number as {v}, e.g. "{v} km".`)}else{if(!Array.isArray(e.marks)||e.marks.length===0||e.marks.length>20)throw new Error(`${t}.marks: expected 1 to 20 marks.`);e.marks.forEach((i,l)=>{K(i,`${t}.marks[${l}]`),et(i.at,`${t}.marks[${l}].at`),dt(i.label,`${t}.marks[${l}].label`),dt(i.text,`${t}.marks[${l}].text`)})}break;case"balloon":if(X(e.to,`${t}.to`),!zt(n,String(e.to)))throw new Error(`${t}.to: no earlier step has the id "${e.to}".`);if(X(e.text,`${t}.text`),String(e.text).length>300)throw new Error(`${t}.text: keep a balloon under 300 characters.`);nt(e.side,["below","above","left","right"],`${t}.side`),nt(e.kind,["speech","thought"],`${t}.kind`),e.width!==void 0&&F(e.width,`${t}.width`,80,600),e.size!==void 0&&F(e.size,`${t}.size`,12,60);break;case"brace":if(tt(e.from,`${t}.from`),tt(e.to,`${t}.to`),dt(e.label,`${t}.label`),e.flip!==void 0&&typeof e.flip!="boolean")throw new Error(`${t}.flip: expected true or false.`);break;case"note":if(tt(e.at,`${t}.at`),X(e.text,`${t}.text`),e.to===void 0==(e.point===void 0))throw new Error(`${t}: a note points either to an element (to) or to a point (point).`);if(e.to!==void 0){if(X(e.to,`${t}.to`),!zt(n,String(e.to)))throw new Error(`${t}.to: no earlier step has the id "${e.to}".`)}else tt(e.point,`${t}.point`);e.size!==void 0&&F(e.size,`${t}.size`,12,60);break;case"table":if(tt(e.at,`${t}.at`),!Array.isArray(e.rows)||e.rows.length===0||e.rows.length>12)throw new Error(`${t}.rows: expected 1 to 12 rows.`);if(e.rows.forEach((i,l)=>{if(!Array.isArray(i)||i.length===0||i.length>6)throw new Error(`${t}.rows[${l}]: expected 1 to 6 cells.`);i.forEach((c,h)=>{if(typeof c!="string"||c.length>120)throw new Error(`${t}.rows[${l}][${h}]: expected text of up to 120 characters.`)})}),e.header!==void 0&&typeof e.header!="boolean")throw new Error(`${t}.header: expected true or false.`);e.size!==void 0&&F(e.size,`${t}.size`,12,40);break;case"bars":K(e.box,`${t}.box`);for(let i of["x","y","w","h"])et(e.box[i],`${t}.box.${i}`);if(!Array.isArray(e.values)||e.values.length===0||e.values.length>12)throw new Error(`${t}.values: expected 1 to 12 values.`);if(e.values.forEach((i,l)=>et(i,`${t}.values[${l}]`)),e.labels!==void 0){if(!Array.isArray(e.labels)||e.labels.length>e.values.length)throw new Error(`${t}.labels: at most one label per value.`);e.labels.forEach((i,l)=>X(i,`${t}.labels[${l}]`))}if(e.max!==void 0&&et(e.max,`${t}.max`),e.format!==void 0&&(X(e.format,`${t}.format`),!String(e.format).includes("{v")))throw new Error(`${t}.format: show the number as {v}, e.g. "{v}%".`);break}typeof e.id=="string"&&(r==="repeat"?n.repeated:n.exact).add(e.id)}function Qr(e,t){let n=`defs.${e}`;if(!/^[a-z][a-z0-9-]{1,30}$/.test(e))throw new Error(`${n}: a figure's name is 2 to 31 lowercase letters, digits or -, starting with a letter.`);if(Bt(e)||Object.hasOwn(Tt,e)||Xn.includes(e)||["define","title","param","switch","var"].includes(e))throw new Error(`${n}: "${e}" is already a prop or a step; choose another name.`);if(K(t,n),!Array.isArray(t.shapes)||t.shapes.length===0||t.shapes.length>qn)throw new Error(`${n}.shapes: expected 1 to ${qn} shapes.`);let r=(o,s)=>{if(typeof o!="number"||!Number.isInteger(o)||o<0||o>100)throw new Error(`${s}: expected a whole number from 0 to 100 (the figure's grid, y down; it stands at 50,100).`)};t.shapes.forEach((o,s)=>{let a=`${n}.shapes[${s}]`;if(K(o,a),o.fill!==void 0&&(typeof o.fill!="string"||!/^(#[0-9a-fA-F]{3,8}|[a-z]{3,20})$/.test(o.fill)))throw new Error(`${a}.fill: a colour, as hex or a plain name.`);if(o.kind==="circle"){if(!Array.isArray(o.c)||o.c.length!==2)throw new Error(`${a}.c: expected [x, y].`);o.c.forEach((l,c)=>r(l,`${a}.c[${c}]`)),r(o.r,`${a}.r`);return}if(!["polygon","polyline","curve"].includes(o.kind))throw new Error(`${a}.kind: choose one of polygon, polyline, curve, circle.`);let i=o.kind==="polygon"?3:2;if(!Array.isArray(o.points)||o.points.length<i||o.points.length>40)throw new Error(`${a}.points: a ${o.kind} takes ${i} to 40 points.`);o.points.forEach((l,c)=>{if(!Array.isArray(l)||l.length!==2)throw new Error(`${a}.points[${c}]: expected [x, y].`);l.forEach((h,u)=>r(h,`${a}.points[${c}][${u}]`))})})}function qe(e){K(e,"The recipe");let t=e;F(t.width,"width",100,4e3),F(t.height,"height",100,4e3);for(let o of["id","title","category"])dt(t[o],o);if(t.locale!==void 0&&!(typeof t.locale=="string"&&/^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$/.test(t.locale)&&Intl.NumberFormat.supportedLocalesOf([t.locale]).length>0))throw new Error('locale: expected a language tag such as "en-US" or "pt-BR".');if(nt(t.background,["dots","grid","plain"],"background"),nt(t.theme,["paper","chalkboard"],"theme"),t.quiz!==void 0){if(K(t.quiz,"quiz"),X(t.quiz.question,"quiz.question"),!Array.isArray(t.quiz.options)||t.quiz.options.length<2||t.quiz.options.length>4)throw new Error("quiz.options: expected 2 to 4 options.");if(t.quiz.options.forEach((o,s)=>{if(K(o,`quiz.options[${s}]`),X(o.text,`quiz.options[${s}].text`),X(o.why,`quiz.options[${s}].why`),typeof o.right!="boolean")throw new Error(`quiz.options[${s}].right: expected true or false.`)}),t.quiz.options.filter(o=>o.right===!0).length!==1)throw new Error("quiz.options: exactly one option is right.")}if(t.learning!==void 0){K(t.learning,"learning");for(let o of["goal","question","answer","caveat"])X(t.learning[o],`learning.${o}`)}if(t.params!==void 0){K(t.params,"params");for(let[o,s]of Object.entries(t.params))if(ce(o),K(s,`params.${o}`),X(s.label,`params.${o}.label`),F(s.min,`${o}.min`),F(s.max,`${o}.max`),F(s.step,`${o}.step`,1e-6),F(s.value,`${o}.value`,s.min,s.max),s.max<=s.min)throw new Error(`${o}: max must be greater than min.`)}if(t.vars!==void 0){K(t.vars,"vars");for(let[o,s]of Object.entries(t.vars))ce(o),et(s,`vars.${o}`)}if(t.switches!==void 0){K(t.switches,"switches");let o=Object.entries(t.switches);if(o.length>8)throw new Error("switches: at most 8.");for(let[s,a]of o){if(ce(s),Object.hasOwn(t.params??{},s)||Object.hasOwn(t.vars??{},s))throw new Error(`switches.${s}: the name is already a param or a var.`);if(K(a,`switches.${s}`),X(a.label,`switches.${s}.label`),typeof a.on!="boolean")throw new Error(`switches.${s}.on: expected true or false.`)}}if(!Array.isArray(t.steps)||t.steps.length===0||t.steps.length>250)throw new Error("A recipe needs 1 to 250 steps.");let n=new Set;if(t.defs!==void 0){K(t.defs,"defs");let o=Object.entries(t.defs);if(o.length>Dn)throw new Error(`defs: at most ${Dn} figures.`);for(let[s,a]of o)Qr(s,a),n.add(s)}let r={exact:new Set,repeated:new Set,count:0,figures:n};return t.steps.forEach((o,s)=>Wt(o,`Step ${s+1}`,r,null)),{...t,id:t.id??"pasted",title:t.title??"",background:t.background??"dots"}}function le(e,t="Start"){let n=e.steps.flatMap((r,o)=>r.chapter?[{title:r.chapter,start:o}]:[]);return(!n.length||n[0].start!==0)&&n.unshift({title:t,start:0}),n.map((r,o)=>({...r,end:(n[o+1]?.start??e.steps.length)-1}))}var Jr=50,to=(e,t)=>Math.max(0,Math.min(Jr,Math.round(R(e,t)))),Rt=(e,t)=>t===0?e:typeof e=="number"?Math.round((e+t)*100)/100:`(${e})${t<0?"-":"+"}${Math.abs(t)}`,pt=(e,t,n)=>[Rt(e[0],t),Rt(e[1],n)];function St(e,t,n){switch(e.type){case"prop":case"text":case"card":case"counter":return{...e,at:pt(e.at,t,n)};case"circle":case"ellipse":return{...e,center:pt(e.center,t,n)};case"line":case"arrow":case"highlight":return{...e,from:pt(e.from,t,n),to:pt(e.to,t,n)};case"polyline":case"polygon":case"curve":return{...e,points:e.points.map(r=>pt(r,t,n))};case"plot":return{...e,box:{...e.box,x:Rt(e.box.x,t),y:Rt(e.box.y,n)}};case"repeat":return{...e,step:St(e.step,t,n)};case"row":case"column":case"grid":case"chain":return{...e,at:pt(e.at,t,n)};case"axis":case"timeline":case"brace":return{...e,from:pt(e.from,t,n),to:pt(e.to,t,n)};case"note":return{...e,at:pt(e.at,t,n),...e.point?{point:pt(e.point,t,n)}:{}};case"table":return{...e,at:pt(e.at,t,n)};case"bars":return{...e,box:{...e.box,x:Rt(e.box.x,t),y:Rt(e.box.y,n)}};case"when":return{...e,steps:e.steps.map(r=>St(r,t,n))};default:return e}}function $t(e,t,n=[]){if(e.nudge){let{nudge:r,...o}=e;return $t(St(o,r[0],r[1]),t,n).map(s=>({...s,nudge:[(s.nudge?.[0]??0)+r[0],(s.nudge?.[1]??0)+r[1]]}))}return e.type==="repeat"?Array.from({length:to(e.times,t)},(r,o)=>$t(e.step,{...t,i:o},[...n,o]).map(s=>({...s,id:s.id&&`${s.id}-${o}`}))).flat():e.type==="when"?R(e.if,t)!==0?e.steps.flatMap((r,o)=>$t(r,t,[...n,o])):[]:[{step:e,scope:t,path:n,id:e.id}]}var yt=(e,t)=>e.includes("{")?it(e,t):e;function Vn(e,t){let n=r=>[R(r[0],t),R(r[1],t)];switch(e.type){case"prop":case"text":case"card":case"counter":return n(e.at);case"circle":case"ellipse":return n(e.center);case"line":case"arrow":case"highlight":return n(e.from);case"polyline":case"polygon":case"curve":return n(e.points[0]);case"plot":return[R(e.box.x,t),R(e.box.y,t)];case"row":case"column":case"grid":case"chain":return n(e.at);case"axis":case"timeline":case"brace":return n(e.from);case"note":case"table":return n(e.at);case"bars":return[R(e.box.x,t),R(e.box.y,t)];default:return null}}function jt(e,t,n=0){let[r,o]=[e.x+e.w/2,e.y+e.h/2],[s,a]=[t[0]-r,t[1]-o],i=Math.hypot(s,a);if(i===0)return[r,o];let l=s===0?1/0:e.w/2/Math.abs(s),c=a===0?1/0:e.h/2/Math.abs(a),h=Math.min(l,c);return[r+s*h+s/i*n,o+a*h+a/i*n]}function Xe(e,t,n=8){let r=[e.x+e.w/2,e.y+e.h/2],o=[t.x+t.w/2,t.y+t.h/2];return[jt(e,o,n),jt(t,r,n)]}function Wn(e,t,n=16){let[r,o]=[t[0]-e[0],t[1]-e[1]],s=Math.hypot(r,o)||1,[a,i]=[-o/s,r/s];(i>0||i===0&&a<0)&&([a,i]=[-a,-i]);let l=[(e[0]+t[0])/2,(e[1]+t[1])/2];return{at:[l[0]+a*n,l[1]+i*n],anchor:a>.5?"start":a<-.5?"end":"middle"}}function Ye(e,t,n,r="line"){if(r==="line")return[e[0]+(t[0]-e[0])*n,e[1]+(t[1]-e[1])*n];let[o,s]=[t[0]-e[0],t[1]-e[1]],a=Math.hypot(o,s),[i,l]=a?[-s/a,o/a]:[0,0];l>0&&([i,l]=[-i,-l]);let c=[(e[0]+t[0])/2+i*a*.3,(e[1]+t[1])/2+l*a*.3],h=1-n;return[h*h*e[0]+2*h*n*c[0]+n*n*t[0],h*h*e[1]+2*h*n*c[1]+n*n*t[1]]}var Ve=(e,t)=>Number.isInteger(e)?Math.round(e*t):e*t,ue=(e,t,n,r)=>it(e??"{v}",{...n,v:t},r);function he(e){let t=0;for(let n of e)n.type==="move"&&n.ms?t=Math.max(t,n.ms):n.type==="repeat"?t=Math.max(t,he([n.step])):n.type==="when"&&(t=Math.max(t,he(n.steps)));return t}var at=e=>Math.round(e*100)/100,Yn=e=>Math.max(0,e.w)*Math.max(0,e.h);function eo(e,t){let n=Math.min(e.x+e.w,t.x+t.w)-Math.max(e.x,t.x),r=Math.min(e.y+e.h,t.y+t.h)-Math.max(e.y,t.y);return n>0&&r>0?n*r:0}function We(e,t,n,r=24,o="center"){let s=(l,c,h)=>o==="start"?l:o==="end"?l+c-h:l+(c-h)/2,[a,i]=n==="below"?[s(t.x,t.w,e.w),t.y+t.h+r]:n==="above"?[s(t.x,t.w,e.w),t.y-r-e.h]:n==="right"?[t.x+t.w+r,s(t.y,t.h,e.h)]:[t.x-r-e.w,s(t.y,t.h,e.h)];return[at(a-e.x),at(i-e.y)]}function Hn(e,t,n,r=24,o="center",s=1){if(!t.length)return[];if(e==="grid"){let c=Math.max(1,s),h=Math.max(...t.map(d=>d.w)),u=Math.max(...t.map(d=>d.h));return t.map((d,p)=>{let[f,g]=[p%c,Math.floor(p/c)];return[at(n[0]+f*(h+r)+(h-d.w)/2-d.x),at(n[1]+g*(u+r)+(u-d.h)/2-d.y)]})}let a=e==="row",i=Math.max(...t.map(c=>a?c.h:c.w)),l=a?n[0]:n[1];return t.map(c=>{let[h,u]=a?[c.w,c.h]:[c.h,c.w],d=o==="start"?0:o==="end"?i-u:(i-u)/2,[p,f]=a?[l,n[1]+d]:[n[0]+d,l];return l+=h+r,[at(p-c.x),at(f-c.y)]})}var Ge=16,no=240,ro=90;function Un(e,t,n,r={},o=30){if(!e.length)return{deltas:[],lines:[]};let s=r.direction==="down",a=p=>s?p.h:p.w,i=(s?n.h-t[1]:n.w-t[0])-o,l=p=>r.gap!==void 0&&r.gap!=="auto"?r.gap:p.length<2?Ge:Math.min(no,Math.max(Ge,(i-p.reduce((f,g)=>f+g,0))/(p.length-1))),c=[[]],h=0;e.forEach((p,f)=>{let g=c[c.length-1],m=(g.length?Ge:0)+a(p);r.wrap&&g.length&&h+m>i?(c.push([f]),h=a(p)):(g.push(f),h+=m)});let u=new Array(e.length),d=s?t[0]:t[1];for(let p of c){let f=l(p.map(b=>a(e[b]))),g=Math.max(...p.map(b=>s?e[b].w:e[b].h)),m=s?t[1]:t[0];for(let b of p){let y=e[b],[x,k]=s?[d+(g-y.w)/2,m]:[m,d+g-y.h];u[b]=[at(x-y.x),at(k-y.y)],m+=a(y)+f}d+=g+ro}return{deltas:u,lines:c}}function Zn(e,t,n=!1,r=8){if(n){let[i,l]=[e.x+e.w/2,t.x+t.w/2],[c,h]=[e.y+e.h+24,t.y-24],u=(e.x+e.w+t.x)/2;return[[i,e.y+e.h+r],[i,c],[u,c],[u,h],[l,h],[l,t.y-r]]}let o=e.x+e.w+24,s=(e.y+e.h+t.y)/2,a=t.x+t.w/2;return[[e.x+e.w+r,e.y+e.h/2],[o,e.y+e.h/2],[o,s],[a,s],[a,t.y-r]]}function He(e,t,n,r=30){let o=(s,a,i)=>a>i-2*r?s<0||s+a>i?(i-a)/2-s:0:s<0?r-s:s+a>i?i-r-(s+a):0;return[at(o(e.x,e.w,t)),at(o(e.y,e.h,n))]}function Kn(e,t,n,r=60,o=4){let s=a=>t.some(i=>eo(a,i)>.2*Math.min(Yn(a),Yn(i)));if(!s(e))return 0;for(let a=o;a<=r;a+=o)for(let i of[a,-a]){let l={...e,y:e.y+i};if(l.y>=0&&l.y+l.h<=n&&!s(l))return i}return 0}function Qn(e,t){if(Array.isArray(t))return t;let n=t??5;return n===0?[]:Array.from({length:n+1},(r,o)=>at(e[0]+(e[1]-e[0])*o/n))}function Ue(e,t,n,r){let o=(r-n[0])/(n[1]-n[0]);return!Number.isFinite(o)||o<-1e-9||o>1+1e-9?null:[at(e[0]+(t[0]-e[0])*o),at(e[1]+(t[1]-e[1])*o)]}function Ze(e,t){let[n,r]=[t[0]-e[0],t[1]-e[1]],o=Math.hypot(n,r)||1,s=[-r/o,n/o];return(Math.abs(n)>=Math.abs(r)?s[1]<0:s[0]>0)&&(s=[-s[0],-s[1]]),[s[0]||0,s[1]||0]}var oo="http://www.w3.org/2000/svg",ft="#2B2B2B",so={"#2b2b2b":"#F4F1E8","#242424":"#F4F1E8",black:"#F4F1E8","#2f5bea":"#A8C1FF","#1f4e9a":"#A8C1FF",blue:"#A8C1FF","#c8442c":"#FF9F8A",red:"#FF9F8A","#2e8f62":"#93E2AE","#0e7a0b":"#93E2AE",green:"#93E2AE","#8c8578":"#CFC9BC","#5e5a52":"#D9D3C6",grey:"#CFC9BC",gray:"#CFC9BC","#ffffff":"#34493D","#fff":"#34493D",white:"#34493D"},io=["text","card","prop","counter"],Ke={hand:"'Caveat', cursive",body:"'Shantell Sans', system-ui, sans-serif"},Nt=class extends Error{},Jn=e=>e<.5?2*e*e:1-Math.pow(-2*e+2,2)/2,ao="cubic-bezier(.45,0,.55,1)",co="[data-anim]{transform-box:fill-box;transform-origin:center}[data-anim=talk]{transform-origin:center bottom}@keyframes ct-spin{to{transform:rotate(360deg)}}@keyframes ct-drive{0%,100%{transform:translate(0,0)}25%{transform:translate(-5px,-2px) rotate(-1deg)}75%{transform:translate(5px,-2px) rotate(1deg)}}@keyframes ct-talk{0%,100%{transform:rotate(0) scaleY(1)}50%{transform:rotate(-2deg) scaleY(1.03)}}@keyframes ct-pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.1)}}@keyframes ct-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-7px)}}@keyframes ct-wisp{0%{opacity:0;transform:translateY(6px)}30%{opacity:.9}100%{opacity:0;transform:translateY(-14px)}}@media (prefers-reduced-motion:reduce){[data-anim]{animation:none!important}}",lo={spin:[3200,"linear"],drive:[1600,"ease-in-out"],talk:[900,"ease-in-out"],pulse:[1400,"ease-in-out"],float:[3e3,"ease-in-out"],wisp:[2100,"ease-out"]},tr="@keyframes ct-draw{from{stroke-dasharray:var(--l) var(--l);stroke-dashoffset:var(--l)}to{stroke-dasharray:var(--l) var(--l);stroke-dashoffset:0}}@keyframes ct-write{from{transform:scaleX(0)}}@keyframes ct-fade{from{opacity:0}}@keyframes ct-show{0%,100%{opacity:1}}@keyframes ct-wait{0%,100%{opacity:0}}@keyframes ct-move{from{transform:translate(var(--fx),var(--fy))}50%{transform:translate(var(--mx),var(--my))}}@media (prefers-reduced-motion:reduce){*{animation:none!important}}";function D(e,t={}){let n=document.createElementNS(oo,e);for(let[r,o]of Object.entries(t))n.setAttribute(r,String(o));return n}var Qe=e=>[e.x+e.w/2,e.y+e.h/2];function ho(e){return 1e3+e*97}function Je(e,t=e.steps.length-1){let n=[],r=Math.min(t,e.steps.length-1);for(let o=0;o<=r;){let s=e.steps[o],a=o;if(s.type!=="pause")for(;a<r;){let l=e.steps[a+1];if(l.type==="pause"||l.say||l.chapter)break;a++}let i=s.type==="pause"?s.ms:s.duration===0?0:Math.min(1600,Math.max(1e3,s.duration??(s.type==="text"?1400:1100)));n.push({start:o,end:a,duration:s.type==="pause"?i:Math.max(i,he(e.steps.slice(o,a+1)))}),o=a+1}return n}function de(e,t){let n={};for(let[r,o]of Object.entries(e.params??{}))n[r]=t[r]??o.value;for(let[r,o]of Object.entries(e.switches??{}))n[r]=t[r]??(o.on?1:0)?1:0;for(let[r,o]of Object.entries(e.vars??{}))n[r]=R(o,n);return n}var uo=0,ct=class{constructor(t,n=()=>{}){G(this,"uid",`dw${++uo}`);G(this,"gen",Pn.generator());G(this,"run",0);G(this,"speed",1);G(this,"layers");G(this,"defs");G(this,"named",new Map);G(this,"locale");G(this,"paper",{w:0,h:0});G(this,"textBoxes",[]);G(this,"leafNudge");G(this,"theme","paper");G(this,"css",!1);G(this,"figures",{});G(this,"motion","run");G(this,"beatAt",0);G(this,"steam",new Map);G(this,"svg");G(this,"onSay");this.svg=t,this.onSay=n}stop(){this.run++,this.layers&&(this.layers.pencil.style.opacity="0")}setSpeed(t){if(!Number.isFinite(t)||t<=0)throw new Error("The speed must be a positive number.");this.speed=t}async render(t,n,r){let o=++this.run;this.setSpeed(r.speed??1);let s=de(t,n);this.locale=t.locale,this.theme=r.theme??t.theme??"paper",this.css=!!r.css&&!r.animate,this.motion=r.motion??"run",this.setup(t);let a=0;try{for(let i of Je(t,r.until)){if(o!==this.run)throw new Nt;this.beatAt=a;let l=[],c,h=r.animate&&i.start>=(r.from??0);for(let u=i.start;u<=i.end;u++){let d=t.steps[u];if(r.onStep?.(u),d.say&&this.onSay(c=it(d.say,s,t.locale)),d.type!=="pause"){let p=this.made(()=>{for(let f of $t(d,s))l.push(...this.buildLeaf(f,u,h))});for(let f of p)f.dataset.step=String(u)}}if(this.css&&(t.steps[i.start].type!=="pause"&&this.schedule(l,a,i.duration),a+=i.duration),h&&r.beforeBeat&&(await r.beforeBeat(c,i.start),o!==this.run))throw new Nt;h&&(t.steps[i.start].type==="pause"?(this.layers.pencil.style.opacity="0",await this.tween(i.duration,o,()=>{})):await this.play(l,i.duration,o))}r.animate&&(this.layers.pencil.style.opacity="0")}catch(i){if(!(i instanceof Nt))throw i}}setup(t){this.figures=po(t.defs),this.steam.clear();let n=this.svg;if(n.replaceChildren(),n.setAttribute("viewBox",`0 0 ${t.width} ${t.height}`),n.style.aspectRatio=`${t.width} / ${t.height}`,n.setAttribute("aria-label",t.title),this.defs=D("defs"),n.append(this.defs),JSON.stringify(t.steps).includes('"type":"animate"')){let l=D("style");l.textContent=co,n.append(l)}let r=t.background??"dots",o=this.theme==="chalkboard";if(r!=="plain"){let l=D("pattern",{id:`${this.uid}-paper`,width:r==="grid"?24:22,height:r==="grid"?24:22,patternUnits:"userSpaceOnUse"});l.append(r==="grid"?D("path",{d:"M24 0H0V24",fill:"none",stroke:o?"#33473B":"#DCE5EF","stroke-width":1}):D("circle",{cx:11,cy:11,r:1.2,fill:o?"#3A5043":"#D9D2C3"})),this.defs.append(l)}n.append(D("rect",{width:t.width,height:t.height,fill:o?"#26372E":"#FBF7EE"})),r!=="plain"&&n.append(D("rect",{width:t.width,height:t.height,fill:`url(#${this.uid}-paper)`}));let s=D("g"),a=D("g"),i=this.makePencil();n.append(s,a,i),this.layers={highlight:s,ink:a,pencil:i},this.named.clear(),this.paper={w:t.width,h:t.height},this.textBoxes=[]}made(t){let n=[this.layers.ink,this.layers.highlight],r=n.map(o=>o.childElementCount);return t(),n.flatMap((o,s)=>[...o.children].slice(r[s]))}seedOf(t,n){return ho(t)+n.reduce((r,o)=>r*31+o+1,0)*7}buildLeaf(t,n,r){var h;let o=t.step.type;if(o==="row"||o==="column"||o==="grid")return this.arrange(t,n,r);if(o==="chain")return this.chain(t,n,r);let s=[n,...t.path].join("_"),a=this.seedOf(n,t.path),i=t.arranged?t.step:this.settle(t,s,a),l=[];this.leafNudge=t.nudge;let c=this.made(()=>{l=this.build(i,s,a,t.scope,r)});this.leafNudge=void 0;for(let u of c)(h=u.dataset).type??(h.type=i.type);if(c.length&&(i.type==="text"||i.type==="counter")&&this.textBoxes.push(this.boxOf(c,0,0)),t.id&&c.length){let u=Vn(i,t.scope)??Qe(this.boxOf(c,0,0));this.named.set(t.id,{els:c,anchor:u,dx:0,dy:0})}return l}measure(t){let n=[this.layers.ink,this.layers.highlight,this.defs],r=n.map(i=>i.childElementCount);t();let o=n.map((i,l)=>[...i.children].slice(r[l])),s=[...o[0],...o[1]],a=s.length?this.boxOf(s,0,0):null;return o.flat().forEach(i=>i.remove()),a}settle(t,n,r){let o=t.step,s=o.type==="text"?!o.rotate:io.includes(o.type);if(!(o.place&&bt.includes(o.type))&&!s)return o;let a=this.measure(()=>this.build(o,n,r,t.scope,!1));if(!a)return o;let[i,l]=[0,0],c=o.place&&this.named.get(yt(o.place.to,t.scope));if(o.place&&c&&([i,l]=We(a,this.boxOf(c.els,c.dx,c.dy),o.place.side,o.place.gap,o.place.align),i+=t.nudge?.[0]??0,l+=t.nudge?.[1]??0),s){let h={...a,x:a.x+i,y:a.y+l},[u,d]=He(h,this.paper.w,this.paper.h);i+=u,l+=d,(o.type==="text"||o.type==="counter")&&(l+=Kn({...h,x:h.x+u,y:h.y+d},this.textBoxes,this.paper.h))}return i||l?St(o,i,l):o}arrange(t,n,r){let o=t.step,s=o.steps.flatMap((h,u)=>$t(h,t.scope,[...t.path,u])),a=s.map(h=>this.measure(()=>this.build(h.step,[n,...h.path].join("_"),this.seedOf(n,h.path),h.scope,!1))??{x:0,y:0,w:0,h:0}),i=Hn(o.type,a,this.pt(o.at,t.scope),o.gap??24,o.type==="grid"?"center":o.align??"center",o.type==="grid"?o.columns:1),l=[],c=this.made(()=>{l=s.flatMap((h,u)=>this.buildLeaf({...h,step:St(h.step,...i[u]),arranged:!0},n,r))});if(t.id&&c.length){let h=this.boxOf(c,0,0);this.named.set(t.id,{els:c,anchor:Qe(h),dx:0,dy:0})}return l}chain(t,n,r){let o=t.step,a=o.steps.map(g=>o.size!==void 0&&g.type==="prop"&&g.size===void 0?{...g,size:o.size}:g).flatMap((g,m)=>$t(g,t.scope,[...t.path,m])),i=a.map(g=>this.measure(()=>this.build(g.step,[n,...g.path].join("_"),this.seedOf(n,g.path),g.scope,!1))??{x:0,y:0,w:0,h:0}),l=o.direction==="down",{deltas:c,lines:h}=Un(i,this.pt(o.at,t.scope),this.paper,{gap:o.gap,direction:o.direction,wrap:o.wrap}),u=i.map((g,m)=>({...g,x:g.x+c[m][0],y:g.y+c[m][1]})),d=this.roughOpts(o.style,this.seedOf(n,[...t.path,99])),p=[],f=this.made(()=>{p=a.flatMap((y,x)=>this.buildLeaf({...y,step:St(y.step,...c[x]),arranged:!0},n,r));let g={...o.style,color:o.style?.color??"#8C8578"};h.forEach((y,x)=>{y.slice(1).forEach(E=>p.push(...this.arrow(...Xe(u[E-1],u[E]),{...d,seed:d.seed+E},g,r)));let k=h[x+1];if(!k)return;let $=Zn(u[y[y.length-1]],u[k[0]],l);p.push(...this.addDrawable(this.gen.linearPath($.slice(0,-1),{...d,seed:d.seed+50+x}),g,r)),p.push(...this.arrow($[$.length-2],$[$.length-1],{...d,seed:d.seed+60+x},g,r))});let m={x:Math.min(...u.map(y=>y.x)),y:Math.min(...u.map(y=>y.y)),w:0,h:0};m.w=Math.max(...u.map(y=>y.x+y.w))-m.x,m.h=Math.max(...u.map(y=>y.y+y.h))-m.y;let b=(y,x,k,$)=>{let E=34+x*70,[v,B]=l?[[m.x+m.w+E,m.y],[m.x+m.w+E,m.y+m.h]]:[[m.x,m.y+m.h+E],[m.x+m.w,m.y+m.h+E]],C={...o.style,color:k,width:3};p.push(...this.arrow($?B:v,$?v:B,{...this.roughOpts(C,d.seed+80+x)},C,r));let L=l?{type:"text",at:[v[0]+14,(v[1]+B[1])/2],text:y,size:24,anchor:"start",style:{color:k}}:{type:"text",at:[(v[0]+B[0])/2,v[1]+32],text:y,size:24,anchor:"middle",style:{color:k}};p.push(this.addText(L,`${n}-chain-${x}`,t.scope,r))};o.forward&&b(o.forward,0,"#2E8F62",!1),o.back&&b(o.back,o.forward?1:0,"#2F5BEA",!0)});if(t.id&&f.length){let g=this.boxOf(f,0,0);this.named.set(t.id,{els:f,anchor:Qe(g),dx:0,dy:0})}return p}animate(t,n){let r=yt(t.target,n),o=this.named.get(r);if(!o)return;let s=o.els.map(h=>h.querySelector("[data-body]")??h);this.steam.get(r)?.remove(),this.steam.delete(r);for(let h of s)delete h.dataset.anim,h.style.animation="";if(t.effect==="stop")return;let a=t.speed==="slow"?1.6:t.speed==="fast"?.6:1,i=(h,u,d=0)=>{let[p,f]=lo[u];h.dataset.anim=u,h.dataset.animStart=String(performance.now()-d);let g=this.motion==="rest"?-(u==="wisp"?p*a*.3:0):this.css?this.beatAt+d:-d;h.style.animation=`ct-${u} ${Math.round(p*a)}ms ${f} ${Math.round(g)}ms infinite`,this.motion==="rest"&&(h.style.animationPlayState="paused")};if(t.effect!=="steam"){for(let h of s)i(h,t.effect);return}let l=this.boxOf(o.els,o.dx,o.dy),c=D("g");c.dataset.steam=r,[-.18,0,.18].forEach((h,u)=>{let d=l.x+l.w*(.5+h),p=D("path",{d:`M${d} ${l.y-4} q 6 -9 0 -18 q -6 -9 0 -18`,fill:"none",stroke:"#8C8578","stroke-width":2,"stroke-linecap":"round"});c.append(p),i(p,"wisp",u*700)}),this.layers.ink.append(c),this.steam.set(r,c)}boxOf(t,n,r){let o=t.map(c=>c.getBBox()),s=Math.min(...o.map(c=>c.x)),a=Math.min(...o.map(c=>c.y)),i=Math.max(...o.map(c=>c.x+c.width))-s,l=Math.max(...o.map(c=>c.y+c.height))-a;return{x:s+n,y:a+r,w:i,h:l}}place(t,n,r){for(let o of t.els)o.dataset.base===void 0&&(o.dataset.base=o.getAttribute("transform")??""),o.setAttribute("transform",`translate(${n} ${r}) ${o.dataset.base}`.trim()),o.dataset.dx=String(n),o.dataset.dy=String(r)}makePencil(){let t=D("g",{"aria-hidden":"true",class:"dw-pencil"});t.style.opacity="0",t.style.transition="opacity .25s",t.style.pointerEvents="none";let n=D("g",{transform:"translate(-3,-46) scale(1.15)"});return n.append(D("path",{d:"M3 40 L 8 28 L 33 3 L 41 11 L 16 36 Z",fill:"#FFD25E",stroke:ft,"stroke-width":2,"stroke-linejoin":"round"}),D("path",{d:"M3 40 L 8 28 L 16 36 Z",fill:"#F1D9B5",stroke:ft,"stroke-width":2,"stroke-linejoin":"round"}),D("path",{d:"M3 40 L 5.3 34.4 L 8.6 37.7 Z",fill:ft}),D("path",{d:"M29 7 L 37 15",stroke:ft,"stroke-width":2})),t.append(n),t}roughOpts(t,n){return{stroke:t?.color??ft,strokeWidth:t?.width??2.6,roughness:t?.roughness??1.6,bowing:t?.bowing??1.4,fill:t?.fill,fillStyle:t?.fillStyle??"hachure",hachureGap:7,seed:n}}tint(t){return t&&this.theme==="chalkboard"?so[t.toLowerCase()]??t:t}pt(t,n){return[R(t[0],n),R(t[1],n)]}build(t,n,r,o,s){let a=this.roughOpts(t.style,r),i=this.gen,l=c=>this.pt(c,o);switch(t.type){case"card":{let[c,h]=l(t.at),u=R(t.w,o),d=R(t.h,o),p=t.lines??[];if(u<40||d<70+p.length*28)throw new Error(`Card "${t.title}": not enough room for its content.`);let f=this.addDrawable(i.rectangle(c,h,u,d,a),t.style,s);return[t.title,...p].forEach((m,b)=>{let y=this.addText({type:"text",at:[c+u/2,h+38+b*28],text:m,size:b===0?30:22,anchor:"middle",style:{color:t.style?.color}},`${n}-${b}`,o,s);if(y.width>u-24)throw new Error(`Card "${t.title}": text too wide; raise w or shorten the line.`);f.push(y)}),f}case"line":return this.addDrawable(i.line(...l(t.from),...l(t.to),a),t.style,s);case"arrow":return this.arrow(l(t.from),l(t.to),a,t.style,s);case"polyline":return this.addDrawable(i.linearPath(t.points.map(l),a),t.style,s);case"polygon":return this.addDrawable(i.polygon(t.points.map(l),a),t.style,s);case"curve":return this.addDrawable(i.curve(t.points.map(l),a),t.style,s);case"circle":{let[c,h]=l(t.center);return this.addDrawable(i.circle(c,h,R(t.r,o)*2,a),t.style,s)}case"ellipse":{let[c,h]=l(t.center);return this.addDrawable(i.ellipse(c,h,R(t.rx,o)*2,R(t.ry,o)*2,a),t.style,s)}case"plot":return this.addDrawable(i.curve(this.samplePlot(t,o),a),t.style,s);case"highlight":{let[c,h]=l(t.from),[u,d]=l(t.to),p=D("path",{d:`M${c} ${h} L${u} ${d}`,stroke:this.theme==="chalkboard"&&!t.style?.color?"#7C6E26":this.tint(t.style?.color??"#FFE45C")??"#FFE45C","stroke-width":t.thickness??18,"stroke-linecap":"round",fill:"none",opacity:t.style?.opacity??.8});return p.dataset.marker="1",this.layers.highlight.append(p),[this.hide(p,s)]}case"text":return[this.addText(t,n,o,s)];case"pause":case"repeat":case"when":case"row":case"column":case"grid":case"chain":return[];case"axis":case"timeline":return this.line(t,n,a,o,s);case"balloon":return this.balloon(t,n,a,o,s);case"brace":return this.brace(t,n,a,o,s);case"note":return this.note(t,n,a,o,s);case"table":return this.table(t,n,a,o,s);case"bars":return this.bars(t,n,a,o,s);case"prop":return this.prop(t,n,a,o,s);case"counter":{let[c,h]=l(t.at),u=R(t.value,o),d=D("g"),p=D("text",{x:c,y:h,fill:this.tint(t.style?.color??ft)??ft,"font-family":Ke.hand,"font-size":t.size??34,"font-weight":700,"text-anchor":t.anchor??"start"});return p.textContent=ue(t.format,s?0:u,o,this.locale),d.append(p),this.layers.ink.append(d),[{kind:"count",el:p,format:t.format,value:u,scope:o,locale:this.locale}]}case"link":{let[c,h]=[this.named.get(yt(t.from,o)),this.named.get(yt(t.to,o))];if(!c||!h)return[];let[u,d]=Xe(this.boxOf(c.els,c.dx,c.dy),this.boxOf(h.els,h.dx,h.dy)),p=this.arrow(u,d,a,t.style,s);if(t.label){let f=Wn(u,d);p.push(this.addText({type:"text",at:f.at,text:t.label,size:22,anchor:f.anchor,style:{color:t.style?.color}},`${n}-label`,o,s))}return p}case"animate":return this.animate(t,o),[];case"move":{let c=this.named.get(yt(t.target,o));if(!c)return[];let[h,u]=l(t.to),d=[c.dx,c.dy],p=[h-c.anchor[0],u-c.anchor[1]];return[c.dx,c.dy]=p,s?[{kind:"move",entry:c,from:d,to:p,along:t.along??"line",ms:t.ms}]:(this.place(c,...p),this.css?[{kind:"move",entry:c,from:d,to:p,along:t.along??"line",ms:t.ms}]:[])}}}line(t,n,r,o,s){let[a,i]=[this.pt(t.from,o),this.pt(t.to,o)],l=[R(t.domain[0],o),R(t.domain[1],o)];if(l[0]===l[1])throw new Error(`${t.type==="axis"?"Axis":"Timeline"}: the domain needs two different ends.`);let c=Ze(a,i),h=Math.abs(i[0]-a[0])>=Math.abs(i[1]-a[1]),u=t.style?.color,d=(m,b,y,x=22,k=h?"middle":c[0]<0?"end":"start",$="hand")=>this.addText({type:"text",at:m,text:b,size:x,anchor:k,font:$,style:{color:u}},`${n}-${y}`,o,s),p=(m,b,y)=>this.addDrawable(this.gen.line(m[0]-c[0]*y,m[1]-c[1]*y,m[0]+c[0]*y,m[1]+c[1]*y,{...r,seed:r.seed+10+b}),t.style,s),f=(m,b)=>[m[0]+c[0]*b,m[1]+c[1]*b+(h?c[1]>0?8:-2:7)];if(t.type==="axis"){let m=this.arrow(a,i,r,t.style,s);return Qn(l,t.ticks).forEach((b,y)=>{let x=Ue(a,i,l,b);x&&m.push(...p(x,y,7),d(f(x,22),it(t.format??"{v}",{...o,v:b},this.locale),`t${y}`))}),t.label&&m.push(d(h?[i[0],i[1]+c[1]*56+8]:[i[0],i[1]-22],t.label,"label",24,h?"end":"middle")),m}let g=this.addDrawable(this.gen.line(...a,...i,r),t.style,s);return t.marks.forEach((m,b)=>{let y=Ue(a,i,l,R(m.at,o));y&&(g.push(...p(y,b,10)),m.label&&g.push(d(f(y,-26),m.label,`l${b}`,26,h?"middle":c[0]<0?"start":"end")),m.text&&g.push(d(f(y,30),m.text,`x${b}`,21)))}),g}arrow(t,n,r,o,s){return[...this.addDrawable(this.gen.line(...t,...n,r),o,s),...this.head(t,n,r,o,s)]}head(t,n,r,o,s){let a=Math.atan2(n[1]-t[1],n[0]-t[0]),i=16,l=[n[0]-i*Math.cos(a-.45),n[1]-i*Math.sin(a-.45)],c=[n[0]-i*Math.cos(a+.45),n[1]-i*Math.sin(a+.45)];return this.addDrawable(this.gen.linearPath([l,n,c],{...r,seed:r.seed+1}),o,s)}textWidth(t,n,r,o=r==="body"?400:700){let s=D("text",{"font-family":Ke[r],"font-size":n,"font-weight":o});s.textContent=t,this.layers.ink.append(s);let a=s.getComputedTextLength();return s.remove(),a}wrap(t,n,r){let o=[];for(let s of t.split(/\s+/).filter(Boolean)){let a=o.at(-1);a!==void 0&&this.textWidth(`${a} ${s}`,n,"hand")<=r?o[o.length-1]=`${a} ${s}`:o.push(s)}return o}balloon(t,n,r,o,s){let a=this.named.get(yt(t.to,o));if(!a)return[];let i=this.boxOf(a.els,a.dx,a.dy),l=t.size??24,c=this.wrap(it(t.text,o,this.locale),l,t.width??240),h=Math.max(...c.map(L=>this.textWidth(L,l,"hand")))+32,u=c.length*l*1.2+22,d=[t.side??"above","right","left","above","below"],p=(L,[N,I])=>L==="above"||L==="below"?[Math.max(30,Math.min(N,this.paper.w-30-h)),I]:[N,Math.max(30,Math.min(I,this.paper.h-30-u))],f=d.map(L=>p(L,We({x:0,y:0,w:h,h:u},i,L,28))),[g,m]=f.find(([L,N])=>L>=0&&N>=0&&L+h<=this.paper.w&&N+u<=this.paper.h)??f[0];g+=this.leafNudge?.[0]??0,m+=this.leafNudge?.[1]??0;let[b,y]=He({x:g,y:m,w:h,h:u},this.paper.w,this.paper.h);[g,m]=[g+b,m+y];let x=16,k=`M${g+x} ${m} H${g+h-x} Q${g+h} ${m} ${g+h} ${m+x} V${m+u-x} Q${g+h} ${m+u} ${g+h-x} ${m+u} H${g+x} Q${g} ${m+u} ${g} ${m+u-x} V${m+x} Q${g} ${m} ${g+x} ${m} Z`,$={...r,fill:t.style?.fill??"#FFFFFF",fillStyle:"solid",roughness:Math.min(r.roughness??1.6,1)},E=this.addDrawable(this.gen.path(k,$),t.style,s),v=[g+h/2,m+u/2],B=jt(i,v,6),C=jt({x:g,y:m,w:h,h:u},B,0);if(t.kind==="thought")for(let[L,N,I]of[[.35,7,2],[.7,4,3]]){let U=[C[0]+(B[0]-C[0])*L,C[1]+(B[1]-C[1])*L];E.push(...this.addDrawable(this.gen.circle(U[0],U[1],N*2,{...$,seed:r.seed+I}),t.style,s))}else{let L=Math.abs(C[0]-v[0])*u>Math.abs(C[1]-v[1])*h?[0,1]:[1,0],N=[C[0]-L[0]*10,C[1]-L[1]*10],I=[C[0]+L[0]*10,C[1]+L[1]*10];E.push(...this.addDrawable(this.gen.polygon([N,B,I],{...$,seed:r.seed+2}),t.style,s))}return c.forEach((L,N)=>{E.push(this.addText({type:"text",at:[v[0],m+11+l*1.2*(N+1)-l*.25],text:L,size:l,anchor:"middle",style:{color:t.style?.color}},`${n}-${N}`,o,s))}),E}brace(t,n,r,o,s){let[a,i]=[this.pt(t.from,o),this.pt(t.to,o)],l=Ze(a,i),c=t.flip?[-l[0],-l[1]]:l,h=Math.hypot(i[0]-a[0],i[1]-a[1])||1,u=[(i[0]-a[0])/h,(i[1]-a[1])/h],d=Math.min(16,h*.08),p=(g,m)=>[a[0]+u[0]*h*g+c[0]*m,a[1]+u[1]*h*g+c[1]*m],f=this.addDrawable(this.gen.curve([a,p(.06,d),p(.44,d),p(.5,d*2),p(.56,d),p(.94,d),i],r),t.style,s);if(t.label){let g=Math.abs(u[0])>=Math.abs(u[1]),m=p(.5,d*2+22),b=g?"middle":c[0]<0?"end":"start";f.push(this.addText({type:"text",at:[m[0],m[1]+(g?c[1]>0?8:-2:7)],text:t.label,size:24,anchor:b,style:{color:t.style?.color}},`${n}-label`,o,s))}return f}note(t,n,r,o,s){let a=t.style?.color??"#2F5BEA",i=[],l=this.made(()=>{i.push(this.addText({type:"text",at:t.at,text:t.text,size:t.size??24,style:{color:a}},`${n}-text`,o,s))}),c=this.boxOf(l,0,0),h=t.to!==void 0?this.named.get(yt(t.to,o)):void 0;if(t.to!==void 0&&!h)return i;let u=h?this.boxOf(h.els,h.dx,h.dy):null,d=u?[u.x+u.w/2,u.y+u.h/2]:this.pt(t.point,o),[p,f]=[c.x+c.w/2,c.y+c.h/2],g=d[1]>c.y+c.h,m=d[1]<c.y,b=g?[p,c.y+c.h+6]:m?[p,c.y-6]:d[0]>p?[c.x+c.w+8,f]:[c.x-8,f],y=u?jt(u,b,8):d,[x,k]=[(b[0]+y[0])/2,(b[1]+y[1])/2],$=Math.hypot(y[0]-b[0],y[1]-b[1])||1,E=I=>[x-(y[1]-b[1])/$*$*.22*I,k+(y[0]-b[0])/$*$*.22*I],[v,B]=[c.x+c.w/2,c.y+c.h/2],C=I=>Math.hypot(I[0]-v,I[1]-B),L=C(E(1))>=C(E(-1))?E(1):E(-1),N={...r,stroke:a};return i.push(...this.addDrawable(this.gen.curve([b,L,y],N),{...t.style,color:a},s),...this.head(L,y,N,{...t.style,color:a},s)),i}table(t,n,r,o,s){let[a,i]=this.pt(t.at,o),l=t.size??22,c=t.header??!0,h=t.rows.map(k=>k.map($=>it($,o,this.locale))),u=Math.max(...h.map(k=>k.length)),d=k=>c&&k===0?"hand":"body",p=Array.from({length:u},(k,$)=>Math.max(40,...h.map((E,v)=>E[$]?this.textWidth(E[$],l,d(v)):0))+28),f=l*1.7,[g,m]=[p.reduce((k,$)=>k+$,0),f*h.length],b=this.addDrawable(this.gen.rectangle(a,i,g,m,r),t.style,s),y=r.seed+3;for(let k=1;k<h.length;k++)b.push(...this.addDrawable(this.gen.line(a,i+f*k,a+g,i+f*k,{...r,seed:y++,strokeWidth:c&&k===1?2.6:1.4}),t.style,s));let x=a;return p.slice(0,-1).forEach(k=>{x+=k,b.push(...this.addDrawable(this.gen.line(x,i,x,i+m,{...r,seed:y++,strokeWidth:1.4}),t.style,s))}),h.forEach((k,$)=>{let E=a;k.forEach((v,B)=>{v&&b.push(this.addText({type:"text",at:[E+p[B]/2,i+f*$+f*.66],text:v,size:l,font:d($),anchor:"middle",style:{color:t.style?.color}},`${n}-${$}-${B}`,{},s)),E+=p[B]})}),b}bars(t,n,r,o,s){let[a,i,l,c]=[R(t.box.x,o),R(t.box.y,o),R(t.box.w,o),R(t.box.h,o)],h=t.values.map(g=>R(g,o)),u=t.max!==void 0?R(t.max,o):Math.max(...h,0)||1,d=l/h.length,p=t.style?.fill??"#2F5BEA",f=this.addDrawable(this.gen.line(a,i+c,a+l,i+c,r),t.style,s);return h.forEach((g,m)=>{let b=Math.max(0,Math.min(c,g/u*c)),y=a+d*m+d/2;b>=1&&f.push(...this.addDrawable(this.gen.rectangle(y-d*.3,i+c-b,d*.6,b,{...r,fill:p,fillStyle:t.style?.fillStyle??"hachure",seed:r.seed+5+m}),{...t.style,fill:p},s)),f.push(this.addText({type:"text",at:[y,i+c-b-10],text:it(t.format??"{v}",{...o,v:g},this.locale),size:22,anchor:"middle",style:{color:t.style?.color}},`${n}-v${m}`,o,s));let x=t.labels?.[m];x&&f.push(this.addText({type:"text",at:[y,i+c+30],text:x,size:22,anchor:"middle",style:{color:t.style?.color}},`${n}-l${m}`,o,s))}),f}prop(t,n,r,o,s){let[a,i]=this.pt(t.at,o),l=t.size===void 0?De:R(t.size,o),c=D("g");c.dataset.prop=t.name,this.layers.ink.append(c);let h=D("g");h.dataset.body="1",c.append(h);let u=t.style?.width??Math.max(1.2,Math.min(2.6,l/36)),d=[];return _n(t.name,[a,i],l,t.flip??!1,t.mood,this.figures).forEach((p,f)=>{let g=p.kind!=="circle"&&p.kind!=="polygon"?void 0:p.main&&t.style?.fill?t.style.fill:p.fill,m=p.fine?{...r,strokeWidth:Math.max(.8,u*.45),roughness:.3,bowing:0,fill:g,fillStyle:"solid",seed:r.seed+f}:{...r,strokeWidth:u,fill:g,fillStyle:t.style?.fillStyle??"solid",seed:r.seed+f},b=p.kind==="circle"?this.gen.circle(p.c[0],p.c[1],p.r*2,m):p.kind==="polygon"?this.gen.polygon(p.points,m):p.kind==="curve"?this.gen.curve(p.points,m):this.gen.linearPath(p.points,m);d.push(...this.addDrawable(b,{opacity:t.style?.opacity,dashed:t.style?.dashed},s,h))}),t.label&&d.push(this.addText({type:"text",at:[a,i+28],text:t.label,size:22,anchor:"middle",style:{color:t.style?.color}},`${n}-label`,o,s,c)),d}samplePlot(t,n){let r=t.var??"x",[o,s]=[R(t.domain[0],n),R(t.domain[1],n)],[a,i]=[R(t.range[0],n),R(t.range[1],n)];if(o===s||a===i)throw new Error("Plot: domain and range need different ends.");let l=R(t.box.x,n),c=R(t.box.y,n),h=R(t.box.w,n),u=R(t.box.h,n),d=t.samples??40,p=[];for(let f=0;f<=d;f++){let g=o+(s-o)*f/d,m=R(t.fn,{...n,[r]:g}),b=c+u-(m-a)/(i-a)*u;p.push([l+(g-o)/(s-o)*h,Math.max(c,Math.min(c+u,b))])}return p}addDrawable(t,n,r,o=this.layers.ink){let s=[];return this.gen.toPaths(t).forEach(a=>{let i=D("path",{d:a.d,stroke:this.tint(a.stroke)??"none","stroke-width":a.strokeWidth,fill:this.tint(a.fill)??"none","stroke-linecap":"round","stroke-linejoin":"round"});n?.opacity!==void 0&&i.setAttribute("opacity",String(n.opacity)),n?.fill&&a.stroke===n.fill&&(a.fill??"none")==="none"&&(i.dataset.hatch="1"),o.append(i),a.fill&&a.fill!=="none"?(r&&(i.style.opacity="0"),s.push({kind:"fade",el:i,opacity:n?.opacity??1})):(s.push(this.hide(i,r)),n?.dashed&&(i.dataset.dashed="1"),n?.dashed&&!r&&i.setAttribute("stroke-dasharray","9 8"))}),s}hide(t,n){let r=t.getTotalLength();return n&&(t.style.strokeDasharray=`${r} ${r}`,t.style.strokeDashoffset=`${r}`),{kind:"path",el:t,length:r}}addText(t,n,r,o,s=this.layers.ink){let[a,i]=this.pt(t.at,r),l=t.rotate??0,c=D("g",l?{transform:`rotate(${l} ${a} ${i})`}:{}),h=D("text",{x:a,y:i,fill:this.tint(t.style?.color??ft)??ft,"font-family":Ke[t.font??"hand"],"font-size":t.size??30,"font-weight":t.font==="body"?400:700,"text-anchor":t.anchor??"start"});h.textContent=it(t.text,r,this.locale),c.append(h),s.append(c);let u=h.getBBox(),d=`${this.uid}-clip-${this.run}-${n}`,p=D("clipPath",{id:d}),f=D("rect",{x:u.x-4,y:u.y-12,width:o?0:u.width+8,height:u.height+24});return p.append(f),this.defs.append(p),h.setAttribute("clip-path",`url(#${d})`),{kind:"text",clip:f,width:u.width+8,x:u.x-4,y:i+2,angle:l,ox:a,oy:i}}play(t,n,r){let o=t.find(s=>s.kind==="text")??t.find(s=>s.kind==="path");return this.layers.pencil.style.opacity=o?"1":"0",this.tween(n,r,s=>{for(let a of t)if(a.kind==="path")this.revealPath(a,s,a===o);else if(a.kind==="text")this.revealText(a,s,a===o);else if(a.kind==="count")a.el.textContent=ue(a.format,s===1?a.value:Ve(a.value,s),a.scope,a.locale);else if(a.kind==="move"){let i=a.ms?Math.min(1,s*n/a.ms):s;this.place(a.entry,...Ye(a.from,a.to,i,a.along))}else a.el.style.opacity=String(s*a.opacity)})}revealPath(t,n,r){let o=t.length*n;if(t.el.style.strokeDashoffset=String(t.length-o),r){let s=t.el.getPointAtLength(o);this.layers.pencil.setAttribute("transform",`translate(${s.x} ${s.y})`)}n===1&&(t.el.style.strokeDasharray="",t.el.style.strokeDashoffset="",t.el.dataset.dashed&&t.el.setAttribute("stroke-dasharray","9 8"))}revealText(t,n,r){let o=t.width*n;if(t.clip.setAttribute("width",String(o)),!r)return;let s=this.layers.pencil,a=t.angle*Math.PI/180,i=t.x+o-t.ox,l=t.y-t.oy,c=t.ox+i*Math.cos(a)-l*Math.sin(a),h=t.oy+i*Math.sin(a)+l*Math.cos(a);s.setAttribute("transform",`translate(${c} ${h-6-Math.abs(Math.sin(n*40))*7})`)}schedule(t,n,r){if(r<=0)return;let o=(s,a,i=r,l=n,c=ao,h="backwards")=>{s.style.animation=`${a} ${Math.round(i)}ms ${c} ${Math.round(l)}ms ${h}`};for(let s of t)if(s.kind==="path")s.el.style.setProperty("--l",String(Math.ceil(s.length)+1)),o(s.el,"ct-draw");else if(s.kind==="text")s.clip.style.transformBox="fill-box",s.clip.style.transformOrigin="0 0",o(s.clip,"ct-write");else if(s.kind==="fade")o(s.el,"ct-fade");else if(s.kind==="count"){let i=r/12;for(let l=0;l<12;l++){let c=s.el.cloneNode();c.textContent=ue(s.format,Ve(s.value,Jn(l/12)),s.scope,s.locale),c.style.opacity="0",o(c,"ct-show",i,n+l*i,"step-end","none"),s.el.before(c)}o(s.el,"ct-wait",n+r,0,"step-end")}else if(s.kind==="move"){let a=Ye(s.from,s.to,.5,s.along);for(let i of s.entry.els){let l=D("g");i.replaceWith(l),l.append(i),l.style.setProperty("--fx",`${s.from[0]-s.to[0]}px`),l.style.setProperty("--fy",`${s.from[1]-s.to[1]}px`),l.style.setProperty("--mx",`${a[0]-s.to[0]}px`),l.style.setProperty("--my",`${a[1]-s.to[1]}px`),o(l,"ct-move",s.ms??r)}}}tween(t,n,r){return new Promise((o,s)=>{let a=performance.now(),i=0,l=c=>{if(n!==this.run)return s(new Nt);i+=(c-a)*this.speed,a=c;let h=Math.min(1,i/Math.max(1,t));r(h===1?1:Jn(h)),h<1?requestAnimationFrame(l):o()};requestAnimationFrame(l)})}};function po(e){let t=([n,r])=>[(n-50)/100,(r-100)/100];return Object.fromEntries(Object.entries(e??{}).map(([n,r])=>[n,r.shapes.map((o,s)=>o.kind==="circle"?{kind:"circle",c:t(o.c),r:o.r/100,fill:o.fill,main:s===0}:o.kind==="polygon"?{kind:"polygon",points:o.points.map(t),fill:o.fill,main:s===0}:{kind:o.kind,points:o.points.map(t)})]))}var j=class extends Error{constructor(n,r){super(`line ${n}: ${r}`);G(this,"line");this.line=n}};function fo(e,t){let n=[],r="",o=!1;for(let s=0;s<e.length;s++){let a=e[s];if(a==="\\"&&o&&s+1<e.length){r+=a+e[++s];continue}a==='"'&&(o=!o),/\s/.test(a)&&!o?(r&&n.push(r),r=""):r+=a}if(o)throw new j(t,"a quote is not closed.");return r&&n.push(r),n}function mo(e){let t={no:0,indent:-1,tokens:[],children:[]},n=[t];return e.split(/\r?\n/).forEach((r,o)=>{let s=o+1;if(!r.trim()||r.trim().startsWith("//"))return;let a=r.length-r.trimStart().length,i=r.trim(),l=i.startsWith("#")?["#",i.slice(1).trim()]:i.startsWith(">")?[">",i.slice(1).trim()]:i.startsWith("json ")?["json",i.slice(5).trim()]:i.startsWith("|")?["|",i]:fo(i,s),c={no:s,indent:a,tokens:l,children:[]};for(;n.length>1&&n[n.length-1].indent>=a;)n.pop();n[n.length-1].children.push(c),n.push(c)}),t.children}var ot=e=>e.length>=2&&e.startsWith('"')&&e.endsWith('"'),Z=e=>ot(e)?e.slice(1,-1).replace(/\\(.)/g,"$1"):e,en=/^-?\d+(\.\d+)?$/;function lt(e,t){if(en.test(e))return Number(e);if(ot(e))return Z(e);if(/^[A-Za-z_][A-Za-z_0-9]*$/.test(e))return e;throw new j(t,`expected a number or an expression in quotes, got ${e}.`)}function Et(e){let t=[],n="",r=!1;for(let o of e)o==='"'&&(r=!r),o===","&&!r?(t.push(n),n=""):n+=o;return t.push(n),t}function Mt(e,t){let n=e?Et(e):[];if(n.length!==2)throw new j(t,`expected a point x,y, got ${e??"nothing"}.`);return[lt(n[0],t),lt(n[1],t)]}function pe(e,t){let n=e?.match(/^(.+?)\.\.(.+)$/);if(!n)throw new j(t,`expected a range a..b, got ${e??"nothing"}.`);return[lt(n[1],t),lt(n[2],t)]}var go=new Set(["text","card","line","arrow","highlight","polyline","polygon","curve","circle","ellipse","plot","pause","row","column","grid","repeat","when","move","counter","axis","timeline","brace","note","table","bars","json","chain","animate"]),tn={"right-of":"right","left-of":"left",above:"above",below:"below"},bo=["color","fill","roughness","bowing","fillStyle","opacity"],er=new Set(["gap","size","r","rx","ry","w","h","columns","ms","thickness"]),nr=new Set(["dashed","flip","noheader","wrap"]);function Q(e,t,n){let r={};for(let o=0;o<e.length;o++){let s=e[o],a,i;if(nr.has(s)){s==="dashed"?r.dashed=!0:s==="flip"?t.flip=!0:s==="wrap"?t.wrap=!0:t.header=!1;continue}let l=s.indexOf("=");if(l>0&&!ot(s))[a,i]=[s.slice(0,l),s.slice(l+1)];else if(er.has(s)&&o+1<e.length)[a,i]=[s,e[++o]];else throw new j(n,`did not understand \xAB${s}\xBB.`);a==="stroke"?r.width=Number(i):bo.includes(a)?r[a]=en.test(i)?Number(i):Z(i):a==="nudge"?t.nudge=Mt(i,n).map(Number):a==="ticks"?t.ticks=i.includes(",")?Et(i).map(Number):Number(i):a==="labels"?t.labels=Et(i).map(Z):a==="id"||a==="anchor"||a==="font"||a==="mood"||a==="along"||a==="side"||a==="kind"||a==="var"||a==="align"||a==="label"||a==="format"||a==="fn"||a==="forward"||a==="back"||a==="direction"?t[a]=Z(i):t[a]=lt(i,n)}return Object.keys(r).length&&(t.style=r),t}function wt(e,t,n,r){let[o,s]=e;if(o==="at")return t[n]=Mt(s,r),e.slice(2);if(o in tn){if(!s||ot(s))throw new j(r,`${o} needs the id of an earlier step.`);t.place={to:s,side:tn[o]};let a=e.slice(2);if(a[0]==="gap"||a[0]?.startsWith("gap=")){let l=a[0]==="gap"?a[1]:a[0].slice(4);t.place.gap=Number(l),a=a.slice(a[0]==="gap"?2:1)}let i=a.findIndex(l=>l.startsWith("align="));return i>=0&&(t.place.align=a[i].slice(6),a=a.filter((l,c)=>c!==i)),a}return e}function fe(e,t){let{no:n,tokens:r}=e,[o,...s]=r,a=()=>e.children.map(c=>fe(c,t)),i=(c,h)=>{if(!c||!ot(c))throw new j(n,`${o} needs ${h} in quotes.`);return Z(c)},l=c=>{if(s[1]!=="->")throw new j(n,`write ${c} x,y -> x,y.`);return{type:c,from:Mt(s[0],n),to:Mt(s[2],n)}};if(o==="json")try{return JSON.parse(s[0])}catch{throw new j(n,"the JSON on this line is not valid.")}if(s[0]==="->"&&!go.has(o)&&!t.has(o)){let c={type:"link",from:o,to:s[1]},h=s.slice(2);return h[0]&&ot(h[0])&&([c.label,h]=[Z(h[0]),h.slice(1)]),Q(h,c,n)}if(s[0]==="says"||s[0]==="thinks"){let c={type:"balloon",to:o,text:i(s[1],"what is said"),...s[0]==="thinks"?{kind:"thought"}:{}};return Q(s.slice(2),c,n)}if(t.has(o)){let c={type:"prop",name:o},h=s,u=h[0];return u&&!ot(u)&&!u.includes("=")&&u!=="at"&&!(u in tn)&&!er.has(u)&&!nr.has(u)&&([c.id,h]=[u,h.slice(1)]),h=wt(h,c,"at",n),h[0]&&ot(h[0])&&([c.label,h]=[Z(h[0]),h.slice(1)]),Q(h,c,n)}switch(o){case"text":{let c={type:"text",text:i(s[0],"its text")};return Q(wt(s.slice(1),c,"at",n),c,n)}case"card":{let c={type:"card"},h=wt(s,c,"at",n),u=h.filter(ot).map(Z);if(h=h.filter(d=>!ot(d)),!u.length)throw new j(n,"a card needs a title in quotes.");return[c.title]=u,u.length>1&&(c.lines=u.slice(1)),Q(h,c,n)}case"line":case"arrow":case"highlight":return Q(s.slice(3),l(o),n);case"brace":{let c=l("brace"),h=s.slice(3);return h[0]&&ot(h[0])&&([c.label,h]=[Z(h[0]),h.slice(1)]),Q(h,c,n)}case"polyline":case"polygon":case"curve":{let c=s.filter(h=>/,/.test(h)&&!h.includes("="));return Q(s.slice(c.length),{type:o,points:c.map(h=>Mt(h,n))},n)}case"circle":case"ellipse":{let c={type:o};return Q(wt(s,c,"center",n),c,n)}case"plot":{let c={type:"plot",fn:i(s[0],"the formula")},h=[];for(let u=1;u<s.length;u++)if(s[u]==="domain")c.domain=pe(s[++u],n);else if(s[u]==="range")c.range=pe(s[++u],n);else if(s[u]==="box"){let d=Et(s[++u]??"");if(d.length!==4)throw new j(n,"write box x,y,w,h.");let[p,f,g,m]=d.map(b=>lt(b,n));c.box={x:p,y:f,w:g,h:m}}else h.push(s[u]);return Q(h,c,n)}case"pause":{let c={type:"pause",ms:600},h=s;return h[0]&&en.test(h[0])&&([c.ms,h]=[Number(h[0]),h.slice(1)]),h[0]==="ask"&&([c.ask,h]=[i(h[1],"the question"),h.slice(2)]),Q(h,c,n)}case"row":case"column":case"grid":case"chain":{let c={type:o},h=wt(s,c,"at",n);return Q(h,c,n),c.steps=a(),c}case"repeat":{let c=s[0]?.replace(/:$/,"");if(!c)throw new j(n,"write repeat n: <step>.");let h={type:"repeat",times:lt(c,n)},u=s.slice(1);if(u.length)h.step=fe({...e,tokens:u,children:[]},t);else if(e.children.length===1)[h.step]=a();else throw new j(n,"a repeat holds one step: on the same line after \xAB:\xBB, or one line under it.");return h}case"when":{let c=s[0]?.replace(/:$/,"");if(!c)throw new j(n,"write when <condition>:.");let h=s.slice(1);return{type:"when",if:lt(c,n),steps:h.length?[fe({...e,tokens:h,children:[]},t)]:a()}}case"animate":{if(!s[0]||!s[1]||s[1].includes("="))throw new j(n,"write animate <id> spin|drive|steam|talk|pulse|float, or animate <id> stop.");let c={type:"animate",target:s[0],effect:s[1]};for(let h of s.slice(2)){let[u,d]=h.split("=");if(u==="speed"&&d)c.speed=d;else throw new j(n,`did not understand \xAB${h}\xBB (an animate takes speed=slow or speed=fast).`)}return c}case"move":{if(s[1]!=="to")throw new j(n,"write move <id> to x,y.");return Q(s.slice(3),{type:"move",target:s[0],to:Mt(s[2],n)},n)}case"counter":{let c={type:"counter"},h=wt(s,c,"at",n);return c.value=lt(h[0]??"",n),h=h.slice(1),h[0]&&ot(h[0])&&([c.format,h]=[Z(h[0]),h.slice(1)]),Q(h,c,n)}case"axis":case"timeline":{let c=l(o),h=s.slice(3);if(h[0]!=="domain")throw new j(n,`write ${o} x,y -> x,y domain a..b.`);return c.domain=pe(h[1],n),h=h.slice(2),o==="timeline"&&(c.marks=e.children.map(u=>{let[d,p,f,g]=u.tokens;if(d!=="mark")throw new j(u.no,'under a timeline, write mark <when> "label" "text".');return{at:lt(p??"",u.no),...f?{label:Z(f)}:{},...g?{text:Z(g)}:{}}})),Q(h,c,n)}case"note":{let c={type:"note"},h=wt(s,c,"at",n);if(c.text=i(h[0],"its text"),h[1]!=="->")throw new j(n,'write note at x,y "text" -> <id or x,y>.');let u=h[2]??"";return/,/.test(u)?c.point=Mt(u,n):c.to=u,h=h.slice(3),Q(h,c,n)}case"table":{let c={type:"table"};return Q(wt(s,c,"at",n),c,n),c.rows=e.children.map(h=>{if(h.tokens[0]!=="|")throw new j(h.no,"under a table, write rows as | a | b |.");return h.tokens[1].replace(/^\||\|$/g,"").split("|").map(u=>u.trim())}),c}case"bars":{let c={type:"bars"},h=[];for(let u=0;u<s.length;u++)if(s[u]==="box"){let d=Et(s[++u]??"");if(d.length!==4)throw new j(n,"write box x,y,w,h.");let[p,f,g,m]=d.map(b=>lt(b,n));c.box={x:p,y:f,w:g,h:m}}else s[u]==="values"?c.values=Et(s[++u]??"").map(d=>lt(d,n)):s[u]==="labels"?c.labels=Et(s[++u]??"").map(Z):h.push(s[u]);return Q(h,c,n)}}throw new j(n,`\xAB${o}\xBB is not a step, a prop or an id followed by -> / says.`)}function yo(e){let{no:t,tokens:n}=e,r=[],o=n[0],s=1;for(;n[s]==="->";){let i=n[s+1];if(!i||ot(i))throw new j(t,'write a -> b "label" -> c "label".');let l={type:"link",from:o,to:i};s+=2,n[s]&&ot(n[s])&&(l.label=Z(n[s++])),r.push(l),o=i}let a=n.slice(s);return r.map(i=>Q([...a],i,t))}function wo(e){let{no:t,tokens:n}=e,[r,...o]=n,s=l=>{let c=l?.match(/^(\d{1,3}),(\d{1,3})$/);if(!c||Number(c[1])>100||Number(c[2])>100)throw new j(t,`on a figure's grid a point is two whole numbers from 0 to 100, like 24,48 (got ${l??"nothing"}).`);return[Number(c[1]),Number(c[2])]},a={kind:r},i=o;if(r==="circle")i[0]==="at"&&(i=i.slice(1)),a.c=s(i[0]),i=i.slice(1);else if(r==="polygon"||r==="polyline"||r==="curve"){let l=i.filter(c=>c.includes(",")&&!c.includes("="));a.points=l.map(s),i=i.slice(l.length)}else throw new j(t,`a figure is made of polygon, polyline, curve and circle lines, not \xAB${r}\xBB.`);for(let l of i){let[c,h]=l.split("=");if(c==="fill"&&h)a.fill=Z(h);else if(c==="r"&&h&&/^\d{1,3}$/.test(h))a.r=Number(h);else throw new j(t,`did not understand \xAB${l}\xBB in a figure (only fill=\u2026 and, on a circle, r=\u2026).`)}return a}function rr(e,t){let n=new Set(t),r={id:"lesson",title:"",width:900,height:560},o=[],s,a;for(let i of mo(e)){let{no:l,tokens:c}=i,[h,...u]=c,d=m=>{if(!u[0])throw new j(l,`${h} needs ${m}.`);return Z(u.join(" "))};switch(!["->","says","thinks"].includes(u[0])?h:""){case"#":s=u[0];continue;case">":a=u[0];continue;case"title":r.title=d("a title");continue;case"id":r.id=d("an id");continue;case"category":r.category=d("a category");continue;case"theme":r.theme=d("paper or chalkboard");continue;case"locale":r.locale=d("a language tag");continue;case"background":r.background=d("dots, grid or plain");continue;case"size":{let m=u[0]?.match(/^(\d+)x(\d+)$/);if(!m)throw new j(l,"write size 900x560.");[r.width,r.height]=[Number(m[1]),Number(m[2])];continue}case"param":{let[m,b,y,...x]=u,[k,$]=pe(y,l).map(Number),E={label:Z(b??""),min:k,max:$,step:1,value:k};for(let v=0;v<x.length;v++)if(x[v].startsWith("step="))E.step=Number(x[v].slice(5));else if(x[v]==="=")E.value=Number(x[++v]);else throw new j(l,`did not understand \xAB${x[v]}\xBB.`);r.params={...r.params,[m]:E};continue}case"switch":{let[m,b,y]=u;r.switches={...r.switches,[m]:{label:Z(b??""),on:y==="on"}};continue}case"var":{if(u[1]!=="=")throw new j(l,"write var name = value.");r.vars={...r.vars,[u[0]]:lt(u[2]??"",l)};continue}case"learning":{let[m,b]=u;if(!["goal","question","answer","caveat"].includes(m))throw new j(l,'write learning goal|question|answer|caveat "\u2026".');r.learning={...r.learning,[m]:Z(b??"")};continue}case"define":{let m=u[0];if(!m)throw new j(l,"write define <name> and its shapes under it.");r.defs={...r.defs,[m]:{shapes:i.children.map(wo)}},n.add(m);continue}case"quiz":{r.quiz={question:Z(u[0]??""),options:i.children.map(m=>{let[b,...y]=m.tokens;if(b!=="*"&&b!=="-")throw new j(m.no,"under a quiz, write * right option -- why, or - wrong option -- why.");let x=y.map(Z).join(" "),[k,$=""]=x.split(/\s+--\s+/);return{text:k.trim(),right:b==="*",why:$.trim()}})};continue}}let f=u[0]==="->"&&u.indexOf("->",1)>0?yo(i):[fe(i,n)],[g]=f;s!==void 0&&([g.chapter,s]=[s,void 0]),a!==void 0&&([g.say,a]=[a,void 0]),o.push(...f)}return r.steps=o,r}var me=2,or=.2,xo=3,ko=.5,Ht=e=>Math.max(0,e.w)*Math.max(0,e.h);function nn(e,t){let n=Math.min(e.x+e.w,t.x+t.w)-Math.max(e.x,t.x),r=Math.min(e.y+e.h,t.y+t.h)-Math.max(e.y,t.y);return n>0&&r>0?n*r:0}var vo=(e,[t,n])=>t>e.x+2&&t<e.x+e.w-2&&n>e.y+2&&n<e.y+e.h-2,Ut=e=>e.text?` (\xAB${e.text.slice(0,40)}\xBB)`:"",$o=(e,t)=>{let[n,r]=[e.box,t.box];return(e.type==="circle"||e.type==="ellipse")&&r.x>=n.x-2&&r.y>=n.y-2&&r.x+r.w<=n.x+n.w+2&&r.y+r.h<=n.y+n.h+2};function So(e,t,n){let r=new Map;for(let a of e){let i=a.box;(i.x<-me||i.y<-me||i.x+i.w>t+me||i.y+i.h>n+me)&&r.set(`off:${a.step}`,`step ${a.step+1}${Ut(a)} goes off the paper (${t}\xD7${n})`)}let o=e.filter(a=>a.kind==="text");for(let a=0;a<o.length;a++)for(let i=a+1;i<o.length;i++){let[l,c]=[o[a],o[i]];l.step!==c.step&&nn(l.box,c.box)>or*Math.min(Ht(l.box),Ht(c.box))&&r.set(`texts:${l.step}:${c.step}`,`the texts of steps ${l.step+1}${Ut(l)} and ${c.step+1}${Ut(c)} overlap`)}for(let a of o)for(let i of e)i.kind!=="stroke"||i.step===a.step||$o(i,a)||(i.points??[]).filter(l=>vo(a.box,l)).length>xo&&r.set(`cross:${i.step}:${a.step}`,`a line of step ${i.step+1} crosses the text of step ${a.step+1}${Ut(a)}`);for(let a of o)for(let i of e)i.kind!=="shape"||i.step===a.step||nn(a.box,i.box)>or*Ht(a.box)&&r.set(`on:${i.step}:${a.step}`,`the text of step ${a.step+1}${Ut(a)} sits on the drawing of step ${i.step+1}`);let s=e.filter(a=>a.kind==="shape");for(let a=0;a<s.length;a++)for(let i=a+1;i<s.length;i++){let[l,c]=[s[a],s[i]];l.step!==c.step&&nn(l.box,c.box)>ko*Math.min(Ht(l.box),Ht(c.box))&&r.set(`piled:${l.step}:${c.step}`,`the drawings of steps ${l.step+1} and ${c.step+1} sit on each other`)}return[...r].map(([a,i])=>({key:a,text:i}))}function rn(e){let t=Object.entries(e.params??{}),n=ht(e),r=[n];for(let o of Object.keys(e.switches??{}))r.length<9&&r.push({...n,[o]:n[o]?0:1});for(let[o,s]of t)for(let a of[s.min,s.max])a!==s.value&&r.length<9&&r.push({...n,[o]:a});return r}function Mo(e,t){let n=[];for(let r of e.querySelectorAll("[data-step]")){let o=Number(r.dataset.step),s=r.dataset.type??t.steps[o]?.type,[a,i]=[Number(r.dataset.dx??0),Number(r.dataset.dy??0)],l=u=>({x:u.x+a,y:u.y+i,w:u.width,h:u.height}),c=r.querySelector("text");if(r.dataset.prop){let u=[...r.querySelectorAll("path")].map(f=>l(f.getBBox())),d=Math.min(...u.map(f=>f.x)),p=Math.min(...u.map(f=>f.y));n.push({step:o,type:s,kind:"shape",box:{x:d,y:p,w:Math.max(...u.map(f=>f.x+f.w))-d,h:Math.max(...u.map(f=>f.y+f.h))-p}})}if(c){n.push({step:o,type:s,kind:"text",text:c.textContent??"",box:l(c.getBBox())});continue}if(!(r instanceof SVGPathElement))continue;let h=l(r.getBBox());if(r.dataset.marker)n.push({step:o,type:s,kind:"marker",box:h});else if(r.dataset.hatch)n.push({step:o,type:s,kind:"hatch",box:h});else if((r.getAttribute("fill")??"none")!=="none")n.push({step:o,type:s,kind:"fill",box:h});else{if(r.getAttribute("stroke")==="none"||Number(r.getAttribute("stroke-width")??1)===0)continue;{let u=r.getTotalLength(),d=Math.min(300,Math.max(2,Math.ceil(u/6))),p=[];for(let f=0;f<=d;f++){let g=r.getPointAtLength(u*f/d);p.push([g.x+a,g.y+i])}n.push({step:o,type:s,kind:"stroke",box:h,points:p})}}}return n}async function ge(e){let t=document.createElement("div");t.setAttribute("aria-hidden","true"),t.style.cssText="position:fixed;left:-20000px;top:0;width:900px;visibility:hidden;pointer-events:none";let n=document.createElementNS("http://www.w3.org/2000/svg","svg");t.append(n),document.body.append(t);let r=new Map,o=rn(e);try{let a=new ct(n);for(let i of o){await a.render(e,i,{animate:!1,motion:"rest"});let l=Object.entries(i).map(([c,h])=>`${c}=${h}`).join(", ");for(let c of So(Mo(n,e),e.width,e.height)){let h=r.get(c.key);r.set(c.key,{text:h?.text??c.text,at:[...h?.at??[],l]})}}}finally{t.remove()}let s=o.length;return{combos:s,keys:[...r.keys()],problems:[...r.values()].map(({text:a,at:i})=>i.length===s||!i[0]?a:`${a} (at ${i.join("; ")})`)}}var It="http://www.w3.org/2000/svg",ir=e=>{let t=e.viewBox.baseVal;return t&&t.width?{w:t.width,h:t.height}:{w:e.clientWidth||900,h:e.clientHeight||560}};function Eo(e,t,n){let{w:r,h:o}=ir(e),s=e.cloneNode(!0);s.querySelectorAll(".dw-pointer").forEach(c=>c.remove());let a=performance.now();s.querySelectorAll("[data-anim]").forEach(c=>{c.style.animationPlayState!=="paused"&&(c.style.animationDelay=`${-Math.round(a-Number(c.dataset.animStart??a))}ms`,c.style.animationPlayState="paused")}),s.setAttribute("xmlns",It),s.setAttribute("width",String(r)),s.setAttribute("height",String(o));let i=document.createElementNS(It,"style");i.textContent=t;let l=document.createElementNS(It,"rect");return l.setAttribute("width","100%"),l.setAttribute("height","100%"),l.setAttribute("fill",n),s.prepend(l),s.prepend(i),new XMLSerializer().serializeToString(s)}async function ar(e,t,n,r){let{svg:o,done:s}=cr(e.width);try{await new ct(o).render(e,t,{animate:!1,css:!0,theme:r});let a=o.cloneNode(!0);a.querySelector(".dw-pencil")?.remove(),a.removeAttribute("style"),a.setAttribute("xmlns",It),a.setAttribute("width",String(e.width)),a.setAttribute("height",String(e.height));let i=new XMLSerializer().serializeToString(a),l=n.split(/(?=@font-face)/).filter(h=>{let u=h.match(/font-family:\s*['"]?([^'";]+)/)?.[1],d=h.match(/font-weight:\s*(\d+)/)?.[1];return u&&i.includes(u)&&(!d||new RegExp(`font-weight="${d}"`).test(i))}),c=document.createElementNS(It,"style");return c.textContent=l.join("")+tr,a.prepend(c),new XMLSerializer().serializeToString(a)}finally{s()}}async function sr(e,t,n,r=2,o){let{w:s,h:a}=ir(e),i=new Image;i.src=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(Eo(e,t,n))}`,await i.decode();let l=o??document.createElement("canvas");l.width=Math.round(s*r),l.height=Math.round(a*r);let c=l.getContext("2d");return c.fillStyle=n,c.fillRect(0,0,l.width,l.height),c.drawImage(i,0,0,l.width,l.height),l}function cr(e){let t=document.createElement("div");t.setAttribute("aria-hidden","true"),t.style.cssText=`position:fixed;left:-20000px;top:0;width:${e}px;pointer-events:none`;let n=document.createElementNS(It,"svg");return t.append(n),document.body.append(t),{svg:n,done:()=>t.remove()}}async function on(e,t,n,r){let{svg:o,done:s}=cr(e.width),a=document.createElement("canvas"),i=new ct(o),l=!1,c=async()=>{if(!l){l=!0;try{await sr(o,n.faces,n.paper,n.scale,a),await r(a)}finally{l=!1}}},h=setInterval(()=>void c(),1e3/n.fps);try{await i.render(e,t,{animate:!0,theme:n.theme,beforeBeat:n.say,onStep:u=>n.onProgress?.((u+1)/e.steps.length)}),await new Promise(u=>setTimeout(u,1500))}finally{for(clearInterval(h);l;)await new Promise(u=>setTimeout(u,20));await sr(o,n.faces,n.paper,n.scale,a),await r(a),i.stop(),s()}}async function lr(e,t,n){let r=document.createElement("canvas");r.width=e.width,r.height=e.height;let o=r.getContext("2d");o.fillStyle=n.paper,o.fillRect(0,0,r.width,r.height);let s=r.captureStream(24),a=n.audio?.(s),i=["video/webm;codecs=vp9,opus","video/webm;codecs=vp8,opus","video/webm"].find(u=>MediaRecorder.isTypeSupported(u)),l=new MediaRecorder(s,i?{mimeType:i}:void 0),c=[];l.ondataavailable=u=>u.data.size&&c.push(u.data);let h=new Promise(u=>l.onstop=()=>u());l.start(500);try{await on(e,t,{...n,fps:12,scale:1},u=>{o.drawImage(u,0,0,r.width,r.height)})}finally{l.stop(),await h,a?.()}return new Blob(c,{type:l.mimeType||"video/webm"})}var _t=jr(vr(),1),un={en:{start:"Start",back:"Back",next:"Next",playAll:"Play all",chapter:(e,t)=>`Chapter ${e} of ${t}`,values:"Move the values",think:"Think about it",answer:"One possible answer",caveat:"Where the comparison stops",download:"Download",checking:"Checking the drawing\u2026",checked:e=>`Checked at ${e} ${e===1?"setting":"settings"}: nothing leaves the paper and no text covers another.`,problems:"The check found:",broken:"This drawing could not be opened:",keys:"\u2192 next \xB7 \u2190 back \xB7 Space play all",made:"Made with chalk-talk",board:"Chalkboard",voice:"Narration",recording:e=>`Recording\u2026 ${e}%`,show:"Show me",yourTurn:"Your turn",transcript:"Transcript",again:"Try another",valuesShort:e=>`Values (${e})`,expand:"Expand",all:"All"},pt:{start:"In\xEDcio",back:"Voltar",next:"Pr\xF3ximo",playAll:"Tocar tudo",chapter:(e,t)=>`Cap\xEDtulo ${e} de ${t}`,values:"Mexa nos valores",think:"Para pensar",answer:"Uma resposta poss\xEDvel",caveat:"Onde a compara\xE7\xE3o para",download:"Baixar",checking:"Conferindo o desenho\u2026",checked:e=>`Conferido em ${e} ${e===1?"posi\xE7\xE3o":"posi\xE7\xF5es"}: nada sai do papel e nenhum texto cobre outro.`,problems:"A confer\xEAncia achou:",broken:"Este desenho n\xE3o p\xF4de ser aberto:",keys:"\u2192 pr\xF3ximo \xB7 \u2190 voltar \xB7 Espa\xE7o tocar tudo",made:"Feito com chalk-talk",board:"Quadro-negro",voice:"Narra\xE7\xE3o",recording:e=>`Gravando\u2026 ${e}%`,show:"Mostrar",yourTurn:"Sua vez",transcript:"Transcri\xE7\xE3o",again:"Tentar outra",valuesShort:e=>`Valores (${e})`,expand:"Expandir",all:"Tudo"}},dn=()=>navigator.language.toLowerCase().startsWith("pt")?"pt":"en",Ho=`
|
|
140
140
|
<header class="head">
|
|
141
141
|
<div><span class="eyebrow" data-part="category"></span><h1 data-part="title"></h1></div>
|
|
142
142
|
<div class="tools"><button data-part="board" type="button" aria-pressed="false"></button><button data-part="voice" type="button" aria-pressed="false"></button><div data-part="downloads" class="downloads"><button data-part="png" type="button">PNG</button><button data-part="svg" type="button">SVG</button><button data-part="gif" type="button">GIF</button><button data-part="webm" type="button">WebM</button></div></div>
|
|
@@ -161,7 +161,7 @@ body.still #stage { padding: 0; max-width: none; }
|
|
|
161
161
|
<details data-part="transcript" class="card transcript"></details>
|
|
162
162
|
<p class="foot"><span data-part="keys"></span><br><span data-part="made"></span></p>
|
|
163
163
|
</aside>
|
|
164
|
-
</div>`;function T(e,t={},n=""){let r=document.createElement(e);for(let[o,s]of Object.entries(t))r.setAttribute(o,s);return n&&(r.textContent=n),r}var Ot=()=>Promise.all([...document.fonts].map(e=>e.load())).catch(()=>{});async function vr(e,t,n){let r=un[n.lang??dn()],o=!!n.compact;e.classList.add("chalk-talk"),e.classList.toggle("is-compact",o),e.innerHTML=Yo;let s=S=>e.querySelector(`[data-part="${S}"]`),a=S=>s(S),i=le(t,r.start),l=e.querySelector('[data-part="paper"]'),c=s("say"),h=new ct(l,S=>c.textContent=S),u=matchMedia("(prefers-reduced-motion: reduce)").matches,d=ht(t),p=0,f=0,m=t.theme??n.theme??"paper",g=!1,b=!1;s("category").textContent=t.category??"",s("title").textContent=t.title;let y=i.map((S,A)=>{let B=T("button",{type:"button"},`${A+1} \xB7 ${S.title}`);return B.addEventListener("click",()=>v(A,A===p+1)),s("chapters").append(B),B});a("back").textContent=`\u25C0 ${r.back}`,a("next").textContent=`${r.next} \u25B6`,a("all").textContent=o?`\u25B6 ${r.all}`:r.playAll,s("keys").textContent=n.keys==="document"?r.keys:"",s("made").textContent=r.made;function x(){y.forEach((S,A)=>{S.className=A===p?"is-on":A<p?"is-seen":"",S.setAttribute("aria-current",A===p?"step":"false")}),s("count").textContent=r.chapter(p+1,i.length),a("back").disabled=p===0,a("next").disabled=p===i.length-1}function k(S){let A=s("ask");A.replaceChildren(T("p",{},S));let B=T("button",{type:"button",class:"primary"},r.show);return A.append(B),A.hidden=!1,B.focus({preventScroll:!0}),new Promise(I=>B.addEventListener("click",()=>{A.hidden=!0,I()},{once:!0}))}async function $(S,A,B){let I=t.steps[A];I.type==="pause"&&I.ask&&await k(st(I.ask,de(t,d),t.locale)),B===f&&g&&S&&await Vo(S,t.locale??"pt-BR")}function E(){e.querySelector(".paper").classList.toggle("is-board",m==="chalkboard"),s("board").setAttribute("aria-pressed",String(m==="chalkboard"))}async function v(S,A,B){if(b)return;p=Math.max(0,Math.min(i.length-1,S)),x();let I=++f;try{await h.render(t,d,{animate:A&&!u,until:i[p].end,from:B??(p>0?i[p-1].end+1:0),theme:m,beforeBeat:(W,D)=>$(W,D,I)}),I===f&&p===i.length-1&&N()}catch(W){if(I===f)throw W}}a("board").textContent=r.board,s("board").addEventListener("click",()=>{m=m==="chalkboard"?"paper":"chalkboard",E(),v(p,!1)}),E(),"speechSynthesis"in window&&!o?(a("voice").textContent=`\u{1F508} ${r.voice}`,s("voice").addEventListener("click",()=>{g=!g,s("voice").setAttribute("aria-pressed",String(g)),g||speechSynthesis.cancel()})):s("voice").remove(),s("back").addEventListener("click",()=>v(p-1,!1)),s("next").addEventListener("click",()=>v(p+1,!0)),s("all").addEventListener("click",()=>v(i.length-1,!0,0));let z=S=>{if(!S.target.closest("input, button, summary, textarea, [contenteditable]")){if(S.key==="ArrowRight")v(p+1,!0);else if(S.key==="ArrowLeft")v(p-1,!1);else if(S.key===" ")S.preventDefault(),v(i.length-1,!0,0);else return;S.stopPropagation()}},C=n.keys==="document"?document:e;if(C===e&&(e.tabIndex=0),C.addEventListener("keydown",z),L(),o){let S=a("values-toggle"),A=Object.keys(t.params??{}).length+Object.keys(t.switches??{}).length;A&&(S.hidden=!1,S.textContent=`\u2699 ${r.valuesShort(A)}`,S.addEventListener("click",()=>{let B=!e.classList.contains("show-values");e.classList.toggle("show-values",B),S.setAttribute("aria-expanded",String(B))}));for(let B of["learning","quiz","check","transcript"])s(B).remove();s("downloads").remove(),s("board").remove(),e.querySelector(".foot").remove()}else j(),U(),G();if(n.onExpand){let S=a("expand");S.hidden=!1,S.textContent=`\u2922 ${r.expand}`,S.addEventListener("click",n.onExpand)}return await Ot(),o||X(),await v(0,!o),{destroy(){b=!0,f++,h.stop(),C.removeEventListener("keydown",z),g&&speechSynthesis.cancel(),e.replaceChildren()}};function L(){let S=s("controls"),A=Object.entries(t.params??{}),B=Object.entries(t.switches??{});if(!A.length&&!B.length)return S.remove();S.append(T("h2",{},r.values));for(let[I,W]of A){let D=T("label",{class:"value"}),H=T("b",{},ae(d[I],void 0,t.locale)),J=T("input",{type:"range",min:String(W.min),max:String(W.max),step:String(W.step),value:String(d[I])});J.addEventListener("input",()=>{d[I]=Number(J.value),H.textContent=ae(d[I],void 0,t.locale),v(p,!1)}),D.append(T("span",{},W.label),H,J),S.append(D)}for(let[I,W]of B){let D=T("label",{class:"switch"}),H=T("input",{type:"checkbox"});H.checked=d[I]===1,H.addEventListener("change",()=>{d[I]=H.checked?1:0,v(p,!1)}),D.append(H,T("span",{},W.label)),S.append(D)}}function j(){let S=s("learning"),A=t.learning;if(!A)return S.remove();let B=T("details");B.append(T("summary",{},r.answer),T("p",{},A.answer)),S.append(T("h2",{},r.think),T("p",{},A.question),B,T("p",{class:"caveat"},`${r.caveat}: ${A.caveat}`))}function N(){let S=s("quiz");if(!S||!t.quiz||S.childElementCount)return;S.hidden=!1;let A=T("p",{class:"why",role:"status"}),B=T("div",{class:"options"});for(let I of t.quiz.options){let W=T("button",{type:"button"},I.text);W.addEventListener("click",()=>{B.querySelectorAll("button").forEach(D=>D.classList.remove("is-right","is-wrong")),W.classList.add(I.right?"is-right":"is-wrong"),A.textContent=I.why,A.className=I.right?"why is-right":"why"}),B.append(W)}S.append(T("h2",{},r.yourTurn),T("p",{},t.quiz.question),B,A)}function U(){let S=s("transcript"),A=de(t,ht(t)),B=T("ol");for(let I of i){let W=t.steps.slice(I.start,I.end+1).flatMap(H=>[H.say,H.type==="pause"?H.ask:void 0].filter(J=>!!J)),D=T("li");D.append(T("b",{},I.title));for(let H of W)D.append(T("p",{},st(H,A,t.locale)));B.append(D)}S.append(T("summary",{},r.transcript),B)}function G(){let S=s("downloads");S.prepend(T("span",{},r.download));let A=D=>`${(t.id||"drawing").replace(/[^a-z0-9-]+/gi,"-").slice(0,60)}.${D}`;s("svg").addEventListener("click",()=>hn(new Blob([xe(l,n.faces)],{type:"image/svg+xml"}),A("svg")));let B=(D,H,J)=>D.addEventListener("click",async()=>{let Kt=D.textContent;S.querySelectorAll("button").forEach(gt=>gt.disabled=!0);try{hn(await H(gt=>D.textContent=r.recording(Math.round(gt*100))),A(J))}finally{D.textContent=Kt,S.querySelectorAll("button").forEach(gt=>gt.disabled=!1)}}),I=n.faces,W=()=>m==="chalkboard"?"#26372E":"#FBF7EE";"MediaRecorder"in window?B(a("webm"),D=>cr(t,ht(t),{faces:I,paper:W(),theme:m,onProgress:D}),"webm"):s("webm").remove(),B(a("gif"),async D=>{let H=(0,It.GIFEncoder)();return await on(t,ht(t),{faces:I,paper:W(),theme:m,onProgress:D,fps:8,scale:.6},J=>{let{data:Kt}=J.getContext("2d").getImageData(0,0,J.width,J.height),gt=(0,It.quantize)(Kt,64);H.writeFrame((0,It.applyPalette)(Kt,gt),J.width,J.height,{palette:gt,delay:125})}),H.finish(),new Blob([H.bytes()],{type:"image/gif"})},"gif"),s("png").addEventListener("click",()=>{let D=new Image;D.onload=()=>{let H=T("canvas",{width:String(t.width*2),height:String(t.height*2)});H.getContext("2d").drawImage(D,0,0,t.width*2,t.height*2),H.toBlob(J=>J&&hn(J,A("png")),"image/png")},D.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(xe(l,n.faces))})}async function X(){let S=s("check");S.textContent=r.checking;let A=await me(t);if(b)return;if(S.className=A.problems.length?"check is-warn":"check is-ok",!A.problems.length)return void(S.textContent=`\u2713 ${r.checked(A.combos)}`);S.textContent="";let B=T("ul");for(let I of A.problems)B.append(T("li",{},I));S.append(T("b",{},`! ${r.problems}`),B)}}async function $r(e,t,n){e.classList.add("chalk-talk","is-still");let r=t.theme??n??"paper",o=T("div",{class:`paper${r==="chalkboard"?" is-board":""}`}),s=document.createElementNS("http://www.w3.org/2000/svg","svg");o.append(s),e.replaceChildren(o),await Ot(),await new ct(s).render(t,ht(t),{animate:!1,theme:r})}function Vo(e,t){return new Promise(n=>{let r=new SpeechSynthesisUtterance(e);r.lang=t;let o=speechSynthesis.getVoices().find(a=>a.lang.toLowerCase().startsWith(t.toLowerCase().slice(0,2)));o&&(r.voice=o);let s=()=>n();r.onend=s,r.onerror=s,setTimeout(s,2e4),speechSynthesis.speak(r)})}function xe(e,t){let n=e.cloneNode(!0);n.setAttribute("xmlns","http://www.w3.org/2000/svg");let r=document.createElementNS("http://www.w3.org/2000/svg","style");return r.textContent=t,n.prepend(r),new XMLSerializer().serializeToString(n)}function hn(e,t){let n=T("a",{href:URL.createObjectURL(e),download:t});n.click(),setTimeout(()=>URL.revokeObjectURL(n.href),1e3)}var pn=dn(),Wo=un[pn];document.documentElement.lang=pn==="pt"?"pt-BR":"en";var Ft=e=>document.getElementById(e),fn=()=>Ft("chalk-fonts")?.textContent??"";function Ho(){let e=Ft("chalk-recipe"),t=e.getAttribute("type")==="text/chalk-talk"?nr(e.textContent??"",[...Yt,...Object.keys(Tt)]):JSON.parse(e.textContent??"");if(!t||!Array.isArray(t.lessons))return{scene:qe(t)};let n=t.lessons.map(s=>qe(s)),r=Number(new URLSearchParams(location.search).get("lesson")),o=Number.isInteger(r)&&r>=1&&r<=n.length?r-1:0;return{scene:n[o],course:{title:String(t.course??n[0].title),lessons:n,at:o}}}function Uo(e){let t=Ft("course");t.hidden=!1,t.append(T("b",{},e.title));let n=T("ol");e.lessons.forEach((r,o)=>{let s=T("li"),a=T("a",{href:`?lesson=${o+1}`},r.title);o===e.at&&a.setAttribute("aria-current","page"),s.append(a),n.append(s)}),t.append(n)}function _t(e,t){document.body.append(T("pre",{id:`chalk-${e}`},encodeURIComponent(JSON.stringify(t))))}var Mr=()=>{let e=document.createElementNS("http://www.w3.org/2000/svg","svg");return document.body.append(e),e};async function Zo(e){await Ot(),_t("review",await me(e))}async function Ko(e){let t=Mr();t.style.width=`${e.width}px`,t.id="paper",t.setAttribute("role","img"),await Ot(),await new ct(t).render(e,ht(e),{animate:!1}),_t("snapshot",{svg:t.outerHTML})}var Pt=300;async function Qo(e){let t=Mr();t.style.width=`${e.width}px`,await Ot();let n=new ct(t),r=le(e),o=rn(e),s=ht(e),a=l=>{let c=Object.keys(l).find(h=>l[h]!==s[h]);return c?e.switches?.[c]?`${c}-${l[c]?"on":"off"}`:`${c}-${l[c]===e.params?.[c]?.min?"min":"max"}`:"default"},i=[];for(let[l,c]of r.entries())for(let h of o){await n.render(e,h,{animate:!1,until:c.end});let u=await Jo(xe(t,fn())),d=Object.entries(h).map(([p,f])=>`${p}=${f}`).join(", ");i.push({chapter:l+1,title:c.title,label:a(h),at:d,png:ts(u,e.width,e.height,Er(e)),image:u})}_t("snapshots",{chapters:r.length,settings:o.length,shots:i.map(({image:l,...c})=>c),sheet:es(e,r.map(l=>l.title),o.map(a),i.map(l=>l.image))})}var Er=e=>e.theme==="chalkboard"?"#26372E":"#FBF7EE";function Jo(e){return new Promise((t,n)=>{let r=new Image;r.onload=()=>t(r),r.onerror=()=>n(new Error("a snapshot did not draw")),r.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(e)})}function ts(e,t,n,r){let o=T("canvas",{width:String(t),height:String(n)}),s=o.getContext("2d");return s.fillStyle=r,s.fillRect(0,0,t,n),s.drawImage(e,0,0,t,n),o.toDataURL("image/png")}function es(e,t,n,r){let o=Math.round(Pt*e.height/e.width),s=16,a=150,i=44,l=T("canvas",{width:String(a+n.length*(Pt+s)),height:String(i+t.length*(o+s))}),c=l.getContext("2d");return c.fillStyle="#FFFFFF",c.fillRect(0,0,l.width,l.height),c.fillStyle="#242424",c.font="15px sans-serif",n.forEach((h,u)=>c.fillText(h,a+u*(Pt+s),28)),t.forEach((h,u)=>{let d=i+u*(o+s);c.fillStyle="#242424",ns(c,`${u+1}. ${h}`,8,d+18,a-16,18),n.forEach((p,f)=>{let m=a+f*(Pt+s);c.fillStyle=Er(e),c.fillRect(m,d,Pt,o),c.drawImage(r[u*n.length+f],m,d,Pt,o),c.strokeStyle="#D8D2C4",c.strokeRect(m+.5,d+.5,Pt-1,o-1)})}),l.toDataURL("image/png")}function ns(e,t,n,r,o,s){let a="";for(let i of t.split(" "))a&&e.measureText(`${a} ${i}`).width>o?(e.fillText(a,n,r),a=i,r+=s):a=a?`${a} ${i}`:i;a&&e.fillText(a,n,r)}async function rs(e){await Ot();try{let t=Je(e).reduce((n,r)=>n+r.duration,0);_t("svg",{svg:await ir(e,ht(e),fn()),ms:t})}catch(t){_t("svg",{error:t.message})}}async function os(e){document.body.classList.add("still"),await $r(Ft("stage"),e),document.body.dataset.ready="1"}async function ss(){let e,t,n=location.hash.slice(1);try{({scene:e,course:t}=Ho())}catch(r){if(["review","snapshot","snapshots","svg"].includes(n))return _t(n,{error:r.message});Ft("stage").replaceChildren(T("p",{class:"broken"},`${Wo.broken} ${r.message}`));return}if(n==="review")return Zo(e);if(n==="snapshot")return Ko(e);if(n==="snapshots")return Qo(e);if(n==="svg")return rs(e);if(n==="still")return os(e);document.title=e.title,t&&Uo(t),await vr(Ft("lesson"),e,{faces:fn(),lang:pn,keys:"document"})}var Sr=()=>{ss()};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",Sr):Sr();})();
|
|
164
|
+
</div>`;function T(e,t={},n=""){let r=document.createElement(e);for(let[o,s]of Object.entries(t))r.setAttribute(o,s);return n&&(r.textContent=n),r}var At=()=>Promise.all([...document.fonts].map(e=>e.load())).catch(()=>{});async function $r(e,t,n){let r=un[n.lang??dn()],o=!!n.compact;e.classList.add("chalk-talk"),e.classList.toggle("is-compact",o),e.innerHTML=Ho;let s=S=>e.querySelector(`[data-part="${S}"]`),a=S=>s(S),i=le(t,r.start),l=e.querySelector('[data-part="paper"]'),c=s("say"),h=new ct(l,S=>c.textContent=S),u=matchMedia("(prefers-reduced-motion: reduce)").matches,d=ht(t),p=0,f=0,g=t.theme??n.theme??"paper",m=!1,b=!1;s("category").textContent=t.category??"",s("title").textContent=t.title;let y=i.map((S,O)=>{let z=T("button",{type:"button"},`${O+1} \xB7 ${S.title}`);return z.addEventListener("click",()=>v(O,O===p+1)),s("chapters").append(z),z});a("back").textContent=`\u25C0 ${r.back}`,a("next").textContent=`${r.next} \u25B6`,a("all").textContent=o?`\u25B6 ${r.all}`:r.playAll,s("keys").textContent=n.keys==="document"?r.keys:"",s("made").textContent=r.made;function x(){y.forEach((S,O)=>{S.className=O===p?"is-on":O<p?"is-seen":"",S.setAttribute("aria-current",O===p?"step":"false")}),s("count").textContent=r.chapter(p+1,i.length),a("back").disabled=p===0,a("next").disabled=p===i.length-1}function k(S){let O=s("ask");O.replaceChildren(T("p",{},S));let z=T("button",{type:"button",class:"primary"},r.show);return O.append(z),O.hidden=!1,z.focus({preventScroll:!0}),new Promise(_=>z.addEventListener("click",()=>{O.hidden=!0,_()},{once:!0}))}async function $(S,O,z){let _=t.steps[O];_.type==="pause"&&_.ask&&await k(it(_.ask,de(t,d),t.locale)),z===f&&m&&S&&await Uo(S,t.locale??"pt-BR")}function E(){e.querySelector(".paper").classList.toggle("is-board",g==="chalkboard"),s("board").setAttribute("aria-pressed",String(g==="chalkboard"))}async function v(S,O,z){if(b)return;p=Math.max(0,Math.min(i.length-1,S)),x();let _=++f;try{await h.render(t,d,{animate:O&&!u,until:i[p].end,from:z??(p>0?i[p-1].end+1:0),theme:g,beforeBeat:(W,q)=>$(W,q,_)}),_===f&&p===i.length-1&&I()}catch(W){if(_===f)throw W}}a("board").textContent=r.board,s("board").addEventListener("click",()=>{g=g==="chalkboard"?"paper":"chalkboard",E(),v(p,!1)}),E(),"speechSynthesis"in window&&!o?(a("voice").textContent=`\u{1F508} ${r.voice}`,s("voice").addEventListener("click",()=>{m=!m,s("voice").setAttribute("aria-pressed",String(m)),m||speechSynthesis.cancel()})):s("voice").remove(),s("back").addEventListener("click",()=>v(p-1,!1)),s("next").addEventListener("click",()=>v(p+1,!0)),s("all").addEventListener("click",()=>v(i.length-1,!0,0));let B=S=>{if(!S.target.closest("input, button, summary, textarea, [contenteditable]")){if(S.key==="ArrowRight")v(p+1,!0);else if(S.key==="ArrowLeft")v(p-1,!1);else if(S.key===" ")S.preventDefault(),v(i.length-1,!0,0);else return;S.stopPropagation()}},C=n.keys==="document"?document:e;if(C===e&&(e.tabIndex=0),C.addEventListener("keydown",B),L(),o){let S=a("values-toggle"),O=Object.keys(t.params??{}).length+Object.keys(t.switches??{}).length;O&&(S.hidden=!1,S.textContent=`\u2699 ${r.valuesShort(O)}`,S.addEventListener("click",()=>{let z=!e.classList.contains("show-values");e.classList.toggle("show-values",z),S.setAttribute("aria-expanded",String(z))}));for(let z of["learning","quiz","check","transcript"])s(z).remove();s("downloads").remove(),s("board").remove(),e.querySelector(".foot").remove()}else N(),U(),Y();if(n.onExpand){let S=a("expand");S.hidden=!1,S.textContent=`\u2922 ${r.expand}`,S.addEventListener("click",n.onExpand)}return await At(),o||V(),await v(0,!o),{destroy(){b=!0,f++,h.stop(),C.removeEventListener("keydown",B),m&&speechSynthesis.cancel(),e.replaceChildren()}};function L(){let S=s("controls"),O=Object.entries(t.params??{}),z=Object.entries(t.switches??{});if(!O.length&&!z.length)return S.remove();S.append(T("h2",{},r.values));for(let[_,W]of O){let q=T("label",{class:"value"}),H=T("b",{},ae(d[_],void 0,t.locale)),J=T("input",{type:"range",min:String(W.min),max:String(W.max),step:String(W.step),value:String(d[_])});J.addEventListener("input",()=>{d[_]=Number(J.value),H.textContent=ae(d[_],void 0,t.locale),v(p,!1)}),q.append(T("span",{},W.label),H,J),S.append(q)}for(let[_,W]of z){let q=T("label",{class:"switch"}),H=T("input",{type:"checkbox"});H.checked=d[_]===1,H.addEventListener("change",()=>{d[_]=H.checked?1:0,v(p,!1)}),q.append(H,T("span",{},W.label)),S.append(q)}}function N(){let S=s("learning"),O=t.learning;if(!O)return S.remove();let z=T("details");z.append(T("summary",{},r.answer),T("p",{},O.answer)),S.append(T("h2",{},r.think),T("p",{},O.question),z,T("p",{class:"caveat"},`${r.caveat}: ${O.caveat}`))}function I(){let S=s("quiz");if(!S||!t.quiz||S.childElementCount)return;S.hidden=!1;let O=T("p",{class:"why",role:"status"}),z=T("div",{class:"options"});for(let _ of t.quiz.options){let W=T("button",{type:"button"},_.text);W.addEventListener("click",()=>{z.querySelectorAll("button").forEach(q=>q.classList.remove("is-right","is-wrong")),W.classList.add(_.right?"is-right":"is-wrong"),O.textContent=_.why,O.className=_.right?"why is-right":"why"}),z.append(W)}S.append(T("h2",{},r.yourTurn),T("p",{},t.quiz.question),z,O)}function U(){let S=s("transcript"),O=de(t,ht(t)),z=T("ol");for(let _ of i){let W=t.steps.slice(_.start,_.end+1).flatMap(H=>[H.say,H.type==="pause"?H.ask:void 0].filter(J=>!!J)),q=T("li");q.append(T("b",{},_.title));for(let H of W)q.append(T("p",{},it(H,O,t.locale)));z.append(q)}S.append(T("summary",{},r.transcript),z)}function Y(){let S=s("downloads");S.prepend(T("span",{},r.download));let O=q=>`${(t.id||"drawing").replace(/[^a-z0-9-]+/gi,"-").slice(0,60)}.${q}`;s("svg").addEventListener("click",()=>hn(new Blob([xe(l,n.faces)],{type:"image/svg+xml"}),O("svg")));let z=(q,H,J)=>q.addEventListener("click",async()=>{let Kt=q.textContent;S.querySelectorAll("button").forEach(mt=>mt.disabled=!0);try{hn(await H(mt=>q.textContent=r.recording(Math.round(mt*100))),O(J))}finally{q.textContent=Kt,S.querySelectorAll("button").forEach(mt=>mt.disabled=!1)}}),_=n.faces,W=()=>g==="chalkboard"?"#26372E":"#FBF7EE";"MediaRecorder"in window?z(a("webm"),q=>lr(t,ht(t),{faces:_,paper:W(),theme:g,onProgress:q}),"webm"):s("webm").remove(),z(a("gif"),async q=>{let H=(0,_t.GIFEncoder)();return await on(t,ht(t),{faces:_,paper:W(),theme:g,onProgress:q,fps:8,scale:.6},J=>{let{data:Kt}=J.getContext("2d").getImageData(0,0,J.width,J.height),mt=(0,_t.quantize)(Kt,64);H.writeFrame((0,_t.applyPalette)(Kt,mt),J.width,J.height,{palette:mt,delay:125})}),H.finish(),new Blob([H.bytes()],{type:"image/gif"})},"gif"),s("png").addEventListener("click",()=>{let q=new Image;q.onload=()=>{let H=T("canvas",{width:String(t.width*2),height:String(t.height*2)});H.getContext("2d").drawImage(q,0,0,t.width*2,t.height*2),H.toBlob(J=>J&&hn(J,O("png")),"image/png")},q.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(xe(l,n.faces))})}async function V(){let S=s("check");S.textContent=r.checking;let O=await ge(t);if(b)return;if(S.className=O.problems.length?"check is-warn":"check is-ok",!O.problems.length)return void(S.textContent=`\u2713 ${r.checked(O.combos)}`);S.textContent="";let z=T("ul");for(let _ of O.problems)z.append(T("li",{},_));S.append(T("b",{},`! ${r.problems}`),z)}}async function Sr(e,t,n){e.classList.add("chalk-talk","is-still");let r=t.theme??n??"paper",o=T("div",{class:`paper${r==="chalkboard"?" is-board":""}`}),s=document.createElementNS("http://www.w3.org/2000/svg","svg");o.append(s),e.replaceChildren(o),await At(),await new ct(s).render(t,ht(t),{animate:!1,theme:r,motion:"rest"})}function Uo(e,t){return new Promise(n=>{let r=new SpeechSynthesisUtterance(e);r.lang=t;let o=speechSynthesis.getVoices().find(a=>a.lang.toLowerCase().startsWith(t.toLowerCase().slice(0,2)));o&&(r.voice=o);let s=()=>n();r.onend=s,r.onerror=s,setTimeout(s,2e4),speechSynthesis.speak(r)})}function xe(e,t){let n=e.cloneNode(!0);n.setAttribute("xmlns","http://www.w3.org/2000/svg");let r=document.createElementNS("http://www.w3.org/2000/svg","style");return r.textContent=t,n.prepend(r),new XMLSerializer().serializeToString(n)}function hn(e,t){let n=T("a",{href:URL.createObjectURL(e),download:t});n.click(),setTimeout(()=>URL.revokeObjectURL(n.href),1e3)}var pn=dn(),Zo=un[pn];document.documentElement.lang=pn==="pt"?"pt-BR":"en";var Ft=e=>document.getElementById(e),fn=()=>Ft("chalk-fonts")?.textContent??"";function Ko(){let e=Ft("chalk-recipe"),t=e.getAttribute("type")==="text/chalk-talk"?rr(e.textContent??"",[...Vt,...Object.keys(Tt)]):JSON.parse(e.textContent??"");if(!t||!Array.isArray(t.lessons))return{scene:qe(t)};let n=t.lessons.map(s=>qe(s)),r=Number(new URLSearchParams(location.search).get("lesson")),o=Number.isInteger(r)&&r>=1&&r<=n.length?r-1:0;return{scene:n[o],course:{title:String(t.course??n[0].title),lessons:n,at:o}}}function Qo(e){let t=Ft("course");t.hidden=!1,t.append(T("b",{},e.title));let n=T("ol");e.lessons.forEach((r,o)=>{let s=T("li"),a=T("a",{href:`?lesson=${o+1}`},r.title);o===e.at&&a.setAttribute("aria-current","page"),s.append(a),n.append(s)}),t.append(n)}function Dt(e,t){document.body.append(T("pre",{id:`chalk-${e}`},encodeURIComponent(JSON.stringify(t))))}var Er=()=>{let e=document.createElementNS("http://www.w3.org/2000/svg","svg");return document.body.append(e),e};async function Jo(e){await At(),Dt("review",await ge(e))}async function ts(e){let t=Er();t.style.width=`${e.width}px`,t.id="paper",t.setAttribute("role","img"),await At(),await new ct(t).render(e,ht(e),{animate:!1,motion:"rest"}),Dt("snapshot",{svg:t.outerHTML})}var Pt=300;async function es(e){let t=Er();t.style.width=`${e.width}px`,await At();let n=new ct(t),r=le(e),o=rn(e),s=ht(e),a=l=>{let c=Object.keys(l).find(h=>l[h]!==s[h]);return c?e.switches?.[c]?`${c}-${l[c]?"on":"off"}`:`${c}-${l[c]===e.params?.[c]?.min?"min":"max"}`:"default"},i=[];for(let[l,c]of r.entries())for(let h of o){await n.render(e,h,{animate:!1,until:c.end,motion:"rest"});let u=await ns(xe(t,fn())),d=Object.entries(h).map(([p,f])=>`${p}=${f}`).join(", ");i.push({chapter:l+1,title:c.title,label:a(h),at:d,png:rs(u,e.width,e.height,Or(e)),image:u})}Dt("snapshots",{chapters:r.length,settings:o.length,shots:i.map(({image:l,...c})=>c),sheet:os(e,r.map(l=>l.title),o.map(a),i.map(l=>l.image))})}var Or=e=>e.theme==="chalkboard"?"#26372E":"#FBF7EE";function ns(e){return new Promise((t,n)=>{let r=new Image;r.onload=()=>t(r),r.onerror=()=>n(new Error("a snapshot did not draw")),r.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(e)})}function rs(e,t,n,r){let o=T("canvas",{width:String(t),height:String(n)}),s=o.getContext("2d");return s.fillStyle=r,s.fillRect(0,0,t,n),s.drawImage(e,0,0,t,n),o.toDataURL("image/png")}function os(e,t,n,r){let o=Math.round(Pt*e.height/e.width),s=16,a=150,i=44,l=T("canvas",{width:String(a+n.length*(Pt+s)),height:String(i+t.length*(o+s))}),c=l.getContext("2d");return c.fillStyle="#FFFFFF",c.fillRect(0,0,l.width,l.height),c.fillStyle="#242424",c.font="15px sans-serif",n.forEach((h,u)=>c.fillText(h,a+u*(Pt+s),28)),t.forEach((h,u)=>{let d=i+u*(o+s);c.fillStyle="#242424",ss(c,`${u+1}. ${h}`,8,d+18,a-16,18),n.forEach((p,f)=>{let g=a+f*(Pt+s);c.fillStyle=Or(e),c.fillRect(g,d,Pt,o),c.drawImage(r[u*n.length+f],g,d,Pt,o),c.strokeStyle="#D8D2C4",c.strokeRect(g+.5,d+.5,Pt-1,o-1)})}),l.toDataURL("image/png")}function ss(e,t,n,r,o,s){let a="";for(let i of t.split(" "))a&&e.measureText(`${a} ${i}`).width>o?(e.fillText(a,n,r),a=i,r+=s):a=a?`${a} ${i}`:i;a&&e.fillText(a,n,r)}async function is(e){await At();try{let t=Je(e).reduce((n,r)=>n+r.duration,0);Dt("svg",{svg:await ar(e,ht(e),fn()),ms:t})}catch(t){Dt("svg",{error:t.message})}}async function as(e){document.body.classList.add("still"),await Sr(Ft("stage"),e),document.body.dataset.ready="1"}async function cs(){let e,t,n=location.hash.slice(1);try{({scene:e,course:t}=Ko())}catch(r){if(["review","snapshot","snapshots","svg"].includes(n))return Dt(n,{error:r.message});Ft("stage").replaceChildren(T("p",{class:"broken"},`${Zo.broken} ${r.message}`));return}if(n==="review")return Jo(e);if(n==="snapshot")return ts(e);if(n==="snapshots")return es(e);if(n==="svg")return is(e);if(n==="still")return as(e);document.title=e.title,t&&Qo(t),await $r(Ft("lesson"),e,{faces:fn(),lang:pn,keys:"document"})}var Mr=()=>{cs()};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",Mr):Mr();})();
|
|
165
165
|
</script>
|
|
166
166
|
</body>
|
|
167
167
|
</html>
|