@oh-just-another/diagram 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
- var Pe=Object.defineProperty;var K=(t,e)=>{for(var n in e)Pe(t,n,{get:e[n],enumerable:!0})};var ce=new Map,_=(t,e)=>{ce.set(t,e)},de=t=>ce.get(t);var q=(t,e,n)=>{if(!t||t.type==="sharp")return 0;let o=Math.min(Math.abs(e),Math.abs(n));if(o<=0)return 0;if(t.value!==void 0)return Math.max(0,Math.min(t.value,o/2));let r=32/.25;return o<=r?o*.25:32};var x=t=>{if(t===void 0)throw new Error("required value is undefined");return t};var A={};K(A,{IDENTITY:()=>Ne,applyToBounds:()=>qe,applyToPoint:()=>D,decompose:()=>Ve,equals:()=>Ye,inverse:()=>Ke,multiply:()=>Xe,of:()=>He,rotation:()=>Ue,scaling:()=>ze,translation:()=>Ge});var Ne=Object.freeze({a:1,b:0,c:0,d:1,e:0,f:0}),He=(t,e,n,o,r,i)=>({a:t,b:e,c:n,d:o,e:r,f:i}),Ge=(t,e)=>({a:1,b:0,c:0,d:1,e:t,f:e}),ze=(t,e=t)=>({a:t,b:0,c:0,d:e,e:0,f:0}),Ue=t=>{let e=Math.cos(t),n=Math.sin(t);return{a:e,b:n,c:-n,d:e,e:0,f:0}},Xe=(t,e)=>({a:t.a*e.a+t.c*e.b,b:t.b*e.a+t.d*e.b,c:t.a*e.c+t.c*e.d,d:t.b*e.c+t.d*e.d,e:t.a*e.e+t.c*e.f+t.e,f:t.b*e.e+t.d*e.f+t.f}),Ke=t=>{let e=t.a*t.d-t.b*t.c;if(e===0)throw new Error("Cannot invert singular matrix");return{a:t.d/e,b:-t.b/e,c:-t.c/e,d:t.a/e,e:(t.c*t.f-t.d*t.e)/e,f:(t.b*t.e-t.a*t.f)/e}},D=(t,e)=>({x:t.a*e.x+t.c*e.y+t.e,y:t.b*e.x+t.d*e.y+t.f}),qe=(t,e)=>{let n=D(t,{x:e.x,y:e.y}),o=D(t,{x:e.x+e.width,y:e.y}),r=D(t,{x:e.x,y:e.y+e.height}),i=D(t,{x:e.x+e.width,y:e.y+e.height}),a=Math.min(n.x,o.x,r.x,i.x),l=Math.min(n.y,o.y,r.y,i.y),s=Math.max(n.x,o.x,r.x,i.x),c=Math.max(n.y,o.y,r.y,i.y);return{x:a,y:l,width:s-a,height:c-l}},Ve=t=>{let e=Math.sqrt(t.a*t.a+t.b*t.b),n=Math.sqrt(t.c*t.c+t.d*t.d),r=t.a*t.d-t.b*t.c<0?-n:n;return{translation:{x:t.e,y:t.f},rotation:Math.atan2(t.b,t.a),scale:{x:e,y:r}}},Ye=(t,e,n=0)=>{let o=["a","b","c","d","e","f"];return n===0?o.every(r=>t[r]===e[r]):o.every(r=>Math.abs(t[r]-e[r])<=n)};var E={};K(E,{EMPTY:()=>me,centerOf:()=>Ze,contains:()=>tt,containsBounds:()=>nt,equals:()=>it,expand:()=>ot,fromCenter:()=>$e,fromPoints:()=>Je,intersection:()=>he,intersects:()=>et,isEmpty:()=>V,maxX:()=>L,maxY:()=>I,normalize:()=>rt,of:()=>je,union:()=>Qe});var me=Object.freeze({x:0,y:0,width:0,height:0}),je=(t,e,n,o)=>({x:t,y:e,width:n,height:o}),Je=t=>{if(t.length===0)return me;let e=1/0,n=1/0,o=-1/0,r=-1/0;for(let i of t)i.x<e&&(e=i.x),i.y<n&&(n=i.y),i.x>o&&(o=i.x),i.y>r&&(r=i.y);return{x:e,y:n,width:o-e,height:r-n}},$e=(t,e,n)=>({x:t.x-e/2,y:t.y-n/2,width:e,height:n}),Ze=t=>({x:t.x+t.width/2,y:t.y+t.height/2}),L=t=>t.x+t.width,I=t=>t.y+t.height,V=t=>t.width<=0||t.height<=0,Qe=(t,e)=>{if(V(t))return e;if(V(e))return t;let n=Math.min(t.x,e.x),o=Math.min(t.y,e.y),r=Math.max(L(t),L(e)),i=Math.max(I(t),I(e));return{x:n,y:o,width:r-n,height:i-o}},he=(t,e)=>{let n=Math.max(t.x,e.x),o=Math.max(t.y,e.y),r=Math.min(L(t),L(e)),i=Math.min(I(t),I(e));return r<=n||i<=o?null:{x:n,y:o,width:r-n,height:i-o}},et=(t,e)=>he(t,e)!==null,tt=(t,e)=>e.x>=t.x&&e.x<=L(t)&&e.y>=t.y&&e.y<=I(t),nt=(t,e)=>e.x>=t.x&&e.y>=t.y&&L(e)<=L(t)&&I(e)<=I(t),ot=(t,e)=>({x:t.x-e,y:t.y-e,width:t.width+2*e,height:t.height+2*e}),rt=t=>({x:t.width<0?t.x+t.width:t.x,y:t.height<0?t.y+t.height:t.y,width:Math.abs(t.width),height:Math.abs(t.height)}),it=(t,e,n=0)=>n===0?t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height:Math.abs(t.x-e.x)<=n&&Math.abs(t.y-e.y)<=n&&Math.abs(t.width-e.width)<=n&&Math.abs(t.height-e.height)<=n;var M={};K(M,{offsetClosedPath:()=>st,signedArea:()=>at});var st=(t,e)=>{if(t.length<3||e===0)return t.map(s=>({x:s.x,y:s.y}));let n=0,o=0;for(let s of t)n+=s.x,o+=s.y;n/=t.length,o/=t.length;let r=t.length,i=new Array(r),a=new Array(r);for(let s=0;s<r;s++){let c=x(t[s]),d=x(t[(s+1)%r]),m=d.x-c.x,f=d.y-c.y,y=Math.hypot(m,f)||1;i[s]=-f/y,a[s]=m/y}let l=[];for(let s=0;s<r;s++){let c=(s-1+r)%r,d=x(i[c]),m=x(a[c]),f=x(i[s]),y=x(a[s]),w=d+f,p=m+y,T=Math.hypot(w,p);T<1e-6?(w=d,p=m):(w/=T,p/=T);let O=x(t[s]),b=n-O.x,h=o-O.y,R=w*b+p*h>=0?1:-1,ae=w*d+p*m,le=ae>1e-6?e/ae:e;l.push({x:O.x+R*w*le,y:O.y+R*p*le})}return l},at=t=>{let e=0;for(let n=0;n<t.length;n++){let o=x(t[n]),r=x(t[(n+1)%t.length]);e+=o.x*r.y-r.x*o.y}return e/2};var lt=null;var ue=()=>lt;var Y=t=>t.type==="text";var fe=new Map,k=(t,e)=>{fe.set(t,e)};var xe=t=>{let e=fe.get(t.type);if(!e)throw new Error(`No bounder registered for shape type: ${t.type}`);return e(t)},j=t=>{let e=xe(t),n=[{x:e.x,y:e.y},{x:e.x+e.width,y:e.y},{x:e.x,y:e.y+e.height},{x:e.x+e.width,y:e.y+e.height}],o=Math.sin(t.rotation),r=Math.cos(t.rotation),i=n.map(a=>{let l=a.x*t.scale.x,s=a.y*t.scale.y;return{x:t.position.x+(l*r-s*o),y:t.position.y+(l*o+s*r)}});return E.fromPoints(i)};k("rectangle",t=>({x:0,y:0,width:t.width,height:t.height}));k("ellipse",t=>({x:0,y:0,width:t.width,height:t.height}));k("polygon",t=>E.fromPoints(t.points));k("path",t=>{let e=[],n={x:0,y:0};for(let o of t.commands)switch(o.kind){case"M":case"L":e.push(o.to),n=o.to;break;case"Q":e.push(o.control,o.to),n=o.to;break;case"C":e.push(o.control1,o.control2,o.to),n=o.to;break;case"Z":break}return E.fromPoints(e)});k("text",t=>{let e=t.fontSize*1.2,n=t.text.split(`
2
- `),o=ue(),r={bold:t.style.fontWeight==="bold",italic:t.style.fontStyle==="italic"},i=l=>{if(o){let s=o(l,t.fontFamily,t.fontSize,r);if(s!==null)return s}return l.length*t.fontSize*.6};if(t.maxWidth===void 0){let l=0;for(let s of n)l=Math.max(l,i(s));return l=Math.max(l,t.fontSize*.5),{x:0,y:0,width:l,height:Math.max(1,n.length)*e}}let a=0;for(let l of n)a+=Math.max(1,Math.ceil(i(l)/t.maxWidth));return{x:0,y:0,width:t.maxWidth,height:Math.max(1,a)*e}});k("image",t=>({x:0,y:0,width:t.width,height:t.height}));k("template",t=>({x:0,y:0,width:t.width,height:t.height}));k("brush",t=>{if(t.points.length===0)return{x:0,y:0,width:0,height:0};let e=1/0,n=1/0,o=-1/0,r=-1/0;for(let i of t.points)i.x-i.width<e&&(e=i.x-i.width),i.y-i.width<n&&(n=i.y-i.width),i.x+i.width>o&&(o=i.x+i.width),i.y+i.width>r&&(r=i.y+i.width);return{x:e,y:n,width:o-e,height:r-n}});k("group",()=>({x:0,y:0,width:0,height:0}));k("frame",t=>({x:0,y:0,width:t.width,height:t.height}));k("block-arrow",t=>({x:0,y:0,width:t.width,height:t.height}));var J=(t,e)=>t.order<e.order?-1:t.order>e.order?1:0;var $=t=>[...t.layers.values()].sort(J),H=(t,e)=>[...t.elements.values()].filter(n=>n.layerId===e).sort(J);var ct=new Map,Z=(t,e)=>{ct.set(t,e)};var dt=Object.freeze({pan:{x:0,y:0},zoom:1,rotation:0,size:{width:0,height:0},gridEnabled:!1}),Q=t=>{let e=A.translation(-t.pan.x,-t.pan.y),n=A.rotation(t.rotation),o=A.scaling(t.zoom);return A.multiply(o,A.multiply(n,e))};var F=class{entries=new Map;get(e){let n=this.entries.get(e.id);if(n){if(n.ref!==e){this.entries.delete(e.id);return}return n.value}}set(e,n){return this.entries.set(e.id,{ref:e,value:n}),n}getOrCompute(e,n){let o=this.get(e);return o!==void 0?o:this.set(e,n(e))}invalidate(e){this.entries.delete(e)}clear(){this.entries.clear()}prune(e){for(let n of this.entries.keys())e.elements.has(n)||this.entries.delete(n)}get size(){return this.entries.size}},$n=new F,P=(t,e)=>t.getOrCompute(e,j);var ye="#bbb";var pe=.06,ge=.92,be=.5;var Re=.4,Te=.5,ee=.1,te=.9,we="#888",Ee="#ffffff",ke="#222",_e="#ddd";var v=class{cap;onEvict;map=new Map;constructor(e,n){this.cap=e,this.onEvict=n}get(e){let n=this.map.get(e);if(n!==void 0)return this.map.delete(e),this.map.set(e,n),n}has(e){return this.map.has(e)}set(e,n){for(this.map.delete(e),this.map.set(e,n);this.map.size>this.cap;){let o=this.map.keys().next().value,r=this.map.get(o);this.map.delete(o),r!==void 0&&this.onEvict?.(o,r)}}delete(e){return this.map.delete(e)}clear(){this.map.clear()}get size(){return this.map.size}keys(){return this.map.keys()}values(){return this.map.values()}};var Ae=t=>t<=0?1:2**Math.round(Math.log2(t));var ne=(t,e,n={})=>{let o=Q(t.viewport),r=n.dirtyWorld;if(!n.skipClear)if(r){let b=[A.applyToPoint(o,{x:r.x,y:r.y}),A.applyToPoint(o,{x:r.x+r.width,y:r.y+r.height})],h=E.expand(E.fromPoints(b),2);e.clear(h)}else e.clear();e.save(),e.setTransform(o);let i=n.boundsCache??new F,a=n.viewport,l=null;a&&n.spatialIndex&&(l=n.spatialIndex.query(a));let s=t.viewport.zoom,c=n.lod,d=c?.placeholder!==void 0&&s<c.placeholder,m=c?.hideText!==void 0&&s<c.hideText,f=n.placeholderFill??ye,y=n.layerCompositeCache,w=n.dirtyLayerIds,p=n.compositeLayerBitmap,T=Ae(s),O=b=>{let h=null;for(let g of H(t,b)){let R=P(i,g);h=h?E.union(h,R):R}return h};for(let b of $(t))if(b.visible){if(y&&p){w?.has(b.id)&&y.invalidateLayer(b.id);let h=y.get(b.id,T);if(h===void 0){let g=p(b.id,T,t);g!==null&&(y.set(b.id,T,g),h=g)}if(h!==void 0){let g=O(b.id);g&&e.drawImage(h,g.x,g.y,g.width,g.height);continue}}for(let h of H(t,b.id)){if(n.hideElements?.has(h.id)||l&&!l.has(h.id))continue;if(a){let R=P(i,h);if(!E.intersects(R,a))continue}if(r){let R=P(i,h);if(!E.intersects(R,r))continue}if(m&&Y(h))continue;if(d){let R=P(i,h);e.setFill(f),e.setStrokeWidth(0),e.beginPath(),e.rect(R.x,R.y,R.width,R.height),e.fill();continue}let g=de(h.type);if(!g){n.onUnknownElement?.(h);continue}e.save(),n.dimElements?.has(h.id)&&n.dimOpacity!==void 0&&e.setOpacity(n.dimOpacity),e.translate(h.position.x,h.position.y),h.rotation!==0&&e.rotate(h.rotation),(h.scale.x!==1||h.scale.y!==1)&&e.scale(h.scale.x,h.scale.y),g(h,e,{zoom:s}),e.restore()}}e.restore()};var mt=1.2,ht=(t,e,n,o,r)=>{if(t===""){r.push({text:"",start:e,end:e,width:0});return}let i=[],a=/\S+/g,l;for(;(l=a.exec(t))!==null;)i.push({s:l.index,e:l.index+l[0].length});if(i.length===0){r.push({text:t,start:e,end:e+t.length,width:o(t)});return}let s=0,c=(m,f)=>{let y=t.slice(m,f);r.push({text:y,start:e+m,end:e+f,width:o(y)})},d=0;for(;d<i.length;){let m=x(i[d]);if(o(t.slice(s,m.e))<=n){d++;continue}if(m.s>s){c(s,m.s),s=m.s;continue}let f=m.s+1;for(;f<m.e&&o(t.slice(s,f+1))<=n;)f++;if(f>=m.e){d++;continue}c(s,f),s=f,m.s=f}c(s,t.length)},Le=(t,e,n)=>{let o=n.fontSize*(n.lineHeightFactor??mt),r=[],i=0;for(let s=0;s<=t.length;s++)if(s===t.length||t[s]===`
3
- `){let c=t.slice(i,s);n.maxWidth===void 0?r.push({text:c,start:i,end:s,width:e(c)}):ht(c,i,n.maxWidth,e,r),i=s+1}r.length===0&&r.push({text:"",start:0,end:0,width:0});let a=0;for(let s of r)a=Math.max(a,s.width);let l=n.maxWidth??a;return{lines:r,lineHeight:o,blockWidth:l}};var ut=new Map;var ft=()=>typeof performance<"u"?performance.now():0;var oe=(t,e=ft(t))=>{if(!t.animationKind)return t.src;let n=ut.get(t.animationKind);if(!n)return t.src;try{return n.getFrameAt(t.animationData,e)}catch{return t.src}};var B=(t,e)=>{let n=t.fill!==void 0&&t.fill!=="transparent",o=t.stroke!==void 0&&t.stroke!=="transparent"&&(t.strokeWidth??1)>0;return n&&e.setFill(t.fill),o&&(e.setStroke(t.stroke),e.setStrokeWidth(t.strokeWidth??1),t.lineCap&&e.setLineCap(t.lineCap),t.lineJoin&&e.setLineJoin(t.lineJoin),t.dashArray&&e.setDashArray(t.dashArray)),t.opacity!==void 0&&e.setOpacity(t.opacity),{fill:n,stroke:o}},yt=(t,e)=>{let{fill:n,stroke:o}=B(t.style,e);if(!n&&!o)return;let r=q(t.style.roundness,t.width,t.height);if(n&&(e.beginPath(),r>0?Ie(e,0,0,t.width,t.height,r):e.rect(0,0,t.width,t.height),e.fill()),o){let i=U(t.style),a=i,l=i,s=t.width-2*i,c=t.height-2*i;if(s<=0||c<=0)return;let d=r>0?Math.max(0,r-i):0;e.beginPath(),d>0?Ie(e,a,l,s,c,d):e.rect(a,l,s,c),e.stroke()}},U=t=>{let e=t.strokeAlign??"center";if(e==="center")return 0;let n=(t.strokeWidth??1)/2;return e==="inside"?n:-n},Ie=(t,e,n,o,r,i)=>{t.moveTo(e+i,n),t.lineTo(e+o-i,n),t.quadraticCurveTo(e+o,n,e+o,n+i),t.lineTo(e+o,n+r-i),t.quadraticCurveTo(e+o,n+r,e+o-i,n+r),t.lineTo(e+i,n+r),t.quadraticCurveTo(e,n+r,e,n+r-i),t.lineTo(e,n+i),t.quadraticCurveTo(e,n,e+i,n),t.closePath()},pt=(t,e)=>{let{fill:n,stroke:o}=B(t.style,e);if(!n&&!o)return;let r=t.width/2,i=t.height/2;if(n&&(e.beginPath(),e.ellipse(r,i,r,i),e.fill()),o){let a=U(t.style),l=r-a,s=i-a;if(l<=0||s<=0)return;e.beginPath(),e.ellipse(r,i,l,s),e.stroke()}},gt=(t,e)=>{if(t.points.length<2)return;let{fill:n,stroke:o}=B(t.style,e);if(!(!n&&!o)&&(n&&(e.beginPath(),z(e,t.points),e.fill()),o)){let r=U(t.style),i=r!==0?M.offsetClosedPath(t.points,r):t.points;e.beginPath(),z(e,i),e.stroke()}},z=(t,e)=>{let n=e[0];if(n!==void 0){t.moveTo(n.x,n.y);for(let o=1;o<e.length;o++){let r=e[o];r!==void 0&&t.lineTo(r.x,r.y)}t.closePath()}},bt=(t,e)=>{if(t.commands.length===0)return;let{fill:n,stroke:o}=B(t.style,e);if(!(!n&&!o)){e.beginPath();for(let r of t.commands)switch(r.kind){case"M":e.moveTo(r.to.x,r.to.y);break;case"L":e.lineTo(r.to.x,r.to.y);break;case"Q":e.quadraticCurveTo(r.control.x,r.control.y,r.to.x,r.to.y);break;case"C":e.bezierCurveTo(r.control1.x,r.control1.y,r.control2.x,r.control2.y,r.to.x,r.to.y);break;case"Z":e.closePath();break}n&&e.fill(),o&&e.stroke()}},Rt=(t,e)=>{let n=t.style.textAlign??"left",o=t.style.fontWeight,r=t.style.fontStyle;e.setFont(t.fontFamily,t.fontSize,{...o?{weight:o}:{},...r?{style:r}:{}}),e.setTextAlign("left"),e.setTextBaseline(t.style.textBaseline??"top");let i=t.style.fill??"#000";e.setFill(i),t.style.opacity!==void 0&&e.setOpacity(t.style.opacity);let a=t.fontSize,l;if(t.maxWidth===void 0&&!t.text.includes(`
4
- `))l=[{text:t.text,x:0,width:e.measureText(t.text).width,top:0}];else{let c=m=>e.measureText(m).width,d=Le(t.text,c,{fontSize:a,...t.maxWidth!==void 0?{maxWidth:t.maxWidth}:{}});l=d.lines.map((m,f)=>({text:m.text,x:n==="center"?d.blockWidth/2-m.width/2:n==="right"?d.blockWidth-m.width:0,width:m.width,top:f*d.lineHeight}))}for(let c of l)e.fillText(c.text,c.x,c.top);let s=t.style.textDecoration;if(s?.underline||s?.strikethrough){let c=Math.max(1,a*pe);for(let d of l)d.width<=0||(s.underline&&(e.beginPath(),e.rect(d.x,d.top+a*ge,d.width,c),e.fill()),s.strikethrough&&(e.beginPath(),e.rect(d.x,d.top+a*be-c/2,d.width,c),e.fill()))}},Tt=(t,e)=>{let n=t.points;if(n.length===0)return;let o=t.style.fill??t.style.stroke??"#000";if(e.setFill(o),e.setStroke(null),n.length===1){let r=x(n[0]);e.beginPath(),e.ellipse(r.x,r.y,r.width,r.width),e.fill();return}for(let r=0;r<n.length-1;r++){let i=x(n[r]),a=x(n[r+1]),l=a.x-i.x,s=a.y-i.y,c=Math.hypot(l,s)||1,d=-s/c,m=l/c;e.beginPath(),e.moveTo(i.x+d*i.width,i.y+m*i.width),e.lineTo(a.x+d*a.width,a.y+m*a.width),e.lineTo(a.x-d*a.width,a.y-m*a.width),e.lineTo(i.x-d*i.width,i.y-m*i.width),e.closePath(),e.fill(),e.beginPath(),e.ellipse(a.x,a.y,a.width,a.width),e.fill()}},wt=(t,e)=>{let n=t.animationKind?oe(t):t.metadata?.image??oe(t),o=t.metadata?.animated===!0||t.animationKind!==void 0;e.drawImage(n,0,0,t.width,t.height,o)},se=()=>{_("rectangle",yt),_("ellipse",pt),_("polygon",gt),_("path",bt),_("text",Rt),_("image",wt),_("group",()=>{}),_("frame",At),Z("frame",()=>({top:24})),_("block-arrow",Et),_("brush",Tt)},Et=(t,e)=>{let{fill:n,stroke:o}=B(t.style,e),r=t.direction??"right",i=Math.max(ee,Math.min(te,t.headRatio??Re)),a=Math.max(ee,Math.min(te,t.bodyThickness??Te)),l=t.width,s=t.height,c=l*i,d=l-c,m=s*a/2,f=s/2,y=[[0,f-m],[d,f-m],[d,0],[l,f],[d,s],[d,f+m],[0,f+m]];r!=="right"&&(y=y.map(([p,T])=>kt([p,T],r,l,s)));let w=y.map(([p,T])=>({x:p,y:T}));if(n&&(e.beginPath(),z(e,w),e.fill()),o){let p=U(t.style),T=p!==0?M.offsetClosedPath(w,p):w;e.beginPath(),z(e,T),e.stroke()}},kt=([t,e],n,o,r)=>{switch(n){case"left":return[o-t,e];case"up":return[e*(o/r),r-t*(r/o)];case"down":return[(r-e)*(o/r),t*(r/o)]}},ie="\u2026",_t=(t,e,n)=>{if(e<=0)return"";if(n.measureText(t).width<=e)return t;let o=0,r=t.length;for(;o<r;){let i=Math.ceil((o+r)/2);n.measureText(t.slice(0,i)+ie).width<=e?o=i:r=i-1}return o>0?t.slice(0,o)+ie:ie},At=(t,e,n)=>{e.setFill(t.style.fill??Ee),e.setStroke(null),e.setDashArray(null),e.beginPath(),e.rect(0,0,t.width,t.height),e.fill();let o=(n?.zoom??1)*(t.scale.x||1);e.setFill(null),e.setStroke(we),e.setStrokeWidth(1/(o||1)),e.setDashArray(null),e.beginPath(),e.rect(0,0,t.width,t.height),e.stroke();let r=t.name??"Frame";e.setFont("system-ui, sans-serif",12);let i=t.width-16,a=e.measureText(r).width<=i,l=a?r:_t(r,i,e),s=a?Math.min(e.measureText(r).width+16,t.width):t.width;e.setFill(ke),e.beginPath(),e.rect(0,-24,s,24),e.fill(),e.setFill(_e),e.setTextBaseline("middle"),e.setTextAlign("left"),e.fillText(l,8,-24/2)};var S="Roboto",W="PT Serif",N="Roboto Mono",ve=t=>{let e=t.toLowerCase();return e.includes("mono")?N:e.includes("sans")?S:e.includes("serif")||e.includes("slab")||e.includes("georgia")||e.includes("times")?W:S},Lt=[{family:S,weight:"400",style:"normal",url:new URL("../fonts/Roboto-Regular.woff2",import.meta.url)},{family:S,weight:"700",style:"normal",url:new URL("../fonts/Roboto-Bold.woff2",import.meta.url)},{family:S,weight:"400",style:"italic",url:new URL("../fonts/Roboto-Italic.woff2",import.meta.url)},{family:S,weight:"700",style:"italic",url:new URL("../fonts/Roboto-BoldItalic.woff2",import.meta.url)},{family:W,weight:"400",style:"normal",url:new URL("../fonts/PTSerif-Regular.woff2",import.meta.url)},{family:W,weight:"700",style:"normal",url:new URL("../fonts/PTSerif-Bold.woff2",import.meta.url)},{family:W,weight:"400",style:"italic",url:new URL("../fonts/PTSerif-Italic.woff2",import.meta.url)},{family:W,weight:"700",style:"italic",url:new URL("../fonts/PTSerif-BoldItalic.woff2",import.meta.url)},{family:N,weight:"400",style:"normal",url:new URL("../fonts/RobotoMono-Regular.woff2",import.meta.url)},{family:N,weight:"700",style:"normal",url:new URL("../fonts/RobotoMono-Bold.woff2",import.meta.url)},{family:N,weight:"400",style:"italic",url:new URL("../fonts/RobotoMono-Italic.woff2",import.meta.url)},{family:N,weight:"700",style:"italic",url:new URL("../fonts/RobotoMono-BoldItalic.woff2",import.meta.url)}],Ce=async(t=globalThis)=>{let e=t.fonts;!e||typeof FontFace>"u"||await Promise.allSettled(Lt.map(async n=>{let o=new FontFace(n.family,`url(${n.url.href})`,{weight:n.weight,style:n.style});await o.load(),e.add(o)}))};var It=["HTMLImageElement","HTMLCanvasElement","HTMLVideoElement","ImageBitmap","OffscreenCanvas","SVGImageElement","VideoFrame"],Se=t=>{if(typeof t!="object"||t===null)return!1;let e=globalThis;for(let n of It){let o=e[n];if(typeof o=="function"&&t instanceof o)return!0}return!1},Oe=new Set,De=t=>{if(typeof console>"u")return;let e=typeof t=="string"?t.startsWith("blob:")?"dead-blob-url":"string-src":t==null?"empty":"stale-object";Oe.has(e)||(Oe.add(e),console.warn(`[renderer] skipped a non-drawable image source (kind: ${e}). The shape's image handle isn't a live HTMLImageElement / canvas / bitmap \u2014 likely a scene restored from storage where the <img> was lost (metadata.image) and src is a dead blob: URL. The image won't render until rehydrated from Scene.files.`))};var X=class{ctx;_width;_height;dpr;constructor(e,n,o,r=1){this.ctx=e,this._width=n,this._height=o,this.dpr=r}get size(){return{width:this._width,height:this._height}}resize(e,n,o){this._width=e,this._height=n,o!==void 0&&(this.dpr=o)}setFill(e){this.ctx.fillStyle=e??"transparent"}setStroke(e){this.ctx.strokeStyle=e??"transparent"}setStrokeWidth(e){this.ctx.lineWidth=e}setOpacity(e){this.ctx.globalAlpha=e}setLineCap(e){this.ctx.lineCap=e}setLineJoin(e){this.ctx.lineJoin=e}setDashArray(e){this.ctx.setLineDash(e?[...e]:[])}setFont(e,n,o){let r=o?.style==="italic"?"italic ":"",i=o?.weight==="bold"?"bold ":"";this.ctx.font=`${r}${i}${n}px "${ve(e)}", ${e}`}setTextAlign(e){this.ctx.textAlign=e==="center"?"center":e}setTextBaseline(e){this.ctx.textBaseline=e==="middle"?"middle":e==="top"?"top":"bottom"}save(){this.ctx.save()}restore(){this.ctx.restore()}translate(e,n){this.ctx.translate(e,n)}rotate(e){this.ctx.rotate(e)}scale(e,n){this.ctx.scale(e,n)}setTransform(e){let n=this.dpr;this.ctx.setTransform(n*e.a,n*e.b,n*e.c,n*e.d,n*e.e,n*e.f)}resetTransform(){this.ctx.setTransform(this.dpr,0,0,this.dpr,0,0)}beginPath(){this.ctx.beginPath()}closePath(){this.ctx.closePath()}moveTo(e,n){this.ctx.moveTo(e,n)}lineTo(e,n){this.ctx.lineTo(e,n)}quadraticCurveTo(e,n,o,r){this.ctx.quadraticCurveTo(e,n,o,r)}bezierCurveTo(e,n,o,r,i,a){this.ctx.bezierCurveTo(e,n,o,r,i,a)}rect(e,n,o,r){this.ctx.rect(e,n,o,r)}ellipse(e,n,o,r){this.ctx.ellipse(e,n,o,r,0,0,Math.PI*2)}fill(e){this.ctx.fill(e)}stroke(){this.ctx.stroke()}fillText(e,n,o,r){r!==void 0?this.ctx.fillText(e,n,o,r):this.ctx.fillText(e,n,o)}measureText(e){return{width:this.ctx.measureText(e).width}}drawImage(e,n,o,r,i,a){if(!Se(e)){De(e);return}this.ctx.drawImage(e,n,o,r,i)}clear(e){this.dirtyRect=null,e?this.ctx.clearRect(e.x,e.y,e.width,e.height):(this.ctx.save(),this.ctx.setTransform(1,0,0,1,0,0),this.ctx.clearRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height),this.ctx.restore())}dirtyRect=null;markDirty(e){if(!this.dirtyRect){this.dirtyRect=e;return}let n=Math.min(this.dirtyRect.x,e.x),o=Math.min(this.dirtyRect.y,e.y),r=Math.max(this.dirtyRect.x+this.dirtyRect.width,e.x+e.width),i=Math.max(this.dirtyRect.y+this.dirtyRect.height,e.y+e.height);this.dirtyRect={x:n,y:o,width:r-n,height:i-o}}getDirtyRect(){return this.dirtyRect}};var Me=(t,e,n=new v(64))=>{for(let o of e)switch(o.k){case"setFill":t.setFill(o.color);break;case"setStroke":t.setStroke(o.color);break;case"setStrokeWidth":t.setStrokeWidth(o.w);break;case"setOpacity":t.setOpacity(o.a);break;case"setLineCap":t.setLineCap(o.cap);break;case"setLineJoin":t.setLineJoin(o.join);break;case"setDashArray":t.setDashArray(o.dash);break;case"setFont":t.setFont(o.family,o.size,o.options);break;case"setTextAlign":t.setTextAlign(o.align);break;case"setTextBaseline":t.setTextBaseline(o.baseline);break;case"save":t.save();break;case"restore":t.restore();break;case"translate":t.translate(o.x,o.y);break;case"rotate":t.rotate(o.r);break;case"scale":t.scale(o.sx,o.sy);break;case"setTransform":t.setTransform(o.t);break;case"resetTransform":t.resetTransform();break;case"beginPath":t.beginPath();break;case"closePath":t.closePath();break;case"moveTo":t.moveTo(o.x,o.y);break;case"lineTo":t.lineTo(o.x,o.y);break;case"quadraticCurveTo":t.quadraticCurveTo(o.cx,o.cy,o.x,o.y);break;case"bezierCurveTo":t.bezierCurveTo(o.c1x,o.c1y,o.c2x,o.c2y,o.x,o.y);break;case"rect":t.rect(o.x,o.y,o.w,o.h);break;case"ellipse":t.ellipse(o.cx,o.cy,o.rx,o.ry);break;case"fill":o.rule!==void 0?t.fill(o.rule):t.fill();break;case"stroke":t.stroke();break;case"fillText":o.maxWidth!==void 0?t.fillText(o.text,o.x,o.y,o.maxWidth):t.fillText(o.text,o.x,o.y);break;case"clear":o.bounds!==void 0?t.clear(o.bounds):t.clear();break;case"markDirty":t.markDirty?.(o.bounds);break;case"resize":break;case"defineImage":n.set(o.id,o.bitmap);break;case"drawImage":{let r=n.get(o.id);r&&t.drawImage(r,o.dx,o.dy,o.dw,o.dh);break}}};var u={canvas:null,target:null,dpr:1,images:new v(64,(t,e)=>{e.close()})},Fe=!1,Ct=()=>{Fe||(se(),Fe=!0)},C=(t,e)=>{e&&e.length>0?self.postMessage(t,e):self.postMessage(t)},Ot=(t,e,n,o)=>{Ce(self),u.canvas=t,u.dpr=o,t.width=Math.max(1,Math.round(e*o)),t.height=Math.max(1,Math.round(n*o));let r=t.getContext("2d");if(!r)throw new Error("OffscreenCanvas 2D context unavailable");r.setTransform(o,0,0,o,0,0),u.target=new X(r,e,n,o),C({type:"ready"})},St=(t,e)=>{if(!u.canvas||!u.target)return;u.canvas.width=Math.max(1,Math.round(t*u.dpr)),u.canvas.height=Math.max(1,Math.round(e*u.dpr));let n=u.canvas.getContext("2d");n&&(n.setTransform(u.dpr,0,0,u.dpr,0,0),u.target.resize(t,e,u.dpr))},Dt=t=>{if(!u.canvas||!u.target){C({type:"error",message:"Worker not initialised"});return}Ct();let e=u.canvas.getContext("2d");if(e===null){C({type:"error",message:"Worker not initialised"});return}e.save(),e.setTransform(u.dpr,0,0,u.dpr,0,0),e.clearRect(0,0,u.target.size.width,u.target.size.height),ne(t,u.target),e.restore();let n=u.canvas.transferToImageBitmap();C({type:"frame-done",bitmap:n},[n])},Mt=t=>{if(!u.target){C({type:"error",message:"Worker not initialised"});return}Me(u.target,t,u.images)};self.addEventListener("message",t=>{let e=t.data;try{switch(e.type){case"init":Ot(e.canvas,e.width,e.height,e.dpr);break;case"resize":St(e.width,e.height);break;case"snapshot":Dt(e.scene);break;case"replay":Mt(e.commands);break;case"frame":C({type:"error",message:"patch-stream frames not implemented"});break}}catch(n){C({type:"error",message:n instanceof Error?n.message:String(n)})}});
1
+ var nt=Object.defineProperty;var q=(t,e)=>{for(var n in e)nt(t,n,{get:e[n],enumerable:!0})};var we=new Map,I=(t,e)=>{we.set(t,e)},Te=t=>we.get(t);var Q=(t,e,n)=>{if(!t||t.type==="sharp")return 0;let o=Math.min(Math.abs(e),Math.abs(n));if(o<=0)return 0;if(t.value!==void 0)return Math.max(0,Math.min(t.value,o/2));let r=32/.25;return o<=r?o*.25:32};var Ee=t=>{if(!t)return"";let e=Object.entries(t).filter(([,n])=>n!==void 0).sort(([n],[o])=>n<o?-1:n>o?1:0);return JSON.stringify(e)},ke=t=>{let e=[];for(let n of t){if(n.text==="")continue;let o=e[e.length-1];o!==void 0&&Ee(o.style)===Ee(n.style)?e[e.length-1]={text:o.text+n.text,...o.style!==void 0?{style:o.style}:{}}:e.push(n)}return e},it=t=>{let e=t.runs;return e!==void 0&&e.length>0?ke(e):t.text===""?[]:[{text:t.text}]},ee=(t,e,n)=>{let o=Math.min(e,n),r=Math.max(e,n),i=[],a=0;for(let l of it(t)){let s=a,m=a+l.text.length;a=m;let u=Math.max(s,o),c=Math.min(m,r);u>=c||i.push({text:l.text.slice(u-s,c-s),...l.style!==void 0?{style:l.style}:{}})}return i};var y=t=>{if(t===void 0)throw new Error("required value is undefined");return t};var f={};q(f,{ZERO:()=>_e,add:()=>lt,angle:()=>gt,cross:()=>ht,distance:()=>ft,distanceSq:()=>Le,div:()=>dt,dot:()=>ut,equals:()=>Tt,length:()=>Ae,lengthSq:()=>Ie,lerp:()=>yt,midpoint:()=>pt,mul:()=>ct,negate:()=>mt,normalize:()=>xt,of:()=>st,perp:()=>wt,rotate:()=>bt,rotateAround:()=>Rt,sub:()=>at});var _e=Object.freeze({x:0,y:0}),st=(t,e)=>({x:t,y:e}),lt=(t,e)=>({x:t.x+e.x,y:t.y+e.y}),at=(t,e)=>({x:t.x-e.x,y:t.y-e.y}),ct=(t,e)=>({x:t.x*e,y:t.y*e}),dt=(t,e)=>({x:t.x/e,y:t.y/e}),mt=t=>({x:-t.x,y:-t.y}),ut=(t,e)=>t.x*e.x+t.y*e.y,ht=(t,e)=>t.x*e.y-t.y*e.x,Ie=t=>t.x*t.x+t.y*t.y,Ae=t=>Math.sqrt(Ie(t)),Le=(t,e)=>{let n=e.x-t.x,o=e.y-t.y;return n*n+o*o},ft=(t,e)=>Math.sqrt(Le(t,e)),xt=t=>{let e=Ae(t);return e===0?_e:{x:t.x/e,y:t.y/e}},yt=(t,e,n)=>({x:t.x+(e.x-t.x)*n,y:t.y+(e.y-t.y)*n}),pt=(t,e)=>({x:(t.x+e.x)/2,y:(t.y+e.y)/2}),gt=t=>Math.atan2(t.y,t.x),bt=(t,e)=>{let n=Math.cos(e),o=Math.sin(e);return{x:t.x*n-t.y*o,y:t.x*o+t.y*n}},Rt=(t,e,n)=>{let o=Math.cos(n),r=Math.sin(n),i=t.x-e.x,a=t.y-e.y;return{x:e.x+(i*o-a*r),y:e.y+(i*r+a*o)}},wt=t=>({x:-t.y,y:t.x}),Tt=(t,e,n=0)=>n===0?t.x===e.x&&t.y===e.y:Math.abs(t.x-e.x)<=n&&Math.abs(t.y-e.y)<=n;var A={};q(A,{IDENTITY:()=>Et,applyToBounds:()=>vt,applyToPoint:()=>W,decompose:()=>Ct,equals:()=>Ot,inverse:()=>St,multiply:()=>Lt,of:()=>kt,rotation:()=>At,scaling:()=>It,translation:()=>_t});var Et=Object.freeze({a:1,b:0,c:0,d:1,e:0,f:0}),kt=(t,e,n,o,r,i)=>({a:t,b:e,c:n,d:o,e:r,f:i}),_t=(t,e)=>({a:1,b:0,c:0,d:1,e:t,f:e}),It=(t,e=t)=>({a:t,b:0,c:0,d:e,e:0,f:0}),At=t=>{let e=Math.cos(t),n=Math.sin(t);return{a:e,b:n,c:-n,d:e,e:0,f:0}},Lt=(t,e)=>({a:t.a*e.a+t.c*e.b,b:t.b*e.a+t.d*e.b,c:t.a*e.c+t.c*e.d,d:t.b*e.c+t.d*e.d,e:t.a*e.e+t.c*e.f+t.e,f:t.b*e.e+t.d*e.f+t.f}),St=t=>{let e=t.a*t.d-t.b*t.c;if(e===0)throw new Error("Cannot invert singular matrix");return{a:t.d/e,b:-t.b/e,c:-t.c/e,d:t.a/e,e:(t.c*t.f-t.d*t.e)/e,f:(t.b*t.e-t.a*t.f)/e}},W=(t,e)=>({x:t.a*e.x+t.c*e.y+t.e,y:t.b*e.x+t.d*e.y+t.f}),vt=(t,e)=>{let n=W(t,{x:e.x,y:e.y}),o=W(t,{x:e.x+e.width,y:e.y}),r=W(t,{x:e.x,y:e.y+e.height}),i=W(t,{x:e.x+e.width,y:e.y+e.height}),a=Math.min(n.x,o.x,r.x,i.x),l=Math.min(n.y,o.y,r.y,i.y),s=Math.max(n.x,o.x,r.x,i.x),m=Math.max(n.y,o.y,r.y,i.y);return{x:a,y:l,width:s-a,height:m-l}},Ct=t=>{let e=Math.sqrt(t.a*t.a+t.b*t.b),n=Math.sqrt(t.c*t.c+t.d*t.d),r=t.a*t.d-t.b*t.c<0?-n:n;return{translation:{x:t.e,y:t.f},rotation:Math.atan2(t.b,t.a),scale:{x:e,y:r}}},Ot=(t,e,n=0)=>{let o=["a","b","c","d","e","f"];return n===0?o.every(r=>t[r]===e[r]):o.every(r=>Math.abs(t[r]-e[r])<=n)};var k={};q(k,{EMPTY:()=>Se,centerOf:()=>Pt,contains:()=>Ht,containsBounds:()=>Nt,equals:()=>Ut,expand:()=>Gt,fromCenter:()=>Ft,fromPoints:()=>Dt,intersection:()=>ve,intersects:()=>Wt,isEmpty:()=>te,maxX:()=>S,maxY:()=>v,normalize:()=>zt,of:()=>Mt,union:()=>Bt});var Se=Object.freeze({x:0,y:0,width:0,height:0}),Mt=(t,e,n,o)=>({x:t,y:e,width:n,height:o}),Dt=t=>{if(t.length===0)return Se;let e=1/0,n=1/0,o=-1/0,r=-1/0;for(let i of t)i.x<e&&(e=i.x),i.y<n&&(n=i.y),i.x>o&&(o=i.x),i.y>r&&(r=i.y);return{x:e,y:n,width:o-e,height:r-n}},Ft=(t,e,n)=>({x:t.x-e/2,y:t.y-n/2,width:e,height:n}),Pt=t=>({x:t.x+t.width/2,y:t.y+t.height/2}),S=t=>t.x+t.width,v=t=>t.y+t.height,te=t=>t.width<=0||t.height<=0,Bt=(t,e)=>{if(te(t))return e;if(te(e))return t;let n=Math.min(t.x,e.x),o=Math.min(t.y,e.y),r=Math.max(S(t),S(e)),i=Math.max(v(t),v(e));return{x:n,y:o,width:r-n,height:i-o}},ve=(t,e)=>{let n=Math.max(t.x,e.x),o=Math.max(t.y,e.y),r=Math.min(S(t),S(e)),i=Math.min(v(t),v(e));return r<=n||i<=o?null:{x:n,y:o,width:r-n,height:i-o}},Wt=(t,e)=>ve(t,e)!==null,Ht=(t,e)=>e.x>=t.x&&e.x<=S(t)&&e.y>=t.y&&e.y<=v(t),Nt=(t,e)=>e.x>=t.x&&e.y>=t.y&&S(e)<=S(t)&&v(e)<=v(t),Gt=(t,e)=>({x:t.x-e,y:t.y-e,width:t.width+2*e,height:t.height+2*e}),zt=t=>({x:t.width<0?t.x+t.width:t.x,y:t.height<0?t.y+t.height:t.y,width:Math.abs(t.width),height:Math.abs(t.height)}),Ut=(t,e,n=0)=>n===0?t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height:Math.abs(t.x-e.x)<=n&&Math.abs(t.y-e.y)<=n&&Math.abs(t.width-e.width)<=n&&Math.abs(t.height-e.height)<=n;var H={};q(H,{offsetClosedPath:()=>Xt,signedArea:()=>qt});var Xt=(t,e)=>{if(t.length<3||e===0)return t.map(s=>({x:s.x,y:s.y}));let n=0,o=0;for(let s of t)n+=s.x,o+=s.y;n/=t.length,o/=t.length;let r=t.length,i=new Array(r),a=new Array(r);for(let s=0;s<r;s++){let m=y(t[s]),u=y(t[(s+1)%r]),c=u.x-m.x,d=u.y-m.y,h=Math.hypot(c,d)||1;i[s]=-d/h,a[s]=c/h}let l=[];for(let s=0;s<r;s++){let m=(s-1+r)%r,u=y(i[m]),c=y(a[m]),d=y(i[s]),h=y(a[s]),b=u+d,p=c+h,R=Math.hypot(b,p);R<1e-6?(b=u,p=c):(b/=R,p/=R);let E=y(t[s]),D=n-E.x,J=o-E.y,F=b*D+p*J>=0?1:-1,w=b*u+p*c,x=w>1e-6?e/w:e;l.push({x:E.x+F*b*x,y:E.y+F*p*x})}return l},qt=t=>{let e=0;for(let n=0;n<t.length;n++){let o=y(t[n]),r=y(t[(n+1)%t.length]);e+=o.x*r.y-r.x*o.y}return e/2};var Kt=null;var Ce=()=>Kt;var ne=t=>t.type==="text";var oe=t=>t.stroke??t.fill??"#000",Oe=new Map,_=(t,e)=>{Oe.set(t,e)};var Me=t=>{let e=Oe.get(t.type);if(!e)throw new Error(`No bounder registered for shape type: ${t.type}`);return e(t)},re=t=>{let e=Me(t),n=[{x:e.x,y:e.y},{x:e.x+e.width,y:e.y},{x:e.x,y:e.y+e.height},{x:e.x+e.width,y:e.y+e.height}],o=Math.sin(t.rotation),r=Math.cos(t.rotation),i=n.map(a=>{let l=a.x*t.scale.x,s=a.y*t.scale.y;return{x:t.position.x+(l*r-s*o),y:t.position.y+(l*o+s*r)}});return k.fromPoints(i)};_("rectangle",t=>({x:0,y:0,width:t.width,height:t.height}));_("ellipse",t=>({x:0,y:0,width:t.width,height:t.height}));_("polygon",t=>k.fromPoints(t.points));_("path",t=>{let e=[],n={x:0,y:0};for(let o of t.commands)switch(o.kind){case"M":case"L":e.push(o.to),n=o.to;break;case"Q":e.push(o.control,o.to),n=o.to;break;case"C":e.push(o.control1,o.control2,o.to),n=o.to;break;case"Z":break}return k.fromPoints(e)});_("text",t=>{let e=t.fontSize*1.2,n=t.text.split(`
2
+ `),o=Ce(),r={bold:t.style.fontWeight==="bold",italic:t.style.fontStyle==="italic"},i=l=>{if(o){let s=o(l,t.fontFamily,t.fontSize,r);if(s!==null)return s}return l.length*t.fontSize*.6};if(t.maxWidth===void 0){let l=0;for(let s of n)l=Math.max(l,i(s));return l=Math.max(l,t.fontSize*.5),{x:0,y:0,width:l,height:Math.max(1,n.length)*e}}let a=0;for(let l of n)a+=Math.max(1,Math.ceil(i(l)/t.maxWidth));return{x:0,y:0,width:t.maxWidth,height:Math.max(1,a)*e}});_("image",t=>({x:0,y:0,width:t.width,height:t.height}));_("template",t=>({x:0,y:0,width:t.width,height:t.height}));_("brush",t=>{if(t.points.length===0)return{x:0,y:0,width:0,height:0};let e=1/0,n=1/0,o=-1/0,r=-1/0;for(let i of t.points)i.x-i.width<e&&(e=i.x-i.width),i.y-i.width<n&&(n=i.y-i.width),i.x+i.width>o&&(o=i.x+i.width),i.y+i.width>r&&(r=i.y+i.width);return{x:e,y:n,width:o-e,height:r-n}});_("group",()=>({x:0,y:0,width:0,height:0}));_("frame",t=>({x:0,y:0,width:t.width,height:t.height}));_("block-arrow",t=>({x:0,y:0,width:t.width,height:t.height}));var ie=(t,e)=>t.order<e.order?-1:t.order>e.order?1:0;var se=t=>[...t.layers.values()].sort(ie),K=(t,e)=>[...t.elements.values()].filter(n=>n.layerId===e).sort(ie);var le=t=>{let e=t.length;if(e<2)return[];let n=c=>{let d=y(t[c]);return{x:d.x,y:d.y}},o=c=>y(t[c]).width,r=[],i=[];for(let c=0;c<e-1;c++){let d=f.sub(n(c+1),n(c)),h=f.lengthSq(d)>0?f.normalize(d):{x:1,y:0};r.push(h),i.push(f.perp(h))}let a=[],l=[];for(let c=0;c<e;c++){let d=o(c),h=n(c);if(c===0){let E=y(i[0]);a.push(f.add(h,f.mul(E,d))),l.push(f.sub(h,f.mul(E,d)));continue}if(c===e-1){let E=y(i[e-2]);a.push(f.add(h,f.mul(E,d))),l.push(f.sub(h,f.mul(E,d)));continue}let b=y(i[c-1]),p=y(i[c]),R=f.cross(y(r[c-1]),y(r[c]));if(Math.abs(R)<1e-9){a.push(f.add(h,f.mul(b,d))),l.push(f.sub(h,f.mul(b,d)));continue}R>0?(a.push(...De(h,b,p,d,1)),l.push(...Fe(h,b,p,d,-1))):(a.push(...Fe(h,b,p,d,1)),l.push(...De(h,b,p,d,-1)))}let s=Pe(n(e-1),y(i[e-2]),o(e-1),!1),m=Pe(n(0),y(i[0]),o(0),!0),u=[];for(let c of a)u.push(c);for(let c of s)u.push(c);for(let c=l.length-1;c>=0;c--)u.push(y(l[c]));for(let c of m)u.push(c);return u},De=(t,e,n,o,r)=>{let i=f.normalize(f.add(e,n)),a=f.dot(i,e);return a>.001&&1/a<=2.5?[f.add(t,f.mul(i,r*(o/a)))]:[f.add(t,f.mul(e,r*o)),f.add(t,f.mul(n,r*o))]},Fe=(t,e,n,o,r)=>Be(t,o,f.angle(f.mul(e,r)),f.angle(f.mul(n,r))),Pe=(t,e,n,o)=>{let r=f.angle(e)+(o?Math.PI:0);return Be(t,n,r,r-Math.PI)},Be=(t,e,n,o)=>{let r=o-n;for(;r>Math.PI+1e-9;)r-=2*Math.PI;for(;r<-Math.PI-1e-9;)r+=2*Math.PI;let i=Math.max(1,Math.ceil(Math.abs(r)/.35)),a=[];for(let l=0;l<=i;l++){let s=n+r*l/i;a.push({x:t.x+e*Math.cos(s),y:t.y+e*Math.sin(s)})}return a};var Vt=new Map,ae=(t,e)=>{Vt.set(t,e)};var jt=Object.freeze({pan:{x:0,y:0},zoom:1,rotation:0,size:{width:0,height:0},gridEnabled:!1}),ce=t=>{let e=A.translation(-t.pan.x,-t.pan.y),n=A.rotation(t.rotation),o=A.scaling(t.zoom);return A.multiply(o,A.multiply(n,e))};var We=(t,e)=>{let n=new Map,o=i=>{t.setOpacity(i*e)},r={get(i,a){if(a==="setOpacity")return o;if(n.has(a))return n.get(a);let l=Reflect.get(i,a),s=typeof l=="function"?l.bind(i):l;return n.set(a,s),s}};return new Proxy(t,r)};var N=class{entries=new Map;get(e){let n=this.entries.get(e.id);if(n){if(n.ref!==e){this.entries.delete(e.id);return}return n.value}}set(e,n){return this.entries.set(e.id,{ref:e,value:n}),n}getOrCompute(e,n){let o=this.get(e);return o!==void 0?o:this.set(e,n(e))}invalidate(e){this.entries.delete(e)}clear(){this.entries.clear()}prune(e){for(let n of this.entries.keys())e.elements.has(n)||this.entries.delete(n)}get size(){return this.entries.size}},jo=new N,G=(t,e)=>t.getOrCompute(e,re);var He="#bbb";var de=.06,me=.92,ue=.5;var Ne=.4,Ge=.5,he=.1,fe=.9,ze="#888",Ue="#ffffff",Xe="#222",qe="#ddd";var C=class{cap;onEvict;map=new Map;constructor(e,n){this.cap=e,this.onEvict=n}get(e){let n=this.map.get(e);if(n!==void 0)return this.map.delete(e),this.map.set(e,n),n}has(e){return this.map.has(e)}set(e,n){for(this.map.delete(e),this.map.set(e,n);this.map.size>this.cap;){let o=this.map.keys().next().value,r=this.map.get(o);this.map.delete(o),r!==void 0&&this.onEvict?.(o,r)}}delete(e){return this.map.delete(e)}clear(){this.map.clear()}get size(){return this.map.size}keys(){return this.map.keys()}values(){return this.map.values()}};var Ke=t=>t<=0?1:2**Math.round(Math.log2(t));var xe=(t,e,n={})=>{let o=ce(t.viewport),r=n.dirtyWorld;if(!n.skipClear)if(r){let w=[A.applyToPoint(o,{x:r.x,y:r.y}),A.applyToPoint(o,{x:r.x+r.width,y:r.y+r.height})],x=k.expand(k.fromPoints(w),2);e.clear(x)}else e.clear();e.save(),e.setTransform(o);let i=n.boundsCache??new N,a=n.viewport,l=null;a&&n.spatialIndex&&(l=n.spatialIndex.query(a));let s=t.viewport.zoom,m=n.clock,u=m?{zoom:s,clock:m}:{zoom:s},c=n.lod,d=c?.placeholder!==void 0&&s<c.placeholder,h=c?.hideText!==void 0&&s<c.hideText,b=n.placeholderFill??He,p=n.layerCompositeCache,R=n.dirtyLayerIds,E=n.compositeLayerBitmap,D=Ke(s),J=w=>{let x=null;for(let T of K(t,w)){let P=G(i,T);x=x?k.union(x,P):P}return x},Z=n.dimOpacity,F=n.dimElements!==void 0&&Z!==void 0?We(e,Z):null;for(let w of se(t))if(w.visible){if(p&&E){R?.has(w.id)&&p.invalidateLayer(w.id);let x=p.get(w.id,D);if(x===void 0){let T=E(w.id,D,t);T!==null&&(p.set(w.id,D,T),x=T)}if(x!==void 0){let T=J(w.id);T&&e.drawImage(x,T.x,T.y,T.width,T.height);continue}}for(let x of K(t,w.id)){if(n.hideElements?.has(x.id)||l&&!l.has(x.id))continue;if(a){let L=G(i,x);if(!k.intersects(L,a))continue}if(r){let L=G(i,x);if(!k.intersects(L,r))continue}if(h&&ne(x))continue;if(d){let L=G(i,x);e.setFill(b),e.setStrokeWidth(0),e.beginPath(),e.rect(L.x,L.y,L.width,L.height),e.fill();continue}let T=Te(x.type);if(!T){n.onUnknownElement?.(x);continue}e.save();let P=F!==null&&n.dimElements?.has(x.id)===!0,B=P?F:e;P&&B.setOpacity(1),B.translate(x.position.x,x.position.y),x.rotation!==0&&B.rotate(x.rotation),(x.scale.x!==1||x.scale.y!==1)&&B.scale(x.scale.x,x.scale.y),T(x,B,u),e.restore()}}e.restore()};var $t=1.2,Yt=(t,e,n,o,r)=>{if(t===""){r.push({text:"",start:e,end:e,width:0});return}let i=[],a=/\S+/g,l;for(;(l=a.exec(t))!==null;)i.push({s:l.index,e:l.index+l[0].length});if(i.length===0){r.push({text:t,start:e,end:e+t.length,width:o(t)});return}let s=0,m=(c,d)=>{let h=t.slice(c,d);r.push({text:h,start:e+c,end:e+d,width:o(h)})},u=0;for(;u<i.length;){let c=y(i[u]);if(o(t.slice(s,c.e))<=n){u++;continue}if(c.s>s){m(s,c.s),s=c.s;continue}let d=c.s+1;for(;d<c.e&&o(t.slice(s,d+1))<=n;)d++;if(d>=c.e){u++;continue}m(s,d),s=d,c.s=d}m(s,t.length)},ye=(t,e,n)=>{let o=n.fontSize*(n.lineHeightFactor??$t),r=[],i=0;for(let s=0;s<=t.length;s++)if(s===t.length||t[s]===`
3
+ `){let m=t.slice(i,s);n.maxWidth===void 0?r.push({text:m,start:i,end:s,width:e(m)}):Yt(m,i,n.maxWidth,e,r),i=s+1}r.length===0&&r.push({text:"",start:0,end:0,width:0});let a=0;for(let s of r)a=Math.max(a,s.width);let l=n.maxWidth??a;return{lines:r,lineHeight:o,blockWidth:l}};var Jt=new Map;var Zt=()=>typeof performance<"u"?performance.now():0;var pe=(t,e=Zt(t))=>{if(!t.animationKind)return t.src;let n=Jt.get(t.animationKind);if(!n)return t.src;try{return n.getFrameAt(t.animationData,e)}catch{return t.src}};var z=(t,e)=>{let n=t.fill!==void 0&&t.fill!=="transparent",o=t.stroke!==void 0&&t.stroke!=="transparent"&&(t.strokeWidth??1)>0;return n&&e.setFill(t.fill),o&&(e.setStroke(t.stroke),e.setStrokeWidth(t.strokeWidth??1),t.lineCap&&e.setLineCap(t.lineCap),t.lineJoin&&e.setLineJoin(t.lineJoin),t.dashArray&&e.setDashArray(t.dashArray)),t.opacity!==void 0&&e.setOpacity(t.opacity),{fill:n,stroke:o}},en=(t,e)=>{let{fill:n,stroke:o}=z(t.style,e);if(!n&&!o)return;let r=Q(t.style.roundness,t.width,t.height);if(n&&(e.beginPath(),r>0?Ve(e,0,0,t.width,t.height,r):e.rect(0,0,t.width,t.height),e.fill()),o){let i=$(t.style),a=i,l=i,s=t.width-2*i,m=t.height-2*i;if(s<=0||m<=0)return;let u=r>0?Math.max(0,r-i):0;e.beginPath(),u>0?Ve(e,a,l,s,m,u):e.rect(a,l,s,m),e.stroke()}},$=t=>{let e=t.strokeAlign??"center";if(e==="center")return 0;let n=(t.strokeWidth??1)/2;return e==="inside"?n:-n},Ve=(t,e,n,o,r,i)=>{t.moveTo(e+i,n),t.lineTo(e+o-i,n),t.quadraticCurveTo(e+o,n,e+o,n+i),t.lineTo(e+o,n+r-i),t.quadraticCurveTo(e+o,n+r,e+o-i,n+r),t.lineTo(e+i,n+r),t.quadraticCurveTo(e,n+r,e,n+r-i),t.lineTo(e,n+i),t.quadraticCurveTo(e,n,e+i,n),t.closePath()},tn=(t,e)=>{let{fill:n,stroke:o}=z(t.style,e);if(!n&&!o)return;let r=t.width/2,i=t.height/2;if(n&&(e.beginPath(),e.ellipse(r,i,r,i),e.fill()),o){let a=$(t.style),l=r-a,s=i-a;if(l<=0||s<=0)return;e.beginPath(),e.ellipse(r,i,l,s),e.stroke()}},nn=(t,e)=>{if(t.points.length<2)return;let{fill:n,stroke:o}=z(t.style,e);if(!(!n&&!o)&&(n&&(e.beginPath(),j(e,t.points),e.fill()),o)){let r=$(t.style),i=r!==0?H.offsetClosedPath(t.points,r):t.points;e.beginPath(),j(e,i),e.stroke()}},j=(t,e)=>{let n=e[0];if(n!==void 0){t.moveTo(n.x,n.y);for(let o=1;o<e.length;o++){let r=e[o];r!==void 0&&t.lineTo(r.x,r.y)}t.closePath()}},on=(t,e)=>{if(t.commands.length===0)return;let{fill:n,stroke:o}=z(t.style,e);if(!(!n&&!o)){e.beginPath();for(let r of t.commands)switch(r.kind){case"M":e.moveTo(r.to.x,r.to.y);break;case"L":e.lineTo(r.to.x,r.to.y);break;case"Q":e.quadraticCurveTo(r.control.x,r.control.y,r.to.x,r.to.y);break;case"C":e.bezierCurveTo(r.control1.x,r.control1.y,r.control2.x,r.control2.y,r.to.x,r.to.y);break;case"Z":e.closePath();break}n&&e.fill(),o&&e.stroke()}},rn=(t,e)=>{let n=t.style.textAlign??"left",o=t.fontSize;e.setTextAlign("left"),e.setTextBaseline(t.style.textBaseline??"top");let r=m=>{let u=m?.fontWeight??t.style.fontWeight,c=m?.fontStyle??t.style.fontStyle;e.setFont(t.fontFamily,o,{...u?{weight:u}:{},...c?{style:c}:{}})};r(void 0);let i=ye(t.text,m=>e.measureText(m).width,{fontSize:o,...t.maxWidth!==void 0?{maxWidth:t.maxWidth}:{}}),a=i.lines.map(m=>{let u=ee(t,m.start,m.end).map(d=>(r(d.style),{text:d.text,style:d.style,width:e.measureText(d.text).width})),c=u.reduce((d,h)=>d+h.width,0);return{segs:u,total:c}}),l=t.maxWidth??a.reduce((m,u)=>Math.max(m,u.total),0),s=Math.max(1,o*de);a.forEach((m,u)=>{let c=u*i.lineHeight,d=n==="center"?l/2-m.total/2:n==="right"?l-m.total:0;for(let h of m.segs){let b=h.style?.fill??t.style.fill??"#000",p=h.style?.opacity??t.style.opacity;r(h.style),e.setFill(b),p!==void 0&&e.setOpacity(p),e.fillText(h.text,d,c);let R=h.style?.textDecoration??t.style.textDecoration;h.width>0&&(R?.underline||R?.strikethrough)&&(R.underline&&(e.beginPath(),e.rect(d,c+o*me,h.width,s),e.fill()),R.strikethrough&&(e.beginPath(),e.rect(d,c+o*ue-s/2,h.width,s),e.fill())),d+=h.width}})},sn=(t,e)=>{if(t.runs!==void 0&&t.runs.length>0){rn(t,e);return}let n=t.style.textAlign??"left",o=t.style.fontWeight,r=t.style.fontStyle;e.setFont(t.fontFamily,t.fontSize,{...o?{weight:o}:{},...r?{style:r}:{}}),e.setTextAlign("left"),e.setTextBaseline(t.style.textBaseline??"top");let i=t.style.fill??"#000";e.setFill(i),t.style.opacity!==void 0&&e.setOpacity(t.style.opacity);let a=t.fontSize,l;if(t.maxWidth===void 0&&!t.text.includes(`
4
+ `))l=[{text:t.text,x:0,width:e.measureText(t.text).width,top:0}];else{let m=c=>e.measureText(c).width,u=ye(t.text,m,{fontSize:a,...t.maxWidth!==void 0?{maxWidth:t.maxWidth}:{}});l=u.lines.map((c,d)=>({text:c.text,x:n==="center"?u.blockWidth/2-c.width/2:n==="right"?u.blockWidth-c.width:0,width:c.width,top:d*u.lineHeight}))}for(let m of l)e.fillText(m.text,m.x,m.top);let s=t.style.textDecoration;if(s?.underline||s?.strikethrough){let m=Math.max(1,a*de);for(let u of l)u.width<=0||(s.underline&&(e.beginPath(),e.rect(u.x,u.top+a*me,u.width,m),e.fill()),s.strikethrough&&(e.beginPath(),e.rect(u.x,u.top+a*ue-m/2,u.width,m),e.fill()))}},ln=(t,e)=>{let n=t.points;if(n.length===0)return;if(t.style.opacity!==void 0&&e.setOpacity(t.style.opacity),t.closed===!0&&t.style.fill!==void 0&&n.length>=3){e.setFill(t.style.fill),e.setStroke(null),e.beginPath();let i=y(n[0]);e.moveTo(i.x,i.y);for(let a=1;a<n.length;a++){let l=y(n[a]);e.lineTo(l.x,l.y)}e.closePath(),e.fill()}let o=oe(t.style);if(e.setFill(o),e.setStroke(null),n.length===1){let i=y(n[0]);e.beginPath(),e.ellipse(i.x,i.y,i.width,i.width),e.fill();return}let r=le(n);if(r.length>=3){e.beginPath();let i=y(r[0]);e.moveTo(i.x,i.y);for(let a=1;a<r.length;a++){let l=y(r[a]);e.lineTo(l.x,l.y)}e.closePath(),e.fill()}},an=(t,e,n)=>{let o=n?.clock?.(t),r=t.animationKind?pe(t,o):t.metadata?.image??pe(t,o),i=t.metadata?.animated===!0||t.animationKind!==void 0;e.drawImage(r,0,0,t.width,t.height,i,t.crop)},Re=()=>{I("rectangle",en),I("ellipse",tn),I("polygon",nn),I("path",on),I("text",sn),I("image",an),I("group",()=>{}),I("frame",un),ae("frame",()=>({top:24})),I("block-arrow",cn),I("brush",ln)},cn=(t,e)=>{let{fill:n,stroke:o}=z(t.style,e),r=t.direction??"right",i=Math.max(he,Math.min(fe,t.headRatio??Ne)),a=Math.max(he,Math.min(fe,t.bodyThickness??Ge)),l=t.width,s=t.height,m=l*i,u=l-m,c=s*a/2,d=s/2,h=[[0,d-c],[u,d-c],[u,0],[l,d],[u,s],[u,d+c],[0,d+c]];r!=="right"&&(h=h.map(([p,R])=>dn([p,R],r,l,s)));let b=h.map(([p,R])=>({x:p,y:R}));if(n&&(e.beginPath(),j(e,b),e.fill()),o){let p=$(t.style),R=p!==0?H.offsetClosedPath(b,p):b;e.beginPath(),j(e,R),e.stroke()}},dn=([t,e],n,o,r)=>{switch(n){case"left":return[o-t,e];case"up":return[e*(o/r),r-t*(r/o)];case"down":return[(r-e)*(o/r),t*(r/o)]}},be="\u2026",mn=(t,e,n)=>{if(e<=0)return"";if(n.measureText(t).width<=e)return t;let o=0,r=t.length;for(;o<r;){let i=Math.ceil((o+r)/2);n.measureText(t.slice(0,i)+be).width<=e?o=i:r=i-1}return o>0?t.slice(0,o)+be:be},un=(t,e,n)=>{e.setFill(t.style.fill??Ue),e.setStroke(null),e.setDashArray(null),e.beginPath(),e.rect(0,0,t.width,t.height),e.fill();let o=(n?.zoom??1)*(t.scale.x||1);e.setFill(null),e.setStroke(ze),e.setStrokeWidth(1/(o||1)),e.setDashArray(null),e.beginPath(),e.rect(0,0,t.width,t.height),e.stroke();let r=t.name??"Frame";e.setFont("system-ui, sans-serif",12);let i=t.width-16,a=e.measureText(r).width<=i,l=a?r:mn(r,i,e),s=a?Math.min(e.measureText(r).width+16,t.width):t.width;e.setFill(Xe),e.beginPath(),e.rect(0,-24,s,24),e.fill(),e.setFill(qe),e.setTextBaseline("middle"),e.setTextAlign("left"),e.fillText(l,8,-24/2)};var M="Roboto",U="PT Serif",X="Roboto Mono",je=t=>{let e=t.toLowerCase();return e.includes("mono")?X:e.includes("sans")?M:e.includes("serif")||e.includes("slab")||e.includes("georgia")||e.includes("times")?U:M},hn=[{family:M,weight:"400",style:"normal",url:new URL("../fonts/Roboto-Regular.woff2",import.meta.url)},{family:M,weight:"700",style:"normal",url:new URL("../fonts/Roboto-Bold.woff2",import.meta.url)},{family:M,weight:"400",style:"italic",url:new URL("../fonts/Roboto-Italic.woff2",import.meta.url)},{family:M,weight:"700",style:"italic",url:new URL("../fonts/Roboto-BoldItalic.woff2",import.meta.url)},{family:U,weight:"400",style:"normal",url:new URL("../fonts/PTSerif-Regular.woff2",import.meta.url)},{family:U,weight:"700",style:"normal",url:new URL("../fonts/PTSerif-Bold.woff2",import.meta.url)},{family:U,weight:"400",style:"italic",url:new URL("../fonts/PTSerif-Italic.woff2",import.meta.url)},{family:U,weight:"700",style:"italic",url:new URL("../fonts/PTSerif-BoldItalic.woff2",import.meta.url)},{family:X,weight:"400",style:"normal",url:new URL("../fonts/RobotoMono-Regular.woff2",import.meta.url)},{family:X,weight:"700",style:"normal",url:new URL("../fonts/RobotoMono-Bold.woff2",import.meta.url)},{family:X,weight:"400",style:"italic",url:new URL("../fonts/RobotoMono-Italic.woff2",import.meta.url)},{family:X,weight:"700",style:"italic",url:new URL("../fonts/RobotoMono-BoldItalic.woff2",import.meta.url)}],$e=async(t=globalThis)=>{let e=t.fonts;!e||typeof FontFace>"u"||await Promise.allSettled(hn.map(async n=>{let o=new FontFace(n.family,`url(${n.url.href})`,{weight:n.weight,style:n.style});await o.load(),e.add(o)}))};var fn=["HTMLImageElement","HTMLCanvasElement","HTMLVideoElement","ImageBitmap","OffscreenCanvas","SVGImageElement","VideoFrame"],Je=t=>{if(typeof t!="object"||t===null)return!1;let e=globalThis;for(let n of fn){let o=e[n];if(typeof o=="function"&&t instanceof o)return!0}return!1},Ze=t=>{let e=t;return typeof e.naturalWidth=="number"&&e.naturalWidth>0?{width:e.naturalWidth,height:e.naturalHeight??e.naturalWidth}:typeof e.videoWidth=="number"&&e.videoWidth>0?{width:e.videoWidth,height:e.videoHeight??e.videoWidth}:typeof e.width=="number"&&e.width>0&&typeof e.height=="number"?{width:e.width,height:e.height}:null},Ye=new Set,Qe=t=>{if(typeof console>"u")return;let e=typeof t=="string"?t.startsWith("blob:")?"dead-blob-url":"string-src":t==null?"empty":"stale-object";Ye.has(e)||(Ye.add(e),console.warn(`[renderer] skipped a non-drawable image source (kind: ${e}). The shape's image handle isn't a live HTMLImageElement / canvas / bitmap \u2014 likely a scene restored from storage where the <img> was lost (metadata.image) and src is a dead blob: URL. The image won't render until rehydrated from Scene.files.`))};var Y=class{ctx;_width;_height;dpr;constructor(e,n,o,r=1){this.ctx=e,this._width=n,this._height=o,this.dpr=r}get size(){return{width:this._width,height:this._height}}resize(e,n,o){this._width=e,this._height=n,o!==void 0&&(this.dpr=o)}setFill(e){this.ctx.fillStyle=e??"transparent"}setStroke(e){this.ctx.strokeStyle=e??"transparent"}setStrokeWidth(e){this.ctx.lineWidth=e}setOpacity(e){this.ctx.globalAlpha=e}setLineCap(e){this.ctx.lineCap=e}setLineJoin(e){this.ctx.lineJoin=e}setDashArray(e){this.ctx.setLineDash(e?[...e]:[])}setFont(e,n,o){let r=o?.style==="italic"?"italic ":"",i=o?.weight==="bold"?"bold ":"";this.ctx.font=`${r}${i}${n}px "${je(e)}", ${e}`}setTextAlign(e){this.ctx.textAlign=e==="center"?"center":e}setTextBaseline(e){this.ctx.textBaseline=e==="middle"?"middle":e==="top"?"top":"bottom"}save(){this.ctx.save()}restore(){this.ctx.restore()}translate(e,n){this.ctx.translate(e,n)}rotate(e){this.ctx.rotate(e)}scale(e,n){this.ctx.scale(e,n)}setTransform(e){let n=this.dpr;this.ctx.setTransform(n*e.a,n*e.b,n*e.c,n*e.d,n*e.e,n*e.f)}resetTransform(){this.ctx.setTransform(this.dpr,0,0,this.dpr,0,0)}beginPath(){this.ctx.beginPath()}closePath(){this.ctx.closePath()}moveTo(e,n){this.ctx.moveTo(e,n)}lineTo(e,n){this.ctx.lineTo(e,n)}quadraticCurveTo(e,n,o,r){this.ctx.quadraticCurveTo(e,n,o,r)}bezierCurveTo(e,n,o,r,i,a){this.ctx.bezierCurveTo(e,n,o,r,i,a)}rect(e,n,o,r){this.ctx.rect(e,n,o,r)}ellipse(e,n,o,r){this.ctx.ellipse(e,n,o,r,0,0,Math.PI*2)}fill(e){this.ctx.fill(e)}stroke(){this.ctx.stroke()}fillText(e,n,o,r){r!==void 0?this.ctx.fillText(e,n,o,r):this.ctx.fillText(e,n,o)}measureText(e){return{width:this.ctx.measureText(e).width}}drawImage(e,n,o,r,i,a,l){if(!Je(e)){Qe(e);return}if(l&&(l.x!==0||l.y!==0||l.width!==1||l.height!==1)){let s=Ze(e);if(s){this.ctx.drawImage(e,l.x*s.width,l.y*s.height,l.width*s.width,l.height*s.height,n,o,r,i);return}}this.ctx.drawImage(e,n,o,r,i)}clear(e){this.dirtyRect=null,e?this.ctx.clearRect(e.x,e.y,e.width,e.height):(this.ctx.save(),this.ctx.setTransform(1,0,0,1,0,0),this.ctx.clearRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height),this.ctx.restore())}dirtyRect=null;markDirty(e){if(!this.dirtyRect){this.dirtyRect=e;return}let n=Math.min(this.dirtyRect.x,e.x),o=Math.min(this.dirtyRect.y,e.y),r=Math.max(this.dirtyRect.x+this.dirtyRect.width,e.x+e.width),i=Math.max(this.dirtyRect.y+this.dirtyRect.height,e.y+e.height);this.dirtyRect={x:n,y:o,width:r-n,height:i-o}}getDirtyRect(){return this.dirtyRect}};var yn=new Float64Array(1),Lr=new Int32Array(yn.buffer);var et=(t,e,n=new C(64))=>{for(let o of e)switch(o.k){case"setFill":t.setFill(o.color);break;case"setStroke":t.setStroke(o.color);break;case"setStrokeWidth":t.setStrokeWidth(o.w);break;case"setOpacity":t.setOpacity(o.a);break;case"setLineCap":t.setLineCap(o.cap);break;case"setLineJoin":t.setLineJoin(o.join);break;case"setDashArray":t.setDashArray(o.dash);break;case"setFont":t.setFont(o.family,o.size,o.options);break;case"setTextAlign":t.setTextAlign(o.align);break;case"setTextBaseline":t.setTextBaseline(o.baseline);break;case"save":t.save();break;case"restore":t.restore();break;case"translate":t.translate(o.x,o.y);break;case"rotate":t.rotate(o.r);break;case"scale":t.scale(o.sx,o.sy);break;case"setTransform":t.setTransform(o.t);break;case"resetTransform":t.resetTransform();break;case"beginPath":t.beginPath();break;case"closePath":t.closePath();break;case"moveTo":t.moveTo(o.x,o.y);break;case"lineTo":t.lineTo(o.x,o.y);break;case"quadraticCurveTo":t.quadraticCurveTo(o.cx,o.cy,o.x,o.y);break;case"bezierCurveTo":t.bezierCurveTo(o.c1x,o.c1y,o.c2x,o.c2y,o.x,o.y);break;case"rect":t.rect(o.x,o.y,o.w,o.h);break;case"ellipse":t.ellipse(o.cx,o.cy,o.rx,o.ry);break;case"fill":o.rule!==void 0?t.fill(o.rule):t.fill();break;case"stroke":t.stroke();break;case"fillText":o.maxWidth!==void 0?t.fillText(o.text,o.x,o.y,o.maxWidth):t.fillText(o.text,o.x,o.y);break;case"clear":o.bounds!==void 0?t.clear(o.bounds):t.clear();break;case"markDirty":t.markDirty?.(o.bounds);break;case"resize":break;case"defineImage":n.set(o.id,o.bitmap);break;case"drawImage":{let r=n.get(o.id);r&&t.drawImage(r,o.dx,o.dy,o.dw,o.dh);break}}};var g={canvas:null,target:null,dpr:1,images:new C(64,(t,e)=>{e.close()})},tt=!1,pn=()=>{tt||(Re(),tt=!0)},O=(t,e)=>{e&&e.length>0?self.postMessage(t,e):self.postMessage(t)},gn=(t,e,n,o)=>{$e(self),g.canvas=t,g.dpr=o,t.width=Math.max(1,Math.round(e*o)),t.height=Math.max(1,Math.round(n*o));let r=t.getContext("2d");if(!r)throw new Error("OffscreenCanvas 2D context unavailable");r.setTransform(o,0,0,o,0,0),g.target=new Y(r,e,n,o),O({type:"ready"})},bn=(t,e)=>{if(!g.canvas||!g.target)return;g.canvas.width=Math.max(1,Math.round(t*g.dpr)),g.canvas.height=Math.max(1,Math.round(e*g.dpr));let n=g.canvas.getContext("2d");n&&(n.setTransform(g.dpr,0,0,g.dpr,0,0),g.target.resize(t,e,g.dpr))},Rn=t=>{if(!g.canvas||!g.target){O({type:"error",message:"Worker not initialised"});return}pn();let e=g.canvas.getContext("2d");if(e===null){O({type:"error",message:"Worker not initialised"});return}e.save(),e.setTransform(g.dpr,0,0,g.dpr,0,0),e.clearRect(0,0,g.target.size.width,g.target.size.height),xe(t,g.target),e.restore();let n=g.canvas.transferToImageBitmap();O({type:"frame-done",bitmap:n},[n])},wn=t=>{if(!g.target){O({type:"error",message:"Worker not initialised"});return}et(g.target,t,g.images)};self.addEventListener("message",t=>{let e=t.data;try{switch(e.type){case"init":gn(e.canvas,e.width,e.height,e.dpr);break;case"resize":bn(e.width,e.height);break;case"snapshot":Rn(e.scene);break;case"replay":wn(e.commands);break;case"frame":O({type:"error",message:"patch-stream frames not implemented"});break}}catch(n){O({type:"error",message:n instanceof Error?n.message:String(n)})}});
5
5
  //# sourceMappingURL=render-worker.js.map