@feliperohdee/satori 0.0.13 → 0.0.15

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 +1 @@
1
- {"version":3,"sources":["../src/vendor/yoga-wasm-esm.js","../node_modules/yoga-layout/src/generated/YGEnums.ts","../node_modules/yoga-layout/src/wrapAssembly.ts","../node_modules/yoga-layout/src/load.ts","../src/yoga.external.ts","../src/utils.ts","../src/vendor/parse-css-dimension/index.js","../src/yoga.ts","../src/handler/image.ts","../src/handler/preprocess.ts","../src/handler/presets.ts","../src/handler/inheritable.ts","../src/handler/expand.ts","../src/transform-origin.ts","../src/parser/mask.ts","../src/handler/variables.ts","../src/handler/compute.ts","../src/builder/text.ts","../src/builder/transform.ts","../src/builder/shadow.ts","../src/builder/text-decoration.ts","../src/text/characters.ts","../src/text/measurer.ts","../src/text/processor.ts","../src/text/index.ts","../src/builder/gradient/linear.ts","../src/builder/gradient/utils.ts","../src/builder/gradient/radial.ts","../src/builder/background-image.ts","../src/builder/border-radius.ts","../src/builder/border.ts","../src/builder/content-mask.ts","../src/parser/shape.ts","../src/builder/clip-path.ts","../src/builder/overflow.ts","../src/builder/mask-image.ts","../src/builder/rect.ts","../src/builder/backdrop-filter.ts","../node_modules/emoji-regex-xs/index.mjs","../src/language.ts","../src/layout.ts","../src/font.ts","../src/builder/svg.ts","../src/satori.ts"],"sourcesContent":["let _scriptDir = ''\n\nexport default function (loadYoga) {\nloadYoga = loadYoga || {};\n\nvar h;h||(h=typeof loadYoga !== 'undefined' ? loadYoga : {});var aa,ca;h.ready=new Promise(function(a,b){aa=a;ca=b});var da=Object.assign({},h),q=\"\";\"undefined\"!=typeof document&&document.currentScript&&(q=document.currentScript.src);_scriptDir&&(q=_scriptDir);0!==q.indexOf(\"blob:\")?q=q.substr(0,q.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):q=\"\";var ea=h.print||console.log.bind(console),v=h.printErr||console.warn.bind(console);Object.assign(h,da);da=null;var w;h.wasmBinary&&(w=h.wasmBinary);\nvar noExitRuntime=h.noExitRuntime||!0;\"object\"!=typeof WebAssembly&&x(\"no native wasm support detected\");var fa,ha=!1;function z(a,b,c){c=b+c;for(var d=\"\";!(b>=c);){var e=a[b++];if(!e)break;if(e&128){var f=a[b++]&63;if(192==(e&224))d+=String.fromCharCode((e&31)<<6|f);else{var g=a[b++]&63;e=224==(e&240)?(e&15)<<12|f<<6|g:(e&7)<<18|f<<12|g<<6|a[b++]&63;65536>e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}\nvar ia,ja,A,C,ka,D,E,la,ma;function na(){var a=fa.buffer;ia=a;h.HEAP8=ja=new Int8Array(a);h.HEAP16=C=new Int16Array(a);h.HEAP32=D=new Int32Array(a);h.HEAPU8=A=new Uint8Array(a);h.HEAPU16=ka=new Uint16Array(a);h.HEAPU32=E=new Uint32Array(a);h.HEAPF32=la=new Float32Array(a);h.HEAPF64=ma=new Float64Array(a)}var oa,pa=[],qa=[],ra=[];function sa(){var a=h.preRun.shift();pa.unshift(a)}var F=0,ta=null,G=null;\nfunction x(a){if(h.onAbort)h.onAbort(a);a=\"Aborted(\"+a+\")\";v(a);ha=!0;a=new WebAssembly.RuntimeError(a+\". Build with -sASSERTIONS for more info.\");ca(a);throw a;}function ua(a){return a.startsWith(\"data:application/octet-stream;base64,\")}var H='';if(!ua(H)){var va=H;H=h.locateFile?h.locateFile(va,q):q+va}\nfunction wa(){var a=H;try{if(a==H&&w)return new Uint8Array(w);if(ua(a))try{var b=xa(a.slice(37)),c=new Uint8Array(b.length);for(a=0;a<b.length;++a)c[a]=b.charCodeAt(a);var d=c}catch(f){throw Error(\"Converting base64 string to bytes failed.\");}else d=void 0;var e=d;if(e)return e;throw\"both async and sync fetching of the wasm failed\";}catch(f){x(f)}}\nfunction ya(){return w||\"function\"!=typeof fetch?Promise.resolve().then(function(){return wa()}):fetch(H,{credentials:\"same-origin\"}).then(function(a){if(!a.ok)throw\"failed to load wasm binary file at '\"+H+\"'\";return a.arrayBuffer()}).catch(function(){return wa()})}function za(a){for(;0<a.length;)a.shift()(h)}function Aa(a){if(void 0===a)return\"_unknown\";a=a.replace(/[^a-zA-Z0-9_]/g,\"$\");var b=a.charCodeAt(0);return 48<=b&&57>=b?\"_\"+a:a}\nfunction Ba(a,b){a=Aa(a);return function(){return b.apply(this,arguments)}}var J=[{},{value:void 0},{value:null},{value:!0},{value:!1}],Ca=[];function Da(a){var b=Error,c=Ba(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+\"\\n\"+d.replace(/^Error(:[^\\n]*)?\\n/,\"\"))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+\": \"+this.message};return c}var K=void 0;\nfunction L(a){throw new K(a);}var M=a=>{a||L(\"Cannot use deleted val. handle = \"+a);return J[a].value},Ea=a=>{switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=Ca.length?Ca.pop():J.length;J[b]={ga:1,value:a};return b}},Fa=void 0,Ga=void 0;function N(a){for(var b=\"\";A[a];)b+=Ga[A[a++]];return b}var O=[];function Ha(){for(;O.length;){var a=O.pop();a.M.$=!1;a[\"delete\"]()}}var P=void 0,Q={};\nfunction Ia(a,b){for(void 0===b&&L(\"ptr should not be undefined\");a.R;)b=a.ba(b),a=a.R;return b}var R={};function Ja(a){a=Ka(a);var b=N(a);S(a);return b}function La(a,b){var c=R[a];void 0===c&&L(b+\" has unknown type \"+Ja(a));return c}function Ma(){}var Na=!1;function Oa(a){--a.count.value;0===a.count.value&&(a.T?a.U.W(a.T):a.P.N.W(a.O))}function Pa(a,b,c){if(b===c)return a;if(void 0===c.R)return null;a=Pa(a,b,c.R);return null===a?null:c.na(a)}var Qa={};function Ra(a,b){b=Ia(a,b);return Q[b]}\nvar Sa=void 0;function Ta(a){throw new Sa(a);}function Ua(a,b){b.P&&b.O||Ta(\"makeClassHandle requires ptr and ptrType\");!!b.U!==!!b.T&&Ta(\"Both smartPtrType and smartPtr must be specified\");b.count={value:1};return T(Object.create(a,{M:{value:b}}))}function T(a){if(\"undefined\"===typeof FinalizationRegistry)return T=b=>b,a;Na=new FinalizationRegistry(b=>{Oa(b.M)});T=b=>{var c=b.M;c.T&&Na.register(b,{M:c},b);return b};Ma=b=>{Na.unregister(b)};return T(a)}var Va={};\nfunction Wa(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function Xa(a){return this.fromWireType(D[a>>2])}var U={},Ya={};function V(a,b,c){function d(k){k=c(k);k.length!==a.length&&Ta(\"Mismatched type converter count\");for(var m=0;m<a.length;++m)W(a[m],k[m])}a.forEach(function(k){Ya[k]=b});var e=Array(b.length),f=[],g=0;b.forEach((k,m)=>{R.hasOwnProperty(k)?e[m]=R[k]:(f.push(k),U.hasOwnProperty(k)||(U[k]=[]),U[k].push(()=>{e[m]=R[k];++g;g===f.length&&d(e)}))});0===f.length&&d(e)}\nfunction Za(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError(\"Unknown type size: \"+a);}}\nfunction W(a,b,c={}){if(!(\"argPackAdvance\"in b))throw new TypeError(\"registerType registeredInstance requires argPackAdvance\");var d=b.name;a||L('type \"'+d+'\" must have a positive integer typeid pointer');if(R.hasOwnProperty(a)){if(c.ua)return;L(\"Cannot register type '\"+d+\"' twice\")}R[a]=b;delete Ya[a];U.hasOwnProperty(a)&&(b=U[a],delete U[a],b.forEach(e=>e()))}function $a(a){L(a.M.P.N.name+\" instance already deleted\")}function X(){}\nfunction ab(a,b,c){if(void 0===a[b].S){var d=a[b];a[b]=function(){a[b].S.hasOwnProperty(arguments.length)||L(\"Function '\"+c+\"' called with an invalid number of arguments (\"+arguments.length+\") - expects one of (\"+a[b].S+\")!\");return a[b].S[arguments.length].apply(this,arguments)};a[b].S=[];a[b].S[d.Z]=d}}\nfunction bb(a,b){h.hasOwnProperty(a)?(L(\"Cannot register public name '\"+a+\"' twice\"),ab(h,a,a),h.hasOwnProperty(void 0)&&L(\"Cannot register multiple overloads of a function with the same number of arguments (undefined)!\"),h[a].S[void 0]=b):h[a]=b}function cb(a,b,c,d,e,f,g,k){this.name=a;this.constructor=b;this.X=c;this.W=d;this.R=e;this.pa=f;this.ba=g;this.na=k;this.ja=[]}\nfunction db(a,b,c){for(;b!==c;)b.ba||L(\"Expected null or instance of \"+c.name+\", got an instance of \"+b.name),a=b.ba(a),b=b.R;return a}function eb(a,b){if(null===b)return this.ea&&L(\"null is not a valid \"+this.name),0;b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);return db(b.M.O,b.M.P.N,this.N)}\nfunction gb(a,b){if(null===b){this.ea&&L(\"null is not a valid \"+this.name);if(this.da){var c=this.fa();null!==a&&a.push(this.W,c);return c}return 0}b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);!this.ca&&b.M.P.ca&&L(\"Cannot convert argument of type \"+(b.M.U?b.M.U.name:b.M.P.name)+\" to parameter type \"+this.name);c=db(b.M.O,b.M.P.N,this.N);if(this.da)switch(void 0===b.M.T&&L(\"Passing raw pointer to smart pointer is illegal\"),\nthis.Ba){case 0:b.M.U===this?c=b.M.T:L(\"Cannot convert argument of type \"+(b.M.U?b.M.U.name:b.M.P.name)+\" to parameter type \"+this.name);break;case 1:c=b.M.T;break;case 2:if(b.M.U===this)c=b.M.T;else{var d=b.clone();c=this.xa(c,Ea(function(){d[\"delete\"]()}));null!==a&&a.push(this.W,c)}break;default:L(\"Unsupporting sharing policy\")}return c}\nfunction hb(a,b){if(null===b)return this.ea&&L(\"null is not a valid \"+this.name),0;b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);b.M.P.ca&&L(\"Cannot convert argument of type \"+b.M.P.name+\" to parameter type \"+this.name);return db(b.M.O,b.M.P.N,this.N)}\nfunction Y(a,b,c,d){this.name=a;this.N=b;this.ea=c;this.ca=d;this.da=!1;this.W=this.xa=this.fa=this.ka=this.Ba=this.wa=void 0;void 0!==b.R?this.toWireType=gb:(this.toWireType=d?eb:hb,this.V=null)}function ib(a,b){h.hasOwnProperty(a)||Ta(\"Replacing nonexistant public symbol\");h[a]=b;h[a].Z=void 0}\nfunction jb(a,b){var c=[];return function(){c.length=0;Object.assign(c,arguments);if(a.includes(\"j\")){var d=h[\"dynCall_\"+a];d=c&&c.length?d.apply(null,[b].concat(c)):d.call(null,b)}else d=oa.get(b).apply(null,c);return d}}function Z(a,b){a=N(a);var c=a.includes(\"j\")?jb(a,b):oa.get(b);\"function\"!=typeof c&&L(\"unknown function pointer with signature \"+a+\": \"+b);return c}var mb=void 0;\nfunction nb(a,b){function c(f){e[f]||R[f]||(Ya[f]?Ya[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new mb(a+\": \"+d.map(Ja).join([\", \"]));}\nfunction ob(a,b,c,d,e){var f=b.length;2>f&&L(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");var g=null!==b[1]&&null!==c,k=!1;for(c=1;c<b.length;++c)if(null!==b[c]&&void 0===b[c].V){k=!0;break}var m=\"void\"!==b[0].name,l=f-2,n=Array(l),p=[],r=[];return function(){arguments.length!==l&&L(\"function \"+a+\" called with \"+arguments.length+\" arguments, expected \"+l+\" args!\");r.length=0;p.length=g?2:1;p[0]=e;if(g){var u=b[1].toWireType(r,this);p[1]=u}for(var t=0;t<l;++t)n[t]=\nb[t+2].toWireType(r,arguments[t]),p.push(n[t]);t=d.apply(null,p);if(k)Wa(r);else for(var y=g?1:2;y<b.length;y++){var B=1===y?u:n[y-2];null!==b[y].V&&b[y].V(B)}u=m?b[0].fromWireType(t):void 0;return u}}function pb(a,b){for(var c=[],d=0;d<a;d++)c.push(E[b+4*d>>2]);return c}function qb(a){4<a&&0===--J[a].ga&&(J[a]=void 0,Ca.push(a))}function fb(a){if(null===a)return\"null\";var b=typeof a;return\"object\"===b||\"array\"===b||\"function\"===b?a.toString():\"\"+a}\nfunction rb(a,b){switch(b){case 2:return function(c){return this.fromWireType(la[c>>2])};case 3:return function(c){return this.fromWireType(ma[c>>3])};default:throw new TypeError(\"Unknown float type: \"+a);}}\nfunction sb(a,b,c){switch(b){case 0:return c?function(d){return ja[d]}:function(d){return A[d]};case 1:return c?function(d){return C[d>>1]}:function(d){return ka[d>>1]};case 2:return c?function(d){return D[d>>2]}:function(d){return E[d>>2]};default:throw new TypeError(\"Unknown integer type: \"+a);}}function tb(a,b){for(var c=\"\",d=0;!(d>=b/2);++d){var e=C[a+2*d>>1];if(0==e)break;c+=String.fromCharCode(e)}return c}\nfunction ub(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e<c;++e)C[b>>1]=a.charCodeAt(e),b+=2;C[b>>1]=0;return b-d}function vb(a){return 2*a.length}function wb(a,b){for(var c=0,d=\"\";!(c>=b/4);){var e=D[a+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d}\nfunction xb(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e<a.length;++e){var f=a.charCodeAt(e);if(55296<=f&&57343>=f){var g=a.charCodeAt(++e);f=65536+((f&1023)<<10)|g&1023}D[b>>2]=f;b+=4;if(b+4>c)break}D[b>>2]=0;return b-d}function yb(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}var zb={};function Ab(a){var b=zb[a];return void 0===b?N(a):b}var Bb=[];function Cb(a){var b=Bb.length;Bb.push(a);return b}\nfunction Db(a,b){for(var c=Array(a),d=0;d<a;++d)c[d]=La(E[b+4*d>>2],\"parameter \"+d);return c}var Eb=[],Fb=[null,[],[]];K=h.BindingError=Da(\"BindingError\");h.count_emval_handles=function(){for(var a=0,b=5;b<J.length;++b)void 0!==J[b]&&++a;return a};h.get_first_emval=function(){for(var a=5;a<J.length;++a)if(void 0!==J[a])return J[a];return null};Fa=h.PureVirtualError=Da(\"PureVirtualError\");for(var Gb=Array(256),Hb=0;256>Hb;++Hb)Gb[Hb]=String.fromCharCode(Hb);Ga=Gb;h.getInheritedInstanceCount=function(){return Object.keys(Q).length};\nh.getLiveInheritedInstances=function(){var a=[],b;for(b in Q)Q.hasOwnProperty(b)&&a.push(Q[b]);return a};h.flushPendingDeletes=Ha;h.setDelayFunction=function(a){P=a;O.length&&P&&P(Ha)};Sa=h.InternalError=Da(\"InternalError\");X.prototype.isAliasOf=function(a){if(!(this instanceof X&&a instanceof X))return!1;var b=this.M.P.N,c=this.M.O,d=a.M.P.N;for(a=a.M.O;b.R;)c=b.ba(c),b=b.R;for(;d.R;)a=d.ba(a),d=d.R;return b===d&&c===a};\nX.prototype.clone=function(){this.M.O||$a(this);if(this.M.aa)return this.M.count.value+=1,this;var a=T,b=Object,c=b.create,d=Object.getPrototypeOf(this),e=this.M;a=a(c.call(b,d,{M:{value:{count:e.count,$:e.$,aa:e.aa,O:e.O,P:e.P,T:e.T,U:e.U}}}));a.M.count.value+=1;a.M.$=!1;return a};X.prototype[\"delete\"]=function(){this.M.O||$a(this);this.M.$&&!this.M.aa&&L(\"Object already scheduled for deletion\");Ma(this);Oa(this.M);this.M.aa||(this.M.T=void 0,this.M.O=void 0)};X.prototype.isDeleted=function(){return!this.M.O};\nX.prototype.deleteLater=function(){this.M.O||$a(this);this.M.$&&!this.M.aa&&L(\"Object already scheduled for deletion\");O.push(this);1===O.length&&P&&P(Ha);this.M.$=!0;return this};Y.prototype.qa=function(a){this.ka&&(a=this.ka(a));return a};Y.prototype.ha=function(a){this.W&&this.W(a)};Y.prototype.argPackAdvance=8;Y.prototype.readValueFromPointer=Xa;Y.prototype.deleteObject=function(a){if(null!==a)a[\"delete\"]()};\nY.prototype.fromWireType=function(a){function b(){return this.da?Ua(this.N.X,{P:this.wa,O:c,U:this,T:a}):Ua(this.N.X,{P:this,O:a})}var c=this.qa(a);if(!c)return this.ha(a),null;var d=Ra(this.N,c);if(void 0!==d){if(0===d.M.count.value)return d.M.O=c,d.M.T=a,d.clone();d=d.clone();this.ha(a);return d}d=this.N.pa(c);d=Qa[d];if(!d)return b.call(this);d=this.ca?d.la:d.pointerType;var e=Pa(c,this.N,d.N);return null===e?b.call(this):this.da?Ua(d.N.X,{P:d,O:e,U:this,T:a}):Ua(d.N.X,{P:d,O:e})};\nmb=h.UnboundTypeError=Da(\"UnboundTypeError\");\nvar xa=\"function\"==typeof atob?atob:function(a){var b=\"\",c=0;a=a.replace(/[^A-Za-z0-9\\+\\/=]/g,\"\");do{var d=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var e=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var f=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var g=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));d=d<<2|e>>4;\ne=(e&15)<<4|f>>2;var k=(f&3)<<6|g;b+=String.fromCharCode(d);64!==f&&(b+=String.fromCharCode(e));64!==g&&(b+=String.fromCharCode(k))}while(c<a.length);return b},Jb={l:function(a,b,c,d){x(\"Assertion failed: \"+(a?z(A,a):\"\")+\", at: \"+[b?b?z(A,b):\"\":\"unknown filename\",c,d?d?z(A,d):\"\":\"unknown function\"])},q:function(a,b,c){a=N(a);b=La(b,\"wrapper\");c=M(c);var d=[].slice,e=b.N,f=e.X,g=e.R.X,k=e.R.constructor;a=Ba(a,function(){e.R.ja.forEach(function(l){if(this[l]===g[l])throw new Fa(\"Pure virtual function \"+\nl+\" must be implemented in JavaScript\");}.bind(this));Object.defineProperty(this,\"__parent\",{value:f});this.__construct.apply(this,d.call(arguments))});f.__construct=function(){this===f&&L(\"Pass correct 'this' to __construct\");var l=k.implement.apply(void 0,[this].concat(d.call(arguments)));Ma(l);var n=l.M;l.notifyOnDestruction();n.aa=!0;Object.defineProperties(this,{M:{value:n}});T(this);l=n.O;l=Ia(e,l);Q.hasOwnProperty(l)?L(\"Tried to register registered instance: \"+l):Q[l]=this};f.__destruct=function(){this===\nf&&L(\"Pass correct 'this' to __destruct\");Ma(this);var l=this.M.O;l=Ia(e,l);Q.hasOwnProperty(l)?delete Q[l]:L(\"Tried to unregister unregistered instance: \"+l)};a.prototype=Object.create(f);for(var m in c)a.prototype[m]=c[m];return Ea(a)},j:function(a){var b=Va[a];delete Va[a];var c=b.fa,d=b.W,e=b.ia,f=e.map(g=>g.ta).concat(e.map(g=>g.za));V([a],f,g=>{var k={};e.forEach((m,l)=>{var n=g[l],p=m.ra,r=m.sa,u=g[l+e.length],t=m.ya,y=m.Aa;k[m.oa]={read:B=>n.fromWireType(p(r,B)),write:(B,ba)=>{var I=[];t(y,\nB,u.toWireType(I,ba));Wa(I)}}});return[{name:b.name,fromWireType:function(m){var l={},n;for(n in k)l[n]=k[n].read(m);d(m);return l},toWireType:function(m,l){for(var n in k)if(!(n in l))throw new TypeError('Missing field: \"'+n+'\"');var p=c();for(n in k)k[n].write(p,l[n]);null!==m&&m.push(d,p);return p},argPackAdvance:8,readValueFromPointer:Xa,V:d}]})},v:function(){},B:function(a,b,c,d,e){var f=Za(c);b=N(b);W(a,{name:b,fromWireType:function(g){return!!g},toWireType:function(g,k){return k?d:e},argPackAdvance:8,\nreadValueFromPointer:function(g){if(1===c)var k=ja;else if(2===c)k=C;else if(4===c)k=D;else throw new TypeError(\"Unknown boolean type size: \"+b);return this.fromWireType(k[g>>f])},V:null})},f:function(a,b,c,d,e,f,g,k,m,l,n,p,r){n=N(n);f=Z(e,f);k&&(k=Z(g,k));l&&(l=Z(m,l));r=Z(p,r);var u=Aa(n);bb(u,function(){nb(\"Cannot construct \"+n+\" due to unbound types\",[d])});V([a,b,c],d?[d]:[],function(t){t=t[0];if(d){var y=t.N;var B=y.X}else B=X.prototype;t=Ba(u,function(){if(Object.getPrototypeOf(this)!==ba)throw new K(\"Use 'new' to construct \"+\nn);if(void 0===I.Y)throw new K(n+\" has no accessible constructor\");var kb=I.Y[arguments.length];if(void 0===kb)throw new K(\"Tried to invoke ctor of \"+n+\" with invalid number of parameters (\"+arguments.length+\") - expected (\"+Object.keys(I.Y).toString()+\") parameters instead!\");return kb.apply(this,arguments)});var ba=Object.create(B,{constructor:{value:t}});t.prototype=ba;var I=new cb(n,t,ba,r,y,f,k,l);y=new Y(n,I,!0,!1);B=new Y(n+\"*\",I,!1,!1);var lb=new Y(n+\" const*\",I,!1,!0);Qa[a]={pointerType:B,\nla:lb};ib(u,t);return[y,B,lb]})},d:function(a,b,c,d,e,f,g){var k=pb(c,d);b=N(b);f=Z(e,f);V([],[a],function(m){function l(){nb(\"Cannot call \"+n+\" due to unbound types\",k)}m=m[0];var n=m.name+\".\"+b;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);var p=m.N.constructor;void 0===p[b]?(l.Z=c-1,p[b]=l):(ab(p,b,n),p[b].S[c-1]=l);V([],k,function(r){r=ob(n,[r[0],null].concat(r.slice(1)),null,f,g);void 0===p[b].S?(r.Z=c-1,p[b]=r):p[b].S[c-1]=r;return[]});return[]})},p:function(a,b,c,d,e,f){0<b||x();var g=pb(b,\nc);e=Z(d,e);V([],[a],function(k){k=k[0];var m=\"constructor \"+k.name;void 0===k.N.Y&&(k.N.Y=[]);if(void 0!==k.N.Y[b-1])throw new K(\"Cannot register multiple constructors with identical number of parameters (\"+(b-1)+\") for class '\"+k.name+\"'! Overload resolution is currently only performed using the parameter count, not actual type info!\");k.N.Y[b-1]=()=>{nb(\"Cannot construct \"+k.name+\" due to unbound types\",g)};V([],g,function(l){l.splice(1,0,null);k.N.Y[b-1]=ob(m,l,null,e,f);return[]});return[]})},\na:function(a,b,c,d,e,f,g,k){var m=pb(c,d);b=N(b);f=Z(e,f);V([],[a],function(l){function n(){nb(\"Cannot call \"+p+\" due to unbound types\",m)}l=l[0];var p=l.name+\".\"+b;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);k&&l.N.ja.push(b);var r=l.N.X,u=r[b];void 0===u||void 0===u.S&&u.className!==l.name&&u.Z===c-2?(n.Z=c-2,n.className=l.name,r[b]=n):(ab(r,b,p),r[b].S[c-2]=n);V([],m,function(t){t=ob(p,t,l,f,g);void 0===r[b].S?(t.Z=c-2,r[b]=t):r[b].S[c-2]=t;return[]});return[]})},A:function(a,b){b=N(b);W(a,\n{name:b,fromWireType:function(c){var d=M(c);qb(c);return d},toWireType:function(c,d){return Ea(d)},argPackAdvance:8,readValueFromPointer:Xa,V:null})},n:function(a,b,c){c=Za(c);b=N(b);W(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,e){return e},argPackAdvance:8,readValueFromPointer:rb(b,c),V:null})},e:function(a,b,c,d,e){b=N(b);-1===e&&(e=4294967295);e=Za(c);var f=k=>k;if(0===d){var g=32-8*c;f=k=>k<<g>>>g}c=b.includes(\"unsigned\")?function(k,m){return m>>>0}:function(k,m){return m};\nW(a,{name:b,fromWireType:f,toWireType:c,argPackAdvance:8,readValueFromPointer:sb(b,e,0!==d),V:null})},b:function(a,b,c){function d(f){f>>=2;var g=E;return new e(ia,g[f+1],g[f])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=N(c);W(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{ua:!0})},o:function(a,b){b=N(b);var c=\"std::string\"===b;W(a,{name:b,fromWireType:function(d){var e=E[d>>2],f=d+4;if(c)for(var g=f,k=0;k<=e;++k){var m=\nf+k;if(k==e||0==A[m]){g=g?z(A,g,m-g):\"\";if(void 0===l)var l=g;else l+=String.fromCharCode(0),l+=g;g=m+1}}else{l=Array(e);for(k=0;k<e;++k)l[k]=String.fromCharCode(A[f+k]);l=l.join(\"\")}S(d);return l},toWireType:function(d,e){e instanceof ArrayBuffer&&(e=new Uint8Array(e));var f,g=\"string\"==typeof e;g||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Int8Array||L(\"Cannot pass non-string to std::string\");if(c&&g){var k=0;for(f=0;f<e.length;++f){var m=e.charCodeAt(f);127>=m?k++:2047>=\nm?k+=2:55296<=m&&57343>=m?(k+=4,++f):k+=3}f=k}else f=e.length;k=Ib(4+f+1);m=k+4;E[k>>2]=f;if(c&&g){if(g=m,m=f+1,f=A,0<m){m=g+m-1;for(var l=0;l<e.length;++l){var n=e.charCodeAt(l);if(55296<=n&&57343>=n){var p=e.charCodeAt(++l);n=65536+((n&1023)<<10)|p&1023}if(127>=n){if(g>=m)break;f[g++]=n}else{if(2047>=n){if(g+1>=m)break;f[g++]=192|n>>6}else{if(65535>=n){if(g+2>=m)break;f[g++]=224|n>>12}else{if(g+3>=m)break;f[g++]=240|n>>18;f[g++]=128|n>>12&63}f[g++]=128|n>>6&63}f[g++]=128|n&63}}f[g]=0}}else if(g)for(g=\n0;g<f;++g)l=e.charCodeAt(g),255<l&&(S(m),L(\"String has UTF-16 code units that do not fit in 8 bits\")),A[m+g]=l;else for(g=0;g<f;++g)A[m+g]=e[g];null!==d&&d.push(S,k);return k},argPackAdvance:8,readValueFromPointer:Xa,V:function(d){S(d)}})},i:function(a,b,c){c=N(c);if(2===b){var d=tb;var e=ub;var f=vb;var g=()=>ka;var k=1}else 4===b&&(d=wb,e=xb,f=yb,g=()=>E,k=2);W(a,{name:c,fromWireType:function(m){for(var l=E[m>>2],n=g(),p,r=m+4,u=0;u<=l;++u){var t=m+4+u*b;if(u==l||0==n[t>>k])r=d(r,t-r),void 0===\np?p=r:(p+=String.fromCharCode(0),p+=r),r=t+b}S(m);return p},toWireType:function(m,l){\"string\"!=typeof l&&L(\"Cannot pass non-string to C++ string type \"+c);var n=f(l),p=Ib(4+n+b);E[p>>2]=n>>k;e(l,p+4,n+b);null!==m&&m.push(S,p);return p},argPackAdvance:8,readValueFromPointer:Xa,V:function(m){S(m)}})},k:function(a,b,c,d,e,f){Va[a]={name:N(b),fa:Z(c,d),W:Z(e,f),ia:[]}},h:function(a,b,c,d,e,f,g,k,m,l){Va[a].ia.push({oa:N(b),ta:c,ra:Z(d,e),sa:f,za:g,ya:Z(k,m),Aa:l})},C:function(a,b){b=N(b);W(a,{va:!0,name:b,\nargPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},s:function(a,b,c,d,e){a=Bb[a];b=M(b);c=Ab(c);var f=[];E[d>>2]=Ea(f);return a(b,c,f,e)},t:function(a,b,c,d){a=Bb[a];b=M(b);c=Ab(c);a(b,c,null,d)},g:qb,m:function(a,b){var c=Db(a,b),d=c[0];b=d.name+\"_$\"+c.slice(1).map(function(g){return g.name}).join(\"_\")+\"$\";var e=Eb[b];if(void 0!==e)return e;var f=Array(a-1);e=Cb((g,k,m,l)=>{for(var n=0,p=0;p<a-1;++p)f[p]=c[p+1].readValueFromPointer(l+n),n+=c[p+1].argPackAdvance;g=g[k].apply(g,\nf);for(p=0;p<a-1;++p)c[p+1].ma&&c[p+1].ma(f[p]);if(!d.va)return d.toWireType(m,g)});return Eb[b]=e},D:function(a){4<a&&(J[a].ga+=1)},r:function(a){var b=M(a);Wa(b);qb(a)},c:function(){x(\"\")},x:function(a,b,c){A.copyWithin(a,b,b+c)},w:function(a){var b=A.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);var e=Math;d=Math.max(a,d);e=e.min.call(e,2147483648,d+(65536-d%65536)%65536);a:{try{fa.grow(e-ia.byteLength+65535>>>16);na();var f=1;break a}catch(g){}f=\nvoid 0}if(f)return!0}return!1},z:function(){return 52},u:function(){return 70},y:function(a,b,c,d){for(var e=0,f=0;f<c;f++){var g=E[b>>2],k=E[b+4>>2];b+=8;for(var m=0;m<k;m++){var l=A[g+m],n=Fb[a];0===l||10===l?((1===a?ea:v)(z(n,0)),n.length=0):n.push(l)}e+=k}E[d>>2]=e;return 0}};\n(function(){function a(e){h.asm=e.exports;fa=h.asm.E;na();oa=h.asm.J;qa.unshift(h.asm.F);F--;h.monitorRunDependencies&&h.monitorRunDependencies(F);0==F&&(null!==ta&&(clearInterval(ta),ta=null),G&&(e=G,G=null,e()))}function b(e){a(e.instance)}function c(e){return ya().then(function(f){return f instanceof WebAssembly.Instance ? f : WebAssembly.instantiate(f,d)}).then(function(f){return f}).then(e,function(f){v(\"failed to asynchronously prepare wasm: \"+f);x(f)})}var d={a:Jb};F++;h.monitorRunDependencies&&h.monitorRunDependencies(F);if(h.instantiateWasm)try{return h.instantiateWasm(d,\na)}catch(e){v(\"Module.instantiateWasm callback failed with error: \"+e),ca(e)}(function(){return w||\"function\"!=typeof WebAssembly.instantiateStreaming||ua(H)||\"function\"!=typeof fetch?c(b):fetch(H,{credentials:\"same-origin\"}).then(function(e){return WebAssembly.instantiateStreaming(e,d).then(b,function(f){v(\"wasm streaming compile failed: \"+f);v(\"falling back to ArrayBuffer instantiation\");return c(b)})})})().catch(ca);return{}})();\nh.___wasm_call_ctors=function(){return(h.___wasm_call_ctors=h.asm.F).apply(null,arguments)};var Ka=h.___getTypeName=function(){return(Ka=h.___getTypeName=h.asm.G).apply(null,arguments)};h.__embind_initialize_bindings=function(){return(h.__embind_initialize_bindings=h.asm.H).apply(null,arguments)};var Ib=h._malloc=function(){return(Ib=h._malloc=h.asm.I).apply(null,arguments)},S=h._free=function(){return(S=h._free=h.asm.K).apply(null,arguments)};\nh.dynCall_jiji=function(){return(h.dynCall_jiji=h.asm.L).apply(null,arguments)};var Kb;G=function Lb(){Kb||Mb();Kb||(G=Lb)};\nfunction Mb(){function a(){if(!Kb&&(Kb=!0,h.calledRun=!0,!ha)){za(qa);aa(h);if(h.onRuntimeInitialized)h.onRuntimeInitialized();if(h.postRun)for(\"function\"==typeof h.postRun&&(h.postRun=[h.postRun]);h.postRun.length;){var b=h.postRun.shift();ra.unshift(b)}za(ra)}}if(!(0<F)){if(h.preRun)for(\"function\"==typeof h.preRun&&(h.preRun=[h.preRun]);h.preRun.length;)sa();za(pa);0<F||(h.setStatus?(h.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){h.setStatus(\"\")},1);a()},1)):a())}}\nif(h.preInit)for(\"function\"==typeof h.preInit&&(h.preInit=[h.preInit]);0<h.preInit.length;)h.preInit.pop()();Mb();\n\n return loadYoga.ready\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\nexport enum Align {\n Auto = 0,\n FlexStart = 1,\n Center = 2,\n FlexEnd = 3,\n Stretch = 4,\n Baseline = 5,\n SpaceBetween = 6,\n SpaceAround = 7,\n SpaceEvenly = 8,\n}\n\nexport enum BoxSizing {\n BorderBox = 0,\n ContentBox = 1,\n}\n\nexport enum Dimension {\n Width = 0,\n Height = 1,\n}\n\nexport enum Direction {\n Inherit = 0,\n LTR = 1,\n RTL = 2,\n}\n\nexport enum Display {\n Flex = 0,\n None = 1,\n Contents = 2,\n}\n\nexport enum Edge {\n Left = 0,\n Top = 1,\n Right = 2,\n Bottom = 3,\n Start = 4,\n End = 5,\n Horizontal = 6,\n Vertical = 7,\n All = 8,\n}\n\nexport enum Errata {\n None = 0,\n StretchFlexBasis = 1,\n AbsolutePositionWithoutInsetsExcludesPadding = 2,\n AbsolutePercentAgainstInnerSize = 4,\n All = 2147483647,\n Classic = 2147483646,\n}\n\nexport enum ExperimentalFeature {\n WebFlexBasis = 0,\n}\n\nexport enum FlexDirection {\n Column = 0,\n ColumnReverse = 1,\n Row = 2,\n RowReverse = 3,\n}\n\nexport enum Gutter {\n Column = 0,\n Row = 1,\n All = 2,\n}\n\nexport enum Justify {\n FlexStart = 0,\n Center = 1,\n FlexEnd = 2,\n SpaceBetween = 3,\n SpaceAround = 4,\n SpaceEvenly = 5,\n}\n\nexport enum LogLevel {\n Error = 0,\n Warn = 1,\n Info = 2,\n Debug = 3,\n Verbose = 4,\n Fatal = 5,\n}\n\nexport enum MeasureMode {\n Undefined = 0,\n Exactly = 1,\n AtMost = 2,\n}\n\nexport enum NodeType {\n Default = 0,\n Text = 1,\n}\n\nexport enum Overflow {\n Visible = 0,\n Hidden = 1,\n Scroll = 2,\n}\n\nexport enum PositionType {\n Static = 0,\n Relative = 1,\n Absolute = 2,\n}\n\nexport enum Unit {\n Undefined = 0,\n Point = 1,\n Percent = 2,\n Auto = 3,\n}\n\nexport enum Wrap {\n NoWrap = 0,\n Wrap = 1,\n WrapReverse = 2,\n}\n\nconst constants = {\n ALIGN_AUTO: Align.Auto,\n ALIGN_FLEX_START: Align.FlexStart,\n ALIGN_CENTER: Align.Center,\n ALIGN_FLEX_END: Align.FlexEnd,\n ALIGN_STRETCH: Align.Stretch,\n ALIGN_BASELINE: Align.Baseline,\n ALIGN_SPACE_BETWEEN: Align.SpaceBetween,\n ALIGN_SPACE_AROUND: Align.SpaceAround,\n ALIGN_SPACE_EVENLY: Align.SpaceEvenly,\n BOX_SIZING_BORDER_BOX: BoxSizing.BorderBox,\n BOX_SIZING_CONTENT_BOX: BoxSizing.ContentBox,\n DIMENSION_WIDTH: Dimension.Width,\n DIMENSION_HEIGHT: Dimension.Height,\n DIRECTION_INHERIT: Direction.Inherit,\n DIRECTION_LTR: Direction.LTR,\n DIRECTION_RTL: Direction.RTL,\n DISPLAY_FLEX: Display.Flex,\n DISPLAY_NONE: Display.None,\n DISPLAY_CONTENTS: Display.Contents,\n EDGE_LEFT: Edge.Left,\n EDGE_TOP: Edge.Top,\n EDGE_RIGHT: Edge.Right,\n EDGE_BOTTOM: Edge.Bottom,\n EDGE_START: Edge.Start,\n EDGE_END: Edge.End,\n EDGE_HORIZONTAL: Edge.Horizontal,\n EDGE_VERTICAL: Edge.Vertical,\n EDGE_ALL: Edge.All,\n ERRATA_NONE: Errata.None,\n ERRATA_STRETCH_FLEX_BASIS: Errata.StretchFlexBasis,\n ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING: Errata.AbsolutePositionWithoutInsetsExcludesPadding,\n ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE: Errata.AbsolutePercentAgainstInnerSize,\n ERRATA_ALL: Errata.All,\n ERRATA_CLASSIC: Errata.Classic,\n EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS: ExperimentalFeature.WebFlexBasis,\n FLEX_DIRECTION_COLUMN: FlexDirection.Column,\n FLEX_DIRECTION_COLUMN_REVERSE: FlexDirection.ColumnReverse,\n FLEX_DIRECTION_ROW: FlexDirection.Row,\n FLEX_DIRECTION_ROW_REVERSE: FlexDirection.RowReverse,\n GUTTER_COLUMN: Gutter.Column,\n GUTTER_ROW: Gutter.Row,\n GUTTER_ALL: Gutter.All,\n JUSTIFY_FLEX_START: Justify.FlexStart,\n JUSTIFY_CENTER: Justify.Center,\n JUSTIFY_FLEX_END: Justify.FlexEnd,\n JUSTIFY_SPACE_BETWEEN: Justify.SpaceBetween,\n JUSTIFY_SPACE_AROUND: Justify.SpaceAround,\n JUSTIFY_SPACE_EVENLY: Justify.SpaceEvenly,\n LOG_LEVEL_ERROR: LogLevel.Error,\n LOG_LEVEL_WARN: LogLevel.Warn,\n LOG_LEVEL_INFO: LogLevel.Info,\n LOG_LEVEL_DEBUG: LogLevel.Debug,\n LOG_LEVEL_VERBOSE: LogLevel.Verbose,\n LOG_LEVEL_FATAL: LogLevel.Fatal,\n MEASURE_MODE_UNDEFINED: MeasureMode.Undefined,\n MEASURE_MODE_EXACTLY: MeasureMode.Exactly,\n MEASURE_MODE_AT_MOST: MeasureMode.AtMost,\n NODE_TYPE_DEFAULT: NodeType.Default,\n NODE_TYPE_TEXT: NodeType.Text,\n OVERFLOW_VISIBLE: Overflow.Visible,\n OVERFLOW_HIDDEN: Overflow.Hidden,\n OVERFLOW_SCROLL: Overflow.Scroll,\n POSITION_TYPE_STATIC: PositionType.Static,\n POSITION_TYPE_RELATIVE: PositionType.Relative,\n POSITION_TYPE_ABSOLUTE: PositionType.Absolute,\n UNIT_UNDEFINED: Unit.Undefined,\n UNIT_POINT: Unit.Point,\n UNIT_PERCENT: Unit.Percent,\n UNIT_AUTO: Unit.Auto,\n WRAP_NO_WRAP: Wrap.NoWrap,\n WRAP_WRAP: Wrap.Wrap,\n WRAP_WRAP_REVERSE: Wrap.WrapReverse,\n}\nexport default constants","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n// @ts-nocheck\n\nimport {Unit, Direction} from './generated/YGEnums.ts';\nimport YGEnums from './generated/YGEnums.ts';\n\nimport type {\n Align,\n BoxSizing,\n Display,\n Edge,\n Errata,\n ExperimentalFeature,\n FlexDirection,\n Gutter,\n Justify,\n MeasureMode,\n Overflow,\n PositionType,\n Wrap,\n} from './generated/YGEnums.ts';\n\ntype Layout = {\n left: number;\n right: number;\n top: number;\n bottom: number;\n width: number;\n height: number;\n};\n\ntype Size = {\n width: number;\n height: number;\n};\n\ntype Value = {\n unit: Unit;\n value: number;\n};\n\nexport type Config = {\n free(): void;\n isExperimentalFeatureEnabled(feature: ExperimentalFeature): boolean;\n setExperimentalFeatureEnabled(\n feature: ExperimentalFeature,\n enabled: boolean,\n ): void;\n setPointScaleFactor(factor: number): void;\n getErrata(): Errata;\n setErrata(errata: Errata): void;\n useWebDefaults(): boolean;\n setUseWebDefaults(useWebDefaults: boolean): void;\n};\n\nexport type DirtiedFunction = (node: Node) => void;\n\nexport type MeasureFunction = (\n width: number,\n widthMode: MeasureMode,\n height: number,\n heightMode: MeasureMode,\n) => Size;\n\nexport type Node = {\n calculateLayout(\n width: number | 'auto' | undefined,\n height: number | 'auto' | undefined,\n direction?: Direction,\n ): void;\n copyStyle(node: Node): void;\n free(): void;\n freeRecursive(): void;\n getAlignContent(): Align;\n getAlignItems(): Align;\n getAlignSelf(): Align;\n getAspectRatio(): number;\n getBorder(edge: Edge): number;\n getChild(index: number): Node;\n getChildCount(): number;\n getComputedBorder(edge: Edge): number;\n getComputedBottom(): number;\n getComputedHeight(): number;\n getComputedLayout(): Layout;\n getComputedLeft(): number;\n getComputedMargin(edge: Edge): number;\n getComputedPadding(edge: Edge): number;\n getComputedRight(): number;\n getComputedTop(): number;\n getComputedWidth(): number;\n getDirection(): Direction;\n getDisplay(): Display;\n getFlexBasis(): Value;\n getFlexDirection(): FlexDirection;\n getFlexGrow(): number;\n getFlexShrink(): number;\n getFlexWrap(): Wrap;\n getHeight(): Value;\n getJustifyContent(): Justify;\n getGap(gutter: Gutter): Value;\n getMargin(edge: Edge): Value;\n getMaxHeight(): Value;\n getMaxWidth(): Value;\n getMinHeight(): Value;\n getMinWidth(): Value;\n getOverflow(): Overflow;\n getPadding(edge: Edge): Value;\n getParent(): Node | null;\n getPosition(edge: Edge): Value;\n getPositionType(): PositionType;\n getBoxSizing(): BoxSizing;\n getWidth(): Value;\n insertChild(child: Node, index: number): void;\n isDirty(): boolean;\n isReferenceBaseline(): boolean;\n markDirty(): void;\n hasNewLayout(): boolean;\n markLayoutSeen(): void;\n removeChild(child: Node): void;\n reset(): void;\n setAlignContent(alignContent: Align): void;\n setAlignItems(alignItems: Align): void;\n setAlignSelf(alignSelf: Align): void;\n setAspectRatio(aspectRatio: number | undefined): void;\n setBorder(edge: Edge, borderWidth: number | undefined): void;\n setDirection(direction: Direction): void;\n setDisplay(display: Display): void;\n setFlex(flex: number | undefined): void;\n setFlexBasis(flexBasis: number | 'auto' | `${number}%` | undefined): void;\n setFlexBasisPercent(flexBasis: number | undefined): void;\n setFlexBasisAuto(): void;\n setFlexDirection(flexDirection: FlexDirection): void;\n setFlexGrow(flexGrow: number | undefined): void;\n setFlexShrink(flexShrink: number | undefined): void;\n setFlexWrap(flexWrap: Wrap): void;\n setHeight(height: number | 'auto' | `${number}%` | undefined): void;\n setIsReferenceBaseline(isReferenceBaseline: boolean): void;\n setHeightAuto(): void;\n setHeightPercent(height: number | undefined): void;\n setJustifyContent(justifyContent: Justify): void;\n setGap(gutter: Gutter, gapLength: number | `${number}%` | undefined): Value;\n setGapPercent(gutter: Gutter, gapLength: number | undefined): Value;\n setMargin(\n edge: Edge,\n margin: number | 'auto' | `${number}%` | undefined,\n ): void;\n setMarginAuto(edge: Edge): void;\n setMarginPercent(edge: Edge, margin: number | undefined): void;\n setMaxHeight(maxHeight: number | `${number}%` | undefined): void;\n setMaxHeightPercent(maxHeight: number | undefined): void;\n setMaxWidth(maxWidth: number | `${number}%` | undefined): void;\n setMaxWidthPercent(maxWidth: number | undefined): void;\n setDirtiedFunc(dirtiedFunc: DirtiedFunction | null): void;\n setMeasureFunc(measureFunc: MeasureFunction | null): void;\n setMinHeight(minHeight: number | `${number}%` | undefined): void;\n setMinHeightPercent(minHeight: number | undefined): void;\n setMinWidth(minWidth: number | `${number}%` | undefined): void;\n setMinWidthPercent(minWidth: number | undefined): void;\n setOverflow(overflow: Overflow): void;\n setPadding(edge: Edge, padding: number | `${number}%` | undefined): void;\n setPaddingPercent(edge: Edge, padding: number | undefined): void;\n setPosition(edge: Edge, position: number | `${number}%` | undefined): void;\n setPositionPercent(edge: Edge, position: number | undefined): void;\n setPositionType(positionType: PositionType): void;\n setPositionAuto(edge: Edge): void;\n setBoxSizing(boxSizing: BoxSizing): void;\n setWidth(width: number | 'auto' | `${number}%` | undefined): void;\n setWidthAuto(): void;\n setWidthPercent(width: number | undefined): void;\n unsetDirtiedFunc(): void;\n unsetMeasureFunc(): void;\n setAlwaysFormsContainingBlock(alwaysFormsContainingBlock: boolean): void;\n};\n\nexport type Yoga = {\n Config: {\n create(): Config;\n destroy(config: Config): void;\n };\n Node: {\n create(config?: Config): Node;\n createDefault(): Node;\n createWithConfig(config: Config): Node;\n destroy(node: Node): void;\n };\n} & typeof YGEnums;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport default function wrapAssembly(lib: any): Yoga {\n function patch(prototype, name, fn) {\n const original = prototype[name];\n\n prototype[name] = function (...args) {\n return fn.call(this, original, ...args);\n };\n }\n\n for (const fnName of [\n 'setPosition',\n 'setMargin',\n 'setFlexBasis',\n 'setWidth',\n 'setHeight',\n 'setMinWidth',\n 'setMinHeight',\n 'setMaxWidth',\n 'setMaxHeight',\n 'setPadding',\n 'setGap',\n ]) {\n const methods = {\n [Unit.Point]: lib.Node.prototype[fnName],\n [Unit.Percent]: lib.Node.prototype[`${fnName}Percent`],\n [Unit.Auto]: lib.Node.prototype[`${fnName}Auto`],\n };\n\n patch(lib.Node.prototype, fnName, function (original, ...args) {\n // We patch all these functions to add support for the following calls:\n // .setWidth(100) / .setWidth(\"100%\") / .setWidth(.getWidth()) / .setWidth(\"auto\")\n\n const value = args.pop();\n let unit, asNumber;\n\n if (value === 'auto') {\n unit = Unit.Auto;\n asNumber = undefined;\n } else if (typeof value === 'object') {\n unit = value.unit;\n asNumber = value.valueOf();\n } else {\n unit =\n typeof value === 'string' && value.endsWith('%')\n ? Unit.Percent\n : Unit.Point;\n asNumber = parseFloat(value);\n if (\n value !== undefined &&\n !Number.isNaN(value) &&\n Number.isNaN(asNumber)\n ) {\n throw new Error(`Invalid value ${value} for ${fnName}`);\n }\n }\n\n if (!methods[unit])\n throw new Error(\n `Failed to execute \"${fnName}\": Unsupported unit '${value}'`,\n );\n\n if (asNumber !== undefined) {\n return methods[unit].call(this, ...args, asNumber);\n } else {\n return methods[unit].call(this, ...args);\n }\n });\n }\n\n function wrapMeasureFunction(measureFunction) {\n return lib.MeasureCallback.implement({\n measure: (...args) => {\n const {width, height} = measureFunction(...args);\n return {\n width: width ?? NaN,\n height: height ?? NaN,\n };\n },\n });\n }\n\n patch(lib.Node.prototype, 'setMeasureFunc', function (original, measureFunc) {\n // This patch is just a convenience patch, since it helps write more\n // idiomatic source code (such as .setMeasureFunc(null))\n if (measureFunc) {\n return original.call(this, wrapMeasureFunction(measureFunc));\n } else {\n return this.unsetMeasureFunc();\n }\n });\n\n function wrapDirtiedFunc(dirtiedFunction) {\n return lib.DirtiedCallback.implement({dirtied: dirtiedFunction});\n }\n\n patch(lib.Node.prototype, 'setDirtiedFunc', function (original, dirtiedFunc) {\n original.call(this, wrapDirtiedFunc(dirtiedFunc));\n });\n\n patch(lib.Config.prototype, 'free', function () {\n // Since we handle the memory allocation ourselves (via lib.Config.create),\n // we also need to handle the deallocation\n lib.Config.destroy(this);\n });\n\n patch(lib.Node, 'create', (_, config) => {\n // We decide the constructor we want to call depending on the parameters\n return config\n ? lib.Node.createWithConfig(config)\n : lib.Node.createDefault();\n });\n\n patch(lib.Node.prototype, 'free', function () {\n // Since we handle the memory allocation ourselves (via lib.Node.create),\n // we also need to handle the deallocation\n lib.Node.destroy(this);\n });\n\n patch(lib.Node.prototype, 'freeRecursive', function () {\n for (let t = 0, T = this.getChildCount(); t < T; ++t) {\n this.getChild(0).freeRecursive();\n }\n this.free();\n });\n\n patch(\n lib.Node.prototype,\n 'calculateLayout',\n function (original, width = NaN, height = NaN, direction = Direction.LTR) {\n // Just a small patch to add support for the function default parameters\n return original.call(this, width, height, direction);\n },\n );\n\n return {\n Config: lib.Config,\n Node: lib.Node,\n ...YGEnums,\n };\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n// @ts-ignore untyped from Emscripten\nimport loadYogaImpl from '../binaries/yoga-wasm-base64-esm.js';\nimport wrapAssembly from './wrapAssembly.ts';\n\nexport type {\n Config,\n DirtiedFunction,\n MeasureFunction,\n Node,\n Yoga,\n} from './wrapAssembly.ts';\n\nexport async function loadYoga() {\n return wrapAssembly(await loadYogaImpl());\n}\nexport * from './generated/YGEnums.ts';\n","import { loadYoga as loadYogaUntyped, type Yoga } from 'yoga-layout/load';\n\nconst loadYoga = loadYogaUntyped as (options: {\n\twasmBinary?: ArrayBuffer | ArrayBufferLike;\n\tinstantiateWasm?: (\n\t\timports: WebAssembly.Imports,\n\t\tsuccessCallback: (instance: WebAssembly.Instance) => void\n\t) => WebAssembly.Exports | false | undefined;\n}) => Promise<Yoga>;\n\nlet resolveYoga: (yoga: Yoga) => void;\nlet rejectYoga: (error: unknown) => void;\nconst yogaPromise: Promise<Yoga> = new Promise((resolve, reject) => {\n\tresolveYoga = resolve;\n\trejectYoga = reject;\n});\n\nexport type InitInput =\n\t| string\n\t| Request\n\t| URL\n\t| Response\n\t| BufferSource\n\t| Buffer\n\t| WebAssembly.Module\n\t| Promise<Response | BufferSource | Buffer | WebAssembly.Module>;\n\nasync function loadWasm(\n\tinput: InitInput,\n\timports: WebAssembly.Imports\n): Promise<WebAssembly.WebAssemblyInstantiatedSource> {\n\tlet source: Response | BufferSource | Buffer | WebAssembly.Module;\n\n\tif (\n\t\ttypeof input === 'string' ||\n\t\t(typeof Request === 'function' && input instanceof Request) ||\n\t\t(typeof URL === 'function' && input instanceof URL)\n\t) {\n\t\tsource = await fetch(input);\n\t} else {\n\t\tsource = await input;\n\t}\n\n\tif (typeof Response === 'function' && source instanceof Response) {\n\t\tif (typeof WebAssembly.instantiateStreaming === 'function') {\n\t\t\ttry {\n\t\t\t\treturn await WebAssembly.instantiateStreaming(source, imports);\n\t\t\t} catch (e) {\n\t\t\t\tif (source.headers.get('Content-Type') !== 'application/wasm') {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t'`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n',\n\t\t\t\t\t\te\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst bytes = await source.arrayBuffer();\n\t\treturn await WebAssembly.instantiate(bytes, imports);\n\t}\n\n\tconst instantiated = (await WebAssembly.instantiate(\n\t\t'buffer' in source\n\t\t\t? source.buffer.slice(\n\t\t\t\t\tsource.byteOffset,\n\t\t\t\t\tsource.byteOffset + source.byteLength\n\t\t\t )\n\t\t\t: source,\n\t\timports\n\t)) as WebAssembly.Instance | WebAssembly.WebAssemblyInstantiatedSource;\n\n\tif (instantiated instanceof WebAssembly.Instance) {\n\t\treturn { instance: instantiated, module: source as WebAssembly.Module };\n\t}\n\n\treturn instantiated;\n}\n\nexport function init(input: InitInput) {\n\tloadYoga({\n\t\tinstantiateWasm(imports, successCallback) {\n\t\t\tloadWasm(input, imports)\n\t\t\t\t.then(({ instance }) => {\n\t\t\t\t\tsuccessCallback(instance);\n\t\t\t\t})\n\t\t\t\t.catch(rejectYoga);\n\n\t\t\treturn {};\n\t\t}\n\t})\n\t\t.then(resolveYoga)\n\t\t.catch(rejectYoga);\n}\n\nexport function getYoga() {\n\treturn yogaPromise;\n}\n","import type { ReactNode, ReactElement } from 'react';\nimport LineBreaker from 'linebreak';\n\nimport CssDimension from './vendor/parse-css-dimension/index.js';\n\nexport function isReactElement(node: ReactNode): node is ReactElement {\n\tconst type = typeof node;\n\tif (\n\t\ttype === 'number' ||\n\t\ttype === 'bigint' ||\n\t\ttype === 'string' ||\n\t\ttype === 'boolean'\n\t) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nexport function isClass(f: Function) {\n\treturn /^class\\s/.test(f.toString());\n}\n\nexport function isForwardRefComponent(type: any) {\n\treturn type && type.$$typeof === Symbol.for('react.forward_ref');\n}\n\nexport function isReactComponent(type: any) {\n\treturn typeof type === 'function' || isForwardRefComponent(type);\n}\n\nexport function hasDangerouslySetInnerHTMLProp(props: any) {\n\treturn 'dangerouslySetInnerHTML' in props;\n}\n\nexport function normalizeChildren(children: any) {\n\tconst flattend =\n\t\ttypeof children === 'undefined'\n\t\t\t? []\n\t\t\t: [].concat(children).flat(Infinity);\n\n\tconst res = [];\n\tfor (let i = 0; i < flattend.length; i++) {\n\t\tlet value = flattend[i];\n\t\tif (\n\t\t\ttypeof value === 'undefined' ||\n\t\t\ttypeof value === 'boolean' ||\n\t\t\tvalue === null\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof value === 'number') {\n\t\t\tvalue = String(value);\n\t\t}\n\t\tif (\n\t\t\ttypeof value === 'string' &&\n\t\t\tres.length &&\n\t\t\ttypeof res[res.length - 1] === 'string'\n\t\t) {\n\t\t\tres[res.length - 1] += value;\n\t\t} else {\n\t\t\tres.push(value);\n\t\t}\n\t}\n\treturn res;\n}\n\nexport function lengthToNumber(\n\tlength: string | number,\n\tbaseFontSize: number,\n\tbaseLength: number,\n\tinheritedStyle: Record<string, string | number>,\n\tpercentage = false\n): number | undefined {\n\tif (typeof length === 'number') return length;\n\n\t// Convert em and rem values to number (px), convert rad to deg.\n\ttry {\n\t\tlength = length.trim();\n\n\t\t// Not length: `1px/2px`, `1px 2px`, `1px, 2px`, `calc(1px)`.\n\t\tif (/[ /\\(,]/.test(length)) return;\n\n\t\t// Just a number as string: '100'\n\t\tif (length === String(+length)) return +length;\n\n\t\tconst parsed = new CssDimension(length);\n\t\tif (parsed.type === 'length') {\n\t\t\tswitch (parsed.unit) {\n\t\t\t\tcase 'em':\n\t\t\t\t\treturn parsed.value * baseFontSize;\n\t\t\t\tcase 'rem':\n\t\t\t\t\treturn parsed.value * 16;\n\t\t\t\tcase 'vw':\n\t\t\t\t\treturn ~~(\n\t\t\t\t\t\t(parsed.value *\n\t\t\t\t\t\t\t(inheritedStyle._viewportWidth as number)) /\n\t\t\t\t\t\t100\n\t\t\t\t\t);\n\t\t\t\tcase 'vh':\n\t\t\t\t\treturn ~~(\n\t\t\t\t\t\t(parsed.value *\n\t\t\t\t\t\t\t(inheritedStyle._viewportHeight as number)) /\n\t\t\t\t\t\t100\n\t\t\t\t\t);\n\t\t\t\tdefault:\n\t\t\t\t\treturn parsed.value;\n\t\t\t}\n\t\t} else if (parsed.type === 'angle') {\n\t\t\treturn calcDegree(length);\n\t\t} else if (parsed.type === 'percentage') {\n\t\t\tif (percentage) {\n\t\t\t\treturn (parsed.value / 100) * baseLength;\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Not a length unit, silently ignore.\n\t}\n}\n\nexport function calcDegree(deg: string) {\n\tconst parsed = new CssDimension(deg);\n\n\tswitch (parsed.unit) {\n\t\tcase 'deg':\n\t\t\treturn parsed.value;\n\t\tcase 'rad':\n\t\t\treturn (parsed.value * 180) / Math.PI;\n\t\tcase 'turn':\n\t\t\treturn parsed.value * 360;\n\t\tcase 'grad':\n\t\t\treturn 0.9 * parsed.value;\n\t}\n}\n\n// Multiplies two 2d transform matrices.\nexport function multiply(m1: number[], m2: number[]) {\n\treturn [\n\t\tm1[0] * m2[0] + m1[2] * m2[1],\n\t\tm1[1] * m2[0] + m1[3] * m2[1],\n\t\tm1[0] * m2[2] + m1[2] * m2[3],\n\t\tm1[1] * m2[2] + m1[3] * m2[3],\n\t\tm1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n\t\tm1[1] * m2[4] + m1[3] * m2[5] + m1[5]\n\t];\n}\n\nexport function v(\n\tfield: string | number | undefined,\n\tmap: Record<string, any>,\n\tfallback: any,\n\terrorIfNotAllowedForProperty?: string\n) {\n\tlet value = map[field];\n\tif (typeof value === 'undefined') {\n\t\tif (errorIfNotAllowedForProperty && typeof field !== 'undefined') {\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid value for CSS property \"${errorIfNotAllowedForProperty}\". Allowed values: ${Object.keys(\n\t\t\t\t\tmap\n\t\t\t\t)\n\t\t\t\t\t.map(_v => `\"${_v}\"`)\n\t\t\t\t\t.join(' | ')}. Received: \"${field}\".`\n\t\t\t);\n\t\t}\n\t\tvalue = fallback;\n\t}\n\treturn value;\n}\n\nlet wordSegmenter;\nlet graphemeSegmenter;\n\n// Implementation modified from\n// https://github.com/niklasvh/html2canvas/blob/6521a487d78172f7179f7c973c1a3af40eb92009/src/css/layout/text.ts\n// https://drafts.csswg.org/css-text/#word-separator\nexport const wordSeparators = [\n\t0x0020, 0x00a0, 0x1361, 0x10100, 0x10101, 0x1039, 0x1091, 0xa\n].map(point => String.fromCodePoint(point));\n\nconst segmentCache = new Map<string, string[]>();\nconst MAX_SEGMENT_CACHE_SIZE = 500;\n\nexport function segment(\n\tcontent: string,\n\tgranularity: 'word' | 'grapheme',\n\tlocale?: string\n): string[] {\n\tconst cacheKey = `${granularity}:${locale || ''}:${content}`;\n\n\tif (segmentCache.has(cacheKey)) {\n\t\treturn segmentCache.get(cacheKey)!;\n\t}\n\tif (!wordSegmenter || !graphemeSegmenter) {\n\t\tif (!(typeof Intl !== 'undefined' && 'Segmenter' in Intl)) {\n\t\t\t// https://caniuse.com/mdn-javascript_builtins_intl_segments\n\t\t\tthrow new Error(\n\t\t\t\t'Intl.Segmenter does not exist, please use import a polyfill.'\n\t\t\t);\n\t\t}\n\n\t\twordSegmenter = new Intl.Segmenter(locale, { granularity: 'word' });\n\t\tgraphemeSegmenter = new Intl.Segmenter(locale, {\n\t\t\tgranularity: 'grapheme'\n\t\t});\n\t}\n\n\tlet result: string[];\n\n\tif (granularity === 'grapheme') {\n\t\tresult = [...graphemeSegmenter.segment(content)].map(\n\t\t\tseg => seg.segment\n\t\t);\n\t} else {\n\t\tconst segmented = [...wordSegmenter.segment(content)].map(\n\t\t\tseg => seg.segment\n\t\t) as string[];\n\n\t\tconst output = [];\n\n\t\tlet i = 0;\n\t\t// When there is a non-breaking space, join the previous and next words together.\n\t\t// This change causes them to be treated as a single segment.\n\t\twhile (i < segmented.length) {\n\t\t\tconst s = segmented[i];\n\n\t\t\tif (s == '\\u00a0') {\n\t\t\t\tconst previousWord = i === 0 ? '' : output.pop();\n\t\t\t\tconst nextWord =\n\t\t\t\t\ti === segmented.length - 1 ? '' : segmented[i + 1];\n\n\t\t\t\toutput.push(previousWord + '\\u00a0' + nextWord);\n\t\t\t\ti += 2;\n\t\t\t} else {\n\t\t\t\toutput.push(s);\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\n\t\tresult = output;\n\t}\n\n\tif (segmentCache.size >= MAX_SEGMENT_CACHE_SIZE) {\n\t\tconst firstKey = segmentCache.keys().next().value;\n\t\tsegmentCache.delete(firstKey);\n\t}\n\n\tsegmentCache.set(cacheKey, result);\n\treturn result;\n}\n\nexport function buildXMLString(\n\ttype: string,\n\tattrs: Record<string, string | number>,\n\tchildren?: string\n) {\n\tlet attrString = '';\n\n\tfor (const [k, _v] of Object.entries(attrs)) {\n\t\tif (typeof _v !== 'undefined') {\n\t\t\tattrString += ` ${k}=\"${_v}\"`;\n\t\t}\n\t}\n\n\tif (children) {\n\t\treturn `<${type}${attrString}>${children}</${type}>`;\n\t}\n\treturn `<${type}${attrString}/>`;\n}\n\nexport function createLRU<T>(max = 20) {\n\tconst store: Map<string, T> = new Map();\n\tfunction get(key: string): T | undefined {\n\t\tconst value = store.get(key);\n\t\tif (value === undefined) return undefined;\n\n\t\t// Move to end (most recently used)\n\t\tstore.delete(key);\n\t\tstore.set(key, value);\n\t\treturn value;\n\t}\n\tfunction set(key: string, value: T) {\n\t\tif (store.has(key)) {\n\t\t\tstore.delete(key);\n\t\t} else if (store.size >= max) {\n\t\t\tconst firstKey = store.keys().next().value;\n\t\t\tstore.delete(firstKey);\n\t\t}\n\n\t\tstore.set(key, value);\n\t}\n\tfunction clear() {\n\t\tstore.clear();\n\t}\n\n\treturn {\n\t\tset,\n\t\tget,\n\t\tclear\n\t};\n}\n\nexport function parseViewBox(viewBox?: string | null | undefined) {\n\treturn viewBox ? viewBox.split(/[, ]/).filter(Boolean).map(Number) : null;\n}\n\nexport function toString(x: unknown): string {\n\treturn Object.prototype.toString.call(x);\n}\n\nexport function isString(x: unknown): x is string {\n\treturn typeof x === 'string';\n}\n\nexport function isNumber(x: unknown): x is number {\n\treturn typeof x === 'number';\n}\n\nexport function isUndefined(x: unknown): x is undefined {\n\treturn typeof x === 'undefined';\n}\n\nexport function asPointPercentageLength(\n\tx: string | number,\n\tpropertyName?: string\n): number | `${number}%` | undefined {\n\tif (typeof x === 'number') {\n\t\treturn x;\n\t}\n\tif (x.endsWith('%')) {\n\t\tconst percentageValue = parseFloat(x.slice(0, -1));\n\t\tif (isNaN(percentageValue)) {\n\t\t\tconsole.warn(\n\t\t\t\t`Invalid value \"${x}\"${\n\t\t\t\t\ttypeof propertyName === 'string'\n\t\t\t\t\t\t? ` for \"${propertyName}\"`\n\t\t\t\t\t\t: ''\n\t\t\t\t}. Expected a percentage value (e.g., \"50%\").`\n\t\t\t);\n\t\t\treturn undefined;\n\t\t}\n\t\treturn `${percentageValue}%`;\n\t}\n\n\tconsole.warn(\n\t\t`Invalid value \"${x}\"${\n\t\t\ttypeof propertyName === 'string' ? ` for \"${propertyName}\"` : ''\n\t\t}. Expected a number or a percentage value (e.g., \"50%\").`\n\t);\n\treturn undefined;\n}\n\nexport function asPointAutoPercentageLength(\n\tx: string | number,\n\tpropertyName?: string\n): number | 'auto' | `${number}%` | undefined {\n\tif (typeof x === 'number') {\n\t\treturn x;\n\t}\n\tif (x === 'auto') {\n\t\treturn 'auto';\n\t}\n\tif (x.endsWith('%')) {\n\t\tconst percentageValue = parseFloat(x.slice(0, -1));\n\t\tif (isNaN(percentageValue)) {\n\t\t\tconsole.warn(\n\t\t\t\t`Invalid value \"${x}\"${\n\t\t\t\t\ttypeof propertyName === 'string'\n\t\t\t\t\t\t? ` for \"${propertyName}\"`\n\t\t\t\t\t\t: ''\n\t\t\t\t}. Expected a percentage value (e.g., \"50%\").`\n\t\t\t);\n\t\t\treturn undefined;\n\t\t}\n\t\treturn `${percentageValue}%`;\n\t}\n\n\tconsole.warn(\n\t\t`Invalid value \"${x}\"${\n\t\t\ttypeof propertyName === 'string' ? ` for \"${propertyName}\"` : ''\n\t\t}. Expected a number, \"auto\", or a percentage value (e.g., \"50%\").`\n\t);\n\treturn undefined;\n}\n\nexport function splitByBreakOpportunities(\n\tcontent: string,\n\twordBreak: string\n): {\n\twords: string[];\n\trequiredBreaks: boolean[];\n} {\n\tif (wordBreak === 'break-all') {\n\t\treturn { words: segment(content, 'grapheme'), requiredBreaks: [] };\n\t}\n\n\tif (wordBreak === 'keep-all') {\n\t\treturn { words: segment(content, 'word'), requiredBreaks: [] };\n\t}\n\n\tconst breaker = new LineBreaker(content);\n\tlet last = 0;\n\tlet bk = breaker.nextBreak();\n\tconst words = [];\n\tconst requiredBreaks = [false];\n\n\twhile (bk) {\n\t\tconst word = content.slice(last, bk.position);\n\t\twords.push(word);\n\n\t\tif (bk.required) {\n\t\t\trequiredBreaks.push(true);\n\t\t} else {\n\t\t\trequiredBreaks.push(false);\n\t\t}\n\n\t\tlast = bk.position;\n\t\tbk = breaker.nextBreak();\n\t}\n\n\treturn { words, requiredBreaks };\n}\n\nexport const midline = (s: string) => {\n\treturn s.replaceAll(\n\t\t/([A-Z])/g,\n\t\t(_, letter: string) => `-${letter.toLowerCase()}`\n\t);\n};\n\nexport function splitEffects(\n\tinput: string,\n\tseparator: string | RegExp = ','\n): string[] {\n\tconst result = [];\n\tlet l = 0;\n\tlet parenCount = 0;\n\tseparator = new RegExp(separator);\n\n\tfor (let i = 0; i < input.length; i++) {\n\t\tif (input[i] === '(') {\n\t\t\tparenCount++;\n\t\t} else if (input[i] === ')') {\n\t\t\tparenCount--;\n\t\t}\n\n\t\tif (parenCount === 0 && separator.test(input[i])) {\n\t\t\tresult.push(input.slice(l, i).trim());\n\t\t\tl = i + 1;\n\t\t}\n\t}\n\n\tresult.push(input.slice(l).trim());\n\n\treturn result;\n}\n","var e=(t,r)=>()=>(r||t((r={exports:{}}).exports,r),r.exports);var u=e((k,g)=>{g.exports=[\"em\",\"ex\",\"ch\",\"rem\",\"vh\",\"vw\",\"vmin\",\"vmax\",\"px\",\"mm\",\"cm\",\"in\",\"pt\",\"pc\",\"mozmm\"]});var a=e((z,v)=>{v.exports=[\"deg\",\"grad\",\"rad\",\"turn\"]});var c=e((L,w)=>{w.exports=[\"dpi\",\"dpcm\",\"dppx\"]});var h=e(($,y)=>{y.exports=[\"Hz\",\"kHz\"]});var m=e((j,b)=>{b.exports=[\"s\",\"ms\"]});var q=u(),f=a(),p=c(),l=h(),d=m();function s(t){if(/\\.\\D?$/.test(t))throw new Error(\"The dot should be followed by a number\");if(/^[+-]{2}/.test(t))throw new Error(\"Only one leading +/- is allowed\");if(x(t)>1)throw new Error(\"Only one dot is allowed\");if(/%$/.test(t)){this.type=\"percentage\",this.value=o(t),this.unit=\"%\";return}var r=O(t);if(!r){this.type=\"number\",this.value=o(t);return}this.type=F(r),this.value=o(t.substr(0,t.length-r.length)),this.unit=r}s.prototype.valueOf=function(){return this.value};s.prototype.toString=function(){return this.value+(this.unit||\"\")};function U(t){return new s(t)}function x(t){var r=t.match(/\\./g);return r?r.length:0}function o(t){var r=parseFloat(t);if(isNaN(r))throw new Error(\"Invalid number: \"+t);return r}var E=[].concat(f,l,q,p,d);function O(t){var r=t.match(/\\D+$/),n=r&&r[0];if(n&&E.indexOf(n)===-1)throw new Error(\"Invalid unit: \"+n);return n}var D=Object.assign(i(f,\"angle\"),i(l,\"frequency\"),i(p,\"resolution\"),i(d,\"time\"));function i(t,r){return Object.fromEntries(t.map(n=>[n,r]))}function F(t){return D[t]||\"length\"}export{U as default};\n","import { type Yoga } from 'yoga-layout/load';\nimport { type Node } from 'yoga-layout';\nimport { type InitInput } from './yoga.external.js';\n\nexport { Yoga as TYoga, Node as YogaNode, type InitInput };\n\nexport function init(input: InitInput) {\n\tif (process.env.SATORI_STANDALONE === '1') {\n\t\treturn import('./yoga.external.js').then(mod => mod.init(input));\n\t} else {\n\t\t// Do nothing. It's bundled.\n\t}\n}\n\nexport function getYoga() {\n\tif (process.env.SATORI_STANDALONE === '1') {\n\t\treturn import('./yoga.external.js').then(mod => mod.getYoga());\n\t} else {\n\t\treturn import('./yoga.bundled.js').then(mod => mod.getYoga());\n\t}\n}\n\nif (process.env.SATORI_STANDALONE !== '1') {\n\t// Preload Yoga in bundled mode.\n\timport('./yoga.bundled.js');\n}\n","/**\n * This module is used to fetch image from the given URL and resolve it as\n * base64 inlined data URI, so the toolchain can process it.\n * The image data will be cached in a LRU so we don't need to fetch it again\n * in new render processes. But to invalidate the cache the workaround is to\n * add a random query string to the URL.\n * TODO: We might want another option to disable image caching by default.\n */\n\nconst AVIF = 'image/avif';\nconst WEBP = 'image/webp';\nconst APNG = 'image/apng';\nconst PNG = 'image/png';\nconst JPEG = 'image/jpeg';\nconst GIF = 'image/gif';\nconst SVG = 'image/svg+xml';\n\nfunction parseJPEG(buf: ArrayBuffer) {\n\tconst view = new DataView(buf);\n\n\t// Skip magic bytes\n\tlet offset = 4;\n\n\tconst len = view.byteLength;\n\twhile (offset < len) {\n\t\tconst i = view.getUint16(offset, false);\n\n\t\tif (i > len) {\n\t\t\tthrow new TypeError('Invalid JPEG');\n\t\t}\n\n\t\tconst next = view.getUint8(i + 1 + offset);\n\t\tif (next === 0xc0 || next === 0xc1 || next === 0xc2) {\n\t\t\treturn [\n\t\t\t\tview.getUint16(i + 7 + offset, false),\n\t\t\t\tview.getUint16(i + 5 + offset, false)\n\t\t\t] as [number, number];\n\t\t}\n\n\t\t// TODO: Support orientations from EXIF.\n\n\t\toffset += i + 2;\n\t}\n\n\tthrow new TypeError('Invalid JPEG');\n}\n\nfunction parseGIF(buf: ArrayBuffer) {\n\tconst view = new Uint8Array(buf.slice(6, 10));\n\treturn [view[0] | (view[1] << 8), view[2] | (view[3] << 8)] as [\n\t\tnumber,\n\t\tnumber\n\t];\n}\n\nfunction parsePNG(buf: ArrayBuffer) {\n\tconst v = new DataView(buf);\n\treturn [v.getUint16(18, false), v.getUint16(22, false)] as [number, number];\n}\n\nimport { createLRU, parseViewBox } from '../utils.js';\n\ntype ResolvedImageData = [string, number?, number?] | readonly [];\nexport const cache = createLRU<ResolvedImageData>(500);\nexport const inflightRequests = new Map<string, Promise<ResolvedImageData>>();\n\nconst ALLOWED_IMAGE_TYPES = [PNG, APNG, JPEG, GIF, SVG];\n\n// Pre-compiled regex patterns for SVG parsing\nconst SVG_ATTRS_REGEX = /<svg[^>]*>/i;\nconst VIEWBOX_REGEX = /viewBox=['\"]([^'\"]+)['\"]/;\nconst WIDTH_REGEX = /width=['\"](\\d*\\.?\\d+)['\"]/;\nconst HEIGHT_REGEX = /height=['\"](\\d*\\.?\\d+)['\"]/;\n\nfunction arrayBufferToBase64(buffer) {\n\tconst bytes = new Uint8Array(buffer);\n\tconst CHUNK_SIZE = 0x8000; // 32KB chunks\n\tlet binary = '';\n\n\tfor (let i = 0; i < bytes.length; i += CHUNK_SIZE) {\n\t\tconst chunk = bytes.subarray(i, Math.min(i + CHUNK_SIZE, bytes.length));\n\t\tbinary += String.fromCharCode(...chunk);\n\t}\n\n\treturn btoa(binary);\n}\n\nfunction base64ToArrayBuffer(base64: string): ArrayBuffer {\n\tlet binaryString = atob(base64);\n\tlet len = binaryString.length;\n\tlet bytes = new Uint8Array(len);\n\tfor (let i = 0; i < len; i++) {\n\t\tbytes[i] = binaryString.charCodeAt(i);\n\t}\n\treturn bytes.buffer;\n}\n\nfunction parseSvgImageSize(src: string, data: string) {\n\t// Parse the SVG image size\n\tconst svgMatch = data.match(SVG_ATTRS_REGEX);\n\tif (!svgMatch) throw new Error(`Failed to parse SVG from ${src}`);\n\n\tconst svgTag = svgMatch[0];\n\tconst viewBoxMatch = VIEWBOX_REGEX.exec(svgTag);\n\tconst widthMatch = WIDTH_REGEX.exec(svgTag);\n\tconst heightMatch = HEIGHT_REGEX.exec(svgTag);\n\n\tlet viewBox = viewBoxMatch ? parseViewBox(viewBoxMatch[1]) : null;\n\n\tif (!viewBox && (!widthMatch || !heightMatch)) {\n\t\tthrow new Error(`Failed to parse SVG from ${src}: missing \"viewBox\"`);\n\t}\n\n\tconst size = viewBox\n\t\t? [viewBox[2], viewBox[3]]\n\t\t: [+widthMatch[1], +heightMatch[1]];\n\n\tconst ratio = size[0] / size[1];\n\tconst imageSize: [number, number] =\n\t\twidthMatch && heightMatch\n\t\t\t? [+widthMatch[1], +heightMatch[1]]\n\t\t\t: widthMatch\n\t\t\t? [+widthMatch[1], +widthMatch[1] / ratio]\n\t\t\t: heightMatch\n\t\t\t? [+heightMatch[1] * ratio, +heightMatch[1]]\n\t\t\t: [size[0], size[1]];\n\n\treturn imageSize;\n}\n\nfunction arrayBufferToDataUri(data: ArrayBuffer) {\n\tlet imageSize: [number, number];\n\n\tconst imageType = detectContentType(new Uint8Array(data));\n\n\tswitch (imageType) {\n\t\tcase PNG:\n\t\tcase APNG:\n\t\t\timageSize = parsePNG(data);\n\t\t\tbreak;\n\t\tcase GIF:\n\t\t\timageSize = parseGIF(data);\n\t\t\tbreak;\n\t\tcase JPEG:\n\t\t\timageSize = parseJPEG(data);\n\t\t\tbreak;\n\t}\n\n\tif (!ALLOWED_IMAGE_TYPES.includes(imageType)) {\n\t\tthrow new Error(`Unsupported image type: ${imageType || 'unknown'}`);\n\t}\n\treturn [\n\t\t`data:${imageType};base64,${arrayBufferToBase64(data)}`,\n\t\timageSize\n\t] as const;\n}\n\nexport async function resolveImageData(\n\tsrc: string | ArrayBuffer\n): Promise<ResolvedImageData> {\n\tif (!src) {\n\t\tthrow new Error('Image source is not provided.');\n\t}\n\n\t// ArrayBuffer\n\tif (typeof src === 'object') {\n\t\tconst [newSrc, imageSize] = arrayBufferToDataUri(src);\n\t\treturn [newSrc, ...imageSize] as ResolvedImageData;\n\t}\n\n\tif (\n\t\t(src.startsWith('\"') && src.endsWith('\"')) ||\n\t\t(src.startsWith(\"'\") && src.endsWith(\"'\"))\n\t) {\n\t\tsrc = src.slice(1, -1);\n\t}\n\n\t// Throw error if the image source is not an absolute URL in server environment\n\t// Should be after slicing quotes to avoid throwing error too early\n\tif (typeof window === 'undefined') {\n\t\tif (!src.startsWith('http') && !src.startsWith('data:')) {\n\t\t\tthrow new Error(`Image source must be an absolute URL: ${src}`);\n\t\t}\n\t}\n\n\tif (src.startsWith('data:')) {\n\t\tlet decodedURI: { imageType; encodingType; dataString };\n\n\t\ttry {\n\t\t\tdecodedURI =\n\t\t\t\t/data:(?<imageType>[a-z/+]+)(;[^;=]+=[^;=]+)*?(;(?<encodingType>[^;,]+))?,(?<dataString>.*)/g.exec(\n\t\t\t\t\tsrc\n\t\t\t\t).groups as typeof decodedURI;\n\t\t} catch (err) {\n\t\t\tconsole.warn('Image data URI resolved without size:' + src);\n\t\t\treturn [src];\n\t\t}\n\n\t\tconst { imageType, encodingType, dataString } = decodedURI;\n\t\tif (imageType === SVG) {\n\t\t\tconst utf8Src =\n\t\t\t\tencodingType === 'base64'\n\t\t\t\t\t? atob(dataString)\n\t\t\t\t\t: decodeURIComponent(dataString.replace(/ /g, '%20'));\n\t\t\tconst base64Src =\n\t\t\t\tencodingType === 'base64'\n\t\t\t\t\t? src\n\t\t\t\t\t: `data:image/svg+xml;base64,${btoa(utf8Src)}`;\n\t\t\tlet imageSize = parseSvgImageSize(src, utf8Src);\n\t\t\tcache.set(src, [base64Src, ...imageSize]);\n\t\t\treturn [base64Src, ...imageSize];\n\t\t} else if (encodingType === 'base64') {\n\t\t\tlet imageSize: [number, number];\n\t\t\tconst data = base64ToArrayBuffer(dataString);\n\t\t\tswitch (imageType) {\n\t\t\t\tcase PNG:\n\t\t\t\tcase APNG:\n\t\t\t\t\timageSize = parsePNG(data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase GIF:\n\t\t\t\t\timageSize = parseGIF(data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase JPEG:\n\t\t\t\t\timageSize = parseJPEG(data);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcache.set(src, [src, ...imageSize]);\n\t\t\treturn [src, ...imageSize];\n\t\t} else {\n\t\t\tconsole.warn('Image data URI resolved without size:' + src);\n\t\t\tcache.set(src, [src]);\n\t\t\treturn [src];\n\t\t}\n\t}\n\n\tif (!globalThis.fetch) {\n\t\tthrow new Error('`fetch` is required to be polyfilled to load images.');\n\t}\n\n\tif (inflightRequests.has(src)) {\n\t\treturn inflightRequests.get(src);\n\t}\n\tconst cached = cache.get(src);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\tconst url = src;\n\tconst promise = fetch(url)\n\t\t.then((res): Promise<string | ArrayBuffer> => {\n\t\t\tconst type = res.headers.get('content-type');\n\n\t\t\t// Handle SVG specially\n\t\t\tif (type === 'image/svg+xml' || type === 'application/svg+xml') {\n\t\t\t\treturn res.text();\n\t\t\t}\n\n\t\t\treturn res.arrayBuffer();\n\t\t})\n\t\t.then(data => {\n\t\t\tif (typeof data === 'string') {\n\t\t\t\ttry {\n\t\t\t\t\tconst newSrc = `data:image/svg+xml;base64,${btoa(data)}`;\n\t\t\t\t\t// Parse the SVG image size\n\t\t\t\t\tconst imageSize = parseSvgImageSize(url, data);\n\t\t\t\t\treturn [newSrc, ...imageSize] as ResolvedImageData;\n\t\t\t\t} catch (e) {\n\t\t\t\t\tthrow new Error(`Failed to parse SVG image: ${e.message}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst [newSrc, imageSize] = arrayBufferToDataUri(data);\n\t\t\treturn [newSrc, ...imageSize] as ResolvedImageData;\n\t\t})\n\t\t.then(result => {\n\t\t\tcache.set(url, result);\n\t\t\treturn result;\n\t\t})\n\t\t.catch(err => {\n\t\t\tconsole.error(`Can't load image ${url}: ` + err.message);\n\t\t\tcache.set(url, []);\n\t\t\treturn [] as const;\n\t\t});\n\n\tinflightRequests.set(url, promise);\n\treturn promise;\n}\n\n/**\n * Inspects the first few bytes of a buffer to determine if\n * it matches the \"magic number\" of known file signatures.\n * https://en.wikipedia.org/wiki/List_of_file_signatures\n */\nfunction detectContentType(buffer: Uint8Array) {\n\tif ([0xff, 0xd8, 0xff].every((b, i) => buffer[i] === b)) {\n\t\treturn JPEG;\n\t}\n\tif (\n\t\t[0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a].every(\n\t\t\t(b, i) => buffer[i] === b\n\t\t)\n\t) {\n\t\tif (detectAPNG(buffer)) {\n\t\t\treturn APNG;\n\t\t}\n\t\treturn PNG;\n\t}\n\tif ([0x47, 0x49, 0x46, 0x38].every((b, i) => buffer[i] === b)) {\n\t\treturn GIF;\n\t}\n\tif (\n\t\t[0x52, 0x49, 0x46, 0x46, 0, 0, 0, 0, 0x57, 0x45, 0x42, 0x50].every(\n\t\t\t(b, i) => !b || buffer[i] === b\n\t\t)\n\t) {\n\t\treturn WEBP;\n\t}\n\tif ([0x3c, 0x3f, 0x78, 0x6d, 0x6c].every((b, i) => buffer[i] === b)) {\n\t\treturn SVG;\n\t}\n\tif (\n\t\t[0, 0, 0, 0, 0x66, 0x74, 0x79, 0x70, 0x61, 0x76, 0x69, 0x66].every(\n\t\t\t(b, i) => !b || buffer[i] === b\n\t\t)\n\t) {\n\t\treturn AVIF;\n\t}\n\treturn null;\n}\n\nfunction detectAPNG(bytes: Uint8Array) {\n\tconst dv = new DataView(bytes.buffer);\n\tlet type: string,\n\t\tlength: number,\n\t\toff = 8,\n\t\tisAPNG = false;\n\twhile (!isAPNG && type !== 'IEND' && off < bytes.length) {\n\t\tlength = dv.getUint32(off);\n\t\tconst chars = bytes.subarray(off + 4, off + 8);\n\t\ttype = String.fromCharCode(...chars);\n\t\tisAPNG = type === 'acTL';\n\t\toff += 12 + length;\n\t}\n\treturn isAPNG;\n}\n","import type { ReactElement, ReactNode } from 'react';\nimport { resolveImageData, cache } from './image.js';\nimport { isReactElement, parseViewBox, midline } from '../utils.js';\n\n// Based on\n// https://raw.githubusercontent.com/facebook/react/master/packages/react-dom/src/shared/possibleStandardNames.js\nconst ATTRIBUTE_MAPPING = {\n\taccentHeight: 'accent-height',\n\talignmentBaseline: 'alignment-baseline',\n\tarabicForm: 'arabic-form',\n\tbaselineShift: 'baseline-shift',\n\tcapHeight: 'cap-height',\n\tclipPath: 'clip-path',\n\tclipRule: 'clip-rule',\n\tcolorInterpolation: 'color-interpolation',\n\tcolorInterpolationFilters: 'color-interpolation-filters',\n\tcolorProfile: 'color-profile',\n\tcolorRendering: 'color-rendering',\n\tdominantBaseline: 'dominant-baseline',\n\tenableBackground: 'enable-background',\n\tfillOpacity: 'fill-opacity',\n\tfillRule: 'fill-rule',\n\tfloodColor: 'flood-color',\n\tfloodOpacity: 'flood-opacity',\n\tfontFamily: 'font-family',\n\tfontSize: 'font-size',\n\tfontSizeAdjust: 'font-size-adjust',\n\tfontStretch: 'font-stretch',\n\tfontStyle: 'font-style',\n\tfontVariant: 'font-variant',\n\tfontWeight: 'font-weight',\n\tglyphName: 'glyph-name',\n\tglyphOrientationHorizontal: 'glyph-orientation-horizontal',\n\tglyphOrientationVertical: 'glyph-orientation-vertical',\n\thorizAdvX: 'horiz-adv-x',\n\thorizOriginX: 'horiz-origin-x',\n\thref: 'href',\n\timageRendering: 'image-rendering',\n\tletterSpacing: 'letter-spacing',\n\tlightingColor: 'lighting-color',\n\tmarkerEnd: 'marker-end',\n\tmarkerMid: 'marker-mid',\n\tmarkerStart: 'marker-start',\n\toverlinePosition: 'overline-position',\n\toverlineThickness: 'overline-thickness',\n\tpaintOrder: 'paint-order',\n\tpanose1: 'panose-1',\n\tpointerEvents: 'pointer-events',\n\trenderingIntent: 'rendering-intent',\n\tshapeRendering: 'shape-rendering',\n\tstopColor: 'stop-color',\n\tstopOpacity: 'stop-opacity',\n\tstrikethroughPosition: 'strikethrough-position',\n\tstrikethroughThickness: 'strikethrough-thickness',\n\tstrokeDasharray: 'stroke-dasharray',\n\tstrokeDashoffset: 'stroke-dashoffset',\n\tstrokeLinecap: 'stroke-linecap',\n\tstrokeLinejoin: 'stroke-linejoin',\n\tstrokeMiterlimit: 'stroke-miterlimit',\n\tstrokeOpacity: 'stroke-opacity',\n\tstrokeWidth: 'stroke-width',\n\ttextAnchor: 'text-anchor',\n\ttextDecoration: 'text-decoration',\n\ttextRendering: 'text-rendering',\n\tunderlinePosition: 'underline-position',\n\tunderlineThickness: 'underline-thickness',\n\tunicodeBidi: 'unicode-bidi',\n\tunicodeRange: 'unicode-range',\n\tunitsPerEm: 'units-per-em',\n\tvAlphabetic: 'v-alphabetic',\n\tvHanging: 'v-hanging',\n\tvIdeographic: 'v-ideographic',\n\tvMathematical: 'v-mathematical',\n\tvectorEffect: 'vector-effect',\n\tvertAdvY: 'vert-adv-y',\n\tvertOriginX: 'vert-origin-x',\n\tvertOriginY: 'vert-origin-y',\n\twordSpacing: 'word-spacing',\n\twritingMode: 'writing-mode',\n\txHeight: 'x-height',\n\txlinkActuate: 'xlink:actuate',\n\txlinkArcrole: 'xlink:arcrole',\n\txlinkHref: 'xlink:href',\n\txlinkRole: 'xlink:role',\n\txlinkShow: 'xlink:show',\n\txlinkTitle: 'xlink:title',\n\txlinkType: 'xlink:type',\n\txmlBase: 'xml:base',\n\txmlLang: 'xml:lang',\n\txmlSpace: 'xml:space',\n\txmlnsXlink: 'xmlns:xlink'\n} as const;\n\n// From https://github.com/yoksel/url-encoder/blob/master/src/js/script.js\nconst SVGSymbols = /[\\r\\n%#()<>?[\\\\\\]^`{|}\"']/g;\n\nfunction translateSVGNodeToSVGString(\n\tnode: ReactElement | string | (ReactElement | string)[],\n\tinheritedColor: string\n): string {\n\tif (!node) return '';\n\tif (Array.isArray(node)) {\n\t\treturn node\n\t\t\t.map(n => translateSVGNodeToSVGString(n, inheritedColor))\n\t\t\t.join('');\n\t}\n\tif (typeof node !== 'object') return String(node);\n\n\tconst type = node.type;\n\tif (type === 'text') {\n\t\tthrow new Error(\n\t\t\t'<text> nodes are not currently supported, please convert them to <path>'\n\t\t);\n\t}\n\n\tconst { children, style, ...restProps } = node.props || {};\n\tconst currentColor = style?.color || inheritedColor;\n\n\tconst attrs = `${Object.entries(restProps)\n\t\t.map(([k, _v]) => {\n\t\t\tif (typeof _v === 'string' && _v.toLowerCase() === 'currentcolor') {\n\t\t\t\t_v = currentColor;\n\t\t\t}\n\n\t\t\tif ((k === 'href' || k === 'xlinkHref') && type === 'image') {\n\t\t\t\treturn ` ${ATTRIBUTE_MAPPING[k] || k}=\"${\n\t\t\t\t\tcache.get(_v as string)[0]\n\t\t\t\t}\"`;\n\t\t\t}\n\t\t\treturn ` ${ATTRIBUTE_MAPPING[k] || k}=\"${_v}\"`;\n\t\t})\n\t\t.join('')}`;\n\n\tconst styles = style\n\t\t? ` style=\"${Object.entries(style)\n\t\t\t\t.map(([k, _v]) => `${midline(k)}:${_v}`)\n\t\t\t\t.join(';')}\"`\n\t\t: '';\n\n\treturn `<${type}${attrs}${styles}>${translateSVGNodeToSVGString(\n\t\tchildren,\n\t\tcurrentColor\n\t)}</${type}>`;\n}\n/**\n * pre process node and resolve absolute link to img data for image element\n * @param node ReactNode\n * @returns\n */\nexport async function preProcessNode(node: ReactNode) {\n\tconst set = new Set<string | Buffer | ArrayBuffer>();\n\tconst walk = (_node: ReactNode) => {\n\t\tif (!_node) return;\n\t\tif (!isReactElement(_node)) return;\n\n\t\tif (Array.isArray(_node)) {\n\t\t\t_node.forEach(v => walk(v));\n\t\t\treturn;\n\t\t} else if (typeof _node === 'object') {\n\t\t\tif (_node.type === 'image') {\n\t\t\t\tconst imageSrc = _node.props.href || _node.props.xlinkHref;\n\t\t\t\tif (imageSrc) {\n\t\t\t\t\tif (set.has(imageSrc)) {\n\t\t\t\t\t\t// do nothing\n\t\t\t\t\t} else {\n\t\t\t\t\t\tset.add(imageSrc);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (_node.type === 'img') {\n\t\t\t\tif (set.has(_node.props.src)) {\n\t\t\t\t\t// do nothing\n\t\t\t\t} else {\n\t\t\t\t\tset.add(_node.props.src);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// do nothing\n\t\t\t}\n\t\t}\n\n\t\tArray.isArray(_node.props.children)\n\t\t\t? _node.props.children.map(c => walk(c))\n\t\t\t: walk(_node.props.children);\n\t};\n\n\twalk(node);\n\n\treturn Promise.all(Array.from(set).map(s => resolveImageData(s)));\n}\n\nexport async function SVGNodeToImage(\n\tnode: ReactElement,\n\tinheritedColor: string\n): Promise<string> {\n\tlet {\n\t\tviewBox,\n\t\tviewbox,\n\t\twidth,\n\t\theight,\n\t\tclassName,\n\t\tstyle,\n\t\tchildren,\n\t\t...restProps\n\t} = node.props || {};\n\n\tviewBox ||= viewbox;\n\n\t// We directly assign the xmlns attribute here to deduplicate.\n\trestProps.xmlns = 'http://www.w3.org/2000/svg';\n\n\tconst currentColor = style?.color || inheritedColor;\n\tconst viewBoxSize = parseViewBox(viewBox);\n\n\t// ratio = height / width\n\tconst ratio = viewBoxSize ? viewBoxSize[3] / viewBoxSize[2] : null;\n\twidth = width || (ratio && height) ? height / ratio : null;\n\theight = height || (ratio && width) ? width * ratio : null;\n\n\trestProps.width = width;\n\trestProps.height = height;\n\tif (viewBox) restProps.viewBox = viewBox;\n\n\treturn `data:image/svg+xml;utf8,${`<svg ${Object.entries(restProps)\n\t\t.map(([k, _v]) => {\n\t\t\tif (typeof _v === 'string' && _v.toLowerCase() === 'currentcolor') {\n\t\t\t\t_v = currentColor;\n\t\t\t}\n\t\t\treturn ` ${ATTRIBUTE_MAPPING[k] || k}=\"${_v}\"`;\n\t\t})\n\t\t.join('')}>${translateSVGNodeToSVGString(\n\t\tchildren,\n\t\tcurrentColor\n\t)}</svg>`.replace(SVGSymbols, encodeURIComponent)}`;\n}\n","/**\n * Pre-defined styles for elements. Here we hand pick some from Chromium's\n * default styles:\n * https://chromium.googlesource.com/chromium/blink/+/master/Source/core/css/html.css\n *\n * We try to only include commonly used, styling elements rather than semantic elements.\n */\n\nconst DEFAULT_DISPLAY = 'flex';\n\nexport default {\n\t// Generic block-level elements\n\tp: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\tmarginTop: '1em',\n\t\tmarginBottom: '1em'\n\t},\n\tdiv: {\n\t\tdisplay: DEFAULT_DISPLAY\n\t},\n\tblockquote: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\tmarginTop: '1em',\n\t\tmarginBottom: '1em',\n\t\tmarginLeft: 40,\n\t\tmarginRight: 40\n\t},\n\tcenter: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\ttextAlign: 'center'\n\t},\n\thr: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\tmarginTop: '0.5em',\n\t\tmarginBottom: '0.5em',\n\t\tmarginLeft: 'auto',\n\t\tmarginRight: 'auto',\n\t\tborderWidth: 1,\n\t\t// We don't have `inset`\n\t\tborderStyle: 'solid'\n\t},\n\t// Heading elements\n\th1: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\tfontSize: '2em',\n\t\tmarginTop: '0.67em',\n\t\tmarginBottom: '0.67em',\n\t\tmarginLeft: 0,\n\t\tmarginRight: 0,\n\t\tfontWeight: 'bold'\n\t},\n\th2: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\tfontSize: '1.5em',\n\t\tmarginTop: '0.83em',\n\t\tmarginBottom: '0.83em',\n\t\tmarginLeft: 0,\n\t\tmarginRight: 0,\n\t\tfontWeight: 'bold'\n\t},\n\th3: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\tfontSize: '1.17em',\n\t\tmarginTop: '1em',\n\t\tmarginBottom: '1em',\n\t\tmarginLeft: 0,\n\t\tmarginRight: 0,\n\t\tfontWeight: 'bold'\n\t},\n\th4: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\tmarginTop: '1.33em',\n\t\tmarginBottom: '1.33em',\n\t\tmarginLeft: 0,\n\t\tmarginRight: 0,\n\t\tfontWeight: 'bold'\n\t},\n\th5: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\tfontSize: '0.83em',\n\t\tmarginTop: '1.67em',\n\t\tmarginBottom: '1.67em',\n\t\tmarginLeft: 0,\n\t\tmarginRight: 0,\n\t\tfontWeight: 'bold'\n\t},\n\th6: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\tfontSize: '0.67em',\n\t\tmarginTop: '2.33em',\n\t\tmarginBottom: '2.33em',\n\t\tmarginLeft: 0,\n\t\tmarginRight: 0,\n\t\tfontWeight: 'bold'\n\t},\n\t// Tables\n\t// Lists\n\t// Form elements\n\t// Inline elements\n\tu: {\n\t\ttextDecoration: 'underline'\n\t},\n\tstrong: {\n\t\tfontWeight: 'bold'\n\t},\n\tb: {\n\t\tfontWeight: 'bold'\n\t},\n\ti: {\n\t\tfontStyle: 'italic'\n\t},\n\tem: {\n\t\tfontStyle: 'italic'\n\t},\n\tcode: {\n\t\tfontFamily: 'monospace'\n\t},\n\tkbd: {\n\t\tfontFamily: 'monospace'\n\t},\n\tpre: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\tfontFamily: 'monospace',\n\t\twhiteSpace: 'pre',\n\t\tmarginTop: '1em',\n\t\tmarginBottom: '1em'\n\t},\n\tmark: {\n\t\tbackgroundColor: 'yellow',\n\t\tcolor: 'black'\n\t},\n\tbig: {\n\t\tfontSize: 'larger'\n\t},\n\tsmall: {\n\t\tfontSize: 'smaller'\n\t},\n\ts: {\n\t\ttextDecoration: 'line-through'\n\t}\n};\n","import { SerializedStyle } from './expand.js';\n\nconst list = new Set([\n\t'color',\n\t'font',\n\t'fontFamily',\n\t'fontSize',\n\t'fontStyle',\n\t'fontWeight',\n\t'letterSpacing',\n\t'lineHeight',\n\t'textAlign',\n\t'textIndent',\n\t'textTransform',\n\t'textShadowOffset',\n\t'textShadowColor',\n\t'textShadowRadius',\n\t'WebkitTextStrokeWidth',\n\t'WebkitTextStrokeColor',\n\t'textDecorationLine',\n\t'textDecorationStyle',\n\t'textDecorationColor',\n\t'textDecorationSkipInk',\n\t'whiteSpace',\n\t'transform',\n\t'wordBreak',\n\t'tabSize',\n\n\t// Special case: SVG doesn't apply these to children elements so we need to\n\t// make it inheritable here.\n\t'opacity',\n\t'filter',\n\n\t// Special properties of Satori:\n\t'_viewportWidth',\n\t'_viewportHeight',\n\t'_inheritedClipPathId',\n\t'_inheritedMaskId',\n\t'_inheritedBackgroundClipTextPath',\n\t'_inheritedBackgroundClipTextHasBackground'\n]);\n\nexport default function inheritable(style: SerializedStyle): SerializedStyle {\n\tconst inheritedStyle: SerializedStyle = {};\n\tfor (const prop in style) {\n\t\t// CSS custom properties (--*) always inherit\n\t\tif (list.has(prop) || prop.startsWith('--')) {\n\t\t\tinheritedStyle[prop] = style[prop];\n\t\t}\n\t}\n\treturn inheritedStyle;\n}\n","/**\n * This module expands the CSS properties to get rid of shorthands, as well as\n * cleaning up some properties.\n */\n\nimport { getPropertyName, getStylesForProperty } from 'css-to-react-native';\nimport { parseElementStyle } from 'css-background-parser';\nimport { parse as parseBoxShadow } from 'css-box-shadow';\nimport cssColorParse from 'parse-css-color';\n\nimport CssDimension from '../vendor/parse-css-dimension/index.js';\nimport parseTransformOrigin, {\n\tParsedTransformOrigin\n} from '../transform-origin.js';\nimport { isString, lengthToNumber, v, splitEffects } from '../utils.js';\nimport { MaskProperty, parseMask } from '../parser/mask.js';\nimport { FontWeight, FontStyle } from '../font.js';\nimport {\n\textractCustomProperties,\n\tmergeVariables,\n\tresolveVariables,\n\tCSSVariables\n} from './variables.js';\n\n// https://react-cn.github.io/react/tips/style-props-value-px.html\nconst optOutPx = new Set([\n\t'flex',\n\t'flexGrow',\n\t'flexShrink',\n\t'flexBasis',\n\t'fontWeight',\n\t'lineHeight',\n\t'opacity',\n\t'scale',\n\t'scaleX',\n\t'scaleY'\n]);\nconst keepNumber = new Set(['lineHeight']);\n\nfunction handleFallbackColor(\n\tprop: string,\n\tparsed: Record<string, string>,\n\trawInput: string,\n\tcurrentColor: string\n) {\n\tif (\n\t\tprop === 'textDecoration' &&\n\t\t!rawInput.includes(parsed.textDecorationColor)\n\t) {\n\t\tparsed.textDecorationColor = currentColor;\n\t}\n\treturn parsed;\n}\n\nfunction purify(name: string, value?: string | number) {\n\tconst num = Number(value);\n\tif (isNaN(num)) return value;\n\tif (!optOutPx.has(name)) return num + 'px';\n\tif (keepNumber.has(name)) return num;\n\treturn String(value);\n}\n\nfunction handleSpecialCase(\n\tname: string,\n\tvalue: string | number,\n\tcurrentColor: string\n) {\n\tif (name === 'zIndex') {\n\t\tconsole.warn('`z-index` is currently not supported.');\n\t\treturn { [name]: value };\n\t}\n\n\tif (name === 'lineHeight') {\n\t\treturn { lineHeight: purify(name, value) };\n\t}\n\n\tif (name === 'fontFamily') {\n\t\treturn {\n\t\t\tfontFamily: (value as string).split(',').map(_v => {\n\t\t\t\treturn _v\n\t\t\t\t\t.trim()\n\t\t\t\t\t.replace(/(^['\"])|(['\"]$)/g, '')\n\t\t\t\t\t.toLocaleLowerCase();\n\t\t\t})\n\t\t};\n\t}\n\n\tif (name === 'borderRadius') {\n\t\tif (typeof value !== 'string' || !value.includes('/')) {\n\t\t\t// Regular border radius\n\t\t\treturn;\n\t\t}\n\t\t// Support the `border-radius: 10px / 20px` syntax.\n\t\tconst [horizontal, vertical] = value.split('/');\n\t\tconst vh = getStylesForProperty(name, horizontal, true);\n\t\tconst vv = getStylesForProperty(name, vertical, true);\n\t\tfor (const k in vh) {\n\t\t\tvv[k] = purify(name, vh[k]) + ' ' + purify(name, vv[k]);\n\t\t}\n\t\treturn vv;\n\t}\n\n\tif (/^border(Top|Right|Bottom|Left)?$/.test(name)) {\n\t\tconst resolved = getStylesForProperty('border', value, true);\n\n\t\t// Border width should be default to 3px (medium) instead of 1px:\n\t\t// https://w3c.github.io/csswg-drafts/css-backgrounds-3/#border-width\n\t\t// Although on Chrome it will be displayed as 1.5px but let's stick to the\n\t\t// spec.\n\t\tif (resolved.borderWidth === 1 && !String(value).includes('1px')) {\n\t\t\tresolved.borderWidth = 3;\n\t\t}\n\n\t\t// A trick to fix `border: 1px solid` to not use `black` but the inherited\n\t\t// `color` value. This is necessary because css-to-react-native automatically\n\t\t// fallbacks to default color values.\n\t\tif (\n\t\t\tresolved.borderColor === 'black' &&\n\t\t\t!String(value).includes('black')\n\t\t) {\n\t\t\tresolved.borderColor = currentColor;\n\t\t}\n\n\t\tconst purified = {\n\t\t\tWidth: purify(name + 'Width', resolved.borderWidth),\n\t\t\tStyle: v(\n\t\t\t\tresolved.borderStyle,\n\t\t\t\t{\n\t\t\t\t\tsolid: 'solid',\n\t\t\t\t\tdashed: 'dashed'\n\t\t\t\t},\n\t\t\t\t'solid',\n\t\t\t\tname + 'Style'\n\t\t\t),\n\t\t\tColor: resolved.borderColor\n\t\t};\n\n\t\tconst full = {};\n\t\tfor (const k of name === 'border'\n\t\t\t? ['Top', 'Right', 'Bottom', 'Left']\n\t\t\t: [name.slice(6)]) {\n\t\t\tfor (const p in purified) {\n\t\t\t\tfull['border' + k + p] = purified[p];\n\t\t\t}\n\t\t}\n\t\treturn full;\n\t}\n\n\tif (name === 'boxShadow') {\n\t\tif (!value) {\n\t\t\tthrow new Error('Invalid `boxShadow` value: \"' + value + '\".');\n\t\t}\n\t\treturn {\n\t\t\t[name]: typeof value === 'string' ? parseBoxShadow(value) : value\n\t\t};\n\t}\n\n\tif (name === 'transform') {\n\t\tif (typeof value !== 'string')\n\t\t\tthrow new Error('Invalid `transform` value.');\n\t\t// To support percentages in transform (which is not supported in RN), we\n\t\t// replace them with random symbols and then replace them back after parsing.\n\t\tconst symbols = {};\n\t\tconst replaced = value.replace(/(-?[\\d.]+%)/g, (_, _v) => {\n\t\t\tconst symbol = ~~(Math.random() * 1e9);\n\t\t\tsymbols[symbol] = _v;\n\t\t\treturn symbol + 'px';\n\t\t});\n\t\tconst parsed = getStylesForProperty('transform', replaced, true);\n\t\tfor (const t of parsed.transform) {\n\t\t\tfor (const k in t) {\n\t\t\t\tif (symbols[t[k]]) {\n\t\t\t\t\tt[k] = symbols[t[k]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn parsed;\n\t}\n\n\tif (name === 'background') {\n\t\tvalue = value.toString().trim();\n\t\tif (\n\t\t\t/^(linear-gradient|radial-gradient|url|repeating-linear-gradient|repeating-radial-gradient)\\(/.test(\n\t\t\t\tvalue\n\t\t\t)\n\t\t) {\n\t\t\treturn getStylesForProperty('backgroundImage', value, true);\n\t\t}\n\t\treturn getStylesForProperty('background', value, true);\n\t}\n\n\tif (name === 'textShadow') {\n\t\t// Handle multiple text shadows if provided.\n\t\tvalue = value.toString().trim();\n\t\tconst result = {};\n\n\t\tconst shadows = splitEffects(value);\n\n\t\tfor (const shadow of shadows) {\n\t\t\tconst styles = getStylesForProperty('textShadow', shadow, true);\n\t\t\tfor (const k in styles) {\n\t\t\t\tif (!result[k]) {\n\t\t\t\t\tresult[k] = [styles[k]];\n\t\t\t\t} else {\n\t\t\t\t\tresult[k].push(styles[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tif (name === 'WebkitTextStroke') {\n\t\tvalue = value.toString().trim();\n\t\tconst values = value.split(' ');\n\t\tif (values.length !== 2) {\n\t\t\tthrow new Error('Invalid `WebkitTextStroke` value.');\n\t\t}\n\n\t\treturn {\n\t\t\tWebkitTextStrokeWidth: purify(name, values[0]),\n\t\t\tWebkitTextStrokeColor: purify(name, values[1])\n\t\t};\n\t}\n\n\tif (name === 'backdropFilter' || name === 'WebkitBackdropFilter') {\n\t\treturn { backdropFilter: value };\n\t}\n\n\tif (name === 'textDecorationSkipInk') {\n\t\tconst normalized = value.toString().trim().toLowerCase();\n\t\tif (!['auto', 'none', 'all'].includes(normalized)) {\n\t\t\tthrow new Error('Invalid `textDecorationSkipInk` value.');\n\t\t}\n\n\t\treturn { textDecorationSkipInk: normalized };\n\t}\n\n\treturn;\n}\n\nfunction getErrorHint(name: string) {\n\tif (name === 'transform') {\n\t\treturn ' Only absolute lengths such as `10px` are supported.';\n\t}\n\treturn '';\n}\n\nconst RGB_SLASH = /rgb\\((\\d+)\\s+(\\d+)\\s+(\\d+)\\s*\\/\\s*([\\.\\d]+)\\)/;\nfunction normalizeColor(value: string | object) {\n\tif (typeof value === 'string') {\n\t\tif (RGB_SLASH.test(value.trim())) {\n\t\t\t// rgb(255 122 127 / .2) -> rgba(255, 122, 127, .2)\n\t\t\treturn value.trim().replace(RGB_SLASH, (_, r, g, b, a) => {\n\t\t\t\treturn `rgba(${r}, ${g}, ${b}, ${a})`;\n\t\t\t});\n\t\t}\n\t}\n\n\t// Recursively normalize colors in arrays and objects.\n\tif (typeof value === 'object' && value !== null) {\n\t\tfor (const k in value) {\n\t\t\tvalue[k] = normalizeColor(value[k]);\n\t\t}\n\t\treturn value;\n\t}\n\n\treturn value;\n}\n\ntype MainStyle = {\n\tcolor: string;\n\tfontSize: number;\n\ttransformOrigin: ParsedTransformOrigin;\n\tmaskImage: MaskProperty[];\n\topacity: number;\n\ttextTransform: string;\n\twhiteSpace: string;\n\twordBreak: string;\n\ttextAlign: string;\n\ttextIndent: number | string;\n\tlineHeight: number | string;\n\tletterSpacing: number;\n\n\tfontFamily: string | string[];\n\tfontWeight: FontWeight;\n\tfontStyle: FontStyle;\n\n\tborderTopWidth: number;\n\tborderLeftWidth: number;\n\tborderRightWidth: number;\n\tborderBottomWidth: number;\n\n\tpaddingTop: number;\n\tpaddingLeft: number;\n\tpaddingRight: number;\n\tpaddingBottom: number;\n\n\tflexGrow: number;\n\tflexShrink: number;\n\n\tgap: number;\n\trowGap: number;\n\tcolumnGap: number;\n\n\ttextShadowOffset: {\n\t\twidth: number;\n\t\theight: number;\n\t}[];\n\ttextShadowColor: string[];\n\ttextShadowRadius: number[];\n\tWebkitTextStrokeWidth: number;\n\tWebkitTextStrokeColor: string;\n\ttextDecorationSkipInk: 'auto' | 'none' | 'all';\n};\n\ntype OtherStyle = Exclude<\n\tRecord<PropertyKey, string | number>,\n\tkeyof MainStyle\n>;\n\nexport type SerializedStyle = Partial<MainStyle & OtherStyle>;\n\nexport default function expand(\n\tstyle: Record<string, string | number> | undefined,\n\tinheritedStyle: SerializedStyle\n): SerializedStyle {\n\tconst serializedStyle: SerializedStyle = {};\n\n\t// Extract inherited CSS variables\n\tconst inheritedVariables: CSSVariables = {};\n\tfor (const prop in inheritedStyle) {\n\t\tif (prop.startsWith('--')) {\n\t\t\tinheritedVariables[prop] = String(inheritedStyle[prop]);\n\t\t}\n\t}\n\n\t// Extract and resolve CSS variables from current style\n\tlet currentVariables: CSSVariables = {};\n\tlet processableStyle = style;\n\n\tif (style) {\n\t\tconst { variables, remainingStyle } = extractCustomProperties(style);\n\t\tcurrentVariables = variables;\n\t\tprocessableStyle = remainingStyle;\n\t}\n\n\t// Merge variables (current overrides inherited)\n\tconst mergedVariables = mergeVariables(\n\t\tinheritedVariables,\n\t\tcurrentVariables\n\t);\n\n\t// Store merged variables in the serialized style for inheritance\n\tfor (const varName in mergedVariables) {\n\t\tserializedStyle[varName] = mergedVariables[varName];\n\t}\n\n\tif (processableStyle) {\n\t\t// Resolve CSS variables in color property before processing\n\t\tconst resolvedColor = processableStyle.color\n\t\t\t? resolveVariables(processableStyle.color, mergedVariables)\n\t\t\t: undefined;\n\n\t\tconst currentColor = getCurrentColor(\n\t\t\tresolvedColor as string,\n\t\t\tinheritedStyle.color\n\t\t);\n\n\t\tserializedStyle.color = currentColor;\n\n\t\tfor (const prop in processableStyle) {\n\t\t\t// Internal properties.\n\t\t\tif (prop.startsWith('_')) {\n\t\t\t\tserializedStyle[prop] = processableStyle[prop];\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (prop === 'color') {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst name = getPropertyName(prop);\n\t\t\t// Resolve CSS variables before preprocessing\n\t\t\tconst resolvedValue = resolveVariables(\n\t\t\t\tprocessableStyle[prop],\n\t\t\t\tmergedVariables\n\t\t\t);\n\t\t\tconst value = preprocess(resolvedValue, currentColor);\n\n\t\t\ttry {\n\t\t\t\tconst resolvedStyle =\n\t\t\t\t\thandleSpecialCase(name, value, currentColor) ||\n\t\t\t\t\thandleFallbackColor(\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tgetStylesForProperty(name, purify(name, value), true),\n\t\t\t\t\t\tvalue as string,\n\t\t\t\t\t\tcurrentColor\n\t\t\t\t\t);\n\n\t\t\t\tObject.assign(serializedStyle, resolvedStyle);\n\t\t\t} catch (err) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\terr.message +\n\t\t\t\t\t\t// Attach the extra information of the rule itself if it's not included in\n\t\t\t\t\t\t// the error message.\n\t\t\t\t\t\t(err.message.includes(value)\n\t\t\t\t\t\t\t? '\\n ' + getErrorHint(name)\n\t\t\t\t\t\t\t: `\\n in CSS rule \\`${name}: ${value}\\`.${getErrorHint(\n\t\t\t\t\t\t\t\t\tname\n\t\t\t\t\t\t\t )}`)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Parse background images.\n\tif (serializedStyle.backgroundImage) {\n\t\tconst { backgrounds } = parseElementStyle(serializedStyle);\n\t\tserializedStyle.backgroundImage = backgrounds;\n\t}\n\n\tif (serializedStyle.maskImage || serializedStyle['WebkitMaskImage']) {\n\t\tserializedStyle.maskImage = parseMask(serializedStyle);\n\t}\n\n\t// Calculate the base font size.\n\tconst baseFontSize = calcBaseFontSize(\n\t\tserializedStyle.fontSize,\n\t\tinheritedStyle.fontSize\n\t);\n\tif (typeof serializedStyle.fontSize !== 'undefined') {\n\t\tserializedStyle.fontSize = baseFontSize;\n\t}\n\n\tif (serializedStyle.transformOrigin) {\n\t\tserializedStyle.transformOrigin = parseTransformOrigin(\n\t\t\tserializedStyle.transformOrigin as any,\n\t\t\tbaseFontSize\n\t\t);\n\t}\n\n\tfor (const prop in serializedStyle) {\n\t\tlet value = serializedStyle[prop];\n\n\t\t// Line height needs to be relative.\n\t\tif (prop === 'lineHeight') {\n\t\t\tif (typeof value === 'string' && value !== 'normal') {\n\t\t\t\tvalue = serializedStyle[prop] =\n\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tbaseFontSize,\n\t\t\t\t\t\tbaseFontSize,\n\t\t\t\t\t\tinheritedStyle,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) / baseFontSize;\n\t\t\t}\n\t\t} else {\n\t\t\t// Convert em and rem values to px (number).\n\t\t\tif (typeof value === 'string') {\n\t\t\t\tconst len = lengthToNumber(\n\t\t\t\t\tvalue,\n\t\t\t\t\tbaseFontSize,\n\t\t\t\t\tbaseFontSize,\n\t\t\t\t\tinheritedStyle\n\t\t\t\t);\n\t\t\t\tif (typeof len !== 'undefined') serializedStyle[prop] = len;\n\t\t\t\tvalue = serializedStyle[prop];\n\t\t\t}\n\n\t\t\tif (typeof value === 'string' || typeof value === 'object') {\n\t\t\t\tconst color = normalizeColor(value);\n\t\t\t\tif (color) {\n\t\t\t\t\tserializedStyle[prop] = color as any;\n\t\t\t\t}\n\t\t\t\tvalue = serializedStyle[prop];\n\t\t\t}\n\t\t}\n\n\t\t// Inherit the opacity.\n\t\tif (prop === 'opacity' && typeof value === 'number') {\n\t\t\tserializedStyle.opacity = value * inheritedStyle.opacity;\n\t\t}\n\n\t\tif (prop === 'transform') {\n\t\t\tconst transforms = value as any as {\n\t\t\t\t[type: string]: number | string;\n\t\t\t}[];\n\n\t\t\tfor (const transform of transforms) {\n\t\t\t\tconst type = Object.keys(transform)[0];\n\t\t\t\tconst _v = transform[type];\n\n\t\t\t\t// Convert em, rem, vw, vh values to px (number), but keep % values.\n\t\t\t\tconst len =\n\t\t\t\t\ttypeof _v === 'string'\n\t\t\t\t\t\t? lengthToNumber(\n\t\t\t\t\t\t\t\t_v,\n\t\t\t\t\t\t\t\tbaseFontSize,\n\t\t\t\t\t\t\t\tbaseFontSize,\n\t\t\t\t\t\t\t\tinheritedStyle\n\t\t\t\t\t\t ) ?? _v\n\t\t\t\t\t\t: _v;\n\t\t\t\ttransform[type] = len;\n\t\t\t}\n\t\t}\n\n\t\tif (prop === 'textShadowRadius') {\n\t\t\tconst textShadowRadius = value as unknown as Array<number | string>;\n\n\t\t\tserializedStyle.textShadowRadius = textShadowRadius.map(_v =>\n\t\t\t\tlengthToNumber(_v, baseFontSize, 0, inheritedStyle, false)\n\t\t\t);\n\t\t}\n\n\t\tif (prop === 'textShadowOffset') {\n\t\t\tconst textShadowOffset = value as unknown as Array<{\n\t\t\t\twidth: number | string;\n\t\t\t\theight: number | string;\n\t\t\t}>;\n\n\t\t\tserializedStyle.textShadowOffset = textShadowOffset.map(\n\t\t\t\t({ height, width }) => ({\n\t\t\t\t\theight: lengthToNumber(\n\t\t\t\t\t\theight,\n\t\t\t\t\t\tbaseFontSize,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tinheritedStyle,\n\t\t\t\t\t\tfalse\n\t\t\t\t\t),\n\t\t\t\t\twidth: lengthToNumber(\n\t\t\t\t\t\twidth,\n\t\t\t\t\t\tbaseFontSize,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tinheritedStyle,\n\t\t\t\t\t\tfalse\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t}\n\n\treturn serializedStyle;\n}\n\nfunction calcBaseFontSize(\n\tsize: number | string,\n\tinheritedSize: number\n): number {\n\tif (typeof size === 'number') return size;\n\n\ttry {\n\t\tconst parsed = new CssDimension(size);\n\t\tswitch (parsed.unit) {\n\t\t\tcase 'em':\n\t\t\t\treturn parsed.value * inheritedSize;\n\t\t\tcase 'rem':\n\t\t\t\treturn parsed.value * 16;\n\t\t}\n\t} catch (err) {\n\t\treturn inheritedSize;\n\t}\n}\n\n/**\n * @see https://github.com/RazrFalcon/resvg/issues/579\n */\nfunction refineHSL(color: string) {\n\tif (color.startsWith('hsl')) {\n\t\tconst t = cssColorParse(color);\n\t\tconst [h, s, l] = t.values;\n\n\t\treturn `hsl(${[h, `${s}%`, `${l}%`]\n\t\t\t.concat(t.alpha === 1 ? [] : [t.alpha])\n\t\t\t.join(',')})`;\n\t}\n\n\treturn color;\n}\n\nfunction getCurrentColor(\n\tcolor: string | undefined,\n\tinheritedColor: string\n): string {\n\tif (color && color.toLowerCase() !== 'currentcolor') {\n\t\treturn refineHSL(color);\n\t}\n\n\treturn refineHSL(inheritedColor);\n}\n\nfunction convertCurrentColorToActualValue(\n\tvalue: string,\n\tcurrentColor: string\n): string {\n\treturn value.replace(/currentcolor/gi, currentColor);\n}\n\nfunction preprocess(\n\tvalue: string | number,\n\tcurrentColor: string\n): string | number {\n\tif (isString(value)) {\n\t\tvalue = convertCurrentColorToActualValue(value, currentColor);\n\t}\n\n\treturn value;\n}\n","import valueParser from 'postcss-value-parser';\n\nimport CssDimension from './vendor/parse-css-dimension/index.js';\n\n/**\n * If key for each direction is missing, assume default (50%)\n */\nexport interface ParsedTransformOrigin {\n\t/** Relative horizontal transform origin in % */\n\txRelative?: number;\n\t/** Relative vertical transform origin in % */\n\tyRelative?: number;\n\t/** Absolute horizontal transform origin in pixels */\n\txAbsolute?: number;\n\t/** Absolute horizontal transform origin in pixels */\n\tyAbsolute?: number;\n}\n\ninterface ParsedUnit {\n\t/** Relative unit in % */\n\trelative?: number;\n\t/** Absolute unit in pixels */\n\tabsolute?: number;\n}\n\nfunction parseUnit(word: string, baseFontSize: number): ParsedUnit {\n\ttry {\n\t\tconst parsed = new CssDimension(word);\n\t\tswitch (parsed.unit) {\n\t\t\tcase 'px':\n\t\t\t\treturn { absolute: parsed.value };\n\t\t\tcase 'em':\n\t\t\t\treturn { absolute: parsed.value * baseFontSize };\n\t\t\tcase 'rem':\n\t\t\t\treturn { absolute: parsed.value * 16 };\n\t\t\tcase '%':\n\t\t\t\treturn { relative: parsed.value };\n\t\t\tdefault:\n\t\t\t\treturn {};\n\t\t}\n\t} catch (e) {\n\t\treturn {};\n\t}\n}\n\nfunction handleWord(\n\tword: string,\n\tbaseFontSize: number,\n\tunitIsHorizontal: boolean\n) {\n\tswitch (word) {\n\t\tcase 'top':\n\t\t\treturn { yRelative: 0 };\n\t\tcase 'left':\n\t\t\treturn { xRelative: 0 };\n\t\tcase 'right':\n\t\t\treturn { xRelative: 100 };\n\t\tcase 'bottom':\n\t\t\treturn { yRelative: 100 };\n\t\tcase 'center':\n\t\t\treturn {};\n\t\tdefault: {\n\t\t\tconst parsedUnit = parseUnit(word, baseFontSize);\n\t\t\treturn parsedUnit.absolute\n\t\t\t\t? {\n\t\t\t\t\t\t[unitIsHorizontal ? 'xAbsolute' : 'yAbsolute']:\n\t\t\t\t\t\t\tparsedUnit.absolute\n\t\t\t\t }\n\t\t\t\t: parsedUnit.relative\n\t\t\t\t? {\n\t\t\t\t\t\t[unitIsHorizontal ? 'xRelative' : 'yRelative']:\n\t\t\t\t\t\t\tparsedUnit.relative\n\t\t\t\t }\n\t\t\t\t: {};\n\t\t}\n\t}\n}\n\nexport default function parseTransformOrigin(\n\tvalue: string | number,\n\tbaseFontSize: number\n): ParsedTransformOrigin {\n\t// If it's a single value and a number, then it's horizontal\n\tif (typeof value === 'number') {\n\t\treturn { xAbsolute: value };\n\t}\n\tlet words: string[];\n\ttry {\n\t\twords = valueParser(value)\n\t\t\t.nodes.filter(node => node.type === 'word')\n\t\t\t.map(node => node.value);\n\t} catch (e) {\n\t\treturn {};\n\t}\n\n\tif (words.length === 1) {\n\t\t// If it's a single value and a number, then it's horizontal, so\n\t\t// pass `true` to `unitIsHorizontal`\n\t\treturn handleWord(words[0], baseFontSize, true);\n\t} else if (words.length === 2) {\n\t\t// Make words to be [horizontal, vertical]\n\t\tif (\n\t\t\twords[0] === 'top' ||\n\t\t\twords[0] === 'bottom' ||\n\t\t\twords[1] === 'left' ||\n\t\t\twords[1] === 'right'\n\t\t) {\n\t\t\twords.reverse();\n\t\t}\n\n\t\treturn {\n\t\t\t...handleWord(words[0], baseFontSize, true),\n\t\t\t...handleWord(words[1], baseFontSize, false)\n\t\t};\n\t} else {\n\t\treturn {};\n\t}\n}\n","import { getPropertyName } from 'css-to-react-native';\nimport { splitEffects } from '../utils.js';\n\nfunction getMaskProperty(style: Record<string, string | number>, name: string) {\n\tconst key = getPropertyName(`mask-${name}`);\n\treturn (style[key] || style[`WebkitM${key.substring(1)}`]) as string;\n}\n\nexport interface MaskProperty {\n\timage: string;\n\tposition: string;\n\tsize: string;\n\trepeat: string;\n\torigin: string;\n\tclip: string;\n}\n\nexport function parseMask(\n\tstyle: Record<string, string | number>\n): MaskProperty[] {\n\tconst maskImage = (style.maskImage || style.WebkitMaskImage) as string;\n\n\tconst common = {\n\t\tposition: getMaskProperty(style, 'position') || '0% 0%',\n\t\tsize: getMaskProperty(style, 'size') || '100% 100%',\n\t\trepeat: getMaskProperty(style, 'repeat') || 'repeat',\n\t\torigin: getMaskProperty(style, 'origin') || 'border-box',\n\t\tclip: getMaskProperty(style, 'origin') || 'border-box'\n\t};\n\n\tlet maskImages = splitEffects(maskImage).filter(v => v && v !== 'none');\n\n\treturn maskImages.reverse().map(m => ({\n\t\timage: m,\n\t\t...common\n\t}));\n}\n","/**\n * This module handles CSS custom properties (CSS variables) including:\n * - Extracting custom properties from styles (--property-name)\n * - Resolving var() references\n * - Handling fallback values\n * - Detecting circular references\n */\n\nimport valueParser from 'postcss-value-parser';\n\nexport type CSSVariables = Record<string, string>;\n\n/**\n * Extracts custom properties (--*) from a style object\n * Returns both the variables and the remaining style properties\n */\nexport function extractCustomProperties(\n\tstyle: Record<string, string | number>\n): {\n\tvariables: CSSVariables;\n\tremainingStyle: Record<string, string | number>;\n} {\n\tconst variables: CSSVariables = {};\n\tconst remainingStyle: Record<string, string | number> = {};\n\n\tfor (const prop in style) {\n\t\tif (prop.startsWith('--')) {\n\t\t\t// Custom property\n\t\t\tvariables[prop] = String(style[prop]);\n\t\t} else {\n\t\t\tremainingStyle[prop] = style[prop];\n\t\t}\n\t}\n\n\treturn { variables, remainingStyle };\n}\n\n/**\n * Merges inherited variables with current variables\n * Current variables override inherited ones (cascading)\n */\nexport function mergeVariables(\n\tinherited: CSSVariables,\n\tcurrent: CSSVariables\n): CSSVariables {\n\treturn { ...inherited, ...current };\n}\n\n/**\n * Resolves var() references in a CSS value\n * Supports fallback values: var(--name, fallback)\n * Handles nested var() calls\n */\nexport function resolveVariables(\n\tvalue: string | number,\n\tvariables: CSSVariables,\n\tvisitedVars = new Set<string>()\n): string | number {\n\t// Only process strings\n\tif (typeof value !== 'string') {\n\t\treturn value;\n\t}\n\n\t// Quick check: does this value contain var()?\n\tif (!value.includes('var(')) {\n\t\treturn value;\n\t}\n\n\ttry {\n\t\tconst parsed = valueParser(value);\n\t\tlet hasChanges = false;\n\n\t\tparsed.walk(node => {\n\t\t\tif (node.type === 'function' && node.value === 'var') {\n\t\t\t\thasChanges = true;\n\n\t\t\t\t// Extract variable name and optional fallback\n\t\t\t\tconst args = extractVarArgs(node);\n\t\t\t\tif (!args) {\n\t\t\t\t\t// Invalid var() syntax, leave as-is\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst { varName, fallback } = args;\n\n\t\t\t\t// Check for circular reference\n\t\t\t\tif (visitedVars.has(varName)) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`Circular reference detected for CSS variable: ${varName}`\n\t\t\t\t\t);\n\t\t\t\t\t// Use fallback if available, otherwise use invalid value\n\t\t\t\t\tif (fallback !== undefined) {\n\t\t\t\t\t\treplaceNode(node, fallback);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treplaceNode(node, 'initial');\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Look up the variable\n\t\t\t\tconst variableValue = variables[varName];\n\n\t\t\t\tif (variableValue !== undefined) {\n\t\t\t\t\t// Mark this variable as being resolved to detect circular references\n\t\t\t\t\tconst newVisitedVars = new Set(visitedVars);\n\t\t\t\t\tnewVisitedVars.add(varName);\n\n\t\t\t\t\t// Recursively resolve the variable value in case it contains more var()\n\t\t\t\t\tconst resolvedValue = resolveVariables(\n\t\t\t\t\t\tvariableValue,\n\t\t\t\t\t\tvariables,\n\t\t\t\t\t\tnewVisitedVars\n\t\t\t\t\t);\n\n\t\t\t\t\treplaceNode(node, String(resolvedValue));\n\t\t\t\t} else if (fallback !== undefined) {\n\t\t\t\t\t// Variable not found, use fallback\n\t\t\t\t\t// Recursively resolve fallback in case it contains var()\n\t\t\t\t\tconst resolvedFallback = resolveVariables(\n\t\t\t\t\t\tfallback,\n\t\t\t\t\t\tvariables,\n\t\t\t\t\t\tvisitedVars\n\t\t\t\t\t);\n\t\t\t\t\treplaceNode(node, String(resolvedFallback));\n\t\t\t\t} else {\n\t\t\t\t\t// Variable not found and no fallback, use initial value\n\t\t\t\t\t// According to CSS spec, this should be treated as invalid\n\t\t\t\t\treplaceNode(node, 'initial');\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (hasChanges) {\n\t\t\treturn parsed.toString();\n\t\t}\n\t} catch (err) {\n\t\t// If parsing fails, return the original value\n\t\tconsole.warn(\n\t\t\t`Failed to parse CSS value for variable resolution: ${value}`\n\t\t);\n\t}\n\n\treturn value;\n}\n\n/**\n * Extracts variable name and fallback from var() function arguments\n * Handles: var(--name) and var(--name, fallback)\n */\nfunction extractVarArgs(\n\tnode: valueParser.FunctionNode\n): { varName: string; fallback?: string } | null {\n\tif (!node.nodes || node.nodes.length === 0) {\n\t\treturn null;\n\t}\n\n\t// Find the variable name (first word node)\n\tlet varNameNode: valueParser.Node | undefined;\n\tlet commaIndex = -1;\n\n\tfor (let i = 0; i < node.nodes.length; i++) {\n\t\tconst child = node.nodes[i];\n\t\tif (child.type === 'word' && !varNameNode) {\n\t\t\tvarNameNode = child;\n\t\t} else if (child.type === 'div' && child.value === ',') {\n\t\t\tcommaIndex = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!varNameNode || varNameNode.type !== 'word') {\n\t\treturn null;\n\t}\n\n\tconst varName = varNameNode.value.trim();\n\n\t// Check if there's a fallback value after the comma\n\tif (commaIndex !== -1 && commaIndex < node.nodes.length - 1) {\n\t\t// Collect all nodes after the comma as the fallback\n\t\tconst fallbackNodes = node.nodes.slice(commaIndex + 1);\n\t\tconst fallback = valueParser.stringify(fallbackNodes).trim();\n\t\treturn { varName, fallback };\n\t}\n\n\treturn { varName };\n}\n\n/**\n * Replaces a function node with a raw string value\n */\nfunction replaceNode(node: valueParser.Node, value: string) {\n\t// Replace the function node with a word node\n\tnode.type = 'word';\n\tnode.value = value;\n\t// Remove function-specific properties\n\tdelete (node as any).nodes;\n}\n\n/**\n * Resolves all variables in a style object\n * Returns a new style object with var() references resolved\n */\nexport function resolveStyleVariables(\n\tstyle: Record<string, string | number>,\n\tvariables: CSSVariables\n): Record<string, string | number> {\n\tconst resolved: Record<string, string | number> = {};\n\n\tfor (const prop in style) {\n\t\tresolved[prop] = resolveVariables(style[prop], variables);\n\t}\n\n\treturn resolved;\n}\n","/**\n * Handler to update the Yoga node properties with the given element type and\n * style. Each supported element has its own preset styles, so this function\n * also returns the inherited style for children of the element.\n */\n\nimport presets from './presets.js';\nimport inheritable from './inheritable.js';\nimport expand, { SerializedStyle } from './expand.js';\nimport {\n\tasPointAutoPercentageLength,\n\tasPointPercentageLength,\n\tlengthToNumber,\n\tparseViewBox,\n\tv\n} from '../utils.js';\nimport { getYoga, YogaNode } from '../yoga.js';\nimport { resolveImageData } from './image.js';\n\ntype SatoriElement = keyof typeof presets;\n\nexport default async function compute(\n\tnode: YogaNode,\n\ttype: SatoriElement | string,\n\tinheritedStyle: SerializedStyle,\n\tdefinedStyle: Record<string, string | number>,\n\tprops: Record<string, any>\n): Promise<[SerializedStyle, SerializedStyle]> {\n\tconst Yoga = await getYoga();\n\n\t// Extend the default style with defined and inherited styles.\n\tconst style: SerializedStyle = Object.assign(\n\t\t{},\n\t\tinheritedStyle,\n\t\texpand(presets[type], inheritedStyle),\n\t\texpand(definedStyle, inheritedStyle)\n\t);\n\n\tif (type === 'img') {\n\t\tlet [resolvedSrc, imageWidth, imageHeight] = await resolveImageData(\n\t\t\tprops.src\n\t\t);\n\n\t\t// Cannot parse the image size (e.g. base64 data URI).\n\t\tif (imageWidth === undefined && imageHeight === undefined) {\n\t\t\tif (props.width === undefined || props.height === undefined) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Image size cannot be determined. Please provide the width and height of the image.'\n\t\t\t\t);\n\t\t\t}\n\t\t\timageWidth = parseInt(props.width);\n\t\t\timageHeight = parseInt(props.height);\n\t\t}\n\t\tconst r = imageHeight / imageWidth;\n\n\t\t// Before calculating the missing width or height based on the image ratio,\n\t\t// we must subtract the padding and border due to how box model works.\n\t\t// TODO: Ensure these are absolute length values, not relative values.\n\t\tlet extraHorizontal =\n\t\t\t(style.borderLeftWidth || 0) +\n\t\t\t(style.borderRightWidth || 0) +\n\t\t\t(style.paddingLeft || 0) +\n\t\t\t(style.paddingRight || 0);\n\t\tlet extraVertical =\n\t\t\t(style.borderTopWidth || 0) +\n\t\t\t(style.borderBottomWidth || 0) +\n\t\t\t(style.paddingTop || 0) +\n\t\t\t(style.paddingBottom || 0);\n\n\t\tlet contentBoxWidth = style.width || props.width;\n\t\tlet contentBoxHeight = style.height || props.height;\n\n\t\tconst isAbsoluteContentSize =\n\t\t\ttypeof contentBoxWidth === 'number' &&\n\t\t\ttypeof contentBoxHeight === 'number';\n\n\t\tif (isAbsoluteContentSize) {\n\t\t\tcontentBoxWidth -= extraHorizontal;\n\t\t\tcontentBoxHeight -= extraVertical;\n\t\t}\n\n\t\t// When no content size is defined, we use the image size as the content size.\n\t\tif (contentBoxWidth === undefined && contentBoxHeight === undefined) {\n\t\t\tcontentBoxWidth = '100%';\n\t\t\tnode.setAspectRatio(1 / r);\n\t\t} else {\n\t\t\t// If only one sisde is not defined, we can calculate the other one.\n\t\t\tif (contentBoxWidth === undefined) {\n\t\t\t\tif (typeof contentBoxHeight === 'number') {\n\t\t\t\t\tcontentBoxWidth = contentBoxHeight / r;\n\t\t\t\t} else {\n\t\t\t\t\t// If it uses a relative value (e.g. 50%), we can rely on aspect ratio.\n\t\t\t\t\t// Note: this doesn't work well if there are paddings or borders.\n\t\t\t\t\tnode.setAspectRatio(1 / r);\n\t\t\t\t}\n\t\t\t} else if (contentBoxHeight === undefined) {\n\t\t\t\tif (typeof contentBoxWidth === 'number') {\n\t\t\t\t\tcontentBoxHeight = contentBoxWidth * r;\n\t\t\t\t} else {\n\t\t\t\t\t// If it uses a relative value (e.g. 50%), we can rely on aspect ratio.\n\t\t\t\t\t// Note: this doesn't work well if there are paddings or borders.\n\t\t\t\t\tnode.setAspectRatio(1 / r);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstyle.width = isAbsoluteContentSize\n\t\t\t? (contentBoxWidth as number) + extraHorizontal\n\t\t\t: contentBoxWidth;\n\t\tstyle.height = isAbsoluteContentSize\n\t\t\t? (contentBoxHeight as number) + extraVertical\n\t\t\t: contentBoxHeight;\n\t\tstyle.__src = resolvedSrc;\n\t\tstyle.__naturalWidth = imageWidth;\n\t\tstyle.__naturalHeight = imageHeight;\n\t}\n\n\tif (type === 'svg') {\n\t\tconst viewBox = props.viewBox || props.viewbox;\n\t\tconst viewBoxSize = parseViewBox(viewBox);\n\t\tconst ratio = viewBoxSize ? viewBoxSize[3] / viewBoxSize[2] : null;\n\n\t\tlet { width, height } = props;\n\t\tif (typeof width === 'undefined' && height) {\n\t\t\tif (ratio == null) {\n\t\t\t\twidth = 0;\n\t\t\t} else if (typeof height === 'string' && height.endsWith('%')) {\n\t\t\t\twidth = parseInt(height) / ratio + '%';\n\t\t\t} else {\n\t\t\t\theight = lengthToNumber(\n\t\t\t\t\theight,\n\t\t\t\t\tinheritedStyle.fontSize,\n\t\t\t\t\t1,\n\t\t\t\t\tinheritedStyle\n\t\t\t\t);\n\t\t\t\twidth = height / ratio;\n\t\t\t}\n\t\t} else if (typeof height === 'undefined' && width) {\n\t\t\tif (ratio == null) {\n\t\t\t\twidth = 0;\n\t\t\t} else if (typeof width === 'string' && width.endsWith('%')) {\n\t\t\t\theight = parseInt(width) * ratio + '%';\n\t\t\t} else {\n\t\t\t\twidth = lengthToNumber(\n\t\t\t\t\twidth,\n\t\t\t\t\tinheritedStyle.fontSize,\n\t\t\t\t\t1,\n\t\t\t\t\tinheritedStyle\n\t\t\t\t);\n\t\t\t\theight = width * ratio;\n\t\t\t}\n\t\t} else {\n\t\t\tif (typeof width !== 'undefined') {\n\t\t\t\twidth =\n\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\twidth,\n\t\t\t\t\t\tinheritedStyle.fontSize,\n\t\t\t\t\t\t1,\n\t\t\t\t\t\tinheritedStyle\n\t\t\t\t\t) || width;\n\t\t\t}\n\t\t\tif (typeof height !== 'undefined') {\n\t\t\t\theight =\n\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\theight,\n\t\t\t\t\t\tinheritedStyle.fontSize,\n\t\t\t\t\t\t1,\n\t\t\t\t\t\tinheritedStyle\n\t\t\t\t\t) || height;\n\t\t\t}\n\t\t\twidth ||= viewBoxSize?.[2];\n\t\t\theight ||= viewBoxSize?.[3];\n\t\t}\n\n\t\tif (!style.width && width) style.width = width;\n\t\tif (!style.height && height) style.height = height;\n\t}\n\n\t// Set properties for Yoga.\n\tnode.setDisplay(\n\t\tv(\n\t\t\tstyle.display,\n\t\t\t{\n\t\t\t\tflex: Yoga.DISPLAY_FLEX,\n\t\t\t\tblock: Yoga.DISPLAY_FLEX,\n\t\t\t\tcontents: Yoga.DISPLAY_CONTENTS,\n\t\t\t\tnone: Yoga.DISPLAY_NONE,\n\t\t\t\t'-webkit-box': Yoga.DISPLAY_FLEX\n\t\t\t},\n\t\t\tYoga.DISPLAY_FLEX,\n\t\t\t'display'\n\t\t)\n\t);\n\n\tnode.setAlignContent(\n\t\tv(\n\t\t\tstyle.alignContent,\n\t\t\t{\n\t\t\t\tstretch: Yoga.ALIGN_STRETCH,\n\t\t\t\tcenter: Yoga.ALIGN_CENTER,\n\t\t\t\t'flex-start': Yoga.ALIGN_FLEX_START,\n\t\t\t\t'flex-end': Yoga.ALIGN_FLEX_END,\n\t\t\t\t'space-between': Yoga.ALIGN_SPACE_BETWEEN,\n\t\t\t\t'space-around': Yoga.ALIGN_SPACE_AROUND,\n\t\t\t\tbaseline: Yoga.ALIGN_BASELINE,\n\t\t\t\tnormal: Yoga.ALIGN_AUTO\n\t\t\t},\n\t\t\tYoga.ALIGN_AUTO,\n\t\t\t'alignContent'\n\t\t)\n\t);\n\n\tnode.setAlignItems(\n\t\tv(\n\t\t\tstyle.alignItems,\n\t\t\t{\n\t\t\t\tstretch: Yoga.ALIGN_STRETCH,\n\t\t\t\tcenter: Yoga.ALIGN_CENTER,\n\t\t\t\t'flex-start': Yoga.ALIGN_FLEX_START,\n\t\t\t\t'flex-end': Yoga.ALIGN_FLEX_END,\n\t\t\t\tbaseline: Yoga.ALIGN_BASELINE,\n\t\t\t\tnormal: Yoga.ALIGN_AUTO\n\t\t\t},\n\t\t\tYoga.ALIGN_STRETCH,\n\t\t\t'alignItems'\n\t\t)\n\t);\n\tnode.setAlignSelf(\n\t\tv(\n\t\t\tstyle.alignSelf,\n\t\t\t{\n\t\t\t\tstretch: Yoga.ALIGN_STRETCH,\n\t\t\t\tcenter: Yoga.ALIGN_CENTER,\n\t\t\t\t'flex-start': Yoga.ALIGN_FLEX_START,\n\t\t\t\t'flex-end': Yoga.ALIGN_FLEX_END,\n\t\t\t\tbaseline: Yoga.ALIGN_BASELINE,\n\t\t\t\tnormal: Yoga.ALIGN_AUTO\n\t\t\t},\n\t\t\tYoga.ALIGN_AUTO,\n\t\t\t'alignSelf'\n\t\t)\n\t);\n\tnode.setJustifyContent(\n\t\tv(\n\t\t\tstyle.justifyContent,\n\t\t\t{\n\t\t\t\tcenter: Yoga.JUSTIFY_CENTER,\n\t\t\t\t'flex-start': Yoga.JUSTIFY_FLEX_START,\n\t\t\t\t'flex-end': Yoga.JUSTIFY_FLEX_END,\n\t\t\t\t'space-between': Yoga.JUSTIFY_SPACE_BETWEEN,\n\t\t\t\t'space-around': Yoga.JUSTIFY_SPACE_AROUND\n\t\t\t},\n\t\t\tYoga.JUSTIFY_FLEX_START,\n\t\t\t'justifyContent'\n\t\t)\n\t);\n\t// @TODO: node.setAspectRatio\n\n\tnode.setFlexDirection(\n\t\tv(\n\t\t\tstyle.flexDirection,\n\t\t\t{\n\t\t\t\trow: Yoga.FLEX_DIRECTION_ROW,\n\t\t\t\tcolumn: Yoga.FLEX_DIRECTION_COLUMN,\n\t\t\t\t'row-reverse': Yoga.FLEX_DIRECTION_ROW_REVERSE,\n\t\t\t\t'column-reverse': Yoga.FLEX_DIRECTION_COLUMN_REVERSE\n\t\t\t},\n\t\t\tYoga.FLEX_DIRECTION_ROW,\n\t\t\t'flexDirection'\n\t\t)\n\t);\n\tnode.setFlexWrap(\n\t\tv(\n\t\t\tstyle.flexWrap,\n\t\t\t{\n\t\t\t\twrap: Yoga.WRAP_WRAP,\n\t\t\t\tnowrap: Yoga.WRAP_NO_WRAP,\n\t\t\t\t'wrap-reverse': Yoga.WRAP_WRAP_REVERSE\n\t\t\t},\n\t\t\tYoga.WRAP_NO_WRAP,\n\t\t\t'flexWrap'\n\t\t)\n\t);\n\n\tif (typeof style.gap !== 'undefined') {\n\t\tnode.setGap(Yoga.GUTTER_ALL, style.gap);\n\t}\n\n\tif (typeof style.rowGap !== 'undefined') {\n\t\tnode.setGap(Yoga.GUTTER_ROW, style.rowGap);\n\t}\n\n\tif (typeof style.columnGap !== 'undefined') {\n\t\tnode.setGap(Yoga.GUTTER_COLUMN, style.columnGap);\n\t}\n\n\t// @TODO: node.setFlex\n\n\tif (typeof style.flexBasis !== 'undefined') {\n\t\tnode.setFlexBasis(\n\t\t\tasPointAutoPercentageLength(style.flexBasis, 'flexBasis')\n\t\t);\n\t}\n\tnode.setFlexGrow(\n\t\ttypeof style.flexGrow === 'undefined' ? 0 : style.flexGrow\n\t);\n\tnode.setFlexShrink(\n\t\ttypeof style.flexShrink === 'undefined' ? 0 : style.flexShrink\n\t);\n\n\tif (typeof style.maxHeight !== 'undefined') {\n\t\tnode.setMaxHeight(\n\t\t\tasPointPercentageLength(style.maxHeight, 'maxHeight')\n\t\t);\n\t}\n\tif (typeof style.maxWidth !== 'undefined') {\n\t\tnode.setMaxWidth(asPointPercentageLength(style.maxWidth, 'maxWidth'));\n\t}\n\tif (typeof style.minHeight !== 'undefined') {\n\t\tnode.setMinHeight(\n\t\t\tasPointPercentageLength(style.minHeight, 'minHeight')\n\t\t);\n\t}\n\tif (typeof style.minWidth !== 'undefined') {\n\t\tnode.setMinWidth(asPointPercentageLength(style.minWidth, 'minWidth'));\n\t}\n\n\tnode.setOverflow(\n\t\tv(\n\t\t\tstyle.overflow,\n\t\t\t{\n\t\t\t\tvisible: Yoga.OVERFLOW_VISIBLE,\n\t\t\t\thidden: Yoga.OVERFLOW_HIDDEN\n\t\t\t},\n\t\t\tYoga.OVERFLOW_VISIBLE,\n\t\t\t'overflow'\n\t\t)\n\t);\n\n\tnode.setMargin(\n\t\tYoga.EDGE_TOP,\n\t\tasPointAutoPercentageLength(style.marginTop || 0)\n\t);\n\tnode.setMargin(\n\t\tYoga.EDGE_BOTTOM,\n\t\tasPointAutoPercentageLength(style.marginBottom || 0)\n\t);\n\tnode.setMargin(\n\t\tYoga.EDGE_LEFT,\n\t\tasPointAutoPercentageLength(style.marginLeft || 0)\n\t);\n\tnode.setMargin(\n\t\tYoga.EDGE_RIGHT,\n\t\tasPointAutoPercentageLength(style.marginRight || 0)\n\t);\n\n\tnode.setBorder(Yoga.EDGE_TOP, style.borderTopWidth || 0);\n\tnode.setBorder(Yoga.EDGE_BOTTOM, style.borderBottomWidth || 0);\n\tnode.setBorder(Yoga.EDGE_LEFT, style.borderLeftWidth || 0);\n\tnode.setBorder(Yoga.EDGE_RIGHT, style.borderRightWidth || 0);\n\n\tnode.setPadding(Yoga.EDGE_TOP, style.paddingTop || 0);\n\tnode.setPadding(Yoga.EDGE_BOTTOM, style.paddingBottom || 0);\n\tnode.setPadding(Yoga.EDGE_LEFT, style.paddingLeft || 0);\n\tnode.setPadding(Yoga.EDGE_RIGHT, style.paddingRight || 0);\n\n\tnode.setBoxSizing(\n\t\tv(\n\t\t\tstyle.boxSizing,\n\t\t\t{\n\t\t\t\t'border-box': Yoga.BOX_SIZING_BORDER_BOX,\n\t\t\t\t'content-box': Yoga.BOX_SIZING_CONTENT_BOX\n\t\t\t},\n\t\t\tYoga.BOX_SIZING_BORDER_BOX,\n\t\t\t'boxSizing'\n\t\t)\n\t);\n\n\tnode.setPositionType(\n\t\tv(\n\t\t\tstyle.position,\n\t\t\t{\n\t\t\t\tabsolute: Yoga.POSITION_TYPE_ABSOLUTE,\n\t\t\t\trelative: Yoga.POSITION_TYPE_RELATIVE,\n\t\t\t\tstatic: Yoga.POSITION_TYPE_STATIC\n\t\t\t},\n\t\t\tYoga.POSITION_TYPE_RELATIVE,\n\t\t\t'position'\n\t\t)\n\t);\n\n\tif (typeof style.top !== 'undefined') {\n\t\tnode.setPosition(\n\t\t\tYoga.EDGE_TOP,\n\t\t\tasPointPercentageLength(style.top, 'top')\n\t\t);\n\t}\n\tif (typeof style.bottom !== 'undefined') {\n\t\tnode.setPosition(\n\t\t\tYoga.EDGE_BOTTOM,\n\t\t\tasPointPercentageLength(style.bottom, 'bottom')\n\t\t);\n\t}\n\tif (typeof style.left !== 'undefined') {\n\t\tnode.setPosition(\n\t\t\tYoga.EDGE_LEFT,\n\t\t\tasPointPercentageLength(style.left, 'left')\n\t\t);\n\t}\n\tif (typeof style.right !== 'undefined') {\n\t\tnode.setPosition(\n\t\t\tYoga.EDGE_RIGHT,\n\t\t\tasPointPercentageLength(style.right, 'right')\n\t\t);\n\t}\n\n\tif (typeof style.height !== 'undefined') {\n\t\tnode.setHeight(asPointAutoPercentageLength(style.height, 'height'));\n\t} else {\n\t\tnode.setHeightAuto();\n\t}\n\tif (typeof style.width !== 'undefined') {\n\t\tnode.setWidth(asPointAutoPercentageLength(style.width, 'width'));\n\t} else {\n\t\tnode.setWidthAuto();\n\t}\n\n\treturn [style, inheritable(style)];\n}\n","import escapeHTML from 'escape-html';\nimport type { ParsedTransformOrigin } from '../transform-origin.js';\nimport transform from './transform.js';\nimport { buildXMLString } from '../utils.js';\n\nexport function container(\n\t{\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight,\n\t\tisInheritingTransform\n\t}: {\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t\tisInheritingTransform: boolean;\n\t},\n\tstyle: Record<string, number | string>\n) {\n\tlet matrix = '';\n\tlet opacity = 1;\n\n\tif (style.transform) {\n\t\tmatrix = transform(\n\t\t\t{\n\t\t\t\tleft,\n\t\t\t\ttop,\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t},\n\t\t\tstyle.transform as unknown as number[],\n\t\t\tisInheritingTransform,\n\t\t\tstyle.transformOrigin as ParsedTransformOrigin | undefined\n\t\t);\n\t}\n\n\tif (style.opacity !== undefined) {\n\t\topacity = +style.opacity;\n\t}\n\n\treturn { matrix, opacity };\n}\n\nexport default function buildText(\n\t{\n\t\tid,\n\t\tcontent,\n\t\tfilter,\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight,\n\t\tmatrix,\n\t\topacity,\n\t\timage,\n\t\tclipPathId,\n\t\tdebug,\n\t\tshape,\n\t\tdecorationShape\n\t}: {\n\t\tcontent: string;\n\t\tfilter: string;\n\t\tid: string;\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t\tmatrix: string;\n\t\topacity: number;\n\t\timage: string | null;\n\t\tclipPathId?: string;\n\t\tdebug?: boolean;\n\t\tshape?: boolean;\n\t\tdecorationShape?: string;\n\t},\n\tstyle: Record<string, number | string>\n) {\n\tlet extra = '';\n\tif (debug) {\n\t\textra = buildXMLString('rect', {\n\t\t\tx: left,\n\t\t\ty: top - height,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tfill: 'transparent',\n\t\t\tstroke: '#575eff',\n\t\t\t'stroke-width': 1,\n\t\t\ttransform: matrix || undefined,\n\t\t\t'clip-path': clipPathId ? `url(#${clipPathId})` : undefined\n\t\t});\n\t}\n\n\t// This grapheme should be rendered as an image.\n\tif (image) {\n\t\tconst shapeProps = {\n\t\t\thref: image,\n\t\t\tx: left,\n\t\t\ty: top,\n\t\t\twidth,\n\t\t\theight,\n\t\t\ttransform: matrix || undefined,\n\t\t\t'clip-path': clipPathId ? `url(#${clipPathId})` : undefined,\n\t\t\tstyle: style.filter ? `filter:${style.filter}` : undefined\n\t\t};\n\t\treturn [\n\t\t\t(filter ? `${filter}<g filter=\"url(#satori_s-${id})\">` : '') +\n\t\t\t\tbuildXMLString('image', {\n\t\t\t\t\t...shapeProps,\n\t\t\t\t\topacity: opacity !== 1 ? opacity : undefined\n\t\t\t\t}) +\n\t\t\t\t(decorationShape || '') +\n\t\t\t\t(filter ? '</g>' : '') +\n\t\t\t\textra,\n\t\t\t// SVG doesn't support `<image>` as the shape.\n\t\t\t''\n\t\t];\n\t}\n\n\t// Do not embed the font, use <text> with the raw content instead.\n\tconst shapeProps = {\n\t\tx: left,\n\t\ty: top,\n\t\twidth,\n\t\theight,\n\t\t'font-weight': style.fontWeight,\n\t\t'font-style': style.fontStyle,\n\t\t'font-size': style.fontSize,\n\t\t'font-family': style.fontFamily,\n\t\t'letter-spacing': style.letterSpacing || undefined,\n\t\ttransform: matrix || undefined,\n\t\t'clip-path': clipPathId ? `url(#${clipPathId})` : undefined,\n\t\tstyle: style.filter ? `filter:${style.filter}` : undefined,\n\t\t'stroke-width': style.WebkitTextStrokeWidth\n\t\t\t? `${style.WebkitTextStrokeWidth}px`\n\t\t\t: undefined,\n\t\tstroke: style.WebkitTextStrokeWidth\n\t\t\t? style.WebkitTextStrokeColor\n\t\t\t: undefined,\n\t\t'stroke-linejoin': style.WebkitTextStrokeWidth ? 'round' : undefined,\n\t\t'paint-order': style.WebkitTextStrokeWidth ? 'stroke' : undefined\n\t};\n\treturn [\n\t\t(filter ? `${filter}<g filter=\"url(#satori_s-${id})\">` : '') +\n\t\t\tbuildXMLString(\n\t\t\t\t'text',\n\t\t\t\t{\n\t\t\t\t\t...shapeProps,\n\t\t\t\t\tfill: style.color,\n\t\t\t\t\topacity: opacity !== 1 ? opacity : undefined\n\t\t\t\t},\n\t\t\t\tescapeHTML(content)\n\t\t\t) +\n\t\t\t(decorationShape || '') +\n\t\t\t(filter ? '</g>' : '') +\n\t\t\textra,\n\t\tshape ? buildXMLString('text', shapeProps, escapeHTML(content)) : ''\n\t];\n}\n","import { multiply } from '../utils.js';\nimport type { ParsedTransformOrigin } from '../transform-origin.js';\n\nconst baseMatrix = [1, 0, 0, 1, 0, 0];\n\n// Mutate the array in place.\nfunction resolveTransforms(transforms: any[], width: number, height: number) {\n\tlet matrix = [...baseMatrix];\n\n\t// Handle CSS transforms To make it easier, we convert different transform\n\t// types directly to a matrix and apply it recursively to all its children.\n\t// Transforms are applied from right to left.\n\t// eslint-disable-next-line @typescript-eslint/no-shadow\n\tfor (const transform of transforms) {\n\t\tconst type = Object.keys(transform)[0];\n\t\tlet v = transform[type];\n\n\t\t// Resolve percentages based on the element's final size.\n\t\tif (typeof v === 'string') {\n\t\t\tif (type === 'translateX') {\n\t\t\t\tv = (parseFloat(v) / 100) * width;\n\t\t\t\t// Override the original object.\n\t\t\t\ttransform[type] = v;\n\t\t\t} else if (type === 'translateY') {\n\t\t\t\tv = (parseFloat(v) / 100) * height;\n\t\t\t\ttransform[type] = v;\n\t\t\t} else {\n\t\t\t\tthrow new Error(`Invalid transform: \"${type}: ${v}\".`);\n\t\t\t}\n\t\t}\n\n\t\tlet len = v as number;\n\n\t\tconst transformMatrix = [...baseMatrix];\n\t\tswitch (type) {\n\t\t\tcase 'translateX':\n\t\t\t\ttransformMatrix[4] = len;\n\t\t\t\tbreak;\n\t\t\tcase 'translateY':\n\t\t\t\ttransformMatrix[5] = len;\n\t\t\t\tbreak;\n\t\t\tcase 'scale':\n\t\t\t\ttransformMatrix[0] = len;\n\t\t\t\ttransformMatrix[3] = len;\n\t\t\t\tbreak;\n\t\t\tcase 'scaleX':\n\t\t\t\ttransformMatrix[0] = len;\n\t\t\t\tbreak;\n\t\t\tcase 'scaleY':\n\t\t\t\ttransformMatrix[3] = len;\n\t\t\t\tbreak;\n\t\t\tcase 'rotate': {\n\t\t\t\tconst rad = (len * Math.PI) / 180;\n\t\t\t\tconst c = Math.cos(rad);\n\t\t\t\tconst s = Math.sin(rad);\n\t\t\t\ttransformMatrix[0] = c;\n\t\t\t\ttransformMatrix[1] = s;\n\t\t\t\ttransformMatrix[2] = -s;\n\t\t\t\ttransformMatrix[3] = c;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'skewX':\n\t\t\t\ttransformMatrix[2] = Math.tan((len * Math.PI) / 180);\n\t\t\t\tbreak;\n\t\t\tcase 'skewY':\n\t\t\t\ttransformMatrix[1] = Math.tan((len * Math.PI) / 180);\n\t\t\t\tbreak;\n\t\t}\n\t\tmatrix = multiply(transformMatrix, matrix);\n\t}\n\n\ttransforms.splice(0, transforms.length);\n\ttransforms.push(...matrix);\n\t(transforms as any).__resolved = true;\n}\n\nexport default function transform(\n\t{\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight\n\t}: {\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t},\n\ttransforms: number[],\n\tisInheritingTransform: boolean,\n\ttransformOrigin?: ParsedTransformOrigin\n) {\n\tlet result: number[];\n\n\tif (!(transforms as any).__resolved) {\n\t\tresolveTransforms(transforms, width, height);\n\t}\n\n\tlet matrix = transforms;\n\n\t// Calculate the transform origin.\n\tif (isInheritingTransform) {\n\t\tresult = matrix;\n\t} else {\n\t\tconst xOrigin =\n\t\t\ttransformOrigin?.xAbsolute ??\n\t\t\t((transformOrigin?.xRelative ?? 50) * width) / 100;\n\t\tconst yOrigin =\n\t\t\ttransformOrigin?.yAbsolute ??\n\t\t\t((transformOrigin?.yRelative ?? 50) * height) / 100;\n\n\t\t// If this element is the transform target, we attach the origin coordinates\n\t\t// to this matrix.\n\t\tconst x = left + xOrigin;\n\t\tconst y = top + yOrigin;\n\n\t\t// Due to the different coordinate systems, we need to move the shape to the\n\t\t// origin first, then apply the matrix, then move it back.\n\t\tresult = multiply(\n\t\t\t[1, 0, 0, 1, x, y],\n\t\t\tmultiply(matrix, [1, 0, 0, 1, -x, -y])\n\t\t);\n\n\t\t// And we need to apply its parent transform if it has one.\n\t\tif ((matrix as any).__parent) {\n\t\t\tresult = multiply((matrix as any).__parent, result);\n\t\t}\n\n\t\t// Mutate self.\n\t\tmatrix.splice(0, 6, ...result);\n\t}\n\n\treturn `matrix(${result.map(v => v.toFixed(2)).join(',')})`;\n}\n","// @TODO: It seems that SVG filters are pretty expensive for resvg, PNG\n// generation time 10x'd when adding this filter (WASM in browser).\n// https://drafts.fxtf.org/filter-effects/#feGaussianBlurElement\n\nimport { buildXMLString } from '../utils.js';\n\nfunction shiftPath(path: string, dx: number, dy: number) {\n\treturn path.replace(\n\t\t/([MA])([0-9.-]+),([0-9.-]+)/g,\n\t\tfunction (_, command, x, y) {\n\t\t\treturn command + (parseFloat(x) + dx) + ',' + (parseFloat(y) + dy);\n\t\t}\n\t);\n}\n\n// The scale is used to make the filter area larger than the bounding box,\n// because usually the given measured text bounding is larger than the path\n// bounding.\n// The text bounding box is measured via the font metrics, which is not the same\n// as the actual content. For example, the text bounding box of \"A\" is larger\n// than the actual \"a\" path but they have the same font metrics.\n// This scale can be adjusted to prevent the filter from cutting off the text.\nconst SCALE = 1.1;\n\nexport function buildDropShadow(\n\t{ id, width, height }: { id: string; width: number; height: number },\n\tstyle: {\n\t\tshadowColor: string[];\n\t\tshadowOffset: {\n\t\t\twidth: number;\n\t\t\theight: number;\n\t\t}[];\n\t\tshadowRadius: number[];\n\t},\n\ttransparentText = false\n) {\n\tif (\n\t\t!style.shadowColor ||\n\t\t!style.shadowOffset ||\n\t\ttypeof style.shadowRadius === 'undefined'\n\t) {\n\t\treturn '';\n\t}\n\n\tconst shadowCount = style.shadowColor.length;\n\tlet effects = '';\n\tlet merge = '';\n\n\t// There could be multiple shadows, we need to get the maximum bounding box\n\t// and use `feMerge` to merge them together.\n\tlet left = 0;\n\tlet right = width;\n\tlet top = 0;\n\tlet bottom = height;\n\tfor (let i = 0; i < shadowCount; i++) {\n\t\t// Expand the area for the filter to prevent it from cutting off.\n\t\tconst grow = (style.shadowRadius[i] * style.shadowRadius[i]) / 4;\n\t\tleft = Math.min(style.shadowOffset[i].width - grow, left);\n\t\tright = Math.max(style.shadowOffset[i].width + grow + width, right);\n\t\ttop = Math.min(style.shadowOffset[i].height - grow, top);\n\t\tbottom = Math.max(style.shadowOffset[i].height + grow + height, bottom);\n\n\t\tif (transparentText) {\n\t\t\t// For transparent text, use primitive filters instead of feDropShadow\n\t\t\t// because feDropShadow automatically includes source in output and\n\t\t\t// source has unwanted text color\n\t\t\tconst resultId = `satori_s-${id}-result-${i}`;\n\t\t\teffects +=\n\t\t\t\tbuildXMLString('feGaussianBlur', {\n\t\t\t\t\tin: 'SourceAlpha',\n\t\t\t\t\tstdDeviation: style.shadowRadius[i] / 2,\n\t\t\t\t\tresult: `${resultId}-blur`\n\t\t\t\t}) +\n\t\t\t\tbuildXMLString('feOffset', {\n\t\t\t\t\tin: `${resultId}-blur`,\n\t\t\t\t\tdx: style.shadowOffset[i].width,\n\t\t\t\t\tdy: style.shadowOffset[i].height,\n\t\t\t\t\tresult: `${resultId}-offset`\n\t\t\t\t}) +\n\t\t\t\tbuildXMLString('feFlood', {\n\t\t\t\t\t'flood-color': style.shadowColor[i],\n\t\t\t\t\t'flood-opacity': 1,\n\t\t\t\t\tresult: `${resultId}-color`\n\t\t\t\t}) +\n\t\t\t\tbuildXMLString('feComposite', {\n\t\t\t\t\tin: `${resultId}-color`,\n\t\t\t\t\tin2: `${resultId}-offset`,\n\t\t\t\t\toperator: 'in',\n\t\t\t\t\tresult: shadowCount > 1 ? resultId : undefined\n\t\t\t\t});\n\t\t} else {\n\t\t\teffects += buildXMLString('feDropShadow', {\n\t\t\t\tdx: style.shadowOffset[i].width,\n\t\t\t\tdy: style.shadowOffset[i].height,\n\t\t\t\tstdDeviation:\n\t\t\t\t\t// According to the spec, we use the half of the blur radius as the standard\n\t\t\t\t\t// deviation for the filter.\n\t\t\t\t\t// > the image that would be generated by applying to the shadow a Gaussian\n\t\t\t\t\t// > blur with a standard deviation equal to half the blur radius\n\t\t\t\t\t// > https://www.w3.org/TR/css-backgrounds-3/#shadow-blur\n\t\t\t\t\tstyle.shadowRadius[i] / 2,\n\t\t\t\t'flood-color': style.shadowColor[i],\n\t\t\t\t'flood-opacity': 1,\n\t\t\t\t...(shadowCount > 1\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tin: 'SourceGraphic',\n\t\t\t\t\t\t\tresult: `satori_s-${id}-result-${i}`\n\t\t\t\t\t }\n\t\t\t\t\t: {})\n\t\t\t});\n\t\t}\n\n\t\tif (shadowCount > 1) {\n\t\t\t// Merge needs to be in reverse order.\n\t\t\tmerge =\n\t\t\t\tbuildXMLString('feMergeNode', {\n\t\t\t\t\tin: `satori_s-${id}-result-${i}`\n\t\t\t\t}) + merge;\n\t\t}\n\t}\n\n\treturn buildXMLString(\n\t\t'filter',\n\t\t{\n\t\t\tid: `satori_s-${id}`,\n\t\t\tx: ((left / width) * 100 * SCALE).toFixed(2) + '%',\n\t\t\ty: ((top / height) * 100 * SCALE).toFixed(2) + '%',\n\t\t\twidth: (((right - left) / width) * 100 * SCALE).toFixed(2) + '%',\n\t\t\theight: (((bottom - top) / height) * 100 * SCALE).toFixed(2) + '%'\n\t\t},\n\t\teffects + (merge ? buildXMLString('feMerge', {}, merge) : '')\n\t);\n}\n\nexport function boxShadow(\n\t{\n\t\twidth,\n\t\theight,\n\t\tshape,\n\t\topacity,\n\t\tid\n\t}: {\n\t\twidth: number;\n\t\theight: number;\n\t\tshape: string;\n\t\topacity: number;\n\t\tid: string;\n\t},\n\tstyle: Record<string, any>\n) {\n\tif (!style.boxShadow) return null;\n\n\tlet shadow = '';\n\tlet innerShadow = '';\n\n\tfor (let i = style.boxShadow.length - 1; i >= 0; i--) {\n\t\tlet s = '';\n\n\t\tconst shadowStyle = style.boxShadow[i];\n\n\t\tif (shadowStyle.spreadRadius && shadowStyle.inset) {\n\t\t\tshadowStyle.spreadRadius = -shadowStyle.spreadRadius;\n\t\t}\n\n\t\t// Expand the area for the filter to prevent it from cutting off.\n\t\tconst grow =\n\t\t\t(shadowStyle.blurRadius * shadowStyle.blurRadius) / 4 +\n\t\t\t(shadowStyle.spreadRadius || 0);\n\n\t\tconst left = Math.min(\n\t\t\t-grow - (shadowStyle.inset ? shadowStyle.offsetX : 0),\n\t\t\t0\n\t\t);\n\t\tconst right = Math.max(\n\t\t\tgrow + width - (shadowStyle.inset ? shadowStyle.offsetX : 0),\n\t\t\twidth\n\t\t);\n\t\tconst top = Math.min(\n\t\t\t-grow - (shadowStyle.inset ? shadowStyle.offsetY : 0),\n\t\t\t0\n\t\t);\n\t\tconst bottom = Math.max(\n\t\t\tgrow + height - (shadowStyle.inset ? shadowStyle.offsetY : 0),\n\t\t\theight\n\t\t);\n\n\t\tconst sid = `satori_s-${id}-${i}`;\n\t\tconst maskId = `satori_ms-${id}-${i}`;\n\t\tconst shapeWithSpread = shadowStyle.spreadRadius\n\t\t\t? shape.replace(\n\t\t\t\t\t'stroke-width=\"0\"',\n\t\t\t\t\t`stroke-width=\"${shadowStyle.spreadRadius * 2}\"`\n\t\t\t )\n\t\t\t: shape;\n\n\t\ts += buildXMLString(\n\t\t\t'mask',\n\t\t\t{\n\t\t\t\tid: maskId,\n\t\t\t\tmaskUnits: 'userSpaceOnUse'\n\t\t\t},\n\t\t\tbuildXMLString('rect', {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t\twidth: style._viewportWidth || '100%',\n\t\t\t\theight: style._viewportHeight || '100%',\n\t\t\t\tfill: shadowStyle.inset ? '#000' : '#fff'\n\t\t\t}) +\n\t\t\t\tshapeWithSpread\n\t\t\t\t\t.replace(\n\t\t\t\t\t\t'fill=\"#fff\"',\n\t\t\t\t\t\tshadowStyle.inset ? 'fill=\"#fff\"' : 'fill=\"#000\"'\n\t\t\t\t\t)\n\t\t\t\t\t.replace('stroke=\"#fff\"', '')\n\t\t);\n\n\t\tlet finalShape = shapeWithSpread\n\t\t\t.replace(/d=\"([^\"]+)\"/, (_, path) => {\n\t\t\t\treturn (\n\t\t\t\t\t'd=\"' +\n\t\t\t\t\tshiftPath(path, shadowStyle.offsetX, shadowStyle.offsetY) +\n\t\t\t\t\t'\"'\n\t\t\t\t);\n\t\t\t})\n\t\t\t.replace(/x=\"([^\"]+)\"/, (_, x) => {\n\t\t\t\treturn 'x=\"' + (parseFloat(x) + shadowStyle.offsetX) + '\"';\n\t\t\t})\n\t\t\t.replace(/y=\"([^\"]+)\"/, (_, y) => {\n\t\t\t\treturn 'y=\"' + (parseFloat(y) + shadowStyle.offsetY) + '\"';\n\t\t\t});\n\n\t\t// Negative spread radius, we need another mask here.\n\t\tif (shadowStyle.spreadRadius && shadowStyle.spreadRadius < 0) {\n\t\t\ts += buildXMLString(\n\t\t\t\t'mask',\n\t\t\t\t{\n\t\t\t\t\tid: maskId + '-neg',\n\t\t\t\t\tmaskUnits: 'userSpaceOnUse'\n\t\t\t\t},\n\t\t\t\tfinalShape\n\t\t\t\t\t.replace('stroke=\"#fff\"', 'stroke=\"#000\"')\n\t\t\t\t\t.replace(\n\t\t\t\t\t\t/stroke-width=\"[^\"]+\"/,\n\t\t\t\t\t\t`stroke-width=\"${-shadowStyle.spreadRadius * 2}\"`\n\t\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tif (shadowStyle.spreadRadius && shadowStyle.spreadRadius < 0) {\n\t\t\tfinalShape = buildXMLString(\n\t\t\t\t'g',\n\t\t\t\t{\n\t\t\t\t\tmask: `url(#${maskId}-neg)`\n\t\t\t\t},\n\t\t\t\tfinalShape\n\t\t\t);\n\t\t}\n\n\t\ts +=\n\t\t\tbuildXMLString(\n\t\t\t\t'defs',\n\t\t\t\t{},\n\t\t\t\tbuildXMLString(\n\t\t\t\t\t'filter',\n\t\t\t\t\t{\n\t\t\t\t\t\tid: sid,\n\t\t\t\t\t\tx: `${(left / width) * 100}%`,\n\t\t\t\t\t\ty: `${(top / height) * 100}%`,\n\t\t\t\t\t\twidth: `${((right - left) / width) * 100}%`,\n\t\t\t\t\t\theight: `${((bottom - top) / height) * 100}%`\n\t\t\t\t\t},\n\t\t\t\t\tbuildXMLString('feGaussianBlur', {\n\t\t\t\t\t\t// According to the spec, we use the half of the blur radius as the standard\n\t\t\t\t\t\t// deviation for the filter.\n\t\t\t\t\t\t// > the image that would be generated by applying to the shadow a Gaussian\n\t\t\t\t\t\t// > blur with a standard deviation equal to half the blur radius\n\t\t\t\t\t\t// > https://www.w3.org/TR/css-backgrounds-3/#shadow-blur\n\t\t\t\t\t\tstdDeviation: shadowStyle.blurRadius / 2,\n\t\t\t\t\t\tresult: 'b'\n\t\t\t\t\t}) +\n\t\t\t\t\t\tbuildXMLString('feFlood', {\n\t\t\t\t\t\t\t'flood-color': shadowStyle.color,\n\t\t\t\t\t\t\tin: 'SourceGraphic',\n\t\t\t\t\t\t\tresult: 'f'\n\t\t\t\t\t\t}) +\n\t\t\t\t\t\tbuildXMLString('feComposite', {\n\t\t\t\t\t\t\tin: 'f',\n\t\t\t\t\t\t\tin2: 'b',\n\t\t\t\t\t\t\toperator: shadowStyle.inset ? 'out' : 'in'\n\t\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t) +\n\t\t\tbuildXMLString(\n\t\t\t\t'g',\n\t\t\t\t{\n\t\t\t\t\tmask: `url(#${maskId})`,\n\t\t\t\t\tfilter: `url(#${sid})`,\n\t\t\t\t\topacity: opacity\n\t\t\t\t},\n\t\t\t\tfinalShape\n\t\t\t);\n\n\t\tif (shadowStyle.inset) {\n\t\t\tinnerShadow += s;\n\t\t} else {\n\t\t\tshadow += s;\n\t\t}\n\t}\n\n\treturn [shadow, innerShadow];\n}\n","import { buildXMLString } from '../utils.js';\nimport type { GlyphBox } from '../font.js';\n\nfunction buildSkipInkSegments(\n\tstart: number,\n\tend: number,\n\tglyphBoxes: GlyphBox[],\n\ty: number,\n\tstrokeWidth: number,\n\tbaseline: number\n) {\n\tconst halfStroke = strokeWidth / 2;\n\tconst bleed = Math.max(halfStroke, strokeWidth * 1.25);\n\tconst skipRanges: [number, number][] = [];\n\n\tfor (const box of glyphBoxes) {\n\t\t// Only skip glyphs that actually cross the underline position and extend below the baseline.\n\t\tif (box.y2 < baseline + halfStroke || box.y1 > y + halfStroke) continue;\n\n\t\tconst from = Math.max(start, box.x1 - bleed);\n\t\tconst to = Math.min(end, box.x2 + bleed);\n\n\t\tif (from >= to) continue;\n\t\tif (skipRanges.length === 0) {\n\t\t\tskipRanges.push([from, to]);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst last = skipRanges[skipRanges.length - 1];\n\t\tif (from <= last[1]) {\n\t\t\tlast[1] = Math.max(last[1], to);\n\t\t} else {\n\t\t\tskipRanges.push([from, to]);\n\t\t}\n\t}\n\n\tif (!skipRanges.length) {\n\t\treturn [[start, end]] as [number, number][];\n\t}\n\n\tconst segments: [number, number][] = [];\n\tlet cursor = start;\n\n\tfor (const [from, to] of skipRanges) {\n\t\tif (from > cursor) {\n\t\t\tsegments.push([cursor, from]);\n\t\t}\n\t\tcursor = Math.max(cursor, to);\n\t\tif (cursor >= end) break;\n\t}\n\n\tif (cursor < end) {\n\t\tsegments.push([cursor, end]);\n\t}\n\n\treturn segments;\n}\n\nexport default function buildDecoration(\n\t{\n\t\twidth,\n\t\tleft,\n\t\ttop,\n\t\tascender,\n\t\tclipPathId,\n\t\tmatrix,\n\t\tglyphBoxes\n\t}: {\n\t\twidth: number;\n\t\tleft: number;\n\t\ttop: number;\n\t\tascender: number;\n\t\tclipPathId?: string;\n\t\tmatrix?: string;\n\t\tglyphBoxes?: GlyphBox[];\n\t},\n\tstyle: Record<string, any>\n) {\n\tconst {\n\t\ttextDecorationColor,\n\t\ttextDecorationStyle,\n\t\ttextDecorationLine,\n\t\ttextDecorationSkipInk,\n\t\tfontSize,\n\t\tcolor\n\t} = style;\n\tif (!textDecorationLine || textDecorationLine === 'none') return '';\n\n\t// The UA should use such font-based information when choosing auto line thicknesses wherever appropriate.\n\t// https://drafts.csswg.org/css-text-decor-4/#text-decoration-thickness\n\tconst height = Math.max(1, fontSize * 0.1);\n\n\tconst y =\n\t\ttextDecorationLine === 'line-through'\n\t\t\t? top + ascender * 0.7\n\t\t\t: textDecorationLine === 'underline'\n\t\t\t? top + ascender * 1.1\n\t\t\t: top;\n\n\tconst dasharray =\n\t\ttextDecorationStyle === 'dashed'\n\t\t\t? `${height * 1.2} ${height * 2}`\n\t\t\t: textDecorationStyle === 'dotted'\n\t\t\t? `0 ${height * 2}`\n\t\t\t: undefined;\n\n\tconst applySkipInk =\n\t\ttextDecorationLine === 'underline' &&\n\t\t(textDecorationSkipInk || 'auto') !== 'none' &&\n\t\tglyphBoxes?.length;\n\n\tconst baseline = top + ascender;\n\n\tconst segments = applySkipInk\n\t\t? buildSkipInkSegments(\n\t\t\t\tleft,\n\t\t\t\tleft + width,\n\t\t\t\tglyphBoxes,\n\t\t\t\ty,\n\t\t\t\theight,\n\t\t\t\tbaseline\n\t\t )\n\t\t: ([[left, left + width]] as [number, number][]);\n\n\t// https://www.w3.org/TR/css-backgrounds-3/#valdef-line-style-double\n\tconst extraLine =\n\t\ttextDecorationStyle === 'double'\n\t\t\t? segments\n\t\t\t\t\t.map(([x1, x2]) =>\n\t\t\t\t\t\tbuildXMLString('line', {\n\t\t\t\t\t\t\tx1,\n\t\t\t\t\t\t\ty1: y + height + 1,\n\t\t\t\t\t\t\tx2,\n\t\t\t\t\t\t\ty2: y + height + 1,\n\t\t\t\t\t\t\tstroke: textDecorationColor || color,\n\t\t\t\t\t\t\t'stroke-width': height,\n\t\t\t\t\t\t\t'stroke-dasharray': dasharray,\n\t\t\t\t\t\t\t'stroke-linecap':\n\t\t\t\t\t\t\t\ttextDecorationStyle === 'dotted'\n\t\t\t\t\t\t\t\t\t? 'round'\n\t\t\t\t\t\t\t\t\t: 'square',\n\t\t\t\t\t\t\ttransform: matrix\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t\t.join('')\n\t\t\t: '';\n\n\treturn (\n\t\t(clipPathId ? `<g clip-path=\"url(#${clipPathId})\">` : '') +\n\t\tsegments\n\t\t\t.map(([x1, x2]) =>\n\t\t\t\tbuildXMLString('line', {\n\t\t\t\t\tx1,\n\t\t\t\t\ty1: y,\n\t\t\t\t\tx2,\n\t\t\t\t\ty2: y,\n\t\t\t\t\tstroke: textDecorationColor || color,\n\t\t\t\t\t'stroke-width': height,\n\t\t\t\t\t'stroke-dasharray': dasharray,\n\t\t\t\t\t'stroke-linecap':\n\t\t\t\t\t\ttextDecorationStyle === 'dotted' ? 'round' : 'square',\n\t\t\t\t\ttransform: matrix\n\t\t\t\t})\n\t\t\t)\n\t\t\t.join('') +\n\t\textraLine +\n\t\t(clipPathId ? '</g>' : '')\n\t);\n}\n","export function stringFromCode(code: string): string {\n\tcode = code.replace('U+', '0x');\n\n\treturn String.fromCodePoint(Number(code));\n}\n\nexport const Space = stringFromCode('U+0020');\nexport const Tab = stringFromCode('U+0009');\nexport const HorizontalEllipsis = stringFromCode('U+2026');\n","import { FontEngine } from '../font.js';\nimport { segment } from '../utils.js';\n\nexport function genMeasurer(\n\tengine: FontEngine,\n\tisImage: (grapheme: string) => boolean,\n\tstyle: {\n\t\tfontSize: number;\n\t\tletterSpacing: number;\n\t}\n): {\n\tmeasureGrapheme: (grapheme: string) => number;\n\tmeasureGraphemeArray: (graphemes: string[]) => number;\n\tmeasureText: (text: string) => number;\n} {\n\tconst { fontSize, letterSpacing } = style;\n\n\tconst cache = new Map<string, number>();\n\n\tfunction measureGrapheme(grapheme: string): number {\n\t\tlet width = cache.get(grapheme);\n\n\t\tif (width === undefined) {\n\t\t\twidth = engine.measure(grapheme, { fontSize, letterSpacing });\n\t\t\tcache.set(grapheme, width);\n\t\t}\n\n\t\treturn width;\n\t}\n\n\tfunction measureGraphemeArray(graphemes: string[]): number {\n\t\tlet width = 0;\n\n\t\tfor (const grapheme of graphemes) {\n\t\t\tif (isImage(grapheme)) {\n\t\t\t\twidth += fontSize;\n\t\t\t} else {\n\t\t\t\twidth += measureGrapheme(grapheme);\n\t\t\t}\n\t\t}\n\n\t\treturn width;\n\t}\n\n\tfunction measureText(text: string): number {\n\t\treturn measureGraphemeArray(segment(text, 'grapheme'));\n\t}\n\n\treturn {\n\t\tmeasureGrapheme,\n\t\tmeasureGraphemeArray,\n\t\tmeasureText\n\t};\n}\n","import { Locale } from '../language.js';\nimport { isNumber, segment, splitByBreakOpportunities } from '../utils.js';\nimport { HorizontalEllipsis, Space } from './characters.js';\nimport { SerializedStyle } from '../handler/expand.js';\n\nexport function preprocess(\n\tcontent: string,\n\tstyle: SerializedStyle,\n\tlocale?: Locale\n): {\n\twords: string[];\n\trequiredBreaks: boolean[];\n\tallowSoftWrap: boolean;\n\tallowBreakWord: boolean;\n\tprocessedContent: string;\n\tshouldCollapseTabsAndSpaces: boolean;\n\tlineLimit: number;\n\tblockEllipsis: string;\n} {\n\tconst { textTransform, whiteSpace, wordBreak } = style;\n\n\tcontent = processTextTransform(content, textTransform, locale);\n\n\tconst {\n\t\tcontent: processedContent,\n\t\tshouldCollapseTabsAndSpaces,\n\t\tallowSoftWrap\n\t} = processWhiteSpace(content, whiteSpace);\n\n\tconst { words, requiredBreaks, allowBreakWord } = processWordBreak(\n\t\tprocessedContent,\n\t\twordBreak\n\t);\n\n\tconst [lineLimit, blockEllipsis] = processTextOverflow(\n\t\tstyle,\n\t\tallowSoftWrap\n\t);\n\n\treturn {\n\t\twords,\n\t\trequiredBreaks,\n\t\tallowSoftWrap,\n\t\tallowBreakWord,\n\t\tprocessedContent,\n\t\tshouldCollapseTabsAndSpaces,\n\t\tlineLimit,\n\t\tblockEllipsis\n\t};\n}\n\nfunction processTextTransform(\n\tcontent: string,\n\ttextTransform: string,\n\tlocale?: Locale\n): string {\n\tif (textTransform === 'uppercase') {\n\t\tcontent = content.toLocaleUpperCase(locale);\n\t} else if (textTransform === 'lowercase') {\n\t\tcontent = content.toLocaleLowerCase(locale);\n\t} else if (textTransform === 'capitalize') {\n\t\tcontent = segment(content, 'word', locale)\n\t\t\t// For each word...\n\t\t\t.map(word => {\n\t\t\t\t// ...split into graphemes...\n\t\t\t\treturn segment(word, 'grapheme', locale)\n\t\t\t\t\t.map((grapheme, index) => {\n\t\t\t\t\t\t// ...and make the first grapheme uppercase\n\t\t\t\t\t\treturn index === 0\n\t\t\t\t\t\t\t? grapheme.toLocaleUpperCase(locale)\n\t\t\t\t\t\t\t: grapheme;\n\t\t\t\t\t})\n\t\t\t\t\t.join('');\n\t\t\t})\n\t\t\t.join('');\n\t}\n\n\treturn content;\n}\n\nfunction processTextOverflow(\n\tstyle: SerializedStyle,\n\tallowSoftWrap: boolean\n): [number, string?] {\n\tconst {\n\t\ttextOverflow,\n\t\tlineClamp,\n\t\tWebkitLineClamp,\n\t\tWebkitBoxOrient,\n\t\toverflow,\n\t\tdisplay\n\t} = style;\n\n\tif (display === 'block' && lineClamp) {\n\t\tconst [lineLimit, blockEllipsis = HorizontalEllipsis] =\n\t\t\tparseLineClamp(lineClamp);\n\t\tif (lineLimit) {\n\t\t\treturn [lineLimit, blockEllipsis];\n\t\t}\n\t}\n\n\tif (\n\t\ttextOverflow === 'ellipsis' &&\n\t\tdisplay === '-webkit-box' &&\n\t\tWebkitBoxOrient === 'vertical' &&\n\t\tisNumber(WebkitLineClamp) &&\n\t\tWebkitLineClamp > 0\n\t) {\n\t\treturn [WebkitLineClamp, HorizontalEllipsis];\n\t}\n\n\tif (\n\t\ttextOverflow === 'ellipsis' &&\n\t\toverflow === 'hidden' &&\n\t\t!allowSoftWrap\n\t) {\n\t\treturn [1, HorizontalEllipsis];\n\t}\n\n\treturn [Infinity];\n}\n\nfunction processWordBreak(\n\tcontent,\n\twordBreak: string\n): { words: string[]; requiredBreaks: boolean[]; allowBreakWord: boolean } {\n\tconst allowBreakWord = ['break-all', 'break-word'].includes(wordBreak);\n\n\tconst { words, requiredBreaks } = splitByBreakOpportunities(\n\t\tcontent,\n\t\twordBreak\n\t);\n\n\treturn { words, requiredBreaks, allowBreakWord };\n}\n\nfunction processWhiteSpace(\n\tcontent: string,\n\twhiteSpace: string\n): {\n\tcontent: string;\n\tshouldCollapseTabsAndSpaces: boolean;\n\tallowSoftWrap: boolean;\n} {\n\tconst shouldKeepLinebreak = ['pre', 'pre-wrap', 'pre-line'].includes(\n\t\twhiteSpace\n\t);\n\n\tconst shouldCollapseTabsAndSpaces = [\n\t\t'normal',\n\t\t'nowrap',\n\t\t'pre-line'\n\t].includes(whiteSpace);\n\n\tconst allowSoftWrap = !['pre', 'nowrap'].includes(whiteSpace);\n\n\tif (!shouldKeepLinebreak) {\n\t\tcontent = content.replace(/\\n/g, Space);\n\t}\n\n\tif (shouldCollapseTabsAndSpaces) {\n\t\tcontent = content\n\t\t\t.replace(/([ ]|\\t)+/g, Space)\n\t\t\t.replace(/^[ ]|[ ]$/g, '');\n\t}\n\n\treturn { content, shouldCollapseTabsAndSpaces, allowSoftWrap };\n}\n\nfunction parseLineClamp(input: number | string): [number?, string?] {\n\tif (typeof input === 'number') return [input];\n\n\tconst regex1 = /^(\\d+)\\s*\"(.*)\"$/;\n\tconst regex2 = /^(\\d+)\\s*'(.*)'$/;\n\tconst match1 = regex1.exec(input);\n\tconst match2 = regex2.exec(input);\n\n\tif (match1) {\n\t\tconst number = +match1[1];\n\t\tconst text = match1[2];\n\n\t\treturn [number, text];\n\t} else if (match2) {\n\t\tconst number = +match2[1];\n\t\tconst text = match2[2];\n\n\t\treturn [number, text];\n\t}\n\n\treturn [];\n}\n","/**\n * This module calculates the layout of a text string. Currently the only\n * supported inline node is text. All other nodes are using block layout.\n */\nimport type { LayoutContext } from '../layout.js';\nimport {\n\tv,\n\tsegment,\n\twordSeparators,\n\tbuildXMLString,\n\tisUndefined,\n\tisString,\n\tlengthToNumber\n} from '../utils.js';\nimport { getYoga, TYoga, YogaNode } from '../yoga.js';\nimport buildText, { container } from '../builder/text.js';\nimport { buildDropShadow } from '../builder/shadow.js';\nimport buildDecoration from '../builder/text-decoration.js';\nimport type { GlyphBox } from '../font.js';\nimport { Locale } from '../language.js';\nimport { HorizontalEllipsis, Space, Tab } from './characters.js';\nimport { genMeasurer } from './measurer.js';\nimport { preprocess } from './processor.js';\nimport cssColorParse from 'parse-css-color';\n\nconst skippedWordWhenFindingMissingFont = new Set([Tab]);\n\nfunction shouldSkipWhenFindingMissingFont(word: string): boolean {\n\treturn skippedWordWhenFindingMissingFont.has(word);\n}\n\nfunction isFullyTransparent(color: string): boolean {\n\tif (color === 'transparent') return true;\n\tconst parsed = cssColorParse(color);\n\treturn parsed ? parsed.alpha === 0 : false;\n}\n\nfunction isOpaqueWhite(color: string): boolean {\n\tif (!color) return false;\n\tconst parsed = cssColorParse(color);\n\tif (!parsed) return false;\n\tconst [r, g, b, a] = parsed.values;\n\treturn r === 255 && g === 255 && b === 255 && (a === undefined || a === 1);\n}\n\nexport default async function* buildTextNodes(\n\tcontent: string,\n\tcontext: LayoutContext\n): AsyncGenerator<{ word: string; locale?: Locale }[], string, [any, any]> {\n\tconst Yoga = await getYoga();\n\n\tconst {\n\t\tparentStyle,\n\t\tinheritedStyle,\n\t\tparent,\n\t\tfont,\n\t\tid,\n\t\tisInheritingTransform,\n\t\tdebug,\n\t\tembedFont,\n\t\tgraphemeImages,\n\t\tlocale,\n\t\tcanLoadAdditionalAssets\n\t} = context;\n\n\tconst {\n\t\ttextAlign,\n\t\ttextIndent = 0,\n\t\tlineHeight,\n\t\ttextWrap,\n\t\tfontSize,\n\t\tfilter: cssFilter,\n\t\ttabSize = 8,\n\t\tletterSpacing,\n\t\t_inheritedBackgroundClipTextPath,\n\t\t_inheritedBackgroundClipTextHasBackground,\n\t\tflexShrink\n\t} = parentStyle;\n\n\tconst {\n\t\twords,\n\t\trequiredBreaks,\n\t\tallowSoftWrap,\n\t\tallowBreakWord,\n\t\tprocessedContent,\n\t\tshouldCollapseTabsAndSpaces,\n\t\tlineLimit,\n\t\tblockEllipsis\n\t} = preprocess(content, parentStyle, locale);\n\n\tconst textContainer = createTextContainerNode(Yoga, textAlign);\n\tparent.insertChild(textContainer, parent.getChildCount());\n\n\tif (isUndefined(flexShrink)) {\n\t\tparent.setFlexShrink(1);\n\t}\n\n\t// Get the correct font according to the container style.\n\t// https://www.w3.org/TR/CSS2/visudet.html\n\tlet engine = font.getEngine(fontSize, lineHeight, parentStyle, locale);\n\n\t// Yield segments that are missing a font.\n\tconst wordsMissingFont = canLoadAdditionalAssets\n\t\t? segment(processedContent, 'grapheme').filter(\n\t\t\t\tword =>\n\t\t\t\t\t!shouldSkipWhenFindingMissingFont(word) && !engine.has(word)\n\t\t )\n\t\t: [];\n\n\tyield wordsMissingFont.map(word => {\n\t\treturn {\n\t\t\tword,\n\t\t\tlocale\n\t\t};\n\t});\n\n\tif (wordsMissingFont.length) {\n\t\t// Reload the engine with additional fonts.\n\t\tengine = font.getEngine(fontSize, lineHeight, parentStyle, locale);\n\t}\n\n\tfunction isImage(s: string): boolean {\n\t\treturn !!(graphemeImages && graphemeImages[s]);\n\t}\n\n\tconst { measureGrapheme, measureGraphemeArray, measureText } = genMeasurer(\n\t\tengine,\n\t\tisImage,\n\t\t{\n\t\t\tfontSize,\n\t\t\tletterSpacing\n\t\t}\n\t);\n\n\tconst tabWidth = isString(tabSize)\n\t\t? lengthToNumber(tabSize, fontSize, 1, parentStyle)\n\t\t: measureGrapheme(Space) * tabSize;\n\n\tconst calc = (\n\t\ttext: string,\n\t\tcurrentWidth: number\n\t): {\n\t\toriginWidth: number;\n\t\tendingSpacesWidth: number;\n\t\ttext: string;\n\t} => {\n\t\tif (text.length === 0) {\n\t\t\treturn {\n\t\t\t\toriginWidth: 0,\n\t\t\t\tendingSpacesWidth: 0,\n\t\t\t\ttext\n\t\t\t};\n\t\t}\n\n\t\tconst { index, tabCount } = detectTabs(text);\n\n\t\tlet originWidth = 0;\n\n\t\tif (tabCount > 0) {\n\t\t\tconst textBeforeTab = text.slice(0, index);\n\t\t\tconst textAfterTab = text.slice(index + tabCount);\n\t\t\tconst textWidthBeforeTab = measureText(textBeforeTab);\n\t\t\tconst offsetBeforeTab = textWidthBeforeTab + currentWidth;\n\t\t\tconst tabMoveDistance =\n\t\t\t\ttabWidth === 0\n\t\t\t\t\t? textWidthBeforeTab\n\t\t\t\t\t: (Math.floor(offsetBeforeTab / tabWidth) + tabCount) *\n\t\t\t\t\t tabWidth;\n\t\t\toriginWidth = tabMoveDistance + measureText(textAfterTab);\n\t\t} else {\n\t\t\toriginWidth = measureText(text);\n\t\t}\n\n\t\tconst afterTrimEndWidth =\n\t\t\ttext.trimEnd() === text ? originWidth : measureText(text.trimEnd());\n\n\t\treturn {\n\t\t\toriginWidth,\n\t\t\tendingSpacesWidth: originWidth - afterTrimEndWidth,\n\t\t\ttext\n\t\t};\n\t};\n\n\t// Global variables used to compute the text layout.\n\t// @TODO: Use segments instead of words to properly support kerning.\n\tlet lineWidths = [];\n\tlet baselines = [];\n\tlet lineSegmentNumber = [];\n\tlet texts: string[] = [];\n\tlet wordPositionInLayout: (null | {\n\t\tx: number;\n\t\ty: number;\n\t\twidth: number;\n\t\tline: number;\n\t\tlineIndex: number;\n\t\tisImage: boolean;\n\t})[] = [];\n\n\t// With the given container width, compute the text layout.\n\tfunction flow(width: number) {\n\t\tlet lines = 0;\n\t\tlet maxWidth = 0;\n\t\tlet lineIndex = -1;\n\t\tlet height = 0;\n\t\tlet currentWidth = 0;\n\t\tlet currentLineHeight = 0;\n\t\tlet currentBaselineOffset = 0;\n\n\t\tlineWidths = [];\n\t\tlineSegmentNumber = [0];\n\t\ttexts = [];\n\t\twordPositionInLayout = [];\n\n\t\t// We naively implement the width calculation without proper kerning.\n\t\t// @TODO: Support different writing modes.\n\t\t// @TODO: Support RTL languages.\n\t\tlet i = 0;\n\t\tlet prevLineEndingSpacesWidth = 0;\n\t\twhile (i < words.length && lines < lineLimit) {\n\t\t\tlet word = words[i];\n\t\t\tconst forceBreak = requiredBreaks[i];\n\n\t\t\tlet w = 0;\n\n\t\t\tconst {\n\t\t\t\toriginWidth,\n\t\t\t\tendingSpacesWidth,\n\t\t\t\ttext: _word\n\t\t\t} = calc(word, currentWidth);\n\t\t\tword = _word;\n\n\t\t\tw = originWidth;\n\t\t\tconst lineEndingSpacesWidth = endingSpacesWidth;\n\n\t\t\t// When starting a new line from an empty line, we should push one extra\n\t\t\t// line height.\n\t\t\tif (forceBreak && currentLineHeight === 0) {\n\t\t\t\tcurrentLineHeight = engine.height(word);\n\t\t\t}\n\n\t\t\tconst allowedToJustify = textAlign === 'justify';\n\n\t\t\tconst willWrap =\n\t\t\t\ti &&\n\t\t\t\t// When determining whether a line break is necessary, the width of the\n\t\t\t\t// trailing spaces is not included in the calculation, as the end boundary\n\t\t\t\t// can be closely adjacent to the last non-space character.\n\t\t\t\t// e.g.\n\t\t\t\t// 'aaa bbb ccc'\n\t\t\t\t// When the break line happens at the end of the `bbb`, what we see looks like this\n\t\t\t\t// |aaa bbb|\n\t\t\t\t// |ccc |\n\t\t\t\tcurrentWidth + w > width + lineEndingSpacesWidth &&\n\t\t\t\tallowSoftWrap;\n\n\t\t\t// Need to break the word if:\n\t\t\t// - we have break-word\n\t\t\t// - the word is wider than the container width\n\t\t\t// - the word will be put at the beginning of the line\n\t\t\tconst needToBreakWord =\n\t\t\t\tallowBreakWord &&\n\t\t\t\tw > width &&\n\t\t\t\t(!currentWidth || willWrap || forceBreak);\n\n\t\t\tif (needToBreakWord) {\n\t\t\t\t// Break the word into multiple segments and continue the loop.\n\t\t\t\tconst chars = segment(word, 'grapheme');\n\t\t\t\twords.splice(i, 1, ...chars);\n\t\t\t\tif (currentWidth > 0) {\n\t\t\t\t\t// Start a new line, spaces can be ignored.\n\t\t\t\t\tlineWidths.push(currentWidth - prevLineEndingSpacesWidth);\n\t\t\t\t\tbaselines.push(currentBaselineOffset);\n\t\t\t\t\tlines++;\n\t\t\t\t\theight += currentLineHeight;\n\t\t\t\t\tcurrentWidth = 0;\n\t\t\t\t\tcurrentLineHeight = 0;\n\t\t\t\t\tcurrentBaselineOffset = 0;\n\t\t\t\t\tlineSegmentNumber.push(1);\n\t\t\t\t\tlineIndex = -1;\n\t\t\t\t}\n\t\t\t\tprevLineEndingSpacesWidth = lineEndingSpacesWidth;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (forceBreak || willWrap) {\n\t\t\t\t// Start a new line, spaces can be ignored.\n\t\t\t\tif (shouldCollapseTabsAndSpaces && word === Space) {\n\t\t\t\t\tw = 0;\n\t\t\t\t}\n\n\t\t\t\tlineWidths.push(currentWidth - prevLineEndingSpacesWidth);\n\t\t\t\tbaselines.push(currentBaselineOffset);\n\t\t\t\tlines++;\n\t\t\t\theight += currentLineHeight;\n\t\t\t\tcurrentWidth = w;\n\t\t\t\tcurrentLineHeight = w ? Math.round(engine.height(word)) : 0;\n\t\t\t\tcurrentBaselineOffset = w\n\t\t\t\t\t? Math.round(engine.baseline(word))\n\t\t\t\t\t: 0;\n\t\t\t\tlineSegmentNumber.push(1);\n\t\t\t\tlineIndex = -1;\n\n\t\t\t\t// If it's naturally broken, we update the max width.\n\t\t\t\t// Since if there are multiple lines, the width should fit the\n\t\t\t\t// container.\n\t\t\t\tif (!forceBreak) {\n\t\t\t\t\tmaxWidth = Math.max(maxWidth, width);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// It fits into the current line.\n\t\t\t\tcurrentWidth += w;\n\t\t\t\tconst glyphHeight = Math.round(engine.height(word));\n\t\t\t\tif (glyphHeight > currentLineHeight) {\n\t\t\t\t\t// Use the baseline of the highest segment as the baseline of the line.\n\t\t\t\t\tcurrentLineHeight = glyphHeight;\n\t\t\t\t\tcurrentBaselineOffset = Math.round(engine.baseline(word));\n\t\t\t\t}\n\t\t\t\tif (allowedToJustify) {\n\t\t\t\t\tlineSegmentNumber[lineSegmentNumber.length - 1]++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (allowedToJustify) {\n\t\t\t\tlineIndex++;\n\t\t\t}\n\n\t\t\tmaxWidth = Math.max(maxWidth, currentWidth);\n\n\t\t\tlet x = currentWidth - w;\n\n\t\t\tif (w === 0) {\n\t\t\t\twordPositionInLayout.push({\n\t\t\t\t\ty: height,\n\t\t\t\t\tx,\n\t\t\t\t\twidth: 0,\n\t\t\t\t\tline: lines,\n\t\t\t\t\tlineIndex,\n\t\t\t\t\tisImage: false\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst _texts = segment(word, 'word');\n\n\t\t\t\tfor (let j = 0; j < _texts.length; j++) {\n\t\t\t\t\tconst _text = _texts[j];\n\t\t\t\t\tlet _width = 0;\n\t\t\t\t\tlet _isImage = false;\n\n\t\t\t\t\tif (isImage(_text)) {\n\t\t\t\t\t\t_width = fontSize;\n\t\t\t\t\t\t_isImage = true;\n\t\t\t\t\t} else if (!embedFont && _text.length > 1) {\n\t\t\t\t\t\t// When embedFont is false, use measureText for multi-character strings\n\t\t\t\t\t\t// to ensure consistency with how currentWidth is accumulated (sum of\n\t\t\t\t\t\t// grapheme widths). measureGrapheme uses getAdvanceWidth which includes\n\t\t\t\t\t\t// kerning, causing position mismatches between consecutive <text> elements.\n\t\t\t\t\t\t_width = measureText(_text);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_width = measureGrapheme(_text);\n\t\t\t\t\t}\n\n\t\t\t\t\ttexts.push(_text);\n\t\t\t\t\twordPositionInLayout.push({\n\t\t\t\t\t\ty: height,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\twidth: _width,\n\t\t\t\t\t\tline: lines,\n\t\t\t\t\t\tlineIndex,\n\t\t\t\t\t\tisImage: _isImage\n\t\t\t\t\t});\n\n\t\t\t\t\tx += _width;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti++;\n\t\t\tprevLineEndingSpacesWidth = lineEndingSpacesWidth;\n\t\t}\n\n\t\tif (currentWidth) {\n\t\t\tif (lines < lineLimit) {\n\t\t\t\theight += currentLineHeight;\n\t\t\t}\n\t\t\tlines++;\n\t\t\tlineWidths.push(currentWidth);\n\t\t\tbaselines.push(currentBaselineOffset);\n\t\t}\n\n\t\t// @TODO: Support `line-height`.\n\t\treturn { width: maxWidth, height };\n\t}\n\n\t// It's possible that the text's measured size is different from the container's\n\t// size, because the container might have a fixed width or height or being\n\t// expanded by its parent.\n\tlet measuredTextSize = { width: 0, height: 0 };\n\ttextContainer.setMeasureFunc(containerWidth => {\n\t\tconst { width, height } = flow(containerWidth);\n\n\t\t// When doing `text-wrap: balance`, we reflow the text multiple times\n\t\t// using binary search to find the best width.\n\t\t// https://www.w3.org/TR/css-text-4/#valdef-text-wrap-balance\n\t\tif (textWrap === 'balance') {\n\t\t\tlet l = width / 2;\n\t\t\tlet r = width;\n\t\t\tlet m: number = width;\n\t\t\twhile (l + 1 < r) {\n\t\t\t\tm = (l + r) / 2;\n\t\t\t\tconst { height: mHeight } = flow(m);\n\t\t\t\tif (mHeight > height) {\n\t\t\t\t\tl = m;\n\t\t\t\t} else {\n\t\t\t\t\tr = m;\n\t\t\t\t}\n\t\t\t}\n\t\t\tflow(r);\n\t\t\tconst _width = Math.ceil(r);\n\t\t\tmeasuredTextSize = { width: _width, height };\n\t\t\treturn { width: _width, height };\n\t\t}\n\n\t\t// When doing `text-wrap: pretty`, we try to avoid ending a paragraph with a single word\n\t\t// by reshaping all lines in a way that achieves more balanced line lengths\n\t\t// This \"pretty\" line breaking algorithm tries to achieve optimal line breaks\n\t\t// that avoid orphans (single words at the end of a paragraph) and create\n\t\t// visually pleasing line lengths.\n\t\tif (textWrap === 'pretty') {\n\t\t\t// Check if the last line has a single word or is very short\n\t\t\t// (typically less than 1/3 of the container width)\n\t\t\tconst lastLineWidth = lineWidths[lineWidths.length - 1];\n\t\t\tconst isLastLineShort = lastLineWidth < width / 3;\n\n\t\t\tif (isLastLineShort) {\n\t\t\t\t// Reflow the paragraph with slightly adjusted line breaks\n\t\t\t\t// to avoid orphans and create more even line lengths\n\t\t\t\t// This is a simplified approach - a real implementation would use a\n\t\t\t\t// more sophisticated algorithm to find optimal line breaks\n\n\t\t\t\t// We'll just reflow once with slightly reduced width to force\n\t\t\t\t// redistribution of words. This is much simplified from the actual\n\t\t\t\t// paragraph-level line breaking algorithm which would compute scores\n\t\t\t\t// for different line break combinations.\n\t\t\t\tconst adjustedWidth = width * 0.9;\n\t\t\t\tconst result = flow(adjustedWidth);\n\n\t\t\t\t// Use the result if it reduces orphans without adding too many lines\n\t\t\t\tif (result.height <= height * 1.3) {\n\t\t\t\t\tmeasuredTextSize = { width, height: result.height };\n\t\t\t\t\treturn { width, height: result.height };\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst _width = Math.ceil(width);\n\t\tmeasuredTextSize = { width: _width, height };\n\t\t// This may be a temporary fix, I didn't dig deep into yoga.\n\t\t// But when the return value of width here doesn't change (assuming the value of width is 216.9),\n\t\t// when we later get the width through `parent.getComputedWidth()`, sometimes it returns 216 and sometimes 217.\n\t\t// I'm not sure if this is a yoga bug, but it seems related to the entire page width.\n\t\t// So I use Math.ceil.\n\t\treturn { width: _width, height };\n\t});\n\n\tconst [x, y] = yield;\n\n\tlet result = '';\n\tlet backgroundClipDef = '';\n\n\tconst clipPathId = inheritedStyle._inheritedClipPathId as\n\t\t| string\n\t\t| undefined;\n\tconst overflowMaskId = inheritedStyle._inheritedMaskId as\n\t\t| number\n\t\t| undefined;\n\n\tconst {\n\t\tleft: containerLeft,\n\t\ttop: containerTop,\n\t\twidth: containerWidth,\n\t\theight: containerHeight\n\t} = textContainer.getComputedLayout();\n\n\t// Convert textIndent to number if it's a string (e.g., percentage)\n\tconst textIndentNumber =\n\t\ttypeof textIndent === 'string'\n\t\t\t? lengthToNumber(\n\t\t\t\t\ttextIndent,\n\t\t\t\t\tfontSize,\n\t\t\t\t\tcontainerWidth,\n\t\t\t\t\tparentStyle,\n\t\t\t\t\ttrue\n\t\t\t ) || 0\n\t\t\t: textIndent;\n\n\tconst parentContainerInnerWidth =\n\t\tparent.getComputedWidth() -\n\t\tparent.getComputedPadding(Yoga.EDGE_LEFT) -\n\t\tparent.getComputedPadding(Yoga.EDGE_RIGHT) -\n\t\tparent.getComputedBorder(Yoga.EDGE_LEFT) -\n\t\tparent.getComputedBorder(Yoga.EDGE_RIGHT);\n\n\t// Attach offset to the current node.\n\tconst left = x + containerLeft;\n\tconst top = y + containerTop;\n\n\tconst { matrix, opacity } = container(\n\t\t{\n\t\t\tleft: containerLeft,\n\t\t\ttop: containerTop,\n\t\t\twidth: containerWidth,\n\t\t\theight: containerHeight,\n\t\t\tisInheritingTransform\n\t\t},\n\t\tparentStyle\n\t);\n\n\tlet filter = '';\n\tif (parentStyle.textShadowOffset) {\n\t\tconst { textShadowColor, textShadowOffset, textShadowRadius } =\n\t\t\tparentStyle;\n\n\t\tfilter = buildDropShadow(\n\t\t\t{\n\t\t\t\twidth: measuredTextSize.width,\n\t\t\t\theight: measuredTextSize.height,\n\t\t\t\tid\n\t\t\t},\n\t\t\t{\n\t\t\t\tshadowColor: textShadowColor,\n\t\t\t\tshadowOffset: textShadowOffset,\n\t\t\t\tshadowRadius: textShadowRadius\n\t\t\t},\n\t\t\tisFullyTransparent(parentStyle.color) ||\n\t\t\t\t(_inheritedBackgroundClipTextHasBackground &&\n\t\t\t\t\tisOpaqueWhite(parentStyle.color))\n\t\t);\n\n\t\tfilter = buildXMLString('defs', {}, filter);\n\t}\n\n\tlet decorationShape = '';\n\tlet mergedPath = '';\n\tlet extra = '';\n\tlet skippedLine = -1;\n\ttype DecorationLine = {\n\t\tleft: number;\n\t\ttop: number;\n\t\tascender: number;\n\t\twidth: number;\n\t};\n\tlet decorationLines: Record<number, DecorationLine | null> = {};\n\tlet decorationGlyphs: Record<number, GlyphBox[]> = {};\n\tlet wordBuffer: string | null = null;\n\tlet bufferedOffset = 0;\n\n\tfor (let i = 0; i < texts.length; i++) {\n\t\t// Skip whitespace and empty characters.\n\t\tconst layout = wordPositionInLayout[i];\n\t\tconst nextLayout = wordPositionInLayout[i + 1];\n\n\t\tif (!layout) continue;\n\n\t\tlet text = texts[i];\n\t\tlet path: string | null = null;\n\t\tlet isLastDisplayedBeforeEllipsis = false;\n\n\t\tconst image = graphemeImages ? graphemeImages[text] : null;\n\n\t\tlet topOffset = layout.y;\n\t\tlet leftOffset = layout.x;\n\t\tconst width = layout.width;\n\t\tconst line = layout.line;\n\t\tconst shouldCollectDecorationBoxes =\n\t\t\tparentStyle.textDecorationLine === 'underline' &&\n\t\t\t(parentStyle.textDecorationSkipInk || 'auto') !== 'none';\n\n\t\tif (line === skippedLine) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// When `text-align` is `justify`, the width of the line will be adjusted.\n\t\tlet extendedWidth = false;\n\n\t\t// Apply text-indent to the first line (for both single and multi-line text)\n\t\tif (line === 0 && textIndentNumber !== 0) {\n\t\t\tleftOffset += textIndentNumber;\n\t\t}\n\n\t\tif (lineWidths.length > 1) {\n\t\t\t// Calculate alignment. Note that for Flexbox, there is only text\n\t\t\t// alignment when the container is multi-line.\n\t\t\tconst remainingWidth = containerWidth - lineWidths[line];\n\t\t\tif (textAlign === 'right' || textAlign === 'end') {\n\t\t\t\tleftOffset += remainingWidth;\n\t\t\t} else if (textAlign === 'center') {\n\t\t\t\tleftOffset += remainingWidth / 2;\n\t\t\t} else if (textAlign === 'justify') {\n\t\t\t\t// Don't justify the last line.\n\t\t\t\tif (line < lineWidths.length - 1) {\n\t\t\t\t\tconst segments = lineSegmentNumber[line];\n\t\t\t\t\tconst gutter =\n\t\t\t\t\t\tsegments > 1 ? remainingWidth / (segments - 1) : 0;\n\t\t\t\t\tleftOffset += gutter * layout.lineIndex;\n\t\t\t\t\textendedWidth = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Only round for embedded fonts (paths benefit from pixel alignment).\n\t\t\t// For non-embedded fonts (<text> elements), keep fractional positions\n\t\t\t// to maintain consistent spacing between consecutive elements.\n\t\t\tif (embedFont) {\n\t\t\t\tleftOffset = Math.round(leftOffset);\n\t\t\t}\n\t\t}\n\n\t\tconst baselineOfLine = baselines[line];\n\t\tconst baselineOfWord = engine.baseline(text);\n\t\tconst heightOfWord = engine.height(text);\n\t\tconst baselineDelta = baselineOfLine - baselineOfWord;\n\n\t\tconst buildUnderlineBand = (offset: number) => {\n\t\t\tif (\n\t\t\t\t!shouldCollectDecorationBoxes ||\n\t\t\t\tparentStyle.textDecorationLine !== 'underline'\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst baseline = top + offset + baselineDelta + baselineOfWord;\n\t\t\treturn {\n\t\t\t\tunderlineY: baseline + baselineOfWord * 0.1,\n\t\t\t\tstrokeWidth: Math.max(1, fontSize * 0.1)\n\t\t\t};\n\t\t};\n\n\t\tif (!decorationLines[line]) {\n\t\t\tdecorationLines[line] = {\n\t\t\t\tleft: leftOffset,\n\t\t\t\ttop: top + topOffset + baselineDelta,\n\t\t\t\tascender: baselineOfWord,\n\t\t\t\twidth: extendedWidth ? containerWidth : lineWidths[line]\n\t\t\t};\n\t\t}\n\n\t\tif (lineLimit !== Infinity) {\n\t\t\tlet _blockEllipsis = blockEllipsis;\n\t\t\tlet ellipsisWidth = measureGrapheme(blockEllipsis);\n\t\t\tif (ellipsisWidth > parentContainerInnerWidth) {\n\t\t\t\t_blockEllipsis = HorizontalEllipsis;\n\t\t\t\tellipsisWidth = measureGrapheme(_blockEllipsis);\n\t\t\t}\n\t\t\tconst spaceWidth = measureGrapheme(Space);\n\t\t\tconst isNotLastLine = line < lineWidths.length - 1;\n\t\t\tconst isLastAllowedLine = line + 1 === lineLimit;\n\n\t\t\tfunction calcEllipsis(baseWidth: number, _text: string) {\n\t\t\t\tconst chars = segment(_text, 'grapheme', locale);\n\n\t\t\t\tlet subset = '';\n\t\t\t\tlet resolvedWidth = 0;\n\n\t\t\t\tfor (const char of chars) {\n\t\t\t\t\tconst w = baseWidth + measureGraphemeArray([subset + char]);\n\t\t\t\t\tif (\n\t\t\t\t\t\t// Keep at least one character:\n\t\t\t\t\t\t// > The first character or atomic inline-level element on a line\n\t\t\t\t\t\t// must be clipped rather than ellipsed.\n\t\t\t\t\t\t// https://drafts.csswg.org/css-overflow/#text-overflow\n\t\t\t\t\t\tsubset &&\n\t\t\t\t\t\tw + ellipsisWidth > parentContainerInnerWidth\n\t\t\t\t\t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tsubset += char;\n\t\t\t\t\tresolvedWidth = w;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tsubset,\n\t\t\t\t\tresolvedWidth\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tisLastAllowedLine &&\n\t\t\t\t(isNotLastLine || lineWidths[line] > parentContainerInnerWidth)\n\t\t\t) {\n\t\t\t\tif (\n\t\t\t\t\tleftOffset + width + ellipsisWidth + spaceWidth >\n\t\t\t\t\tparentContainerInnerWidth\n\t\t\t\t) {\n\t\t\t\t\tconst { subset, resolvedWidth } = calcEllipsis(\n\t\t\t\t\t\tleftOffset,\n\t\t\t\t\t\ttext\n\t\t\t\t\t);\n\n\t\t\t\t\ttext = subset + _blockEllipsis;\n\t\t\t\t\tskippedLine = line;\n\t\t\t\t\tdecorationLines[line].width = Math.max(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tresolvedWidth - decorationLines[line].left\n\t\t\t\t\t);\n\t\t\t\t\tisLastDisplayedBeforeEllipsis = true;\n\t\t\t\t} else if (nextLayout && nextLayout.line !== line) {\n\t\t\t\t\tif (textAlign === 'center') {\n\t\t\t\t\t\tconst { subset, resolvedWidth } = calcEllipsis(\n\t\t\t\t\t\t\tleftOffset,\n\t\t\t\t\t\t\ttext\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\ttext = subset + _blockEllipsis;\n\t\t\t\t\t\tskippedLine = line;\n\t\t\t\t\t\tdecorationLines[line].width = Math.max(\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\tresolvedWidth - decorationLines[line].left\n\t\t\t\t\t\t);\n\t\t\t\t\t\tisLastDisplayedBeforeEllipsis = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst nextLineText = texts[i + 1];\n\n\t\t\t\t\t\tconst { subset, resolvedWidth } = calcEllipsis(\n\t\t\t\t\t\t\twidth + leftOffset,\n\t\t\t\t\t\t\tnextLineText\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\ttext = text + subset + _blockEllipsis;\n\t\t\t\t\t\tskippedLine = line;\n\t\t\t\t\t\tdecorationLines[line].width = Math.max(\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\tresolvedWidth - decorationLines[line].left\n\t\t\t\t\t\t);\n\t\t\t\t\t\tisLastDisplayedBeforeEllipsis = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (image) {\n\t\t\t// For images, we remove the baseline offset.\n\t\t\ttopOffset += 0;\n\t\t} else if (embedFont) {\n\t\t\t// If the current word and the next word are on the same line, we try to\n\t\t\t// merge them together to better handle the kerning.\n\t\t\tif (\n\t\t\t\t!text.includes(Tab) &&\n\t\t\t\t!wordSeparators.includes(text) &&\n\t\t\t\ttexts[i + 1] &&\n\t\t\t\tnextLayout &&\n\t\t\t\t!nextLayout.isImage &&\n\t\t\t\ttopOffset === nextLayout.y &&\n\t\t\t\t!isLastDisplayedBeforeEllipsis\n\t\t\t) {\n\t\t\t\tif (wordBuffer === null) {\n\t\t\t\t\tbufferedOffset = leftOffset;\n\t\t\t\t}\n\t\t\t\twordBuffer = wordBuffer === null ? text : wordBuffer + text;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst finalizedSegment =\n\t\t\t\twordBuffer === null ? text : wordBuffer + text;\n\t\t\tconst finalizedLeftOffset =\n\t\t\t\twordBuffer === null ? leftOffset : bufferedOffset;\n\t\t\tconst finalizedWidth =\n\t\t\t\tlayout.width + leftOffset - finalizedLeftOffset;\n\n\t\t\tconst band = buildUnderlineBand(topOffset);\n\n\t\t\tconst svg = engine.getSVG(\n\t\t\t\tfinalizedSegment.replace(/(\\t)+/g, ''),\n\t\t\t\t{\n\t\t\t\t\tfontSize,\n\t\t\t\t\tleft: left + finalizedLeftOffset,\n\t\t\t\t\t// Since we need to pass the baseline position, add the ascender to the top.\n\t\t\t\t\ttop: top + topOffset + baselineOfWord + baselineDelta,\n\t\t\t\t\tletterSpacing\n\t\t\t\t},\n\t\t\t\tband\n\t\t\t);\n\n\t\t\tpath = svg.path;\n\n\t\t\tif (shouldCollectDecorationBoxes && svg.boxes && svg.boxes.length) {\n\t\t\t\t(decorationGlyphs[line] || (decorationGlyphs[line] = [])).push(\n\t\t\t\t\t...svg.boxes\n\t\t\t\t);\n\t\t\t}\n\n\t\t\twordBuffer = null;\n\n\t\t\tif (debug) {\n\t\t\t\textra +=\n\t\t\t\t\t// Glyph\n\t\t\t\t\tbuildXMLString('rect', {\n\t\t\t\t\t\tx: left + finalizedLeftOffset,\n\t\t\t\t\t\ty: top + topOffset + baselineDelta,\n\t\t\t\t\t\twidth: finalizedWidth,\n\t\t\t\t\t\theight: heightOfWord,\n\t\t\t\t\t\tfill: 'transparent',\n\t\t\t\t\t\tstroke: '#575eff',\n\t\t\t\t\t\t'stroke-width': 1,\n\t\t\t\t\t\ttransform: matrix ? matrix : undefined,\n\t\t\t\t\t\t'clip-path': clipPathId\n\t\t\t\t\t\t\t? `url(#${clipPathId})`\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}) +\n\t\t\t\t\t// Baseline\n\t\t\t\t\tbuildXMLString('line', {\n\t\t\t\t\t\tx1: left + leftOffset,\n\t\t\t\t\t\tx2: left + leftOffset + layout.width,\n\t\t\t\t\t\ty1: top + topOffset + baselineDelta + baselineOfWord,\n\t\t\t\t\t\ty2: top + topOffset + baselineDelta + baselineOfWord,\n\t\t\t\t\t\tstroke: '#14c000',\n\t\t\t\t\t\t'stroke-width': 1,\n\t\t\t\t\t\ttransform: matrix ? matrix : undefined,\n\t\t\t\t\t\t'clip-path': clipPathId\n\t\t\t\t\t\t\t? `url(#${clipPathId})`\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\t// We need manually add the font ascender height to ensure it starts\n\t\t\t// at the baseline because <text>'s alignment baseline is set to `hanging`\n\t\t\t// by default and supported to change in SVG 1.1.\n\t\t\ttopOffset += baselineOfWord + baselineDelta;\n\n\t\t\tif (shouldCollectDecorationBoxes && !image) {\n\t\t\t\tconst band = buildUnderlineBand(topOffset);\n\n\t\t\t\tconst svg = engine.getSVG(\n\t\t\t\t\ttext.replace(/(\\t)+/g, ''),\n\t\t\t\t\t{\n\t\t\t\t\t\tfontSize,\n\t\t\t\t\t\tleft: left + leftOffset,\n\t\t\t\t\t\ttop: top + topOffset,\n\t\t\t\t\t\tletterSpacing\n\t\t\t\t\t},\n\t\t\t\t\tband\n\t\t\t\t);\n\n\t\t\t\tif (svg.boxes && svg.boxes.length) {\n\t\t\t\t\t(\n\t\t\t\t\t\tdecorationGlyphs[line] || (decorationGlyphs[line] = [])\n\t\t\t\t\t).push(...svg.boxes);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (path !== null) {\n\t\t\tmergedPath += path + ' ';\n\t\t} else {\n\t\t\tconst [t, shape] = buildText(\n\t\t\t\t{\n\t\t\t\t\tcontent: text,\n\t\t\t\t\tfilter,\n\t\t\t\t\tid,\n\t\t\t\t\tleft: left + leftOffset,\n\t\t\t\t\ttop: top + topOffset,\n\t\t\t\t\twidth,\n\t\t\t\t\theight: heightOfWord,\n\t\t\t\t\tmatrix,\n\t\t\t\t\topacity,\n\t\t\t\t\timage,\n\t\t\t\t\tclipPathId,\n\t\t\t\t\tdebug,\n\t\t\t\t\tshape: !!_inheritedBackgroundClipTextPath\n\t\t\t\t},\n\t\t\t\tparentStyle\n\t\t\t);\n\t\t\tresult += t;\n\t\t\tbackgroundClipDef += shape;\n\t\t}\n\n\t\tif (isLastDisplayedBeforeEllipsis) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (parentStyle.textDecorationLine) {\n\t\tdecorationShape = Object.entries(decorationLines)\n\t\t\t.map(([lineIndex, deco]) => {\n\t\t\t\tif (!deco) return '';\n\t\t\t\tconst glyphBoxes = decorationGlyphs[lineIndex] || [];\n\n\t\t\t\treturn buildDecoration(\n\t\t\t\t\t{\n\t\t\t\t\t\tleft: left + deco.left,\n\t\t\t\t\t\ttop: deco.top,\n\t\t\t\t\t\twidth: deco.width,\n\t\t\t\t\t\tascender: deco.ascender,\n\t\t\t\t\t\tclipPathId,\n\t\t\t\t\t\tmatrix,\n\t\t\t\t\t\tglyphBoxes\n\t\t\t\t\t},\n\t\t\t\t\tparentStyle\n\t\t\t\t);\n\t\t\t})\n\t\t\t.join('');\n\t}\n\n\t// Embed the font as path.\n\tif (mergedPath) {\n\t\tconst p =\n\t\t\t(!isFullyTransparent(parentStyle.color) || filter) && opacity !== 0\n\t\t\t\t? `<g ${\n\t\t\t\t\t\toverflowMaskId ? `mask=\"url(#${overflowMaskId})\"` : ''\n\t\t\t\t } ${clipPathId ? `clip-path=\"url(#${clipPathId})\"` : ''}>` +\n\t\t\t\t buildXMLString('path', {\n\t\t\t\t\t\tfill:\n\t\t\t\t\t\t\tfilter &&\n\t\t\t\t\t\t\t(isFullyTransparent(parentStyle.color) ||\n\t\t\t\t\t\t\t\t(_inheritedBackgroundClipTextHasBackground &&\n\t\t\t\t\t\t\t\t\tisOpaqueWhite(parentStyle.color)))\n\t\t\t\t\t\t\t\t? 'black'\n\t\t\t\t\t\t\t\t: parentStyle.color,\n\t\t\t\t\t\td: mergedPath,\n\t\t\t\t\t\ttransform: matrix ? matrix : undefined,\n\t\t\t\t\t\topacity: opacity !== 1 ? opacity : undefined,\n\t\t\t\t\t\tstyle: cssFilter ? `filter:${cssFilter}` : undefined,\n\t\t\t\t\t\t'stroke-width': inheritedStyle.WebkitTextStrokeWidth\n\t\t\t\t\t\t\t? `${inheritedStyle.WebkitTextStrokeWidth}px`\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\tstroke: inheritedStyle.WebkitTextStrokeWidth\n\t\t\t\t\t\t\t? inheritedStyle.WebkitTextStrokeColor\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t'stroke-linejoin': inheritedStyle.WebkitTextStrokeWidth\n\t\t\t\t\t\t\t? 'round'\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t'paint-order': inheritedStyle.WebkitTextStrokeWidth\n\t\t\t\t\t\t\t? 'stroke'\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t }) +\n\t\t\t\t '</g>'\n\t\t\t\t: '';\n\n\t\tif (_inheritedBackgroundClipTextPath) {\n\t\t\tbackgroundClipDef = buildXMLString('path', {\n\t\t\t\td: mergedPath,\n\t\t\t\ttransform: matrix ? matrix : undefined\n\t\t\t});\n\t\t}\n\n\t\tresult +=\n\t\t\t(filter\n\t\t\t\t? filter +\n\t\t\t\t buildXMLString(\n\t\t\t\t\t\t'g',\n\t\t\t\t\t\t{ filter: `url(#satori_s-${id})` },\n\t\t\t\t\t\tp + decorationShape\n\t\t\t\t )\n\t\t\t\t: p + decorationShape) + extra;\n\t} else if (decorationShape) {\n\t\tresult += filter\n\t\t\t? buildXMLString(\n\t\t\t\t\t'g',\n\t\t\t\t\t{ filter: `url(#satori_s-${id})` },\n\t\t\t\t\tdecorationShape\n\t\t\t )\n\t\t\t: decorationShape;\n\t}\n\n\t// Attach information to the parent node.\n\tif (backgroundClipDef) {\n\t\t(parentStyle._inheritedBackgroundClipTextPath as any).value +=\n\t\t\tbackgroundClipDef;\n\t}\n\n\treturn result;\n}\n\nfunction createTextContainerNode(Yoga: TYoga, textAlign: string): YogaNode {\n\t// Create a container node for this text fragment.\n\tconst textContainer = Yoga.Node.create();\n\ttextContainer.setAlignItems(Yoga.ALIGN_BASELINE);\n\ttextContainer.setJustifyContent(\n\t\tv(\n\t\t\ttextAlign,\n\t\t\t{\n\t\t\t\tleft: Yoga.JUSTIFY_FLEX_START,\n\t\t\t\tright: Yoga.JUSTIFY_FLEX_END,\n\t\t\t\tcenter: Yoga.JUSTIFY_CENTER,\n\t\t\t\tjustify: Yoga.JUSTIFY_SPACE_BETWEEN,\n\t\t\t\t// We don't have other writing modes yet.\n\t\t\t\tstart: Yoga.JUSTIFY_FLEX_START,\n\t\t\t\tend: Yoga.JUSTIFY_FLEX_END\n\t\t\t},\n\t\t\tYoga.JUSTIFY_FLEX_START,\n\t\t\t'textAlign'\n\t\t)\n\t);\n\n\treturn textContainer;\n}\n\nfunction detectTabs(text: string):\n\t| {\n\t\t\tindex: null;\n\t\t\ttabCount: 0;\n\t }\n\t| {\n\t\t\tindex: number;\n\t\t\ttabCount: number;\n\t } {\n\tconst result = /(\\t)+/.exec(text);\n\treturn result\n\t\t? {\n\t\t\t\tindex: result.index,\n\t\t\t\ttabCount: result[0].length\n\t\t }\n\t\t: {\n\t\t\t\tindex: null,\n\t\t\t\ttabCount: 0\n\t\t };\n}\n","import { parseLinearGradient, ColorStop } from 'css-gradient-parser';\nimport { normalizeStops } from './utils.js';\nimport { buildXMLString, calcDegree, lengthToNumber } from '../../utils.js';\n\nexport function buildLinearGradient(\n\t{\n\t\tid,\n\t\twidth,\n\t\theight,\n\t\trepeatX,\n\t\trepeatY\n\t}: {\n\t\tid: string;\n\t\twidth: number;\n\t\theight: number;\n\t\trepeatX: boolean;\n\t\trepeatY: boolean;\n\t},\n\timage: string,\n\tdimensions: number[],\n\toffsets: number[],\n\tinheritableStyle: Record<string, number | string>,\n\tfrom?: 'background' | 'mask'\n) {\n\tconst parsed = parseLinearGradient(image);\n\tconst [imageWidth, imageHeight] = dimensions;\n\tconst repeating = image.startsWith('repeating');\n\n\t// Calculate the direction.\n\tlet points, length, xys;\n\n\tif (parsed.orientation.type === 'directional') {\n\t\tpoints = resolveXYFromDirection(parsed.orientation.value);\n\n\t\tlength = Math.sqrt(\n\t\t\tMath.pow((points.x2 - points.x1) * imageWidth, 2) +\n\t\t\t\tMath.pow((points.y2 - points.y1) * imageHeight, 2)\n\t\t);\n\t} else if (parsed.orientation.type === 'angular') {\n\t\tconst { length: l, ...p } = calcNormalPoint(\n\t\t\t(calcDegree(\n\t\t\t\t`${parsed.orientation.value.value}${parsed.orientation.value.unit}`\n\t\t\t) /\n\t\t\t\t180) *\n\t\t\t\tMath.PI,\n\t\t\timageWidth,\n\t\t\timageHeight\n\t\t);\n\n\t\tlength = l;\n\t\tpoints = p;\n\t}\n\n\txys = repeating\n\t\t? calcPercentage(parsed.stops, length, points, inheritableStyle)\n\t\t: points;\n\n\tconst stops = normalizeStops(\n\t\trepeating ? resolveRepeatingCycle(parsed.stops, length) : length,\n\t\tparsed.stops,\n\t\tinheritableStyle,\n\t\trepeating,\n\t\tfrom\n\t);\n\n\tconst gradientId = `satori_bi${id}`;\n\tconst patternId = `satori_pattern_${id}`;\n\n\tconst defs = buildXMLString(\n\t\t'pattern',\n\t\t{\n\t\t\tid: patternId,\n\t\t\tx: offsets[0] / width,\n\t\t\ty: offsets[1] / height,\n\t\t\twidth: repeatX ? imageWidth / width : '1',\n\t\t\theight: repeatY ? imageHeight / height : '1',\n\t\t\tpatternUnits: 'objectBoundingBox'\n\t\t},\n\t\tbuildXMLString(\n\t\t\t'linearGradient',\n\t\t\t{\n\t\t\t\tid: gradientId,\n\t\t\t\t...xys,\n\t\t\t\tspreadMethod: repeating ? 'repeat' : 'pad'\n\t\t\t},\n\t\t\tstops\n\t\t\t\t.map(stop =>\n\t\t\t\t\tbuildXMLString('stop', {\n\t\t\t\t\t\toffset: (stop.offset ?? 0) * 100 + '%',\n\t\t\t\t\t\t'stop-color': stop.color\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.join('')\n\t\t) +\n\t\t\tbuildXMLString('rect', {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t\twidth: imageWidth,\n\t\t\t\theight: imageHeight,\n\t\t\t\tfill: `url(#${gradientId})`\n\t\t\t})\n\t);\n\treturn [patternId, defs];\n}\n\nfunction resolveRepeatingCycle(stops: ColorStop[], length: number) {\n\tconst last = stops[stops.length - 1];\n\tconst { offset } = last;\n\tif (!offset) return length;\n\n\tif (offset.unit === '%') return (Number(offset.value) / 100) * length;\n\n\treturn Number(offset.value);\n}\n\nfunction resolveXYFromDirection(dir: string) {\n\tlet x1 = 0,\n\t\ty1 = 0,\n\t\tx2 = 0,\n\t\ty2 = 0;\n\n\tif (dir.includes('top')) {\n\t\ty1 = 1;\n\t} else if (dir.includes('bottom')) {\n\t\ty2 = 1;\n\t}\n\n\tif (dir.includes('left')) {\n\t\tx1 = 1;\n\t} else if (dir.includes('right')) {\n\t\tx2 = 1;\n\t}\n\n\tif (!x1 && !x2 && !y1 && !y2) {\n\t\ty1 = 1;\n\t}\n\n\treturn { x1, y1, x2, y2 };\n}\n\n/**\n * calc start point and end point of linear gradient\n */\nfunction calcNormalPoint(v: number, w: number, h: number) {\n\tconst r = Math.pow(h / w, 2);\n\n\t// make sure angle is 0 <= angle <= 360\n\tv = ((v % (Math.PI * 2)) + Math.PI * 2) % (Math.PI * 2);\n\n\tlet x1, y1, x2, y2, length, tmp, a, b;\n\n\tconst dfs = (angle: number) => {\n\t\tif (angle === 0) {\n\t\t\tx1 = 0;\n\t\t\ty1 = h;\n\t\t\tx2 = 0;\n\t\t\ty2 = 0;\n\t\t\tlength = h;\n\t\t\treturn;\n\t\t} else if (angle === Math.PI / 2) {\n\t\t\tx1 = 0;\n\t\t\ty1 = 0;\n\t\t\tx2 = w;\n\t\t\ty2 = 0;\n\t\t\tlength = w;\n\t\t\treturn;\n\t\t}\n\t\tif (angle > 0 && angle < Math.PI / 2) {\n\t\t\tx1 =\n\t\t\t\t((r * w) / 2 / Math.tan(angle) - h / 2) /\n\t\t\t\t(Math.tan(angle) + r / Math.tan(angle));\n\t\t\ty1 = Math.tan(angle) * x1 + h;\n\t\t\tx2 = Math.abs(w / 2 - x1) + w / 2;\n\t\t\ty2 = h / 2 - Math.abs(y1 - h / 2);\n\t\t\tlength = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n\t\t\t// y = -1 / tan * x = h / 2 +1 / tan * w/2\n\t\t\t// y = tan * x + h\n\t\t\ta =\n\t\t\t\t(w / 2 / Math.tan(angle) - h / 2) /\n\t\t\t\t(Math.tan(angle) + 1 / Math.tan(angle));\n\t\t\tb = Math.tan(angle) * a + h;\n\t\t\tlength =\n\t\t\t\t2 * Math.sqrt(Math.pow(w / 2 - a, 2) + Math.pow(h / 2 - b, 2));\n\t\t\treturn;\n\t\t} else if (angle > Math.PI / 2 && angle < Math.PI) {\n\t\t\tx1 =\n\t\t\t\t(h / 2 + (r * w) / 2 / Math.tan(angle)) /\n\t\t\t\t(Math.tan(angle) + r / Math.tan(angle));\n\t\t\ty1 = Math.tan(angle) * x1;\n\t\t\tx2 = Math.abs(w / 2 - x1) + w / 2;\n\t\t\ty2 = h / 2 + Math.abs(y1 - h / 2);\n\t\t\t// y = -1 / tan * x + h / 2 + 1 / tan * w / 2\n\t\t\t// y = tan * x\n\t\t\ta =\n\t\t\t\t(w / 2 / Math.tan(angle) + h / 2) /\n\t\t\t\t(Math.tan(angle) + 1 / Math.tan(angle));\n\t\t\tb = Math.tan(angle) * a;\n\t\t\tlength =\n\t\t\t\t2 * Math.sqrt(Math.pow(w / 2 - a, 2) + Math.pow(h / 2 - b, 2));\n\t\t\treturn;\n\t\t} else if (angle >= Math.PI) {\n\t\t\tdfs(angle - Math.PI);\n\n\t\t\ttmp = x1;\n\t\t\tx1 = x2;\n\t\t\tx2 = tmp;\n\t\t\ttmp = y1;\n\t\t\ty1 = y2;\n\t\t\ty2 = tmp;\n\t\t}\n\t};\n\n\tdfs(v);\n\n\treturn {\n\t\tx1: x1 / w,\n\t\ty1: y1 / h,\n\t\tx2: x2 / w,\n\t\ty2: y2 / h,\n\t\tlength\n\t};\n}\n\nfunction calcPercentage(\n\tstops: ColorStop[],\n\tlength: number,\n\tpoints: {\n\t\tx1: number;\n\t\ty1: number;\n\t\tx2: number;\n\t\ty2: number;\n\t},\n\tinheritableStyle: Record<string, string | number>\n) {\n\tconst { x1, x2, y1, y2 } = points;\n\tconst p1 = !stops[0].offset\n\t\t? 0\n\t\t: stops[0].offset.unit === '%'\n\t\t? Number(stops[0].offset.value) / 100\n\t\t: lengthToNumber(\n\t\t\t\t`${stops[0].offset.value}${stops[0].offset.unit}`,\n\t\t\t\tinheritableStyle.fontSize as number,\n\t\t\t\tlength,\n\t\t\t\tinheritableStyle,\n\t\t\t\ttrue\n\t\t ) / length;\n\tconst p2 = !stops.at(-1).offset\n\t\t? 1\n\t\t: stops.at(-1).offset.unit === '%'\n\t\t? Number(stops.at(-1).offset.value) / 100\n\t\t: lengthToNumber(\n\t\t\t\t`${stops.at(-1).offset.value}${stops.at(-1).offset.unit}`,\n\t\t\t\tinheritableStyle.fontSize as number,\n\t\t\t\tlength,\n\t\t\t\tinheritableStyle,\n\t\t\t\ttrue\n\t\t ) / length;\n\n\tconst sx = (x2 - x1) * p1 + x1;\n\tconst sy = (y2 - y1) * p1 + y1;\n\tconst ex = (x2 - x1) * p2 + x1;\n\tconst ey = (y2 - y1) * p2 + y1;\n\n\treturn {\n\t\tx1: sx,\n\t\ty1: sy,\n\t\tx2: ex,\n\t\ty2: ey\n\t};\n}\n","import { lengthToNumber } from '../../utils.js';\nimport cssColorParse from 'parse-css-color';\nimport type { ColorStop } from 'css-gradient-parser';\n\ninterface Stop {\n\tcolor: string;\n\toffset?: number;\n}\n\nexport function normalizeStops(\n\ttotalLength: number,\n\tcolorStops: ColorStop[],\n\tinheritedStyle: Record<string, string | number>,\n\trepeating: boolean,\n\tfrom?: 'background' | 'mask'\n) {\n\t// Resolve the color stops based on the spec:\n\t// https://drafts.csswg.org/css-images/#color-stop-syntax\n\tconst stops: Stop[] = [];\n\tconst lastColorStop = colorStops.at(-1);\n\tconst totalPercentage =\n\t\tlastColorStop &&\n\t\tlastColorStop.offset &&\n\t\tlastColorStop.offset.unit === '%' &&\n\t\trepeating\n\t\t\t? +lastColorStop.offset.value\n\t\t\t: 100;\n\tfor (const stop of colorStops) {\n\t\tconst { color } = stop;\n\t\tif (!stops.length) {\n\t\t\t// First stop, ensure it's at the start.\n\t\t\tstops.push({\n\t\t\t\toffset: 0,\n\t\t\t\tcolor\n\t\t\t});\n\n\t\t\tif (!stop.offset) continue;\n\t\t\tif (stop.offset.value === '0') continue;\n\t\t}\n\n\t\t// All offsets are relative values (0-1) in SVG.\n\t\tconst offset =\n\t\t\ttypeof stop.offset === 'undefined'\n\t\t\t\t? undefined\n\t\t\t\t: stop.offset.unit === '%'\n\t\t\t\t? +stop.offset.value / totalPercentage\n\t\t\t\t: Number(\n\t\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\t\t`${stop.offset.value}${stop.offset.unit}`,\n\t\t\t\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\t\t\t\ttotalLength,\n\t\t\t\t\t\t\tinheritedStyle,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t)\n\t\t\t\t ) / totalLength;\n\n\t\tstops.push({\n\t\t\toffset,\n\t\t\tcolor\n\t\t});\n\t}\n\tif (!stops.length) {\n\t\tstops.push({\n\t\t\toffset: 0,\n\t\t\tcolor: 'transparent'\n\t\t});\n\t}\n\t// Last stop, ensure it's at the end.\n\tconst lastStop = stops[stops.length - 1];\n\tif (lastStop.offset !== 1) {\n\t\tif (typeof lastStop.offset === 'undefined') {\n\t\t\tlastStop.offset = 1;\n\t\t} else if (repeating) {\n\t\t\tstops[stops.length - 1] = {\n\t\t\t\toffset: 1,\n\t\t\t\tcolor: lastStop.color\n\t\t\t};\n\t\t} else {\n\t\t\tstops.push({\n\t\t\t\toffset: 1,\n\t\t\t\tcolor: lastStop.color\n\t\t\t});\n\t\t}\n\t}\n\n\tlet previousStop = 0;\n\tlet nextStop = 1;\n\t// Evenly distribute the missing stop offsets.\n\tfor (let i = 0; i < stops.length; i++) {\n\t\tif (typeof stops[i].offset === 'undefined') {\n\t\t\t// Find the next stop that has an offset.\n\t\t\tif (nextStop < i) nextStop = i;\n\t\t\twhile (typeof stops[nextStop].offset === 'undefined') nextStop++;\n\n\t\t\tstops[i].offset =\n\t\t\t\t((stops[nextStop].offset - stops[previousStop].offset) /\n\t\t\t\t\t(nextStop - previousStop)) *\n\t\t\t\t\t(i - previousStop) +\n\t\t\t\tstops[previousStop].offset;\n\t\t} else {\n\t\t\tpreviousStop = i;\n\t\t}\n\t}\n\n\tif (from === 'mask') {\n\t\treturn stops.map(stop => {\n\t\t\tconst color = cssColorParse(stop.color);\n\t\t\tif (!color) return stop;\n\t\t\tif (color.alpha === 0) {\n\t\t\t\treturn { ...stop, color: `rgba(0, 0, 0, 1)` };\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\t...stop,\n\t\t\t\t\tcolor: `rgba(255, 255, 255, ${color.alpha})`\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\t}\n\n\treturn stops;\n}\n","import {\n\tparseRadialGradient,\n\tRadialResult,\n\tRadialPropertyValue,\n\tColorStop\n} from 'css-gradient-parser';\nimport { buildXMLString, lengthToNumber } from '../../utils.js';\nimport { normalizeStops } from './utils.js';\n\nexport function buildRadialGradient(\n\t{\n\t\tid,\n\t\twidth,\n\t\theight,\n\t\trepeatX,\n\t\trepeatY\n\t}: {\n\t\tid: string;\n\t\twidth: number;\n\t\theight: number;\n\t\trepeatX: boolean;\n\t\trepeatY: boolean;\n\t},\n\timage: string,\n\tdimensions: number[],\n\toffsets: number[],\n\tinheritableStyle: Record<string, number | string>,\n\tfrom?: 'background' | 'mask'\n) {\n\tconst {\n\t\tshape,\n\t\tstops: colorStops,\n\t\tposition,\n\t\tsize,\n\t\trepeating\n\t} = parseRadialGradient(image);\n\tconst [xDelta, yDelta] = dimensions;\n\n\tlet cx: number = xDelta / 2;\n\tlet cy: number = yDelta / 2;\n\n\tconst pos = calcRadialGradient(\n\t\tposition.x,\n\t\tposition.y,\n\t\txDelta,\n\t\tyDelta,\n\t\tinheritableStyle.fontSize as number,\n\t\tinheritableStyle\n\t);\n\tcx = pos.x;\n\tcy = pos.y;\n\n\tconst colorStopTotalLength = calcColorStopTotalLength(\n\t\twidth,\n\t\tcolorStops,\n\t\trepeating,\n\t\tinheritableStyle\n\t);\n\n\tconst stops = normalizeStops(\n\t\tcolorStopTotalLength,\n\t\tcolorStops,\n\t\tinheritableStyle,\n\t\trepeating,\n\t\tfrom\n\t);\n\n\tconst gradientId = `satori_radial_${id}`;\n\tconst patternId = `satori_pattern_${id}`;\n\tconst maskId = `satori_mask_${id}`;\n\n\t// https://developer.mozilla.org/en-US/docs/Web/CSS/gradient/radial-gradient()#values\n\tconst spread = calcRadius(\n\t\tshape as Shape,\n\t\tsize,\n\t\tinheritableStyle.fontSize as number,\n\t\t{ x: cx, y: cy },\n\t\t[xDelta, yDelta],\n\t\tinheritableStyle,\n\t\trepeating\n\t);\n\n\tconst props = calcRadialGradientProps(\n\t\tshape as Shape,\n\t\tinheritableStyle.fontSize as number,\n\t\tcolorStops,\n\t\t[xDelta, yDelta],\n\t\tinheritableStyle,\n\t\trepeating,\n\t\tspread\n\t);\n\n\t// TODO: check for repeat-x/repeat-y\n\tconst defs = buildXMLString(\n\t\t'pattern',\n\t\t{\n\t\t\tid: patternId,\n\t\t\tx: offsets[0] / width,\n\t\t\ty: offsets[1] / height,\n\t\t\twidth: repeatX ? xDelta / width : '1',\n\t\t\theight: repeatY ? yDelta / height : '1',\n\t\t\tpatternUnits: 'objectBoundingBox'\n\t\t},\n\t\tbuildXMLString(\n\t\t\t'radialGradient',\n\t\t\t{\n\t\t\t\tid: gradientId,\n\t\t\t\t...props\n\t\t\t},\n\t\t\tstops\n\t\t\t\t.map(stop =>\n\t\t\t\t\tbuildXMLString('stop', {\n\t\t\t\t\t\toffset: stop.offset || 0,\n\t\t\t\t\t\t'stop-color': stop.color\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.join('')\n\t\t) +\n\t\t\tbuildXMLString(\n\t\t\t\t'mask',\n\t\t\t\t{\n\t\t\t\t\tid: maskId\n\t\t\t\t},\n\t\t\t\tbuildXMLString('rect', {\n\t\t\t\t\tx: 0,\n\t\t\t\t\ty: 0,\n\t\t\t\t\twidth: xDelta,\n\t\t\t\t\theight: yDelta,\n\t\t\t\t\tfill: '#fff'\n\t\t\t\t})\n\t\t\t) +\n\t\t\tbuildXMLString('rect', {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t\twidth: xDelta,\n\t\t\t\theight: yDelta,\n\t\t\t\tfill: stops.at(-1)?.color || 'transparent'\n\t\t\t}) +\n\t\t\tbuildXMLString(shape, {\n\t\t\t\tcx: cx,\n\t\t\t\tcy: cy,\n\t\t\t\twidth: xDelta,\n\t\t\t\theight: yDelta,\n\t\t\t\t...spread,\n\t\t\t\tfill: `url(#${gradientId})`,\n\t\t\t\tmask: `url(#${maskId})`\n\t\t\t})\n\t);\n\n\tconst result = [patternId, defs];\n\treturn result;\n}\n\ntype PositionKeyWord = 'center' | 'left' | 'right' | 'top' | 'bottom';\n\nfunction calcColorStopTotalLength(\n\twidth: number,\n\tstops: ColorStop[],\n\trepeating: boolean,\n\tinheritableStyle: Record<string, string | number>\n) {\n\tif (!repeating) return width;\n\tconst lastStop = stops.at(-1);\n\tif (!lastStop || !lastStop.offset || lastStop.offset.unit === '%')\n\t\treturn width;\n\n\treturn lengthToNumber(\n\t\t`${lastStop.offset.value}${lastStop.offset.unit}`,\n\t\t+inheritableStyle.fontSize,\n\t\twidth,\n\t\tinheritableStyle,\n\t\ttrue\n\t);\n}\n\nfunction calcRadialGradient(\n\tcx: RadialPropertyValue,\n\tcy: RadialPropertyValue,\n\txDelta: number,\n\tyDelta: number,\n\tbaseFontSize: number,\n\tstyle: Record<string, string | number>\n) {\n\tconst pos: { x: number; y: number } = { x: xDelta / 2, y: yDelta / 2 };\n\tif (cx.type === 'keyword') {\n\t\tObject.assign(\n\t\t\tpos,\n\t\t\tcalcPos(cx.value as PositionKeyWord, xDelta, yDelta, 'x')\n\t\t);\n\t} else {\n\t\tpos.x =\n\t\t\tlengthToNumber(\n\t\t\t\t`${cx.value.value}${cx.value.unit}`,\n\t\t\t\tbaseFontSize,\n\t\t\t\txDelta,\n\t\t\t\tstyle,\n\t\t\t\ttrue\n\t\t\t) ?? xDelta / 2;\n\t}\n\n\tif (cy.type === 'keyword') {\n\t\tObject.assign(\n\t\t\tpos,\n\t\t\tcalcPos(cy.value as PositionKeyWord, xDelta, yDelta, 'y')\n\t\t);\n\t} else {\n\t\tpos.y =\n\t\t\tlengthToNumber(\n\t\t\t\t`${cy.value.value}${cy.value.unit}`,\n\t\t\t\tbaseFontSize,\n\t\t\t\tyDelta,\n\t\t\t\tstyle,\n\t\t\t\ttrue\n\t\t\t) ?? yDelta / 2;\n\t}\n\n\treturn pos;\n}\n\nfunction calcPos(\n\tkey: PositionKeyWord,\n\txDelta: number,\n\tyDelta: number,\n\tdir: 'x' | 'y'\n) {\n\tswitch (key) {\n\t\tcase 'center':\n\t\t\treturn { [dir]: dir === 'x' ? xDelta / 2 : yDelta / 2 };\n\t\tcase 'left':\n\t\t\treturn { x: 0 };\n\t\tcase 'top':\n\t\t\treturn { y: 0 };\n\t\tcase 'right':\n\t\t\treturn { x: xDelta };\n\t\tcase 'bottom':\n\t\t\treturn { y: yDelta };\n\t}\n}\n\ntype Shape = 'circle' | 'ellipse';\n\nfunction calcRadialGradientProps(\n\tshape: Shape,\n\tbaseFontSize: number,\n\tcolorStops: ColorStop[],\n\t[xDelta, yDelta]: [number, number],\n\tinheritableStyle: Record<string, string | number>,\n\trepeating: boolean,\n\tspread: Record<string, number>\n) {\n\tconst { r, rx, ratio = 1 } = spread;\n\tif (!repeating) {\n\t\treturn {\n\t\t\tspreadMethod: 'pad'\n\t\t};\n\t}\n\tconst last = colorStops.at(-1);\n\tconst radius = shape === 'circle' ? r * 2 : rx * 2;\n\treturn {\n\t\tspreadMethod: 'repeat',\n\t\tcx: '50%',\n\t\tcy: '50%',\n\t\tr:\n\t\t\tlast.offset.unit === '%'\n\t\t\t\t? `${\n\t\t\t\t\t\t(Number(last.offset.value) *\n\t\t\t\t\t\t\tMath.min(yDelta / xDelta, 1)) /\n\t\t\t\t\t\tratio\n\t\t\t\t }%`\n\t\t\t\t: Number(\n\t\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\t\t`${last.offset.value}${last.offset.unit}`,\n\t\t\t\t\t\t\tbaseFontSize,\n\t\t\t\t\t\t\txDelta,\n\t\t\t\t\t\t\tinheritableStyle,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t) / radius\n\t\t\t\t )\n\t};\n}\n\nfunction calcRadius(\n\tshape: Shape,\n\tendingShape: RadialResult['size'],\n\tbaseFontSize: number,\n\tcenterAxis: { x: number; y: number },\n\tlength: [number, number],\n\tinheritableStyle: Record<string, string | number>,\n\trepeating: boolean\n) {\n\tconst [xDelta, yDelta] = length;\n\tconst { x: cx, y: cy } = centerAxis;\n\tconst spread: Record<string, number> = {};\n\tlet fx = 0;\n\tlet fy = 0;\n\n\tif (isSizeAllLength(endingShape)) {\n\t\tif (endingShape.some(v => v.value.value.startsWith('-'))) {\n\t\t\tthrow new Error(\n\t\t\t\t'disallow setting negative values to the size of the shape. Check https://w3c.github.io/csswg-drafts/css-images/#valdef-rg-size-length-0'\n\t\t\t);\n\t\t}\n\t\tif (shape === 'circle') {\n\t\t\tObject.assign(spread, {\n\t\t\t\tr: Number(\n\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\t`${endingShape[0].value.value}${endingShape[0].value.unit}`,\n\t\t\t\t\t\tbaseFontSize,\n\t\t\t\t\t\txDelta,\n\t\t\t\t\t\tinheritableStyle,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t});\n\t\t} else {\n\t\t\tObject.assign(spread, {\n\t\t\t\trx: Number(\n\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\t`${endingShape[0].value.value}${endingShape[0].value.unit}`,\n\t\t\t\t\t\tbaseFontSize,\n\t\t\t\t\t\txDelta,\n\t\t\t\t\t\tinheritableStyle,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\try: Number(\n\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\t`${endingShape[1].value.value}${endingShape[1].value.unit}`,\n\t\t\t\t\t\tbaseFontSize,\n\t\t\t\t\t\tyDelta,\n\t\t\t\t\t\tinheritableStyle,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t});\n\t\t}\n\t\tpatchSpread(spread, xDelta, yDelta, cx, cy, repeating, shape);\n\t\treturn spread;\n\t}\n\n\tswitch (endingShape[0].value) {\n\t\tcase 'farthest-corner':\n\t\t\tfx = Math.max(Math.abs(xDelta - cx), Math.abs(cx));\n\t\t\tfy = Math.max(Math.abs(yDelta - cy), Math.abs(cy));\n\t\t\tbreak;\n\t\tcase 'closest-corner':\n\t\t\tfx = Math.min(Math.abs(xDelta - cx), Math.abs(cx));\n\t\t\tfy = Math.min(Math.abs(yDelta - cy), Math.abs(cy));\n\t\t\tbreak;\n\t\tcase 'farthest-side':\n\t\t\tif (shape === 'circle') {\n\t\t\t\tspread.r = Math.max(\n\t\t\t\t\tMath.abs(xDelta - cx),\n\t\t\t\t\tMath.abs(cx),\n\t\t\t\t\tMath.abs(yDelta - cy),\n\t\t\t\t\tMath.abs(cy)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tspread.rx = Math.max(Math.abs(xDelta - cx), Math.abs(cx));\n\t\t\t\tspread.ry = Math.max(Math.abs(yDelta - cy), Math.abs(cy));\n\t\t\t}\n\t\t\tpatchSpread(spread, xDelta, yDelta, cx, cy, repeating, shape);\n\t\t\treturn spread;\n\t\tcase 'closest-side':\n\t\t\tif (shape === 'circle') {\n\t\t\t\tspread.r = Math.min(\n\t\t\t\t\tMath.abs(xDelta - cx),\n\t\t\t\t\tMath.abs(cx),\n\t\t\t\t\tMath.abs(yDelta - cy),\n\t\t\t\t\tMath.abs(cy)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tspread.rx = Math.min(Math.abs(xDelta - cx), Math.abs(cx));\n\t\t\t\tspread.ry = Math.min(Math.abs(yDelta - cy), Math.abs(cy));\n\t\t\t}\n\t\t\tpatchSpread(spread, xDelta, yDelta, cx, cy, repeating, shape);\n\n\t\t\treturn spread;\n\t}\n\tif (shape === 'circle') {\n\t\tspread.r = Math.sqrt(fx * fx + fy * fy);\n\t} else {\n\t\tObject.assign(spread, f2r(fx, fy));\n\t}\n\n\tpatchSpread(spread, xDelta, yDelta, cx, cy, repeating, shape);\n\n\treturn spread;\n}\n\n// compare with farthest-corner to make it cover the whole container\nfunction patchSpread(\n\tspread: Record<string, number>,\n\txDelta: number,\n\tyDelta: number,\n\tcx: number,\n\tcy: number,\n\trepeating: boolean,\n\tshape: Shape\n) {\n\tif (repeating) {\n\t\tif (shape === 'ellipse') {\n\t\t\tconst mfx = Math.max(Math.abs(xDelta - cx), Math.abs(cx));\n\t\t\tconst mfy = Math.max(Math.abs(yDelta - cy), Math.abs(cy));\n\n\t\t\tconst { rx: mrx, ry: mry } = f2r(mfx, mfy);\n\n\t\t\tspread.ratio = Math.max(mrx / spread.rx, mry / spread.ry);\n\t\t\tif (spread.ratio > 1) {\n\t\t\t\tspread.rx *= spread.ratio;\n\t\t\t\tspread.ry *= spread.ratio;\n\t\t\t}\n\t\t} else {\n\t\t\tconst mfx = Math.max(Math.abs(xDelta - cx), Math.abs(cx));\n\t\t\tconst mfy = Math.max(Math.abs(yDelta - cy), Math.abs(cy));\n\n\t\t\tconst mr = Math.sqrt(mfx * mfx + mfy * mfy);\n\n\t\t\tspread.ratio = mr / spread.r;\n\t\t\tif (spread.ratio > 1) {\n\t\t\t\tspread.r = mr;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction f2r(fx: number, fy: number) {\n\t// Spec: https://drafts.csswg.org/css-images/#typedef-size\n\t// Get the aspect ratio of the closest-side size.\n\tconst ratio = fy !== 0 ? fx / fy : 1;\n\n\tif (fx === 0) {\n\t\treturn {\n\t\t\trx: 0,\n\t\t\try: 0\n\t\t};\n\t} else {\n\t\t// fx^2/a^2 + fy^2/b^2 = 1\n\t\t// fx^2/(b*ratio)^2 + fy^2/b^2 = 1\n\t\t// (fx^2+fy^2*ratio^2) = (b*ratio)^2\n\t\t// b = sqrt(fx^2+fy^2*ratio^2)/ratio\n\n\t\tconst ry = Math.sqrt(fx * fx + fy * fy * ratio * ratio) / ratio;\n\t\treturn {\n\t\t\try,\n\t\t\trx: ry * ratio\n\t\t};\n\t}\n}\n\nfunction isSizeAllLength(v: RadialPropertyValue[]): v is Array<{\n\ttype: 'length';\n\tvalue: {\n\t\tunit: string;\n\t\tvalue: string;\n\t};\n}> {\n\treturn !v.some(s => s.type === 'keyword');\n}\n","import CssDimension from '../vendor/parse-css-dimension/index.js';\nimport { buildXMLString } from '../utils.js';\n\nimport { resolveImageData } from '../handler/image.js';\nimport { buildLinearGradient } from './gradient/linear.js';\nimport { buildRadialGradient } from './gradient/radial.js';\nimport cssColorParse from 'parse-css-color';\n\ninterface Background {\n\tattachment?: string;\n\tcolor?: string;\n\tclip: string;\n\timage: string;\n\torigin?: string;\n\tposition: string;\n\tsize: string;\n\trepeat: string;\n}\n\nfunction toAbsoluteValue(v: string | number, base: number) {\n\tif (typeof v === 'string' && v.endsWith('%')) {\n\t\treturn (base * parseFloat(v)) / 100;\n\t}\n\treturn typeof v === 'string' ? parseFloat(v) || 0 : +v;\n}\n\nfunction calculateKeywordSize(\n\tkeyword: string,\n\tcontainerWidth: number,\n\tcontainerHeight: number,\n\timageWidth: number,\n\timageHeight: number\n): [number, number] {\n\tif (!imageWidth || !imageHeight) {\n\t\treturn [containerWidth, containerHeight];\n\t}\n\n\tif (keyword === 'cover') {\n\t\t// Scale to cover the container (use max scale to ensure it covers)\n\t\tconst scaleX = containerWidth / imageWidth;\n\t\tconst scaleY = containerHeight / imageHeight;\n\t\tconst scale = Math.max(scaleX, scaleY);\n\t\treturn [imageWidth * scale, imageHeight * scale];\n\t}\n\n\tif (keyword === 'contain') {\n\t\t// Scale to fit within the container (use min scale to ensure it fits)\n\t\tconst scaleX = containerWidth / imageWidth;\n\t\tconst scaleY = containerHeight / imageHeight;\n\t\tconst scale = Math.min(scaleX, scaleY);\n\t\treturn [imageWidth * scale, imageHeight * scale];\n\t}\n\n\t// For 'auto' or other values, handle auto\n\tif (keyword === 'auto' || keyword.includes('auto')) {\n\t\tconst parts = keyword.split(' ');\n\t\tconst widthPart = parts[0] || 'auto';\n\t\tconst heightPart = parts[1] || parts[0] || 'auto';\n\n\t\tlet finalWidth = imageWidth;\n\t\tlet finalHeight = imageHeight;\n\n\t\tif (widthPart === 'auto' && heightPart !== 'auto') {\n\t\t\t// Width is auto, height is specified\n\t\t\tconst parsedHeight = toAbsoluteValue(heightPart, containerHeight);\n\t\t\tfinalHeight = parsedHeight;\n\t\t\tfinalWidth = (imageWidth / imageHeight) * parsedHeight;\n\t\t} else if (heightPart === 'auto' && widthPart !== 'auto') {\n\t\t\t// Height is auto, width is specified\n\t\t\tconst parsedWidth = toAbsoluteValue(widthPart, containerWidth);\n\t\t\tfinalWidth = parsedWidth;\n\t\t\tfinalHeight = (imageHeight / imageWidth) * parsedWidth;\n\t\t}\n\t\t// If both are auto, use intrinsic dimensions\n\n\t\treturn [finalWidth, finalHeight];\n\t}\n\n\treturn [containerWidth, containerHeight];\n}\n\nconst positionKeywordMap: Record<string, string> = {\n\tbottom: '100%',\n\tcenter: '50%',\n\tleft: '0%',\n\tright: '100%',\n\ttop: '0%'\n};\n\nexport function parsePositionValues(str: string): { x: string; y: string } {\n\tif (!str) {\n\t\treturn { x: '0%', y: '0%' };\n\t}\n\n\tconst parts = str.split(' ').filter(Boolean);\n\n\tif (parts.length === 1) {\n\t\tconst part = parts[0];\n\n\t\tif (part in positionKeywordMap) {\n\t\t\tif (part === 'top' || part === 'bottom') {\n\t\t\t\treturn { x: '50%', y: positionKeywordMap[part] };\n\t\t\t}\n\n\t\t\treturn { x: positionKeywordMap[part], y: '50%' };\n\t\t}\n\n\t\treturn { x: part, y: '50%' };\n\t}\n\n\treturn {\n\t\tx: positionKeywordMap[parts[0]] || parts[0],\n\t\ty: positionKeywordMap[parts[1]] || parts[1]\n\t};\n}\n\nexport function computeBgPositionOffset(\n\trawValue: string,\n\tcontainerSize: number,\n\timageSize: number\n): number {\n\tif (rawValue.endsWith('%')) {\n\t\tconst percentage = parseFloat(rawValue) / 100;\n\t\t// CSS spec: offset = (containerSize - imageSize) * percentage\n\t\treturn (containerSize - imageSize) * percentage;\n\t}\n\n\ttry {\n\t\tconst parsed = new CssDimension(rawValue);\n\n\t\treturn parsed.type === 'length' || parsed.type === 'number'\n\t\t\t? parsed.value\n\t\t\t: toAbsoluteValue(parsed.value + parsed.unit, containerSize);\n\t} catch {\n\t\treturn 0;\n\t}\n}\n\nfunction parseLengthPairs(\n\tstr: string,\n\t{\n\t\tx,\n\t\ty,\n\t\tdefaultX,\n\t\tdefaultY\n\t}: {\n\t\tx: number;\n\t\ty: number;\n\t\tdefaultX: number | string;\n\t\tdefaultY: number | string;\n\t}\n) {\n\tconst parsed = str\n\t\t? str\n\t\t\t\t.split(' ')\n\t\t\t\t.map(value => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst dim = new CssDimension(value);\n\t\t\t\t\t\treturn dim.type === 'length' || dim.type === 'number'\n\t\t\t\t\t\t\t? dim.value\n\t\t\t\t\t\t\t: dim.value + dim.unit;\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.filter(v => v !== null)\n\t\t: [defaultX, defaultY];\n\n\tif (parsed.length === 0) {\n\t\treturn [toAbsoluteValue(defaultX, x), toAbsoluteValue(defaultY, y)];\n\t}\n\n\tif (parsed.length === 1) {\n\t\tparsed.push(defaultY);\n\t}\n\n\treturn parsed.map((v, index) => toAbsoluteValue(v, [x, y][index]));\n}\n\nexport default async function backgroundImage(\n\t{\n\t\tid,\n\t\twidth,\n\t\theight,\n\t\tleft,\n\t\ttop\n\t}: { id: string; width: number; height: number; left: number; top: number },\n\t{ image, size, position, repeat }: Background,\n\tinheritableStyle: Record<string, number | string>,\n\tfrom?: 'background' | 'mask'\n): Promise<string[]> {\n\t// Default to `repeat`.\n\trepeat = repeat || 'repeat';\n\tfrom = from || 'background';\n\n\t// CSS spec: default background-size is 'auto' (use intrinsic dimensions).\n\tsize = size || 'auto';\n\n\t// CSS spec: single-value size means \"<value> auto\" (maintain aspect ratio).\n\tif (\n\t\tsize !== 'cover' &&\n\t\tsize !== 'contain' &&\n\t\tsize !== 'auto' &&\n\t\t!size.includes(' ')\n\t) {\n\t\tsize = `${size} auto`;\n\t}\n\n\tconst repeatX = repeat === 'repeat-x' || repeat === 'repeat';\n\tconst repeatY = repeat === 'repeat-y' || repeat === 'repeat';\n\n\t// Check if size is a keyword (cover, contain, auto) that needs to be calculated later\n\tconst isKeywordSize =\n\t\tsize &&\n\t\t(size === 'cover' ||\n\t\t\tsize === 'contain' ||\n\t\t\tsize === 'auto' ||\n\t\t\tsize.includes('auto'));\n\n\t// For gradients, keyword sizes (cover, contain, auto) resolve to the\n\t// container dimensions since gradients have no intrinsic size.\n\t// For url() images, keyword sizes are calculated later using the image's\n\t// intrinsic dimensions.\n\tconst isGradient =\n\t\timage.startsWith('linear-gradient(') ||\n\t\timage.startsWith('repeating-linear-gradient(') ||\n\t\timage.startsWith('radial-gradient(') ||\n\t\timage.startsWith('repeating-radial-gradient(');\n\n\tconst dimensions =\n\t\tisKeywordSize && isGradient\n\t\t\t? [width, height] // Gradients have no intrinsic size; keyword sizes resolve to container\n\t\t\t: isKeywordSize\n\t\t\t? [0, 0] // Will be calculated later when we have image dimensions\n\t\t\t: parseLengthPairs(size, {\n\t\t\t\t\tx: width,\n\t\t\t\t\ty: height,\n\t\t\t\t\tdefaultX: width,\n\t\t\t\t\tdefaultY: height\n\t\t\t });\n\tconst normalizedPos = parsePositionValues(position);\n\n\tif (\n\t\timage.startsWith('linear-gradient(') ||\n\t\timage.startsWith('repeating-linear-gradient(')\n\t) {\n\t\tconst offsets = [\n\t\t\tcomputeBgPositionOffset(normalizedPos.x, width, dimensions[0]),\n\t\t\tcomputeBgPositionOffset(normalizedPos.y, height, dimensions[1])\n\t\t];\n\t\treturn buildLinearGradient(\n\t\t\t{ id, width, height, repeatX, repeatY },\n\t\t\timage,\n\t\t\tdimensions,\n\t\t\toffsets,\n\t\t\tinheritableStyle,\n\t\t\tfrom\n\t\t);\n\t}\n\n\tif (\n\t\timage.startsWith('radial-gradient(') ||\n\t\timage.startsWith('repeating-radial-gradient(')\n\t) {\n\t\tconst offsets = [\n\t\t\tcomputeBgPositionOffset(normalizedPos.x, width, dimensions[0]),\n\t\t\tcomputeBgPositionOffset(normalizedPos.y, height, dimensions[1])\n\t\t];\n\t\treturn buildRadialGradient(\n\t\t\t{ id, width, height, repeatX, repeatY },\n\t\t\timage,\n\t\t\tdimensions,\n\t\t\toffsets,\n\t\t\tinheritableStyle,\n\t\t\tfrom\n\t\t);\n\t}\n\n\tif (image.startsWith('url(')) {\n\t\tconst [src, imageWidth, imageHeight] = await resolveImageData(\n\t\t\timage.slice(4, -1)\n\t\t);\n\n\t\tlet resolvedWidth: number;\n\t\tlet resolvedHeight: number;\n\n\t\tif (isKeywordSize) {\n\t\t\t// Calculate dimensions based on keyword (cover, contain, auto)\n\t\t\tconst [calcWidth, calcHeight] = calculateKeywordSize(\n\t\t\t\tsize,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\timageWidth,\n\t\t\t\timageHeight\n\t\t\t);\n\t\t\tresolvedWidth = calcWidth;\n\t\t\tresolvedHeight = calcHeight;\n\t\t} else {\n\t\t\t// Use the previously parsed dimensions\n\t\t\tconst dimensionsWithoutFallback = parseLengthPairs(size, {\n\t\t\t\tx: width,\n\t\t\t\ty: height,\n\t\t\t\tdefaultX: 0,\n\t\t\t\tdefaultY: 0\n\t\t\t});\n\t\t\tresolvedWidth =\n\t\t\t\tfrom === 'mask'\n\t\t\t\t\t? imageWidth || dimensionsWithoutFallback[0]\n\t\t\t\t\t: dimensionsWithoutFallback[0] || imageWidth;\n\t\t\tresolvedHeight =\n\t\t\t\tfrom === 'mask'\n\t\t\t\t\t? imageHeight || dimensionsWithoutFallback[1]\n\t\t\t\t\t: dimensionsWithoutFallback[1] || imageHeight;\n\t\t}\n\n\t\tif (isKeywordSize) {\n\t\t\t// For keyword sizes (cover, contain, auto), apply CSS background-position\n\t\t\t// formula: offset = (containerSize - imageSize) * percentage\n\t\t\tconst rawPos = parsePositionValues(position);\n\t\t\tconst imageOffsetX = computeBgPositionOffset(\n\t\t\t\trawPos.x,\n\t\t\t\twidth,\n\t\t\t\tresolvedWidth\n\t\t\t);\n\t\t\tconst imageOffsetY = computeBgPositionOffset(\n\t\t\t\trawPos.y,\n\t\t\t\theight,\n\t\t\t\tresolvedHeight\n\t\t\t);\n\n\t\t\treturn [\n\t\t\t\t`satori_bi${id}`,\n\t\t\t\tbuildXMLString(\n\t\t\t\t\t'pattern',\n\t\t\t\t\t{\n\t\t\t\t\t\tid: `satori_bi${id}`,\n\t\t\t\t\t\tpatternContentUnits: 'userSpaceOnUse',\n\t\t\t\t\t\tpatternUnits: 'userSpaceOnUse',\n\t\t\t\t\t\tx: (repeatX ? imageOffsetX : 0) + left,\n\t\t\t\t\t\ty: (repeatY ? imageOffsetY : 0) + top,\n\t\t\t\t\t\twidth: repeatX ? resolvedWidth : '100%',\n\t\t\t\t\t\theight: repeatY ? resolvedHeight : '100%'\n\t\t\t\t\t},\n\t\t\t\t\tbuildXMLString('image', {\n\t\t\t\t\t\tx: repeatX ? 0 : imageOffsetX,\n\t\t\t\t\t\ty: repeatY ? 0 : imageOffsetY,\n\t\t\t\t\t\twidth: resolvedWidth,\n\t\t\t\t\t\theight: resolvedHeight,\n\t\t\t\t\t\tpreserveAspectRatio: 'none',\n\t\t\t\t\t\thref: src\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t];\n\t\t}\n\n\t\tconst rawPos = parsePositionValues(position);\n\t\tconst imageOffsetX = computeBgPositionOffset(\n\t\t\trawPos.x,\n\t\t\twidth,\n\t\t\tresolvedWidth\n\t\t);\n\t\tconst imageOffsetY = computeBgPositionOffset(\n\t\t\trawPos.y,\n\t\t\theight,\n\t\t\tresolvedHeight\n\t\t);\n\n\t\treturn [\n\t\t\t`satori_bi${id}`,\n\t\t\tbuildXMLString(\n\t\t\t\t'pattern',\n\t\t\t\t{\n\t\t\t\t\tid: `satori_bi${id}`,\n\t\t\t\t\tpatternContentUnits: 'userSpaceOnUse',\n\t\t\t\t\tpatternUnits: 'userSpaceOnUse',\n\t\t\t\t\tx: (repeatX ? imageOffsetX : 0) + left,\n\t\t\t\t\ty: (repeatY ? imageOffsetY : 0) + top,\n\t\t\t\t\twidth: repeatX ? resolvedWidth : '100%',\n\t\t\t\t\theight: repeatY ? resolvedHeight : '100%'\n\t\t\t\t},\n\t\t\t\tbuildXMLString('image', {\n\t\t\t\t\tx: repeatX ? 0 : imageOffsetX,\n\t\t\t\t\ty: repeatY ? 0 : imageOffsetY,\n\t\t\t\t\twidth: resolvedWidth,\n\t\t\t\t\theight: resolvedHeight,\n\t\t\t\t\tpreserveAspectRatio: 'none',\n\t\t\t\t\thref: src\n\t\t\t\t})\n\t\t\t)\n\t\t];\n\t}\n\n\tif (cssColorParse(image)) {\n\t\tconst colorObj = cssColorParse(image);\n\t\tconst [r, g, b, a] = colorObj.values;\n\t\tconst alpha = a !== undefined ? a : 1;\n\t\tconst color = `rgba(${r},${g},${b},${alpha})`;\n\n\t\treturn [\n\t\t\t`satori_bi${id}`,\n\t\t\tbuildXMLString(\n\t\t\t\t'pattern',\n\t\t\t\t{\n\t\t\t\t\tid: `satori_bi${id}`,\n\t\t\t\t\tpatternContentUnits: 'userSpaceOnUse',\n\t\t\t\t\tpatternUnits: 'userSpaceOnUse',\n\t\t\t\t\tx: left,\n\t\t\t\t\ty: top,\n\t\t\t\t\twidth: width,\n\t\t\t\t\theight: height\n\t\t\t\t},\n\t\t\t\tbuildXMLString('rect', {\n\t\t\t\t\tx: 0,\n\t\t\t\t\ty: 0,\n\t\t\t\t\twidth: width,\n\t\t\t\t\theight: height,\n\t\t\t\t\tfill: color\n\t\t\t\t})\n\t\t\t)\n\t\t];\n\t}\n\n\tthrow new Error(`Invalid background image: \"${image}\"`);\n}\n","/**\n * CSS border radius to SVG path.\n */\n\n// TODO: Support the `border-radius: 10px / 20px` syntax.\n// https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius\n\nimport { buildXMLString, lengthToNumber } from '../utils.js';\n\n// Getting the intersection of a 45deg ray with the elliptical arc x^2/rx^2 + y^2/ry^2 = 1.\n// Reference:\n// https://www.w3.org/TR/SVG/implnote.html#ArcConversionEndpointToCenter\nfunction svgArcCenterOffset([rx, ry]: number[]) {\n\tif (Math.round(rx * 1000) === 0 && Math.round(ry * 1000) === 0) {\n\t\treturn 0;\n\t}\n\treturn Math.round(((rx * ry) / Math.sqrt(rx * rx + ry * ry)) * 1000) / 1000;\n}\n\nfunction resolveSize(a: number, b: number, limit: number) {\n\tif (limit < a + b) {\n\t\tif (limit / 2 < a && limit / 2 < b) {\n\t\t\ta = b = limit / 2;\n\t\t} else if (limit / 2 < a) {\n\t\t\ta = limit - b;\n\t\t} else if (limit / 2 < b) {\n\t\t\tb = limit - a;\n\t\t}\n\t}\n\treturn [a, b];\n}\n\nfunction makeSmaller(arr: [number, number]) {\n\tarr[0] = arr[1] = Math.min(arr[0], arr[1]);\n}\n\n// Each corner can have 2 values, the first is the horizontal radius, the second is the vertical radius.\nfunction resolveRadius(\n\tv: number | string | undefined,\n\twidth: number,\n\theight: number,\n\tfontSize: number,\n\tstyle: any\n): [boolean, undefined | [number, number]] {\n\tif (typeof v === 'string') {\n\t\tconst sides = v.split(' ').map(s => s.trim());\n\t\tconst singleValue = !sides[1] && !sides[0].endsWith('%');\n\t\tsides[1] = sides[1] || sides[0];\n\t\treturn [\n\t\t\tsingleValue,\n\t\t\t[\n\t\t\t\tMath.min(\n\t\t\t\t\tlengthToNumber(sides[0], fontSize, width, style, true),\n\t\t\t\t\twidth\n\t\t\t\t),\n\t\t\t\tMath.min(\n\t\t\t\t\tlengthToNumber(sides[1], fontSize, height, style, true),\n\t\t\t\t\theight\n\t\t\t\t)\n\t\t\t]\n\t\t];\n\t}\n\tif (typeof v === 'number') {\n\t\treturn [true, [Math.min(v, width), Math.min(v, height)]];\n\t}\n\treturn [true, undefined];\n}\n\nconst radiusZeroOrNull = (_radius?: [number, number]) =>\n\t_radius && _radius[0] !== 0 && _radius[1] !== 0;\n\nexport function getBorderRadiusClipPath(\n\t{\n\t\tid,\n\t\tborderRadiusPath,\n\t\tborderType,\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight\n\t}: {\n\t\tid: string;\n\t\tborderRadiusPath?: string;\n\t\tborderType?: 'rect' | 'path';\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t},\n\tstyle: Record<string, number | string>\n) {\n\tconst rectClipId = `satori_brc-${id}`;\n\tconst defs = buildXMLString(\n\t\t'clipPath',\n\t\t{\n\t\t\tid: rectClipId\n\t\t},\n\t\tbuildXMLString(borderType, {\n\t\t\tx: left,\n\t\t\ty: top,\n\t\t\twidth,\n\t\t\theight,\n\t\t\td: borderRadiusPath ? borderRadiusPath : undefined\n\t\t})\n\t);\n\n\treturn [defs, rectClipId];\n}\n\nexport default function radius(\n\t{\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight\n\t}: {\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t},\n\tstyle: Record<string, any>,\n\tpartialSides?: boolean[]\n) {\n\tlet {\n\t\tborderTopLeftRadius,\n\t\tborderTopRightRadius,\n\t\tborderBottomLeftRadius,\n\t\tborderBottomRightRadius,\n\t\tfontSize\n\t} = style;\n\n\tlet singleAbsValueTopLeftCorner;\n\tlet singleAbsValueTopRightCorner;\n\tlet singleAbsValueBottomLeftCorner;\n\tlet singleAbsValueBottomRightCorner;\n\t[singleAbsValueTopLeftCorner, borderTopLeftRadius] = resolveRadius(\n\t\tborderTopLeftRadius,\n\t\twidth,\n\t\theight,\n\t\tfontSize,\n\t\tstyle\n\t);\n\t[singleAbsValueTopRightCorner, borderTopRightRadius] = resolveRadius(\n\t\tborderTopRightRadius,\n\t\twidth,\n\t\theight,\n\t\tfontSize,\n\t\tstyle\n\t);\n\t[singleAbsValueBottomLeftCorner, borderBottomLeftRadius] = resolveRadius(\n\t\tborderBottomLeftRadius,\n\t\twidth,\n\t\theight,\n\t\tfontSize,\n\t\tstyle\n\t);\n\t[singleAbsValueBottomRightCorner, borderBottomRightRadius] = resolveRadius(\n\t\tborderBottomRightRadius,\n\t\twidth,\n\t\theight,\n\t\tfontSize,\n\t\tstyle\n\t);\n\n\tif (\n\t\t!partialSides &&\n\t\t!radiusZeroOrNull(borderTopLeftRadius) &&\n\t\t!radiusZeroOrNull(borderTopRightRadius) &&\n\t\t!radiusZeroOrNull(borderBottomLeftRadius) &&\n\t\t!radiusZeroOrNull(borderBottomRightRadius)\n\t) {\n\t\treturn '';\n\t}\n\tborderTopLeftRadius ||= [0, 0];\n\tborderTopRightRadius ||= [0, 0];\n\tborderBottomLeftRadius ||= [0, 0];\n\tborderBottomRightRadius ||= [0, 0];\n\n\t// Limit the radius sizes of each edge to make sure they will never overlap.\n\n\t// Top\n\t[borderTopLeftRadius[0], borderTopRightRadius[0]] = resolveSize(\n\t\tborderTopLeftRadius[0],\n\t\tborderTopRightRadius[0],\n\t\twidth\n\t);\n\t// Bottom\n\t[borderBottomLeftRadius[0], borderBottomRightRadius[0]] = resolveSize(\n\t\tborderBottomLeftRadius[0],\n\t\tborderBottomRightRadius[0],\n\t\twidth\n\t);\n\t// Left\n\t[borderTopLeftRadius[1], borderBottomLeftRadius[1]] = resolveSize(\n\t\tborderTopLeftRadius[1],\n\t\tborderBottomLeftRadius[1],\n\t\theight\n\t);\n\t// Right\n\t[borderTopRightRadius[1], borderBottomRightRadius[1]] = resolveSize(\n\t\tborderTopRightRadius[1],\n\t\tborderBottomRightRadius[1],\n\t\theight\n\t);\n\n\t// If the specified border radius is a single value (e.g. 10px or 10em), we take\n\t// the minimum of the resolved horizontal and vertical radius and apply to both.\n\tif (singleAbsValueTopLeftCorner) {\n\t\tmakeSmaller(borderTopLeftRadius);\n\t}\n\tif (singleAbsValueTopRightCorner) {\n\t\tmakeSmaller(borderTopRightRadius);\n\t}\n\tif (singleAbsValueBottomLeftCorner) {\n\t\tmakeSmaller(borderBottomLeftRadius);\n\t}\n\tif (singleAbsValueBottomRightCorner) {\n\t\tmakeSmaller(borderBottomRightRadius);\n\t}\n\n\ttype Arc = [[number, number], [number, number]];\n\tconst p: Arc[] = [];\n\tp[0] = [borderTopRightRadius, borderTopRightRadius];\n\tp[1] = [\n\t\tborderBottomRightRadius,\n\t\t[-borderBottomRightRadius[0], borderBottomRightRadius[1]]\n\t];\n\tp[2] = [\n\t\tborderBottomLeftRadius,\n\t\t[-borderBottomLeftRadius[0], -borderBottomLeftRadius[1]]\n\t];\n\tp[3] = [\n\t\tborderTopLeftRadius,\n\t\t[borderTopLeftRadius[0], -borderTopLeftRadius[1]]\n\t];\n\n\tconst T = `h${width - borderTopLeftRadius[0] - borderTopRightRadius[0]} a${\n\t\tp[0][0]\n\t} 0 0 1 ${p[0][1]}`;\n\tconst R = `v${\n\t\theight - borderTopRightRadius[1] - borderBottomRightRadius[1]\n\t} a${p[1][0]} 0 0 1 ${p[1][1]}`;\n\tconst B = `h${\n\t\tborderBottomRightRadius[0] + borderBottomLeftRadius[0] - width\n\t} a${p[2][0]} 0 0 1 ${p[2][1]}`;\n\tconst L = `v${\n\t\tborderBottomLeftRadius[1] + borderTopLeftRadius[1] - height\n\t} a${p[3][0]} 0 0 1 ${p[3][1]}`;\n\n\tif (partialSides) {\n\t\t// \"However it is not defined what these transitions look like or what function maps from this ratio to a point on the curve.\"\n\t\t// https://w3c.github.io/csswg-drafts/css-backgrounds-3/#corner-transitions\n\t\tlet start = partialSides.indexOf(false);\n\n\t\tif (!partialSides.includes(true))\n\t\t\tthrow new Error('Invalid `partialSides`.');\n\n\t\tif (start === -1) {\n\t\t\tstart = 0;\n\t\t} else {\n\t\t\twhile (!partialSides[start]) {\n\t\t\t\tstart = (start + 1) % 4;\n\t\t\t}\n\t\t}\n\n\t\tfunction getArc(i: number) {\n\t\t\tconst c0 = svgArcCenterOffset(\n\t\t\t\t[\n\t\t\t\t\tborderTopLeftRadius,\n\t\t\t\t\tborderTopRightRadius,\n\t\t\t\t\tborderBottomRightRadius,\n\t\t\t\t\tborderBottomLeftRadius\n\t\t\t\t][i]\n\t\t\t);\n\t\t\treturn i === 0\n\t\t\t\t? [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tleft + borderTopLeftRadius[0] - c0,\n\t\t\t\t\t\t\ttop + borderTopLeftRadius[1] - c0\n\t\t\t\t\t\t],\n\t\t\t\t\t\t[left + borderTopLeftRadius[0], top]\n\t\t\t\t ]\n\t\t\t\t: i === 1\n\t\t\t\t? [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tleft + width - borderTopRightRadius[0] + c0,\n\t\t\t\t\t\t\ttop + borderTopRightRadius[1] - c0\n\t\t\t\t\t\t],\n\t\t\t\t\t\t[left + width, top + borderTopRightRadius[1]]\n\t\t\t\t ]\n\t\t\t\t: i === 2\n\t\t\t\t? [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tleft + width - borderBottomRightRadius[0] + c0,\n\t\t\t\t\t\t\ttop + height - borderBottomRightRadius[1] + c0\n\t\t\t\t\t\t],\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tleft + width - borderBottomRightRadius[0],\n\t\t\t\t\t\t\ttop + height\n\t\t\t\t\t\t]\n\t\t\t\t ]\n\t\t\t\t: [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tleft + borderBottomLeftRadius[0] - c0,\n\t\t\t\t\t\t\ttop + height - borderBottomLeftRadius[1] + c0\n\t\t\t\t\t\t],\n\t\t\t\t\t\t[left, top + height - borderBottomLeftRadius[1]]\n\t\t\t\t ];\n\t\t}\n\n\t\tlet result = '';\n\n\t\tconst arc0 = getArc(start);\n\n\t\tlet l = `M${arc0[0]} A${p[(start + 3) % 4][0]} 0 0 1 ${arc0[1]}`;\n\n\t\tlet len = 0;\n\t\tfor (; len < 4 && partialSides[(start + len) % 4]; len++) {\n\t\t\tresult += l + ' ';\n\t\t\tl = [T, R, B, L][(start + len) % 4];\n\t\t}\n\t\tconst end = (start + len) % 4;\n\n\t\t// For the last segment, we skip the full arc and add the half arc.\n\t\tresult += l.split(' ')[0];\n\n\t\tconst arc1 = getArc(end);\n\t\tresult += ` A${p[(end + 3) % 4][0]} 0 0 1 ${arc1[0]}`;\n\n\t\treturn result;\n\t}\n\n\t// Generate the path\n\treturn `M${left + borderTopLeftRadius[0]},${top} ${T} ${R} ${B} ${L}`;\n}\n","import { buildXMLString } from '../utils.js';\nimport radius from './border-radius.js';\n\nfunction compareBorderDirections(a: string, b: string, style: any) {\n\treturn (\n\t\tstyle[a + 'Width'] === style[b + 'Width'] &&\n\t\tstyle[a + 'Style'] === style[b + 'Style'] &&\n\t\tstyle[a + 'Color'] === style[b + 'Color']\n\t);\n}\n\nexport function getBorderClipPath(\n\t{\n\t\tid,\n\t\t// Can be `overflow: hidden` from parent containers.\n\t\tcurrentClipPathId,\n\t\tborderPath,\n\t\tborderType,\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight\n\t}: {\n\t\tid: string;\n\t\tcurrentClipPathId?: string | number;\n\t\tborderPath?: string;\n\t\tborderType?: 'rect' | 'path';\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t},\n\tstyle: Record<string, number | string>\n) {\n\tconst hasBorder =\n\t\tstyle.borderTopWidth ||\n\t\tstyle.borderRightWidth ||\n\t\tstyle.borderBottomWidth ||\n\t\tstyle.borderLeftWidth;\n\n\tif (!hasBorder) return null;\n\n\t// In SVG, stroke is always centered on the path and there is no\n\t// existing property to make it behave like CSS border. So here we\n\t// 2x the border width and introduce another clip path to clip the\n\t// overflowed part.\n\tconst rectClipId = `satori_bc-${id}`;\n\tconst defs = buildXMLString(\n\t\t'clipPath',\n\t\t{\n\t\t\tid: rectClipId,\n\t\t\t'clip-path': currentClipPathId\n\t\t\t\t? `url(#${currentClipPathId})`\n\t\t\t\t: undefined\n\t\t},\n\t\tbuildXMLString(borderType, {\n\t\t\tx: left,\n\t\t\ty: top,\n\t\t\twidth,\n\t\t\theight,\n\t\t\td: borderPath ? borderPath : undefined\n\t\t})\n\t);\n\n\treturn [defs, rectClipId];\n}\n\nexport default function border(\n\t{\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight,\n\t\tprops,\n\t\tasContentMask,\n\t\tmaskBorderOnly\n\t}: {\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t\tprops: any;\n\t\tasContentMask?: boolean;\n\t\tmaskBorderOnly?: boolean;\n\t},\n\tstyle: Record<string, number | string>\n) {\n\tconst directions = [\n\t\t'borderTop',\n\t\t'borderRight',\n\t\t'borderBottom',\n\t\t'borderLeft'\n\t];\n\n\t// No border\n\tif (\n\t\t!asContentMask &&\n\t\t!directions.some(direction => style[direction + 'Width'])\n\t)\n\t\treturn '';\n\n\tlet fullBorder = '';\n\n\tlet start = 0;\n\twhile (\n\t\tstart > 0 &&\n\t\tcompareBorderDirections(\n\t\t\tdirections[start],\n\t\t\tdirections[(start + 3) % 4],\n\t\t\tstyle\n\t\t)\n\t) {\n\t\tstart = (start + 3) % 4;\n\t}\n\n\tlet partialSides = [false, false, false, false];\n\tlet currentStyle = [];\n\tfor (let _i = 0; _i < 4; _i++) {\n\t\tconst i = (start + _i) % 4;\n\t\tconst ni = (start + _i + 1) % 4;\n\n\t\tconst d = directions[i];\n\t\tconst nd = directions[ni];\n\n\t\tpartialSides[i] = true;\n\t\tcurrentStyle = [\n\t\t\tstyle[d + 'Width'],\n\t\t\tstyle[d + 'Style'],\n\t\t\tstyle[d + 'Color'],\n\t\t\td\n\t\t];\n\n\t\tif (!compareBorderDirections(d, nd, style)) {\n\t\t\tconst w =\n\t\t\t\t(currentStyle[0] || 0) +\n\t\t\t\t(asContentMask && !maskBorderOnly\n\t\t\t\t\t? style[d.replace('border', 'padding')] || 0\n\t\t\t\t\t: 0);\n\t\t\tif (w) {\n\t\t\t\tfullBorder += buildXMLString('path', {\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\t...props,\n\t\t\t\t\tfill: 'none',\n\t\t\t\t\tstroke: asContentMask ? '#000' : currentStyle[2],\n\t\t\t\t\t'stroke-width': w * 2,\n\t\t\t\t\t'stroke-dasharray':\n\t\t\t\t\t\t!asContentMask && currentStyle[1] === 'dashed'\n\t\t\t\t\t\t\t? w * 2 + ' ' + w\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\td: radius(\n\t\t\t\t\t\t{ left, top, width, height },\n\t\t\t\t\t\tstyle as Record<string, number>,\n\t\t\t\t\t\tpartialSides\n\t\t\t\t\t)\n\t\t\t\t});\n\t\t\t}\n\t\t\tpartialSides = [false, false, false, false];\n\t\t}\n\t}\n\n\tif (partialSides.some(Boolean)) {\n\t\tconst w =\n\t\t\t(currentStyle[0] || 0) +\n\t\t\t(asContentMask && !maskBorderOnly\n\t\t\t\t? style[currentStyle[3].replace('border', 'padding')] || 0\n\t\t\t\t: 0);\n\t\tif (w) {\n\t\t\tfullBorder += buildXMLString('path', {\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\t...props,\n\t\t\t\tfill: 'none',\n\t\t\t\tstroke: asContentMask ? '#000' : currentStyle[2],\n\t\t\t\t'stroke-width': w * 2,\n\t\t\t\t'stroke-dasharray':\n\t\t\t\t\t!asContentMask && currentStyle[1] === 'dashed'\n\t\t\t\t\t\t? w * 2 + ' ' + w\n\t\t\t\t\t\t: undefined,\n\t\t\t\td: radius(\n\t\t\t\t\t{ left, top, width, height },\n\t\t\t\t\tstyle as Record<string, number>,\n\t\t\t\t\tpartialSides\n\t\t\t\t)\n\t\t\t});\n\t\t}\n\t}\n\n\treturn fullBorder;\n}\n","/**\n * When there is border radius, the content area should be clipped by the\n * inner path of border + padding. This applies to <img> element as well as any\n * child element inside a `overflow: hidden` container.\n */\n\nimport { buildXMLString } from '../utils.js';\nimport border from './border.js';\n\nexport default function contentMask(\n\t{\n\t\tid,\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight,\n\t\tmatrix,\n\t\tborderOnly\n\t}: {\n\t\tid: string;\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t\tmatrix: string | undefined;\n\t\tborderOnly?: boolean;\n\t},\n\tstyle: Record<string, number | string>\n) {\n\tconst offsetLeft =\n\t\t((style.borderLeftWidth as number) || 0) +\n\t\t(borderOnly ? 0 : (style.paddingLeft as number) || 0);\n\tconst offsetTop =\n\t\t((style.borderTopWidth as number) || 0) +\n\t\t(borderOnly ? 0 : (style.paddingTop as number) || 0);\n\tconst offsetRight =\n\t\t((style.borderRightWidth as number) || 0) +\n\t\t(borderOnly ? 0 : (style.paddingRight as number) || 0);\n\tconst offsetBottom =\n\t\t((style.borderBottomWidth as number) || 0) +\n\t\t(borderOnly ? 0 : (style.paddingBottom as number) || 0);\n\n\tconst contentArea = {\n\t\tx: left + offsetLeft,\n\t\ty: top + offsetTop,\n\t\twidth: width - offsetLeft - offsetRight,\n\t\theight: height - offsetTop - offsetBottom\n\t};\n\n\tconst _contentMask = buildXMLString(\n\t\t'mask',\n\t\t{ id },\n\t\tbuildXMLString('rect', {\n\t\t\t...contentArea,\n\t\t\tfill: '#fff',\n\t\t\t// add transformation matrix to mask if overflow is hidden AND a\n\t\t\t// transformation style is defined, otherwise children will be clipped\n\t\t\t// incorrectly\n\t\t\ttransform:\n\t\t\t\tstyle.overflow === 'hidden' && style.transform && matrix\n\t\t\t\t\t? matrix\n\t\t\t\t\t: undefined,\n\t\t\tmask: style._inheritedMaskId\n\t\t\t\t? `url(#${style._inheritedMaskId})`\n\t\t\t\t: undefined\n\t\t}) +\n\t\t\tborder(\n\t\t\t\t{\n\t\t\t\t\tleft,\n\t\t\t\t\ttop,\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\ttransform: matrix ? matrix : undefined\n\t\t\t\t\t},\n\t\t\t\t\tasContentMask: true,\n\t\t\t\t\tmaskBorderOnly: borderOnly\n\t\t\t\t},\n\t\t\t\tstyle\n\t\t\t)\n\t);\n\n\treturn _contentMask;\n}\n","import { lengthToNumber } from '../utils.js';\nimport { default as buildBorderRadius } from '../builder/border-radius.js';\nimport { getStylesForProperty } from 'css-to-react-native';\n\nconst regexMap = {\n\tcircle: /circle\\((.+)\\)/,\n\tellipse: /ellipse\\((.+)\\)/,\n\tpath: /path\\((.+)\\)/,\n\tpolygon: /polygon\\((.+)\\)/,\n\tinset: /inset\\((.+)\\)/\n};\n\nexport function createShapeParser(\n\t{\n\t\twidth,\n\t\theight\n\t}: {\n\t\twidth: number;\n\t\theight: number;\n\t},\n\tstyle: Record<string, string | number>,\n\tinheritedStyle: Record<string, string | number>\n) {\n\tfunction parseCircle(str: string) {\n\t\tconst res = str.match(regexMap['circle']);\n\n\t\tif (!res) return null;\n\n\t\tconst [, value] = res;\n\t\tconst [radius, pos = ''] = value.split('at').map(v => v.trim());\n\t\tconst { x, y } = resolvePosition(pos, width, height);\n\n\t\treturn {\n\t\t\ttype: 'circle',\n\t\t\tr: lengthToNumber(\n\t\t\t\tradius,\n\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\tMath.sqrt(Math.pow(width, 2) + Math.pow(height, 2)) /\n\t\t\t\t\tMath.sqrt(2),\n\t\t\t\tinheritedStyle,\n\t\t\t\ttrue\n\t\t\t),\n\t\t\tcx: lengthToNumber(\n\t\t\t\tx,\n\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\twidth,\n\t\t\t\tinheritedStyle,\n\t\t\t\ttrue\n\t\t\t),\n\t\t\tcy: lengthToNumber(\n\t\t\t\ty,\n\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\theight,\n\t\t\t\tinheritedStyle,\n\t\t\t\ttrue\n\t\t\t)\n\t\t};\n\t}\n\tfunction parseEllipse(str: string) {\n\t\tconst res = str.match(regexMap['ellipse']);\n\n\t\tif (!res) return null;\n\n\t\tconst [, value] = res;\n\t\tconst [radius, pos = ''] = value.split('at').map(v => v.trim());\n\t\tconst [rx, ry] = radius.split(' ');\n\t\tconst { x, y } = resolvePosition(pos, width, height);\n\n\t\treturn {\n\t\t\ttype: 'ellipse',\n\t\t\trx: lengthToNumber(\n\t\t\t\trx || '50%',\n\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\twidth,\n\t\t\t\tinheritedStyle,\n\t\t\t\ttrue\n\t\t\t),\n\t\t\try: lengthToNumber(\n\t\t\t\try || '50%',\n\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\theight,\n\t\t\t\tinheritedStyle,\n\t\t\t\ttrue\n\t\t\t),\n\t\t\tcx: lengthToNumber(\n\t\t\t\tx,\n\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\twidth,\n\t\t\t\tinheritedStyle,\n\t\t\t\ttrue\n\t\t\t),\n\t\t\tcy: lengthToNumber(\n\t\t\t\ty,\n\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\theight,\n\t\t\t\tinheritedStyle,\n\t\t\t\ttrue\n\t\t\t)\n\t\t};\n\t}\n\tfunction parsePath(str: string) {\n\t\tconst res = str.match(regexMap['path']);\n\n\t\tif (!res) return null;\n\n\t\tconst [fillRule, d] = resolveFillRule(res[1]);\n\n\t\treturn {\n\t\t\ttype: 'path',\n\t\t\td,\n\t\t\t'fill-rule': fillRule\n\t\t};\n\t}\n\tfunction parsePolygon(str: string) {\n\t\tconst res = str.match(regexMap['polygon']);\n\n\t\tif (!res) return null;\n\n\t\tconst [fillRule, points] = resolveFillRule(res[1]);\n\n\t\treturn {\n\t\t\ttype: 'polygon',\n\t\t\t'fill-rule': fillRule,\n\t\t\tpoints: points\n\t\t\t\t.split(',')\n\t\t\t\t.map(v =>\n\t\t\t\t\tv\n\t\t\t\t\t\t.split(' ')\n\t\t\t\t\t\t.map((k, i) =>\n\t\t\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\t\t\tk,\n\t\t\t\t\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\t\t\t\t\ti === 0 ? width : height,\n\t\t\t\t\t\t\t\tinheritedStyle,\n\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(' ')\n\t\t\t\t)\n\t\t\t\t.join(',')\n\t\t};\n\t}\n\tfunction parseInset(str: string) {\n\t\tconst res = str.match(regexMap['inset']);\n\n\t\tif (!res) return null;\n\n\t\tconst [inset, radius] = (\n\t\t\tres[1].includes('round') ? res[1] : `${res[1].trim()} round 0`\n\t\t).split('round');\n\t\tconst radiusMap = getStylesForProperty('borderRadius', radius, true);\n\t\tconst r = Object.values(radiusMap)\n\t\t\t.map(s => String(s))\n\t\t\t.map(\n\t\t\t\t(s, i) =>\n\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\ts,\n\t\t\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\t\t\ti === 0 || i === 2 ? height : width,\n\t\t\t\t\t\tinheritedStyle,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) || 0\n\t\t\t);\n\t\tconst offsets = Object.values(\n\t\t\tgetStylesForProperty('margin', inset, true)\n\t\t)\n\t\t\t.map(s => String(s))\n\t\t\t.map(\n\t\t\t\t(s, i) =>\n\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\ts,\n\t\t\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\t\t\ti === 0 || i === 2 ? height : width,\n\t\t\t\t\t\tinheritedStyle,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) || 0\n\t\t\t);\n\t\tconst x = offsets[3];\n\t\tconst y = offsets[0];\n\t\tconst w = width - (offsets[1] + offsets[3]);\n\t\tconst h = height - (offsets[0] + offsets[2]);\n\n\t\tif (r.some(v => v > 0)) {\n\t\t\tconst d = buildBorderRadius(\n\t\t\t\t{ left: x, top: y, width: w, height: h },\n\t\t\t\t{ ...style, ...radiusMap }\n\t\t\t);\n\n\t\t\treturn { type: 'path', d };\n\t\t}\n\n\t\treturn {\n\t\t\ttype: 'rect',\n\t\t\tx,\n\t\t\ty,\n\t\t\twidth: w,\n\t\t\theight: h\n\t\t};\n\t}\n\n\treturn {\n\t\tparseCircle,\n\t\tparseEllipse,\n\t\tparsePath,\n\t\tparsePolygon,\n\t\tparseInset\n\t};\n}\n\nfunction resolveFillRule(str: string) {\n\tconst [, fillRule = 'nonzero', d] =\n\t\tstr.replace(/('|\")/g, '').match(/^(nonzero|evenodd)?,?(.+)/) || [];\n\n\treturn [fillRule, d];\n}\n\nfunction resolvePosition(position: string, xDelta: number, yDelta: number) {\n\tconst pos = position.split(' ');\n\tconst res: { x: number | string; y: number | string } = {\n\t\tx: pos[0] || '50%',\n\t\ty: pos[1] || '50%'\n\t};\n\n\tpos.forEach(v => {\n\t\tif (v === 'top') {\n\t\t\tres.y = 0;\n\t\t} else if (v === 'bottom') {\n\t\t\tres.y = yDelta;\n\t\t} else if (v === 'left') {\n\t\t\tres.x = 0;\n\t\t} else if (v === 'right') {\n\t\t\tres.x = xDelta;\n\t\t} else if (v === 'center') {\n\t\t\tres.x = xDelta / 2;\n\t\t\tres.y = yDelta / 2;\n\t\t} else {\n\t\t\t// do nothing\n\t\t}\n\t});\n\n\treturn res;\n}\n","import { buildXMLString } from '../utils.js';\nimport { createShapeParser } from '../parser/shape.js';\n\nexport function genClipPathId(id: string) {\n\treturn `satori_cp-${id}`;\n}\nexport function genClipPath(id: string) {\n\treturn `url(#${genClipPathId(id)})`;\n}\n\nexport function buildClipPath(\n\tv: {\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t\tpath: string;\n\t\tmatrix: string | undefined;\n\t\tid: string;\n\t\tcurrentClipPath: string | string;\n\t\tsrc?: string;\n\t},\n\tstyle: Record<string, string | number>,\n\tinheritedStyle: Record<string, string | number>\n) {\n\tif (style.clipPath === 'none') return '';\n\n\tconst parser = createShapeParser(v, style, inheritedStyle);\n\tconst clipPath = style.clipPath as string;\n\n\tlet tmp: { type: string; [p: string]: string | number } = { type: '' };\n\n\tfor (const k of Object.keys(parser)) {\n\t\ttmp = parser[k](clipPath);\n\t\tif (tmp) break;\n\t}\n\n\tif (tmp) {\n\t\tconst { type, ...rest } = tmp;\n\t\treturn buildXMLString(\n\t\t\t'clipPath',\n\t\t\t{\n\t\t\t\tid: genClipPathId(v.id),\n\t\t\t\t'clip-path': v.currentClipPath,\n\t\t\t\ttransform: `translate(${v.left}, ${v.top})`\n\t\t\t},\n\t\t\tbuildXMLString(type, rest)\n\t\t);\n\t}\n\treturn '';\n}\n","/**\n * Generate clip path for the given element.\n */\n\nimport { buildXMLString } from '../utils.js';\nimport mask from './content-mask.js';\nimport { buildClipPath, genClipPathId } from './clip-path.js';\n\nexport default function overflow(\n\t{\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight,\n\t\tpath,\n\t\tmatrix,\n\t\tid,\n\t\tcurrentClipPath,\n\t\tsrc\n\t}: {\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t\tpath: string;\n\t\tmatrix: string | undefined;\n\t\tid: string;\n\t\tcurrentClipPath: string | string;\n\t\tsrc?: string;\n\t},\n\tstyle: Record<string, string | number>,\n\tinheritableStyle: Record<string, string | number>\n) {\n\tlet overflowClipPath = '';\n\tconst clipPath =\n\t\tstyle.clipPath && style.clipPath !== 'none'\n\t\t\t? buildClipPath(\n\t\t\t\t\t{\n\t\t\t\t\t\tleft,\n\t\t\t\t\t\ttop,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t\theight,\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tmatrix,\n\t\t\t\t\t\tcurrentClipPath,\n\t\t\t\t\t\tsrc\n\t\t\t\t\t},\n\t\t\t\t\tstyle as Record<string, number>,\n\t\t\t\t\tinheritableStyle\n\t\t\t )\n\t\t\t: '';\n\n\tif (style.overflow !== 'hidden' && !src) {\n\t\toverflowClipPath = '';\n\t} else {\n\t\tconst _id = clipPath ? `satori_ocp-${id}` : genClipPathId(id);\n\n\t\toverflowClipPath = buildXMLString(\n\t\t\t'clipPath',\n\t\t\t{\n\t\t\t\tid: _id,\n\t\t\t\t'clip-path': currentClipPath\n\t\t\t},\n\t\t\tbuildXMLString(path ? 'path' : 'rect', {\n\t\t\t\tx: left,\n\t\t\t\ty: top,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\td: path ? path : undefined,\n\t\t\t\t// add transformation matrix to clip path if overflow is hidden AND a\n\t\t\t\t// transformation style is defined, otherwise children will be clipped\n\t\t\t\t// relative to the parent's original plane instead of the transformed\n\t\t\t\t// plane\n\t\t\t\ttransform:\n\t\t\t\t\tstyle.overflow === 'hidden' && style.transform && matrix\n\t\t\t\t\t\t? matrix\n\t\t\t\t\t\t: undefined\n\t\t\t})\n\t\t);\n\t}\n\n\tconst contentMask = mask(\n\t\t{\n\t\t\tid: `satori_om-${id}`,\n\t\t\tleft,\n\t\t\ttop,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tmatrix,\n\t\t\tborderOnly: src ? false : true\n\t\t},\n\t\tstyle\n\t);\n\n\treturn clipPath + overflowClipPath + contentMask;\n}\n","import { buildXMLString } from '../utils.js';\nimport buildBackgroundImage from './background-image.js';\nimport type { MaskProperty } from '../parser/mask.js';\n\nconst genMaskImageId = (id: string) => `satori_mi-${id}`;\n\nexport default async function buildMaskImage(\n\tv: {\n\t\tid: string;\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t},\n\tstyle: Record<string, string | number>,\n\tinheritedStyle: Record<string, string | number>\n): Promise<[string, string]> {\n\tif (!style.maskImage) return ['', ''];\n\tconst { left, top, width, height, id } = v;\n\tconst maskImage = style.maskImage as unknown as MaskProperty[];\n\tconst length = maskImage.length;\n\tif (!length) return ['', ''];\n\tconst miId = genMaskImageId(id);\n\n\tlet mask = '';\n\n\tfor (let i = 0; i < length; i++) {\n\t\tconst m = maskImage[i];\n\n\t\tconst [_id, def] = await buildBackgroundImage(\n\t\t\t{ id: `${miId}-${i}`, left, top, width, height },\n\t\t\tm,\n\t\t\tinheritedStyle,\n\t\t\t'mask'\n\t\t);\n\n\t\tmask +=\n\t\t\tdef +\n\t\t\tbuildXMLString('rect', {\n\t\t\t\tx: left,\n\t\t\t\ty: top,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tfill: `url(#${_id})`\n\t\t\t});\n\t}\n\n\tmask = buildXMLString('mask', { id: miId }, mask);\n\n\treturn [miId, mask];\n}\n","import type { ParsedTransformOrigin } from '../transform-origin.js';\n\nimport backgroundImage from './background-image.js';\nimport radius, { getBorderRadiusClipPath } from './border-radius.js';\nimport { boxShadow } from './shadow.js';\nimport transform from './transform.js';\nimport overflow from './overflow.js';\nimport { buildXMLString } from '../utils.js';\nimport border, { getBorderClipPath } from './border.js';\nimport { genClipPath } from './clip-path.js';\nimport buildMaskImage from './mask-image.js';\nimport CssDimension from '../vendor/parse-css-dimension/index.js';\n\n/**\n * Parse object-position value into [xOffset, yOffset] in pixels.\n * Supports keywords (left, center, right, top, bottom), percentages, and lengths.\n * Similar to background-position parsing.\n */\nfunction parseObjectPosition(\n\tposition: string,\n\tcontainerWidth: number,\n\tcontainerHeight: number\n): [number, number] {\n\tconst parts = position.toLowerCase().trim().split(/\\s+/);\n\n\t// Convert keyword to percentage\n\tconst keywordToPercent = (keyword: string, axis: 'x' | 'y'): string => {\n\t\tconst map = {\n\t\t\tleft: '0%',\n\t\t\tcenter: '50%',\n\t\t\tright: '100%',\n\t\t\ttop: '0%',\n\t\t\tbottom: '100%'\n\t\t};\n\t\treturn map[keyword] || keyword;\n\t};\n\n\tlet xValue: string;\n\tlet yValue: string;\n\n\tif (parts.length === 1) {\n\t\tconst part = parts[0];\n\t\t// Single value\n\t\tif (part === 'left' || part === 'center' || part === 'right') {\n\t\t\txValue = keywordToPercent(part, 'x');\n\t\t\tyValue = '50%'; // center\n\t\t} else if (part === 'top' || part === 'bottom') {\n\t\t\txValue = '50%'; // center\n\t\t\tyValue = keywordToPercent(part, 'y');\n\t\t} else {\n\t\t\t// Assume it's x value, y defaults to center\n\t\t\txValue = part;\n\t\t\tyValue = '50%';\n\t\t}\n\t} else {\n\t\t// Two or more values\n\t\tconst first = parts[0];\n\t\tconst second = parts[1];\n\n\t\t// Check if first is a y-axis keyword (top/bottom)\n\t\tif (first === 'top' || first === 'bottom') {\n\t\t\tyValue = keywordToPercent(first, 'y');\n\t\t\tif (\n\t\t\t\tsecond === 'left' ||\n\t\t\t\tsecond === 'right' ||\n\t\t\t\tsecond === 'center'\n\t\t\t) {\n\t\t\t\txValue = keywordToPercent(second, 'x');\n\t\t\t} else {\n\t\t\t\t// Second is a length/percentage, default x to center\n\t\t\t\txValue = '50%';\n\t\t\t\tyValue =\n\t\t\t\t\tfirst === 'top' || first === 'bottom'\n\t\t\t\t\t\t? keywordToPercent(first, 'y')\n\t\t\t\t\t\t: second;\n\t\t\t}\n\t\t} else {\n\t\t\t// Normal order: x then y\n\t\t\txValue = keywordToPercent(first, 'x');\n\t\t\tyValue = keywordToPercent(second, 'y');\n\t\t}\n\t}\n\n\t// Convert to absolute pixels\n\tconst parseValue = (value: string, containerSize: number): number => {\n\t\ttry {\n\t\t\tif (value.endsWith('%')) {\n\t\t\t\treturn (containerSize * parseFloat(value)) / 100;\n\t\t\t}\n\t\t\tconst parsed = new CssDimension(value);\n\t\t\tif (parsed.type === 'length' || parsed.type === 'number') {\n\t\t\t\treturn parsed.value;\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (e) {\n\t\t\treturn 0;\n\t\t}\n\t};\n\n\treturn [\n\t\tparseValue(xValue, containerWidth),\n\t\tparseValue(yValue, containerHeight)\n\t];\n}\n\nexport default async function rect(\n\t{\n\t\tid,\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight,\n\t\tisInheritingTransform,\n\t\tsrc,\n\t\tdebug\n\t}: {\n\t\tid: string;\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t\tisInheritingTransform: boolean;\n\t\tsrc?: string;\n\t\tdebug?: boolean;\n\t},\n\tstyle: Record<string, number | string>,\n\tinheritableStyle: Record<string, number | string>\n) {\n\tif (style.display === 'none') return '';\n\n\tconst isImage = !!src;\n\n\tlet type: 'rect' | 'path' = 'rect';\n\tlet matrix = '';\n\tlet defs = '';\n\tlet fills: string[] = [];\n\tlet opacity = 1;\n\tlet extra = '';\n\n\tif (style.backgroundColor) {\n\t\tfills.push(style.backgroundColor as string);\n\t}\n\n\tif (style.opacity !== undefined) {\n\t\topacity = +style.opacity;\n\t}\n\n\tif (style.transform) {\n\t\tmatrix = transform(\n\t\t\t{\n\t\t\t\tleft,\n\t\t\t\ttop,\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t},\n\t\t\tstyle.transform as unknown as number[],\n\t\t\tisInheritingTransform,\n\t\t\tstyle.transformOrigin as ParsedTransformOrigin | undefined\n\t\t);\n\t}\n\n\tlet backgroundShapes = '';\n\tif (style.backgroundImage) {\n\t\tconst backgrounds: string[][] = [];\n\n\t\tfor (\n\t\t\tlet index = 0;\n\t\t\tindex < (style.backgroundImage as any).length;\n\t\t\tindex++\n\t\t) {\n\t\t\tconst background = (style.backgroundImage as any)[index];\n\t\t\tconst image = await backgroundImage(\n\t\t\t\t{ id: id + '_' + index, width, height, left, top },\n\t\t\t\tbackground,\n\t\t\t\tinheritableStyle\n\t\t\t);\n\t\t\tif (image) {\n\t\t\t\t// Background images that come first in the array are rendered last.\n\t\t\t\tbackgrounds.unshift(image);\n\t\t\t}\n\t\t}\n\n\t\tfor (const background of backgrounds) {\n\t\t\tfills.push(`url(#${background[0]})`);\n\t\t\tdefs += background[1];\n\t\t\tif (background[2]) {\n\t\t\t\tbackgroundShapes += background[2];\n\t\t\t}\n\t\t}\n\t}\n\n\tconst [miId, mi] = await buildMaskImage(\n\t\t{ id, left, top, width, height },\n\t\tstyle,\n\t\tinheritableStyle\n\t);\n\n\tdefs += mi;\n\tconst maskId = miId\n\t\t? `url(#${miId})`\n\t\t: style._inheritedMaskId\n\t\t? `url(#${style._inheritedMaskId})`\n\t\t: undefined;\n\n\tconst path = radius(\n\t\t{ left, top, width, height },\n\t\tstyle as Record<string, number>\n\t);\n\tif (path) {\n\t\ttype = 'path';\n\t}\n\n\tconst clipPathId = style._inheritedClipPathId as number | undefined;\n\n\tif (debug) {\n\t\textra = buildXMLString('rect', {\n\t\t\tx: left,\n\t\t\ty: top,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tfill: 'transparent',\n\t\t\tstroke: '#ff5757',\n\t\t\t'stroke-width': 1,\n\t\t\ttransform: matrix || undefined,\n\t\t\t'clip-path': clipPathId ? `url(#${clipPathId})` : undefined\n\t\t});\n\t}\n\n\tconst { backgroundClip, filter: cssFilter, mixBlendMode } = style;\n\n\tconst inlineStyle =\n\t\t[\n\t\t\tcssFilter ? `filter:${cssFilter}` : undefined,\n\t\t\tmixBlendMode ? `mix-blend-mode:${mixBlendMode}` : undefined\n\t\t]\n\t\t\t.filter(v => v)\n\t\t\t.join(';') || undefined;\n\n\tconst currentClipPath =\n\t\tbackgroundClip === 'text'\n\t\t\t? `url(#satori_bct-${id})`\n\t\t\t: clipPathId\n\t\t\t? `url(#${clipPathId})`\n\t\t\t: style.clipPath\n\t\t\t? genClipPath(id)\n\t\t\t: undefined;\n\n\tconst clip = overflow(\n\t\t{ left, top, width, height, path, id, matrix, currentClipPath, src },\n\t\tstyle as Record<string, number>,\n\t\tinheritableStyle\n\t);\n\n\t// Each background generates a new rectangle.\n\t// @TODO: Not sure if this is the best way to do it, maybe <pattern> with\n\t// multiple <image>s is better.\n\tlet shape = fills\n\t\t.map(fill =>\n\t\t\tbuildXMLString(type, {\n\t\t\t\tx: left,\n\t\t\t\ty: top,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tfill,\n\t\t\t\td: path ? path : undefined,\n\t\t\t\ttransform: matrix ? matrix : undefined,\n\t\t\t\t'clip-path': style.transform ? undefined : currentClipPath,\n\t\t\t\tstyle: inlineStyle,\n\t\t\t\tmask: style.transform ? undefined : maskId\n\t\t\t})\n\t\t)\n\t\t.join('');\n\n\tconst borderClip = getBorderClipPath(\n\t\t{\n\t\t\tid,\n\t\t\tleft,\n\t\t\ttop,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tcurrentClipPathId: clipPathId,\n\t\t\tborderPath: path,\n\t\t\tborderType: type\n\t\t},\n\t\tstyle\n\t);\n\n\t// border radius for images with transform property\n\tlet imageBorderRadius = undefined;\n\n\t// If it's an image (<img>) tag, we add an extra layer of the image itself.\n\tif (isImage) {\n\t\t// We need to subtract the border and padding sizes from the image size.\n\t\tconst offsetLeft =\n\t\t\t((style.borderLeftWidth as number) || 0) +\n\t\t\t((style.paddingLeft as number) || 0);\n\t\tconst offsetTop =\n\t\t\t((style.borderTopWidth as number) || 0) +\n\t\t\t((style.paddingTop as number) || 0);\n\t\tconst offsetRight =\n\t\t\t((style.borderRightWidth as number) || 0) +\n\t\t\t((style.paddingRight as number) || 0);\n\t\tconst offsetBottom =\n\t\t\t((style.borderBottomWidth as number) || 0) +\n\t\t\t((style.paddingBottom as number) || 0);\n\n\t\tconst containerInnerWidth = width - offsetLeft - offsetRight;\n\t\tconst containerInnerHeight = height - offsetTop - offsetBottom;\n\n\t\t// Parse object-position\n\t\tconst position = (style.objectPosition || 'center').toString();\n\t\tconst [objPosX, objPosY] = parseObjectPosition(\n\t\t\tposition,\n\t\t\tcontainerInnerWidth,\n\t\t\tcontainerInnerHeight\n\t\t);\n\n\t\t// Get natural image dimensions if available\n\t\tconst naturalWidth =\n\t\t\t(style.__naturalWidth as number) || containerInnerWidth;\n\t\tconst naturalHeight =\n\t\t\t(style.__naturalHeight as number) || containerInnerHeight;\n\n\t\t// Calculate objectFit behavior\n\t\tlet preserveAspectRatio: string;\n\t\tlet imageWidth = containerInnerWidth;\n\t\tlet imageHeight = containerInnerHeight;\n\t\tlet imageX = left + offsetLeft;\n\t\tlet imageY = top + offsetTop;\n\n\t\tif (style.objectFit === 'contain') {\n\t\t\t// Scale to fit within container while preserving aspect ratio\n\t\t\tconst scaleX = containerInnerWidth / naturalWidth;\n\t\t\tconst scaleY = containerInnerHeight / naturalHeight;\n\t\t\tconst scale = Math.min(scaleX, scaleY);\n\n\t\t\timageWidth = naturalWidth * scale;\n\t\t\timageHeight = naturalHeight * scale;\n\n\t\t\t// Apply object-position to center the image within the container\n\t\t\timageX =\n\t\t\t\tleft +\n\t\t\t\toffsetLeft +\n\t\t\t\tobjPosX -\n\t\t\t\t(imageWidth * objPosX) / containerInnerWidth;\n\t\t\timageY =\n\t\t\t\ttop +\n\t\t\t\toffsetTop +\n\t\t\t\tobjPosY -\n\t\t\t\t(imageHeight * objPosY) / containerInnerHeight;\n\n\t\t\tpreserveAspectRatio = 'none';\n\t\t} else if (style.objectFit === 'cover') {\n\t\t\t// Scale to cover the container while preserving aspect ratio\n\t\t\tconst scaleX = containerInnerWidth / naturalWidth;\n\t\t\tconst scaleY = containerInnerHeight / naturalHeight;\n\t\t\tconst scale = Math.max(scaleX, scaleY);\n\n\t\t\timageWidth = naturalWidth * scale;\n\t\t\timageHeight = naturalHeight * scale;\n\n\t\t\t// Apply object-position\n\t\t\timageX =\n\t\t\t\tleft +\n\t\t\t\toffsetLeft +\n\t\t\t\tobjPosX -\n\t\t\t\t(imageWidth * objPosX) / containerInnerWidth;\n\t\t\timageY =\n\t\t\t\ttop +\n\t\t\t\toffsetTop +\n\t\t\t\tobjPosY -\n\t\t\t\t(imageHeight * objPosY) / containerInnerHeight;\n\n\t\t\tpreserveAspectRatio = 'none';\n\t\t} else if (style.objectFit === 'fill') {\n\t\t\t// Stretch to fill (ignore aspect ratio)\n\t\t\tpreserveAspectRatio = 'none';\n\t\t} else if (style.objectFit === 'scale-down') {\n\t\t\tif (naturalWidth && naturalHeight) {\n\t\t\t\t// Calculate if we need to scale down\n\t\t\t\tconst scaleX = containerInnerWidth / naturalWidth;\n\t\t\t\tconst scaleY = containerInnerHeight / naturalHeight;\n\t\t\t\tconst minScale = Math.min(scaleX, scaleY);\n\n\t\t\t\tif (minScale >= 1) {\n\t\t\t\t\t// Image is smaller than or equal to container\n\t\t\t\t\t// Use natural size (don't scale up)\n\t\t\t\t\timageWidth = naturalWidth;\n\t\t\t\t\timageHeight = naturalHeight;\n\t\t\t\t\tpreserveAspectRatio = 'none';\n\n\t\t\t\t\t// Apply object-position to position the un-scaled image\n\t\t\t\t\timageX =\n\t\t\t\t\t\tleft +\n\t\t\t\t\t\toffsetLeft +\n\t\t\t\t\t\tobjPosX -\n\t\t\t\t\t\t(imageWidth * objPosX) / containerInnerWidth;\n\t\t\t\t\timageY =\n\t\t\t\t\t\ttop +\n\t\t\t\t\t\toffsetTop +\n\t\t\t\t\t\tobjPosY -\n\t\t\t\t\t\t(imageHeight * objPosY) / containerInnerHeight;\n\t\t\t\t} else {\n\t\t\t\t\t// Image is larger than container, scale down like 'contain'\n\t\t\t\t\tconst scale = minScale;\n\t\t\t\t\timageWidth = naturalWidth * scale;\n\t\t\t\t\timageHeight = naturalHeight * scale;\n\n\t\t\t\t\t// Apply object-position\n\t\t\t\t\timageX =\n\t\t\t\t\t\tleft +\n\t\t\t\t\t\toffsetLeft +\n\t\t\t\t\t\tobjPosX -\n\t\t\t\t\t\t(imageWidth * objPosX) / containerInnerWidth;\n\t\t\t\t\timageY =\n\t\t\t\t\t\ttop +\n\t\t\t\t\t\toffsetTop +\n\t\t\t\t\t\tobjPosY -\n\t\t\t\t\t\t(imageHeight * objPosY) / containerInnerHeight;\n\n\t\t\t\t\tpreserveAspectRatio = 'none';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Fall back to 'contain' behavior if natural dimensions are unavailable\n\t\t\t\tconst scaleX = containerInnerWidth / naturalWidth;\n\t\t\t\tconst scaleY = containerInnerHeight / naturalHeight;\n\t\t\t\tconst scale = Math.min(scaleX, scaleY);\n\n\t\t\t\timageWidth = naturalWidth * scale;\n\t\t\t\timageHeight = naturalHeight * scale;\n\n\t\t\t\timageX =\n\t\t\t\t\tleft +\n\t\t\t\t\toffsetLeft +\n\t\t\t\t\tobjPosX -\n\t\t\t\t\t(imageWidth * objPosX) / containerInnerWidth;\n\t\t\t\timageY =\n\t\t\t\t\ttop +\n\t\t\t\t\toffsetTop +\n\t\t\t\t\tobjPosY -\n\t\t\t\t\t(imageHeight * objPosY) / containerInnerHeight;\n\n\t\t\t\tpreserveAspectRatio = 'none';\n\t\t\t}\n\t\t} else {\n\t\t\t// Default/none: fill (stretch)\n\t\t\tpreserveAspectRatio = 'none';\n\t\t}\n\n\t\tif (style.transform) {\n\t\t\timageBorderRadius = getBorderRadiusClipPath(\n\t\t\t\t{\n\t\t\t\t\tid,\n\t\t\t\t\tborderRadiusPath: path,\n\t\t\t\t\tborderType: type,\n\t\t\t\t\tleft,\n\t\t\t\t\ttop,\n\t\t\t\t\twidth,\n\t\t\t\t\theight\n\t\t\t\t},\n\t\t\t\tstyle\n\t\t\t);\n\t\t}\n\n\t\tshape += buildXMLString('image', {\n\t\t\tx: imageX,\n\t\t\ty: imageY,\n\t\t\twidth: imageWidth,\n\t\t\theight: imageHeight,\n\t\t\thref: src,\n\t\t\tpreserveAspectRatio,\n\t\t\ttransform: matrix ? matrix : undefined,\n\t\t\tstyle: inlineStyle,\n\t\t\t'clip-path': style.transform\n\t\t\t\t? imageBorderRadius\n\t\t\t\t\t? `url(#${imageBorderRadius[1]})`\n\t\t\t\t\t: undefined\n\t\t\t\t: `url(#satori_cp-${id})`,\n\t\t\tmask: style.transform\n\t\t\t\t? undefined\n\t\t\t\t: miId\n\t\t\t\t? `url(#${miId})`\n\t\t\t\t: `url(#satori_om-${id})`\n\t\t});\n\t}\n\n\tif (borderClip) {\n\t\tdefs += borderClip[0];\n\t\tconst rectClipId = borderClip[1];\n\n\t\tshape += border(\n\t\t\t{\n\t\t\t\tleft,\n\t\t\t\ttop,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tprops: {\n\t\t\t\t\ttransform: matrix ? matrix : undefined,\n\t\t\t\t\t// When using `background-clip: text`, we need to draw the extra border because\n\t\t\t\t\t// it shouldn't be clipped by the clip path, so we are not using currentClipPath here.\n\t\t\t\t\t'clip-path': `url(#${rectClipId})`\n\t\t\t\t}\n\t\t\t},\n\t\t\tstyle\n\t\t);\n\t}\n\n\t// box-shadow.\n\tconst shadow = boxShadow(\n\t\t{\n\t\t\twidth,\n\t\t\theight,\n\t\t\tid,\n\t\t\topacity,\n\t\t\tshape: buildXMLString(type, {\n\t\t\t\tx: left,\n\t\t\t\ty: top,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tfill: '#fff',\n\t\t\t\tstroke: '#fff',\n\t\t\t\t'stroke-width': 0,\n\t\t\t\td: path ? path : undefined,\n\t\t\t\ttransform: matrix ? matrix : undefined,\n\t\t\t\t'clip-path': currentClipPath,\n\t\t\t\tmask: maskId\n\t\t\t})\n\t\t},\n\t\tstyle\n\t);\n\n\treturn (\n\t\t(defs ? buildXMLString('defs', {}, defs) : '') +\n\t\t(shadow ? shadow[0] : '') +\n\t\t(imageBorderRadius ? imageBorderRadius[0] : '') +\n\t\tclip +\n\t\t(opacity !== 1 ? `<g opacity=\"${opacity}\">` : '') +\n\t\t(style.transform && (currentClipPath || maskId)\n\t\t\t? `<g${currentClipPath ? ` clip-path=\"${currentClipPath}\"` : ''}${\n\t\t\t\t\tmaskId ? ` mask=\"${maskId}\"` : ''\n\t\t\t }>`\n\t\t\t: '') +\n\t\t(backgroundShapes || shape) +\n\t\t(style.transform && (currentClipPath || maskId) ? '</g>' : '') +\n\t\t(opacity !== 1 ? `</g>` : '') +\n\t\t(shadow ? shadow[1] : '') +\n\t\textra\n\t);\n}\n","import { buildXMLString } from '../utils.js';\nimport radius from './border-radius.js';\n\ntype BuildBackdropFilterOptions = {\n\tbgGroupId: string;\n\tfilterValue: string;\n\theight: number;\n\tid: string;\n\tleft: number;\n\tmaskId?: string;\n\tstyle: Record<string, any>;\n\ttop: number;\n\twidth: number;\n};\n\nconst parseFilterValue = (value: string): string => {\n\tlet primitives = '';\n\tlet lastResult = 'SourceGraphic';\n\tlet hasBlur = false;\n\n\t// blur(Npx)\n\tconst blurMatch = value.match(/blur\\(([\\d.]+)(?:px)?\\)/);\n\tif (blurMatch) {\n\t\thasBlur = true;\n\t\tconst sigma = parseFloat(blurMatch[1]);\n\t\tconst pad = Math.ceil(sigma * 3);\n\n\t\t// Extend content beyond source bounds using 4 diagonal offset copies.\n\t\t// Without this, feGaussianBlur samples transparent pixels at the edges,\n\t\t// creating a semi-transparent fade. The copies provide real pixel data\n\t\t// in all directions (edges + corners) so the blur is consistent.\n\t\tprimitives += buildXMLString('feOffset', {\n\t\t\tdx: -pad,\n\t\t\tdy: -pad,\n\t\t\tin: 'SourceGraphic',\n\t\t\tresult: 'satori_bfTL'\n\t\t});\n\t\tprimitives += buildXMLString('feOffset', {\n\t\t\tdx: pad,\n\t\t\tdy: -pad,\n\t\t\tin: 'SourceGraphic',\n\t\t\tresult: 'satori_bfTR'\n\t\t});\n\t\tprimitives += buildXMLString('feOffset', {\n\t\t\tdx: -pad,\n\t\t\tdy: pad,\n\t\t\tin: 'SourceGraphic',\n\t\t\tresult: 'satori_bfBL'\n\t\t});\n\t\tprimitives += buildXMLString('feOffset', {\n\t\t\tdx: pad,\n\t\t\tdy: pad,\n\t\t\tin: 'SourceGraphic',\n\t\t\tresult: 'satori_bfBR'\n\t\t});\n\t\tprimitives += buildXMLString(\n\t\t\t'feMerge',\n\t\t\t{ result: 'satori_bfext' },\n\t\t\tbuildXMLString('feMergeNode', { in: 'satori_bfTL' }) +\n\t\t\t\tbuildXMLString('feMergeNode', { in: 'satori_bfTR' }) +\n\t\t\t\tbuildXMLString('feMergeNode', { in: 'satori_bfBL' }) +\n\t\t\t\tbuildXMLString('feMergeNode', { in: 'satori_bfBR' }) +\n\t\t\t\tbuildXMLString('feMergeNode', { in: 'SourceGraphic' })\n\t\t);\n\t\tlastResult = 'satori_bfext';\n\n\t\tconst result = 'satori_bfblur';\n\t\tprimitives += buildXMLString('feGaussianBlur', {\n\t\t\tedgeMode: 'duplicate',\n\t\t\tin: lastResult,\n\t\t\tresult,\n\t\t\tstdDeviation: sigma\n\t\t});\n\t\tlastResult = result;\n\t}\n\n\t// saturate(N) or saturate(N%)\n\tconst saturateMatch = value.match(/saturate\\(([\\d.]+)(%?)\\)/);\n\tif (saturateMatch) {\n\t\tconst val =\n\t\t\tsaturateMatch[2] === '%'\n\t\t\t\t? parseFloat(saturateMatch[1]) / 100\n\t\t\t\t: parseFloat(saturateMatch[1]);\n\t\tconst result = 'satori_bfsat';\n\t\tprimitives += buildXMLString('feColorMatrix', {\n\t\t\tin: lastResult,\n\t\t\tresult,\n\t\t\ttype: 'saturate',\n\t\t\tvalues: val\n\t\t});\n\t\tlastResult = result;\n\t}\n\n\t// brightness(N)\n\tconst brightnessMatch = value.match(/brightness\\(([\\d.]+)\\)/);\n\tif (brightnessMatch) {\n\t\tconst val = parseFloat(brightnessMatch[1]);\n\t\tconst result = 'satori_bfbri';\n\t\tprimitives += buildXMLString(\n\t\t\t'feComponentTransfer',\n\t\t\t{ in: lastResult, result },\n\t\t\tbuildXMLString('feFuncR', { slope: val, type: 'linear' }) +\n\t\t\t\tbuildXMLString('feFuncG', { slope: val, type: 'linear' }) +\n\t\t\t\tbuildXMLString('feFuncB', { slope: val, type: 'linear' })\n\t\t);\n\t\tlastResult = result;\n\t}\n\n\t// contrast(N)\n\tconst contrastMatch = value.match(/contrast\\(([\\d.]+)\\)/);\n\tif (contrastMatch) {\n\t\tconst val = parseFloat(contrastMatch[1]);\n\t\tconst intercept = -(0.5 * val) + 0.5;\n\t\tconst result = 'satori_bfcon';\n\t\tprimitives += buildXMLString(\n\t\t\t'feComponentTransfer',\n\t\t\t{ in: lastResult, result },\n\t\t\tbuildXMLString('feFuncR', {\n\t\t\t\tintercept,\n\t\t\t\tslope: val,\n\t\t\t\ttype: 'linear'\n\t\t\t}) +\n\t\t\t\tbuildXMLString('feFuncG', {\n\t\t\t\t\tintercept,\n\t\t\t\t\tslope: val,\n\t\t\t\t\ttype: 'linear'\n\t\t\t\t}) +\n\t\t\t\tbuildXMLString('feFuncB', {\n\t\t\t\t\tintercept,\n\t\t\t\t\tslope: val,\n\t\t\t\t\ttype: 'linear'\n\t\t\t\t})\n\t\t);\n\t\tlastResult = result;\n\t}\n\n\t// grayscale(N) or grayscale(N%)\n\tconst grayscaleMatch = value.match(/grayscale\\(([\\d.]+)(%?)\\)/);\n\tif (grayscaleMatch) {\n\t\tconst val =\n\t\t\tgrayscaleMatch[2] === '%'\n\t\t\t\t? parseFloat(grayscaleMatch[1]) / 100\n\t\t\t\t: parseFloat(grayscaleMatch[1]);\n\t\tconst result = 'satori_bfgray';\n\t\tprimitives += buildXMLString('feColorMatrix', {\n\t\t\tin: lastResult,\n\t\t\tresult,\n\t\t\ttype: 'saturate',\n\t\t\tvalues: 1 - Math.min(val, 1)\n\t\t});\n\t\tlastResult = result;\n\t}\n\n\t// Fix blur edge transparency: composite with source to force opaque output\n\t// where the original was opaque. Without this, feGaussianBlur fades to\n\t// transparent at content boundaries (edgeMode=\"duplicate\" is not widely\n\t// supported by SVG renderers like resvg).\n\tif (hasBlur) {\n\t\tprimitives += buildXMLString('feComposite', {\n\t\t\tin: lastResult,\n\t\t\tin2: 'SourceGraphic',\n\t\t\toperator: 'atop'\n\t\t});\n\t}\n\n\treturn primitives;\n};\n\nexport const buildBackdropFilter = (\n\toptions: BuildBackdropFilterOptions\n): string => {\n\tconst {\n\t\tbgGroupId,\n\t\tfilterValue,\n\t\theight,\n\t\tid,\n\t\tleft,\n\t\tmaskId,\n\t\tstyle,\n\t\ttop,\n\t\twidth\n\t} = options;\n\n\tconst primitives = parseFilterValue(filterValue);\n\tif (!primitives) {\n\t\treturn '';\n\t}\n\n\tconst filterId = `satori_bf-${id}`;\n\tconst clipId = `satori_bfc-${id}`;\n\n\t// Filter definition with generous region for blur overflow.\n\tconst filterDef = buildXMLString(\n\t\t'filter',\n\t\t{\n\t\t\theight: '200%',\n\t\t\tid: filterId,\n\t\t\twidth: '200%',\n\t\t\tx: '-50%',\n\t\t\ty: '-50%'\n\t\t},\n\t\tprimitives\n\t);\n\n\t// Clip path — use border-radius path when available, else a rect.\n\tconst borderRadiusPath = radius({ height, left, top, width }, style);\n\tconst clipContent = borderRadiusPath\n\t\t? buildXMLString('path', { d: borderRadiusPath })\n\t\t: buildXMLString('rect', { height, width, x: left, y: top });\n\tconst clipDef = buildXMLString('clipPath', { id: clipId }, clipContent);\n\n\tconst defs = buildXMLString('defs', {}, filterDef + clipDef);\n\n\t// Build the <use> inside a clip group. The filter is on the <use> so the\n\t// blur operates on the FULL content, then the outer <g> clips the result.\n\tconst useElement = buildXMLString('use', {\n\t\tfilter: `url(#${filterId})`,\n\t\thref: `#${bgGroupId}`\n\t});\n\n\t// Outer <g> clips the blurred result; mask is also on the outer group.\n\tconst gAttrs: Record<string, string> = {\n\t\t'clip-path': `url(#${clipId})`\n\t};\n\n\tif (maskId) {\n\t\tgAttrs.mask = `url(#${maskId})`;\n\t}\n\n\treturn defs + buildXMLString('g', gAttrs, useElement);\n};\n","const r = String.raw,\n e = r`\\p{Emoji}(?:\\p{EMod}|[\\u{E0020}-\\u{E007E}]+\\u{E007F}|\\uFE0F?\\u20E3?)`;\nexport default () => new RegExp(r`\\p{RI}{2}|(?![#*\\d](?!\\uFE0F?\\u20E3))${e}(?:\\u200D${e})*`, 'gu');\n","// This function guesses the human language (writing system) of the given\n// JavaScript string, using the Unicode Alias in extended RegExp.\n//\n// You can learn more about this in:\n// - https://en.wikipedia.org/wiki/Script_(Unicode)\n// - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Unicode_Property_Escapes\n// - https://unicode.org/reports/tr18/#General_Category_Property\n// - https://tc39.es/ecma262/multipage/text-processing.html#table-unicode-script-values\n\nimport createEmojiRegex from 'emoji-regex-xs';\n\nconst emojiRegex = new RegExp(createEmojiRegex(), 'u');\n\n// Supported languages. The order matters.\n// Usually, this is only for \"special cases\" like CJKV languages as latin\n// characters are usually included in the base font, and can be safely fallback\n// to the Noto Sans font. A list of special cases we want to support can be\n// found here (sort by popularity):\n// - https://fonts.google.com/noto/fonts?sort=popularity&noto.query=sans\n//\n// We can't tell if a hanzi(kanji) is Chinese or Japanese by regular expressions.\n// - https://unicode.org/faq/han_cjk.html\n\nconst specialCode = {\n\temoji: emojiRegex,\n\tsymbol: /\\p{Symbol}/u,\n\tmath: /\\p{Math}/u\n} as const;\n\nconst code = {\n\t'ja-JP': /\\p{scx=Hira}|\\p{scx=Kana}|\\p{scx=Han}|[\\u3000]|[\\uFF00-\\uFFEF]/u,\n\t'ko-KR': /\\p{scx=Hangul}/u,\n\t'zh-CN': /\\p{scx=Han}/u,\n\t'zh-TW': /\\p{scx=Han}/u,\n\t'zh-HK': /\\p{scx=Han}/u,\n\t'th-TH': /\\p{scx=Thai}/u,\n\t'bn-IN': /\\p{scx=Bengali}/u,\n\t'ar-AR': /\\p{scx=Arabic}/u,\n\t'ta-IN': /\\p{scx=Tamil}/u,\n\t'ml-IN': /\\p{scx=Malayalam}/u,\n\t'he-IL': /\\p{scx=Hebrew}/u,\n\t'te-IN': /\\p{scx=Telugu}/u,\n\tdevanagari: /\\p{scx=Devanagari}/u,\n\tkannada: /\\p{scx=Kannada}/u\n} as const;\n\ntype SpecialCodeKey = keyof typeof specialCode;\ntype CodeKey = keyof typeof specialCode | keyof typeof code;\nexport type Locale = keyof typeof code;\nexport type LangCode = CodeKey | 'unknown';\n\nexport const locales = Object.keys({ ...code, ...specialCode }) as Locale[];\nexport function isValidLocale(x: any): x is Locale {\n\treturn locales.includes(x);\n}\n\nexport function detectLanguageCode(\n\tsegment: string,\n\tlocale?: Locale\n): Array<Locale> | ['unknown'] | [SpecialCodeKey] {\n\tfor (const c of Object.keys(specialCode) as SpecialCodeKey[]) {\n\t\tif (specialCode[c].test(segment)) {\n\t\t\treturn [c];\n\t\t}\n\t}\n\n\tconst languages = Object.keys(code).filter(lang =>\n\t\tcode[lang].test(segment)\n\t) as Locale[];\n\n\tif (languages.length === 0) {\n\t\treturn ['unknown'];\n\t}\n\n\tif (locale) {\n\t\tconst index = languages.findIndex(lang => lang === locale);\n\t\tif (index !== -1) {\n\t\t\tlanguages.splice(index, 1);\n\t\t\tlanguages.unshift(locale);\n\t\t}\n\t}\n\n\treturn languages;\n}\n\nexport function normalizeLocale(locale?: string): Locale | undefined {\n\tif (locale) {\n\t\treturn locales.find(l =>\n\t\t\tl.toLowerCase().startsWith(locale.toLowerCase())\n\t\t);\n\t}\n}\n","/**\n * This module is used to calculate the layout of the current sub-tree.\n */\n\nimport type { ReactNode } from 'react';\nimport {\n\tisReactElement,\n\tisClass,\n\tbuildXMLString,\n\tnormalizeChildren,\n\thasDangerouslySetInnerHTMLProp,\n\tisReactComponent,\n\tisForwardRefComponent\n} from './utils.js';\nimport { getYoga, YogaNode } from './yoga.js';\nimport { SVGNodeToImage } from './handler/preprocess.js';\nimport computeStyle from './handler/compute.js';\nimport FontLoader from './font.js';\nimport buildTextNodes from './text/index.js';\nimport rect from './builder/rect.js';\nimport { buildBackdropFilter } from './builder/backdrop-filter.js';\nimport { Locale, normalizeLocale } from './language.js';\nimport { SerializedStyle } from './handler/expand.js';\n\nexport type BackdropFilterInfo = {\n\tfilter: string;\n\tinheritedStyle: SerializedStyle;\n\tnode: YogaNode;\n\tstyle: SerializedStyle;\n};\n\nexport interface LayoutContext {\n\tid: string;\n\tparentStyle: SerializedStyle;\n\tinheritedStyle: SerializedStyle;\n\tisInheritingTransform?: boolean;\n\tparent: YogaNode;\n\tfont: FontLoader;\n\tembedFont: boolean;\n\tdebug?: boolean;\n\tgraphemeImages?: Record<string, string>;\n\tcanLoadAdditionalAssets: boolean;\n\tlocale?: Locale;\n\tonBackdropFilterDetected?: (info: BackdropFilterInfo) => void;\n\tonNodeDetected?: (node: SatoriNode) => void;\n}\n\nexport interface SatoriNode {\n\t// Layout information.\n\tleft: number;\n\ttop: number;\n\twidth: number;\n\theight: number;\n\ttype: string;\n\tkey?: string | number;\n\tprops: Record<string, any>;\n\ttextContent?: string;\n}\n\nexport default async function* layout(\n\telement: ReactNode,\n\tcontext: LayoutContext\n): AsyncGenerator<\n\t{ word: string; locale?: string }[],\n\tstring,\n\t[number, number]\n> {\n\tconst Yoga = await getYoga();\n\tconst {\n\t\tid,\n\t\tinheritedStyle,\n\t\tparent,\n\t\tfont,\n\t\tdebug,\n\t\tlocale,\n\t\tembedFont = true,\n\t\tgraphemeImages,\n\t\tcanLoadAdditionalAssets\n\t} = context;\n\n\t// 1. Pre-process the node.\n\tif (element === null || typeof element === 'undefined') {\n\t\tyield;\n\t\tyield;\n\t\treturn '';\n\t}\n\n\t// Not a regular element.\n\tif (!isReactElement(element) || isReactComponent(element.type)) {\n\t\tlet iter: ReturnType<typeof layout>;\n\n\t\tif (!isReactElement(element)) {\n\t\t\t// Process as text node.\n\t\t\titer = buildTextNodes(String(element), context);\n\t\t\tyield (await iter.next()).value as {\n\t\t\t\tword: string;\n\t\t\t\tlocale?: Locale;\n\t\t\t}[];\n\t\t} else {\n\t\t\tif (isClass(element.type as Function)) {\n\t\t\t\tthrow new Error('Class component is not supported.');\n\t\t\t}\n\n\t\t\tlet render: Function;\n\n\t\t\t// This is a hack to support React.forwardRef wrapped components.\n\t\t\t// https://github.com/vercel/satori/issues/600\n\t\t\tif (isForwardRefComponent(element.type)) {\n\t\t\t\trender = (element.type as any).render;\n\t\t\t} else {\n\t\t\t\trender = element.type as Function;\n\t\t\t}\n\n\t\t\t// If it's a custom component, Satori strictly requires it to be pure,\n\t\t\t// stateless, and not relying on any React APIs such as hooks or suspense.\n\t\t\t// So we can safely evaluate it to render. Otherwise, an error will be\n\t\t\t// thrown by React.\n\t\t\titer = layout(await render(element.props), context);\n\t\t\tyield (await iter.next()).value as {\n\t\t\t\tword: string;\n\t\t\t\tlocale?: string;\n\t\t\t}[];\n\t\t}\n\n\t\tawait iter.next();\n\t\tconst offset = yield;\n\t\treturn (await iter.next(offset)).value as string;\n\t}\n\n\t// Process as element.\n\tconst { type: $type, props } = element;\n\t// type must be a string here.\n\tconst type = $type as string;\n\n\tif (props && hasDangerouslySetInnerHTMLProp(props)) {\n\t\tthrow new Error(\n\t\t\t'dangerouslySetInnerHTML property is not supported. See documentation for more information https://github.com/vercel/satori#jsx.'\n\t\t);\n\t}\n\tlet { style, children, lang: _newLocale = locale } = props || {};\n\tconst newLocale = normalizeLocale(_newLocale);\n\n\tconst node = Yoga.Node.create();\n\tparent.insertChild(node, parent.getChildCount());\n\n\tconst [computedStyle, newInheritableStyle] = await computeStyle(\n\t\tnode,\n\t\ttype,\n\t\tinheritedStyle,\n\t\tstyle,\n\t\tprops\n\t);\n\t// Post-process styles to attach inheritable properties for Satori.\n\n\t// If the element is inheriting the parent `transform`, or applying its own.\n\t// This affects the coordinate system.\n\tconst isInheritingTransform =\n\t\tcomputedStyle.transform === inheritedStyle.transform;\n\tif (!isInheritingTransform) {\n\t\t(computedStyle.transform as any).__parent = inheritedStyle.transform;\n\t}\n\n\t// If the element has `overflow` set to `hidden` or clip-path is set, we need to create a clip\n\t// path and use it in all its children.\n\tif (\n\t\tcomputedStyle.overflow === 'hidden' ||\n\t\t(computedStyle.clipPath && computedStyle.clipPath !== 'none')\n\t) {\n\t\tnewInheritableStyle._inheritedClipPathId = `satori_cp-${id}`;\n\t\tnewInheritableStyle._inheritedMaskId = `satori_om-${id}`;\n\t}\n\n\tif (computedStyle.maskImage) {\n\t\tnewInheritableStyle._inheritedMaskId = `satori_mi-${id}`;\n\t}\n\n\t// Register backdrop-filter with parent so it can inject the effect.\n\tif (computedStyle.backdropFilter && context.onBackdropFilterDetected) {\n\t\tcontext.onBackdropFilterDetected({\n\t\t\tfilter: computedStyle.backdropFilter as string,\n\t\t\tinheritedStyle: newInheritableStyle,\n\t\t\tnode,\n\t\t\tstyle: computedStyle\n\t\t});\n\t}\n\n\t// If the element has `background-clip: text` set, we need to create a clip\n\t// path and use it in all its children.\n\tif (computedStyle.backgroundClip === 'text') {\n\t\tconst mutateRefValue = { value: '' } as any;\n\t\tnewInheritableStyle._inheritedBackgroundClipTextPath = mutateRefValue;\n\t\tcomputedStyle._inheritedBackgroundClipTextPath = mutateRefValue;\n\n\t\tif (computedStyle.backgroundImage) {\n\t\t\tnewInheritableStyle._inheritedBackgroundClipTextHasBackground =\n\t\t\t\t'true';\n\t\t\tcomputedStyle._inheritedBackgroundClipTextHasBackground = 'true';\n\t\t}\n\t}\n\n\t// 2. Do layout recursively for its children.\n\tconst normalizedChildren = normalizeChildren(children);\n\tconst iterators: ReturnType<typeof layout>[] = [];\n\tconst backdropInfoByIndex: Record<number, BackdropFilterInfo> = {};\n\n\tlet i = 0;\n\tconst segmentsMissingFont: { word: string; locale?: string }[] = [];\n\tfor (const child of normalizedChildren) {\n\t\tconst currentIndex = i;\n\t\tconst iter = layout(child, {\n\t\t\tid: id + '-' + i++,\n\t\t\tparentStyle: computedStyle,\n\t\t\tinheritedStyle: newInheritableStyle,\n\t\t\tisInheritingTransform: true,\n\t\t\tparent: node,\n\t\t\tfont,\n\t\t\tembedFont,\n\t\t\tdebug,\n\t\t\tgraphemeImages,\n\t\t\tcanLoadAdditionalAssets,\n\t\t\tlocale: newLocale,\n\t\t\tonNodeDetected: context.onNodeDetected,\n\t\t\tonBackdropFilterDetected: (info: BackdropFilterInfo) => {\n\t\t\t\tbackdropInfoByIndex[currentIndex] = info;\n\t\t\t}\n\t\t});\n\t\tif (canLoadAdditionalAssets) {\n\t\t\tsegmentsMissingFont.push(\n\t\t\t\t...(((await iter.next()).value as any) || [])\n\t\t\t);\n\t\t} else {\n\t\t\tawait iter.next();\n\t\t}\n\t\titerators.push(iter);\n\t}\n\tyield segmentsMissingFont;\n\tfor (const iter of iterators) await iter.next();\n\n\t// 3. Post-process the node.\n\tconst [x, y] = yield;\n\tlet { left, top, width, height } = node.getComputedLayout();\n\t// Attach offset to the current node.\n\tleft += x;\n\ttop += y;\n\n\tlet childrenRenderResult = '';\n\tlet baseRenderResult = '';\n\tlet depsRenderResult = '';\n\n\t// Emit event for the current node. We don't pass the children prop to the\n\t// event handler because everything is already flattened, unless it's a text\n\t// node.\n\tconst { children: childrenNode, ...restProps } = props;\n\tcontext.onNodeDetected?.({\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight,\n\t\ttype,\n\t\tprops: restProps,\n\t\tkey: element.key,\n\t\ttextContent: isReactElement(childrenNode) ? undefined : childrenNode\n\t});\n\n\t// Generate the rendered markup for the current node.\n\tif (type === 'img') {\n\t\tconst src = computedStyle.__src as string;\n\t\tbaseRenderResult = await rect(\n\t\t\t{\n\t\t\t\tid,\n\t\t\t\tleft,\n\t\t\t\ttop,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tsrc,\n\t\t\t\tisInheritingTransform,\n\t\t\t\tdebug\n\t\t\t},\n\t\t\tcomputedStyle,\n\t\t\tnewInheritableStyle\n\t\t);\n\t} else if (type === 'svg') {\n\t\t// When entering a <svg> node, we need to convert it to a <img> with the\n\t\t// SVG data URL embedded.\n\t\tconst currentColor = computedStyle.color;\n\t\tconst src = await SVGNodeToImage(element, currentColor);\n\t\tbaseRenderResult = await rect(\n\t\t\t{\n\t\t\t\tid,\n\t\t\t\tleft,\n\t\t\t\ttop,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tsrc,\n\t\t\t\tisInheritingTransform,\n\t\t\t\tdebug\n\t\t\t},\n\t\t\tcomputedStyle,\n\t\t\tnewInheritableStyle\n\t\t);\n\t} else {\n\t\tconst display = style?.display;\n\t\tif (\n\t\t\ttype === 'div' &&\n\t\t\tchildren &&\n\t\t\ttypeof children !== 'string' &&\n\t\t\tdisplay !== 'flex' &&\n\t\t\tdisplay !== 'none' &&\n\t\t\tdisplay !== 'contents'\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`Expected <div> to have explicit \"display: flex\", \"display: contents\", or \"display: none\" if it has more than one child node.`\n\t\t\t);\n\t\t}\n\t\tbaseRenderResult = await rect(\n\t\t\t{ id, left, top, width, height, isInheritingTransform, debug },\n\t\t\tcomputedStyle,\n\t\t\tnewInheritableStyle\n\t\t);\n\t}\n\n\t// Generate the rendered markup for the children.\n\tfor (let j = 0; j < iterators.length; j++) {\n\t\t// If this child has backdrop-filter, wrap all prior content in a <g> and\n\t\t// insert a <use> with the SVG filter + clip before the child.\n\t\tif (backdropInfoByIndex[j]) {\n\t\t\tconst info = backdropInfoByIndex[j];\n\t\t\tconst childLayout = info.node.getComputedLayout();\n\t\t\tconst childLeft = left + childLayout.left;\n\t\t\tconst childTop = top + childLayout.top;\n\t\t\tconst childWidth = childLayout.width;\n\t\t\tconst childHeight = childLayout.height;\n\n\t\t\tconst bgGroupId = `satori_bfbg-${id}-${j}`;\n\t\t\tconst currentContent = baseRenderResult + childrenRenderResult;\n\t\t\tbaseRenderResult = `<g id=\"${bgGroupId}\">${currentContent}</g>`;\n\t\t\tchildrenRenderResult = '';\n\n\t\t\t// Forward-reference the child's mask (generated by the child later).\n\t\t\tconst childId = id + '-' + j;\n\t\t\tconst maskId = info.style.maskImage\n\t\t\t\t? `satori_mi-${childId}`\n\t\t\t\t: undefined;\n\n\t\t\tchildrenRenderResult += buildBackdropFilter({\n\t\t\t\tbgGroupId,\n\t\t\t\tfilterValue: info.filter,\n\t\t\t\theight: childHeight,\n\t\t\t\tid: childId,\n\t\t\t\tleft: childLeft,\n\t\t\t\tmaskId,\n\t\t\t\tstyle: info.style as Record<string, any>,\n\t\t\t\ttop: childTop,\n\t\t\t\twidth: childWidth\n\t\t\t});\n\t\t}\n\n\t\tchildrenRenderResult += (await iterators[j].next([left, top])).value;\n\t}\n\n\t// An extra pass to generate the special background-clip shape collected from\n\t// children.\n\tif (computedStyle._inheritedBackgroundClipTextPath) {\n\t\tdepsRenderResult += buildXMLString(\n\t\t\t'clipPath',\n\t\t\t{\n\t\t\t\tid: `satori_bct-${id}`,\n\t\t\t\t'clip-path': computedStyle._inheritedClipPathId\n\t\t\t\t\t? `url(#${computedStyle._inheritedClipPathId})`\n\t\t\t\t\t: undefined\n\t\t\t},\n\t\t\t(computedStyle._inheritedBackgroundClipTextPath as any).value\n\t\t);\n\t}\n\n\treturn depsRenderResult + baseRenderResult + childrenRenderResult;\n}\n","/**\n * This class handles everything related to fonts.\n */\nimport opentype from '@shuding/opentype.js';\nimport { Locale, locales, isValidLocale } from './language.js';\n\nexport type Weight = 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900;\nexport type WeightName = 'normal' | 'bold';\nexport type FontWeight = Weight | WeightName;\nexport type FontStyle = 'normal' | 'italic';\nconst SUFFIX_WHEN_LANG_NOT_SET = 'unknown';\n\nexport interface FontOptions {\n\tdata: Buffer | ArrayBuffer;\n\tname: string;\n\tweight?: Weight;\n\tstyle?: FontStyle;\n\tlang?: string;\n}\n\nexport type GlyphBox = {\n\tx1: number;\n\tx2: number;\n\ty1: number;\n\ty2: number;\n};\ntype SkipInkBand = {\n\tunderlineY: number;\n\tstrokeWidth: number;\n};\n\nexport type FontEngine = {\n\thas: (s: string) => boolean;\n\tbaseline: (s?: string, resolvedFont?: any) => number;\n\theight: (s?: string, resolvedFont?: any) => number;\n\tmeasure: (\n\t\ts: string,\n\t\tstyle: {\n\t\t\tfontSize: number;\n\t\t\tletterSpacing: number;\n\t\t}\n\t) => number;\n\tgetSVG: (\n\t\ts: string,\n\t\tstyle: {\n\t\t\tfontSize: number;\n\t\t\ttop: number;\n\t\t\tleft: number;\n\t\t\tletterSpacing: number;\n\t\t},\n\t\tband?: SkipInkBand\n\t) => { path: string; boxes: GlyphBox[] };\n};\n\ntype BandPoint = [number, number];\n\ntype LineSegment = {\n\tfrom: BandPoint;\n\tto: BandPoint;\n};\n\nfunction flattenPath(commands: opentype.Path['commands']): LineSegment[] {\n\tconst segments: LineSegment[] = [];\n\tlet start: BandPoint = [0, 0];\n\tlet current: BandPoint = [0, 0];\n\n\tconst addCurve = (points: BandPoint[], steps: number) => {\n\t\tlet prev = points[0];\n\t\tfor (let i = 1; i <= steps; i++) {\n\t\t\tconst t = i / steps;\n\t\t\tconst next = evaluateBezier(points, t);\n\t\t\tsegments.push({ from: prev, to: next });\n\t\t\tprev = next;\n\t\t}\n\t\tcurrent = points[points.length - 1];\n\t};\n\n\tfor (const cmd of commands) {\n\t\tif (cmd.type === 'M') {\n\t\t\tstart = current = [cmd.x, cmd.y];\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (cmd.type === 'L') {\n\t\t\tconst next: BandPoint = [cmd.x, cmd.y];\n\t\t\tsegments.push({ from: current, to: next });\n\t\t\tcurrent = next;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (cmd.type === 'Q') {\n\t\t\taddCurve([current, [cmd.x1, cmd.y1], [cmd.x, cmd.y]], 12);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (cmd.type === 'C') {\n\t\t\taddCurve(\n\t\t\t\t[current, [cmd.x1, cmd.y1], [cmd.x2, cmd.y2], [cmd.x, cmd.y]],\n\t\t\t\t16\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (cmd.type === 'Z') {\n\t\t\tsegments.push({ from: current, to: start });\n\t\t\tcurrent = start;\n\t\t}\n\t}\n\n\treturn segments;\n}\n\nfunction evaluateBezier(points: BandPoint[], t: number): BandPoint {\n\tlet working = points;\n\n\twhile (working.length > 1) {\n\t\tconst next: BandPoint[] = [];\n\t\tfor (let i = 0; i < working.length - 1; i++) {\n\t\t\tnext.push([\n\t\t\t\tworking[i][0] + (working[i + 1][0] - working[i][0]) * t,\n\t\t\t\tworking[i][1] + (working[i + 1][1] - working[i][1]) * t\n\t\t\t]);\n\t\t}\n\t\tworking = next;\n\t}\n\n\treturn working[0];\n}\n\nfunction computeBandBox(\n\tcommands: opentype.Path['commands'],\n\tband?: SkipInkBand\n): GlyphBox[] {\n\tif (!band) return [];\n\n\tconst strokeWidth = band.strokeWidth;\n\tconst bandMin = band.underlineY - strokeWidth * 0.25;\n\tconst bandMax = band.underlineY + strokeWidth * 2.5;\n\n\tconst segments = flattenPath(commands);\n\tif (!segments.length) return [];\n\n\tconst bandHeight = bandMax - bandMin;\n\tconst ySamples = Math.max(12, Math.ceil(bandHeight / 0.25));\n\tconst yStep = bandHeight / ySamples;\n\tconst yStart = bandMin + yStep / 2;\n\n\tconst columnHits = new Set<number>();\n\n\tfor (let i = 0; i < ySamples; i++) {\n\t\tconst y = yStart + yStep * i;\n\t\tconst intersections: number[] = [];\n\n\t\tfor (const seg of segments) {\n\t\t\tconst [x1, y1] = seg.from;\n\t\t\tconst [x2, y2] = seg.to;\n\n\t\t\tif (y1 === y2) continue;\n\t\t\tconst yMin = Math.min(y1, y2);\n\t\t\tconst yMax = Math.max(y1, y2);\n\t\t\tif (y < yMin || y >= yMax) continue;\n\n\t\t\tconst t = (y - y1) / (y2 - y1);\n\t\t\tconst x = x1 + (x2 - x1) * t;\n\t\t\tintersections.push(x);\n\t\t}\n\n\t\tif (!intersections.length) continue;\n\t\tintersections.sort((a, b) => a - b);\n\n\t\tfor (let j = 0; j < intersections.length - 1; j += 2) {\n\t\t\tconst from = Math.min(intersections[j], intersections[j + 1]);\n\t\t\tconst to = Math.max(intersections[j], intersections[j + 1]);\n\t\t\tconst start = Math.floor(from);\n\t\t\tconst end = Math.ceil(to);\n\t\t\tfor (let col = start; col < end; col++) {\n\t\t\t\tcolumnHits.add(col);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!columnHits.size) return [];\n\n\tconst columns = Array.from(columnHits.values()).sort((a, b) => a - b);\n\tconst inkRanges: [number, number][] = [];\n\n\tlet rangeStart = columns[0];\n\tlet prev = columns[0];\n\tfor (let i = 1; i < columns.length; i++) {\n\t\tconst col = columns[i];\n\t\tif (col > prev + 1) {\n\t\t\tinkRanges.push([rangeStart, prev + 1]);\n\t\t\trangeStart = col;\n\t\t}\n\t\tprev = col;\n\t}\n\tinkRanges.push([rangeStart, prev + 1]);\n\n\tconst boxes: GlyphBox[] = [];\n\tconst bleed = strokeWidth * 0.6;\n\tconst minX = inkRanges[0][0];\n\tconst maxX = inkRanges[inkRanges.length - 1][1];\n\n\tfor (const [x1, x2] of inkRanges) {\n\t\tconst left = Math.min(x1, minX) - bleed;\n\t\tconst right = Math.max(x2, maxX) + bleed;\n\t\tboxes.push({\n\t\t\tx1: left,\n\t\t\tx2: right,\n\t\t\ty1: bandMin,\n\t\t\ty2: bandMax\n\t\t});\n\t}\n\n\treturn boxes;\n}\n\nfunction computeBoundingBox(\n\tcommands: opentype.Path['commands']\n): GlyphBox | null {\n\tconst xs: number[] = [];\n\tconst ys: number[] = [];\n\n\tfor (const cmd of commands) {\n\t\tif ('x' in cmd && typeof cmd.x === 'number') xs.push(cmd.x);\n\t\tif ('y' in cmd && typeof cmd.y === 'number') ys.push(cmd.y);\n\t\tif ('x1' in cmd && typeof cmd.x1 === 'number') xs.push(cmd.x1);\n\t\tif ('y1' in cmd && typeof cmd.y1 === 'number') ys.push(cmd.y1);\n\t\tif ('x2' in cmd && typeof cmd.x2 === 'number') xs.push(cmd.x2);\n\t\tif ('y2' in cmd && typeof cmd.y2 === 'number') ys.push(cmd.y2);\n\t}\n\n\tif (!xs.length || !ys.length) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tx1: Math.min(...xs),\n\t\tx2: Math.max(...xs),\n\t\ty1: Math.min(...ys),\n\t\ty2: Math.max(...ys)\n\t};\n}\n\nfunction compareFont(\n\tweight,\n\tstyle,\n\t[matchedWeight, matchedStyle],\n\t[nextWeight, nextStyle]\n) {\n\tif (matchedWeight !== nextWeight) {\n\t\t// Put the defined weight first.\n\t\tif (!matchedWeight) return 1;\n\t\tif (!nextWeight) return -1;\n\n\t\t// Exact match.\n\t\tif (matchedWeight === weight) return -1;\n\t\tif (nextWeight === weight) return 1;\n\n\t\t// 400 and 500.\n\t\tif (weight === 400 && matchedWeight === 500) return -1;\n\t\tif (weight === 500 && matchedWeight === 400) return -1;\n\t\tif (weight === 400 && nextWeight === 500) return 1;\n\t\tif (weight === 500 && nextWeight === 400) return 1;\n\n\t\t// Less than 400.\n\t\tif (weight < 400) {\n\t\t\tif (matchedWeight < weight && nextWeight < weight)\n\t\t\t\treturn nextWeight - matchedWeight;\n\t\t\tif (matchedWeight < weight) return -1;\n\t\t\tif (nextWeight < weight) return 1;\n\t\t\treturn matchedWeight - nextWeight;\n\t\t}\n\n\t\t// Greater than 500.\n\t\tif (weight < matchedWeight && weight < nextWeight)\n\t\t\treturn matchedWeight - nextWeight;\n\t\tif (weight < matchedWeight) return -1;\n\t\tif (weight < nextWeight) return 1;\n\t\treturn nextWeight - matchedWeight;\n\t}\n\n\tif (matchedStyle !== nextStyle) {\n\t\t// Exact match.\n\t\tif (matchedStyle === style) return -1;\n\t\tif (nextStyle === style) return 1;\n\t}\n\n\treturn -1;\n}\n\nconst cachedParsedFont = new WeakMap<\n\tBuffer | ArrayBuffer,\n\topentype.Font | null | undefined\n>();\n\nexport default class FontLoader {\n\tdefaultFont: opentype.Font;\n\tfonts = new Map<string, [opentype.Font, Weight?, FontStyle?][]>();\n\tconstructor(fontOptions: FontOptions[]) {\n\t\tthis.addFonts(fontOptions);\n\t}\n\n\t// Get font by name and weight.\n\tprivate get({\n\t\tname,\n\t\tweight,\n\t\tstyle\n\t}: {\n\t\tname: string;\n\t\tweight: Weight | WeightName;\n\t\tstyle: FontStyle;\n\t}) {\n\t\tif (!this.fonts.has(name)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (weight === 'normal') weight = 400;\n\t\tif (weight === 'bold') weight = 700;\n\t\tif (typeof weight === 'string')\n\t\t\tweight = Number.parseInt(weight, 10) as Weight;\n\n\t\tconst fonts = [...this.fonts.get(name)];\n\n\t\tlet matchedFont = fonts[0];\n\n\t\t// Fallback to the closest weight and style according to the strategy here:\n\t\t// https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight#fallback_weights\n\t\tfor (let i = 1; i < fonts.length; i++) {\n\t\t\tconst [, weight1, style1] = matchedFont;\n\t\t\tconst [, weight2, style2] = fonts[i];\n\t\t\tif (\n\t\t\t\tcompareFont(\n\t\t\t\t\tweight,\n\t\t\t\t\tstyle,\n\t\t\t\t\t[weight1, style1],\n\t\t\t\t\t[weight2, style2]\n\t\t\t\t) > 0\n\t\t\t) {\n\t\t\t\tmatchedFont = fonts[i];\n\t\t\t}\n\t\t}\n\n\t\treturn matchedFont[0];\n\t}\n\n\tpublic addFonts(fontOptions: FontOptions[]) {\n\t\tfor (const fontOption of fontOptions) {\n\t\t\tconst { name, data, lang } = fontOption;\n\t\t\tif (lang && !isValidLocale(lang)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Invalid value for props \\`lang\\`: \"${lang}\". The value must be one of the following: ${locales.join(\n\t\t\t\t\t\t', '\n\t\t\t\t\t)}.`\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst _lang = lang ?? SUFFIX_WHEN_LANG_NOT_SET;\n\t\t\tlet font;\n\n\t\t\tif (cachedParsedFont.has(data)) {\n\t\t\t\tfont = cachedParsedFont.get(data);\n\t\t\t} else {\n\t\t\t\tfont = opentype.parse(\n\t\t\t\t\t// Buffer to ArrayBuffer.\n\t\t\t\t\t'buffer' in data\n\t\t\t\t\t\t? data.buffer.slice(\n\t\t\t\t\t\t\t\tdata.byteOffset,\n\t\t\t\t\t\t\t\tdata.byteOffset + data.byteLength\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: data,\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t{ lowMemory: true }\n\t\t\t\t);\n\t\t\t\t// Modify the `charToGlyphIndex` method, so we can know which char is\n\t\t\t\t// being mapped to which glyph.\n\t\t\t\tconst originalCharToGlyphIndex = font.charToGlyphIndex;\n\t\t\t\tfont.charToGlyphIndex = char => {\n\t\t\t\t\tconst index = originalCharToGlyphIndex.call(font, char);\n\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t// The current requested char is missing a glyph.\n\t\t\t\t\t\tif ((font as any)._trackBrokenChars) {\n\t\t\t\t\t\t\t(font as any)._trackBrokenChars.push(char);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn index;\n\t\t\t\t};\n\n\t\t\t\tcachedParsedFont.set(data, font);\n\t\t\t}\n\n\t\t\t// We use the first font as the default font fallback.\n\t\t\tif (!this.defaultFont) this.defaultFont = font;\n\n\t\t\tconst _name = `${name.toLowerCase()}_${_lang}`;\n\n\t\t\tif (!this.fonts.has(_name)) {\n\t\t\t\tthis.fonts.set(_name, []);\n\t\t\t}\n\t\t\tthis.fonts\n\t\t\t\t.get(_name)\n\t\t\t\t.push([font, fontOption.weight, fontOption.style]);\n\t\t}\n\t}\n\n\tpublic getEngine(\n\t\tfontSize = 16,\n\t\tlineHeight: number | string = 'normal',\n\t\t{\n\t\t\tfontFamily = 'sans-serif',\n\t\t\tfontWeight = 400,\n\t\t\tfontStyle = 'normal'\n\t\t}: {\n\t\t\tfontFamily?: string | string[];\n\t\t\tfontWeight?: FontWeight;\n\t\t\tfontStyle?: FontStyle;\n\t\t},\n\t\tlocale: Locale | undefined\n\t): FontEngine {\n\t\tif (!this.fonts.size) {\n\t\t\tthrow new Error(\n\t\t\t\t'No fonts are loaded. At least one font is required to calculate the layout.'\n\t\t\t);\n\t\t}\n\n\t\tfontFamily = (\n\t\t\tArray.isArray(fontFamily) ? fontFamily : [fontFamily]\n\t\t).map(name => name.toLowerCase());\n\t\tconst fonts = [];\n\t\tfontFamily.forEach(face => {\n\t\t\tconst getNormal = this.get({\n\t\t\t\tname: face,\n\t\t\t\tweight: fontWeight,\n\t\t\t\tstyle: fontStyle\n\t\t\t});\n\t\t\tif (getNormal) {\n\t\t\t\tfonts.push(getNormal);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst getUnknown = this.get({\n\t\t\t\tname: face + '_unknown',\n\t\t\t\tweight: fontWeight,\n\t\t\t\tstyle: fontStyle\n\t\t\t});\n\n\t\t\tif (getUnknown) {\n\t\t\t\tfonts.push(getUnknown);\n\t\t\t\treturn;\n\t\t\t}\n\t\t});\n\n\t\t// Add additional fonts as the fallback.\n\t\tconst keys = Array.from(this.fonts.keys());\n\t\tconst specifiedLangFonts = [];\n\t\tconst nonSpecifiedLangFonts = [];\n\t\tconst additionalFonts = [];\n\t\tfor (const name of keys) {\n\t\t\tif (fontFamily.includes(name)) continue;\n\t\t\tif (locale) {\n\t\t\t\tconst lang = getLangFromFontName(name);\n\t\t\t\tif (lang) {\n\t\t\t\t\tif (lang === locale) {\n\t\t\t\t\t\tspecifiedLangFonts.push(\n\t\t\t\t\t\t\tthis.get({\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tweight: fontWeight,\n\t\t\t\t\t\t\t\tstyle: fontStyle\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnonSpecifiedLangFonts.push(\n\t\t\t\t\t\t\tthis.get({\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tweight: fontWeight,\n\t\t\t\t\t\t\t\tstyle: fontStyle\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tadditionalFonts.push(\n\t\t\t\t\t\tthis.get({\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tweight: fontWeight,\n\t\t\t\t\t\t\tstyle: fontStyle\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tadditionalFonts.push(\n\t\t\t\t\tthis.get({\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tweight: fontWeight,\n\t\t\t\t\t\tstyle: fontStyle\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst cachedFontResolver = new Map<number, opentype.Font | undefined>();\n\t\tconst resolveFont = (word: string, fallback = true) => {\n\t\t\tconst _fonts = [\n\t\t\t\t...fonts,\n\t\t\t\t...additionalFonts,\n\t\t\t\t...specifiedLangFonts,\n\t\t\t\t...(fallback ? nonSpecifiedLangFonts : [])\n\t\t\t];\n\n\t\t\tif (typeof word === 'undefined') {\n\t\t\t\tif (fallback) {\n\t\t\t\t\treturn _fonts[_fonts.length - 1];\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst code = word.charCodeAt(0);\n\t\t\tif (cachedFontResolver.has(code))\n\t\t\t\treturn cachedFontResolver.get(code);\n\n\t\t\tconst font = _fonts.find((_font, index) => {\n\t\t\t\treturn (\n\t\t\t\t\t!!_font.charToGlyphIndex(word) ||\n\t\t\t\t\t(fallback && index === _fonts.length - 1)\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tif (font) {\n\t\t\t\tcachedFontResolver.set(code, font);\n\t\t\t}\n\n\t\t\treturn font;\n\t\t};\n\n\t\tconst ascender = (resolvedFont: opentype.Font, useOS2Table = false) => {\n\t\t\tconst _ascender =\n\t\t\t\t(useOS2Table ? resolvedFont.tables?.os2?.sTypoAscender : 0) ||\n\t\t\t\tresolvedFont.ascender;\n\t\t\treturn (_ascender / resolvedFont.unitsPerEm) * fontSize;\n\t\t};\n\n\t\tconst descender = (\n\t\t\tresolvedFont: opentype.Font,\n\t\t\tuseOS2Table = false\n\t\t) => {\n\t\t\tconst _descender =\n\t\t\t\t(useOS2Table ? resolvedFont.tables?.os2?.sTypoDescender : 0) ||\n\t\t\t\tresolvedFont.descender;\n\t\t\treturn (_descender / resolvedFont.unitsPerEm) * fontSize;\n\t\t};\n\n\t\tconst height = (resolvedFont: opentype.Font, useOS2Table = false) => {\n\t\t\tif ('string' === typeof lineHeight && 'normal' === lineHeight) {\n\t\t\t\tconst _lineGap =\n\t\t\t\t\t(useOS2Table\n\t\t\t\t\t\t? resolvedFont.tables?.os2?.sTypoLineGap\n\t\t\t\t\t\t: 0) || 0;\n\t\t\t\treturn (\n\t\t\t\t\tascender(resolvedFont, useOS2Table) -\n\t\t\t\t\tdescender(resolvedFont, useOS2Table) +\n\t\t\t\t\t(_lineGap / resolvedFont.unitsPerEm) * fontSize\n\t\t\t\t);\n\t\t\t} else if ('number' === typeof lineHeight) {\n\t\t\t\treturn fontSize * lineHeight;\n\t\t\t}\n\t\t};\n\n\t\tconst resolve = (s: string) => {\n\t\t\treturn resolveFont(s, false);\n\t\t};\n\n\t\tconst engine = {\n\t\t\thas: (s: string) => {\n\t\t\t\tif (s === '\\n') return true;\n\t\t\t\tconst font = resolve(s);\n\t\t\t\tif (!font) return false;\n\t\t\t\t(font as any)._trackBrokenChars = [];\n\t\t\t\tfont.stringToGlyphs(s);\n\t\t\t\tif (!(font as any)._trackBrokenChars.length) return true;\n\t\t\t\t(font as any)._trackBrokenChars = undefined;\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tbaseline: (\n\t\t\t\ts?: string,\n\t\t\t\tresolvedFont = typeof s === 'undefined'\n\t\t\t\t\t? fonts[0]\n\t\t\t\t\t: resolveFont(s)\n\t\t\t) => {\n\t\t\t\tconst asc = ascender(resolvedFont);\n\t\t\t\tconst desc = descender(resolvedFont);\n\t\t\t\tconst contentHeight = asc - desc;\n\n\t\t\t\treturn asc + (height(resolvedFont) - contentHeight) / 2;\n\t\t\t},\n\t\t\theight: (\n\t\t\t\ts?: string,\n\t\t\t\tresolvedFont = typeof s === 'undefined'\n\t\t\t\t\t? fonts[0]\n\t\t\t\t\t: resolveFont(s)\n\t\t\t) => {\n\t\t\t\treturn height(resolvedFont);\n\t\t\t},\n\t\t\tmeasure: (\n\t\t\t\ts: string,\n\t\t\t\tstyle: {\n\t\t\t\t\tfontSize: number;\n\t\t\t\t\tletterSpacing: number;\n\t\t\t\t}\n\t\t\t) => {\n\t\t\t\treturn this.measure(resolveFont, s, style);\n\t\t\t},\n\t\t\tgetSVG: (\n\t\t\t\ts: string,\n\t\t\t\tstyle: {\n\t\t\t\t\tfontSize: number;\n\t\t\t\t\ttop: number;\n\t\t\t\t\tleft: number;\n\t\t\t\t\tletterSpacing: number;\n\t\t\t\t},\n\t\t\t\tband?: SkipInkBand\n\t\t\t) => {\n\t\t\t\treturn this.getSVG(resolveFont, s, style, band);\n\t\t\t}\n\t\t};\n\n\t\treturn engine;\n\t}\n\n\tprivate patchFontFallbackResolver(\n\t\tfont: opentype.Font,\n\t\tresolveFont: (word: string, fallback?: boolean) => opentype.Font\n\t) {\n\t\tconst brokenChars = [];\n\t\t(font as any)._trackBrokenChars = brokenChars;\n\n\t\tconst originalStringToGlyphs = font.stringToGlyphs;\n\t\tfont.stringToGlyphs = (s: string, ...args: any) => {\n\t\t\tconst glyphs = originalStringToGlyphs.call(font, s, ...args);\n\n\t\t\tfor (let i = 0; i < glyphs.length; i++) {\n\t\t\t\t// Hitting an undefined glyph. We have to try to resolve it from other\n\t\t\t\t// fonts.\n\t\t\t\t// @TODO: This affects the kerning resolution but should be fine for now.\n\t\t\t\tif (glyphs[i].unicode === undefined) {\n\t\t\t\t\tconst char = brokenChars.shift();\n\t\t\t\t\tconst anotherFont = resolveFont(char);\n\t\t\t\t\tif (anotherFont !== font) {\n\t\t\t\t\t\tconst glyph = anotherFont.charToGlyph(char);\n\t\t\t\t\t\t// Scale the glyph to match the current units per em.\n\t\t\t\t\t\tconst scale = font.unitsPerEm / anotherFont.unitsPerEm;\n\t\t\t\t\t\tconst p = new opentype.Path();\n\t\t\t\t\t\tp.unitsPerEm = font.unitsPerEm;\n\t\t\t\t\t\tp.commands = glyph.path.commands.map(command => {\n\t\t\t\t\t\t\tconst scaledCommand = { ...command };\n\t\t\t\t\t\t\tfor (let k in scaledCommand) {\n\t\t\t\t\t\t\t\tif (typeof scaledCommand[k] === 'number') {\n\t\t\t\t\t\t\t\t\tscaledCommand[k] *= scale;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn scaledCommand;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconst g = new opentype.Glyph({\n\t\t\t\t\t\t\t...glyph,\n\t\t\t\t\t\t\tadvanceWidth: glyph.advanceWidth * scale,\n\t\t\t\t\t\t\txMin: glyph.xMin * scale,\n\t\t\t\t\t\t\txMax: glyph.xMax * scale,\n\t\t\t\t\t\t\tyMin: glyph.yMin * scale,\n\t\t\t\t\t\t\tyMax: glyph.yMax * scale,\n\t\t\t\t\t\t\tpath: p\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tglyphs[i] = g;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn glyphs;\n\t\t};\n\n\t\treturn () => {\n\t\t\tfont.stringToGlyphs = originalStringToGlyphs;\n\t\t\t(font as any)._trackBrokenChars = undefined;\n\t\t};\n\t}\n\n\tprivate measure(\n\t\tresolveFont: (word: string, fallback?: boolean) => opentype.Font,\n\t\tcontent: string,\n\t\t{\n\t\t\tfontSize,\n\t\t\tletterSpacing = 0\n\t\t}: {\n\t\t\tfontSize: number;\n\t\t\tletterSpacing: number;\n\t\t}\n\t) {\n\t\tconst font = resolveFont(content);\n\t\tconst unpatch = this.patchFontFallbackResolver(font, resolveFont);\n\n\t\ttry {\n\t\t\treturn font.getAdvanceWidth(content, fontSize, {\n\t\t\t\tletterSpacing: letterSpacing / fontSize\n\t\t\t});\n\t\t} finally {\n\t\t\tunpatch();\n\t\t}\n\t}\n\n\tprivate getSVG(\n\t\tresolveFont: (word: string, fallback?: boolean) => opentype.Font,\n\t\tcontent: string,\n\t\t{\n\t\t\tfontSize,\n\t\t\ttop,\n\t\t\tleft,\n\t\t\tletterSpacing = 0\n\t\t}: {\n\t\t\tfontSize: number;\n\t\t\ttop: number;\n\t\t\tleft: number;\n\t\t\tletterSpacing: number;\n\t\t},\n\t\tband?: SkipInkBand\n\t): { path: string; boxes: GlyphBox[] } {\n\t\tconst font = resolveFont(content);\n\t\tconst unpatch = this.patchFontFallbackResolver(font, resolveFont);\n\n\t\ttry {\n\t\t\tif (fontSize === 0) {\n\t\t\t\treturn { path: '', boxes: [] };\n\t\t\t}\n\n\t\t\tconst fullPath = new opentype.Path();\n\t\t\tconst boxes: GlyphBox[] = [];\n\n\t\t\tconst options = {\n\t\t\t\tletterSpacing: letterSpacing / fontSize\n\t\t\t};\n\n\t\t\tconst cachedPath = new WeakMap<\n\t\t\t\topentype.Glyph,\n\t\t\t\t[number, number, opentype.Path]\n\t\t\t>();\n\n\t\t\tfont.forEachGlyph(\n\t\t\t\tcontent.replace(/\\n/g, ''),\n\t\t\t\tleft,\n\t\t\t\ttop,\n\t\t\t\tfontSize,\n\t\t\t\toptions,\n\t\t\t\tfunction (glyph, gX, gY, gFontSize) {\n\t\t\t\t\tlet glyphPath: opentype.Path;\n\t\t\t\t\tif (!cachedPath.has(glyph)) {\n\t\t\t\t\t\tglyphPath = glyph.getPath(gX, gY, gFontSize, options);\n\t\t\t\t\t\tcachedPath.set(glyph, [gX, gY, glyphPath]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst [_x, _y, _glyphPath] = cachedPath.get(glyph);\n\t\t\t\t\t\tglyphPath = new opentype.Path();\n\t\t\t\t\t\tglyphPath.commands = _glyphPath.commands.map(\n\t\t\t\t\t\t\tcommand => {\n\t\t\t\t\t\t\t\tconst movedCommand = { ...command };\n\t\t\t\t\t\t\t\tfor (let k in movedCommand) {\n\t\t\t\t\t\t\t\t\tif (typeof movedCommand[k] === 'number') {\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tk === 'x' ||\n\t\t\t\t\t\t\t\t\t\t\tk === 'x1' ||\n\t\t\t\t\t\t\t\t\t\t\tk === 'x2'\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tmovedCommand[k] += gX - _x;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tk === 'y' ||\n\t\t\t\t\t\t\t\t\t\t\tk === 'y1' ||\n\t\t\t\t\t\t\t\t\t\t\tk === 'y2'\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tmovedCommand[k] += gY - _y;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn movedCommand;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst bandBoxes = band\n\t\t\t\t\t\t? computeBandBox(glyphPath.commands, band)\n\t\t\t\t\t\t: [];\n\t\t\t\t\tif (bandBoxes.length) {\n\t\t\t\t\t\tboxes.push(...bandBoxes);\n\t\t\t\t\t}\n\n\t\t\t\t\tfullPath.extend(glyphPath);\n\t\t\t\t}\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tpath: fullPath.toPathData(1),\n\t\t\t\tboxes\n\t\t\t};\n\t\t} finally {\n\t\t\tunpatch();\n\t\t}\n\t}\n}\n\nfunction getLangFromFontName(name: string): Locale | undefined {\n\tconst arr = name.split('_');\n\tconst lang = arr[arr.length - 1];\n\n\treturn lang === SUFFIX_WHEN_LANG_NOT_SET ? undefined : (lang as Locale);\n}\n","import { buildXMLString } from '../utils.js';\n\nexport default function svg({\n\twidth,\n\theight,\n\tcontent\n}: {\n\twidth: number;\n\theight: number;\n\tcontent: string;\n}) {\n\treturn buildXMLString(\n\t\t'svg',\n\t\t{\n\t\t\twidth,\n\t\t\theight,\n\t\t\tviewBox: `0 0 ${width} ${height}`,\n\t\t\txmlns: 'http://www.w3.org/2000/svg'\n\t\t},\n\t\tcontent\n\t);\n}\n","import type { ReactNode } from 'react';\nimport type { SatoriNode } from './layout.js';\n\nimport layout from './layout.js';\nimport FontLoader, { FontOptions } from './font.js';\nimport svg from './builder/svg.js';\nimport { getYoga, TYoga } from './yoga.js';\nimport { detectLanguageCode, LangCode, Locale } from './language.js';\nimport { preProcessNode } from './handler/preprocess.js';\nimport { cache, inflightRequests } from './handler/image.js';\nimport { segment } from './utils.js';\n\n// We don't need to initialize the opentype instances every time.\nconst fontCache = new WeakMap();\n\nexport type SatoriOptions = (\n\t| {\n\t\t\twidth: number;\n\t\t\theight: number;\n\t }\n\t| {\n\t\t\twidth: number;\n\t }\n\t| {\n\t\t\theight: number;\n\t }\n) & {\n\tfonts: FontOptions[];\n\tembedFont?: boolean;\n\tdebug?: boolean;\n\tgraphemeImages?: Record<string, string>;\n\tloadAdditionalAsset?: (\n\t\tlanguageCode: string,\n\t\tsegment: string\n\t) => Promise<string | Array<FontOptions>>;\n\tonNodeDetected?: (node: SatoriNode) => void;\n\tpointScaleFactor?: number;\n};\nexport type { SatoriNode };\n\nexport default async function satori(\n\telement: ReactNode,\n\toptions: SatoriOptions\n): Promise<string> {\n\tconst Yoga = await getYoga();\n\tif (!Yoga || !Yoga.Node) {\n\t\tthrow new Error(\n\t\t\t'Satori is not initialized: expect `yoga` to be loaded, got ' + Yoga\n\t\t);\n\t}\n\toptions.fonts = options.fonts || [];\n\n\tlet font: FontLoader;\n\tif (fontCache.has(options.fonts)) {\n\t\tfont = fontCache.get(options.fonts);\n\t} else {\n\t\tfontCache.set(options.fonts, (font = new FontLoader(options.fonts)));\n\t}\n\n\tconst definedWidth = 'width' in options ? options.width : undefined;\n\tconst definedHeight = 'height' in options ? options.height : undefined;\n\n\tconst root = getRootNode(Yoga, options.pointScaleFactor);\n\tif (definedWidth) root.setWidth(definedWidth);\n\tif (definedHeight) root.setHeight(definedHeight);\n\troot.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);\n\troot.setFlexWrap(Yoga.WRAP_WRAP);\n\troot.setAlignContent(Yoga.ALIGN_AUTO);\n\troot.setAlignItems(Yoga.ALIGN_FLEX_START);\n\troot.setJustifyContent(Yoga.JUSTIFY_FLEX_START);\n\troot.setOverflow(Yoga.OVERFLOW_HIDDEN);\n\n\tconst graphemeImages = { ...options.graphemeImages };\n\t// Some Chinese characters have different glyphs in Chinese and\n\t// Japanese, but their Unicode is the same. If the user needs to display\n\t// the Chinese and Japanese characters simultaneously correctly, the user\n\t// needs to download the Chinese and Japanese fonts, respectively.\n\t// Assuming that the user has downloaded the corresponding Japanese font,\n\t// to let the program realize that the font has not been downloaded in Chinese,\n\t// we need to prohibit Japanese as the fallback when executing `engine.has`.\n\t//\n\t// This causes a problem. Consider a scenario where we need to display Chinese\n\t// correctly under tags with `lang=\"ja\"` set. `engine.has` will repeatedly treat\n\t// the Chinese as missing font because we have removed the Chinese as a fallback.\n\t// To address this situation, we may need to add `processedWordsMissingFont`\n\tconst processedWordsMissingFonts = new Set();\n\n\tcache.clear();\n\tinflightRequests.clear();\n\tawait preProcessNode(element);\n\n\tconst handler = layout(element, {\n\t\tid: 'id',\n\t\tparentStyle: {},\n\t\tinheritedStyle: {\n\t\t\tfontSize: 16,\n\t\t\tfontWeight: 'normal',\n\t\t\tfontFamily: 'serif',\n\t\t\tfontStyle: 'normal',\n\t\t\tlineHeight: 'normal',\n\t\t\tcolor: 'black',\n\t\t\topacity: 1,\n\t\t\twhiteSpace: 'normal',\n\n\t\t\t// Special style properties:\n\t\t\t_viewportWidth: definedWidth,\n\t\t\t_viewportHeight: definedHeight\n\t\t},\n\t\tparent: root,\n\t\tfont,\n\t\tembedFont: options.embedFont,\n\t\tdebug: options.debug,\n\t\tgraphemeImages,\n\t\tcanLoadAdditionalAssets: !!options.loadAdditionalAsset,\n\t\tonNodeDetected: options.onNodeDetected\n\t});\n\n\tconst segmentsMissingFont = (await handler.next()).value as {\n\t\tword: string;\n\t\tlocale?: Locale;\n\t}[];\n\n\tif (options.loadAdditionalAsset) {\n\t\tif (segmentsMissingFont.length) {\n\t\t\tconst languageCodes = convertToLanguageCodes(segmentsMissingFont);\n\t\t\tconst fonts: FontOptions[] = [];\n\t\t\tconst images: Record<string, string> = {};\n\n\t\t\tawait Promise.all(\n\t\t\t\tObject.entries(languageCodes).flatMap(([code, segments]) =>\n\t\t\t\t\tsegments.map(_segment => {\n\t\t\t\t\t\tconst key = `${code}_${_segment}`;\n\t\t\t\t\t\tif (processedWordsMissingFonts.has(key)) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprocessedWordsMissingFonts.add(key);\n\n\t\t\t\t\t\treturn options\n\t\t\t\t\t\t\t.loadAdditionalAsset(code, _segment)\n\t\t\t\t\t\t\t.then((asset: any) => {\n\t\t\t\t\t\t\t\tif (typeof asset === 'string') {\n\t\t\t\t\t\t\t\t\timages[_segment] = asset;\n\t\t\t\t\t\t\t\t} else if (asset) {\n\t\t\t\t\t\t\t\t\tif (Array.isArray(asset)) {\n\t\t\t\t\t\t\t\t\t\tfonts.push(...asset);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tfonts.push(asset);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t);\n\n\t\t\t// Directly mutate the font provider and the grapheme map.\n\t\t\tfont.addFonts(fonts);\n\t\t\tObject.assign(graphemeImages, images);\n\t\t}\n\t}\n\n\tawait handler.next();\n\troot.calculateLayout(definedWidth, definedHeight, Yoga.DIRECTION_LTR);\n\n\tconst content = (await handler.next([0, 0])).value as string;\n\n\tconst computedWidth = root.getComputedWidth();\n\tconst computedHeight = root.getComputedHeight();\n\n\troot.freeRecursive();\n\n\treturn svg({ width: computedWidth, height: computedHeight, content });\n}\n\nfunction getRootNode(\n\tYoga: TYoga,\n\tpointScaleFactor?: SatoriOptions['pointScaleFactor']\n) {\n\tif (!pointScaleFactor) {\n\t\treturn Yoga.Node.create();\n\t} else {\n\t\tconst config = Yoga.Config.create();\n\t\tconfig.setPointScaleFactor(pointScaleFactor);\n\t\treturn Yoga.Node.createWithConfig(config);\n\t}\n}\n\nfunction convertToLanguageCodes(\n\tsegmentsMissingFont: { word: string; locale?: Locale }[]\n): Partial<Record<LangCode, string[]>> {\n\tconst languageCodes = {};\n\tlet wordsByCode = {};\n\n\tfor (const { word, locale } of segmentsMissingFont) {\n\t\tconst code = detectLanguageCode(word, locale).join('|');\n\t\twordsByCode[code] = wordsByCode[code] || '';\n\t\twordsByCode[code] += word;\n\t}\n\n\tObject.keys(wordsByCode).forEach((code: LangCode) => {\n\t\tlanguageCodes[code] = languageCodes[code] || [];\n\t\tif (code === 'emoji') {\n\t\t\tlanguageCodes[code].push(\n\t\t\t\t...unique(segment(wordsByCode[code], 'grapheme'))\n\t\t\t);\n\t\t} else {\n\t\t\tlanguageCodes[code][0] = languageCodes[code][0] || '';\n\t\t\tlanguageCodes[code][0] += unique(\n\t\t\t\tsegment(\n\t\t\t\t\twordsByCode[code],\n\t\t\t\t\t'grapheme',\n\t\t\t\t\tcode === 'unknown' ? undefined : code\n\t\t\t\t)\n\t\t\t).join('');\n\t\t}\n\t});\n\n\treturn languageCodes;\n}\n\nfunction unique<T>(arr: T[]): T[] {\n\treturn Array.from(new Set(arr));\n}\n"],"mappings":"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SA,EACV,EACA,WAAY,CACX,QAASA,GACT,UAAW,MACX,aAAc,MACd,WAAY,GACZ,YAAa,EACd,EACA,OAAQ,CACP,QAASA,GACT,UAAW,QACZ,EACA,GAAI,CACH,QAASA,GACT,UAAW,QACX,aAAc,QACd,WAAY,OACZ,YAAa,OACb,YAAa,EAEb,YAAa,OACd,EAEA,GAAI,CACH,QAASA,GACT,SAAU,MACV,UAAW,SACX,aAAc,SACd,WAAY,EACZ,YAAa,EACb,WAAY,MACb,EACA,GAAI,CACH,QAASA,GACT,SAAU,QACV,UAAW,SACX,aAAc,SACd,WAAY,EACZ,YAAa,EACb,WAAY,MACb,EACA,GAAI,CACH,QAASA,GACT,SAAU,SACV,UAAW,MACX,aAAc,MACd,WAAY,EACZ,YAAa,EACb,WAAY,MACb,EACA,GAAI,CACH,QAASA,GACT,UAAW,SACX,aAAc,SACd,WAAY,EACZ,YAAa,EACb,WAAY,MACb,EACA,GAAI,CACH,QAASA,GACT,SAAU,SACV,UAAW,SACX,aAAc,SACd,WAAY,EACZ,YAAa,EACb,WAAY,MACb,EACA,GAAI,CACH,QAASA,GACT,SAAU,SACV,UAAW,SACX,aAAc,SACd,WAAY,EACZ,YAAa,EACb,WAAY,MACb,EAKA,EAAG,CACF,eAAgB,WACjB,EACA,OAAQ,CACP,WAAY,MACb,EACA,EAAG,CACF,WAAY,MACb,EACA,EAAG,CACF,UAAW,QACZ,EACA,GAAI,CACH,UAAW,QACZ,EACA,KAAM,CACL,WAAY,WACb,EACA,IAAK,CACJ,WAAY,WACb,EACA,IAAK,CACJ,QAASA,GACT,WAAY,YACZ,WAAY,MACZ,UAAW,MACX,aAAc,KACf,EACA,KAAM,CACL,gBAAiB,SACjB,MAAO,OACR,EACA,IAAK,CACJ,SAAU,QACX,EACA,MAAO,CACN,SAAU,SACX,EACA,EAAG,CACF,eAAgB,cACjB,CACD,EC1IA,IAAME,GAAO,IAAI,IAAI,CACpB,QACA,OACA,aACA,WACA,YACA,aACA,gBACA,aACA,YACA,aACA,gBACA,mBACA,kBACA,mBACA,wBACA,wBACA,qBACA,sBACA,sBA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","names":["yoga_wasm_esm_default","loadYoga","h","aa","ca","a","b","da","q","_scriptDir","ea","v","w","noExitRuntime","x","fa","ha","z","c","d","e","f","g","ia","ja","A","C","ka","D","la","ma","na","oa","pa","qa","ra","sa","F","ta","G","ua","H","va","wa","xa","ya","za","Aa","Ba","J","Ca","Da","K","L","M","Ea","Fa","Ga","N","O","Ha","P","Q","Ia","R","Ja","Ka","S","La","Ma","Na","Oa","Pa","Qa","Ra","Sa","Ta","Ua","T","Va","Wa","Xa","U","Ya","V","k","m","W","Za","$a","X","ab","bb","cb","db","eb","fb","gb","hb","Y","ib","jb","Z","mb","nb","ob","l","n","p","r","u","t","y","B","pb","qb","rb","sb","tb","ub","vb","wb","xb","yb","zb","Ab","Bb","Cb","Db","Eb","Fb","Gb","Hb","Jb","ba","I","kb","lb","Ib","Kb","Lb","Mb","init_yoga_wasm_esm","__esmMin","Align","BoxSizing","Dimension","Direction","Display","Edge","Errata","ExperimentalFeature","FlexDirection","Gutter","Justify","LogLevel","MeasureMode","NodeType","Overflow","PositionType","Unit","Wrap","constants","YGEnums_default","init_YGEnums","__esmMin","ALIGN_AUTO","Auto","ALIGN_FLEX_START","FlexStart","ALIGN_CENTER","Center","ALIGN_FLEX_END","FlexEnd","ALIGN_STRETCH","Stretch","ALIGN_BASELINE","Baseline","ALIGN_SPACE_BETWEEN","SpaceBetween","ALIGN_SPACE_AROUND","SpaceAround","ALIGN_SPACE_EVENLY","SpaceEvenly","BOX_SIZING_BORDER_BOX","BorderBox","BOX_SIZING_CONTENT_BOX","ContentBox","DIMENSION_WIDTH","Width","DIMENSION_HEIGHT","Height","DIRECTION_INHERIT","Inherit","DIRECTION_LTR","LTR","DIRECTION_RTL","RTL","DISPLAY_FLEX","Flex","DISPLAY_NONE","None","DISPLAY_CONTENTS","Contents","EDGE_LEFT","Left","EDGE_TOP","Top","EDGE_RIGHT","Right","EDGE_BOTTOM","Bottom","EDGE_START","Start","EDGE_END","End","EDGE_HORIZONTAL","Horizontal","EDGE_VERTICAL","Vertical","EDGE_ALL","All","ERRATA_NONE","ERRATA_STRETCH_FLEX_BASIS","StretchFlexBasis","ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING","AbsolutePositionWithoutInsetsExcludesPadding","ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE","AbsolutePercentAgainstInnerSize","ERRATA_ALL","ERRATA_CLASSIC","Classic","EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS","WebFlexBasis","FLEX_DIRECTION_COLUMN","Column","FLEX_DIRECTION_COLUMN_REVERSE","ColumnReverse","FLEX_DIRECTION_ROW","Row","FLEX_DIRECTION_ROW_REVERSE","RowReverse","GUTTER_COLUMN","GUTTER_ROW","GUTTER_ALL","JUSTIFY_FLEX_START","JUSTIFY_CENTER","JUSTIFY_FLEX_END","JUSTIFY_SPACE_BETWEEN","JUSTIFY_SPACE_AROUND","JUSTIFY_SPACE_EVENLY","LOG_LEVEL_ERROR","Error","LOG_LEVEL_WARN","Warn","LOG_LEVEL_INFO","Info","LOG_LEVEL_DEBUG","Debug","LOG_LEVEL_VERBOSE","Verbose","LOG_LEVEL_FATAL","Fatal","MEASURE_MODE_UNDEFINED","Undefined","MEASURE_MODE_EXACTLY","Exactly","MEASURE_MODE_AT_MOST","AtMost","NODE_TYPE_DEFAULT","Default","NODE_TYPE_TEXT","Text","OVERFLOW_VISIBLE","Visible","OVERFLOW_HIDDEN","Hidden","OVERFLOW_SCROLL","Scroll","POSITION_TYPE_STATIC","Static","POSITION_TYPE_RELATIVE","Relative","POSITION_TYPE_ABSOLUTE","Absolute","UNIT_UNDEFINED","UNIT_POINT","Point","UNIT_PERCENT","Percent","UNIT_AUTO","WRAP_NO_WRAP","NoWrap","WRAP_WRAP","WRAP_WRAP_REVERSE","WrapReverse","wrapAssembly","lib","patch","prototype","name","fn","original","_len","arguments","length","args","Array","_key","call","fnName","methods","Unit","Point","Node","Percent","Auto","_len2","_key2","value","pop","unit","asNumber","undefined","valueOf","endsWith","parseFloat","Number","isNaN","Error","wrapMeasureFunction","measureFunction","MeasureCallback","implement","measure","width","height","NaN","measureFunc","unsetMeasureFunc","wrapDirtiedFunc","dirtiedFunction","DirtiedCallback","dirtied","dirtiedFunc","Config","destroy","_","config","createWithConfig","createDefault","t","T","getChildCount","getChild","freeRecursive","free","direction","Direction","LTR","YGEnums","init_wrapAssembly","__esmMin","init_YGEnums","loadYoga","wasmOptions","wrapAssembly","loadYogaImpl","init_load","__esmMin","init_yoga_wasm_esm","init_wrapAssembly","init_YGEnums","yoga_external_exports","__export","getYoga","init","loadWasm","input","imports","source","e","bytes","instantiated","loadYoga","successCallback","instance","rejectYoga","resolveYoga","yogaPromise","init_yoga_external","__esmMin","init_load","resolve","reject","LineBreaker","e","t","r","u","k","g","a","z","v","c","L","w","h","$","y","m","j","b","q","f","p","l","d","s","x","o","O","F","U","E","D","i","isReactElement","node","type","isClass","f","isForwardRefComponent","isReactComponent","hasDangerouslySetInnerHTMLProp","props","normalizeChildren","children","flattend","res","i","value","lengthToNumber","length","baseFontSize","baseLength","inheritedStyle","percentage","parsed","U","calcDegree","deg","multiply","m1","m2","v","field","map","fallback","errorIfNotAllowedForProperty","_v","wordSegmenter","graphemeSegmenter","wordSeparators","point","segmentCache","MAX_SEGMENT_CACHE_SIZE","segment","content","granularity","locale","cacheKey","result","seg","segmented","output","s","previousWord","nextWord","firstKey","buildXMLString","attrs","attrString","k","createLRU","max","store","get","key","set","clear","parseViewBox","viewBox","isString","x","isNumber","isUndefined","asPointPercentageLength","propertyName","percentageValue","asPointAutoPercentageLength","splitByBreakOpportunities","content","wordBreak","segment","breaker","LineBreaker","last","bk","words","requiredBreaks","word","midline","s","_","letter","splitEffects","input","separator","result","l","parenCount","i","init","input","mod","getYoga","AVIF","WEBP","APNG","PNG","JPEG","GIF","SVG","parseJPEG","buf","view","offset","len","next","parseGIF","parsePNG","v","cache","createLRU","inflightRequests","ALLOWED_IMAGE_TYPES","SVG_ATTRS_REGEX","VIEWBOX_REGEX","WIDTH_REGEX","HEIGHT_REGEX","arrayBufferToBase64","buffer","bytes","CHUNK_SIZE","binary","chunk","base64ToArrayBuffer","base64","binaryString","parseSvgImageSize","src","data","svgMatch","svgTag","viewBoxMatch","widthMatch","heightMatch","viewBox","parseViewBox","size","ratio","arrayBufferToDataUri","imageSize","imageType","detectContentType","resolveImageData","newSrc","decodedURI","encodingType","dataString","utf8Src","base64Src","cached","url","promise","res","type","e","result","err","b","i","detectAPNG","dv","length","off","isAPNG","chars","ATTRIBUTE_MAPPING","SVGSymbols","translateSVGNodeToSVGString","node","inheritedColor","n","type","children","style","restProps","currentColor","attrs","k","_v","cache","styles","midline","preProcessNode","set","walk","_node","isReactElement","v","imageSrc","c","s","resolveImageData","SVGNodeToImage","viewBox","viewbox","width","height","className","viewBoxSize","parseViewBox","ratio","DEFAULT_DISPLAY","presets_default","list","inheritable","style","inheritedStyle","prop","getPropertyName","getStylesForProperty","parseElementStyle","parseBoxShadow","cssColorParse","valueParser","parseUnit","word","baseFontSize","parsed","U","handleWord","unitIsHorizontal","parsedUnit","parseTransformOrigin","value","words","valueParser","node","getPropertyName","getMaskProperty","style","name","key","getPropertyName","parseMask","maskImage","common","splitEffects","v","m","valueParser","extractCustomProperties","style","variables","remainingStyle","prop","mergeVariables","inherited","current","resolveVariables","value","visitedVars","parsed","hasChanges","node","args","extractVarArgs","varName","fallback","replaceNode","variableValue","newVisitedVars","resolvedValue","resolvedFallback","varNameNode","commaIndex","child","fallbackNodes","optOutPx","keepNumber","handleFallbackColor","prop","parsed","rawInput","currentColor","purify","name","value","num","handleSpecialCase","_v","horizontal","vertical","vh","getStylesForProperty","vv","k","resolved","purified","v","full","p","parseBoxShadow","symbols","replaced","_","symbol","t","result","shadows","splitEffects","shadow","styles","values","normalized","getErrorHint","RGB_SLASH","normalizeColor","r","g","b","a","expand","style","inheritedStyle","serializedStyle","inheritedVariables","currentVariables","processableStyle","variables","remainingStyle","extractCustomProperties","mergedVariables","mergeVariables","varName","resolvedColor","resolveVariables","getCurrentColor","getPropertyName","resolvedValue","preprocess","resolvedStyle","err","backgrounds","parseElementStyle","parseMask","baseFontSize","calcBaseFontSize","parseTransformOrigin","lengthToNumber","len","color","transforms","transform","type","textShadowRadius","textShadowOffset","height","width","size","inheritedSize","U","refineHSL","cssColorParse","h","s","l","inheritedColor","convertCurrentColorToActualValue","isString","compute","node","type","inheritedStyle","definedStyle","props","Yoga","getYoga","style","expand","presets_default","resolvedSrc","imageWidth","imageHeight","resolveImageData","r","extraHorizontal","extraVertical","contentBoxWidth","contentBoxHeight","isAbsoluteContentSize","viewBox","viewBoxSize","parseViewBox","ratio","width","height","lengthToNumber","v","asPointAutoPercentageLength","asPointPercentageLength","inheritable","escapeHTML","baseMatrix","resolveTransforms","transforms","width","height","matrix","transform","type","v","len","transformMatrix","rad","s","multiply","left","top","isInheritingTransform","transformOrigin","result","xOrigin","yOrigin","x","y","container","left","top","width","height","isInheritingTransform","style","matrix","opacity","transform","buildText","id","content","filter","image","clipPathId","debug","shape","decorationShape","extra","buildXMLString","shapeProps","escapeHTML","shiftPath","path","dx","dy","_","command","x","y","SCALE","buildDropShadow","id","width","height","style","transparentText","shadowCount","effects","merge","left","right","top","bottom","i","grow","resultId","buildXMLString","boxShadow","shape","opacity","shadow","innerShadow","s","shadowStyle","sid","maskId","shapeWithSpread","finalShape","buildSkipInkSegments","start","end","glyphBoxes","y","strokeWidth","baseline","halfStroke","bleed","skipRanges","box","from","to","last","segments","cursor","buildDecoration","width","left","top","ascender","clipPathId","matrix","style","textDecorationColor","textDecorationStyle","textDecorationLine","textDecorationSkipInk","fontSize","color","height","dasharray","applySkipInk","extraLine","x1","x2","buildXMLString","stringFromCode","code","Space","Tab","HorizontalEllipsis","genMeasurer","engine","isImage","style","fontSize","letterSpacing","cache","measureGrapheme","grapheme","width","measureGraphemeArray","graphemes","measureText","text","segment","preprocess","content","style","locale","textTransform","whiteSpace","wordBreak","processTextTransform","processedContent","shouldCollapseTabsAndSpaces","allowSoftWrap","processWhiteSpace","words","requiredBreaks","allowBreakWord","processWordBreak","lineLimit","blockEllipsis","processTextOverflow","segment","word","grapheme","index","textOverflow","lineClamp","WebkitLineClamp","WebkitBoxOrient","overflow","display","HorizontalEllipsis","parseLineClamp","isNumber","splitByBreakOpportunities","shouldKeepLinebreak","Space","input","regex1","regex2","match1","match2","number","text","cssColorParse","skippedWordWhenFindingMissingFont","Tab","shouldSkipWhenFindingMissingFont","word","isFullyTransparent","color","parsed","isOpaqueWhite","r","g","b","a","buildTextNodes","content","context","Yoga","getYoga","parentStyle","inheritedStyle","parent","font","id","isInheritingTransform","debug","embedFont","graphemeImages","locale","canLoadAdditionalAssets","textAlign","textIndent","lineHeight","textWrap","fontSize","cssFilter","tabSize","letterSpacing","_inheritedBackgroundClipTextPath","_inheritedBackgroundClipTextHasBackground","flexShrink","words","requiredBreaks","allowSoftWrap","allowBreakWord","processedContent","shouldCollapseTabsAndSpaces","lineLimit","blockEllipsis","preprocess","textContainer","createTextContainerNode","isUndefined","engine","wordsMissingFont","segment","isImage","s","measureGrapheme","measureGraphemeArray","measureText","genMeasurer","tabWidth","isString","lengthToNumber","Space","calc","text","currentWidth","index","tabCount","detectTabs","originWidth","textBeforeTab","textAfterTab","textWidthBeforeTab","offsetBeforeTab","afterTrimEndWidth","lineWidths","baselines","lineSegmentNumber","texts","wordPositionInLayout","flow","width","lines","maxWidth","lineIndex","height","currentLineHeight","currentBaselineOffset","i","prevLineEndingSpacesWidth","forceBreak","w","endingSpacesWidth","_word","lineEndingSpacesWidth","allowedToJustify","willWrap","chars","glyphHeight","x","_texts","j","_text","_width","_isImage","measuredTextSize","containerWidth","l","m","mHeight","adjustedWidth","result","y","backgroundClipDef","clipPathId","overflowMaskId","containerLeft","containerTop","containerHeight","textIndentNumber","parentContainerInnerWidth","left","top","matrix","opacity","container","filter","textShadowColor","textShadowOffset","textShadowRadius","buildDropShadow","buildXMLString","decorationShape","mergedPath","extra","skippedLine","decorationLines","decorationGlyphs","wordBuffer","bufferedOffset","layout","nextLayout","path","isLastDisplayedBeforeEllipsis","image","topOffset","leftOffset","line","shouldCollectDecorationBoxes","extendedWidth","remainingWidth","segments","gutter","baselineOfLine","baselineOfWord","heightOfWord","baselineDelta","buildUnderlineBand","offset","calcEllipsis","baseWidth","subset","resolvedWidth","char","ellipsisWidth","_blockEllipsis","HorizontalEllipsis","spaceWidth","isNotLastLine","nextLineText","wordSeparators","finalizedSegment","finalizedLeftOffset","finalizedWidth","band","svg","t","shape","buildText","deco","glyphBoxes","buildDecoration","p","v","parseLinearGradient","cssColorParse","normalizeStops","totalLength","colorStops","inheritedStyle","repeating","from","stops","lastColorStop","totalPercentage","stop","color","offset","lengthToNumber","lastStop","previousStop","nextStop","i","buildLinearGradient","id","width","height","repeatX","repeatY","image","dimensions","offsets","inheritableStyle","from","parsed","parseLinearGradient","imageWidth","imageHeight","repeating","points","length","xys","resolveXYFromDirection","l","p","calcNormalPoint","calcDegree","calcPercentage","stops","normalizeStops","resolveRepeatingCycle","gradientId","patternId","defs","buildXMLString","stop","last","offset","dir","x1","y1","x2","y2","v","w","h","r","tmp","a","b","dfs","angle","p1","lengthToNumber","p2","sx","sy","ex","ey","parseRadialGradient","buildRadialGradient","id","width","height","repeatX","repeatY","image","dimensions","offsets","inheritableStyle","from","_a","shape","colorStops","position","size","repeating","parseRadialGradient","xDelta","yDelta","cx","cy","pos","calcRadialGradient","colorStopTotalLength","calcColorStopTotalLength","stops","normalizeStops","gradientId","patternId","maskId","spread","calcRadius","props","calcRadialGradientProps","defs","buildXMLString","stop","lastStop","lengthToNumber","baseFontSize","style","calcPos","key","dir","r","rx","ratio","last","radius","endingShape","centerAxis","length","fx","fy","isSizeAllLength","v","patchSpread","f2r","mfx","mfy","mrx","mry","mr","ry","s","cssColorParse","toAbsoluteValue","v","base","calculateKeywordSize","keyword","containerWidth","containerHeight","imageWidth","imageHeight","scaleX","scaleY","scale","parts","widthPart","heightPart","finalWidth","finalHeight","parsedHeight","parsedWidth","positionKeywordMap","parsePositionValues","str","part","computeBgPositionOffset","rawValue","containerSize","imageSize","percentage","parsed","U","parseLengthPairs","x","y","defaultX","defaultY","value","dim","index","backgroundImage","id","width","height","left","top","image","size","position","repeat","inheritableStyle","from","repeatX","repeatY","isKeywordSize","isGradient","dimensions","normalizedPos","offsets","buildLinearGradient","buildRadialGradient","src","resolveImageData","resolvedWidth","resolvedHeight","calcWidth","calcHeight","dimensionsWithoutFallback","rawPos","imageOffsetX","imageOffsetY","buildXMLString","colorObj","r","g","b","a","color","svgArcCenterOffset","rx","ry","resolveSize","a","b","limit","makeSmaller","arr","resolveRadius","v","width","height","fontSize","style","sides","s","singleValue","lengthToNumber","radiusZeroOrNull","_radius","getBorderRadiusClipPath","id","borderRadiusPath","borderType","left","top","rectClipId","buildXMLString","radius","partialSides","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","singleAbsValueTopLeftCorner","singleAbsValueTopRightCorner","singleAbsValueBottomLeftCorner","singleAbsValueBottomRightCorner","p","T","R","B","L","getArc","i","c0","start","result","arc0","l","len","end","arc1","compareBorderDirections","a","b","style","getBorderClipPath","id","currentClipPathId","borderPath","borderType","left","top","width","height","rectClipId","buildXMLString","border","props","asContentMask","maskBorderOnly","directions","direction","fullBorder","start","partialSides","currentStyle","_i","i","ni","d","nd","w","radius","contentMask","id","left","top","width","height","matrix","borderOnly","style","offsetLeft","offsetTop","offsetRight","offsetBottom","contentArea","buildXMLString","border","getStylesForProperty","regexMap","createShapeParser","width","height","style","inheritedStyle","parseCircle","str","res","value","radius","pos","v","y","resolvePosition","lengthToNumber","parseEllipse","rx","ry","x","parsePath","fillRule","d","resolveFillRule","parsePolygon","points","k","i","parseInset","inset","radiusMap","r","s","offsets","w","h","position","xDelta","yDelta","genClipPathId","id","genClipPath","buildClipPath","v","style","inheritedStyle","parser","createShapeParser","clipPath","tmp","k","type","rest","buildXMLString","overflow","left","top","width","height","path","matrix","id","currentClipPath","src","style","inheritableStyle","overflowClipPath","clipPath","buildClipPath","_id","genClipPathId","buildXMLString","contentMask","genMaskImageId","id","buildMaskImage","v","style","inheritedStyle","left","top","width","height","maskImage","length","miId","mask","i","m","_id","def","backgroundImage","buildXMLString","parseObjectPosition","position","containerWidth","containerHeight","parts","keywordToPercent","keyword","axis","xValue","yValue","part","first","second","parseValue","value","containerSize","parsed","U","rect","id","left","top","width","height","isInheritingTransform","src","debug","style","inheritableStyle","isImage","type","matrix","defs","fills","opacity","extra","transform","backgroundShapes","backgrounds","index","background","image","backgroundImage","miId","mi","buildMaskImage","maskId","path","radius","clipPathId","buildXMLString","backgroundClip","cssFilter","mixBlendMode","inlineStyle","v","currentClipPath","genClipPath","clip","overflow","shape","fill","borderClip","getBorderClipPath","imageBorderRadius","offsetLeft","offsetTop","offsetRight","offsetBottom","containerInnerWidth","containerInnerHeight","objPosX","objPosY","naturalWidth","naturalHeight","preserveAspectRatio","imageWidth","imageHeight","imageX","imageY","scaleX","scaleY","scale","minScale","getBorderRadiusClipPath","rectClipId","border","shadow","boxShadow","parseFilterValue","value","primitives","lastResult","hasBlur","blurMatch","sigma","pad","buildXMLString","result","saturateMatch","val","brightnessMatch","contrastMatch","intercept","grayscaleMatch","buildBackdropFilter","options","bgGroupId","filterValue","height","id","left","maskId","style","top","width","filterId","clipId","filterDef","borderRadiusPath","radius","clipContent","clipDef","defs","useElement","gAttrs","r","e","emoji_regex_xs_default","emojiRegex","emoji_regex_xs_default","specialCode","code","locales","isValidLocale","x","detectLanguageCode","segment","locale","c","languages","lang","index","normalizeLocale","l","layout","element","context","_a","Yoga","getYoga","id","inheritedStyle","parent","font","debug","locale","embedFont","graphemeImages","canLoadAdditionalAssets","isReactElement","isReactComponent","iter","buildTextNodes","isClass","render","isForwardRefComponent","offset","$type","props","type","hasDangerouslySetInnerHTMLProp","style","children","_newLocale","newLocale","normalizeLocale","node","computedStyle","newInheritableStyle","compute","isInheritingTransform","mutateRefValue","normalizedChildren","normalizeChildren","iterators","backdropInfoByIndex","i","segmentsMissingFont","child","currentIndex","info","x","y","left","top","width","height","childrenRenderResult","baseRenderResult","depsRenderResult","childrenNode","restProps","src","rect","currentColor","SVGNodeToImage","display","j","childLayout","childLeft","childTop","childWidth","childHeight","bgGroupId","currentContent","childId","maskId","buildBackdropFilter","buildXMLString","opentype","SUFFIX_WHEN_LANG_NOT_SET","flattenPath","commands","segments","start","current","addCurve","points","steps","prev","i","t","next","evaluateBezier","cmd","working","computeBandBox","band","strokeWidth","bandMin","bandMax","bandHeight","ySamples","yStep","yStart","columnHits","y","intersections","seg","x1","y1","x2","y2","yMin","yMax","x","a","b","j","from","to","end","col","columns","inkRanges","rangeStart","boxes","bleed","minX","maxX","left","right","compareFont","weight","style","matchedWeight","matchedStyle","nextWeight","nextStyle","cachedParsedFont","FontLoader","fontOptions","name","fonts","matchedFont","i","weight1","style1","weight2","style2","fontOption","data","lang","isValidLocale","locales","_lang","SUFFIX_WHEN_LANG_NOT_SET","font","opentype","originalCharToGlyphIndex","char","index","_name","fontSize","lineHeight","fontFamily","fontWeight","fontStyle","locale","face","getNormal","getUnknown","keys","specifiedLangFonts","nonSpecifiedLangFonts","additionalFonts","getLangFromFontName","cachedFontResolver","resolveFont","word","fallback","_fonts","code","_font","ascender","resolvedFont","useOS2Table","_a","_b","descender","height","_lineGap","resolve","s","asc","desc","contentHeight","band","brokenChars","originalStringToGlyphs","args","glyphs","anotherFont","glyph","scale","p","command","scaledCommand","k","g","content","letterSpacing","unpatch","top","left","fullPath","boxes","options","cachedPath","gX","gY","gFontSize","glyphPath","_x","_y","_glyphPath","movedCommand","bandBoxes","computeBandBox","arr","svg","width","height","content","buildXMLString","fontCache","satori","element","options","Yoga","getYoga","font","FontLoader","definedWidth","definedHeight","root","getRootNode","graphemeImages","processedWordsMissingFonts","cache","inflightRequests","preProcessNode","handler","layout","segmentsMissingFont","languageCodes","convertToLanguageCodes","fonts","images","code","segments","_segment","key","asset","content","computedWidth","computedHeight","svg","pointScaleFactor","config","wordsByCode","word","locale","detectLanguageCode","unique","segment","arr"]}
1
+ {"version":3,"sources":["../src/vendor/yoga-wasm-esm.js","../node_modules/yoga-layout/src/generated/YGEnums.ts","../node_modules/yoga-layout/src/wrapAssembly.ts","../node_modules/yoga-layout/src/load.ts","../src/yoga.external.ts","../src/utils.ts","../src/vendor/parse-css-dimension/index.js","../src/yoga.ts","../src/handler/image.ts","../src/handler/preprocess.ts","../src/handler/presets.ts","../src/handler/inheritable.ts","../src/handler/expand.ts","../src/transform-origin.ts","../src/parser/mask.ts","../src/handler/variables.ts","../src/handler/compute.ts","../src/builder/text.ts","../src/builder/transform.ts","../src/builder/shadow.ts","../src/builder/text-decoration.ts","../src/text/characters.ts","../src/text/measurer.ts","../src/text/processor.ts","../src/text/index.ts","../src/builder/gradient/linear.ts","../src/builder/gradient/utils.ts","../src/builder/gradient/radial.ts","../src/builder/background-image.ts","../src/builder/border-radius.ts","../src/builder/border.ts","../src/builder/content-mask.ts","../src/parser/shape.ts","../src/builder/clip-path.ts","../src/builder/overflow.ts","../src/builder/mask-image.ts","../src/builder/rect.ts","../src/builder/backdrop-filter.ts","../node_modules/emoji-regex-xs/index.mjs","../src/language.ts","../src/layout.ts","../src/font.ts","../src/builder/svg.ts","../src/satori.ts"],"sourcesContent":["let _scriptDir = ''\n\nexport default function (loadYoga) {\nloadYoga = loadYoga || {};\n\nvar h;h||(h=typeof loadYoga !== 'undefined' ? loadYoga : {});var aa,ca;h.ready=new Promise(function(a,b){aa=a;ca=b});var da=Object.assign({},h),q=\"\";\"undefined\"!=typeof document&&document.currentScript&&(q=document.currentScript.src);_scriptDir&&(q=_scriptDir);0!==q.indexOf(\"blob:\")?q=q.substr(0,q.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):q=\"\";var ea=h.print||console.log.bind(console),v=h.printErr||console.warn.bind(console);Object.assign(h,da);da=null;var w;h.wasmBinary&&(w=h.wasmBinary);\nvar noExitRuntime=h.noExitRuntime||!0;\"object\"!=typeof WebAssembly&&x(\"no native wasm support detected\");var fa,ha=!1;function z(a,b,c){c=b+c;for(var d=\"\";!(b>=c);){var e=a[b++];if(!e)break;if(e&128){var f=a[b++]&63;if(192==(e&224))d+=String.fromCharCode((e&31)<<6|f);else{var g=a[b++]&63;e=224==(e&240)?(e&15)<<12|f<<6|g:(e&7)<<18|f<<12|g<<6|a[b++]&63;65536>e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}\nvar ia,ja,A,C,ka,D,E,la,ma;function na(){var a=fa.buffer;ia=a;h.HEAP8=ja=new Int8Array(a);h.HEAP16=C=new Int16Array(a);h.HEAP32=D=new Int32Array(a);h.HEAPU8=A=new Uint8Array(a);h.HEAPU16=ka=new Uint16Array(a);h.HEAPU32=E=new Uint32Array(a);h.HEAPF32=la=new Float32Array(a);h.HEAPF64=ma=new Float64Array(a)}var oa,pa=[],qa=[],ra=[];function sa(){var a=h.preRun.shift();pa.unshift(a)}var F=0,ta=null,G=null;\nfunction x(a){if(h.onAbort)h.onAbort(a);a=\"Aborted(\"+a+\")\";v(a);ha=!0;a=new WebAssembly.RuntimeError(a+\". Build with -sASSERTIONS for more info.\");ca(a);throw a;}function ua(a){return a.startsWith(\"data:application/octet-stream;base64,\")}var H='';if(!ua(H)){var va=H;H=h.locateFile?h.locateFile(va,q):q+va}\nfunction wa(){var a=H;try{if(a==H&&w)return new Uint8Array(w);if(ua(a))try{var b=xa(a.slice(37)),c=new Uint8Array(b.length);for(a=0;a<b.length;++a)c[a]=b.charCodeAt(a);var d=c}catch(f){throw Error(\"Converting base64 string to bytes failed.\");}else d=void 0;var e=d;if(e)return e;throw\"both async and sync fetching of the wasm failed\";}catch(f){x(f)}}\nfunction ya(){return w||\"function\"!=typeof fetch?Promise.resolve().then(function(){return wa()}):fetch(H,{credentials:\"same-origin\"}).then(function(a){if(!a.ok)throw\"failed to load wasm binary file at '\"+H+\"'\";return a.arrayBuffer()}).catch(function(){return wa()})}function za(a){for(;0<a.length;)a.shift()(h)}function Aa(a){if(void 0===a)return\"_unknown\";a=a.replace(/[^a-zA-Z0-9_]/g,\"$\");var b=a.charCodeAt(0);return 48<=b&&57>=b?\"_\"+a:a}\nfunction Ba(a,b){a=Aa(a);return function(){return b.apply(this,arguments)}}var J=[{},{value:void 0},{value:null},{value:!0},{value:!1}],Ca=[];function Da(a){var b=Error,c=Ba(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+\"\\n\"+d.replace(/^Error(:[^\\n]*)?\\n/,\"\"))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+\": \"+this.message};return c}var K=void 0;\nfunction L(a){throw new K(a);}var M=a=>{a||L(\"Cannot use deleted val. handle = \"+a);return J[a].value},Ea=a=>{switch(a){case void 0:return 1;case null:return 2;case !0:return 3;case !1:return 4;default:var b=Ca.length?Ca.pop():J.length;J[b]={ga:1,value:a};return b}},Fa=void 0,Ga=void 0;function N(a){for(var b=\"\";A[a];)b+=Ga[A[a++]];return b}var O=[];function Ha(){for(;O.length;){var a=O.pop();a.M.$=!1;a[\"delete\"]()}}var P=void 0,Q={};\nfunction Ia(a,b){for(void 0===b&&L(\"ptr should not be undefined\");a.R;)b=a.ba(b),a=a.R;return b}var R={};function Ja(a){a=Ka(a);var b=N(a);S(a);return b}function La(a,b){var c=R[a];void 0===c&&L(b+\" has unknown type \"+Ja(a));return c}function Ma(){}var Na=!1;function Oa(a){--a.count.value;0===a.count.value&&(a.T?a.U.W(a.T):a.P.N.W(a.O))}function Pa(a,b,c){if(b===c)return a;if(void 0===c.R)return null;a=Pa(a,b,c.R);return null===a?null:c.na(a)}var Qa={};function Ra(a,b){b=Ia(a,b);return Q[b]}\nvar Sa=void 0;function Ta(a){throw new Sa(a);}function Ua(a,b){b.P&&b.O||Ta(\"makeClassHandle requires ptr and ptrType\");!!b.U!==!!b.T&&Ta(\"Both smartPtrType and smartPtr must be specified\");b.count={value:1};return T(Object.create(a,{M:{value:b}}))}function T(a){if(\"undefined\"===typeof FinalizationRegistry)return T=b=>b,a;Na=new FinalizationRegistry(b=>{Oa(b.M)});T=b=>{var c=b.M;c.T&&Na.register(b,{M:c},b);return b};Ma=b=>{Na.unregister(b)};return T(a)}var Va={};\nfunction Wa(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function Xa(a){return this.fromWireType(D[a>>2])}var U={},Ya={};function V(a,b,c){function d(k){k=c(k);k.length!==a.length&&Ta(\"Mismatched type converter count\");for(var m=0;m<a.length;++m)W(a[m],k[m])}a.forEach(function(k){Ya[k]=b});var e=Array(b.length),f=[],g=0;b.forEach((k,m)=>{R.hasOwnProperty(k)?e[m]=R[k]:(f.push(k),U.hasOwnProperty(k)||(U[k]=[]),U[k].push(()=>{e[m]=R[k];++g;g===f.length&&d(e)}))});0===f.length&&d(e)}\nfunction Za(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError(\"Unknown type size: \"+a);}}\nfunction W(a,b,c={}){if(!(\"argPackAdvance\"in b))throw new TypeError(\"registerType registeredInstance requires argPackAdvance\");var d=b.name;a||L('type \"'+d+'\" must have a positive integer typeid pointer');if(R.hasOwnProperty(a)){if(c.ua)return;L(\"Cannot register type '\"+d+\"' twice\")}R[a]=b;delete Ya[a];U.hasOwnProperty(a)&&(b=U[a],delete U[a],b.forEach(e=>e()))}function $a(a){L(a.M.P.N.name+\" instance already deleted\")}function X(){}\nfunction ab(a,b,c){if(void 0===a[b].S){var d=a[b];a[b]=function(){a[b].S.hasOwnProperty(arguments.length)||L(\"Function '\"+c+\"' called with an invalid number of arguments (\"+arguments.length+\") - expects one of (\"+a[b].S+\")!\");return a[b].S[arguments.length].apply(this,arguments)};a[b].S=[];a[b].S[d.Z]=d}}\nfunction bb(a,b){h.hasOwnProperty(a)?(L(\"Cannot register public name '\"+a+\"' twice\"),ab(h,a,a),h.hasOwnProperty(void 0)&&L(\"Cannot register multiple overloads of a function with the same number of arguments (undefined)!\"),h[a].S[void 0]=b):h[a]=b}function cb(a,b,c,d,e,f,g,k){this.name=a;this.constructor=b;this.X=c;this.W=d;this.R=e;this.pa=f;this.ba=g;this.na=k;this.ja=[]}\nfunction db(a,b,c){for(;b!==c;)b.ba||L(\"Expected null or instance of \"+c.name+\", got an instance of \"+b.name),a=b.ba(a),b=b.R;return a}function eb(a,b){if(null===b)return this.ea&&L(\"null is not a valid \"+this.name),0;b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);return db(b.M.O,b.M.P.N,this.N)}\nfunction gb(a,b){if(null===b){this.ea&&L(\"null is not a valid \"+this.name);if(this.da){var c=this.fa();null!==a&&a.push(this.W,c);return c}return 0}b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);!this.ca&&b.M.P.ca&&L(\"Cannot convert argument of type \"+(b.M.U?b.M.U.name:b.M.P.name)+\" to parameter type \"+this.name);c=db(b.M.O,b.M.P.N,this.N);if(this.da)switch(void 0===b.M.T&&L(\"Passing raw pointer to smart pointer is illegal\"),\nthis.Ba){case 0:b.M.U===this?c=b.M.T:L(\"Cannot convert argument of type \"+(b.M.U?b.M.U.name:b.M.P.name)+\" to parameter type \"+this.name);break;case 1:c=b.M.T;break;case 2:if(b.M.U===this)c=b.M.T;else{var d=b.clone();c=this.xa(c,Ea(function(){d[\"delete\"]()}));null!==a&&a.push(this.W,c)}break;default:L(\"Unsupporting sharing policy\")}return c}\nfunction hb(a,b){if(null===b)return this.ea&&L(\"null is not a valid \"+this.name),0;b.M||L('Cannot pass \"'+fb(b)+'\" as a '+this.name);b.M.O||L(\"Cannot pass deleted object as a pointer of type \"+this.name);b.M.P.ca&&L(\"Cannot convert argument of type \"+b.M.P.name+\" to parameter type \"+this.name);return db(b.M.O,b.M.P.N,this.N)}\nfunction Y(a,b,c,d){this.name=a;this.N=b;this.ea=c;this.ca=d;this.da=!1;this.W=this.xa=this.fa=this.ka=this.Ba=this.wa=void 0;void 0!==b.R?this.toWireType=gb:(this.toWireType=d?eb:hb,this.V=null)}function ib(a,b){h.hasOwnProperty(a)||Ta(\"Replacing nonexistant public symbol\");h[a]=b;h[a].Z=void 0}\nfunction jb(a,b){var c=[];return function(){c.length=0;Object.assign(c,arguments);if(a.includes(\"j\")){var d=h[\"dynCall_\"+a];d=c&&c.length?d.apply(null,[b].concat(c)):d.call(null,b)}else d=oa.get(b).apply(null,c);return d}}function Z(a,b){a=N(a);var c=a.includes(\"j\")?jb(a,b):oa.get(b);\"function\"!=typeof c&&L(\"unknown function pointer with signature \"+a+\": \"+b);return c}var mb=void 0;\nfunction nb(a,b){function c(f){e[f]||R[f]||(Ya[f]?Ya[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new mb(a+\": \"+d.map(Ja).join([\", \"]));}\nfunction ob(a,b,c,d,e){var f=b.length;2>f&&L(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");var g=null!==b[1]&&null!==c,k=!1;for(c=1;c<b.length;++c)if(null!==b[c]&&void 0===b[c].V){k=!0;break}var m=\"void\"!==b[0].name,l=f-2,n=Array(l),p=[],r=[];return function(){arguments.length!==l&&L(\"function \"+a+\" called with \"+arguments.length+\" arguments, expected \"+l+\" args!\");r.length=0;p.length=g?2:1;p[0]=e;if(g){var u=b[1].toWireType(r,this);p[1]=u}for(var t=0;t<l;++t)n[t]=\nb[t+2].toWireType(r,arguments[t]),p.push(n[t]);t=d.apply(null,p);if(k)Wa(r);else for(var y=g?1:2;y<b.length;y++){var B=1===y?u:n[y-2];null!==b[y].V&&b[y].V(B)}u=m?b[0].fromWireType(t):void 0;return u}}function pb(a,b){for(var c=[],d=0;d<a;d++)c.push(E[b+4*d>>2]);return c}function qb(a){4<a&&0===--J[a].ga&&(J[a]=void 0,Ca.push(a))}function fb(a){if(null===a)return\"null\";var b=typeof a;return\"object\"===b||\"array\"===b||\"function\"===b?a.toString():\"\"+a}\nfunction rb(a,b){switch(b){case 2:return function(c){return this.fromWireType(la[c>>2])};case 3:return function(c){return this.fromWireType(ma[c>>3])};default:throw new TypeError(\"Unknown float type: \"+a);}}\nfunction sb(a,b,c){switch(b){case 0:return c?function(d){return ja[d]}:function(d){return A[d]};case 1:return c?function(d){return C[d>>1]}:function(d){return ka[d>>1]};case 2:return c?function(d){return D[d>>2]}:function(d){return E[d>>2]};default:throw new TypeError(\"Unknown integer type: \"+a);}}function tb(a,b){for(var c=\"\",d=0;!(d>=b/2);++d){var e=C[a+2*d>>1];if(0==e)break;c+=String.fromCharCode(e)}return c}\nfunction ub(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e<c;++e)C[b>>1]=a.charCodeAt(e),b+=2;C[b>>1]=0;return b-d}function vb(a){return 2*a.length}function wb(a,b){for(var c=0,d=\"\";!(c>=b/4);){var e=D[a+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d}\nfunction xb(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e<a.length;++e){var f=a.charCodeAt(e);if(55296<=f&&57343>=f){var g=a.charCodeAt(++e);f=65536+((f&1023)<<10)|g&1023}D[b>>2]=f;b+=4;if(b+4>c)break}D[b>>2]=0;return b-d}function yb(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c;b+=4}return b}var zb={};function Ab(a){var b=zb[a];return void 0===b?N(a):b}var Bb=[];function Cb(a){var b=Bb.length;Bb.push(a);return b}\nfunction Db(a,b){for(var c=Array(a),d=0;d<a;++d)c[d]=La(E[b+4*d>>2],\"parameter \"+d);return c}var Eb=[],Fb=[null,[],[]];K=h.BindingError=Da(\"BindingError\");h.count_emval_handles=function(){for(var a=0,b=5;b<J.length;++b)void 0!==J[b]&&++a;return a};h.get_first_emval=function(){for(var a=5;a<J.length;++a)if(void 0!==J[a])return J[a];return null};Fa=h.PureVirtualError=Da(\"PureVirtualError\");for(var Gb=Array(256),Hb=0;256>Hb;++Hb)Gb[Hb]=String.fromCharCode(Hb);Ga=Gb;h.getInheritedInstanceCount=function(){return Object.keys(Q).length};\nh.getLiveInheritedInstances=function(){var a=[],b;for(b in Q)Q.hasOwnProperty(b)&&a.push(Q[b]);return a};h.flushPendingDeletes=Ha;h.setDelayFunction=function(a){P=a;O.length&&P&&P(Ha)};Sa=h.InternalError=Da(\"InternalError\");X.prototype.isAliasOf=function(a){if(!(this instanceof X&&a instanceof X))return!1;var b=this.M.P.N,c=this.M.O,d=a.M.P.N;for(a=a.M.O;b.R;)c=b.ba(c),b=b.R;for(;d.R;)a=d.ba(a),d=d.R;return b===d&&c===a};\nX.prototype.clone=function(){this.M.O||$a(this);if(this.M.aa)return this.M.count.value+=1,this;var a=T,b=Object,c=b.create,d=Object.getPrototypeOf(this),e=this.M;a=a(c.call(b,d,{M:{value:{count:e.count,$:e.$,aa:e.aa,O:e.O,P:e.P,T:e.T,U:e.U}}}));a.M.count.value+=1;a.M.$=!1;return a};X.prototype[\"delete\"]=function(){this.M.O||$a(this);this.M.$&&!this.M.aa&&L(\"Object already scheduled for deletion\");Ma(this);Oa(this.M);this.M.aa||(this.M.T=void 0,this.M.O=void 0)};X.prototype.isDeleted=function(){return!this.M.O};\nX.prototype.deleteLater=function(){this.M.O||$a(this);this.M.$&&!this.M.aa&&L(\"Object already scheduled for deletion\");O.push(this);1===O.length&&P&&P(Ha);this.M.$=!0;return this};Y.prototype.qa=function(a){this.ka&&(a=this.ka(a));return a};Y.prototype.ha=function(a){this.W&&this.W(a)};Y.prototype.argPackAdvance=8;Y.prototype.readValueFromPointer=Xa;Y.prototype.deleteObject=function(a){if(null!==a)a[\"delete\"]()};\nY.prototype.fromWireType=function(a){function b(){return this.da?Ua(this.N.X,{P:this.wa,O:c,U:this,T:a}):Ua(this.N.X,{P:this,O:a})}var c=this.qa(a);if(!c)return this.ha(a),null;var d=Ra(this.N,c);if(void 0!==d){if(0===d.M.count.value)return d.M.O=c,d.M.T=a,d.clone();d=d.clone();this.ha(a);return d}d=this.N.pa(c);d=Qa[d];if(!d)return b.call(this);d=this.ca?d.la:d.pointerType;var e=Pa(c,this.N,d.N);return null===e?b.call(this):this.da?Ua(d.N.X,{P:d,O:e,U:this,T:a}):Ua(d.N.X,{P:d,O:e})};\nmb=h.UnboundTypeError=Da(\"UnboundTypeError\");\nvar xa=\"function\"==typeof atob?atob:function(a){var b=\"\",c=0;a=a.replace(/[^A-Za-z0-9\\+\\/=]/g,\"\");do{var d=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var e=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var f=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var g=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));d=d<<2|e>>4;\ne=(e&15)<<4|f>>2;var k=(f&3)<<6|g;b+=String.fromCharCode(d);64!==f&&(b+=String.fromCharCode(e));64!==g&&(b+=String.fromCharCode(k))}while(c<a.length);return b},Jb={l:function(a,b,c,d){x(\"Assertion failed: \"+(a?z(A,a):\"\")+\", at: \"+[b?b?z(A,b):\"\":\"unknown filename\",c,d?d?z(A,d):\"\":\"unknown function\"])},q:function(a,b,c){a=N(a);b=La(b,\"wrapper\");c=M(c);var d=[].slice,e=b.N,f=e.X,g=e.R.X,k=e.R.constructor;a=Ba(a,function(){e.R.ja.forEach(function(l){if(this[l]===g[l])throw new Fa(\"Pure virtual function \"+\nl+\" must be implemented in JavaScript\");}.bind(this));Object.defineProperty(this,\"__parent\",{value:f});this.__construct.apply(this,d.call(arguments))});f.__construct=function(){this===f&&L(\"Pass correct 'this' to __construct\");var l=k.implement.apply(void 0,[this].concat(d.call(arguments)));Ma(l);var n=l.M;l.notifyOnDestruction();n.aa=!0;Object.defineProperties(this,{M:{value:n}});T(this);l=n.O;l=Ia(e,l);Q.hasOwnProperty(l)?L(\"Tried to register registered instance: \"+l):Q[l]=this};f.__destruct=function(){this===\nf&&L(\"Pass correct 'this' to __destruct\");Ma(this);var l=this.M.O;l=Ia(e,l);Q.hasOwnProperty(l)?delete Q[l]:L(\"Tried to unregister unregistered instance: \"+l)};a.prototype=Object.create(f);for(var m in c)a.prototype[m]=c[m];return Ea(a)},j:function(a){var b=Va[a];delete Va[a];var c=b.fa,d=b.W,e=b.ia,f=e.map(g=>g.ta).concat(e.map(g=>g.za));V([a],f,g=>{var k={};e.forEach((m,l)=>{var n=g[l],p=m.ra,r=m.sa,u=g[l+e.length],t=m.ya,y=m.Aa;k[m.oa]={read:B=>n.fromWireType(p(r,B)),write:(B,ba)=>{var I=[];t(y,\nB,u.toWireType(I,ba));Wa(I)}}});return[{name:b.name,fromWireType:function(m){var l={},n;for(n in k)l[n]=k[n].read(m);d(m);return l},toWireType:function(m,l){for(var n in k)if(!(n in l))throw new TypeError('Missing field: \"'+n+'\"');var p=c();for(n in k)k[n].write(p,l[n]);null!==m&&m.push(d,p);return p},argPackAdvance:8,readValueFromPointer:Xa,V:d}]})},v:function(){},B:function(a,b,c,d,e){var f=Za(c);b=N(b);W(a,{name:b,fromWireType:function(g){return!!g},toWireType:function(g,k){return k?d:e},argPackAdvance:8,\nreadValueFromPointer:function(g){if(1===c)var k=ja;else if(2===c)k=C;else if(4===c)k=D;else throw new TypeError(\"Unknown boolean type size: \"+b);return this.fromWireType(k[g>>f])},V:null})},f:function(a,b,c,d,e,f,g,k,m,l,n,p,r){n=N(n);f=Z(e,f);k&&(k=Z(g,k));l&&(l=Z(m,l));r=Z(p,r);var u=Aa(n);bb(u,function(){nb(\"Cannot construct \"+n+\" due to unbound types\",[d])});V([a,b,c],d?[d]:[],function(t){t=t[0];if(d){var y=t.N;var B=y.X}else B=X.prototype;t=Ba(u,function(){if(Object.getPrototypeOf(this)!==ba)throw new K(\"Use 'new' to construct \"+\nn);if(void 0===I.Y)throw new K(n+\" has no accessible constructor\");var kb=I.Y[arguments.length];if(void 0===kb)throw new K(\"Tried to invoke ctor of \"+n+\" with invalid number of parameters (\"+arguments.length+\") - expected (\"+Object.keys(I.Y).toString()+\") parameters instead!\");return kb.apply(this,arguments)});var ba=Object.create(B,{constructor:{value:t}});t.prototype=ba;var I=new cb(n,t,ba,r,y,f,k,l);y=new Y(n,I,!0,!1);B=new Y(n+\"*\",I,!1,!1);var lb=new Y(n+\" const*\",I,!1,!0);Qa[a]={pointerType:B,\nla:lb};ib(u,t);return[y,B,lb]})},d:function(a,b,c,d,e,f,g){var k=pb(c,d);b=N(b);f=Z(e,f);V([],[a],function(m){function l(){nb(\"Cannot call \"+n+\" due to unbound types\",k)}m=m[0];var n=m.name+\".\"+b;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);var p=m.N.constructor;void 0===p[b]?(l.Z=c-1,p[b]=l):(ab(p,b,n),p[b].S[c-1]=l);V([],k,function(r){r=ob(n,[r[0],null].concat(r.slice(1)),null,f,g);void 0===p[b].S?(r.Z=c-1,p[b]=r):p[b].S[c-1]=r;return[]});return[]})},p:function(a,b,c,d,e,f){0<b||x();var g=pb(b,\nc);e=Z(d,e);V([],[a],function(k){k=k[0];var m=\"constructor \"+k.name;void 0===k.N.Y&&(k.N.Y=[]);if(void 0!==k.N.Y[b-1])throw new K(\"Cannot register multiple constructors with identical number of parameters (\"+(b-1)+\") for class '\"+k.name+\"'! Overload resolution is currently only performed using the parameter count, not actual type info!\");k.N.Y[b-1]=()=>{nb(\"Cannot construct \"+k.name+\" due to unbound types\",g)};V([],g,function(l){l.splice(1,0,null);k.N.Y[b-1]=ob(m,l,null,e,f);return[]});return[]})},\na:function(a,b,c,d,e,f,g,k){var m=pb(c,d);b=N(b);f=Z(e,f);V([],[a],function(l){function n(){nb(\"Cannot call \"+p+\" due to unbound types\",m)}l=l[0];var p=l.name+\".\"+b;b.startsWith(\"@@\")&&(b=Symbol[b.substring(2)]);k&&l.N.ja.push(b);var r=l.N.X,u=r[b];void 0===u||void 0===u.S&&u.className!==l.name&&u.Z===c-2?(n.Z=c-2,n.className=l.name,r[b]=n):(ab(r,b,p),r[b].S[c-2]=n);V([],m,function(t){t=ob(p,t,l,f,g);void 0===r[b].S?(t.Z=c-2,r[b]=t):r[b].S[c-2]=t;return[]});return[]})},A:function(a,b){b=N(b);W(a,\n{name:b,fromWireType:function(c){var d=M(c);qb(c);return d},toWireType:function(c,d){return Ea(d)},argPackAdvance:8,readValueFromPointer:Xa,V:null})},n:function(a,b,c){c=Za(c);b=N(b);W(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,e){return e},argPackAdvance:8,readValueFromPointer:rb(b,c),V:null})},e:function(a,b,c,d,e){b=N(b);-1===e&&(e=4294967295);e=Za(c);var f=k=>k;if(0===d){var g=32-8*c;f=k=>k<<g>>>g}c=b.includes(\"unsigned\")?function(k,m){return m>>>0}:function(k,m){return m};\nW(a,{name:b,fromWireType:f,toWireType:c,argPackAdvance:8,readValueFromPointer:sb(b,e,0!==d),V:null})},b:function(a,b,c){function d(f){f>>=2;var g=E;return new e(ia,g[f+1],g[f])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=N(c);W(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{ua:!0})},o:function(a,b){b=N(b);var c=\"std::string\"===b;W(a,{name:b,fromWireType:function(d){var e=E[d>>2],f=d+4;if(c)for(var g=f,k=0;k<=e;++k){var m=\nf+k;if(k==e||0==A[m]){g=g?z(A,g,m-g):\"\";if(void 0===l)var l=g;else l+=String.fromCharCode(0),l+=g;g=m+1}}else{l=Array(e);for(k=0;k<e;++k)l[k]=String.fromCharCode(A[f+k]);l=l.join(\"\")}S(d);return l},toWireType:function(d,e){e instanceof ArrayBuffer&&(e=new Uint8Array(e));var f,g=\"string\"==typeof e;g||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Int8Array||L(\"Cannot pass non-string to std::string\");if(c&&g){var k=0;for(f=0;f<e.length;++f){var m=e.charCodeAt(f);127>=m?k++:2047>=\nm?k+=2:55296<=m&&57343>=m?(k+=4,++f):k+=3}f=k}else f=e.length;k=Ib(4+f+1);m=k+4;E[k>>2]=f;if(c&&g){if(g=m,m=f+1,f=A,0<m){m=g+m-1;for(var l=0;l<e.length;++l){var n=e.charCodeAt(l);if(55296<=n&&57343>=n){var p=e.charCodeAt(++l);n=65536+((n&1023)<<10)|p&1023}if(127>=n){if(g>=m)break;f[g++]=n}else{if(2047>=n){if(g+1>=m)break;f[g++]=192|n>>6}else{if(65535>=n){if(g+2>=m)break;f[g++]=224|n>>12}else{if(g+3>=m)break;f[g++]=240|n>>18;f[g++]=128|n>>12&63}f[g++]=128|n>>6&63}f[g++]=128|n&63}}f[g]=0}}else if(g)for(g=\n0;g<f;++g)l=e.charCodeAt(g),255<l&&(S(m),L(\"String has UTF-16 code units that do not fit in 8 bits\")),A[m+g]=l;else for(g=0;g<f;++g)A[m+g]=e[g];null!==d&&d.push(S,k);return k},argPackAdvance:8,readValueFromPointer:Xa,V:function(d){S(d)}})},i:function(a,b,c){c=N(c);if(2===b){var d=tb;var e=ub;var f=vb;var g=()=>ka;var k=1}else 4===b&&(d=wb,e=xb,f=yb,g=()=>E,k=2);W(a,{name:c,fromWireType:function(m){for(var l=E[m>>2],n=g(),p,r=m+4,u=0;u<=l;++u){var t=m+4+u*b;if(u==l||0==n[t>>k])r=d(r,t-r),void 0===\np?p=r:(p+=String.fromCharCode(0),p+=r),r=t+b}S(m);return p},toWireType:function(m,l){\"string\"!=typeof l&&L(\"Cannot pass non-string to C++ string type \"+c);var n=f(l),p=Ib(4+n+b);E[p>>2]=n>>k;e(l,p+4,n+b);null!==m&&m.push(S,p);return p},argPackAdvance:8,readValueFromPointer:Xa,V:function(m){S(m)}})},k:function(a,b,c,d,e,f){Va[a]={name:N(b),fa:Z(c,d),W:Z(e,f),ia:[]}},h:function(a,b,c,d,e,f,g,k,m,l){Va[a].ia.push({oa:N(b),ta:c,ra:Z(d,e),sa:f,za:g,ya:Z(k,m),Aa:l})},C:function(a,b){b=N(b);W(a,{va:!0,name:b,\nargPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},s:function(a,b,c,d,e){a=Bb[a];b=M(b);c=Ab(c);var f=[];E[d>>2]=Ea(f);return a(b,c,f,e)},t:function(a,b,c,d){a=Bb[a];b=M(b);c=Ab(c);a(b,c,null,d)},g:qb,m:function(a,b){var c=Db(a,b),d=c[0];b=d.name+\"_$\"+c.slice(1).map(function(g){return g.name}).join(\"_\")+\"$\";var e=Eb[b];if(void 0!==e)return e;var f=Array(a-1);e=Cb((g,k,m,l)=>{for(var n=0,p=0;p<a-1;++p)f[p]=c[p+1].readValueFromPointer(l+n),n+=c[p+1].argPackAdvance;g=g[k].apply(g,\nf);for(p=0;p<a-1;++p)c[p+1].ma&&c[p+1].ma(f[p]);if(!d.va)return d.toWireType(m,g)});return Eb[b]=e},D:function(a){4<a&&(J[a].ga+=1)},r:function(a){var b=M(a);Wa(b);qb(a)},c:function(){x(\"\")},x:function(a,b,c){A.copyWithin(a,b,b+c)},w:function(a){var b=A.length;a>>>=0;if(2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);var e=Math;d=Math.max(a,d);e=e.min.call(e,2147483648,d+(65536-d%65536)%65536);a:{try{fa.grow(e-ia.byteLength+65535>>>16);na();var f=1;break a}catch(g){}f=\nvoid 0}if(f)return!0}return!1},z:function(){return 52},u:function(){return 70},y:function(a,b,c,d){for(var e=0,f=0;f<c;f++){var g=E[b>>2],k=E[b+4>>2];b+=8;for(var m=0;m<k;m++){var l=A[g+m],n=Fb[a];0===l||10===l?((1===a?ea:v)(z(n,0)),n.length=0):n.push(l)}e+=k}E[d>>2]=e;return 0}};\n(function(){function a(e){h.asm=e.exports;fa=h.asm.E;na();oa=h.asm.J;qa.unshift(h.asm.F);F--;h.monitorRunDependencies&&h.monitorRunDependencies(F);0==F&&(null!==ta&&(clearInterval(ta),ta=null),G&&(e=G,G=null,e()))}function b(e){a(e.instance)}function c(e){return ya().then(function(f){return f instanceof WebAssembly.Instance ? f : WebAssembly.instantiate(f,d)}).then(function(f){return f}).then(e,function(f){v(\"failed to asynchronously prepare wasm: \"+f);x(f)})}var d={a:Jb};F++;h.monitorRunDependencies&&h.monitorRunDependencies(F);if(h.instantiateWasm)try{return h.instantiateWasm(d,\na)}catch(e){v(\"Module.instantiateWasm callback failed with error: \"+e),ca(e)}(function(){return w||\"function\"!=typeof WebAssembly.instantiateStreaming||ua(H)||\"function\"!=typeof fetch?c(b):fetch(H,{credentials:\"same-origin\"}).then(function(e){return WebAssembly.instantiateStreaming(e,d).then(b,function(f){v(\"wasm streaming compile failed: \"+f);v(\"falling back to ArrayBuffer instantiation\");return c(b)})})})().catch(ca);return{}})();\nh.___wasm_call_ctors=function(){return(h.___wasm_call_ctors=h.asm.F).apply(null,arguments)};var Ka=h.___getTypeName=function(){return(Ka=h.___getTypeName=h.asm.G).apply(null,arguments)};h.__embind_initialize_bindings=function(){return(h.__embind_initialize_bindings=h.asm.H).apply(null,arguments)};var Ib=h._malloc=function(){return(Ib=h._malloc=h.asm.I).apply(null,arguments)},S=h._free=function(){return(S=h._free=h.asm.K).apply(null,arguments)};\nh.dynCall_jiji=function(){return(h.dynCall_jiji=h.asm.L).apply(null,arguments)};var Kb;G=function Lb(){Kb||Mb();Kb||(G=Lb)};\nfunction Mb(){function a(){if(!Kb&&(Kb=!0,h.calledRun=!0,!ha)){za(qa);aa(h);if(h.onRuntimeInitialized)h.onRuntimeInitialized();if(h.postRun)for(\"function\"==typeof h.postRun&&(h.postRun=[h.postRun]);h.postRun.length;){var b=h.postRun.shift();ra.unshift(b)}za(ra)}}if(!(0<F)){if(h.preRun)for(\"function\"==typeof h.preRun&&(h.preRun=[h.preRun]);h.preRun.length;)sa();za(pa);0<F||(h.setStatus?(h.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){h.setStatus(\"\")},1);a()},1)):a())}}\nif(h.preInit)for(\"function\"==typeof h.preInit&&(h.preInit=[h.preInit]);0<h.preInit.length;)h.preInit.pop()();Mb();\n\n return loadYoga.ready\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// @generated by enums.py\n\nexport enum Align {\n Auto = 0,\n FlexStart = 1,\n Center = 2,\n FlexEnd = 3,\n Stretch = 4,\n Baseline = 5,\n SpaceBetween = 6,\n SpaceAround = 7,\n SpaceEvenly = 8,\n}\n\nexport enum BoxSizing {\n BorderBox = 0,\n ContentBox = 1,\n}\n\nexport enum Dimension {\n Width = 0,\n Height = 1,\n}\n\nexport enum Direction {\n Inherit = 0,\n LTR = 1,\n RTL = 2,\n}\n\nexport enum Display {\n Flex = 0,\n None = 1,\n Contents = 2,\n}\n\nexport enum Edge {\n Left = 0,\n Top = 1,\n Right = 2,\n Bottom = 3,\n Start = 4,\n End = 5,\n Horizontal = 6,\n Vertical = 7,\n All = 8,\n}\n\nexport enum Errata {\n None = 0,\n StretchFlexBasis = 1,\n AbsolutePositionWithoutInsetsExcludesPadding = 2,\n AbsolutePercentAgainstInnerSize = 4,\n All = 2147483647,\n Classic = 2147483646,\n}\n\nexport enum ExperimentalFeature {\n WebFlexBasis = 0,\n}\n\nexport enum FlexDirection {\n Column = 0,\n ColumnReverse = 1,\n Row = 2,\n RowReverse = 3,\n}\n\nexport enum Gutter {\n Column = 0,\n Row = 1,\n All = 2,\n}\n\nexport enum Justify {\n FlexStart = 0,\n Center = 1,\n FlexEnd = 2,\n SpaceBetween = 3,\n SpaceAround = 4,\n SpaceEvenly = 5,\n}\n\nexport enum LogLevel {\n Error = 0,\n Warn = 1,\n Info = 2,\n Debug = 3,\n Verbose = 4,\n Fatal = 5,\n}\n\nexport enum MeasureMode {\n Undefined = 0,\n Exactly = 1,\n AtMost = 2,\n}\n\nexport enum NodeType {\n Default = 0,\n Text = 1,\n}\n\nexport enum Overflow {\n Visible = 0,\n Hidden = 1,\n Scroll = 2,\n}\n\nexport enum PositionType {\n Static = 0,\n Relative = 1,\n Absolute = 2,\n}\n\nexport enum Unit {\n Undefined = 0,\n Point = 1,\n Percent = 2,\n Auto = 3,\n}\n\nexport enum Wrap {\n NoWrap = 0,\n Wrap = 1,\n WrapReverse = 2,\n}\n\nconst constants = {\n ALIGN_AUTO: Align.Auto,\n ALIGN_FLEX_START: Align.FlexStart,\n ALIGN_CENTER: Align.Center,\n ALIGN_FLEX_END: Align.FlexEnd,\n ALIGN_STRETCH: Align.Stretch,\n ALIGN_BASELINE: Align.Baseline,\n ALIGN_SPACE_BETWEEN: Align.SpaceBetween,\n ALIGN_SPACE_AROUND: Align.SpaceAround,\n ALIGN_SPACE_EVENLY: Align.SpaceEvenly,\n BOX_SIZING_BORDER_BOX: BoxSizing.BorderBox,\n BOX_SIZING_CONTENT_BOX: BoxSizing.ContentBox,\n DIMENSION_WIDTH: Dimension.Width,\n DIMENSION_HEIGHT: Dimension.Height,\n DIRECTION_INHERIT: Direction.Inherit,\n DIRECTION_LTR: Direction.LTR,\n DIRECTION_RTL: Direction.RTL,\n DISPLAY_FLEX: Display.Flex,\n DISPLAY_NONE: Display.None,\n DISPLAY_CONTENTS: Display.Contents,\n EDGE_LEFT: Edge.Left,\n EDGE_TOP: Edge.Top,\n EDGE_RIGHT: Edge.Right,\n EDGE_BOTTOM: Edge.Bottom,\n EDGE_START: Edge.Start,\n EDGE_END: Edge.End,\n EDGE_HORIZONTAL: Edge.Horizontal,\n EDGE_VERTICAL: Edge.Vertical,\n EDGE_ALL: Edge.All,\n ERRATA_NONE: Errata.None,\n ERRATA_STRETCH_FLEX_BASIS: Errata.StretchFlexBasis,\n ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING: Errata.AbsolutePositionWithoutInsetsExcludesPadding,\n ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE: Errata.AbsolutePercentAgainstInnerSize,\n ERRATA_ALL: Errata.All,\n ERRATA_CLASSIC: Errata.Classic,\n EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS: ExperimentalFeature.WebFlexBasis,\n FLEX_DIRECTION_COLUMN: FlexDirection.Column,\n FLEX_DIRECTION_COLUMN_REVERSE: FlexDirection.ColumnReverse,\n FLEX_DIRECTION_ROW: FlexDirection.Row,\n FLEX_DIRECTION_ROW_REVERSE: FlexDirection.RowReverse,\n GUTTER_COLUMN: Gutter.Column,\n GUTTER_ROW: Gutter.Row,\n GUTTER_ALL: Gutter.All,\n JUSTIFY_FLEX_START: Justify.FlexStart,\n JUSTIFY_CENTER: Justify.Center,\n JUSTIFY_FLEX_END: Justify.FlexEnd,\n JUSTIFY_SPACE_BETWEEN: Justify.SpaceBetween,\n JUSTIFY_SPACE_AROUND: Justify.SpaceAround,\n JUSTIFY_SPACE_EVENLY: Justify.SpaceEvenly,\n LOG_LEVEL_ERROR: LogLevel.Error,\n LOG_LEVEL_WARN: LogLevel.Warn,\n LOG_LEVEL_INFO: LogLevel.Info,\n LOG_LEVEL_DEBUG: LogLevel.Debug,\n LOG_LEVEL_VERBOSE: LogLevel.Verbose,\n LOG_LEVEL_FATAL: LogLevel.Fatal,\n MEASURE_MODE_UNDEFINED: MeasureMode.Undefined,\n MEASURE_MODE_EXACTLY: MeasureMode.Exactly,\n MEASURE_MODE_AT_MOST: MeasureMode.AtMost,\n NODE_TYPE_DEFAULT: NodeType.Default,\n NODE_TYPE_TEXT: NodeType.Text,\n OVERFLOW_VISIBLE: Overflow.Visible,\n OVERFLOW_HIDDEN: Overflow.Hidden,\n OVERFLOW_SCROLL: Overflow.Scroll,\n POSITION_TYPE_STATIC: PositionType.Static,\n POSITION_TYPE_RELATIVE: PositionType.Relative,\n POSITION_TYPE_ABSOLUTE: PositionType.Absolute,\n UNIT_UNDEFINED: Unit.Undefined,\n UNIT_POINT: Unit.Point,\n UNIT_PERCENT: Unit.Percent,\n UNIT_AUTO: Unit.Auto,\n WRAP_NO_WRAP: Wrap.NoWrap,\n WRAP_WRAP: Wrap.Wrap,\n WRAP_WRAP_REVERSE: Wrap.WrapReverse,\n}\nexport default constants","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n// @ts-nocheck\n\nimport {Unit, Direction} from './generated/YGEnums.ts';\nimport YGEnums from './generated/YGEnums.ts';\n\nimport type {\n Align,\n BoxSizing,\n Display,\n Edge,\n Errata,\n ExperimentalFeature,\n FlexDirection,\n Gutter,\n Justify,\n MeasureMode,\n Overflow,\n PositionType,\n Wrap,\n} from './generated/YGEnums.ts';\n\ntype Layout = {\n left: number;\n right: number;\n top: number;\n bottom: number;\n width: number;\n height: number;\n};\n\ntype Size = {\n width: number;\n height: number;\n};\n\ntype Value = {\n unit: Unit;\n value: number;\n};\n\nexport type Config = {\n free(): void;\n isExperimentalFeatureEnabled(feature: ExperimentalFeature): boolean;\n setExperimentalFeatureEnabled(\n feature: ExperimentalFeature,\n enabled: boolean,\n ): void;\n setPointScaleFactor(factor: number): void;\n getErrata(): Errata;\n setErrata(errata: Errata): void;\n useWebDefaults(): boolean;\n setUseWebDefaults(useWebDefaults: boolean): void;\n};\n\nexport type DirtiedFunction = (node: Node) => void;\n\nexport type MeasureFunction = (\n width: number,\n widthMode: MeasureMode,\n height: number,\n heightMode: MeasureMode,\n) => Size;\n\nexport type Node = {\n calculateLayout(\n width: number | 'auto' | undefined,\n height: number | 'auto' | undefined,\n direction?: Direction,\n ): void;\n copyStyle(node: Node): void;\n free(): void;\n freeRecursive(): void;\n getAlignContent(): Align;\n getAlignItems(): Align;\n getAlignSelf(): Align;\n getAspectRatio(): number;\n getBorder(edge: Edge): number;\n getChild(index: number): Node;\n getChildCount(): number;\n getComputedBorder(edge: Edge): number;\n getComputedBottom(): number;\n getComputedHeight(): number;\n getComputedLayout(): Layout;\n getComputedLeft(): number;\n getComputedMargin(edge: Edge): number;\n getComputedPadding(edge: Edge): number;\n getComputedRight(): number;\n getComputedTop(): number;\n getComputedWidth(): number;\n getDirection(): Direction;\n getDisplay(): Display;\n getFlexBasis(): Value;\n getFlexDirection(): FlexDirection;\n getFlexGrow(): number;\n getFlexShrink(): number;\n getFlexWrap(): Wrap;\n getHeight(): Value;\n getJustifyContent(): Justify;\n getGap(gutter: Gutter): Value;\n getMargin(edge: Edge): Value;\n getMaxHeight(): Value;\n getMaxWidth(): Value;\n getMinHeight(): Value;\n getMinWidth(): Value;\n getOverflow(): Overflow;\n getPadding(edge: Edge): Value;\n getParent(): Node | null;\n getPosition(edge: Edge): Value;\n getPositionType(): PositionType;\n getBoxSizing(): BoxSizing;\n getWidth(): Value;\n insertChild(child: Node, index: number): void;\n isDirty(): boolean;\n isReferenceBaseline(): boolean;\n markDirty(): void;\n hasNewLayout(): boolean;\n markLayoutSeen(): void;\n removeChild(child: Node): void;\n reset(): void;\n setAlignContent(alignContent: Align): void;\n setAlignItems(alignItems: Align): void;\n setAlignSelf(alignSelf: Align): void;\n setAspectRatio(aspectRatio: number | undefined): void;\n setBorder(edge: Edge, borderWidth: number | undefined): void;\n setDirection(direction: Direction): void;\n setDisplay(display: Display): void;\n setFlex(flex: number | undefined): void;\n setFlexBasis(flexBasis: number | 'auto' | `${number}%` | undefined): void;\n setFlexBasisPercent(flexBasis: number | undefined): void;\n setFlexBasisAuto(): void;\n setFlexDirection(flexDirection: FlexDirection): void;\n setFlexGrow(flexGrow: number | undefined): void;\n setFlexShrink(flexShrink: number | undefined): void;\n setFlexWrap(flexWrap: Wrap): void;\n setHeight(height: number | 'auto' | `${number}%` | undefined): void;\n setIsReferenceBaseline(isReferenceBaseline: boolean): void;\n setHeightAuto(): void;\n setHeightPercent(height: number | undefined): void;\n setJustifyContent(justifyContent: Justify): void;\n setGap(gutter: Gutter, gapLength: number | `${number}%` | undefined): Value;\n setGapPercent(gutter: Gutter, gapLength: number | undefined): Value;\n setMargin(\n edge: Edge,\n margin: number | 'auto' | `${number}%` | undefined,\n ): void;\n setMarginAuto(edge: Edge): void;\n setMarginPercent(edge: Edge, margin: number | undefined): void;\n setMaxHeight(maxHeight: number | `${number}%` | undefined): void;\n setMaxHeightPercent(maxHeight: number | undefined): void;\n setMaxWidth(maxWidth: number | `${number}%` | undefined): void;\n setMaxWidthPercent(maxWidth: number | undefined): void;\n setDirtiedFunc(dirtiedFunc: DirtiedFunction | null): void;\n setMeasureFunc(measureFunc: MeasureFunction | null): void;\n setMinHeight(minHeight: number | `${number}%` | undefined): void;\n setMinHeightPercent(minHeight: number | undefined): void;\n setMinWidth(minWidth: number | `${number}%` | undefined): void;\n setMinWidthPercent(minWidth: number | undefined): void;\n setOverflow(overflow: Overflow): void;\n setPadding(edge: Edge, padding: number | `${number}%` | undefined): void;\n setPaddingPercent(edge: Edge, padding: number | undefined): void;\n setPosition(edge: Edge, position: number | `${number}%` | undefined): void;\n setPositionPercent(edge: Edge, position: number | undefined): void;\n setPositionType(positionType: PositionType): void;\n setPositionAuto(edge: Edge): void;\n setBoxSizing(boxSizing: BoxSizing): void;\n setWidth(width: number | 'auto' | `${number}%` | undefined): void;\n setWidthAuto(): void;\n setWidthPercent(width: number | undefined): void;\n unsetDirtiedFunc(): void;\n unsetMeasureFunc(): void;\n setAlwaysFormsContainingBlock(alwaysFormsContainingBlock: boolean): void;\n};\n\nexport type Yoga = {\n Config: {\n create(): Config;\n destroy(config: Config): void;\n };\n Node: {\n create(config?: Config): Node;\n createDefault(): Node;\n createWithConfig(config: Config): Node;\n destroy(node: Node): void;\n };\n} & typeof YGEnums;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport default function wrapAssembly(lib: any): Yoga {\n function patch(prototype, name, fn) {\n const original = prototype[name];\n\n prototype[name] = function (...args) {\n return fn.call(this, original, ...args);\n };\n }\n\n for (const fnName of [\n 'setPosition',\n 'setMargin',\n 'setFlexBasis',\n 'setWidth',\n 'setHeight',\n 'setMinWidth',\n 'setMinHeight',\n 'setMaxWidth',\n 'setMaxHeight',\n 'setPadding',\n 'setGap',\n ]) {\n const methods = {\n [Unit.Point]: lib.Node.prototype[fnName],\n [Unit.Percent]: lib.Node.prototype[`${fnName}Percent`],\n [Unit.Auto]: lib.Node.prototype[`${fnName}Auto`],\n };\n\n patch(lib.Node.prototype, fnName, function (original, ...args) {\n // We patch all these functions to add support for the following calls:\n // .setWidth(100) / .setWidth(\"100%\") / .setWidth(.getWidth()) / .setWidth(\"auto\")\n\n const value = args.pop();\n let unit, asNumber;\n\n if (value === 'auto') {\n unit = Unit.Auto;\n asNumber = undefined;\n } else if (typeof value === 'object') {\n unit = value.unit;\n asNumber = value.valueOf();\n } else {\n unit =\n typeof value === 'string' && value.endsWith('%')\n ? Unit.Percent\n : Unit.Point;\n asNumber = parseFloat(value);\n if (\n value !== undefined &&\n !Number.isNaN(value) &&\n Number.isNaN(asNumber)\n ) {\n throw new Error(`Invalid value ${value} for ${fnName}`);\n }\n }\n\n if (!methods[unit])\n throw new Error(\n `Failed to execute \"${fnName}\": Unsupported unit '${value}'`,\n );\n\n if (asNumber !== undefined) {\n return methods[unit].call(this, ...args, asNumber);\n } else {\n return methods[unit].call(this, ...args);\n }\n });\n }\n\n function wrapMeasureFunction(measureFunction) {\n return lib.MeasureCallback.implement({\n measure: (...args) => {\n const {width, height} = measureFunction(...args);\n return {\n width: width ?? NaN,\n height: height ?? NaN,\n };\n },\n });\n }\n\n patch(lib.Node.prototype, 'setMeasureFunc', function (original, measureFunc) {\n // This patch is just a convenience patch, since it helps write more\n // idiomatic source code (such as .setMeasureFunc(null))\n if (measureFunc) {\n return original.call(this, wrapMeasureFunction(measureFunc));\n } else {\n return this.unsetMeasureFunc();\n }\n });\n\n function wrapDirtiedFunc(dirtiedFunction) {\n return lib.DirtiedCallback.implement({dirtied: dirtiedFunction});\n }\n\n patch(lib.Node.prototype, 'setDirtiedFunc', function (original, dirtiedFunc) {\n original.call(this, wrapDirtiedFunc(dirtiedFunc));\n });\n\n patch(lib.Config.prototype, 'free', function () {\n // Since we handle the memory allocation ourselves (via lib.Config.create),\n // we also need to handle the deallocation\n lib.Config.destroy(this);\n });\n\n patch(lib.Node, 'create', (_, config) => {\n // We decide the constructor we want to call depending on the parameters\n return config\n ? lib.Node.createWithConfig(config)\n : lib.Node.createDefault();\n });\n\n patch(lib.Node.prototype, 'free', function () {\n // Since we handle the memory allocation ourselves (via lib.Node.create),\n // we also need to handle the deallocation\n lib.Node.destroy(this);\n });\n\n patch(lib.Node.prototype, 'freeRecursive', function () {\n for (let t = 0, T = this.getChildCount(); t < T; ++t) {\n this.getChild(0).freeRecursive();\n }\n this.free();\n });\n\n patch(\n lib.Node.prototype,\n 'calculateLayout',\n function (original, width = NaN, height = NaN, direction = Direction.LTR) {\n // Just a small patch to add support for the function default parameters\n return original.call(this, width, height, direction);\n },\n );\n\n return {\n Config: lib.Config,\n Node: lib.Node,\n ...YGEnums,\n };\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n// @ts-ignore untyped from Emscripten\nimport loadYogaImpl from '../binaries/yoga-wasm-base64-esm.js';\nimport wrapAssembly from './wrapAssembly.ts';\n\nexport type {\n Config,\n DirtiedFunction,\n MeasureFunction,\n Node,\n Yoga,\n} from './wrapAssembly.ts';\n\nexport async function loadYoga() {\n return wrapAssembly(await loadYogaImpl());\n}\nexport * from './generated/YGEnums.ts';\n","import { loadYoga as loadYogaUntyped, type Yoga } from 'yoga-layout/load';\n\nconst loadYoga = loadYogaUntyped as (options: {\n\twasmBinary?: ArrayBuffer | ArrayBufferLike;\n\tinstantiateWasm?: (\n\t\timports: WebAssembly.Imports,\n\t\tsuccessCallback: (instance: WebAssembly.Instance) => void\n\t) => WebAssembly.Exports | false | undefined;\n}) => Promise<Yoga>;\n\nlet resolveYoga: (yoga: Yoga) => void;\nlet rejectYoga: (error: unknown) => void;\nconst yogaPromise: Promise<Yoga> = new Promise((resolve, reject) => {\n\tresolveYoga = resolve;\n\trejectYoga = reject;\n});\n\nexport type InitInput =\n\t| string\n\t| Request\n\t| URL\n\t| Response\n\t| BufferSource\n\t| Buffer\n\t| WebAssembly.Module\n\t| Promise<Response | BufferSource | Buffer | WebAssembly.Module>;\n\nasync function loadWasm(\n\tinput: InitInput,\n\timports: WebAssembly.Imports\n): Promise<WebAssembly.WebAssemblyInstantiatedSource> {\n\tlet source: Response | BufferSource | Buffer | WebAssembly.Module;\n\n\tif (\n\t\ttypeof input === 'string' ||\n\t\t(typeof Request === 'function' && input instanceof Request) ||\n\t\t(typeof URL === 'function' && input instanceof URL)\n\t) {\n\t\tsource = await fetch(input);\n\t} else {\n\t\tsource = await input;\n\t}\n\n\tif (typeof Response === 'function' && source instanceof Response) {\n\t\tif (typeof WebAssembly.instantiateStreaming === 'function') {\n\t\t\ttry {\n\t\t\t\treturn await WebAssembly.instantiateStreaming(source, imports);\n\t\t\t} catch (e) {\n\t\t\t\tif (source.headers.get('Content-Type') !== 'application/wasm') {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t'`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n',\n\t\t\t\t\t\te\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst bytes = await source.arrayBuffer();\n\t\treturn await WebAssembly.instantiate(bytes, imports);\n\t}\n\n\tconst instantiated = (await WebAssembly.instantiate(\n\t\t'buffer' in source\n\t\t\t? source.buffer.slice(\n\t\t\t\t\tsource.byteOffset,\n\t\t\t\t\tsource.byteOffset + source.byteLength\n\t\t\t )\n\t\t\t: source,\n\t\timports\n\t)) as WebAssembly.Instance | WebAssembly.WebAssemblyInstantiatedSource;\n\n\tif (instantiated instanceof WebAssembly.Instance) {\n\t\treturn { instance: instantiated, module: source as WebAssembly.Module };\n\t}\n\n\treturn instantiated;\n}\n\nexport function init(input: InitInput) {\n\tloadYoga({\n\t\tinstantiateWasm(imports, successCallback) {\n\t\t\tloadWasm(input, imports)\n\t\t\t\t.then(({ instance }) => {\n\t\t\t\t\tsuccessCallback(instance);\n\t\t\t\t})\n\t\t\t\t.catch(rejectYoga);\n\n\t\t\treturn {};\n\t\t}\n\t})\n\t\t.then(resolveYoga)\n\t\t.catch(rejectYoga);\n}\n\nexport function getYoga() {\n\treturn yogaPromise;\n}\n","import type { ReactNode, ReactElement } from 'react';\nimport LineBreaker from 'linebreak';\n\nimport CssDimension from './vendor/parse-css-dimension/index.js';\n\nexport function isReactElement(node: ReactNode): node is ReactElement {\n\tconst type = typeof node;\n\tif (\n\t\ttype === 'number' ||\n\t\ttype === 'bigint' ||\n\t\ttype === 'string' ||\n\t\ttype === 'boolean'\n\t) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nexport function isClass(f: Function) {\n\treturn /^class\\s/.test(f.toString());\n}\n\nexport function isForwardRefComponent(type: any) {\n\treturn type && type.$$typeof === Symbol.for('react.forward_ref');\n}\n\nexport function isReactComponent(type: any) {\n\treturn typeof type === 'function' || isForwardRefComponent(type);\n}\n\nexport function hasDangerouslySetInnerHTMLProp(props: any) {\n\treturn 'dangerouslySetInnerHTML' in props;\n}\n\nexport function normalizeChildren(children: any) {\n\tconst flattend =\n\t\ttypeof children === 'undefined'\n\t\t\t? []\n\t\t\t: [].concat(children).flat(Infinity);\n\n\tconst res = [];\n\tfor (let i = 0; i < flattend.length; i++) {\n\t\tlet value = flattend[i];\n\t\tif (\n\t\t\ttypeof value === 'undefined' ||\n\t\t\ttypeof value === 'boolean' ||\n\t\t\tvalue === null\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof value === 'number') {\n\t\t\tvalue = String(value);\n\t\t}\n\t\tif (\n\t\t\ttypeof value === 'string' &&\n\t\t\tres.length &&\n\t\t\ttypeof res[res.length - 1] === 'string'\n\t\t) {\n\t\t\tres[res.length - 1] += value;\n\t\t} else {\n\t\t\tres.push(value);\n\t\t}\n\t}\n\treturn res;\n}\n\nexport function lengthToNumber(\n\tlength: string | number,\n\tbaseFontSize: number,\n\tbaseLength: number,\n\tinheritedStyle: Record<string, string | number>,\n\tpercentage = false\n): number | undefined {\n\tif (typeof length === 'number') return length;\n\n\t// Convert em and rem values to number (px), convert rad to deg.\n\ttry {\n\t\tlength = length.trim();\n\n\t\t// Not length: `1px/2px`, `1px 2px`, `1px, 2px`, `calc(1px)`.\n\t\tif (/[ /\\(,]/.test(length)) return;\n\n\t\t// Just a number as string: '100'\n\t\tif (length === String(+length)) return +length;\n\n\t\tconst parsed = new CssDimension(length);\n\t\tif (parsed.type === 'length') {\n\t\t\tswitch (parsed.unit) {\n\t\t\t\tcase 'em':\n\t\t\t\t\treturn parsed.value * baseFontSize;\n\t\t\t\tcase 'rem':\n\t\t\t\t\treturn parsed.value * 16;\n\t\t\t\tcase 'vw':\n\t\t\t\t\treturn ~~(\n\t\t\t\t\t\t(parsed.value *\n\t\t\t\t\t\t\t(inheritedStyle._viewportWidth as number)) /\n\t\t\t\t\t\t100\n\t\t\t\t\t);\n\t\t\t\tcase 'vh':\n\t\t\t\t\treturn ~~(\n\t\t\t\t\t\t(parsed.value *\n\t\t\t\t\t\t\t(inheritedStyle._viewportHeight as number)) /\n\t\t\t\t\t\t100\n\t\t\t\t\t);\n\t\t\t\tdefault:\n\t\t\t\t\treturn parsed.value;\n\t\t\t}\n\t\t} else if (parsed.type === 'angle') {\n\t\t\treturn calcDegree(length);\n\t\t} else if (parsed.type === 'percentage') {\n\t\t\tif (percentage) {\n\t\t\t\treturn (parsed.value / 100) * baseLength;\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// Not a length unit, silently ignore.\n\t}\n}\n\nexport function calcDegree(deg: string) {\n\tconst parsed = new CssDimension(deg);\n\n\tswitch (parsed.unit) {\n\t\tcase 'deg':\n\t\t\treturn parsed.value;\n\t\tcase 'rad':\n\t\t\treturn (parsed.value * 180) / Math.PI;\n\t\tcase 'turn':\n\t\t\treturn parsed.value * 360;\n\t\tcase 'grad':\n\t\t\treturn 0.9 * parsed.value;\n\t}\n}\n\n// Multiplies two 2d transform matrices.\nexport function multiply(m1: number[], m2: number[]) {\n\treturn [\n\t\tm1[0] * m2[0] + m1[2] * m2[1],\n\t\tm1[1] * m2[0] + m1[3] * m2[1],\n\t\tm1[0] * m2[2] + m1[2] * m2[3],\n\t\tm1[1] * m2[2] + m1[3] * m2[3],\n\t\tm1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n\t\tm1[1] * m2[4] + m1[3] * m2[5] + m1[5]\n\t];\n}\n\nexport function v(\n\tfield: string | number | undefined,\n\tmap: Record<string, any>,\n\tfallback: any,\n\terrorIfNotAllowedForProperty?: string\n) {\n\tlet value = map[field];\n\tif (typeof value === 'undefined') {\n\t\tif (errorIfNotAllowedForProperty && typeof field !== 'undefined') {\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid value for CSS property \"${errorIfNotAllowedForProperty}\". Allowed values: ${Object.keys(\n\t\t\t\t\tmap\n\t\t\t\t)\n\t\t\t\t\t.map(_v => `\"${_v}\"`)\n\t\t\t\t\t.join(' | ')}. Received: \"${field}\".`\n\t\t\t);\n\t\t}\n\t\tvalue = fallback;\n\t}\n\treturn value;\n}\n\nlet wordSegmenter;\nlet graphemeSegmenter;\n\n// Implementation modified from\n// https://github.com/niklasvh/html2canvas/blob/6521a487d78172f7179f7c973c1a3af40eb92009/src/css/layout/text.ts\n// https://drafts.csswg.org/css-text/#word-separator\nexport const wordSeparators = [\n\t0x0020, 0x00a0, 0x1361, 0x10100, 0x10101, 0x1039, 0x1091, 0xa\n].map(point => String.fromCodePoint(point));\n\nconst segmentCache = new Map<string, string[]>();\nconst MAX_SEGMENT_CACHE_SIZE = 500;\n\nexport function segment(\n\tcontent: string,\n\tgranularity: 'word' | 'grapheme',\n\tlocale?: string\n): string[] {\n\tconst cacheKey = `${granularity}:${locale || ''}:${content}`;\n\n\tif (segmentCache.has(cacheKey)) {\n\t\treturn segmentCache.get(cacheKey)!;\n\t}\n\tif (!wordSegmenter || !graphemeSegmenter) {\n\t\tif (!(typeof Intl !== 'undefined' && 'Segmenter' in Intl)) {\n\t\t\t// https://caniuse.com/mdn-javascript_builtins_intl_segments\n\t\t\tthrow new Error(\n\t\t\t\t'Intl.Segmenter does not exist, please use import a polyfill.'\n\t\t\t);\n\t\t}\n\n\t\twordSegmenter = new Intl.Segmenter(locale, { granularity: 'word' });\n\t\tgraphemeSegmenter = new Intl.Segmenter(locale, {\n\t\t\tgranularity: 'grapheme'\n\t\t});\n\t}\n\n\tlet result: string[];\n\n\tif (granularity === 'grapheme') {\n\t\tresult = [...graphemeSegmenter.segment(content)].map(\n\t\t\tseg => seg.segment\n\t\t);\n\t} else {\n\t\tconst segmented = [...wordSegmenter.segment(content)].map(\n\t\t\tseg => seg.segment\n\t\t) as string[];\n\n\t\tconst output = [];\n\n\t\tlet i = 0;\n\t\t// When there is a non-breaking space, join the previous and next words together.\n\t\t// This change causes them to be treated as a single segment.\n\t\twhile (i < segmented.length) {\n\t\t\tconst s = segmented[i];\n\n\t\t\tif (s == '\\u00a0') {\n\t\t\t\tconst previousWord = i === 0 ? '' : output.pop();\n\t\t\t\tconst nextWord =\n\t\t\t\t\ti === segmented.length - 1 ? '' : segmented[i + 1];\n\n\t\t\t\toutput.push(previousWord + '\\u00a0' + nextWord);\n\t\t\t\ti += 2;\n\t\t\t} else {\n\t\t\t\toutput.push(s);\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\n\t\tresult = output;\n\t}\n\n\tif (segmentCache.size >= MAX_SEGMENT_CACHE_SIZE) {\n\t\tconst firstKey = segmentCache.keys().next().value;\n\t\tsegmentCache.delete(firstKey);\n\t}\n\n\tsegmentCache.set(cacheKey, result);\n\treturn result;\n}\n\nexport function buildXMLString(\n\ttype: string,\n\tattrs: Record<string, string | number>,\n\tchildren?: string\n) {\n\tlet attrString = '';\n\n\tfor (const [k, _v] of Object.entries(attrs)) {\n\t\tif (typeof _v !== 'undefined') {\n\t\t\tattrString += ` ${k}=\"${_v}\"`;\n\t\t}\n\t}\n\n\tif (children) {\n\t\treturn `<${type}${attrString}>${children}</${type}>`;\n\t}\n\treturn `<${type}${attrString}/>`;\n}\n\nexport function createLRU<T>(max = 20) {\n\tconst store: Map<string, T> = new Map();\n\tfunction get(key: string): T | undefined {\n\t\tconst value = store.get(key);\n\t\tif (value === undefined) return undefined;\n\n\t\t// Move to end (most recently used)\n\t\tstore.delete(key);\n\t\tstore.set(key, value);\n\t\treturn value;\n\t}\n\tfunction set(key: string, value: T) {\n\t\tif (store.has(key)) {\n\t\t\tstore.delete(key);\n\t\t} else if (store.size >= max) {\n\t\t\tconst firstKey = store.keys().next().value;\n\t\t\tstore.delete(firstKey);\n\t\t}\n\n\t\tstore.set(key, value);\n\t}\n\tfunction clear() {\n\t\tstore.clear();\n\t}\n\n\treturn {\n\t\tset,\n\t\tget,\n\t\tclear\n\t};\n}\n\nexport function parseViewBox(viewBox?: string | null | undefined) {\n\treturn viewBox ? viewBox.split(/[, ]/).filter(Boolean).map(Number) : null;\n}\n\nexport function toString(x: unknown): string {\n\treturn Object.prototype.toString.call(x);\n}\n\nexport function isString(x: unknown): x is string {\n\treturn typeof x === 'string';\n}\n\nexport function isNumber(x: unknown): x is number {\n\treturn typeof x === 'number';\n}\n\nexport function isUndefined(x: unknown): x is undefined {\n\treturn typeof x === 'undefined';\n}\n\nexport function asPointPercentageLength(\n\tx: string | number,\n\tpropertyName?: string\n): number | `${number}%` | undefined {\n\tif (typeof x === 'number') {\n\t\treturn x;\n\t}\n\tif (x.endsWith('%')) {\n\t\tconst percentageValue = parseFloat(x.slice(0, -1));\n\t\tif (isNaN(percentageValue)) {\n\t\t\tconsole.warn(\n\t\t\t\t`Invalid value \"${x}\"${\n\t\t\t\t\ttypeof propertyName === 'string'\n\t\t\t\t\t\t? ` for \"${propertyName}\"`\n\t\t\t\t\t\t: ''\n\t\t\t\t}. Expected a percentage value (e.g., \"50%\").`\n\t\t\t);\n\t\t\treturn undefined;\n\t\t}\n\t\treturn `${percentageValue}%`;\n\t}\n\n\tconsole.warn(\n\t\t`Invalid value \"${x}\"${\n\t\t\ttypeof propertyName === 'string' ? ` for \"${propertyName}\"` : ''\n\t\t}. Expected a number or a percentage value (e.g., \"50%\").`\n\t);\n\treturn undefined;\n}\n\nexport function asPointAutoPercentageLength(\n\tx: string | number,\n\tpropertyName?: string\n): number | 'auto' | `${number}%` | undefined {\n\tif (typeof x === 'number') {\n\t\treturn x;\n\t}\n\tif (x === 'auto') {\n\t\treturn 'auto';\n\t}\n\tif (x.endsWith('%')) {\n\t\tconst percentageValue = parseFloat(x.slice(0, -1));\n\t\tif (isNaN(percentageValue)) {\n\t\t\tconsole.warn(\n\t\t\t\t`Invalid value \"${x}\"${\n\t\t\t\t\ttypeof propertyName === 'string'\n\t\t\t\t\t\t? ` for \"${propertyName}\"`\n\t\t\t\t\t\t: ''\n\t\t\t\t}. Expected a percentage value (e.g., \"50%\").`\n\t\t\t);\n\t\t\treturn undefined;\n\t\t}\n\t\treturn `${percentageValue}%`;\n\t}\n\n\tconsole.warn(\n\t\t`Invalid value \"${x}\"${\n\t\t\ttypeof propertyName === 'string' ? ` for \"${propertyName}\"` : ''\n\t\t}. Expected a number, \"auto\", or a percentage value (e.g., \"50%\").`\n\t);\n\treturn undefined;\n}\n\nexport function splitByBreakOpportunities(\n\tcontent: string,\n\twordBreak: string\n): {\n\twords: string[];\n\trequiredBreaks: boolean[];\n} {\n\tif (wordBreak === 'break-all') {\n\t\treturn { words: segment(content, 'grapheme'), requiredBreaks: [] };\n\t}\n\n\tif (wordBreak === 'keep-all') {\n\t\treturn { words: segment(content, 'word'), requiredBreaks: [] };\n\t}\n\n\tconst breaker = new LineBreaker(content);\n\tlet last = 0;\n\tlet bk = breaker.nextBreak();\n\tconst words = [];\n\tconst requiredBreaks = [false];\n\n\twhile (bk) {\n\t\tconst word = content.slice(last, bk.position);\n\t\twords.push(word);\n\n\t\tif (bk.required) {\n\t\t\trequiredBreaks.push(true);\n\t\t} else {\n\t\t\trequiredBreaks.push(false);\n\t\t}\n\n\t\tlast = bk.position;\n\t\tbk = breaker.nextBreak();\n\t}\n\n\treturn { words, requiredBreaks };\n}\n\nexport const midline = (s: string) => {\n\treturn s.replaceAll(\n\t\t/([A-Z])/g,\n\t\t(_, letter: string) => `-${letter.toLowerCase()}`\n\t);\n};\n\nexport function splitEffects(\n\tinput: string,\n\tseparator: string | RegExp = ','\n): string[] {\n\tconst result = [];\n\tlet l = 0;\n\tlet parenCount = 0;\n\tseparator = new RegExp(separator);\n\n\tfor (let i = 0; i < input.length; i++) {\n\t\tif (input[i] === '(') {\n\t\t\tparenCount++;\n\t\t} else if (input[i] === ')') {\n\t\t\tparenCount--;\n\t\t}\n\n\t\tif (parenCount === 0 && separator.test(input[i])) {\n\t\t\tresult.push(input.slice(l, i).trim());\n\t\t\tl = i + 1;\n\t\t}\n\t}\n\n\tresult.push(input.slice(l).trim());\n\n\treturn result;\n}\n","var e=(t,r)=>()=>(r||t((r={exports:{}}).exports,r),r.exports);var u=e((k,g)=>{g.exports=[\"em\",\"ex\",\"ch\",\"rem\",\"vh\",\"vw\",\"vmin\",\"vmax\",\"px\",\"mm\",\"cm\",\"in\",\"pt\",\"pc\",\"mozmm\"]});var a=e((z,v)=>{v.exports=[\"deg\",\"grad\",\"rad\",\"turn\"]});var c=e((L,w)=>{w.exports=[\"dpi\",\"dpcm\",\"dppx\"]});var h=e(($,y)=>{y.exports=[\"Hz\",\"kHz\"]});var m=e((j,b)=>{b.exports=[\"s\",\"ms\"]});var q=u(),f=a(),p=c(),l=h(),d=m();function s(t){if(/\\.\\D?$/.test(t))throw new Error(\"The dot should be followed by a number\");if(/^[+-]{2}/.test(t))throw new Error(\"Only one leading +/- is allowed\");if(x(t)>1)throw new Error(\"Only one dot is allowed\");if(/%$/.test(t)){this.type=\"percentage\",this.value=o(t),this.unit=\"%\";return}var r=O(t);if(!r){this.type=\"number\",this.value=o(t);return}this.type=F(r),this.value=o(t.substr(0,t.length-r.length)),this.unit=r}s.prototype.valueOf=function(){return this.value};s.prototype.toString=function(){return this.value+(this.unit||\"\")};function U(t){return new s(t)}function x(t){var r=t.match(/\\./g);return r?r.length:0}function o(t){var r=parseFloat(t);if(isNaN(r))throw new Error(\"Invalid number: \"+t);return r}var E=[].concat(f,l,q,p,d);function O(t){var r=t.match(/\\D+$/),n=r&&r[0];if(n&&E.indexOf(n)===-1)throw new Error(\"Invalid unit: \"+n);return n}var D=Object.assign(i(f,\"angle\"),i(l,\"frequency\"),i(p,\"resolution\"),i(d,\"time\"));function i(t,r){return Object.fromEntries(t.map(n=>[n,r]))}function F(t){return D[t]||\"length\"}export{U as default};\n","import { type Yoga } from 'yoga-layout/load';\nimport { type Node } from 'yoga-layout';\nimport { type InitInput } from './yoga.external.js';\n\nexport { Yoga as TYoga, Node as YogaNode, type InitInput };\n\nexport function init(input: InitInput) {\n\tif (process.env.SATORI_STANDALONE === '1') {\n\t\treturn import('./yoga.external.js').then(mod => mod.init(input));\n\t} else {\n\t\t// Do nothing. It's bundled.\n\t}\n}\n\nexport function getYoga() {\n\tif (process.env.SATORI_STANDALONE === '1') {\n\t\treturn import('./yoga.external.js').then(mod => mod.getYoga());\n\t} else {\n\t\treturn import('./yoga.bundled.js').then(mod => mod.getYoga());\n\t}\n}\n\nif (process.env.SATORI_STANDALONE !== '1') {\n\t// Preload Yoga in bundled mode.\n\timport('./yoga.bundled.js');\n}\n","/**\n * This module is used to fetch image from the given URL and resolve it as\n * base64 inlined data URI, so the toolchain can process it.\n * The image data will be cached in a LRU so we don't need to fetch it again\n * in new render processes. But to invalidate the cache the workaround is to\n * add a random query string to the URL.\n * TODO: We might want another option to disable image caching by default.\n */\n\nconst AVIF = 'image/avif';\nconst WEBP = 'image/webp';\nconst APNG = 'image/apng';\nconst PNG = 'image/png';\nconst JPEG = 'image/jpeg';\nconst GIF = 'image/gif';\nconst SVG = 'image/svg+xml';\n\nfunction parseJPEG(buf: ArrayBuffer) {\n\tconst view = new DataView(buf);\n\n\t// Skip magic bytes\n\tlet offset = 4;\n\n\tconst len = view.byteLength;\n\twhile (offset < len) {\n\t\tconst i = view.getUint16(offset, false);\n\n\t\tif (i > len) {\n\t\t\tthrow new TypeError('Invalid JPEG');\n\t\t}\n\n\t\tconst next = view.getUint8(i + 1 + offset);\n\t\tif (next === 0xc0 || next === 0xc1 || next === 0xc2) {\n\t\t\treturn [\n\t\t\t\tview.getUint16(i + 7 + offset, false),\n\t\t\t\tview.getUint16(i + 5 + offset, false)\n\t\t\t] as [number, number];\n\t\t}\n\n\t\t// TODO: Support orientations from EXIF.\n\n\t\toffset += i + 2;\n\t}\n\n\tthrow new TypeError('Invalid JPEG');\n}\n\nfunction parseGIF(buf: ArrayBuffer) {\n\tconst view = new Uint8Array(buf.slice(6, 10));\n\treturn [view[0] | (view[1] << 8), view[2] | (view[3] << 8)] as [\n\t\tnumber,\n\t\tnumber\n\t];\n}\n\nfunction parsePNG(buf: ArrayBuffer) {\n\tconst v = new DataView(buf);\n\treturn [v.getUint16(18, false), v.getUint16(22, false)] as [number, number];\n}\n\nimport { createLRU, parseViewBox } from '../utils.js';\n\ntype ResolvedImageData = [string, number?, number?] | readonly [];\nexport const cache = createLRU<ResolvedImageData>(500);\nexport const inflightRequests = new Map<string, Promise<ResolvedImageData>>();\n\nconst ALLOWED_IMAGE_TYPES = [PNG, APNG, JPEG, GIF, SVG];\n\n// Pre-compiled regex patterns for SVG parsing\nconst SVG_ATTRS_REGEX = /<svg[^>]*>/i;\nconst VIEWBOX_REGEX = /viewBox=['\"]([^'\"]+)['\"]/;\nconst WIDTH_REGEX = /width=['\"](\\d*\\.?\\d+)['\"]/;\nconst HEIGHT_REGEX = /height=['\"](\\d*\\.?\\d+)['\"]/;\n\nfunction arrayBufferToBase64(buffer) {\n\tconst bytes = new Uint8Array(buffer);\n\tconst CHUNK_SIZE = 0x8000; // 32KB chunks\n\tlet binary = '';\n\n\tfor (let i = 0; i < bytes.length; i += CHUNK_SIZE) {\n\t\tconst chunk = bytes.subarray(i, Math.min(i + CHUNK_SIZE, bytes.length));\n\t\tbinary += String.fromCharCode(...chunk);\n\t}\n\n\treturn btoa(binary);\n}\n\nfunction base64ToArrayBuffer(base64: string): ArrayBuffer {\n\tlet binaryString = atob(base64);\n\tlet len = binaryString.length;\n\tlet bytes = new Uint8Array(len);\n\tfor (let i = 0; i < len; i++) {\n\t\tbytes[i] = binaryString.charCodeAt(i);\n\t}\n\treturn bytes.buffer;\n}\n\nfunction parseSvgImageSize(src: string, data: string) {\n\t// Parse the SVG image size\n\tconst svgMatch = data.match(SVG_ATTRS_REGEX);\n\tif (!svgMatch) throw new Error(`Failed to parse SVG from ${src}`);\n\n\tconst svgTag = svgMatch[0];\n\tconst viewBoxMatch = VIEWBOX_REGEX.exec(svgTag);\n\tconst widthMatch = WIDTH_REGEX.exec(svgTag);\n\tconst heightMatch = HEIGHT_REGEX.exec(svgTag);\n\n\tlet viewBox = viewBoxMatch ? parseViewBox(viewBoxMatch[1]) : null;\n\n\tif (!viewBox && (!widthMatch || !heightMatch)) {\n\t\tthrow new Error(`Failed to parse SVG from ${src}: missing \"viewBox\"`);\n\t}\n\n\tconst size = viewBox\n\t\t? [viewBox[2], viewBox[3]]\n\t\t: [+widthMatch[1], +heightMatch[1]];\n\n\tconst ratio = size[0] / size[1];\n\tconst imageSize: [number, number] =\n\t\twidthMatch && heightMatch\n\t\t\t? [+widthMatch[1], +heightMatch[1]]\n\t\t\t: widthMatch\n\t\t\t? [+widthMatch[1], +widthMatch[1] / ratio]\n\t\t\t: heightMatch\n\t\t\t? [+heightMatch[1] * ratio, +heightMatch[1]]\n\t\t\t: [size[0], size[1]];\n\n\treturn imageSize;\n}\n\nfunction arrayBufferToDataUri(data: ArrayBuffer) {\n\tlet imageSize: [number, number];\n\n\tconst imageType = detectContentType(new Uint8Array(data));\n\n\tswitch (imageType) {\n\t\tcase PNG:\n\t\tcase APNG:\n\t\t\timageSize = parsePNG(data);\n\t\t\tbreak;\n\t\tcase GIF:\n\t\t\timageSize = parseGIF(data);\n\t\t\tbreak;\n\t\tcase JPEG:\n\t\t\timageSize = parseJPEG(data);\n\t\t\tbreak;\n\t}\n\n\tif (!ALLOWED_IMAGE_TYPES.includes(imageType)) {\n\t\tthrow new Error(`Unsupported image type: ${imageType || 'unknown'}`);\n\t}\n\treturn [\n\t\t`data:${imageType};base64,${arrayBufferToBase64(data)}`,\n\t\timageSize\n\t] as const;\n}\n\nexport async function resolveImageData(\n\tsrc: string | ArrayBuffer\n): Promise<ResolvedImageData> {\n\tif (!src) {\n\t\tthrow new Error('Image source is not provided.');\n\t}\n\n\t// ArrayBuffer\n\tif (typeof src === 'object') {\n\t\tconst [newSrc, imageSize] = arrayBufferToDataUri(src);\n\t\treturn [newSrc, ...imageSize] as ResolvedImageData;\n\t}\n\n\tif (\n\t\t(src.startsWith('\"') && src.endsWith('\"')) ||\n\t\t(src.startsWith(\"'\") && src.endsWith(\"'\"))\n\t) {\n\t\tsrc = src.slice(1, -1);\n\t}\n\n\t// Throw error if the image source is not an absolute URL in server environment\n\t// Should be after slicing quotes to avoid throwing error too early\n\tif (typeof window === 'undefined') {\n\t\tif (!src.startsWith('http') && !src.startsWith('data:')) {\n\t\t\tthrow new Error(`Image source must be an absolute URL: ${src}`);\n\t\t}\n\t}\n\n\tif (src.startsWith('data:')) {\n\t\tlet decodedURI: { imageType; encodingType; dataString };\n\n\t\ttry {\n\t\t\tdecodedURI =\n\t\t\t\t/data:(?<imageType>[a-z/+]+)(;[^;=]+=[^;=]+)*?(;(?<encodingType>[^;,]+))?,(?<dataString>.*)/g.exec(\n\t\t\t\t\tsrc\n\t\t\t\t).groups as typeof decodedURI;\n\t\t} catch (err) {\n\t\t\tconsole.warn('Image data URI resolved without size:' + src);\n\t\t\treturn [src];\n\t\t}\n\n\t\tconst { imageType, encodingType, dataString } = decodedURI;\n\t\tif (imageType === SVG) {\n\t\t\tconst utf8Src =\n\t\t\t\tencodingType === 'base64'\n\t\t\t\t\t? atob(dataString)\n\t\t\t\t\t: decodeURIComponent(dataString.replace(/ /g, '%20'));\n\t\t\tconst base64Src =\n\t\t\t\tencodingType === 'base64'\n\t\t\t\t\t? src\n\t\t\t\t\t: `data:image/svg+xml;base64,${btoa(utf8Src)}`;\n\t\t\tlet imageSize = parseSvgImageSize(src, utf8Src);\n\t\t\tcache.set(src, [base64Src, ...imageSize]);\n\t\t\treturn [base64Src, ...imageSize];\n\t\t} else if (encodingType === 'base64') {\n\t\t\tlet imageSize: [number, number];\n\t\t\tconst data = base64ToArrayBuffer(dataString);\n\t\t\tswitch (imageType) {\n\t\t\t\tcase PNG:\n\t\t\t\tcase APNG:\n\t\t\t\t\timageSize = parsePNG(data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase GIF:\n\t\t\t\t\timageSize = parseGIF(data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase JPEG:\n\t\t\t\t\timageSize = parseJPEG(data);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcache.set(src, [src, ...imageSize]);\n\t\t\treturn [src, ...imageSize];\n\t\t} else {\n\t\t\tconsole.warn('Image data URI resolved without size:' + src);\n\t\t\tcache.set(src, [src]);\n\t\t\treturn [src];\n\t\t}\n\t}\n\n\tif (!globalThis.fetch) {\n\t\tthrow new Error('`fetch` is required to be polyfilled to load images.');\n\t}\n\n\tif (inflightRequests.has(src)) {\n\t\treturn inflightRequests.get(src);\n\t}\n\tconst cached = cache.get(src);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\tconst url = src;\n\tconst promise = fetch(url)\n\t\t.then((res): Promise<string | ArrayBuffer> => {\n\t\t\tconst type = res.headers.get('content-type');\n\n\t\t\t// Handle SVG specially\n\t\t\tif (type === 'image/svg+xml' || type === 'application/svg+xml') {\n\t\t\t\treturn res.text();\n\t\t\t}\n\n\t\t\treturn res.arrayBuffer();\n\t\t})\n\t\t.then(data => {\n\t\t\tif (typeof data === 'string') {\n\t\t\t\ttry {\n\t\t\t\t\tconst newSrc = `data:image/svg+xml;base64,${btoa(data)}`;\n\t\t\t\t\t// Parse the SVG image size\n\t\t\t\t\tconst imageSize = parseSvgImageSize(url, data);\n\t\t\t\t\treturn [newSrc, ...imageSize] as ResolvedImageData;\n\t\t\t\t} catch (e) {\n\t\t\t\t\tthrow new Error(`Failed to parse SVG image: ${e.message}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst [newSrc, imageSize] = arrayBufferToDataUri(data);\n\t\t\treturn [newSrc, ...imageSize] as ResolvedImageData;\n\t\t})\n\t\t.then(result => {\n\t\t\tcache.set(url, result);\n\t\t\treturn result;\n\t\t})\n\t\t.catch(err => {\n\t\t\tconsole.error(`Can't load image ${url}: ` + err.message);\n\t\t\tcache.set(url, []);\n\t\t\treturn [] as const;\n\t\t});\n\n\tinflightRequests.set(url, promise);\n\treturn promise;\n}\n\n/**\n * Inspects the first few bytes of a buffer to determine if\n * it matches the \"magic number\" of known file signatures.\n * https://en.wikipedia.org/wiki/List_of_file_signatures\n */\nfunction detectContentType(buffer: Uint8Array) {\n\tif ([0xff, 0xd8, 0xff].every((b, i) => buffer[i] === b)) {\n\t\treturn JPEG;\n\t}\n\tif (\n\t\t[0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a].every(\n\t\t\t(b, i) => buffer[i] === b\n\t\t)\n\t) {\n\t\tif (detectAPNG(buffer)) {\n\t\t\treturn APNG;\n\t\t}\n\t\treturn PNG;\n\t}\n\tif ([0x47, 0x49, 0x46, 0x38].every((b, i) => buffer[i] === b)) {\n\t\treturn GIF;\n\t}\n\tif (\n\t\t[0x52, 0x49, 0x46, 0x46, 0, 0, 0, 0, 0x57, 0x45, 0x42, 0x50].every(\n\t\t\t(b, i) => !b || buffer[i] === b\n\t\t)\n\t) {\n\t\treturn WEBP;\n\t}\n\tif ([0x3c, 0x3f, 0x78, 0x6d, 0x6c].every((b, i) => buffer[i] === b)) {\n\t\treturn SVG;\n\t}\n\tif (\n\t\t[0, 0, 0, 0, 0x66, 0x74, 0x79, 0x70, 0x61, 0x76, 0x69, 0x66].every(\n\t\t\t(b, i) => !b || buffer[i] === b\n\t\t)\n\t) {\n\t\treturn AVIF;\n\t}\n\treturn null;\n}\n\nfunction detectAPNG(bytes: Uint8Array) {\n\tconst dv = new DataView(bytes.buffer);\n\tlet type: string,\n\t\tlength: number,\n\t\toff = 8,\n\t\tisAPNG = false;\n\twhile (!isAPNG && type !== 'IEND' && off < bytes.length) {\n\t\tlength = dv.getUint32(off);\n\t\tconst chars = bytes.subarray(off + 4, off + 8);\n\t\ttype = String.fromCharCode(...chars);\n\t\tisAPNG = type === 'acTL';\n\t\toff += 12 + length;\n\t}\n\treturn isAPNG;\n}\n","import type { ReactElement, ReactNode } from 'react';\nimport { resolveImageData, cache } from './image.js';\nimport { isReactElement, parseViewBox, midline } from '../utils.js';\n\n// Based on\n// https://raw.githubusercontent.com/facebook/react/master/packages/react-dom/src/shared/possibleStandardNames.js\nconst ATTRIBUTE_MAPPING = {\n\taccentHeight: 'accent-height',\n\talignmentBaseline: 'alignment-baseline',\n\tarabicForm: 'arabic-form',\n\tbaselineShift: 'baseline-shift',\n\tcapHeight: 'cap-height',\n\tclipPath: 'clip-path',\n\tclipRule: 'clip-rule',\n\tcolorInterpolation: 'color-interpolation',\n\tcolorInterpolationFilters: 'color-interpolation-filters',\n\tcolorProfile: 'color-profile',\n\tcolorRendering: 'color-rendering',\n\tdominantBaseline: 'dominant-baseline',\n\tenableBackground: 'enable-background',\n\tfillOpacity: 'fill-opacity',\n\tfillRule: 'fill-rule',\n\tfloodColor: 'flood-color',\n\tfloodOpacity: 'flood-opacity',\n\tfontFamily: 'font-family',\n\tfontSize: 'font-size',\n\tfontSizeAdjust: 'font-size-adjust',\n\tfontStretch: 'font-stretch',\n\tfontStyle: 'font-style',\n\tfontVariant: 'font-variant',\n\tfontWeight: 'font-weight',\n\tglyphName: 'glyph-name',\n\tglyphOrientationHorizontal: 'glyph-orientation-horizontal',\n\tglyphOrientationVertical: 'glyph-orientation-vertical',\n\thorizAdvX: 'horiz-adv-x',\n\thorizOriginX: 'horiz-origin-x',\n\thref: 'href',\n\timageRendering: 'image-rendering',\n\tletterSpacing: 'letter-spacing',\n\tlightingColor: 'lighting-color',\n\tmarkerEnd: 'marker-end',\n\tmarkerMid: 'marker-mid',\n\tmarkerStart: 'marker-start',\n\toverlinePosition: 'overline-position',\n\toverlineThickness: 'overline-thickness',\n\tpaintOrder: 'paint-order',\n\tpanose1: 'panose-1',\n\tpointerEvents: 'pointer-events',\n\trenderingIntent: 'rendering-intent',\n\tshapeRendering: 'shape-rendering',\n\tstopColor: 'stop-color',\n\tstopOpacity: 'stop-opacity',\n\tstrikethroughPosition: 'strikethrough-position',\n\tstrikethroughThickness: 'strikethrough-thickness',\n\tstrokeDasharray: 'stroke-dasharray',\n\tstrokeDashoffset: 'stroke-dashoffset',\n\tstrokeLinecap: 'stroke-linecap',\n\tstrokeLinejoin: 'stroke-linejoin',\n\tstrokeMiterlimit: 'stroke-miterlimit',\n\tstrokeOpacity: 'stroke-opacity',\n\tstrokeWidth: 'stroke-width',\n\ttextAnchor: 'text-anchor',\n\ttextDecoration: 'text-decoration',\n\ttextRendering: 'text-rendering',\n\tunderlinePosition: 'underline-position',\n\tunderlineThickness: 'underline-thickness',\n\tunicodeBidi: 'unicode-bidi',\n\tunicodeRange: 'unicode-range',\n\tunitsPerEm: 'units-per-em',\n\tvAlphabetic: 'v-alphabetic',\n\tvHanging: 'v-hanging',\n\tvIdeographic: 'v-ideographic',\n\tvMathematical: 'v-mathematical',\n\tvectorEffect: 'vector-effect',\n\tvertAdvY: 'vert-adv-y',\n\tvertOriginX: 'vert-origin-x',\n\tvertOriginY: 'vert-origin-y',\n\twordSpacing: 'word-spacing',\n\twritingMode: 'writing-mode',\n\txHeight: 'x-height',\n\txlinkActuate: 'xlink:actuate',\n\txlinkArcrole: 'xlink:arcrole',\n\txlinkHref: 'xlink:href',\n\txlinkRole: 'xlink:role',\n\txlinkShow: 'xlink:show',\n\txlinkTitle: 'xlink:title',\n\txlinkType: 'xlink:type',\n\txmlBase: 'xml:base',\n\txmlLang: 'xml:lang',\n\txmlSpace: 'xml:space',\n\txmlnsXlink: 'xmlns:xlink'\n} as const;\n\n// From https://github.com/yoksel/url-encoder/blob/master/src/js/script.js\nconst SVGSymbols = /[\\r\\n%#()<>?[\\\\\\]^`{|}\"']/g;\n\nfunction translateSVGNodeToSVGString(\n\tnode: ReactElement | string | (ReactElement | string)[],\n\tinheritedColor: string\n): string {\n\tif (!node) return '';\n\tif (Array.isArray(node)) {\n\t\treturn node\n\t\t\t.map(n => translateSVGNodeToSVGString(n, inheritedColor))\n\t\t\t.join('');\n\t}\n\tif (typeof node !== 'object') return String(node);\n\n\tconst type = node.type;\n\tif (type === 'text') {\n\t\tthrow new Error(\n\t\t\t'<text> nodes are not currently supported, please convert them to <path>'\n\t\t);\n\t}\n\n\tconst { children, style, ...restProps } = node.props || {};\n\tconst currentColor = style?.color || inheritedColor;\n\n\tconst attrs = `${Object.entries(restProps)\n\t\t.map(([k, _v]) => {\n\t\t\tif (typeof _v === 'string' && _v.toLowerCase() === 'currentcolor') {\n\t\t\t\t_v = currentColor;\n\t\t\t}\n\n\t\t\tif ((k === 'href' || k === 'xlinkHref') && type === 'image') {\n\t\t\t\treturn ` ${ATTRIBUTE_MAPPING[k] || k}=\"${\n\t\t\t\t\tcache.get(_v as string)[0]\n\t\t\t\t}\"`;\n\t\t\t}\n\t\t\treturn ` ${ATTRIBUTE_MAPPING[k] || k}=\"${_v}\"`;\n\t\t})\n\t\t.join('')}`;\n\n\tconst styles = style\n\t\t? ` style=\"${Object.entries(style)\n\t\t\t\t.map(([k, _v]) => `${midline(k)}:${_v}`)\n\t\t\t\t.join(';')}\"`\n\t\t: '';\n\n\treturn `<${type}${attrs}${styles}>${translateSVGNodeToSVGString(\n\t\tchildren,\n\t\tcurrentColor\n\t)}</${type}>`;\n}\n/**\n * pre process node and resolve absolute link to img data for image element\n * @param node ReactNode\n * @returns\n */\nexport async function preProcessNode(node: ReactNode) {\n\tconst set = new Set<string | Buffer | ArrayBuffer>();\n\tconst walk = (_node: ReactNode) => {\n\t\tif (!_node) return;\n\t\tif (!isReactElement(_node)) return;\n\n\t\tif (Array.isArray(_node)) {\n\t\t\t_node.forEach(v => walk(v));\n\t\t\treturn;\n\t\t} else if (typeof _node === 'object') {\n\t\t\tif (_node.type === 'image') {\n\t\t\t\tconst imageSrc = _node.props.href || _node.props.xlinkHref;\n\t\t\t\tif (imageSrc) {\n\t\t\t\t\tif (set.has(imageSrc)) {\n\t\t\t\t\t\t// do nothing\n\t\t\t\t\t} else {\n\t\t\t\t\t\tset.add(imageSrc);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (_node.type === 'img') {\n\t\t\t\tif (set.has(_node.props.src)) {\n\t\t\t\t\t// do nothing\n\t\t\t\t} else {\n\t\t\t\t\tset.add(_node.props.src);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// do nothing\n\t\t\t}\n\t\t}\n\n\t\tArray.isArray(_node.props.children)\n\t\t\t? _node.props.children.map(c => walk(c))\n\t\t\t: walk(_node.props.children);\n\t};\n\n\twalk(node);\n\n\treturn Promise.all(Array.from(set).map(s => resolveImageData(s)));\n}\n\nexport async function SVGNodeToImage(\n\tnode: ReactElement,\n\tinheritedColor: string\n): Promise<string> {\n\tlet {\n\t\tviewBox,\n\t\tviewbox,\n\t\twidth,\n\t\theight,\n\t\tclassName,\n\t\tstyle,\n\t\tchildren,\n\t\t...restProps\n\t} = node.props || {};\n\n\tviewBox ||= viewbox;\n\n\t// We directly assign the xmlns attribute here to deduplicate.\n\trestProps.xmlns = 'http://www.w3.org/2000/svg';\n\n\tconst currentColor = style?.color || inheritedColor;\n\tconst viewBoxSize = parseViewBox(viewBox);\n\n\t// ratio = height / width\n\tconst ratio = viewBoxSize ? viewBoxSize[3] / viewBoxSize[2] : null;\n\twidth = width || (ratio && height) ? height / ratio : null;\n\theight = height || (ratio && width) ? width * ratio : null;\n\n\trestProps.width = width;\n\trestProps.height = height;\n\tif (viewBox) restProps.viewBox = viewBox;\n\n\treturn `data:image/svg+xml;utf8,${`<svg ${Object.entries(restProps)\n\t\t.map(([k, _v]) => {\n\t\t\tif (typeof _v === 'string' && _v.toLowerCase() === 'currentcolor') {\n\t\t\t\t_v = currentColor;\n\t\t\t}\n\t\t\treturn ` ${ATTRIBUTE_MAPPING[k] || k}=\"${_v}\"`;\n\t\t})\n\t\t.join('')}>${translateSVGNodeToSVGString(\n\t\tchildren,\n\t\tcurrentColor\n\t)}</svg>`.replace(SVGSymbols, encodeURIComponent)}`;\n}\n","/**\n * Pre-defined styles for elements. Here we hand pick some from Chromium's\n * default styles:\n * https://chromium.googlesource.com/chromium/blink/+/master/Source/core/css/html.css\n *\n * We try to only include commonly used, styling elements rather than semantic elements.\n */\n\nconst DEFAULT_DISPLAY = 'flex';\n\nexport default {\n\t// Generic block-level elements\n\tp: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\tmarginTop: '1em',\n\t\tmarginBottom: '1em'\n\t},\n\tdiv: {\n\t\tdisplay: DEFAULT_DISPLAY\n\t},\n\tblockquote: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\tmarginTop: '1em',\n\t\tmarginBottom: '1em',\n\t\tmarginLeft: 40,\n\t\tmarginRight: 40\n\t},\n\tcenter: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\ttextAlign: 'center'\n\t},\n\thr: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\tmarginTop: '0.5em',\n\t\tmarginBottom: '0.5em',\n\t\tmarginLeft: 'auto',\n\t\tmarginRight: 'auto',\n\t\tborderWidth: 1,\n\t\t// We don't have `inset`\n\t\tborderStyle: 'solid'\n\t},\n\t// Heading elements\n\th1: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\tfontSize: '2em',\n\t\tmarginTop: '0.67em',\n\t\tmarginBottom: '0.67em',\n\t\tmarginLeft: 0,\n\t\tmarginRight: 0,\n\t\tfontWeight: 'bold'\n\t},\n\th2: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\tfontSize: '1.5em',\n\t\tmarginTop: '0.83em',\n\t\tmarginBottom: '0.83em',\n\t\tmarginLeft: 0,\n\t\tmarginRight: 0,\n\t\tfontWeight: 'bold'\n\t},\n\th3: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\tfontSize: '1.17em',\n\t\tmarginTop: '1em',\n\t\tmarginBottom: '1em',\n\t\tmarginLeft: 0,\n\t\tmarginRight: 0,\n\t\tfontWeight: 'bold'\n\t},\n\th4: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\tmarginTop: '1.33em',\n\t\tmarginBottom: '1.33em',\n\t\tmarginLeft: 0,\n\t\tmarginRight: 0,\n\t\tfontWeight: 'bold'\n\t},\n\th5: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\tfontSize: '0.83em',\n\t\tmarginTop: '1.67em',\n\t\tmarginBottom: '1.67em',\n\t\tmarginLeft: 0,\n\t\tmarginRight: 0,\n\t\tfontWeight: 'bold'\n\t},\n\th6: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\tfontSize: '0.67em',\n\t\tmarginTop: '2.33em',\n\t\tmarginBottom: '2.33em',\n\t\tmarginLeft: 0,\n\t\tmarginRight: 0,\n\t\tfontWeight: 'bold'\n\t},\n\t// Tables\n\t// Lists\n\t// Form elements\n\t// Inline elements\n\tu: {\n\t\ttextDecoration: 'underline'\n\t},\n\tstrong: {\n\t\tfontWeight: 'bold'\n\t},\n\tb: {\n\t\tfontWeight: 'bold'\n\t},\n\ti: {\n\t\tfontStyle: 'italic'\n\t},\n\tem: {\n\t\tfontStyle: 'italic'\n\t},\n\tcode: {\n\t\tfontFamily: 'monospace'\n\t},\n\tkbd: {\n\t\tfontFamily: 'monospace'\n\t},\n\tpre: {\n\t\tdisplay: DEFAULT_DISPLAY,\n\t\tfontFamily: 'monospace',\n\t\twhiteSpace: 'pre',\n\t\tmarginTop: '1em',\n\t\tmarginBottom: '1em'\n\t},\n\tmark: {\n\t\tbackgroundColor: 'yellow',\n\t\tcolor: 'black'\n\t},\n\tbig: {\n\t\tfontSize: 'larger'\n\t},\n\tsmall: {\n\t\tfontSize: 'smaller'\n\t},\n\ts: {\n\t\ttextDecoration: 'line-through'\n\t}\n};\n","import { SerializedStyle } from './expand.js';\n\nconst list = new Set([\n\t'color',\n\t'font',\n\t'fontFamily',\n\t'fontSize',\n\t'fontStyle',\n\t'fontWeight',\n\t'letterSpacing',\n\t'lineHeight',\n\t'textAlign',\n\t'textIndent',\n\t'textTransform',\n\t'textShadowOffset',\n\t'textShadowColor',\n\t'textShadowRadius',\n\t'WebkitTextStrokeWidth',\n\t'WebkitTextStrokeColor',\n\t'textDecorationLine',\n\t'textDecorationStyle',\n\t'textDecorationColor',\n\t'textDecorationSkipInk',\n\t'whiteSpace',\n\t'transform',\n\t'wordBreak',\n\t'tabSize',\n\n\t// Special case: SVG doesn't apply these to children elements so we need to\n\t// make it inheritable here.\n\t'opacity',\n\t'filter',\n\n\t// Special properties of Satori:\n\t'_viewportWidth',\n\t'_viewportHeight',\n\t'_inheritedClipPathId',\n\t'_inheritedMaskId',\n\t'_inheritedBackgroundClipTextPath',\n\t'_inheritedBackgroundClipTextHasBackground'\n]);\n\nexport default function inheritable(style: SerializedStyle): SerializedStyle {\n\tconst inheritedStyle: SerializedStyle = {};\n\tfor (const prop in style) {\n\t\t// CSS custom properties (--*) always inherit\n\t\tif (list.has(prop) || prop.startsWith('--')) {\n\t\t\tinheritedStyle[prop] = style[prop];\n\t\t}\n\t}\n\treturn inheritedStyle;\n}\n","/**\n * This module expands the CSS properties to get rid of shorthands, as well as\n * cleaning up some properties.\n */\n\nimport { getPropertyName, getStylesForProperty } from 'css-to-react-native';\nimport { parseElementStyle } from 'css-background-parser';\nimport { parse as parseBoxShadow } from 'css-box-shadow';\nimport cssColorParse from 'parse-css-color';\n\nimport CssDimension from '../vendor/parse-css-dimension/index.js';\nimport parseTransformOrigin, {\n\tParsedTransformOrigin\n} from '../transform-origin.js';\nimport { isString, lengthToNumber, v, splitEffects } from '../utils.js';\nimport { MaskProperty, parseMask } from '../parser/mask.js';\nimport { FontWeight, FontStyle } from '../font.js';\nimport {\n\textractCustomProperties,\n\tmergeVariables,\n\tresolveVariables,\n\tCSSVariables\n} from './variables.js';\n\n// https://react-cn.github.io/react/tips/style-props-value-px.html\nconst optOutPx = new Set([\n\t'flex',\n\t'flexGrow',\n\t'flexShrink',\n\t'flexBasis',\n\t'fontWeight',\n\t'lineHeight',\n\t'opacity',\n\t'scale',\n\t'scaleX',\n\t'scaleY'\n]);\nconst keepNumber = new Set(['lineHeight']);\n\nfunction handleFallbackColor(\n\tprop: string,\n\tparsed: Record<string, string>,\n\trawInput: string,\n\tcurrentColor: string\n) {\n\tif (\n\t\tprop === 'textDecoration' &&\n\t\t!rawInput.includes(parsed.textDecorationColor)\n\t) {\n\t\tparsed.textDecorationColor = currentColor;\n\t}\n\treturn parsed;\n}\n\nfunction purify(name: string, value?: string | number) {\n\tconst num = Number(value);\n\tif (isNaN(num)) return value;\n\tif (!optOutPx.has(name)) return num + 'px';\n\tif (keepNumber.has(name)) return num;\n\treturn String(value);\n}\n\nfunction handleSpecialCase(\n\tname: string,\n\tvalue: string | number,\n\tcurrentColor: string\n) {\n\tif (name === 'zIndex') {\n\t\tconsole.warn('`z-index` is currently not supported.');\n\t\treturn { [name]: value };\n\t}\n\n\tif (name === 'lineHeight') {\n\t\treturn { lineHeight: purify(name, value) };\n\t}\n\n\tif (name === 'fontFamily') {\n\t\treturn {\n\t\t\tfontFamily: (value as string).split(',').map(_v => {\n\t\t\t\treturn _v\n\t\t\t\t\t.trim()\n\t\t\t\t\t.replace(/(^['\"])|(['\"]$)/g, '')\n\t\t\t\t\t.toLocaleLowerCase();\n\t\t\t})\n\t\t};\n\t}\n\n\tif (name === 'borderRadius') {\n\t\tif (typeof value !== 'string' || !value.includes('/')) {\n\t\t\t// Regular border radius\n\t\t\treturn;\n\t\t}\n\t\t// Support the `border-radius: 10px / 20px` syntax.\n\t\tconst [horizontal, vertical] = value.split('/');\n\t\tconst vh = getStylesForProperty(name, horizontal, true);\n\t\tconst vv = getStylesForProperty(name, vertical, true);\n\t\tfor (const k in vh) {\n\t\t\tvv[k] = purify(name, vh[k]) + ' ' + purify(name, vv[k]);\n\t\t}\n\t\treturn vv;\n\t}\n\n\tif (/^border(Top|Right|Bottom|Left)?$/.test(name)) {\n\t\tconst resolved = getStylesForProperty('border', value, true);\n\n\t\t// Border width should be default to 3px (medium) instead of 1px:\n\t\t// https://w3c.github.io/csswg-drafts/css-backgrounds-3/#border-width\n\t\t// Although on Chrome it will be displayed as 1.5px but let's stick to the\n\t\t// spec.\n\t\tif (resolved.borderWidth === 1 && !String(value).includes('1px')) {\n\t\t\tresolved.borderWidth = 3;\n\t\t}\n\n\t\t// A trick to fix `border: 1px solid` to not use `black` but the inherited\n\t\t// `color` value. This is necessary because css-to-react-native automatically\n\t\t// fallbacks to default color values.\n\t\tif (\n\t\t\tresolved.borderColor === 'black' &&\n\t\t\t!String(value).includes('black')\n\t\t) {\n\t\t\tresolved.borderColor = currentColor;\n\t\t}\n\n\t\tconst purified = {\n\t\t\tWidth: purify(name + 'Width', resolved.borderWidth),\n\t\t\tStyle: v(\n\t\t\t\tresolved.borderStyle,\n\t\t\t\t{\n\t\t\t\t\tsolid: 'solid',\n\t\t\t\t\tdashed: 'dashed'\n\t\t\t\t},\n\t\t\t\t'solid',\n\t\t\t\tname + 'Style'\n\t\t\t),\n\t\t\tColor: resolved.borderColor\n\t\t};\n\n\t\tconst full = {};\n\t\tfor (const k of name === 'border'\n\t\t\t? ['Top', 'Right', 'Bottom', 'Left']\n\t\t\t: [name.slice(6)]) {\n\t\t\tfor (const p in purified) {\n\t\t\t\tfull['border' + k + p] = purified[p];\n\t\t\t}\n\t\t}\n\t\treturn full;\n\t}\n\n\tif (name === 'boxShadow') {\n\t\tif (!value) {\n\t\t\tthrow new Error('Invalid `boxShadow` value: \"' + value + '\".');\n\t\t}\n\t\treturn {\n\t\t\t[name]: typeof value === 'string' ? parseBoxShadow(value) : value\n\t\t};\n\t}\n\n\tif (name === 'transform') {\n\t\tif (typeof value !== 'string')\n\t\t\tthrow new Error('Invalid `transform` value.');\n\t\t// To support percentages in transform (which is not supported in RN), we\n\t\t// replace them with random symbols and then replace them back after parsing.\n\t\tconst symbols = {};\n\t\tconst replaced = value.replace(/(-?[\\d.]+%)/g, (_, _v) => {\n\t\t\tconst symbol = ~~(Math.random() * 1e9);\n\t\t\tsymbols[symbol] = _v;\n\t\t\treturn symbol + 'px';\n\t\t});\n\t\tconst parsed = getStylesForProperty('transform', replaced, true);\n\t\tfor (const t of parsed.transform) {\n\t\t\tfor (const k in t) {\n\t\t\t\tif (symbols[t[k]]) {\n\t\t\t\t\tt[k] = symbols[t[k]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn parsed;\n\t}\n\n\tif (name === 'background') {\n\t\tvalue = value.toString().trim();\n\t\tif (\n\t\t\t/^(linear-gradient|radial-gradient|url|repeating-linear-gradient|repeating-radial-gradient)\\(/.test(\n\t\t\t\tvalue\n\t\t\t)\n\t\t) {\n\t\t\treturn getStylesForProperty('backgroundImage', value, true);\n\t\t}\n\t\treturn getStylesForProperty('background', value, true);\n\t}\n\n\tif (name === 'textShadow') {\n\t\t// Handle multiple text shadows if provided.\n\t\tvalue = value.toString().trim();\n\t\tconst result = {};\n\n\t\tconst shadows = splitEffects(value);\n\n\t\tfor (const shadow of shadows) {\n\t\t\tconst styles = getStylesForProperty('textShadow', shadow, true);\n\t\t\tfor (const k in styles) {\n\t\t\t\tif (!result[k]) {\n\t\t\t\t\tresult[k] = [styles[k]];\n\t\t\t\t} else {\n\t\t\t\t\tresult[k].push(styles[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tif (name === 'WebkitTextStroke') {\n\t\tvalue = value.toString().trim();\n\t\tconst values = value.split(' ');\n\t\tif (values.length !== 2) {\n\t\t\tthrow new Error('Invalid `WebkitTextStroke` value.');\n\t\t}\n\n\t\treturn {\n\t\t\tWebkitTextStrokeWidth: purify(name, values[0]),\n\t\t\tWebkitTextStrokeColor: purify(name, values[1])\n\t\t};\n\t}\n\n\tif (name === 'backdropFilter' || name === 'WebkitBackdropFilter') {\n\t\treturn { backdropFilter: value };\n\t}\n\n\tif (name === 'textDecorationSkipInk') {\n\t\tconst normalized = value.toString().trim().toLowerCase();\n\t\tif (!['auto', 'none', 'all'].includes(normalized)) {\n\t\t\tthrow new Error('Invalid `textDecorationSkipInk` value.');\n\t\t}\n\n\t\treturn { textDecorationSkipInk: normalized };\n\t}\n\n\treturn;\n}\n\nfunction getErrorHint(name: string) {\n\tif (name === 'transform') {\n\t\treturn ' Only absolute lengths such as `10px` are supported.';\n\t}\n\treturn '';\n}\n\nconst RGB_SLASH = /rgb\\((\\d+)\\s+(\\d+)\\s+(\\d+)\\s*\\/\\s*([\\.\\d]+)\\)/;\nfunction normalizeColor(value: string | object) {\n\tif (typeof value === 'string') {\n\t\tif (RGB_SLASH.test(value.trim())) {\n\t\t\t// rgb(255 122 127 / .2) -> rgba(255, 122, 127, .2)\n\t\t\treturn value.trim().replace(RGB_SLASH, (_, r, g, b, a) => {\n\t\t\t\treturn `rgba(${r}, ${g}, ${b}, ${a})`;\n\t\t\t});\n\t\t}\n\t}\n\n\t// Recursively normalize colors in arrays and objects.\n\tif (typeof value === 'object' && value !== null) {\n\t\tfor (const k in value) {\n\t\t\tvalue[k] = normalizeColor(value[k]);\n\t\t}\n\t\treturn value;\n\t}\n\n\treturn value;\n}\n\ntype MainStyle = {\n\tcolor: string;\n\tfontSize: number;\n\ttransformOrigin: ParsedTransformOrigin;\n\tmaskImage: MaskProperty[];\n\topacity: number;\n\ttextTransform: string;\n\twhiteSpace: string;\n\twordBreak: string;\n\ttextAlign: string;\n\ttextIndent: number | string;\n\tlineHeight: number | string;\n\tletterSpacing: number;\n\n\tfontFamily: string | string[];\n\tfontWeight: FontWeight;\n\tfontStyle: FontStyle;\n\n\tborderTopWidth: number;\n\tborderLeftWidth: number;\n\tborderRightWidth: number;\n\tborderBottomWidth: number;\n\n\tpaddingTop: number;\n\tpaddingLeft: number;\n\tpaddingRight: number;\n\tpaddingBottom: number;\n\n\tflexGrow: number;\n\tflexShrink: number;\n\n\tgap: number;\n\trowGap: number;\n\tcolumnGap: number;\n\n\ttextShadowOffset: {\n\t\twidth: number;\n\t\theight: number;\n\t}[];\n\ttextShadowColor: string[];\n\ttextShadowRadius: number[];\n\tWebkitTextStrokeWidth: number;\n\tWebkitTextStrokeColor: string;\n\ttextDecorationSkipInk: 'auto' | 'none' | 'all';\n};\n\ntype OtherStyle = Exclude<\n\tRecord<PropertyKey, string | number>,\n\tkeyof MainStyle\n>;\n\nexport type SerializedStyle = Partial<MainStyle & OtherStyle>;\n\nexport default function expand(\n\tstyle: Record<string, string | number> | undefined,\n\tinheritedStyle: SerializedStyle\n): SerializedStyle {\n\tconst serializedStyle: SerializedStyle = {};\n\n\t// Extract inherited CSS variables\n\tconst inheritedVariables: CSSVariables = {};\n\tfor (const prop in inheritedStyle) {\n\t\tif (prop.startsWith('--')) {\n\t\t\tinheritedVariables[prop] = String(inheritedStyle[prop]);\n\t\t}\n\t}\n\n\t// Extract and resolve CSS variables from current style\n\tlet currentVariables: CSSVariables = {};\n\tlet processableStyle = style;\n\n\tif (style) {\n\t\tconst { variables, remainingStyle } = extractCustomProperties(style);\n\t\tcurrentVariables = variables;\n\t\tprocessableStyle = remainingStyle;\n\t}\n\n\t// Merge variables (current overrides inherited)\n\tconst mergedVariables = mergeVariables(\n\t\tinheritedVariables,\n\t\tcurrentVariables\n\t);\n\n\t// Store merged variables in the serialized style for inheritance\n\tfor (const varName in mergedVariables) {\n\t\tserializedStyle[varName] = mergedVariables[varName];\n\t}\n\n\tif (processableStyle) {\n\t\t// Resolve CSS variables in color property before processing\n\t\tconst resolvedColor = processableStyle.color\n\t\t\t? resolveVariables(processableStyle.color, mergedVariables)\n\t\t\t: undefined;\n\n\t\tconst currentColor = getCurrentColor(\n\t\t\tresolvedColor as string,\n\t\t\tinheritedStyle.color\n\t\t);\n\n\t\tserializedStyle.color = currentColor;\n\n\t\tfor (const prop in processableStyle) {\n\t\t\t// Internal properties.\n\t\t\tif (prop.startsWith('_')) {\n\t\t\t\tserializedStyle[prop] = processableStyle[prop];\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (prop === 'color') {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst name = getPropertyName(prop);\n\t\t\t// Resolve CSS variables before preprocessing\n\t\t\tconst resolvedValue = resolveVariables(\n\t\t\t\tprocessableStyle[prop],\n\t\t\t\tmergedVariables\n\t\t\t);\n\t\t\tconst value = preprocess(resolvedValue, currentColor);\n\n\t\t\ttry {\n\t\t\t\tconst resolvedStyle =\n\t\t\t\t\thandleSpecialCase(name, value, currentColor) ||\n\t\t\t\t\thandleFallbackColor(\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tgetStylesForProperty(name, purify(name, value), true),\n\t\t\t\t\t\tvalue as string,\n\t\t\t\t\t\tcurrentColor\n\t\t\t\t\t);\n\n\t\t\t\tObject.assign(serializedStyle, resolvedStyle);\n\t\t\t} catch (err) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\terr.message +\n\t\t\t\t\t\t// Attach the extra information of the rule itself if it's not included in\n\t\t\t\t\t\t// the error message.\n\t\t\t\t\t\t(err.message.includes(value)\n\t\t\t\t\t\t\t? '\\n ' + getErrorHint(name)\n\t\t\t\t\t\t\t: `\\n in CSS rule \\`${name}: ${value}\\`.${getErrorHint(\n\t\t\t\t\t\t\t\t\tname\n\t\t\t\t\t\t\t )}`)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Parse background images.\n\tif (serializedStyle.backgroundImage) {\n\t\tconst { backgrounds } = parseElementStyle(serializedStyle);\n\t\tserializedStyle.backgroundImage = backgrounds;\n\t}\n\n\tif (serializedStyle.maskImage || serializedStyle['WebkitMaskImage']) {\n\t\tserializedStyle.maskImage = parseMask(serializedStyle);\n\t}\n\n\t// Calculate the base font size.\n\tconst baseFontSize = calcBaseFontSize(\n\t\tserializedStyle.fontSize,\n\t\tinheritedStyle.fontSize\n\t);\n\tif (typeof serializedStyle.fontSize !== 'undefined') {\n\t\tserializedStyle.fontSize = baseFontSize;\n\t}\n\n\tif (serializedStyle.transformOrigin) {\n\t\tserializedStyle.transformOrigin = parseTransformOrigin(\n\t\t\tserializedStyle.transformOrigin as any,\n\t\t\tbaseFontSize\n\t\t);\n\t}\n\n\tfor (const prop in serializedStyle) {\n\t\tlet value = serializedStyle[prop];\n\n\t\t// Line height needs to be relative.\n\t\tif (prop === 'lineHeight') {\n\t\t\tif (typeof value === 'string' && value !== 'normal') {\n\t\t\t\tvalue = serializedStyle[prop] =\n\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tbaseFontSize,\n\t\t\t\t\t\tbaseFontSize,\n\t\t\t\t\t\tinheritedStyle,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) / baseFontSize;\n\t\t\t}\n\t\t} else {\n\t\t\t// Convert em and rem values to px (number).\n\t\t\tif (typeof value === 'string') {\n\t\t\t\tconst len = lengthToNumber(\n\t\t\t\t\tvalue,\n\t\t\t\t\tbaseFontSize,\n\t\t\t\t\tbaseFontSize,\n\t\t\t\t\tinheritedStyle\n\t\t\t\t);\n\t\t\t\tif (typeof len !== 'undefined') serializedStyle[prop] = len;\n\t\t\t\tvalue = serializedStyle[prop];\n\t\t\t}\n\n\t\t\tif (typeof value === 'string' || typeof value === 'object') {\n\t\t\t\tconst color = normalizeColor(value);\n\t\t\t\tif (color) {\n\t\t\t\t\tserializedStyle[prop] = color as any;\n\t\t\t\t}\n\t\t\t\tvalue = serializedStyle[prop];\n\t\t\t}\n\t\t}\n\n\t\t// Inherit the opacity.\n\t\tif (prop === 'opacity' && typeof value === 'number') {\n\t\t\tserializedStyle.opacity = value * inheritedStyle.opacity;\n\t\t}\n\n\t\tif (prop === 'transform') {\n\t\t\tconst transforms = value as any as {\n\t\t\t\t[type: string]: number | string;\n\t\t\t}[];\n\n\t\t\tfor (const transform of transforms) {\n\t\t\t\tconst type = Object.keys(transform)[0];\n\t\t\t\tconst _v = transform[type];\n\n\t\t\t\t// Convert em, rem, vw, vh values to px (number), but keep % values.\n\t\t\t\tconst len =\n\t\t\t\t\ttypeof _v === 'string'\n\t\t\t\t\t\t? lengthToNumber(\n\t\t\t\t\t\t\t\t_v,\n\t\t\t\t\t\t\t\tbaseFontSize,\n\t\t\t\t\t\t\t\tbaseFontSize,\n\t\t\t\t\t\t\t\tinheritedStyle\n\t\t\t\t\t\t ) ?? _v\n\t\t\t\t\t\t: _v;\n\t\t\t\ttransform[type] = len;\n\t\t\t}\n\t\t}\n\n\t\tif (prop === 'textShadowRadius') {\n\t\t\tconst textShadowRadius = value as unknown as Array<number | string>;\n\n\t\t\tserializedStyle.textShadowRadius = textShadowRadius.map(_v =>\n\t\t\t\tlengthToNumber(_v, baseFontSize, 0, inheritedStyle, false)\n\t\t\t);\n\t\t}\n\n\t\tif (prop === 'textShadowOffset') {\n\t\t\tconst textShadowOffset = value as unknown as Array<{\n\t\t\t\twidth: number | string;\n\t\t\t\theight: number | string;\n\t\t\t}>;\n\n\t\t\tserializedStyle.textShadowOffset = textShadowOffset.map(\n\t\t\t\t({ height, width }) => ({\n\t\t\t\t\theight: lengthToNumber(\n\t\t\t\t\t\theight,\n\t\t\t\t\t\tbaseFontSize,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tinheritedStyle,\n\t\t\t\t\t\tfalse\n\t\t\t\t\t),\n\t\t\t\t\twidth: lengthToNumber(\n\t\t\t\t\t\twidth,\n\t\t\t\t\t\tbaseFontSize,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tinheritedStyle,\n\t\t\t\t\t\tfalse\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t}\n\n\treturn serializedStyle;\n}\n\nfunction calcBaseFontSize(\n\tsize: number | string,\n\tinheritedSize: number\n): number {\n\tif (typeof size === 'number') return size;\n\n\ttry {\n\t\tconst parsed = new CssDimension(size);\n\t\tswitch (parsed.unit) {\n\t\t\tcase 'em':\n\t\t\t\treturn parsed.value * inheritedSize;\n\t\t\tcase 'rem':\n\t\t\t\treturn parsed.value * 16;\n\t\t}\n\t} catch (err) {\n\t\treturn inheritedSize;\n\t}\n}\n\n/**\n * @see https://github.com/RazrFalcon/resvg/issues/579\n */\nfunction refineHSL(color: string) {\n\tif (color.startsWith('hsl')) {\n\t\tconst t = cssColorParse(color);\n\t\tconst [h, s, l] = t.values;\n\n\t\treturn `hsl(${[h, `${s}%`, `${l}%`]\n\t\t\t.concat(t.alpha === 1 ? [] : [t.alpha])\n\t\t\t.join(',')})`;\n\t}\n\n\treturn color;\n}\n\nfunction getCurrentColor(\n\tcolor: string | undefined,\n\tinheritedColor: string\n): string {\n\tif (color && color.toLowerCase() !== 'currentcolor') {\n\t\treturn refineHSL(color);\n\t}\n\n\treturn refineHSL(inheritedColor);\n}\n\nfunction convertCurrentColorToActualValue(\n\tvalue: string,\n\tcurrentColor: string\n): string {\n\treturn value.replace(/currentcolor/gi, currentColor);\n}\n\nfunction preprocess(\n\tvalue: string | number,\n\tcurrentColor: string\n): string | number {\n\tif (isString(value)) {\n\t\tvalue = convertCurrentColorToActualValue(value, currentColor);\n\t}\n\n\treturn value;\n}\n","import valueParser from 'postcss-value-parser';\n\nimport CssDimension from './vendor/parse-css-dimension/index.js';\n\n/**\n * If key for each direction is missing, assume default (50%)\n */\nexport interface ParsedTransformOrigin {\n\t/** Relative horizontal transform origin in % */\n\txRelative?: number;\n\t/** Relative vertical transform origin in % */\n\tyRelative?: number;\n\t/** Absolute horizontal transform origin in pixels */\n\txAbsolute?: number;\n\t/** Absolute horizontal transform origin in pixels */\n\tyAbsolute?: number;\n}\n\ninterface ParsedUnit {\n\t/** Relative unit in % */\n\trelative?: number;\n\t/** Absolute unit in pixels */\n\tabsolute?: number;\n}\n\nfunction parseUnit(word: string, baseFontSize: number): ParsedUnit {\n\ttry {\n\t\tconst parsed = new CssDimension(word);\n\t\tswitch (parsed.unit) {\n\t\t\tcase 'px':\n\t\t\t\treturn { absolute: parsed.value };\n\t\t\tcase 'em':\n\t\t\t\treturn { absolute: parsed.value * baseFontSize };\n\t\t\tcase 'rem':\n\t\t\t\treturn { absolute: parsed.value * 16 };\n\t\t\tcase '%':\n\t\t\t\treturn { relative: parsed.value };\n\t\t\tdefault:\n\t\t\t\treturn {};\n\t\t}\n\t} catch (e) {\n\t\treturn {};\n\t}\n}\n\nfunction handleWord(\n\tword: string,\n\tbaseFontSize: number,\n\tunitIsHorizontal: boolean\n) {\n\tswitch (word) {\n\t\tcase 'top':\n\t\t\treturn { yRelative: 0 };\n\t\tcase 'left':\n\t\t\treturn { xRelative: 0 };\n\t\tcase 'right':\n\t\t\treturn { xRelative: 100 };\n\t\tcase 'bottom':\n\t\t\treturn { yRelative: 100 };\n\t\tcase 'center':\n\t\t\treturn {};\n\t\tdefault: {\n\t\t\tconst parsedUnit = parseUnit(word, baseFontSize);\n\t\t\treturn parsedUnit.absolute\n\t\t\t\t? {\n\t\t\t\t\t\t[unitIsHorizontal ? 'xAbsolute' : 'yAbsolute']:\n\t\t\t\t\t\t\tparsedUnit.absolute\n\t\t\t\t }\n\t\t\t\t: parsedUnit.relative\n\t\t\t\t? {\n\t\t\t\t\t\t[unitIsHorizontal ? 'xRelative' : 'yRelative']:\n\t\t\t\t\t\t\tparsedUnit.relative\n\t\t\t\t }\n\t\t\t\t: {};\n\t\t}\n\t}\n}\n\nexport default function parseTransformOrigin(\n\tvalue: string | number,\n\tbaseFontSize: number\n): ParsedTransformOrigin {\n\t// If it's a single value and a number, then it's horizontal\n\tif (typeof value === 'number') {\n\t\treturn { xAbsolute: value };\n\t}\n\tlet words: string[];\n\ttry {\n\t\twords = valueParser(value)\n\t\t\t.nodes.filter(node => node.type === 'word')\n\t\t\t.map(node => node.value);\n\t} catch (e) {\n\t\treturn {};\n\t}\n\n\tif (words.length === 1) {\n\t\t// If it's a single value and a number, then it's horizontal, so\n\t\t// pass `true` to `unitIsHorizontal`\n\t\treturn handleWord(words[0], baseFontSize, true);\n\t} else if (words.length === 2) {\n\t\t// Make words to be [horizontal, vertical]\n\t\tif (\n\t\t\twords[0] === 'top' ||\n\t\t\twords[0] === 'bottom' ||\n\t\t\twords[1] === 'left' ||\n\t\t\twords[1] === 'right'\n\t\t) {\n\t\t\twords.reverse();\n\t\t}\n\n\t\treturn {\n\t\t\t...handleWord(words[0], baseFontSize, true),\n\t\t\t...handleWord(words[1], baseFontSize, false)\n\t\t};\n\t} else {\n\t\treturn {};\n\t}\n}\n","import { getPropertyName } from 'css-to-react-native';\nimport { splitEffects } from '../utils.js';\n\nfunction getMaskProperty(style: Record<string, string | number>, name: string) {\n\tconst key = getPropertyName(`mask-${name}`);\n\treturn (style[key] || style[`WebkitM${key.substring(1)}`]) as string;\n}\n\nexport interface MaskProperty {\n\timage: string;\n\tposition: string;\n\tsize: string;\n\trepeat: string;\n\torigin: string;\n\tclip: string;\n}\n\nexport function parseMask(\n\tstyle: Record<string, string | number>\n): MaskProperty[] {\n\tconst maskImage = (style.maskImage || style.WebkitMaskImage) as string;\n\n\tconst common = {\n\t\tposition: getMaskProperty(style, 'position') || '0% 0%',\n\t\tsize: getMaskProperty(style, 'size') || '100% 100%',\n\t\trepeat: getMaskProperty(style, 'repeat') || 'repeat',\n\t\torigin: getMaskProperty(style, 'origin') || 'border-box',\n\t\tclip: getMaskProperty(style, 'origin') || 'border-box'\n\t};\n\n\tlet maskImages = splitEffects(maskImage).filter(v => v && v !== 'none');\n\n\treturn maskImages.reverse().map(m => ({\n\t\timage: m,\n\t\t...common\n\t}));\n}\n","/**\n * This module handles CSS custom properties (CSS variables) including:\n * - Extracting custom properties from styles (--property-name)\n * - Resolving var() references\n * - Handling fallback values\n * - Detecting circular references\n */\n\nimport valueParser from 'postcss-value-parser';\n\nexport type CSSVariables = Record<string, string>;\n\n/**\n * Extracts custom properties (--*) from a style object\n * Returns both the variables and the remaining style properties\n */\nexport function extractCustomProperties(\n\tstyle: Record<string, string | number>\n): {\n\tvariables: CSSVariables;\n\tremainingStyle: Record<string, string | number>;\n} {\n\tconst variables: CSSVariables = {};\n\tconst remainingStyle: Record<string, string | number> = {};\n\n\tfor (const prop in style) {\n\t\tif (prop.startsWith('--')) {\n\t\t\t// Custom property\n\t\t\tvariables[prop] = String(style[prop]);\n\t\t} else {\n\t\t\tremainingStyle[prop] = style[prop];\n\t\t}\n\t}\n\n\treturn { variables, remainingStyle };\n}\n\n/**\n * Merges inherited variables with current variables\n * Current variables override inherited ones (cascading)\n */\nexport function mergeVariables(\n\tinherited: CSSVariables,\n\tcurrent: CSSVariables\n): CSSVariables {\n\treturn { ...inherited, ...current };\n}\n\n/**\n * Resolves var() references in a CSS value\n * Supports fallback values: var(--name, fallback)\n * Handles nested var() calls\n */\nexport function resolveVariables(\n\tvalue: string | number,\n\tvariables: CSSVariables,\n\tvisitedVars = new Set<string>()\n): string | number {\n\t// Only process strings\n\tif (typeof value !== 'string') {\n\t\treturn value;\n\t}\n\n\t// Quick check: does this value contain var()?\n\tif (!value.includes('var(')) {\n\t\treturn value;\n\t}\n\n\ttry {\n\t\tconst parsed = valueParser(value);\n\t\tlet hasChanges = false;\n\n\t\tparsed.walk(node => {\n\t\t\tif (node.type === 'function' && node.value === 'var') {\n\t\t\t\thasChanges = true;\n\n\t\t\t\t// Extract variable name and optional fallback\n\t\t\t\tconst args = extractVarArgs(node);\n\t\t\t\tif (!args) {\n\t\t\t\t\t// Invalid var() syntax, leave as-is\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst { varName, fallback } = args;\n\n\t\t\t\t// Check for circular reference\n\t\t\t\tif (visitedVars.has(varName)) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`Circular reference detected for CSS variable: ${varName}`\n\t\t\t\t\t);\n\t\t\t\t\t// Use fallback if available, otherwise use invalid value\n\t\t\t\t\tif (fallback !== undefined) {\n\t\t\t\t\t\treplaceNode(node, fallback);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treplaceNode(node, 'initial');\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Look up the variable\n\t\t\t\tconst variableValue = variables[varName];\n\n\t\t\t\tif (variableValue !== undefined) {\n\t\t\t\t\t// Mark this variable as being resolved to detect circular references\n\t\t\t\t\tconst newVisitedVars = new Set(visitedVars);\n\t\t\t\t\tnewVisitedVars.add(varName);\n\n\t\t\t\t\t// Recursively resolve the variable value in case it contains more var()\n\t\t\t\t\tconst resolvedValue = resolveVariables(\n\t\t\t\t\t\tvariableValue,\n\t\t\t\t\t\tvariables,\n\t\t\t\t\t\tnewVisitedVars\n\t\t\t\t\t);\n\n\t\t\t\t\treplaceNode(node, String(resolvedValue));\n\t\t\t\t} else if (fallback !== undefined) {\n\t\t\t\t\t// Variable not found, use fallback\n\t\t\t\t\t// Recursively resolve fallback in case it contains var()\n\t\t\t\t\tconst resolvedFallback = resolveVariables(\n\t\t\t\t\t\tfallback,\n\t\t\t\t\t\tvariables,\n\t\t\t\t\t\tvisitedVars\n\t\t\t\t\t);\n\t\t\t\t\treplaceNode(node, String(resolvedFallback));\n\t\t\t\t} else {\n\t\t\t\t\t// Variable not found and no fallback, use initial value\n\t\t\t\t\t// According to CSS spec, this should be treated as invalid\n\t\t\t\t\treplaceNode(node, 'initial');\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (hasChanges) {\n\t\t\treturn parsed.toString();\n\t\t}\n\t} catch (err) {\n\t\t// If parsing fails, return the original value\n\t\tconsole.warn(\n\t\t\t`Failed to parse CSS value for variable resolution: ${value}`\n\t\t);\n\t}\n\n\treturn value;\n}\n\n/**\n * Extracts variable name and fallback from var() function arguments\n * Handles: var(--name) and var(--name, fallback)\n */\nfunction extractVarArgs(\n\tnode: valueParser.FunctionNode\n): { varName: string; fallback?: string } | null {\n\tif (!node.nodes || node.nodes.length === 0) {\n\t\treturn null;\n\t}\n\n\t// Find the variable name (first word node)\n\tlet varNameNode: valueParser.Node | undefined;\n\tlet commaIndex = -1;\n\n\tfor (let i = 0; i < node.nodes.length; i++) {\n\t\tconst child = node.nodes[i];\n\t\tif (child.type === 'word' && !varNameNode) {\n\t\t\tvarNameNode = child;\n\t\t} else if (child.type === 'div' && child.value === ',') {\n\t\t\tcommaIndex = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!varNameNode || varNameNode.type !== 'word') {\n\t\treturn null;\n\t}\n\n\tconst varName = varNameNode.value.trim();\n\n\t// Check if there's a fallback value after the comma\n\tif (commaIndex !== -1 && commaIndex < node.nodes.length - 1) {\n\t\t// Collect all nodes after the comma as the fallback\n\t\tconst fallbackNodes = node.nodes.slice(commaIndex + 1);\n\t\tconst fallback = valueParser.stringify(fallbackNodes).trim();\n\t\treturn { varName, fallback };\n\t}\n\n\treturn { varName };\n}\n\n/**\n * Replaces a function node with a raw string value\n */\nfunction replaceNode(node: valueParser.Node, value: string) {\n\t// Replace the function node with a word node\n\tnode.type = 'word';\n\tnode.value = value;\n\t// Remove function-specific properties\n\tdelete (node as any).nodes;\n}\n\n/**\n * Resolves all variables in a style object\n * Returns a new style object with var() references resolved\n */\nexport function resolveStyleVariables(\n\tstyle: Record<string, string | number>,\n\tvariables: CSSVariables\n): Record<string, string | number> {\n\tconst resolved: Record<string, string | number> = {};\n\n\tfor (const prop in style) {\n\t\tresolved[prop] = resolveVariables(style[prop], variables);\n\t}\n\n\treturn resolved;\n}\n","/**\n * Handler to update the Yoga node properties with the given element type and\n * style. Each supported element has its own preset styles, so this function\n * also returns the inherited style for children of the element.\n */\n\nimport presets from './presets.js';\nimport inheritable from './inheritable.js';\nimport expand, { SerializedStyle } from './expand.js';\nimport {\n\tasPointAutoPercentageLength,\n\tasPointPercentageLength,\n\tlengthToNumber,\n\tparseViewBox,\n\tv\n} from '../utils.js';\nimport { getYoga, YogaNode } from '../yoga.js';\nimport { resolveImageData } from './image.js';\n\ntype SatoriElement = keyof typeof presets;\n\nexport default async function compute(\n\tnode: YogaNode,\n\ttype: SatoriElement | string,\n\tinheritedStyle: SerializedStyle,\n\tdefinedStyle: Record<string, string | number>,\n\tprops: Record<string, any>\n): Promise<[SerializedStyle, SerializedStyle]> {\n\tconst Yoga = await getYoga();\n\n\t// Extend the default style with defined and inherited styles.\n\tconst style: SerializedStyle = Object.assign(\n\t\t{},\n\t\tinheritedStyle,\n\t\texpand(presets[type], inheritedStyle),\n\t\texpand(definedStyle, inheritedStyle)\n\t);\n\n\tif (type === 'img') {\n\t\tlet [resolvedSrc, imageWidth, imageHeight] = await resolveImageData(\n\t\t\tprops.src\n\t\t);\n\n\t\t// Cannot parse the image size (e.g. base64 data URI).\n\t\tif (imageWidth === undefined && imageHeight === undefined) {\n\t\t\tif (props.width === undefined || props.height === undefined) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Image size cannot be determined. Please provide the width and height of the image.'\n\t\t\t\t);\n\t\t\t}\n\t\t\timageWidth = parseInt(props.width);\n\t\t\timageHeight = parseInt(props.height);\n\t\t}\n\t\tconst r = imageHeight / imageWidth;\n\n\t\t// Before calculating the missing width or height based on the image ratio,\n\t\t// we must subtract the padding and border due to how box model works.\n\t\t// TODO: Ensure these are absolute length values, not relative values.\n\t\tlet extraHorizontal =\n\t\t\t(style.borderLeftWidth || 0) +\n\t\t\t(style.borderRightWidth || 0) +\n\t\t\t(style.paddingLeft || 0) +\n\t\t\t(style.paddingRight || 0);\n\t\tlet extraVertical =\n\t\t\t(style.borderTopWidth || 0) +\n\t\t\t(style.borderBottomWidth || 0) +\n\t\t\t(style.paddingTop || 0) +\n\t\t\t(style.paddingBottom || 0);\n\n\t\tlet contentBoxWidth = style.width || props.width;\n\t\tlet contentBoxHeight = style.height || props.height;\n\n\t\tconst isAbsoluteContentSize =\n\t\t\ttypeof contentBoxWidth === 'number' &&\n\t\t\ttypeof contentBoxHeight === 'number';\n\n\t\tif (isAbsoluteContentSize) {\n\t\t\tcontentBoxWidth -= extraHorizontal;\n\t\t\tcontentBoxHeight -= extraVertical;\n\t\t}\n\n\t\t// When no content size is defined, we use the image size as the content size.\n\t\tif (contentBoxWidth === undefined && contentBoxHeight === undefined) {\n\t\t\tcontentBoxWidth = '100%';\n\t\t\tnode.setAspectRatio(1 / r);\n\t\t} else {\n\t\t\t// If only one sisde is not defined, we can calculate the other one.\n\t\t\tif (contentBoxWidth === undefined) {\n\t\t\t\tif (typeof contentBoxHeight === 'number') {\n\t\t\t\t\tcontentBoxWidth = contentBoxHeight / r;\n\t\t\t\t} else {\n\t\t\t\t\t// If it uses a relative value (e.g. 50%), we can rely on aspect ratio.\n\t\t\t\t\t// Note: this doesn't work well if there are paddings or borders.\n\t\t\t\t\tnode.setAspectRatio(1 / r);\n\t\t\t\t}\n\t\t\t} else if (contentBoxHeight === undefined) {\n\t\t\t\tif (typeof contentBoxWidth === 'number') {\n\t\t\t\t\tcontentBoxHeight = contentBoxWidth * r;\n\t\t\t\t} else {\n\t\t\t\t\t// If it uses a relative value (e.g. 50%), we can rely on aspect ratio.\n\t\t\t\t\t// Note: this doesn't work well if there are paddings or borders.\n\t\t\t\t\tnode.setAspectRatio(1 / r);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstyle.width = isAbsoluteContentSize\n\t\t\t? (contentBoxWidth as number) + extraHorizontal\n\t\t\t: contentBoxWidth;\n\t\tstyle.height = isAbsoluteContentSize\n\t\t\t? (contentBoxHeight as number) + extraVertical\n\t\t\t: contentBoxHeight;\n\t\tstyle.__src = resolvedSrc;\n\t\tstyle.__naturalWidth = imageWidth;\n\t\tstyle.__naturalHeight = imageHeight;\n\t}\n\n\tif (type === 'svg') {\n\t\tconst viewBox = props.viewBox || props.viewbox;\n\t\tconst viewBoxSize = parseViewBox(viewBox);\n\t\tconst ratio = viewBoxSize ? viewBoxSize[3] / viewBoxSize[2] : null;\n\n\t\tlet { width, height } = props;\n\t\tif (typeof width === 'undefined' && height) {\n\t\t\tif (ratio == null) {\n\t\t\t\twidth = 0;\n\t\t\t} else if (typeof height === 'string' && height.endsWith('%')) {\n\t\t\t\twidth = parseInt(height) / ratio + '%';\n\t\t\t} else {\n\t\t\t\theight = lengthToNumber(\n\t\t\t\t\theight,\n\t\t\t\t\tinheritedStyle.fontSize,\n\t\t\t\t\t1,\n\t\t\t\t\tinheritedStyle\n\t\t\t\t);\n\t\t\t\twidth = height / ratio;\n\t\t\t}\n\t\t} else if (typeof height === 'undefined' && width) {\n\t\t\tif (ratio == null) {\n\t\t\t\twidth = 0;\n\t\t\t} else if (typeof width === 'string' && width.endsWith('%')) {\n\t\t\t\theight = parseInt(width) * ratio + '%';\n\t\t\t} else {\n\t\t\t\twidth = lengthToNumber(\n\t\t\t\t\twidth,\n\t\t\t\t\tinheritedStyle.fontSize,\n\t\t\t\t\t1,\n\t\t\t\t\tinheritedStyle\n\t\t\t\t);\n\t\t\t\theight = width * ratio;\n\t\t\t}\n\t\t} else {\n\t\t\tif (typeof width !== 'undefined') {\n\t\t\t\twidth =\n\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\twidth,\n\t\t\t\t\t\tinheritedStyle.fontSize,\n\t\t\t\t\t\t1,\n\t\t\t\t\t\tinheritedStyle\n\t\t\t\t\t) || width;\n\t\t\t}\n\t\t\tif (typeof height !== 'undefined') {\n\t\t\t\theight =\n\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\theight,\n\t\t\t\t\t\tinheritedStyle.fontSize,\n\t\t\t\t\t\t1,\n\t\t\t\t\t\tinheritedStyle\n\t\t\t\t\t) || height;\n\t\t\t}\n\t\t\twidth ||= viewBoxSize?.[2];\n\t\t\theight ||= viewBoxSize?.[3];\n\t\t}\n\n\t\tif (!style.width && width) style.width = width;\n\t\tif (!style.height && height) style.height = height;\n\t}\n\n\t// Set properties for Yoga.\n\tnode.setDisplay(\n\t\tv(\n\t\t\tstyle.display,\n\t\t\t{\n\t\t\t\tflex: Yoga.DISPLAY_FLEX,\n\t\t\t\tblock: Yoga.DISPLAY_FLEX,\n\t\t\t\tcontents: Yoga.DISPLAY_CONTENTS,\n\t\t\t\tnone: Yoga.DISPLAY_NONE,\n\t\t\t\t'-webkit-box': Yoga.DISPLAY_FLEX\n\t\t\t},\n\t\t\tYoga.DISPLAY_FLEX,\n\t\t\t'display'\n\t\t)\n\t);\n\n\tnode.setAlignContent(\n\t\tv(\n\t\t\tstyle.alignContent,\n\t\t\t{\n\t\t\t\tstretch: Yoga.ALIGN_STRETCH,\n\t\t\t\tcenter: Yoga.ALIGN_CENTER,\n\t\t\t\t'flex-start': Yoga.ALIGN_FLEX_START,\n\t\t\t\t'flex-end': Yoga.ALIGN_FLEX_END,\n\t\t\t\t'space-between': Yoga.ALIGN_SPACE_BETWEEN,\n\t\t\t\t'space-around': Yoga.ALIGN_SPACE_AROUND,\n\t\t\t\tbaseline: Yoga.ALIGN_BASELINE,\n\t\t\t\tnormal: Yoga.ALIGN_AUTO\n\t\t\t},\n\t\t\tYoga.ALIGN_AUTO,\n\t\t\t'alignContent'\n\t\t)\n\t);\n\n\tnode.setAlignItems(\n\t\tv(\n\t\t\tstyle.alignItems,\n\t\t\t{\n\t\t\t\tstretch: Yoga.ALIGN_STRETCH,\n\t\t\t\tcenter: Yoga.ALIGN_CENTER,\n\t\t\t\t'flex-start': Yoga.ALIGN_FLEX_START,\n\t\t\t\t'flex-end': Yoga.ALIGN_FLEX_END,\n\t\t\t\tbaseline: Yoga.ALIGN_BASELINE,\n\t\t\t\tnormal: Yoga.ALIGN_AUTO\n\t\t\t},\n\t\t\tYoga.ALIGN_STRETCH,\n\t\t\t'alignItems'\n\t\t)\n\t);\n\tnode.setAlignSelf(\n\t\tv(\n\t\t\tstyle.alignSelf,\n\t\t\t{\n\t\t\t\tstretch: Yoga.ALIGN_STRETCH,\n\t\t\t\tcenter: Yoga.ALIGN_CENTER,\n\t\t\t\t'flex-start': Yoga.ALIGN_FLEX_START,\n\t\t\t\t'flex-end': Yoga.ALIGN_FLEX_END,\n\t\t\t\tbaseline: Yoga.ALIGN_BASELINE,\n\t\t\t\tnormal: Yoga.ALIGN_AUTO\n\t\t\t},\n\t\t\tYoga.ALIGN_AUTO,\n\t\t\t'alignSelf'\n\t\t)\n\t);\n\tnode.setJustifyContent(\n\t\tv(\n\t\t\tstyle.justifyContent,\n\t\t\t{\n\t\t\t\tcenter: Yoga.JUSTIFY_CENTER,\n\t\t\t\t'flex-start': Yoga.JUSTIFY_FLEX_START,\n\t\t\t\t'flex-end': Yoga.JUSTIFY_FLEX_END,\n\t\t\t\t'space-between': Yoga.JUSTIFY_SPACE_BETWEEN,\n\t\t\t\t'space-around': Yoga.JUSTIFY_SPACE_AROUND\n\t\t\t},\n\t\t\tYoga.JUSTIFY_FLEX_START,\n\t\t\t'justifyContent'\n\t\t)\n\t);\n\t// @TODO: node.setAspectRatio\n\n\tnode.setFlexDirection(\n\t\tv(\n\t\t\tstyle.flexDirection,\n\t\t\t{\n\t\t\t\trow: Yoga.FLEX_DIRECTION_ROW,\n\t\t\t\tcolumn: Yoga.FLEX_DIRECTION_COLUMN,\n\t\t\t\t'row-reverse': Yoga.FLEX_DIRECTION_ROW_REVERSE,\n\t\t\t\t'column-reverse': Yoga.FLEX_DIRECTION_COLUMN_REVERSE\n\t\t\t},\n\t\t\tYoga.FLEX_DIRECTION_ROW,\n\t\t\t'flexDirection'\n\t\t)\n\t);\n\tnode.setFlexWrap(\n\t\tv(\n\t\t\tstyle.flexWrap,\n\t\t\t{\n\t\t\t\twrap: Yoga.WRAP_WRAP,\n\t\t\t\tnowrap: Yoga.WRAP_NO_WRAP,\n\t\t\t\t'wrap-reverse': Yoga.WRAP_WRAP_REVERSE\n\t\t\t},\n\t\t\tYoga.WRAP_NO_WRAP,\n\t\t\t'flexWrap'\n\t\t)\n\t);\n\n\tif (typeof style.gap !== 'undefined') {\n\t\tnode.setGap(Yoga.GUTTER_ALL, style.gap);\n\t}\n\n\tif (typeof style.rowGap !== 'undefined') {\n\t\tnode.setGap(Yoga.GUTTER_ROW, style.rowGap);\n\t}\n\n\tif (typeof style.columnGap !== 'undefined') {\n\t\tnode.setGap(Yoga.GUTTER_COLUMN, style.columnGap);\n\t}\n\n\t// @TODO: node.setFlex\n\n\tif (typeof style.flexBasis !== 'undefined') {\n\t\tnode.setFlexBasis(\n\t\t\tasPointAutoPercentageLength(style.flexBasis, 'flexBasis')\n\t\t);\n\t}\n\tnode.setFlexGrow(\n\t\ttypeof style.flexGrow === 'undefined' ? 0 : style.flexGrow\n\t);\n\tnode.setFlexShrink(\n\t\ttypeof style.flexShrink === 'undefined' ? 0 : style.flexShrink\n\t);\n\n\tif (typeof style.maxHeight !== 'undefined') {\n\t\tnode.setMaxHeight(\n\t\t\tasPointPercentageLength(style.maxHeight, 'maxHeight')\n\t\t);\n\t}\n\tif (typeof style.maxWidth !== 'undefined') {\n\t\tnode.setMaxWidth(asPointPercentageLength(style.maxWidth, 'maxWidth'));\n\t}\n\tif (typeof style.minHeight !== 'undefined') {\n\t\tnode.setMinHeight(\n\t\t\tasPointPercentageLength(style.minHeight, 'minHeight')\n\t\t);\n\t}\n\tif (typeof style.minWidth !== 'undefined') {\n\t\tnode.setMinWidth(asPointPercentageLength(style.minWidth, 'minWidth'));\n\t}\n\n\tnode.setOverflow(\n\t\tv(\n\t\t\tstyle.overflow,\n\t\t\t{\n\t\t\t\tvisible: Yoga.OVERFLOW_VISIBLE,\n\t\t\t\thidden: Yoga.OVERFLOW_HIDDEN\n\t\t\t},\n\t\t\tYoga.OVERFLOW_VISIBLE,\n\t\t\t'overflow'\n\t\t)\n\t);\n\n\tnode.setMargin(\n\t\tYoga.EDGE_TOP,\n\t\tasPointAutoPercentageLength(style.marginTop || 0)\n\t);\n\tnode.setMargin(\n\t\tYoga.EDGE_BOTTOM,\n\t\tasPointAutoPercentageLength(style.marginBottom || 0)\n\t);\n\tnode.setMargin(\n\t\tYoga.EDGE_LEFT,\n\t\tasPointAutoPercentageLength(style.marginLeft || 0)\n\t);\n\tnode.setMargin(\n\t\tYoga.EDGE_RIGHT,\n\t\tasPointAutoPercentageLength(style.marginRight || 0)\n\t);\n\n\tnode.setBorder(Yoga.EDGE_TOP, style.borderTopWidth || 0);\n\tnode.setBorder(Yoga.EDGE_BOTTOM, style.borderBottomWidth || 0);\n\tnode.setBorder(Yoga.EDGE_LEFT, style.borderLeftWidth || 0);\n\tnode.setBorder(Yoga.EDGE_RIGHT, style.borderRightWidth || 0);\n\n\tnode.setPadding(Yoga.EDGE_TOP, style.paddingTop || 0);\n\tnode.setPadding(Yoga.EDGE_BOTTOM, style.paddingBottom || 0);\n\tnode.setPadding(Yoga.EDGE_LEFT, style.paddingLeft || 0);\n\tnode.setPadding(Yoga.EDGE_RIGHT, style.paddingRight || 0);\n\n\tnode.setBoxSizing(\n\t\tv(\n\t\t\tstyle.boxSizing,\n\t\t\t{\n\t\t\t\t'border-box': Yoga.BOX_SIZING_BORDER_BOX,\n\t\t\t\t'content-box': Yoga.BOX_SIZING_CONTENT_BOX\n\t\t\t},\n\t\t\tYoga.BOX_SIZING_BORDER_BOX,\n\t\t\t'boxSizing'\n\t\t)\n\t);\n\n\tnode.setPositionType(\n\t\tv(\n\t\t\tstyle.position,\n\t\t\t{\n\t\t\t\tabsolute: Yoga.POSITION_TYPE_ABSOLUTE,\n\t\t\t\trelative: Yoga.POSITION_TYPE_RELATIVE,\n\t\t\t\tstatic: Yoga.POSITION_TYPE_STATIC\n\t\t\t},\n\t\t\tYoga.POSITION_TYPE_RELATIVE,\n\t\t\t'position'\n\t\t)\n\t);\n\n\tif (typeof style.top !== 'undefined') {\n\t\tnode.setPosition(\n\t\t\tYoga.EDGE_TOP,\n\t\t\tasPointPercentageLength(style.top, 'top')\n\t\t);\n\t}\n\tif (typeof style.bottom !== 'undefined') {\n\t\tnode.setPosition(\n\t\t\tYoga.EDGE_BOTTOM,\n\t\t\tasPointPercentageLength(style.bottom, 'bottom')\n\t\t);\n\t}\n\tif (typeof style.left !== 'undefined') {\n\t\tnode.setPosition(\n\t\t\tYoga.EDGE_LEFT,\n\t\t\tasPointPercentageLength(style.left, 'left')\n\t\t);\n\t}\n\tif (typeof style.right !== 'undefined') {\n\t\tnode.setPosition(\n\t\t\tYoga.EDGE_RIGHT,\n\t\t\tasPointPercentageLength(style.right, 'right')\n\t\t);\n\t}\n\n\tif (typeof style.height !== 'undefined') {\n\t\tnode.setHeight(asPointAutoPercentageLength(style.height, 'height'));\n\t} else {\n\t\tnode.setHeightAuto();\n\t}\n\tif (typeof style.width !== 'undefined') {\n\t\tnode.setWidth(asPointAutoPercentageLength(style.width, 'width'));\n\t} else {\n\t\tnode.setWidthAuto();\n\t}\n\n\treturn [style, inheritable(style)];\n}\n","import escapeHTML from 'escape-html';\nimport type { ParsedTransformOrigin } from '../transform-origin.js';\nimport transform from './transform.js';\nimport { buildXMLString } from '../utils.js';\n\nexport function container(\n\t{\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight,\n\t\tisInheritingTransform\n\t}: {\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t\tisInheritingTransform: boolean;\n\t},\n\tstyle: Record<string, number | string>\n) {\n\tlet matrix = '';\n\tlet opacity = 1;\n\n\tif (style.transform) {\n\t\tmatrix = transform(\n\t\t\t{\n\t\t\t\tleft,\n\t\t\t\ttop,\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t},\n\t\t\tstyle.transform as unknown as number[],\n\t\t\tisInheritingTransform,\n\t\t\tstyle.transformOrigin as ParsedTransformOrigin | undefined\n\t\t);\n\t}\n\n\tif (style.opacity !== undefined) {\n\t\topacity = +style.opacity;\n\t}\n\n\treturn { matrix, opacity };\n}\n\nexport default function buildText(\n\t{\n\t\tid,\n\t\tcontent,\n\t\tfilter,\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight,\n\t\tmatrix,\n\t\topacity,\n\t\timage,\n\t\tclipPathId,\n\t\tdebug,\n\t\tfauxBoldStrokeWidth,\n\t\tshape,\n\t\tdecorationShape\n\t}: {\n\t\tcontent: string;\n\t\tfilter: string;\n\t\tid: string;\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t\tmatrix: string;\n\t\topacity: number;\n\t\timage: string | null;\n\t\tclipPathId?: string;\n\t\tdebug?: boolean;\n\t\tfauxBoldStrokeWidth?: number;\n\t\tshape?: boolean;\n\t\tdecorationShape?: string;\n\t},\n\tstyle: Record<string, number | string>\n) {\n\tlet extra = '';\n\tif (debug) {\n\t\textra = buildXMLString('rect', {\n\t\t\tx: left,\n\t\t\ty: top - height,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tfill: 'transparent',\n\t\t\tstroke: '#575eff',\n\t\t\t'stroke-width': 1,\n\t\t\ttransform: matrix || undefined,\n\t\t\t'clip-path': clipPathId ? `url(#${clipPathId})` : undefined\n\t\t});\n\t}\n\n\t// This grapheme should be rendered as an image.\n\tif (image) {\n\t\tconst shapeProps = {\n\t\t\thref: image,\n\t\t\tx: left,\n\t\t\ty: top,\n\t\t\twidth,\n\t\t\theight,\n\t\t\ttransform: matrix || undefined,\n\t\t\t'clip-path': clipPathId ? `url(#${clipPathId})` : undefined,\n\t\t\tstyle: style.filter ? `filter:${style.filter}` : undefined\n\t\t};\n\t\treturn [\n\t\t\t(filter ? `${filter}<g filter=\"url(#satori_s-${id})\">` : '') +\n\t\t\t\tbuildXMLString('image', {\n\t\t\t\t\t...shapeProps,\n\t\t\t\t\topacity: opacity !== 1 ? opacity : undefined\n\t\t\t\t}) +\n\t\t\t\t(decorationShape || '') +\n\t\t\t\t(filter ? '</g>' : '') +\n\t\t\t\textra,\n\t\t\t// SVG doesn't support `<image>` as the shape.\n\t\t\t''\n\t\t];\n\t}\n\n\t// Do not embed the font, use <text> with the raw content instead.\n\tconst hasWebkitStroke = !!style.WebkitTextStrokeWidth;\n\tconst hasFauxBold = !hasWebkitStroke && fauxBoldStrokeWidth !== undefined;\n\tconst shapeProps = {\n\t\tx: left,\n\t\ty: top,\n\t\twidth,\n\t\theight,\n\t\t'font-weight': style.fontWeight,\n\t\t'font-style': style.fontStyle,\n\t\t'font-size': style.fontSize,\n\t\t'font-family': style.fontFamily,\n\t\t'letter-spacing': style.letterSpacing || undefined,\n\t\ttransform: matrix || undefined,\n\t\t'clip-path': clipPathId ? `url(#${clipPathId})` : undefined,\n\t\tstyle: style.filter ? `filter:${style.filter}` : undefined,\n\t\t'stroke-width': hasWebkitStroke\n\t\t\t? `${style.WebkitTextStrokeWidth}px`\n\t\t\t: hasFauxBold\n\t\t\t? `${fauxBoldStrokeWidth}`\n\t\t\t: undefined,\n\t\tstroke: hasWebkitStroke\n\t\t\t? style.WebkitTextStrokeColor\n\t\t\t: hasFauxBold\n\t\t\t? style.color\n\t\t\t: undefined,\n\t\t'stroke-linejoin': hasWebkitStroke || hasFauxBold ? 'round' : undefined,\n\t\t'paint-order': hasWebkitStroke || hasFauxBold ? 'stroke' : undefined\n\t};\n\treturn [\n\t\t(filter ? `${filter}<g filter=\"url(#satori_s-${id})\">` : '') +\n\t\t\tbuildXMLString(\n\t\t\t\t'text',\n\t\t\t\t{\n\t\t\t\t\t...shapeProps,\n\t\t\t\t\tfill: style.color,\n\t\t\t\t\topacity: opacity !== 1 ? opacity : undefined\n\t\t\t\t},\n\t\t\t\tescapeHTML(content)\n\t\t\t) +\n\t\t\t(decorationShape || '') +\n\t\t\t(filter ? '</g>' : '') +\n\t\t\textra,\n\t\tshape ? buildXMLString('text', shapeProps, escapeHTML(content)) : ''\n\t];\n}\n","import { multiply } from '../utils.js';\nimport type { ParsedTransformOrigin } from '../transform-origin.js';\n\nconst baseMatrix = [1, 0, 0, 1, 0, 0];\n\n// Mutate the array in place.\nfunction resolveTransforms(transforms: any[], width: number, height: number) {\n\tlet matrix = [...baseMatrix];\n\n\t// Handle CSS transforms To make it easier, we convert different transform\n\t// types directly to a matrix and apply it recursively to all its children.\n\t// Transforms are applied from right to left.\n\t// eslint-disable-next-line @typescript-eslint/no-shadow\n\tfor (const transform of transforms) {\n\t\tconst type = Object.keys(transform)[0];\n\t\tlet v = transform[type];\n\n\t\t// Resolve percentages based on the element's final size.\n\t\tif (typeof v === 'string') {\n\t\t\tif (type === 'translateX') {\n\t\t\t\tv = (parseFloat(v) / 100) * width;\n\t\t\t\t// Override the original object.\n\t\t\t\ttransform[type] = v;\n\t\t\t} else if (type === 'translateY') {\n\t\t\t\tv = (parseFloat(v) / 100) * height;\n\t\t\t\ttransform[type] = v;\n\t\t\t} else {\n\t\t\t\tthrow new Error(`Invalid transform: \"${type}: ${v}\".`);\n\t\t\t}\n\t\t}\n\n\t\tlet len = v as number;\n\n\t\tconst transformMatrix = [...baseMatrix];\n\t\tswitch (type) {\n\t\t\tcase 'translateX':\n\t\t\t\ttransformMatrix[4] = len;\n\t\t\t\tbreak;\n\t\t\tcase 'translateY':\n\t\t\t\ttransformMatrix[5] = len;\n\t\t\t\tbreak;\n\t\t\tcase 'scale':\n\t\t\t\ttransformMatrix[0] = len;\n\t\t\t\ttransformMatrix[3] = len;\n\t\t\t\tbreak;\n\t\t\tcase 'scaleX':\n\t\t\t\ttransformMatrix[0] = len;\n\t\t\t\tbreak;\n\t\t\tcase 'scaleY':\n\t\t\t\ttransformMatrix[3] = len;\n\t\t\t\tbreak;\n\t\t\tcase 'rotate': {\n\t\t\t\tconst rad = (len * Math.PI) / 180;\n\t\t\t\tconst c = Math.cos(rad);\n\t\t\t\tconst s = Math.sin(rad);\n\t\t\t\ttransformMatrix[0] = c;\n\t\t\t\ttransformMatrix[1] = s;\n\t\t\t\ttransformMatrix[2] = -s;\n\t\t\t\ttransformMatrix[3] = c;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'skewX':\n\t\t\t\ttransformMatrix[2] = Math.tan((len * Math.PI) / 180);\n\t\t\t\tbreak;\n\t\t\tcase 'skewY':\n\t\t\t\ttransformMatrix[1] = Math.tan((len * Math.PI) / 180);\n\t\t\t\tbreak;\n\t\t}\n\t\tmatrix = multiply(transformMatrix, matrix);\n\t}\n\n\ttransforms.splice(0, transforms.length);\n\ttransforms.push(...matrix);\n\t(transforms as any).__resolved = true;\n}\n\nexport default function transform(\n\t{\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight\n\t}: {\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t},\n\ttransforms: number[],\n\tisInheritingTransform: boolean,\n\ttransformOrigin?: ParsedTransformOrigin\n) {\n\tlet result: number[];\n\n\tif (!(transforms as any).__resolved) {\n\t\tresolveTransforms(transforms, width, height);\n\t}\n\n\tlet matrix = transforms;\n\n\t// Calculate the transform origin.\n\tif (isInheritingTransform) {\n\t\tresult = matrix;\n\t} else {\n\t\tconst xOrigin =\n\t\t\ttransformOrigin?.xAbsolute ??\n\t\t\t((transformOrigin?.xRelative ?? 50) * width) / 100;\n\t\tconst yOrigin =\n\t\t\ttransformOrigin?.yAbsolute ??\n\t\t\t((transformOrigin?.yRelative ?? 50) * height) / 100;\n\n\t\t// If this element is the transform target, we attach the origin coordinates\n\t\t// to this matrix.\n\t\tconst x = left + xOrigin;\n\t\tconst y = top + yOrigin;\n\n\t\t// Due to the different coordinate systems, we need to move the shape to the\n\t\t// origin first, then apply the matrix, then move it back.\n\t\tresult = multiply(\n\t\t\t[1, 0, 0, 1, x, y],\n\t\t\tmultiply(matrix, [1, 0, 0, 1, -x, -y])\n\t\t);\n\n\t\t// And we need to apply its parent transform if it has one.\n\t\tif ((matrix as any).__parent) {\n\t\t\tresult = multiply((matrix as any).__parent, result);\n\t\t}\n\n\t\t// Mutate self.\n\t\tmatrix.splice(0, 6, ...result);\n\t}\n\n\treturn `matrix(${result.map(v => v.toFixed(2)).join(',')})`;\n}\n","// @TODO: It seems that SVG filters are pretty expensive for resvg, PNG\n// generation time 10x'd when adding this filter (WASM in browser).\n// https://drafts.fxtf.org/filter-effects/#feGaussianBlurElement\n\nimport { buildXMLString } from '../utils.js';\n\nfunction shiftPath(path: string, dx: number, dy: number) {\n\treturn path.replace(\n\t\t/([MA])([0-9.-]+),([0-9.-]+)/g,\n\t\tfunction (_, command, x, y) {\n\t\t\treturn command + (parseFloat(x) + dx) + ',' + (parseFloat(y) + dy);\n\t\t}\n\t);\n}\n\n// The scale is used to make the filter area larger than the bounding box,\n// because usually the given measured text bounding is larger than the path\n// bounding.\n// The text bounding box is measured via the font metrics, which is not the same\n// as the actual content. For example, the text bounding box of \"A\" is larger\n// than the actual \"a\" path but they have the same font metrics.\n// This scale can be adjusted to prevent the filter from cutting off the text.\nconst SCALE = 1.1;\n\nexport function buildDropShadow(\n\t{ id, width, height }: { id: string; width: number; height: number },\n\tstyle: {\n\t\tshadowColor: string[];\n\t\tshadowOffset: {\n\t\t\twidth: number;\n\t\t\theight: number;\n\t\t}[];\n\t\tshadowRadius: number[];\n\t},\n\ttransparentText = false\n) {\n\tif (\n\t\t!style.shadowColor ||\n\t\t!style.shadowOffset ||\n\t\ttypeof style.shadowRadius === 'undefined'\n\t) {\n\t\treturn '';\n\t}\n\n\tconst shadowCount = style.shadowColor.length;\n\tlet effects = '';\n\tlet merge = '';\n\n\t// There could be multiple shadows, we need to get the maximum bounding box\n\t// and use `feMerge` to merge them together.\n\tlet left = 0;\n\tlet right = width;\n\tlet top = 0;\n\tlet bottom = height;\n\tfor (let i = 0; i < shadowCount; i++) {\n\t\t// Expand the area for the filter to prevent it from cutting off.\n\t\tconst grow = (style.shadowRadius[i] * style.shadowRadius[i]) / 4;\n\t\tleft = Math.min(style.shadowOffset[i].width - grow, left);\n\t\tright = Math.max(style.shadowOffset[i].width + grow + width, right);\n\t\ttop = Math.min(style.shadowOffset[i].height - grow, top);\n\t\tbottom = Math.max(style.shadowOffset[i].height + grow + height, bottom);\n\n\t\tif (transparentText) {\n\t\t\t// For transparent text, use primitive filters instead of feDropShadow\n\t\t\t// because feDropShadow automatically includes source in output and\n\t\t\t// source has unwanted text color\n\t\t\tconst resultId = `satori_s-${id}-result-${i}`;\n\t\t\teffects +=\n\t\t\t\tbuildXMLString('feGaussianBlur', {\n\t\t\t\t\tin: 'SourceAlpha',\n\t\t\t\t\tstdDeviation: style.shadowRadius[i] / 2,\n\t\t\t\t\tresult: `${resultId}-blur`\n\t\t\t\t}) +\n\t\t\t\tbuildXMLString('feOffset', {\n\t\t\t\t\tin: `${resultId}-blur`,\n\t\t\t\t\tdx: style.shadowOffset[i].width,\n\t\t\t\t\tdy: style.shadowOffset[i].height,\n\t\t\t\t\tresult: `${resultId}-offset`\n\t\t\t\t}) +\n\t\t\t\tbuildXMLString('feFlood', {\n\t\t\t\t\t'flood-color': style.shadowColor[i],\n\t\t\t\t\t'flood-opacity': 1,\n\t\t\t\t\tresult: `${resultId}-color`\n\t\t\t\t}) +\n\t\t\t\tbuildXMLString('feComposite', {\n\t\t\t\t\tin: `${resultId}-color`,\n\t\t\t\t\tin2: `${resultId}-offset`,\n\t\t\t\t\toperator: 'in',\n\t\t\t\t\tresult: shadowCount > 1 ? resultId : undefined\n\t\t\t\t});\n\t\t} else {\n\t\t\teffects += buildXMLString('feDropShadow', {\n\t\t\t\tdx: style.shadowOffset[i].width,\n\t\t\t\tdy: style.shadowOffset[i].height,\n\t\t\t\tstdDeviation:\n\t\t\t\t\t// According to the spec, we use the half of the blur radius as the standard\n\t\t\t\t\t// deviation for the filter.\n\t\t\t\t\t// > the image that would be generated by applying to the shadow a Gaussian\n\t\t\t\t\t// > blur with a standard deviation equal to half the blur radius\n\t\t\t\t\t// > https://www.w3.org/TR/css-backgrounds-3/#shadow-blur\n\t\t\t\t\tstyle.shadowRadius[i] / 2,\n\t\t\t\t'flood-color': style.shadowColor[i],\n\t\t\t\t'flood-opacity': 1,\n\t\t\t\t...(shadowCount > 1\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tin: 'SourceGraphic',\n\t\t\t\t\t\t\tresult: `satori_s-${id}-result-${i}`\n\t\t\t\t\t }\n\t\t\t\t\t: {})\n\t\t\t});\n\t\t}\n\n\t\tif (shadowCount > 1) {\n\t\t\t// Merge needs to be in reverse order.\n\t\t\tmerge =\n\t\t\t\tbuildXMLString('feMergeNode', {\n\t\t\t\t\tin: `satori_s-${id}-result-${i}`\n\t\t\t\t}) + merge;\n\t\t}\n\t}\n\n\treturn buildXMLString(\n\t\t'filter',\n\t\t{\n\t\t\tid: `satori_s-${id}`,\n\t\t\tx: ((left / width) * 100 * SCALE).toFixed(2) + '%',\n\t\t\ty: ((top / height) * 100 * SCALE).toFixed(2) + '%',\n\t\t\twidth: (((right - left) / width) * 100 * SCALE).toFixed(2) + '%',\n\t\t\theight: (((bottom - top) / height) * 100 * SCALE).toFixed(2) + '%'\n\t\t},\n\t\teffects + (merge ? buildXMLString('feMerge', {}, merge) : '')\n\t);\n}\n\nexport function boxShadow(\n\t{\n\t\twidth,\n\t\theight,\n\t\tshape,\n\t\topacity,\n\t\tid\n\t}: {\n\t\twidth: number;\n\t\theight: number;\n\t\tshape: string;\n\t\topacity: number;\n\t\tid: string;\n\t},\n\tstyle: Record<string, any>\n) {\n\tif (!style.boxShadow) return null;\n\n\tlet shadow = '';\n\tlet innerShadow = '';\n\n\tfor (let i = style.boxShadow.length - 1; i >= 0; i--) {\n\t\tlet s = '';\n\n\t\tconst shadowStyle = style.boxShadow[i];\n\n\t\tif (shadowStyle.spreadRadius && shadowStyle.inset) {\n\t\t\tshadowStyle.spreadRadius = -shadowStyle.spreadRadius;\n\t\t}\n\n\t\t// Expand the area for the filter to prevent it from cutting off.\n\t\tconst grow =\n\t\t\t(shadowStyle.blurRadius * shadowStyle.blurRadius) / 4 +\n\t\t\t(shadowStyle.spreadRadius || 0);\n\n\t\tconst left = Math.min(\n\t\t\t-grow - (shadowStyle.inset ? shadowStyle.offsetX : 0),\n\t\t\t0\n\t\t);\n\t\tconst right = Math.max(\n\t\t\tgrow + width - (shadowStyle.inset ? shadowStyle.offsetX : 0),\n\t\t\twidth\n\t\t);\n\t\tconst top = Math.min(\n\t\t\t-grow - (shadowStyle.inset ? shadowStyle.offsetY : 0),\n\t\t\t0\n\t\t);\n\t\tconst bottom = Math.max(\n\t\t\tgrow + height - (shadowStyle.inset ? shadowStyle.offsetY : 0),\n\t\t\theight\n\t\t);\n\n\t\tconst sid = `satori_s-${id}-${i}`;\n\t\tconst maskId = `satori_ms-${id}-${i}`;\n\t\tconst shapeWithSpread = shadowStyle.spreadRadius\n\t\t\t? shape.replace(\n\t\t\t\t\t'stroke-width=\"0\"',\n\t\t\t\t\t`stroke-width=\"${shadowStyle.spreadRadius * 2}\"`\n\t\t\t )\n\t\t\t: shape;\n\n\t\ts += buildXMLString(\n\t\t\t'mask',\n\t\t\t{\n\t\t\t\tid: maskId,\n\t\t\t\tmaskUnits: 'userSpaceOnUse'\n\t\t\t},\n\t\t\tbuildXMLString('rect', {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t\twidth: style._viewportWidth || '100%',\n\t\t\t\theight: style._viewportHeight || '100%',\n\t\t\t\tfill: shadowStyle.inset ? '#000' : '#fff'\n\t\t\t}) +\n\t\t\t\tshapeWithSpread\n\t\t\t\t\t.replace(\n\t\t\t\t\t\t'fill=\"#fff\"',\n\t\t\t\t\t\tshadowStyle.inset ? 'fill=\"#fff\"' : 'fill=\"#000\"'\n\t\t\t\t\t)\n\t\t\t\t\t.replace('stroke=\"#fff\"', '')\n\t\t);\n\n\t\tlet finalShape = shapeWithSpread\n\t\t\t.replace(/d=\"([^\"]+)\"/, (_, path) => {\n\t\t\t\treturn (\n\t\t\t\t\t'd=\"' +\n\t\t\t\t\tshiftPath(path, shadowStyle.offsetX, shadowStyle.offsetY) +\n\t\t\t\t\t'\"'\n\t\t\t\t);\n\t\t\t})\n\t\t\t.replace(/x=\"([^\"]+)\"/, (_, x) => {\n\t\t\t\treturn 'x=\"' + (parseFloat(x) + shadowStyle.offsetX) + '\"';\n\t\t\t})\n\t\t\t.replace(/y=\"([^\"]+)\"/, (_, y) => {\n\t\t\t\treturn 'y=\"' + (parseFloat(y) + shadowStyle.offsetY) + '\"';\n\t\t\t});\n\n\t\t// Negative spread radius, we need another mask here.\n\t\tif (shadowStyle.spreadRadius && shadowStyle.spreadRadius < 0) {\n\t\t\ts += buildXMLString(\n\t\t\t\t'mask',\n\t\t\t\t{\n\t\t\t\t\tid: maskId + '-neg',\n\t\t\t\t\tmaskUnits: 'userSpaceOnUse'\n\t\t\t\t},\n\t\t\t\tfinalShape\n\t\t\t\t\t.replace('stroke=\"#fff\"', 'stroke=\"#000\"')\n\t\t\t\t\t.replace(\n\t\t\t\t\t\t/stroke-width=\"[^\"]+\"/,\n\t\t\t\t\t\t`stroke-width=\"${-shadowStyle.spreadRadius * 2}\"`\n\t\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tif (shadowStyle.spreadRadius && shadowStyle.spreadRadius < 0) {\n\t\t\tfinalShape = buildXMLString(\n\t\t\t\t'g',\n\t\t\t\t{\n\t\t\t\t\tmask: `url(#${maskId}-neg)`\n\t\t\t\t},\n\t\t\t\tfinalShape\n\t\t\t);\n\t\t}\n\n\t\ts +=\n\t\t\tbuildXMLString(\n\t\t\t\t'defs',\n\t\t\t\t{},\n\t\t\t\tbuildXMLString(\n\t\t\t\t\t'filter',\n\t\t\t\t\t{\n\t\t\t\t\t\tid: sid,\n\t\t\t\t\t\tx: `${(left / width) * 100}%`,\n\t\t\t\t\t\ty: `${(top / height) * 100}%`,\n\t\t\t\t\t\twidth: `${((right - left) / width) * 100}%`,\n\t\t\t\t\t\theight: `${((bottom - top) / height) * 100}%`\n\t\t\t\t\t},\n\t\t\t\t\tbuildXMLString('feGaussianBlur', {\n\t\t\t\t\t\t// According to the spec, we use the half of the blur radius as the standard\n\t\t\t\t\t\t// deviation for the filter.\n\t\t\t\t\t\t// > the image that would be generated by applying to the shadow a Gaussian\n\t\t\t\t\t\t// > blur with a standard deviation equal to half the blur radius\n\t\t\t\t\t\t// > https://www.w3.org/TR/css-backgrounds-3/#shadow-blur\n\t\t\t\t\t\tstdDeviation: shadowStyle.blurRadius / 2,\n\t\t\t\t\t\tresult: 'b'\n\t\t\t\t\t}) +\n\t\t\t\t\t\tbuildXMLString('feFlood', {\n\t\t\t\t\t\t\t'flood-color': shadowStyle.color,\n\t\t\t\t\t\t\tin: 'SourceGraphic',\n\t\t\t\t\t\t\tresult: 'f'\n\t\t\t\t\t\t}) +\n\t\t\t\t\t\tbuildXMLString('feComposite', {\n\t\t\t\t\t\t\tin: 'f',\n\t\t\t\t\t\t\tin2: 'b',\n\t\t\t\t\t\t\toperator: shadowStyle.inset ? 'out' : 'in'\n\t\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t) +\n\t\t\tbuildXMLString(\n\t\t\t\t'g',\n\t\t\t\t{\n\t\t\t\t\tmask: `url(#${maskId})`,\n\t\t\t\t\tfilter: `url(#${sid})`,\n\t\t\t\t\topacity: opacity\n\t\t\t\t},\n\t\t\t\tfinalShape\n\t\t\t);\n\n\t\tif (shadowStyle.inset) {\n\t\t\tinnerShadow += s;\n\t\t} else {\n\t\t\tshadow += s;\n\t\t}\n\t}\n\n\treturn [shadow, innerShadow];\n}\n","import { buildXMLString } from '../utils.js';\nimport type { GlyphBox } from '../font.js';\n\nfunction buildSkipInkSegments(\n\tstart: number,\n\tend: number,\n\tglyphBoxes: GlyphBox[],\n\ty: number,\n\tstrokeWidth: number,\n\tbaseline: number\n) {\n\tconst halfStroke = strokeWidth / 2;\n\tconst bleed = Math.max(halfStroke, strokeWidth * 1.25);\n\tconst skipRanges: [number, number][] = [];\n\n\tfor (const box of glyphBoxes) {\n\t\t// Only skip glyphs that actually cross the underline position and extend below the baseline.\n\t\tif (box.y2 < baseline + halfStroke || box.y1 > y + halfStroke) continue;\n\n\t\tconst from = Math.max(start, box.x1 - bleed);\n\t\tconst to = Math.min(end, box.x2 + bleed);\n\n\t\tif (from >= to) continue;\n\t\tif (skipRanges.length === 0) {\n\t\t\tskipRanges.push([from, to]);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst last = skipRanges[skipRanges.length - 1];\n\t\tif (from <= last[1]) {\n\t\t\tlast[1] = Math.max(last[1], to);\n\t\t} else {\n\t\t\tskipRanges.push([from, to]);\n\t\t}\n\t}\n\n\tif (!skipRanges.length) {\n\t\treturn [[start, end]] as [number, number][];\n\t}\n\n\tconst segments: [number, number][] = [];\n\tlet cursor = start;\n\n\tfor (const [from, to] of skipRanges) {\n\t\tif (from > cursor) {\n\t\t\tsegments.push([cursor, from]);\n\t\t}\n\t\tcursor = Math.max(cursor, to);\n\t\tif (cursor >= end) break;\n\t}\n\n\tif (cursor < end) {\n\t\tsegments.push([cursor, end]);\n\t}\n\n\treturn segments;\n}\n\nexport default function buildDecoration(\n\t{\n\t\twidth,\n\t\tleft,\n\t\ttop,\n\t\tascender,\n\t\tclipPathId,\n\t\tmatrix,\n\t\tglyphBoxes\n\t}: {\n\t\twidth: number;\n\t\tleft: number;\n\t\ttop: number;\n\t\tascender: number;\n\t\tclipPathId?: string;\n\t\tmatrix?: string;\n\t\tglyphBoxes?: GlyphBox[];\n\t},\n\tstyle: Record<string, any>\n) {\n\tconst {\n\t\ttextDecorationColor,\n\t\ttextDecorationStyle,\n\t\ttextDecorationLine,\n\t\ttextDecorationSkipInk,\n\t\tfontSize,\n\t\tcolor\n\t} = style;\n\tif (!textDecorationLine || textDecorationLine === 'none') return '';\n\n\t// The UA should use such font-based information when choosing auto line thicknesses wherever appropriate.\n\t// https://drafts.csswg.org/css-text-decor-4/#text-decoration-thickness\n\tconst height = Math.max(1, fontSize * 0.1);\n\n\tconst y =\n\t\ttextDecorationLine === 'line-through'\n\t\t\t? top + ascender * 0.7\n\t\t\t: textDecorationLine === 'underline'\n\t\t\t? top + ascender * 1.1\n\t\t\t: top;\n\n\tconst dasharray =\n\t\ttextDecorationStyle === 'dashed'\n\t\t\t? `${height * 1.2} ${height * 2}`\n\t\t\t: textDecorationStyle === 'dotted'\n\t\t\t? `0 ${height * 2}`\n\t\t\t: undefined;\n\n\tconst applySkipInk =\n\t\ttextDecorationLine === 'underline' &&\n\t\t(textDecorationSkipInk || 'auto') !== 'none' &&\n\t\tglyphBoxes?.length;\n\n\tconst baseline = top + ascender;\n\n\tconst segments = applySkipInk\n\t\t? buildSkipInkSegments(\n\t\t\t\tleft,\n\t\t\t\tleft + width,\n\t\t\t\tglyphBoxes,\n\t\t\t\ty,\n\t\t\t\theight,\n\t\t\t\tbaseline\n\t\t )\n\t\t: ([[left, left + width]] as [number, number][]);\n\n\t// https://www.w3.org/TR/css-backgrounds-3/#valdef-line-style-double\n\tconst extraLine =\n\t\ttextDecorationStyle === 'double'\n\t\t\t? segments\n\t\t\t\t\t.map(([x1, x2]) =>\n\t\t\t\t\t\tbuildXMLString('line', {\n\t\t\t\t\t\t\tx1,\n\t\t\t\t\t\t\ty1: y + height + 1,\n\t\t\t\t\t\t\tx2,\n\t\t\t\t\t\t\ty2: y + height + 1,\n\t\t\t\t\t\t\tstroke: textDecorationColor || color,\n\t\t\t\t\t\t\t'stroke-width': height,\n\t\t\t\t\t\t\t'stroke-dasharray': dasharray,\n\t\t\t\t\t\t\t'stroke-linecap':\n\t\t\t\t\t\t\t\ttextDecorationStyle === 'dotted'\n\t\t\t\t\t\t\t\t\t? 'round'\n\t\t\t\t\t\t\t\t\t: 'square',\n\t\t\t\t\t\t\ttransform: matrix\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t\t.join('')\n\t\t\t: '';\n\n\treturn (\n\t\t(clipPathId ? `<g clip-path=\"url(#${clipPathId})\">` : '') +\n\t\tsegments\n\t\t\t.map(([x1, x2]) =>\n\t\t\t\tbuildXMLString('line', {\n\t\t\t\t\tx1,\n\t\t\t\t\ty1: y,\n\t\t\t\t\tx2,\n\t\t\t\t\ty2: y,\n\t\t\t\t\tstroke: textDecorationColor || color,\n\t\t\t\t\t'stroke-width': height,\n\t\t\t\t\t'stroke-dasharray': dasharray,\n\t\t\t\t\t'stroke-linecap':\n\t\t\t\t\t\ttextDecorationStyle === 'dotted' ? 'round' : 'square',\n\t\t\t\t\ttransform: matrix\n\t\t\t\t})\n\t\t\t)\n\t\t\t.join('') +\n\t\textraLine +\n\t\t(clipPathId ? '</g>' : '')\n\t);\n}\n","export function stringFromCode(code: string): string {\n\tcode = code.replace('U+', '0x');\n\n\treturn String.fromCodePoint(Number(code));\n}\n\nexport const Space = stringFromCode('U+0020');\nexport const Tab = stringFromCode('U+0009');\nexport const HorizontalEllipsis = stringFromCode('U+2026');\n","import { FontEngine } from '../font.js';\nimport { segment } from '../utils.js';\n\nexport function genMeasurer(\n\tengine: FontEngine,\n\tisImage: (grapheme: string) => boolean,\n\tstyle: {\n\t\tfontSize: number;\n\t\tletterSpacing: number;\n\t}\n): {\n\tmeasureGrapheme: (grapheme: string) => number;\n\tmeasureGraphemeArray: (graphemes: string[]) => number;\n\tmeasureText: (text: string) => number;\n} {\n\tconst { fontSize, letterSpacing } = style;\n\n\tconst cache = new Map<string, number>();\n\n\tfunction measureGrapheme(grapheme: string): number {\n\t\tlet width = cache.get(grapheme);\n\n\t\tif (width === undefined) {\n\t\t\twidth = engine.measure(grapheme, { fontSize, letterSpacing });\n\t\t\tcache.set(grapheme, width);\n\t\t}\n\n\t\treturn width;\n\t}\n\n\tfunction measureGraphemeArray(graphemes: string[]): number {\n\t\tlet width = 0;\n\n\t\tfor (const grapheme of graphemes) {\n\t\t\tif (isImage(grapheme)) {\n\t\t\t\twidth += fontSize;\n\t\t\t} else {\n\t\t\t\twidth += measureGrapheme(grapheme);\n\t\t\t}\n\t\t}\n\n\t\treturn width;\n\t}\n\n\tfunction measureText(text: string): number {\n\t\treturn measureGraphemeArray(segment(text, 'grapheme'));\n\t}\n\n\treturn {\n\t\tmeasureGrapheme,\n\t\tmeasureGraphemeArray,\n\t\tmeasureText\n\t};\n}\n","import { Locale } from '../language.js';\nimport { isNumber, segment, splitByBreakOpportunities } from '../utils.js';\nimport { HorizontalEllipsis, Space } from './characters.js';\nimport { SerializedStyle } from '../handler/expand.js';\n\nexport function preprocess(\n\tcontent: string,\n\tstyle: SerializedStyle,\n\tlocale?: Locale\n): {\n\twords: string[];\n\trequiredBreaks: boolean[];\n\tallowSoftWrap: boolean;\n\tallowBreakWord: boolean;\n\tprocessedContent: string;\n\tshouldCollapseTabsAndSpaces: boolean;\n\tlineLimit: number;\n\tblockEllipsis: string;\n} {\n\tconst { textTransform, whiteSpace, wordBreak } = style;\n\n\tcontent = processTextTransform(content, textTransform, locale);\n\n\tconst {\n\t\tcontent: processedContent,\n\t\tshouldCollapseTabsAndSpaces,\n\t\tallowSoftWrap\n\t} = processWhiteSpace(content, whiteSpace);\n\n\tconst { words, requiredBreaks, allowBreakWord } = processWordBreak(\n\t\tprocessedContent,\n\t\twordBreak\n\t);\n\n\tconst [lineLimit, blockEllipsis] = processTextOverflow(\n\t\tstyle,\n\t\tallowSoftWrap\n\t);\n\n\treturn {\n\t\twords,\n\t\trequiredBreaks,\n\t\tallowSoftWrap,\n\t\tallowBreakWord,\n\t\tprocessedContent,\n\t\tshouldCollapseTabsAndSpaces,\n\t\tlineLimit,\n\t\tblockEllipsis\n\t};\n}\n\nfunction processTextTransform(\n\tcontent: string,\n\ttextTransform: string,\n\tlocale?: Locale\n): string {\n\tif (textTransform === 'uppercase') {\n\t\tcontent = content.toLocaleUpperCase(locale);\n\t} else if (textTransform === 'lowercase') {\n\t\tcontent = content.toLocaleLowerCase(locale);\n\t} else if (textTransform === 'capitalize') {\n\t\tcontent = segment(content, 'word', locale)\n\t\t\t// For each word...\n\t\t\t.map(word => {\n\t\t\t\t// ...split into graphemes...\n\t\t\t\treturn segment(word, 'grapheme', locale)\n\t\t\t\t\t.map((grapheme, index) => {\n\t\t\t\t\t\t// ...and make the first grapheme uppercase\n\t\t\t\t\t\treturn index === 0\n\t\t\t\t\t\t\t? grapheme.toLocaleUpperCase(locale)\n\t\t\t\t\t\t\t: grapheme;\n\t\t\t\t\t})\n\t\t\t\t\t.join('');\n\t\t\t})\n\t\t\t.join('');\n\t}\n\n\treturn content;\n}\n\nfunction processTextOverflow(\n\tstyle: SerializedStyle,\n\tallowSoftWrap: boolean\n): [number, string?] {\n\tconst {\n\t\ttextOverflow,\n\t\tlineClamp,\n\t\tWebkitLineClamp,\n\t\tWebkitBoxOrient,\n\t\toverflow,\n\t\tdisplay\n\t} = style;\n\n\tif (display === 'block' && lineClamp) {\n\t\tconst [lineLimit, blockEllipsis = HorizontalEllipsis] =\n\t\t\tparseLineClamp(lineClamp);\n\t\tif (lineLimit) {\n\t\t\treturn [lineLimit, blockEllipsis];\n\t\t}\n\t}\n\n\tif (\n\t\ttextOverflow === 'ellipsis' &&\n\t\tdisplay === '-webkit-box' &&\n\t\tWebkitBoxOrient === 'vertical' &&\n\t\tisNumber(WebkitLineClamp) &&\n\t\tWebkitLineClamp > 0\n\t) {\n\t\treturn [WebkitLineClamp, HorizontalEllipsis];\n\t}\n\n\tif (\n\t\ttextOverflow === 'ellipsis' &&\n\t\toverflow === 'hidden' &&\n\t\t!allowSoftWrap\n\t) {\n\t\treturn [1, HorizontalEllipsis];\n\t}\n\n\treturn [Infinity];\n}\n\nfunction processWordBreak(\n\tcontent,\n\twordBreak: string\n): { words: string[]; requiredBreaks: boolean[]; allowBreakWord: boolean } {\n\tconst allowBreakWord = ['break-all', 'break-word'].includes(wordBreak);\n\n\tconst { words, requiredBreaks } = splitByBreakOpportunities(\n\t\tcontent,\n\t\twordBreak\n\t);\n\n\treturn { words, requiredBreaks, allowBreakWord };\n}\n\nfunction processWhiteSpace(\n\tcontent: string,\n\twhiteSpace: string\n): {\n\tcontent: string;\n\tshouldCollapseTabsAndSpaces: boolean;\n\tallowSoftWrap: boolean;\n} {\n\tconst shouldKeepLinebreak = ['pre', 'pre-wrap', 'pre-line'].includes(\n\t\twhiteSpace\n\t);\n\n\tconst shouldCollapseTabsAndSpaces = [\n\t\t'normal',\n\t\t'nowrap',\n\t\t'pre-line'\n\t].includes(whiteSpace);\n\n\tconst allowSoftWrap = !['pre', 'nowrap'].includes(whiteSpace);\n\n\tif (!shouldKeepLinebreak) {\n\t\tcontent = content.replace(/\\n/g, Space);\n\t}\n\n\tif (shouldCollapseTabsAndSpaces) {\n\t\tcontent = content\n\t\t\t.replace(/([ ]|\\t)+/g, Space)\n\t\t\t.replace(/^[ ]|[ ]$/g, '');\n\t}\n\n\treturn { content, shouldCollapseTabsAndSpaces, allowSoftWrap };\n}\n\nfunction parseLineClamp(input: number | string): [number?, string?] {\n\tif (typeof input === 'number') return [input];\n\n\tconst regex1 = /^(\\d+)\\s*\"(.*)\"$/;\n\tconst regex2 = /^(\\d+)\\s*'(.*)'$/;\n\tconst match1 = regex1.exec(input);\n\tconst match2 = regex2.exec(input);\n\n\tif (match1) {\n\t\tconst number = +match1[1];\n\t\tconst text = match1[2];\n\n\t\treturn [number, text];\n\t} else if (match2) {\n\t\tconst number = +match2[1];\n\t\tconst text = match2[2];\n\n\t\treturn [number, text];\n\t}\n\n\treturn [];\n}\n","/**\n * This module calculates the layout of a text string. Currently the only\n * supported inline node is text. All other nodes are using block layout.\n */\nimport type { LayoutContext } from '../layout.js';\nimport {\n\tv,\n\tsegment,\n\twordSeparators,\n\tbuildXMLString,\n\tisUndefined,\n\tisString,\n\tlengthToNumber\n} from '../utils.js';\nimport { getYoga, TYoga, YogaNode } from '../yoga.js';\nimport buildText, { container } from '../builder/text.js';\nimport { buildDropShadow } from '../builder/shadow.js';\nimport buildDecoration from '../builder/text-decoration.js';\nimport type { GlyphBox } from '../font.js';\nimport { Locale } from '../language.js';\nimport { HorizontalEllipsis, Space, Tab } from './characters.js';\nimport { genMeasurer } from './measurer.js';\nimport { preprocess } from './processor.js';\nimport cssColorParse from 'parse-css-color';\n\nconst skippedWordWhenFindingMissingFont = new Set([Tab]);\n\nfunction shouldSkipWhenFindingMissingFont(word: string): boolean {\n\treturn skippedWordWhenFindingMissingFont.has(word);\n}\n\nfunction isFullyTransparent(color: string): boolean {\n\tif (color === 'transparent') return true;\n\tconst parsed = cssColorParse(color);\n\treturn parsed ? parsed.alpha === 0 : false;\n}\n\nfunction isOpaqueWhite(color: string): boolean {\n\tif (!color) return false;\n\tconst parsed = cssColorParse(color);\n\tif (!parsed) return false;\n\tconst [r, g, b, a] = parsed.values;\n\treturn r === 255 && g === 255 && b === 255 && (a === undefined || a === 1);\n}\n\nexport default async function* buildTextNodes(\n\tcontent: string,\n\tcontext: LayoutContext\n): AsyncGenerator<{ word: string; locale?: Locale }[], string, [any, any]> {\n\tconst Yoga = await getYoga();\n\n\tconst {\n\t\tparentStyle,\n\t\tinheritedStyle,\n\t\tparent,\n\t\tfont,\n\t\tid,\n\t\tisInheritingTransform,\n\t\tdebug,\n\t\tembedFont,\n\t\tgraphemeImages,\n\t\tlocale,\n\t\tcanLoadAdditionalAssets\n\t} = context;\n\n\tconst {\n\t\ttextAlign,\n\t\ttextIndent = 0,\n\t\tlineHeight,\n\t\ttextWrap,\n\t\tfontSize,\n\t\tfilter: cssFilter,\n\t\ttabSize = 8,\n\t\tletterSpacing,\n\t\t_inheritedBackgroundClipTextPath,\n\t\t_inheritedBackgroundClipTextHasBackground,\n\t\tflexShrink\n\t} = parentStyle;\n\n\tconst {\n\t\twords,\n\t\trequiredBreaks,\n\t\tallowSoftWrap,\n\t\tallowBreakWord,\n\t\tprocessedContent,\n\t\tshouldCollapseTabsAndSpaces,\n\t\tlineLimit,\n\t\tblockEllipsis\n\t} = preprocess(content, parentStyle, locale);\n\n\tconst textContainer = createTextContainerNode(Yoga, textAlign);\n\tparent.insertChild(textContainer, parent.getChildCount());\n\n\tif (isUndefined(flexShrink)) {\n\t\tparent.setFlexShrink(1);\n\t}\n\n\t// Get the correct font according to the container style.\n\t// https://www.w3.org/TR/CSS2/visudet.html\n\tlet engine = font.getEngine(fontSize, lineHeight, parentStyle, locale);\n\n\t// Yield segments that are missing a font.\n\tconst wordsMissingFont = canLoadAdditionalAssets\n\t\t? segment(processedContent, 'grapheme').filter(\n\t\t\t\tword =>\n\t\t\t\t\t!shouldSkipWhenFindingMissingFont(word) && !engine.has(word)\n\t\t )\n\t\t: [];\n\n\tyield wordsMissingFont.map(word => {\n\t\treturn {\n\t\t\tword,\n\t\t\tlocale\n\t\t};\n\t});\n\n\tif (wordsMissingFont.length) {\n\t\t// Reload the engine with additional fonts.\n\t\tengine = font.getEngine(fontSize, lineHeight, parentStyle, locale);\n\t}\n\n\tfunction isImage(s: string): boolean {\n\t\treturn !!(graphemeImages && graphemeImages[s]);\n\t}\n\n\tconst { measureGrapheme, measureGraphemeArray, measureText } = genMeasurer(\n\t\tengine,\n\t\tisImage,\n\t\t{\n\t\t\tfontSize,\n\t\t\tletterSpacing\n\t\t}\n\t);\n\n\tconst tabWidth = isString(tabSize)\n\t\t? lengthToNumber(tabSize, fontSize, 1, parentStyle)\n\t\t: measureGrapheme(Space) * tabSize;\n\n\tconst calc = (\n\t\ttext: string,\n\t\tcurrentWidth: number\n\t): {\n\t\toriginWidth: number;\n\t\tendingSpacesWidth: number;\n\t\ttext: string;\n\t} => {\n\t\tif (text.length === 0) {\n\t\t\treturn {\n\t\t\t\toriginWidth: 0,\n\t\t\t\tendingSpacesWidth: 0,\n\t\t\t\ttext\n\t\t\t};\n\t\t}\n\n\t\tconst { index, tabCount } = detectTabs(text);\n\n\t\tlet originWidth = 0;\n\n\t\tif (tabCount > 0) {\n\t\t\tconst textBeforeTab = text.slice(0, index);\n\t\t\tconst textAfterTab = text.slice(index + tabCount);\n\t\t\tconst textWidthBeforeTab = measureText(textBeforeTab);\n\t\t\tconst offsetBeforeTab = textWidthBeforeTab + currentWidth;\n\t\t\tconst tabMoveDistance =\n\t\t\t\ttabWidth === 0\n\t\t\t\t\t? textWidthBeforeTab\n\t\t\t\t\t: (Math.floor(offsetBeforeTab / tabWidth) + tabCount) *\n\t\t\t\t\t tabWidth;\n\t\t\toriginWidth = tabMoveDistance + measureText(textAfterTab);\n\t\t} else {\n\t\t\toriginWidth = measureText(text);\n\t\t}\n\n\t\tconst afterTrimEndWidth =\n\t\t\ttext.trimEnd() === text ? originWidth : measureText(text.trimEnd());\n\n\t\treturn {\n\t\t\toriginWidth,\n\t\t\tendingSpacesWidth: originWidth - afterTrimEndWidth,\n\t\t\ttext\n\t\t};\n\t};\n\n\t// Global variables used to compute the text layout.\n\t// @TODO: Use segments instead of words to properly support kerning.\n\tlet lineWidths = [];\n\tlet baselines = [];\n\tlet lineSegmentNumber = [];\n\tlet texts: string[] = [];\n\tlet wordPositionInLayout: (null | {\n\t\tx: number;\n\t\ty: number;\n\t\twidth: number;\n\t\tline: number;\n\t\tlineIndex: number;\n\t\tisImage: boolean;\n\t})[] = [];\n\n\t// With the given container width, compute the text layout.\n\tfunction flow(width: number) {\n\t\tlet lines = 0;\n\t\tlet maxWidth = 0;\n\t\tlet lineIndex = -1;\n\t\tlet height = 0;\n\t\tlet currentWidth = 0;\n\t\tlet currentLineHeight = 0;\n\t\tlet currentBaselineOffset = 0;\n\n\t\tlineWidths = [];\n\t\tlineSegmentNumber = [0];\n\t\ttexts = [];\n\t\twordPositionInLayout = [];\n\n\t\t// We naively implement the width calculation without proper kerning.\n\t\t// @TODO: Support different writing modes.\n\t\t// @TODO: Support RTL languages.\n\t\tlet i = 0;\n\t\tlet prevLineEndingSpacesWidth = 0;\n\t\twhile (i < words.length && lines < lineLimit) {\n\t\t\tlet word = words[i];\n\t\t\tconst forceBreak = requiredBreaks[i];\n\n\t\t\tlet w = 0;\n\n\t\t\tconst {\n\t\t\t\toriginWidth,\n\t\t\t\tendingSpacesWidth,\n\t\t\t\ttext: _word\n\t\t\t} = calc(word, currentWidth);\n\t\t\tword = _word;\n\n\t\t\tw = originWidth;\n\t\t\tconst lineEndingSpacesWidth = endingSpacesWidth;\n\n\t\t\t// When starting a new line from an empty line, we should push one extra\n\t\t\t// line height.\n\t\t\tif (forceBreak && currentLineHeight === 0) {\n\t\t\t\tcurrentLineHeight = engine.height(word);\n\t\t\t}\n\n\t\t\tconst allowedToJustify = textAlign === 'justify';\n\n\t\t\tconst willWrap =\n\t\t\t\ti &&\n\t\t\t\t// When determining whether a line break is necessary, the width of the\n\t\t\t\t// trailing spaces is not included in the calculation, as the end boundary\n\t\t\t\t// can be closely adjacent to the last non-space character.\n\t\t\t\t// e.g.\n\t\t\t\t// 'aaa bbb ccc'\n\t\t\t\t// When the break line happens at the end of the `bbb`, what we see looks like this\n\t\t\t\t// |aaa bbb|\n\t\t\t\t// |ccc |\n\t\t\t\tcurrentWidth + w > width + lineEndingSpacesWidth &&\n\t\t\t\tallowSoftWrap;\n\n\t\t\t// Need to break the word if:\n\t\t\t// - we have break-word\n\t\t\t// - the word is wider than the container width\n\t\t\t// - the word will be put at the beginning of the line\n\t\t\tconst needToBreakWord =\n\t\t\t\tallowBreakWord &&\n\t\t\t\tw > width &&\n\t\t\t\t(!currentWidth || willWrap || forceBreak);\n\n\t\t\tif (needToBreakWord) {\n\t\t\t\t// Break the word into multiple segments and continue the loop.\n\t\t\t\tconst chars = segment(word, 'grapheme');\n\t\t\t\twords.splice(i, 1, ...chars);\n\t\t\t\tif (currentWidth > 0) {\n\t\t\t\t\t// Start a new line, spaces can be ignored.\n\t\t\t\t\tlineWidths.push(currentWidth - prevLineEndingSpacesWidth);\n\t\t\t\t\tbaselines.push(currentBaselineOffset);\n\t\t\t\t\tlines++;\n\t\t\t\t\theight += currentLineHeight;\n\t\t\t\t\tcurrentWidth = 0;\n\t\t\t\t\tcurrentLineHeight = 0;\n\t\t\t\t\tcurrentBaselineOffset = 0;\n\t\t\t\t\tlineSegmentNumber.push(1);\n\t\t\t\t\tlineIndex = -1;\n\t\t\t\t}\n\t\t\t\tprevLineEndingSpacesWidth = lineEndingSpacesWidth;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (forceBreak || willWrap) {\n\t\t\t\t// Start a new line, spaces can be ignored.\n\t\t\t\tif (shouldCollapseTabsAndSpaces && word === Space) {\n\t\t\t\t\tw = 0;\n\t\t\t\t}\n\n\t\t\t\tlineWidths.push(currentWidth - prevLineEndingSpacesWidth);\n\t\t\t\tbaselines.push(currentBaselineOffset);\n\t\t\t\tlines++;\n\t\t\t\theight += currentLineHeight;\n\t\t\t\tcurrentWidth = w;\n\t\t\t\tcurrentLineHeight = w ? Math.round(engine.height(word)) : 0;\n\t\t\t\tcurrentBaselineOffset = w\n\t\t\t\t\t? Math.round(engine.baseline(word))\n\t\t\t\t\t: 0;\n\t\t\t\tlineSegmentNumber.push(1);\n\t\t\t\tlineIndex = -1;\n\n\t\t\t\t// If it's naturally broken, we update the max width.\n\t\t\t\t// Since if there are multiple lines, the width should fit the\n\t\t\t\t// container.\n\t\t\t\tif (!forceBreak) {\n\t\t\t\t\tmaxWidth = Math.max(maxWidth, width);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// It fits into the current line.\n\t\t\t\tcurrentWidth += w;\n\t\t\t\tconst glyphHeight = Math.round(engine.height(word));\n\t\t\t\tif (glyphHeight > currentLineHeight) {\n\t\t\t\t\t// Use the baseline of the highest segment as the baseline of the line.\n\t\t\t\t\tcurrentLineHeight = glyphHeight;\n\t\t\t\t\tcurrentBaselineOffset = Math.round(engine.baseline(word));\n\t\t\t\t}\n\t\t\t\tif (allowedToJustify) {\n\t\t\t\t\tlineSegmentNumber[lineSegmentNumber.length - 1]++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (allowedToJustify) {\n\t\t\t\tlineIndex++;\n\t\t\t}\n\n\t\t\tmaxWidth = Math.max(maxWidth, currentWidth);\n\n\t\t\tlet x = currentWidth - w;\n\n\t\t\tif (w === 0) {\n\t\t\t\twordPositionInLayout.push({\n\t\t\t\t\ty: height,\n\t\t\t\t\tx,\n\t\t\t\t\twidth: 0,\n\t\t\t\t\tline: lines,\n\t\t\t\t\tlineIndex,\n\t\t\t\t\tisImage: false\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst _texts = segment(word, 'word');\n\n\t\t\t\tfor (let j = 0; j < _texts.length; j++) {\n\t\t\t\t\tconst _text = _texts[j];\n\t\t\t\t\tlet _width = 0;\n\t\t\t\t\tlet _isImage = false;\n\n\t\t\t\t\tif (isImage(_text)) {\n\t\t\t\t\t\t_width = fontSize;\n\t\t\t\t\t\t_isImage = true;\n\t\t\t\t\t} else if (!embedFont && _text.length > 1) {\n\t\t\t\t\t\t// When embedFont is false, use measureText for multi-character strings\n\t\t\t\t\t\t// to ensure consistency with how currentWidth is accumulated (sum of\n\t\t\t\t\t\t// grapheme widths). measureGrapheme uses getAdvanceWidth which includes\n\t\t\t\t\t\t// kerning, causing position mismatches between consecutive <text> elements.\n\t\t\t\t\t\t_width = measureText(_text);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_width = measureGrapheme(_text);\n\t\t\t\t\t}\n\n\t\t\t\t\ttexts.push(_text);\n\t\t\t\t\twordPositionInLayout.push({\n\t\t\t\t\t\ty: height,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\twidth: _width,\n\t\t\t\t\t\tline: lines,\n\t\t\t\t\t\tlineIndex,\n\t\t\t\t\t\tisImage: _isImage\n\t\t\t\t\t});\n\n\t\t\t\t\tx += _width;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti++;\n\t\t\tprevLineEndingSpacesWidth = lineEndingSpacesWidth;\n\t\t}\n\n\t\tif (currentWidth) {\n\t\t\tif (lines < lineLimit) {\n\t\t\t\theight += currentLineHeight;\n\t\t\t}\n\t\t\tlines++;\n\t\t\tlineWidths.push(currentWidth);\n\t\t\tbaselines.push(currentBaselineOffset);\n\t\t}\n\n\t\t// @TODO: Support `line-height`.\n\t\treturn { width: maxWidth, height };\n\t}\n\n\t// It's possible that the text's measured size is different from the container's\n\t// size, because the container might have a fixed width or height or being\n\t// expanded by its parent.\n\tlet measuredTextSize = { width: 0, height: 0 };\n\ttextContainer.setMeasureFunc(containerWidth => {\n\t\tconst { width, height } = flow(containerWidth);\n\n\t\t// When doing `text-wrap: balance`, we reflow the text multiple times\n\t\t// using binary search to find the best width.\n\t\t// https://www.w3.org/TR/css-text-4/#valdef-text-wrap-balance\n\t\tif (textWrap === 'balance') {\n\t\t\tlet l = width / 2;\n\t\t\tlet r = width;\n\t\t\tlet m: number = width;\n\t\t\twhile (l + 1 < r) {\n\t\t\t\tm = (l + r) / 2;\n\t\t\t\tconst { height: mHeight } = flow(m);\n\t\t\t\tif (mHeight > height) {\n\t\t\t\t\tl = m;\n\t\t\t\t} else {\n\t\t\t\t\tr = m;\n\t\t\t\t}\n\t\t\t}\n\t\t\tflow(r);\n\t\t\tconst _width = Math.ceil(r);\n\t\t\tmeasuredTextSize = { width: _width, height };\n\t\t\treturn { width: _width, height };\n\t\t}\n\n\t\t// When doing `text-wrap: pretty`, we try to avoid ending a paragraph with a single word\n\t\t// by reshaping all lines in a way that achieves more balanced line lengths\n\t\t// This \"pretty\" line breaking algorithm tries to achieve optimal line breaks\n\t\t// that avoid orphans (single words at the end of a paragraph) and create\n\t\t// visually pleasing line lengths.\n\t\tif (textWrap === 'pretty') {\n\t\t\t// Check if the last line has a single word or is very short\n\t\t\t// (typically less than 1/3 of the container width)\n\t\t\tconst lastLineWidth = lineWidths[lineWidths.length - 1];\n\t\t\tconst isLastLineShort = lastLineWidth < width / 3;\n\n\t\t\tif (isLastLineShort) {\n\t\t\t\t// Reflow the paragraph with slightly adjusted line breaks\n\t\t\t\t// to avoid orphans and create more even line lengths\n\t\t\t\t// This is a simplified approach - a real implementation would use a\n\t\t\t\t// more sophisticated algorithm to find optimal line breaks\n\n\t\t\t\t// We'll just reflow once with slightly reduced width to force\n\t\t\t\t// redistribution of words. This is much simplified from the actual\n\t\t\t\t// paragraph-level line breaking algorithm which would compute scores\n\t\t\t\t// for different line break combinations.\n\t\t\t\tconst adjustedWidth = width * 0.9;\n\t\t\t\tconst result = flow(adjustedWidth);\n\n\t\t\t\t// Use the result if it reduces orphans without adding too many lines\n\t\t\t\tif (result.height <= height * 1.3) {\n\t\t\t\t\tmeasuredTextSize = { width, height: result.height };\n\t\t\t\t\treturn { width, height: result.height };\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst _width = Math.ceil(width);\n\t\tmeasuredTextSize = { width: _width, height };\n\t\t// This may be a temporary fix, I didn't dig deep into yoga.\n\t\t// But when the return value of width here doesn't change (assuming the value of width is 216.9),\n\t\t// when we later get the width through `parent.getComputedWidth()`, sometimes it returns 216 and sometimes 217.\n\t\t// I'm not sure if this is a yoga bug, but it seems related to the entire page width.\n\t\t// So I use Math.ceil.\n\t\treturn { width: _width, height };\n\t});\n\n\tconst [x, y] = yield;\n\n\tlet result = '';\n\tlet backgroundClipDef = '';\n\n\tconst clipPathId = inheritedStyle._inheritedClipPathId as\n\t\t| string\n\t\t| undefined;\n\tconst overflowMaskId = inheritedStyle._inheritedMaskId as\n\t\t| number\n\t\t| undefined;\n\n\tconst {\n\t\tleft: containerLeft,\n\t\ttop: containerTop,\n\t\twidth: containerWidth,\n\t\theight: containerHeight\n\t} = textContainer.getComputedLayout();\n\n\t// Convert textIndent to number if it's a string (e.g., percentage)\n\tconst textIndentNumber =\n\t\ttypeof textIndent === 'string'\n\t\t\t? lengthToNumber(\n\t\t\t\t\ttextIndent,\n\t\t\t\t\tfontSize,\n\t\t\t\t\tcontainerWidth,\n\t\t\t\t\tparentStyle,\n\t\t\t\t\ttrue\n\t\t\t ) || 0\n\t\t\t: textIndent;\n\n\tconst parentContainerInnerWidth =\n\t\tparent.getComputedWidth() -\n\t\tparent.getComputedPadding(Yoga.EDGE_LEFT) -\n\t\tparent.getComputedPadding(Yoga.EDGE_RIGHT) -\n\t\tparent.getComputedBorder(Yoga.EDGE_LEFT) -\n\t\tparent.getComputedBorder(Yoga.EDGE_RIGHT);\n\n\t// Attach offset to the current node.\n\tconst left = x + containerLeft;\n\tconst top = y + containerTop;\n\n\tconst { matrix, opacity } = container(\n\t\t{\n\t\t\tleft: containerLeft,\n\t\t\ttop: containerTop,\n\t\t\twidth: containerWidth,\n\t\t\theight: containerHeight,\n\t\t\tisInheritingTransform\n\t\t},\n\t\tparentStyle\n\t);\n\n\tlet filter = '';\n\tif (parentStyle.textShadowOffset) {\n\t\tconst { textShadowColor, textShadowOffset, textShadowRadius } =\n\t\t\tparentStyle;\n\n\t\tfilter = buildDropShadow(\n\t\t\t{\n\t\t\t\twidth: measuredTextSize.width,\n\t\t\t\theight: measuredTextSize.height,\n\t\t\t\tid\n\t\t\t},\n\t\t\t{\n\t\t\t\tshadowColor: textShadowColor,\n\t\t\t\tshadowOffset: textShadowOffset,\n\t\t\t\tshadowRadius: textShadowRadius\n\t\t\t},\n\t\t\tisFullyTransparent(parentStyle.color) ||\n\t\t\t\t(_inheritedBackgroundClipTextHasBackground &&\n\t\t\t\t\tisOpaqueWhite(parentStyle.color))\n\t\t);\n\n\t\tfilter = buildXMLString('defs', {}, filter);\n\t}\n\n\tlet decorationShape = '';\n\tlet mergedPath = '';\n\tlet extra = '';\n\tlet skippedLine = -1;\n\ttype DecorationLine = {\n\t\tleft: number;\n\t\ttop: number;\n\t\tascender: number;\n\t\twidth: number;\n\t};\n\tlet decorationLines: Record<number, DecorationLine | null> = {};\n\tlet decorationGlyphs: Record<number, GlyphBox[]> = {};\n\tlet wordBuffer: string | null = null;\n\tlet bufferedOffset = 0;\n\n\tfor (let i = 0; i < texts.length; i++) {\n\t\t// Skip whitespace and empty characters.\n\t\tconst layout = wordPositionInLayout[i];\n\t\tconst nextLayout = wordPositionInLayout[i + 1];\n\n\t\tif (!layout) continue;\n\n\t\tlet text = texts[i];\n\t\tlet path: string | null = null;\n\t\tlet isLastDisplayedBeforeEllipsis = false;\n\n\t\tconst image = graphemeImages ? graphemeImages[text] : null;\n\n\t\tlet topOffset = layout.y;\n\t\tlet leftOffset = layout.x;\n\t\tconst width = layout.width;\n\t\tconst line = layout.line;\n\t\tconst shouldCollectDecorationBoxes =\n\t\t\tparentStyle.textDecorationLine === 'underline' &&\n\t\t\t(parentStyle.textDecorationSkipInk || 'auto') !== 'none';\n\n\t\tif (line === skippedLine) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// When `text-align` is `justify`, the width of the line will be adjusted.\n\t\tlet extendedWidth = false;\n\n\t\t// Apply text-indent to the first line (for both single and multi-line text)\n\t\tif (line === 0 && textIndentNumber !== 0) {\n\t\t\tleftOffset += textIndentNumber;\n\t\t}\n\n\t\tif (lineWidths.length > 1) {\n\t\t\t// Calculate alignment. Note that for Flexbox, there is only text\n\t\t\t// alignment when the container is multi-line.\n\t\t\tconst remainingWidth = containerWidth - lineWidths[line];\n\t\t\tif (textAlign === 'right' || textAlign === 'end') {\n\t\t\t\tleftOffset += remainingWidth;\n\t\t\t} else if (textAlign === 'center') {\n\t\t\t\tleftOffset += remainingWidth / 2;\n\t\t\t} else if (textAlign === 'justify') {\n\t\t\t\t// Don't justify the last line.\n\t\t\t\tif (line < lineWidths.length - 1) {\n\t\t\t\t\tconst segments = lineSegmentNumber[line];\n\t\t\t\t\tconst gutter =\n\t\t\t\t\t\tsegments > 1 ? remainingWidth / (segments - 1) : 0;\n\t\t\t\t\tleftOffset += gutter * layout.lineIndex;\n\t\t\t\t\textendedWidth = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Only round for embedded fonts (paths benefit from pixel alignment).\n\t\t\t// For non-embedded fonts (<text> elements), keep fractional positions\n\t\t\t// to maintain consistent spacing between consecutive elements.\n\t\t\tif (embedFont) {\n\t\t\t\tleftOffset = Math.round(leftOffset);\n\t\t\t}\n\t\t}\n\n\t\tconst baselineOfLine = baselines[line];\n\t\tconst baselineOfWord = engine.baseline(text);\n\t\tconst heightOfWord = engine.height(text);\n\t\tconst baselineDelta = baselineOfLine - baselineOfWord;\n\n\t\tconst buildUnderlineBand = (offset: number) => {\n\t\t\tif (\n\t\t\t\t!shouldCollectDecorationBoxes ||\n\t\t\t\tparentStyle.textDecorationLine !== 'underline'\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst baseline = top + offset + baselineDelta + baselineOfWord;\n\t\t\treturn {\n\t\t\t\tunderlineY: baseline + baselineOfWord * 0.1,\n\t\t\t\tstrokeWidth: Math.max(1, fontSize * 0.1)\n\t\t\t};\n\t\t};\n\n\t\tif (!decorationLines[line]) {\n\t\t\tdecorationLines[line] = {\n\t\t\t\tleft: leftOffset,\n\t\t\t\ttop: top + topOffset + baselineDelta,\n\t\t\t\tascender: baselineOfWord,\n\t\t\t\twidth: extendedWidth ? containerWidth : lineWidths[line]\n\t\t\t};\n\t\t}\n\n\t\tif (lineLimit !== Infinity) {\n\t\t\tlet _blockEllipsis = blockEllipsis;\n\t\t\tlet ellipsisWidth = measureGrapheme(blockEllipsis);\n\t\t\tif (ellipsisWidth > parentContainerInnerWidth) {\n\t\t\t\t_blockEllipsis = HorizontalEllipsis;\n\t\t\t\tellipsisWidth = measureGrapheme(_blockEllipsis);\n\t\t\t}\n\t\t\tconst spaceWidth = measureGrapheme(Space);\n\t\t\tconst isNotLastLine = line < lineWidths.length - 1;\n\t\t\tconst isLastAllowedLine = line + 1 === lineLimit;\n\n\t\t\tfunction calcEllipsis(baseWidth: number, _text: string) {\n\t\t\t\tconst chars = segment(_text, 'grapheme', locale);\n\n\t\t\t\tlet subset = '';\n\t\t\t\tlet resolvedWidth = 0;\n\n\t\t\t\tfor (const char of chars) {\n\t\t\t\t\tconst w = baseWidth + measureGraphemeArray([subset + char]);\n\t\t\t\t\tif (\n\t\t\t\t\t\t// Keep at least one character:\n\t\t\t\t\t\t// > The first character or atomic inline-level element on a line\n\t\t\t\t\t\t// must be clipped rather than ellipsed.\n\t\t\t\t\t\t// https://drafts.csswg.org/css-overflow/#text-overflow\n\t\t\t\t\t\tsubset &&\n\t\t\t\t\t\tw + ellipsisWidth > parentContainerInnerWidth\n\t\t\t\t\t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tsubset += char;\n\t\t\t\t\tresolvedWidth = w;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tsubset,\n\t\t\t\t\tresolvedWidth\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tisLastAllowedLine &&\n\t\t\t\t(isNotLastLine || lineWidths[line] > parentContainerInnerWidth)\n\t\t\t) {\n\t\t\t\tif (\n\t\t\t\t\tleftOffset + width + ellipsisWidth + spaceWidth >\n\t\t\t\t\tparentContainerInnerWidth\n\t\t\t\t) {\n\t\t\t\t\tconst { subset, resolvedWidth } = calcEllipsis(\n\t\t\t\t\t\tleftOffset,\n\t\t\t\t\t\ttext\n\t\t\t\t\t);\n\n\t\t\t\t\ttext = subset + _blockEllipsis;\n\t\t\t\t\tskippedLine = line;\n\t\t\t\t\tdecorationLines[line].width = Math.max(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tresolvedWidth - decorationLines[line].left\n\t\t\t\t\t);\n\t\t\t\t\tisLastDisplayedBeforeEllipsis = true;\n\t\t\t\t} else if (nextLayout && nextLayout.line !== line) {\n\t\t\t\t\tif (textAlign === 'center') {\n\t\t\t\t\t\tconst { subset, resolvedWidth } = calcEllipsis(\n\t\t\t\t\t\t\tleftOffset,\n\t\t\t\t\t\t\ttext\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\ttext = subset + _blockEllipsis;\n\t\t\t\t\t\tskippedLine = line;\n\t\t\t\t\t\tdecorationLines[line].width = Math.max(\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\tresolvedWidth - decorationLines[line].left\n\t\t\t\t\t\t);\n\t\t\t\t\t\tisLastDisplayedBeforeEllipsis = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst nextLineText = texts[i + 1];\n\n\t\t\t\t\t\tconst { subset, resolvedWidth } = calcEllipsis(\n\t\t\t\t\t\t\twidth + leftOffset,\n\t\t\t\t\t\t\tnextLineText\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\ttext = text + subset + _blockEllipsis;\n\t\t\t\t\t\tskippedLine = line;\n\t\t\t\t\t\tdecorationLines[line].width = Math.max(\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\tresolvedWidth - decorationLines[line].left\n\t\t\t\t\t\t);\n\t\t\t\t\t\tisLastDisplayedBeforeEllipsis = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (image) {\n\t\t\t// For images, we remove the baseline offset.\n\t\t\ttopOffset += 0;\n\t\t} else if (embedFont) {\n\t\t\t// If the current word and the next word are on the same line, we try to\n\t\t\t// merge them together to better handle the kerning.\n\t\t\tif (\n\t\t\t\t!text.includes(Tab) &&\n\t\t\t\t!wordSeparators.includes(text) &&\n\t\t\t\ttexts[i + 1] &&\n\t\t\t\tnextLayout &&\n\t\t\t\t!nextLayout.isImage &&\n\t\t\t\ttopOffset === nextLayout.y &&\n\t\t\t\t!isLastDisplayedBeforeEllipsis\n\t\t\t) {\n\t\t\t\tif (wordBuffer === null) {\n\t\t\t\t\tbufferedOffset = leftOffset;\n\t\t\t\t}\n\t\t\t\twordBuffer = wordBuffer === null ? text : wordBuffer + text;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst finalizedSegment =\n\t\t\t\twordBuffer === null ? text : wordBuffer + text;\n\t\t\tconst finalizedLeftOffset =\n\t\t\t\twordBuffer === null ? leftOffset : bufferedOffset;\n\t\t\tconst finalizedWidth =\n\t\t\t\tlayout.width + leftOffset - finalizedLeftOffset;\n\n\t\t\tconst band = buildUnderlineBand(topOffset);\n\n\t\t\tconst svg = engine.getSVG(\n\t\t\t\tfinalizedSegment.replace(/(\\t)+/g, ''),\n\t\t\t\t{\n\t\t\t\t\tfontSize,\n\t\t\t\t\tleft: left + finalizedLeftOffset,\n\t\t\t\t\t// Since we need to pass the baseline position, add the ascender to the top.\n\t\t\t\t\ttop: top + topOffset + baselineOfWord + baselineDelta,\n\t\t\t\t\tletterSpacing\n\t\t\t\t},\n\t\t\t\tband\n\t\t\t);\n\n\t\t\tpath = svg.path;\n\n\t\t\tif (shouldCollectDecorationBoxes && svg.boxes && svg.boxes.length) {\n\t\t\t\t(decorationGlyphs[line] || (decorationGlyphs[line] = [])).push(\n\t\t\t\t\t...svg.boxes\n\t\t\t\t);\n\t\t\t}\n\n\t\t\twordBuffer = null;\n\n\t\t\tif (debug) {\n\t\t\t\textra +=\n\t\t\t\t\t// Glyph\n\t\t\t\t\tbuildXMLString('rect', {\n\t\t\t\t\t\tx: left + finalizedLeftOffset,\n\t\t\t\t\t\ty: top + topOffset + baselineDelta,\n\t\t\t\t\t\twidth: finalizedWidth,\n\t\t\t\t\t\theight: heightOfWord,\n\t\t\t\t\t\tfill: 'transparent',\n\t\t\t\t\t\tstroke: '#575eff',\n\t\t\t\t\t\t'stroke-width': 1,\n\t\t\t\t\t\ttransform: matrix ? matrix : undefined,\n\t\t\t\t\t\t'clip-path': clipPathId\n\t\t\t\t\t\t\t? `url(#${clipPathId})`\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}) +\n\t\t\t\t\t// Baseline\n\t\t\t\t\tbuildXMLString('line', {\n\t\t\t\t\t\tx1: left + leftOffset,\n\t\t\t\t\t\tx2: left + leftOffset + layout.width,\n\t\t\t\t\t\ty1: top + topOffset + baselineDelta + baselineOfWord,\n\t\t\t\t\t\ty2: top + topOffset + baselineDelta + baselineOfWord,\n\t\t\t\t\t\tstroke: '#14c000',\n\t\t\t\t\t\t'stroke-width': 1,\n\t\t\t\t\t\ttransform: matrix ? matrix : undefined,\n\t\t\t\t\t\t'clip-path': clipPathId\n\t\t\t\t\t\t\t? `url(#${clipPathId})`\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\t// We need manually add the font ascender height to ensure it starts\n\t\t\t// at the baseline because <text>'s alignment baseline is set to `hanging`\n\t\t\t// by default and supported to change in SVG 1.1.\n\t\t\ttopOffset += baselineOfWord + baselineDelta;\n\n\t\t\tif (shouldCollectDecorationBoxes && !image) {\n\t\t\t\tconst band = buildUnderlineBand(topOffset);\n\n\t\t\t\tconst svg = engine.getSVG(\n\t\t\t\t\ttext.replace(/(\\t)+/g, ''),\n\t\t\t\t\t{\n\t\t\t\t\t\tfontSize,\n\t\t\t\t\t\tleft: left + leftOffset,\n\t\t\t\t\t\ttop: top + topOffset,\n\t\t\t\t\t\tletterSpacing\n\t\t\t\t\t},\n\t\t\t\t\tband\n\t\t\t\t);\n\n\t\t\t\tif (svg.boxes && svg.boxes.length) {\n\t\t\t\t\t(\n\t\t\t\t\t\tdecorationGlyphs[line] || (decorationGlyphs[line] = [])\n\t\t\t\t\t).push(...svg.boxes);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (path !== null) {\n\t\t\tmergedPath += path + ' ';\n\t\t} else {\n\t\t\tconst [t, shape] = buildText(\n\t\t\t\t{\n\t\t\t\t\tcontent: text,\n\t\t\t\t\tfilter,\n\t\t\t\t\tid,\n\t\t\t\t\tleft: left + leftOffset,\n\t\t\t\t\ttop: top + topOffset,\n\t\t\t\t\twidth,\n\t\t\t\t\theight: heightOfWord,\n\t\t\t\t\tmatrix,\n\t\t\t\t\topacity,\n\t\t\t\t\timage,\n\t\t\t\t\tclipPathId,\n\t\t\t\t\tdebug,\n\t\t\t\t\tfauxBoldStrokeWidth: engine.fauxBoldStrokeWidth,\n\t\t\t\t\tshape: !!_inheritedBackgroundClipTextPath\n\t\t\t\t},\n\t\t\t\tparentStyle\n\t\t\t);\n\t\t\tresult += t;\n\t\t\tbackgroundClipDef += shape;\n\t\t}\n\n\t\tif (isLastDisplayedBeforeEllipsis) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (parentStyle.textDecorationLine) {\n\t\tdecorationShape = Object.entries(decorationLines)\n\t\t\t.map(([lineIndex, deco]) => {\n\t\t\t\tif (!deco) return '';\n\t\t\t\tconst glyphBoxes = decorationGlyphs[lineIndex] || [];\n\n\t\t\t\treturn buildDecoration(\n\t\t\t\t\t{\n\t\t\t\t\t\tleft: left + deco.left,\n\t\t\t\t\t\ttop: deco.top,\n\t\t\t\t\t\twidth: deco.width,\n\t\t\t\t\t\tascender: deco.ascender,\n\t\t\t\t\t\tclipPathId,\n\t\t\t\t\t\tmatrix,\n\t\t\t\t\t\tglyphBoxes\n\t\t\t\t\t},\n\t\t\t\t\tparentStyle\n\t\t\t\t);\n\t\t\t})\n\t\t\t.join('');\n\t}\n\n\t// Embed the font as path.\n\tif (mergedPath) {\n\t\tconst hasWebkitStroke = !!inheritedStyle.WebkitTextStrokeWidth;\n\t\tconst hasFauxBold =\n\t\t\t!hasWebkitStroke && engine.fauxBoldStrokeWidth !== undefined;\n\t\tconst fillColor =\n\t\t\tfilter &&\n\t\t\t(isFullyTransparent(parentStyle.color) ||\n\t\t\t\t(_inheritedBackgroundClipTextHasBackground &&\n\t\t\t\t\tisOpaqueWhite(parentStyle.color)))\n\t\t\t\t? 'black'\n\t\t\t\t: parentStyle.color;\n\n\t\tconst p =\n\t\t\t(!isFullyTransparent(parentStyle.color) || filter) && opacity !== 0\n\t\t\t\t? `<g ${\n\t\t\t\t\t\toverflowMaskId ? `mask=\"url(#${overflowMaskId})\"` : ''\n\t\t\t\t } ${clipPathId ? `clip-path=\"url(#${clipPathId})\"` : ''}>` +\n\t\t\t\t buildXMLString('path', {\n\t\t\t\t\t\td: mergedPath,\n\t\t\t\t\t\tfill: fillColor,\n\t\t\t\t\t\topacity: opacity !== 1 ? opacity : undefined,\n\t\t\t\t\t\t'paint-order':\n\t\t\t\t\t\t\thasWebkitStroke || hasFauxBold\n\t\t\t\t\t\t\t\t? 'stroke'\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\tstroke: hasWebkitStroke\n\t\t\t\t\t\t\t? inheritedStyle.WebkitTextStrokeColor\n\t\t\t\t\t\t\t: hasFauxBold\n\t\t\t\t\t\t\t? fillColor\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t'stroke-linejoin':\n\t\t\t\t\t\t\thasWebkitStroke || hasFauxBold\n\t\t\t\t\t\t\t\t? 'round'\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t'stroke-width': hasWebkitStroke\n\t\t\t\t\t\t\t? `${inheritedStyle.WebkitTextStrokeWidth}px`\n\t\t\t\t\t\t\t: hasFauxBold\n\t\t\t\t\t\t\t? `${engine.fauxBoldStrokeWidth}`\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\tstyle: cssFilter ? `filter:${cssFilter}` : undefined,\n\t\t\t\t\t\ttransform: matrix ? matrix : undefined\n\t\t\t\t }) +\n\t\t\t\t '</g>'\n\t\t\t\t: '';\n\n\t\tif (_inheritedBackgroundClipTextPath) {\n\t\t\tbackgroundClipDef = buildXMLString('path', {\n\t\t\t\td: mergedPath,\n\t\t\t\ttransform: matrix ? matrix : undefined\n\t\t\t});\n\t\t}\n\n\t\tresult +=\n\t\t\t(filter\n\t\t\t\t? filter +\n\t\t\t\t buildXMLString(\n\t\t\t\t\t\t'g',\n\t\t\t\t\t\t{ filter: `url(#satori_s-${id})` },\n\t\t\t\t\t\tp + decorationShape\n\t\t\t\t )\n\t\t\t\t: p + decorationShape) + extra;\n\t} else if (decorationShape) {\n\t\tresult += filter\n\t\t\t? buildXMLString(\n\t\t\t\t\t'g',\n\t\t\t\t\t{ filter: `url(#satori_s-${id})` },\n\t\t\t\t\tdecorationShape\n\t\t\t )\n\t\t\t: decorationShape;\n\t}\n\n\t// Attach information to the parent node.\n\tif (backgroundClipDef) {\n\t\t(parentStyle._inheritedBackgroundClipTextPath as any).value +=\n\t\t\tbackgroundClipDef;\n\t}\n\n\treturn result;\n}\n\nfunction createTextContainerNode(Yoga: TYoga, textAlign: string): YogaNode {\n\t// Create a container node for this text fragment.\n\tconst textContainer = Yoga.Node.create();\n\ttextContainer.setAlignItems(Yoga.ALIGN_BASELINE);\n\ttextContainer.setJustifyContent(\n\t\tv(\n\t\t\ttextAlign,\n\t\t\t{\n\t\t\t\tleft: Yoga.JUSTIFY_FLEX_START,\n\t\t\t\tright: Yoga.JUSTIFY_FLEX_END,\n\t\t\t\tcenter: Yoga.JUSTIFY_CENTER,\n\t\t\t\tjustify: Yoga.JUSTIFY_SPACE_BETWEEN,\n\t\t\t\t// We don't have other writing modes yet.\n\t\t\t\tstart: Yoga.JUSTIFY_FLEX_START,\n\t\t\t\tend: Yoga.JUSTIFY_FLEX_END\n\t\t\t},\n\t\t\tYoga.JUSTIFY_FLEX_START,\n\t\t\t'textAlign'\n\t\t)\n\t);\n\n\treturn textContainer;\n}\n\nfunction detectTabs(text: string):\n\t| {\n\t\t\tindex: null;\n\t\t\ttabCount: 0;\n\t }\n\t| {\n\t\t\tindex: number;\n\t\t\ttabCount: number;\n\t } {\n\tconst result = /(\\t)+/.exec(text);\n\treturn result\n\t\t? {\n\t\t\t\tindex: result.index,\n\t\t\t\ttabCount: result[0].length\n\t\t }\n\t\t: {\n\t\t\t\tindex: null,\n\t\t\t\ttabCount: 0\n\t\t };\n}\n","import { parseLinearGradient, ColorStop } from 'css-gradient-parser';\nimport { normalizeStops } from './utils.js';\nimport { buildXMLString, calcDegree, lengthToNumber } from '../../utils.js';\n\nexport function buildLinearGradient(\n\t{\n\t\tid,\n\t\twidth,\n\t\theight,\n\t\trepeatX,\n\t\trepeatY\n\t}: {\n\t\tid: string;\n\t\twidth: number;\n\t\theight: number;\n\t\trepeatX: boolean;\n\t\trepeatY: boolean;\n\t},\n\timage: string,\n\tdimensions: number[],\n\toffsets: number[],\n\tinheritableStyle: Record<string, number | string>,\n\tfrom?: 'background' | 'mask'\n) {\n\tconst parsed = parseLinearGradient(image);\n\tconst [imageWidth, imageHeight] = dimensions;\n\tconst repeating = image.startsWith('repeating');\n\n\t// Calculate the direction.\n\tlet points, length, xys;\n\n\tif (parsed.orientation.type === 'directional') {\n\t\tpoints = resolveXYFromDirection(parsed.orientation.value);\n\n\t\tlength = Math.sqrt(\n\t\t\tMath.pow((points.x2 - points.x1) * imageWidth, 2) +\n\t\t\t\tMath.pow((points.y2 - points.y1) * imageHeight, 2)\n\t\t);\n\t} else if (parsed.orientation.type === 'angular') {\n\t\tconst { length: l, ...p } = calcNormalPoint(\n\t\t\t(calcDegree(\n\t\t\t\t`${parsed.orientation.value.value}${parsed.orientation.value.unit}`\n\t\t\t) /\n\t\t\t\t180) *\n\t\t\t\tMath.PI,\n\t\t\timageWidth,\n\t\t\timageHeight\n\t\t);\n\n\t\tlength = l;\n\t\tpoints = p;\n\t}\n\n\txys = repeating\n\t\t? calcPercentage(parsed.stops, length, points, inheritableStyle)\n\t\t: points;\n\n\tconst stops = normalizeStops(\n\t\trepeating ? resolveRepeatingCycle(parsed.stops, length) : length,\n\t\tparsed.stops,\n\t\tinheritableStyle,\n\t\trepeating,\n\t\tfrom\n\t);\n\n\tconst gradientId = `satori_bi${id}`;\n\tconst patternId = `satori_pattern_${id}`;\n\n\tconst defs = buildXMLString(\n\t\t'pattern',\n\t\t{\n\t\t\tid: patternId,\n\t\t\tx: offsets[0] / width,\n\t\t\ty: offsets[1] / height,\n\t\t\twidth: repeatX ? imageWidth / width : '1',\n\t\t\theight: repeatY ? imageHeight / height : '1',\n\t\t\tpatternUnits: 'objectBoundingBox'\n\t\t},\n\t\tbuildXMLString(\n\t\t\t'linearGradient',\n\t\t\t{\n\t\t\t\tid: gradientId,\n\t\t\t\t...xys,\n\t\t\t\tspreadMethod: repeating ? 'repeat' : 'pad'\n\t\t\t},\n\t\t\tstops\n\t\t\t\t.map(stop =>\n\t\t\t\t\tbuildXMLString('stop', {\n\t\t\t\t\t\toffset: (stop.offset ?? 0) * 100 + '%',\n\t\t\t\t\t\t'stop-color': stop.color\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.join('')\n\t\t) +\n\t\t\tbuildXMLString('rect', {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t\twidth: imageWidth,\n\t\t\t\theight: imageHeight,\n\t\t\t\tfill: `url(#${gradientId})`\n\t\t\t})\n\t);\n\treturn [patternId, defs];\n}\n\nfunction resolveRepeatingCycle(stops: ColorStop[], length: number) {\n\tconst last = stops[stops.length - 1];\n\tconst { offset } = last;\n\tif (!offset) return length;\n\n\tif (offset.unit === '%') return (Number(offset.value) / 100) * length;\n\n\treturn Number(offset.value);\n}\n\nfunction resolveXYFromDirection(dir: string) {\n\tlet x1 = 0,\n\t\ty1 = 0,\n\t\tx2 = 0,\n\t\ty2 = 0;\n\n\tif (dir.includes('top')) {\n\t\ty1 = 1;\n\t} else if (dir.includes('bottom')) {\n\t\ty2 = 1;\n\t}\n\n\tif (dir.includes('left')) {\n\t\tx1 = 1;\n\t} else if (dir.includes('right')) {\n\t\tx2 = 1;\n\t}\n\n\tif (!x1 && !x2 && !y1 && !y2) {\n\t\ty1 = 1;\n\t}\n\n\treturn { x1, y1, x2, y2 };\n}\n\n/**\n * calc start point and end point of linear gradient\n */\nfunction calcNormalPoint(v: number, w: number, h: number) {\n\tconst r = Math.pow(h / w, 2);\n\n\t// make sure angle is 0 <= angle <= 360\n\tv = ((v % (Math.PI * 2)) + Math.PI * 2) % (Math.PI * 2);\n\n\tlet x1, y1, x2, y2, length, tmp, a, b;\n\n\tconst dfs = (angle: number) => {\n\t\tif (angle === 0) {\n\t\t\tx1 = 0;\n\t\t\ty1 = h;\n\t\t\tx2 = 0;\n\t\t\ty2 = 0;\n\t\t\tlength = h;\n\t\t\treturn;\n\t\t} else if (angle === Math.PI / 2) {\n\t\t\tx1 = 0;\n\t\t\ty1 = 0;\n\t\t\tx2 = w;\n\t\t\ty2 = 0;\n\t\t\tlength = w;\n\t\t\treturn;\n\t\t}\n\t\tif (angle > 0 && angle < Math.PI / 2) {\n\t\t\tx1 =\n\t\t\t\t((r * w) / 2 / Math.tan(angle) - h / 2) /\n\t\t\t\t(Math.tan(angle) + r / Math.tan(angle));\n\t\t\ty1 = Math.tan(angle) * x1 + h;\n\t\t\tx2 = Math.abs(w / 2 - x1) + w / 2;\n\t\t\ty2 = h / 2 - Math.abs(y1 - h / 2);\n\t\t\tlength = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n\t\t\t// y = -1 / tan * x = h / 2 +1 / tan * w/2\n\t\t\t// y = tan * x + h\n\t\t\ta =\n\t\t\t\t(w / 2 / Math.tan(angle) - h / 2) /\n\t\t\t\t(Math.tan(angle) + 1 / Math.tan(angle));\n\t\t\tb = Math.tan(angle) * a + h;\n\t\t\tlength =\n\t\t\t\t2 * Math.sqrt(Math.pow(w / 2 - a, 2) + Math.pow(h / 2 - b, 2));\n\t\t\treturn;\n\t\t} else if (angle > Math.PI / 2 && angle < Math.PI) {\n\t\t\tx1 =\n\t\t\t\t(h / 2 + (r * w) / 2 / Math.tan(angle)) /\n\t\t\t\t(Math.tan(angle) + r / Math.tan(angle));\n\t\t\ty1 = Math.tan(angle) * x1;\n\t\t\tx2 = Math.abs(w / 2 - x1) + w / 2;\n\t\t\ty2 = h / 2 + Math.abs(y1 - h / 2);\n\t\t\t// y = -1 / tan * x + h / 2 + 1 / tan * w / 2\n\t\t\t// y = tan * x\n\t\t\ta =\n\t\t\t\t(w / 2 / Math.tan(angle) + h / 2) /\n\t\t\t\t(Math.tan(angle) + 1 / Math.tan(angle));\n\t\t\tb = Math.tan(angle) * a;\n\t\t\tlength =\n\t\t\t\t2 * Math.sqrt(Math.pow(w / 2 - a, 2) + Math.pow(h / 2 - b, 2));\n\t\t\treturn;\n\t\t} else if (angle >= Math.PI) {\n\t\t\tdfs(angle - Math.PI);\n\n\t\t\ttmp = x1;\n\t\t\tx1 = x2;\n\t\t\tx2 = tmp;\n\t\t\ttmp = y1;\n\t\t\ty1 = y2;\n\t\t\ty2 = tmp;\n\t\t}\n\t};\n\n\tdfs(v);\n\n\treturn {\n\t\tx1: x1 / w,\n\t\ty1: y1 / h,\n\t\tx2: x2 / w,\n\t\ty2: y2 / h,\n\t\tlength\n\t};\n}\n\nfunction calcPercentage(\n\tstops: ColorStop[],\n\tlength: number,\n\tpoints: {\n\t\tx1: number;\n\t\ty1: number;\n\t\tx2: number;\n\t\ty2: number;\n\t},\n\tinheritableStyle: Record<string, string | number>\n) {\n\tconst { x1, x2, y1, y2 } = points;\n\tconst p1 = !stops[0].offset\n\t\t? 0\n\t\t: stops[0].offset.unit === '%'\n\t\t? Number(stops[0].offset.value) / 100\n\t\t: lengthToNumber(\n\t\t\t\t`${stops[0].offset.value}${stops[0].offset.unit}`,\n\t\t\t\tinheritableStyle.fontSize as number,\n\t\t\t\tlength,\n\t\t\t\tinheritableStyle,\n\t\t\t\ttrue\n\t\t ) / length;\n\tconst p2 = !stops.at(-1).offset\n\t\t? 1\n\t\t: stops.at(-1).offset.unit === '%'\n\t\t? Number(stops.at(-1).offset.value) / 100\n\t\t: lengthToNumber(\n\t\t\t\t`${stops.at(-1).offset.value}${stops.at(-1).offset.unit}`,\n\t\t\t\tinheritableStyle.fontSize as number,\n\t\t\t\tlength,\n\t\t\t\tinheritableStyle,\n\t\t\t\ttrue\n\t\t ) / length;\n\n\tconst sx = (x2 - x1) * p1 + x1;\n\tconst sy = (y2 - y1) * p1 + y1;\n\tconst ex = (x2 - x1) * p2 + x1;\n\tconst ey = (y2 - y1) * p2 + y1;\n\n\treturn {\n\t\tx1: sx,\n\t\ty1: sy,\n\t\tx2: ex,\n\t\ty2: ey\n\t};\n}\n","import { lengthToNumber } from '../../utils.js';\nimport cssColorParse from 'parse-css-color';\nimport type { ColorStop } from 'css-gradient-parser';\n\ninterface Stop {\n\tcolor: string;\n\toffset?: number;\n}\n\nexport function normalizeStops(\n\ttotalLength: number,\n\tcolorStops: ColorStop[],\n\tinheritedStyle: Record<string, string | number>,\n\trepeating: boolean,\n\tfrom?: 'background' | 'mask'\n) {\n\t// Resolve the color stops based on the spec:\n\t// https://drafts.csswg.org/css-images/#color-stop-syntax\n\tconst stops: Stop[] = [];\n\tconst lastColorStop = colorStops.at(-1);\n\tconst totalPercentage =\n\t\tlastColorStop &&\n\t\tlastColorStop.offset &&\n\t\tlastColorStop.offset.unit === '%' &&\n\t\trepeating\n\t\t\t? +lastColorStop.offset.value\n\t\t\t: 100;\n\tfor (const stop of colorStops) {\n\t\tconst { color } = stop;\n\t\tif (!stops.length) {\n\t\t\t// First stop, ensure it's at the start.\n\t\t\tstops.push({\n\t\t\t\toffset: 0,\n\t\t\t\tcolor\n\t\t\t});\n\n\t\t\tif (!stop.offset) continue;\n\t\t\tif (stop.offset.value === '0') continue;\n\t\t}\n\n\t\t// All offsets are relative values (0-1) in SVG.\n\t\tconst offset =\n\t\t\ttypeof stop.offset === 'undefined'\n\t\t\t\t? undefined\n\t\t\t\t: stop.offset.unit === '%'\n\t\t\t\t? +stop.offset.value / totalPercentage\n\t\t\t\t: Number(\n\t\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\t\t`${stop.offset.value}${stop.offset.unit}`,\n\t\t\t\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\t\t\t\ttotalLength,\n\t\t\t\t\t\t\tinheritedStyle,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t)\n\t\t\t\t ) / totalLength;\n\n\t\tstops.push({\n\t\t\toffset,\n\t\t\tcolor\n\t\t});\n\t}\n\tif (!stops.length) {\n\t\tstops.push({\n\t\t\toffset: 0,\n\t\t\tcolor: 'transparent'\n\t\t});\n\t}\n\t// Last stop, ensure it's at the end.\n\tconst lastStop = stops[stops.length - 1];\n\tif (lastStop.offset !== 1) {\n\t\tif (typeof lastStop.offset === 'undefined') {\n\t\t\tlastStop.offset = 1;\n\t\t} else if (repeating) {\n\t\t\tstops[stops.length - 1] = {\n\t\t\t\toffset: 1,\n\t\t\t\tcolor: lastStop.color\n\t\t\t};\n\t\t} else {\n\t\t\tstops.push({\n\t\t\t\toffset: 1,\n\t\t\t\tcolor: lastStop.color\n\t\t\t});\n\t\t}\n\t}\n\n\tlet previousStop = 0;\n\tlet nextStop = 1;\n\t// Evenly distribute the missing stop offsets.\n\tfor (let i = 0; i < stops.length; i++) {\n\t\tif (typeof stops[i].offset === 'undefined') {\n\t\t\t// Find the next stop that has an offset.\n\t\t\tif (nextStop < i) nextStop = i;\n\t\t\twhile (typeof stops[nextStop].offset === 'undefined') nextStop++;\n\n\t\t\tstops[i].offset =\n\t\t\t\t((stops[nextStop].offset - stops[previousStop].offset) /\n\t\t\t\t\t(nextStop - previousStop)) *\n\t\t\t\t\t(i - previousStop) +\n\t\t\t\tstops[previousStop].offset;\n\t\t} else {\n\t\t\tpreviousStop = i;\n\t\t}\n\t}\n\n\tif (from === 'mask') {\n\t\treturn stops.map(stop => {\n\t\t\tconst color = cssColorParse(stop.color);\n\t\t\tif (!color) return stop;\n\t\t\tif (color.alpha === 0) {\n\t\t\t\treturn { ...stop, color: `rgba(0, 0, 0, 1)` };\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\t...stop,\n\t\t\t\t\tcolor: `rgba(255, 255, 255, ${color.alpha})`\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\t}\n\n\treturn stops;\n}\n","import {\n\tparseRadialGradient,\n\tRadialResult,\n\tRadialPropertyValue,\n\tColorStop\n} from 'css-gradient-parser';\nimport { buildXMLString, lengthToNumber } from '../../utils.js';\nimport { normalizeStops } from './utils.js';\n\nexport function buildRadialGradient(\n\t{\n\t\tid,\n\t\twidth,\n\t\theight,\n\t\trepeatX,\n\t\trepeatY\n\t}: {\n\t\tid: string;\n\t\twidth: number;\n\t\theight: number;\n\t\trepeatX: boolean;\n\t\trepeatY: boolean;\n\t},\n\timage: string,\n\tdimensions: number[],\n\toffsets: number[],\n\tinheritableStyle: Record<string, number | string>,\n\tfrom?: 'background' | 'mask'\n) {\n\tconst {\n\t\tshape,\n\t\tstops: colorStops,\n\t\tposition,\n\t\tsize,\n\t\trepeating\n\t} = parseRadialGradient(image);\n\tconst [xDelta, yDelta] = dimensions;\n\n\tlet cx: number = xDelta / 2;\n\tlet cy: number = yDelta / 2;\n\n\tconst pos = calcRadialGradient(\n\t\tposition.x,\n\t\tposition.y,\n\t\txDelta,\n\t\tyDelta,\n\t\tinheritableStyle.fontSize as number,\n\t\tinheritableStyle\n\t);\n\tcx = pos.x;\n\tcy = pos.y;\n\n\tconst colorStopTotalLength = calcColorStopTotalLength(\n\t\twidth,\n\t\tcolorStops,\n\t\trepeating,\n\t\tinheritableStyle\n\t);\n\n\tconst stops = normalizeStops(\n\t\tcolorStopTotalLength,\n\t\tcolorStops,\n\t\tinheritableStyle,\n\t\trepeating,\n\t\tfrom\n\t);\n\n\tconst gradientId = `satori_radial_${id}`;\n\tconst patternId = `satori_pattern_${id}`;\n\tconst maskId = `satori_mask_${id}`;\n\n\t// https://developer.mozilla.org/en-US/docs/Web/CSS/gradient/radial-gradient()#values\n\tconst spread = calcRadius(\n\t\tshape as Shape,\n\t\tsize,\n\t\tinheritableStyle.fontSize as number,\n\t\t{ x: cx, y: cy },\n\t\t[xDelta, yDelta],\n\t\tinheritableStyle,\n\t\trepeating\n\t);\n\n\tconst props = calcRadialGradientProps(\n\t\tshape as Shape,\n\t\tinheritableStyle.fontSize as number,\n\t\tcolorStops,\n\t\t[xDelta, yDelta],\n\t\tinheritableStyle,\n\t\trepeating,\n\t\tspread\n\t);\n\n\t// TODO: check for repeat-x/repeat-y\n\tconst defs = buildXMLString(\n\t\t'pattern',\n\t\t{\n\t\t\tid: patternId,\n\t\t\tx: offsets[0] / width,\n\t\t\ty: offsets[1] / height,\n\t\t\twidth: repeatX ? xDelta / width : '1',\n\t\t\theight: repeatY ? yDelta / height : '1',\n\t\t\tpatternUnits: 'objectBoundingBox'\n\t\t},\n\t\tbuildXMLString(\n\t\t\t'radialGradient',\n\t\t\t{\n\t\t\t\tid: gradientId,\n\t\t\t\t...props\n\t\t\t},\n\t\t\tstops\n\t\t\t\t.map(stop =>\n\t\t\t\t\tbuildXMLString('stop', {\n\t\t\t\t\t\toffset: stop.offset || 0,\n\t\t\t\t\t\t'stop-color': stop.color\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.join('')\n\t\t) +\n\t\t\tbuildXMLString(\n\t\t\t\t'mask',\n\t\t\t\t{\n\t\t\t\t\tid: maskId\n\t\t\t\t},\n\t\t\t\tbuildXMLString('rect', {\n\t\t\t\t\tx: 0,\n\t\t\t\t\ty: 0,\n\t\t\t\t\twidth: xDelta,\n\t\t\t\t\theight: yDelta,\n\t\t\t\t\tfill: '#fff'\n\t\t\t\t})\n\t\t\t) +\n\t\t\tbuildXMLString('rect', {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t\twidth: xDelta,\n\t\t\t\theight: yDelta,\n\t\t\t\tfill: stops.at(-1)?.color || 'transparent'\n\t\t\t}) +\n\t\t\tbuildXMLString(shape, {\n\t\t\t\tcx: cx,\n\t\t\t\tcy: cy,\n\t\t\t\twidth: xDelta,\n\t\t\t\theight: yDelta,\n\t\t\t\t...spread,\n\t\t\t\tfill: `url(#${gradientId})`,\n\t\t\t\tmask: `url(#${maskId})`\n\t\t\t})\n\t);\n\n\tconst result = [patternId, defs];\n\treturn result;\n}\n\ntype PositionKeyWord = 'center' | 'left' | 'right' | 'top' | 'bottom';\n\nfunction calcColorStopTotalLength(\n\twidth: number,\n\tstops: ColorStop[],\n\trepeating: boolean,\n\tinheritableStyle: Record<string, string | number>\n) {\n\tif (!repeating) return width;\n\tconst lastStop = stops.at(-1);\n\tif (!lastStop || !lastStop.offset || lastStop.offset.unit === '%')\n\t\treturn width;\n\n\treturn lengthToNumber(\n\t\t`${lastStop.offset.value}${lastStop.offset.unit}`,\n\t\t+inheritableStyle.fontSize,\n\t\twidth,\n\t\tinheritableStyle,\n\t\ttrue\n\t);\n}\n\nfunction calcRadialGradient(\n\tcx: RadialPropertyValue,\n\tcy: RadialPropertyValue,\n\txDelta: number,\n\tyDelta: number,\n\tbaseFontSize: number,\n\tstyle: Record<string, string | number>\n) {\n\tconst pos: { x: number; y: number } = { x: xDelta / 2, y: yDelta / 2 };\n\tif (cx.type === 'keyword') {\n\t\tObject.assign(\n\t\t\tpos,\n\t\t\tcalcPos(cx.value as PositionKeyWord, xDelta, yDelta, 'x')\n\t\t);\n\t} else {\n\t\tpos.x =\n\t\t\tlengthToNumber(\n\t\t\t\t`${cx.value.value}${cx.value.unit}`,\n\t\t\t\tbaseFontSize,\n\t\t\t\txDelta,\n\t\t\t\tstyle,\n\t\t\t\ttrue\n\t\t\t) ?? xDelta / 2;\n\t}\n\n\tif (cy.type === 'keyword') {\n\t\tObject.assign(\n\t\t\tpos,\n\t\t\tcalcPos(cy.value as PositionKeyWord, xDelta, yDelta, 'y')\n\t\t);\n\t} else {\n\t\tpos.y =\n\t\t\tlengthToNumber(\n\t\t\t\t`${cy.value.value}${cy.value.unit}`,\n\t\t\t\tbaseFontSize,\n\t\t\t\tyDelta,\n\t\t\t\tstyle,\n\t\t\t\ttrue\n\t\t\t) ?? yDelta / 2;\n\t}\n\n\treturn pos;\n}\n\nfunction calcPos(\n\tkey: PositionKeyWord,\n\txDelta: number,\n\tyDelta: number,\n\tdir: 'x' | 'y'\n) {\n\tswitch (key) {\n\t\tcase 'center':\n\t\t\treturn { [dir]: dir === 'x' ? xDelta / 2 : yDelta / 2 };\n\t\tcase 'left':\n\t\t\treturn { x: 0 };\n\t\tcase 'top':\n\t\t\treturn { y: 0 };\n\t\tcase 'right':\n\t\t\treturn { x: xDelta };\n\t\tcase 'bottom':\n\t\t\treturn { y: yDelta };\n\t}\n}\n\ntype Shape = 'circle' | 'ellipse';\n\nfunction calcRadialGradientProps(\n\tshape: Shape,\n\tbaseFontSize: number,\n\tcolorStops: ColorStop[],\n\t[xDelta, yDelta]: [number, number],\n\tinheritableStyle: Record<string, string | number>,\n\trepeating: boolean,\n\tspread: Record<string, number>\n) {\n\tconst { r, rx, ratio = 1 } = spread;\n\tif (!repeating) {\n\t\treturn {\n\t\t\tspreadMethod: 'pad'\n\t\t};\n\t}\n\tconst last = colorStops.at(-1);\n\tconst radius = shape === 'circle' ? r * 2 : rx * 2;\n\treturn {\n\t\tspreadMethod: 'repeat',\n\t\tcx: '50%',\n\t\tcy: '50%',\n\t\tr:\n\t\t\tlast.offset.unit === '%'\n\t\t\t\t? `${\n\t\t\t\t\t\t(Number(last.offset.value) *\n\t\t\t\t\t\t\tMath.min(yDelta / xDelta, 1)) /\n\t\t\t\t\t\tratio\n\t\t\t\t }%`\n\t\t\t\t: Number(\n\t\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\t\t`${last.offset.value}${last.offset.unit}`,\n\t\t\t\t\t\t\tbaseFontSize,\n\t\t\t\t\t\t\txDelta,\n\t\t\t\t\t\t\tinheritableStyle,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t) / radius\n\t\t\t\t )\n\t};\n}\n\nfunction calcRadius(\n\tshape: Shape,\n\tendingShape: RadialResult['size'],\n\tbaseFontSize: number,\n\tcenterAxis: { x: number; y: number },\n\tlength: [number, number],\n\tinheritableStyle: Record<string, string | number>,\n\trepeating: boolean\n) {\n\tconst [xDelta, yDelta] = length;\n\tconst { x: cx, y: cy } = centerAxis;\n\tconst spread: Record<string, number> = {};\n\tlet fx = 0;\n\tlet fy = 0;\n\n\tif (isSizeAllLength(endingShape)) {\n\t\tif (endingShape.some(v => v.value.value.startsWith('-'))) {\n\t\t\tthrow new Error(\n\t\t\t\t'disallow setting negative values to the size of the shape. Check https://w3c.github.io/csswg-drafts/css-images/#valdef-rg-size-length-0'\n\t\t\t);\n\t\t}\n\t\tif (shape === 'circle') {\n\t\t\tObject.assign(spread, {\n\t\t\t\tr: Number(\n\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\t`${endingShape[0].value.value}${endingShape[0].value.unit}`,\n\t\t\t\t\t\tbaseFontSize,\n\t\t\t\t\t\txDelta,\n\t\t\t\t\t\tinheritableStyle,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t});\n\t\t} else {\n\t\t\tObject.assign(spread, {\n\t\t\t\trx: Number(\n\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\t`${endingShape[0].value.value}${endingShape[0].value.unit}`,\n\t\t\t\t\t\tbaseFontSize,\n\t\t\t\t\t\txDelta,\n\t\t\t\t\t\tinheritableStyle,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\try: Number(\n\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\t`${endingShape[1].value.value}${endingShape[1].value.unit}`,\n\t\t\t\t\t\tbaseFontSize,\n\t\t\t\t\t\tyDelta,\n\t\t\t\t\t\tinheritableStyle,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t});\n\t\t}\n\t\tpatchSpread(spread, xDelta, yDelta, cx, cy, repeating, shape);\n\t\treturn spread;\n\t}\n\n\tswitch (endingShape[0].value) {\n\t\tcase 'farthest-corner':\n\t\t\tfx = Math.max(Math.abs(xDelta - cx), Math.abs(cx));\n\t\t\tfy = Math.max(Math.abs(yDelta - cy), Math.abs(cy));\n\t\t\tbreak;\n\t\tcase 'closest-corner':\n\t\t\tfx = Math.min(Math.abs(xDelta - cx), Math.abs(cx));\n\t\t\tfy = Math.min(Math.abs(yDelta - cy), Math.abs(cy));\n\t\t\tbreak;\n\t\tcase 'farthest-side':\n\t\t\tif (shape === 'circle') {\n\t\t\t\tspread.r = Math.max(\n\t\t\t\t\tMath.abs(xDelta - cx),\n\t\t\t\t\tMath.abs(cx),\n\t\t\t\t\tMath.abs(yDelta - cy),\n\t\t\t\t\tMath.abs(cy)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tspread.rx = Math.max(Math.abs(xDelta - cx), Math.abs(cx));\n\t\t\t\tspread.ry = Math.max(Math.abs(yDelta - cy), Math.abs(cy));\n\t\t\t}\n\t\t\tpatchSpread(spread, xDelta, yDelta, cx, cy, repeating, shape);\n\t\t\treturn spread;\n\t\tcase 'closest-side':\n\t\t\tif (shape === 'circle') {\n\t\t\t\tspread.r = Math.min(\n\t\t\t\t\tMath.abs(xDelta - cx),\n\t\t\t\t\tMath.abs(cx),\n\t\t\t\t\tMath.abs(yDelta - cy),\n\t\t\t\t\tMath.abs(cy)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tspread.rx = Math.min(Math.abs(xDelta - cx), Math.abs(cx));\n\t\t\t\tspread.ry = Math.min(Math.abs(yDelta - cy), Math.abs(cy));\n\t\t\t}\n\t\t\tpatchSpread(spread, xDelta, yDelta, cx, cy, repeating, shape);\n\n\t\t\treturn spread;\n\t}\n\tif (shape === 'circle') {\n\t\tspread.r = Math.sqrt(fx * fx + fy * fy);\n\t} else {\n\t\tObject.assign(spread, f2r(fx, fy));\n\t}\n\n\tpatchSpread(spread, xDelta, yDelta, cx, cy, repeating, shape);\n\n\treturn spread;\n}\n\n// compare with farthest-corner to make it cover the whole container\nfunction patchSpread(\n\tspread: Record<string, number>,\n\txDelta: number,\n\tyDelta: number,\n\tcx: number,\n\tcy: number,\n\trepeating: boolean,\n\tshape: Shape\n) {\n\tif (repeating) {\n\t\tif (shape === 'ellipse') {\n\t\t\tconst mfx = Math.max(Math.abs(xDelta - cx), Math.abs(cx));\n\t\t\tconst mfy = Math.max(Math.abs(yDelta - cy), Math.abs(cy));\n\n\t\t\tconst { rx: mrx, ry: mry } = f2r(mfx, mfy);\n\n\t\t\tspread.ratio = Math.max(mrx / spread.rx, mry / spread.ry);\n\t\t\tif (spread.ratio > 1) {\n\t\t\t\tspread.rx *= spread.ratio;\n\t\t\t\tspread.ry *= spread.ratio;\n\t\t\t}\n\t\t} else {\n\t\t\tconst mfx = Math.max(Math.abs(xDelta - cx), Math.abs(cx));\n\t\t\tconst mfy = Math.max(Math.abs(yDelta - cy), Math.abs(cy));\n\n\t\t\tconst mr = Math.sqrt(mfx * mfx + mfy * mfy);\n\n\t\t\tspread.ratio = mr / spread.r;\n\t\t\tif (spread.ratio > 1) {\n\t\t\t\tspread.r = mr;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction f2r(fx: number, fy: number) {\n\t// Spec: https://drafts.csswg.org/css-images/#typedef-size\n\t// Get the aspect ratio of the closest-side size.\n\tconst ratio = fy !== 0 ? fx / fy : 1;\n\n\tif (fx === 0) {\n\t\treturn {\n\t\t\trx: 0,\n\t\t\try: 0\n\t\t};\n\t} else {\n\t\t// fx^2/a^2 + fy^2/b^2 = 1\n\t\t// fx^2/(b*ratio)^2 + fy^2/b^2 = 1\n\t\t// (fx^2+fy^2*ratio^2) = (b*ratio)^2\n\t\t// b = sqrt(fx^2+fy^2*ratio^2)/ratio\n\n\t\tconst ry = Math.sqrt(fx * fx + fy * fy * ratio * ratio) / ratio;\n\t\treturn {\n\t\t\try,\n\t\t\trx: ry * ratio\n\t\t};\n\t}\n}\n\nfunction isSizeAllLength(v: RadialPropertyValue[]): v is Array<{\n\ttype: 'length';\n\tvalue: {\n\t\tunit: string;\n\t\tvalue: string;\n\t};\n}> {\n\treturn !v.some(s => s.type === 'keyword');\n}\n","import CssDimension from '../vendor/parse-css-dimension/index.js';\nimport { buildXMLString } from '../utils.js';\n\nimport { resolveImageData } from '../handler/image.js';\nimport { buildLinearGradient } from './gradient/linear.js';\nimport { buildRadialGradient } from './gradient/radial.js';\nimport cssColorParse from 'parse-css-color';\n\ninterface Background {\n\tattachment?: string;\n\tcolor?: string;\n\tclip: string;\n\timage: string;\n\torigin?: string;\n\tposition: string;\n\tsize: string;\n\trepeat: string;\n}\n\nfunction toAbsoluteValue(v: string | number, base: number) {\n\tif (typeof v === 'string' && v.endsWith('%')) {\n\t\treturn (base * parseFloat(v)) / 100;\n\t}\n\treturn typeof v === 'string' ? parseFloat(v) || 0 : +v;\n}\n\nfunction calculateKeywordSize(\n\tkeyword: string,\n\tcontainerWidth: number,\n\tcontainerHeight: number,\n\timageWidth: number,\n\timageHeight: number\n): [number, number] {\n\tif (!imageWidth || !imageHeight) {\n\t\treturn [containerWidth, containerHeight];\n\t}\n\n\tif (keyword === 'cover') {\n\t\t// Scale to cover the container (use max scale to ensure it covers)\n\t\tconst scaleX = containerWidth / imageWidth;\n\t\tconst scaleY = containerHeight / imageHeight;\n\t\tconst scale = Math.max(scaleX, scaleY);\n\t\treturn [imageWidth * scale, imageHeight * scale];\n\t}\n\n\tif (keyword === 'contain') {\n\t\t// Scale to fit within the container (use min scale to ensure it fits)\n\t\tconst scaleX = containerWidth / imageWidth;\n\t\tconst scaleY = containerHeight / imageHeight;\n\t\tconst scale = Math.min(scaleX, scaleY);\n\t\treturn [imageWidth * scale, imageHeight * scale];\n\t}\n\n\t// For 'auto' or other values, handle auto\n\tif (keyword === 'auto' || keyword.includes('auto')) {\n\t\tconst parts = keyword.split(' ');\n\t\tconst widthPart = parts[0] || 'auto';\n\t\tconst heightPart = parts[1] || parts[0] || 'auto';\n\n\t\tlet finalWidth = imageWidth;\n\t\tlet finalHeight = imageHeight;\n\n\t\tif (widthPart === 'auto' && heightPart !== 'auto') {\n\t\t\t// Width is auto, height is specified\n\t\t\tconst parsedHeight = toAbsoluteValue(heightPart, containerHeight);\n\t\t\tfinalHeight = parsedHeight;\n\t\t\tfinalWidth = (imageWidth / imageHeight) * parsedHeight;\n\t\t} else if (heightPart === 'auto' && widthPart !== 'auto') {\n\t\t\t// Height is auto, width is specified\n\t\t\tconst parsedWidth = toAbsoluteValue(widthPart, containerWidth);\n\t\t\tfinalWidth = parsedWidth;\n\t\t\tfinalHeight = (imageHeight / imageWidth) * parsedWidth;\n\t\t}\n\t\t// If both are auto, use intrinsic dimensions\n\n\t\treturn [finalWidth, finalHeight];\n\t}\n\n\treturn [containerWidth, containerHeight];\n}\n\nconst positionKeywordMap: Record<string, string> = {\n\tbottom: '100%',\n\tcenter: '50%',\n\tleft: '0%',\n\tright: '100%',\n\ttop: '0%'\n};\n\nexport function parsePositionValues(str: string): { x: string; y: string } {\n\tif (!str) {\n\t\treturn { x: '0%', y: '0%' };\n\t}\n\n\tconst parts = str.split(' ').filter(Boolean);\n\n\tif (parts.length === 1) {\n\t\tconst part = parts[0];\n\n\t\tif (part in positionKeywordMap) {\n\t\t\tif (part === 'top' || part === 'bottom') {\n\t\t\t\treturn { x: '50%', y: positionKeywordMap[part] };\n\t\t\t}\n\n\t\t\treturn { x: positionKeywordMap[part], y: '50%' };\n\t\t}\n\n\t\treturn { x: part, y: '50%' };\n\t}\n\n\treturn {\n\t\tx: positionKeywordMap[parts[0]] || parts[0],\n\t\ty: positionKeywordMap[parts[1]] || parts[1]\n\t};\n}\n\nexport function computeBgPositionOffset(\n\trawValue: string,\n\tcontainerSize: number,\n\timageSize: number\n): number {\n\tif (rawValue.endsWith('%')) {\n\t\tconst percentage = parseFloat(rawValue) / 100;\n\t\t// CSS spec: offset = (containerSize - imageSize) * percentage\n\t\treturn (containerSize - imageSize) * percentage;\n\t}\n\n\ttry {\n\t\tconst parsed = new CssDimension(rawValue);\n\n\t\treturn parsed.type === 'length' || parsed.type === 'number'\n\t\t\t? parsed.value\n\t\t\t: toAbsoluteValue(parsed.value + parsed.unit, containerSize);\n\t} catch {\n\t\treturn 0;\n\t}\n}\n\nfunction parseLengthPairs(\n\tstr: string,\n\t{\n\t\tx,\n\t\ty,\n\t\tdefaultX,\n\t\tdefaultY\n\t}: {\n\t\tx: number;\n\t\ty: number;\n\t\tdefaultX: number | string;\n\t\tdefaultY: number | string;\n\t}\n) {\n\tconst parsed = str\n\t\t? str\n\t\t\t\t.split(' ')\n\t\t\t\t.map(value => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst dim = new CssDimension(value);\n\t\t\t\t\t\treturn dim.type === 'length' || dim.type === 'number'\n\t\t\t\t\t\t\t? dim.value\n\t\t\t\t\t\t\t: dim.value + dim.unit;\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.filter(v => v !== null)\n\t\t: [defaultX, defaultY];\n\n\tif (parsed.length === 0) {\n\t\treturn [toAbsoluteValue(defaultX, x), toAbsoluteValue(defaultY, y)];\n\t}\n\n\tif (parsed.length === 1) {\n\t\tparsed.push(defaultY);\n\t}\n\n\treturn parsed.map((v, index) => toAbsoluteValue(v, [x, y][index]));\n}\n\nexport default async function backgroundImage(\n\t{\n\t\tid,\n\t\twidth,\n\t\theight,\n\t\tleft,\n\t\ttop\n\t}: { id: string; width: number; height: number; left: number; top: number },\n\t{ image, size, position, repeat }: Background,\n\tinheritableStyle: Record<string, number | string>,\n\tfrom?: 'background' | 'mask'\n): Promise<string[]> {\n\t// Default to `repeat`.\n\trepeat = repeat || 'repeat';\n\tfrom = from || 'background';\n\n\t// CSS spec: default background-size is 'auto' (use intrinsic dimensions).\n\tsize = size || 'auto';\n\n\t// CSS spec: single-value size means \"<value> auto\" (maintain aspect ratio).\n\tif (\n\t\tsize !== 'cover' &&\n\t\tsize !== 'contain' &&\n\t\tsize !== 'auto' &&\n\t\t!size.includes(' ')\n\t) {\n\t\tsize = `${size} auto`;\n\t}\n\n\tconst repeatX = repeat === 'repeat-x' || repeat === 'repeat';\n\tconst repeatY = repeat === 'repeat-y' || repeat === 'repeat';\n\n\t// Check if size is a keyword (cover, contain, auto) that needs to be calculated later\n\tconst isKeywordSize =\n\t\tsize &&\n\t\t(size === 'cover' ||\n\t\t\tsize === 'contain' ||\n\t\t\tsize === 'auto' ||\n\t\t\tsize.includes('auto'));\n\n\t// For gradients, keyword sizes (cover, contain, auto) resolve to the\n\t// container dimensions since gradients have no intrinsic size.\n\t// For url() images, keyword sizes are calculated later using the image's\n\t// intrinsic dimensions.\n\tconst isGradient =\n\t\timage.startsWith('linear-gradient(') ||\n\t\timage.startsWith('repeating-linear-gradient(') ||\n\t\timage.startsWith('radial-gradient(') ||\n\t\timage.startsWith('repeating-radial-gradient(');\n\n\tconst dimensions =\n\t\tisKeywordSize && isGradient\n\t\t\t? [width, height] // Gradients have no intrinsic size; keyword sizes resolve to container\n\t\t\t: isKeywordSize\n\t\t\t? [0, 0] // Will be calculated later when we have image dimensions\n\t\t\t: parseLengthPairs(size, {\n\t\t\t\t\tx: width,\n\t\t\t\t\ty: height,\n\t\t\t\t\tdefaultX: width,\n\t\t\t\t\tdefaultY: height\n\t\t\t });\n\tconst normalizedPos = parsePositionValues(position);\n\n\tif (\n\t\timage.startsWith('linear-gradient(') ||\n\t\timage.startsWith('repeating-linear-gradient(')\n\t) {\n\t\tconst offsets = [\n\t\t\tcomputeBgPositionOffset(normalizedPos.x, width, dimensions[0]),\n\t\t\tcomputeBgPositionOffset(normalizedPos.y, height, dimensions[1])\n\t\t];\n\t\treturn buildLinearGradient(\n\t\t\t{ id, width, height, repeatX, repeatY },\n\t\t\timage,\n\t\t\tdimensions,\n\t\t\toffsets,\n\t\t\tinheritableStyle,\n\t\t\tfrom\n\t\t);\n\t}\n\n\tif (\n\t\timage.startsWith('radial-gradient(') ||\n\t\timage.startsWith('repeating-radial-gradient(')\n\t) {\n\t\tconst offsets = [\n\t\t\tcomputeBgPositionOffset(normalizedPos.x, width, dimensions[0]),\n\t\t\tcomputeBgPositionOffset(normalizedPos.y, height, dimensions[1])\n\t\t];\n\t\treturn buildRadialGradient(\n\t\t\t{ id, width, height, repeatX, repeatY },\n\t\t\timage,\n\t\t\tdimensions,\n\t\t\toffsets,\n\t\t\tinheritableStyle,\n\t\t\tfrom\n\t\t);\n\t}\n\n\tif (image.startsWith('url(')) {\n\t\tconst [src, imageWidth, imageHeight] = await resolveImageData(\n\t\t\timage.slice(4, -1)\n\t\t);\n\n\t\tlet resolvedWidth: number;\n\t\tlet resolvedHeight: number;\n\n\t\tif (isKeywordSize) {\n\t\t\t// Calculate dimensions based on keyword (cover, contain, auto)\n\t\t\tconst [calcWidth, calcHeight] = calculateKeywordSize(\n\t\t\t\tsize,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\timageWidth,\n\t\t\t\timageHeight\n\t\t\t);\n\t\t\tresolvedWidth = calcWidth;\n\t\t\tresolvedHeight = calcHeight;\n\t\t} else {\n\t\t\t// Use the previously parsed dimensions\n\t\t\tconst dimensionsWithoutFallback = parseLengthPairs(size, {\n\t\t\t\tx: width,\n\t\t\t\ty: height,\n\t\t\t\tdefaultX: 0,\n\t\t\t\tdefaultY: 0\n\t\t\t});\n\t\t\tresolvedWidth =\n\t\t\t\tfrom === 'mask'\n\t\t\t\t\t? imageWidth || dimensionsWithoutFallback[0]\n\t\t\t\t\t: dimensionsWithoutFallback[0] || imageWidth;\n\t\t\tresolvedHeight =\n\t\t\t\tfrom === 'mask'\n\t\t\t\t\t? imageHeight || dimensionsWithoutFallback[1]\n\t\t\t\t\t: dimensionsWithoutFallback[1] || imageHeight;\n\t\t}\n\n\t\tif (isKeywordSize) {\n\t\t\t// For keyword sizes (cover, contain, auto), apply CSS background-position\n\t\t\t// formula: offset = (containerSize - imageSize) * percentage\n\t\t\tconst rawPos = parsePositionValues(position);\n\t\t\tconst imageOffsetX = computeBgPositionOffset(\n\t\t\t\trawPos.x,\n\t\t\t\twidth,\n\t\t\t\tresolvedWidth\n\t\t\t);\n\t\t\tconst imageOffsetY = computeBgPositionOffset(\n\t\t\t\trawPos.y,\n\t\t\t\theight,\n\t\t\t\tresolvedHeight\n\t\t\t);\n\n\t\t\treturn [\n\t\t\t\t`satori_bi${id}`,\n\t\t\t\tbuildXMLString(\n\t\t\t\t\t'pattern',\n\t\t\t\t\t{\n\t\t\t\t\t\tid: `satori_bi${id}`,\n\t\t\t\t\t\tpatternContentUnits: 'userSpaceOnUse',\n\t\t\t\t\t\tpatternUnits: 'userSpaceOnUse',\n\t\t\t\t\t\tx: (repeatX ? imageOffsetX : 0) + left,\n\t\t\t\t\t\ty: (repeatY ? imageOffsetY : 0) + top,\n\t\t\t\t\t\twidth: repeatX ? resolvedWidth : '100%',\n\t\t\t\t\t\theight: repeatY ? resolvedHeight : '100%'\n\t\t\t\t\t},\n\t\t\t\t\tbuildXMLString('image', {\n\t\t\t\t\t\tx: repeatX ? 0 : imageOffsetX,\n\t\t\t\t\t\ty: repeatY ? 0 : imageOffsetY,\n\t\t\t\t\t\twidth: resolvedWidth,\n\t\t\t\t\t\theight: resolvedHeight,\n\t\t\t\t\t\tpreserveAspectRatio: 'none',\n\t\t\t\t\t\thref: src\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t];\n\t\t}\n\n\t\tconst rawPos = parsePositionValues(position);\n\t\tconst imageOffsetX = computeBgPositionOffset(\n\t\t\trawPos.x,\n\t\t\twidth,\n\t\t\tresolvedWidth\n\t\t);\n\t\tconst imageOffsetY = computeBgPositionOffset(\n\t\t\trawPos.y,\n\t\t\theight,\n\t\t\tresolvedHeight\n\t\t);\n\n\t\treturn [\n\t\t\t`satori_bi${id}`,\n\t\t\tbuildXMLString(\n\t\t\t\t'pattern',\n\t\t\t\t{\n\t\t\t\t\tid: `satori_bi${id}`,\n\t\t\t\t\tpatternContentUnits: 'userSpaceOnUse',\n\t\t\t\t\tpatternUnits: 'userSpaceOnUse',\n\t\t\t\t\tx: (repeatX ? imageOffsetX : 0) + left,\n\t\t\t\t\ty: (repeatY ? imageOffsetY : 0) + top,\n\t\t\t\t\twidth: repeatX ? resolvedWidth : '100%',\n\t\t\t\t\theight: repeatY ? resolvedHeight : '100%'\n\t\t\t\t},\n\t\t\t\tbuildXMLString('image', {\n\t\t\t\t\tx: repeatX ? 0 : imageOffsetX,\n\t\t\t\t\ty: repeatY ? 0 : imageOffsetY,\n\t\t\t\t\twidth: resolvedWidth,\n\t\t\t\t\theight: resolvedHeight,\n\t\t\t\t\tpreserveAspectRatio: 'none',\n\t\t\t\t\thref: src\n\t\t\t\t})\n\t\t\t)\n\t\t];\n\t}\n\n\tif (cssColorParse(image)) {\n\t\tconst colorObj = cssColorParse(image);\n\t\tconst [r, g, b, a] = colorObj.values;\n\t\tconst alpha = a !== undefined ? a : 1;\n\t\tconst color = `rgba(${r},${g},${b},${alpha})`;\n\n\t\treturn [\n\t\t\t`satori_bi${id}`,\n\t\t\tbuildXMLString(\n\t\t\t\t'pattern',\n\t\t\t\t{\n\t\t\t\t\tid: `satori_bi${id}`,\n\t\t\t\t\tpatternContentUnits: 'userSpaceOnUse',\n\t\t\t\t\tpatternUnits: 'userSpaceOnUse',\n\t\t\t\t\tx: left,\n\t\t\t\t\ty: top,\n\t\t\t\t\twidth: width,\n\t\t\t\t\theight: height\n\t\t\t\t},\n\t\t\t\tbuildXMLString('rect', {\n\t\t\t\t\tx: 0,\n\t\t\t\t\ty: 0,\n\t\t\t\t\twidth: width,\n\t\t\t\t\theight: height,\n\t\t\t\t\tfill: color\n\t\t\t\t})\n\t\t\t)\n\t\t];\n\t}\n\n\tthrow new Error(`Invalid background image: \"${image}\"`);\n}\n","/**\n * CSS border radius to SVG path.\n */\n\n// TODO: Support the `border-radius: 10px / 20px` syntax.\n// https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius\n\nimport { buildXMLString, lengthToNumber } from '../utils.js';\n\n// Getting the intersection of a 45deg ray with the elliptical arc x^2/rx^2 + y^2/ry^2 = 1.\n// Reference:\n// https://www.w3.org/TR/SVG/implnote.html#ArcConversionEndpointToCenter\nfunction svgArcCenterOffset([rx, ry]: number[]) {\n\tif (Math.round(rx * 1000) === 0 && Math.round(ry * 1000) === 0) {\n\t\treturn 0;\n\t}\n\treturn Math.round(((rx * ry) / Math.sqrt(rx * rx + ry * ry)) * 1000) / 1000;\n}\n\nfunction resolveSize(a: number, b: number, limit: number) {\n\tif (limit < a + b) {\n\t\tif (limit / 2 < a && limit / 2 < b) {\n\t\t\ta = b = limit / 2;\n\t\t} else if (limit / 2 < a) {\n\t\t\ta = limit - b;\n\t\t} else if (limit / 2 < b) {\n\t\t\tb = limit - a;\n\t\t}\n\t}\n\treturn [a, b];\n}\n\nfunction makeSmaller(arr: [number, number]) {\n\tarr[0] = arr[1] = Math.min(arr[0], arr[1]);\n}\n\n// Each corner can have 2 values, the first is the horizontal radius, the second is the vertical radius.\nfunction resolveRadius(\n\tv: number | string | undefined,\n\twidth: number,\n\theight: number,\n\tfontSize: number,\n\tstyle: any\n): [boolean, undefined | [number, number]] {\n\tif (typeof v === 'string') {\n\t\tconst sides = v.split(' ').map(s => s.trim());\n\t\tconst singleValue = !sides[1] && !sides[0].endsWith('%');\n\t\tsides[1] = sides[1] || sides[0];\n\t\treturn [\n\t\t\tsingleValue,\n\t\t\t[\n\t\t\t\tMath.min(\n\t\t\t\t\tlengthToNumber(sides[0], fontSize, width, style, true),\n\t\t\t\t\twidth\n\t\t\t\t),\n\t\t\t\tMath.min(\n\t\t\t\t\tlengthToNumber(sides[1], fontSize, height, style, true),\n\t\t\t\t\theight\n\t\t\t\t)\n\t\t\t]\n\t\t];\n\t}\n\tif (typeof v === 'number') {\n\t\treturn [true, [Math.min(v, width), Math.min(v, height)]];\n\t}\n\treturn [true, undefined];\n}\n\nconst radiusZeroOrNull = (_radius?: [number, number]) =>\n\t_radius && _radius[0] !== 0 && _radius[1] !== 0;\n\nexport function getBorderRadiusClipPath(\n\t{\n\t\tid,\n\t\tborderRadiusPath,\n\t\tborderType,\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight\n\t}: {\n\t\tid: string;\n\t\tborderRadiusPath?: string;\n\t\tborderType?: 'rect' | 'path';\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t},\n\tstyle: Record<string, number | string>\n) {\n\tconst rectClipId = `satori_brc-${id}`;\n\tconst defs = buildXMLString(\n\t\t'clipPath',\n\t\t{\n\t\t\tid: rectClipId\n\t\t},\n\t\tbuildXMLString(borderType, {\n\t\t\tx: left,\n\t\t\ty: top,\n\t\t\twidth,\n\t\t\theight,\n\t\t\td: borderRadiusPath ? borderRadiusPath : undefined\n\t\t})\n\t);\n\n\treturn [defs, rectClipId];\n}\n\nexport default function radius(\n\t{\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight\n\t}: {\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t},\n\tstyle: Record<string, any>,\n\tpartialSides?: boolean[]\n) {\n\tlet {\n\t\tborderTopLeftRadius,\n\t\tborderTopRightRadius,\n\t\tborderBottomLeftRadius,\n\t\tborderBottomRightRadius,\n\t\tfontSize\n\t} = style;\n\n\tlet singleAbsValueTopLeftCorner;\n\tlet singleAbsValueTopRightCorner;\n\tlet singleAbsValueBottomLeftCorner;\n\tlet singleAbsValueBottomRightCorner;\n\t[singleAbsValueTopLeftCorner, borderTopLeftRadius] = resolveRadius(\n\t\tborderTopLeftRadius,\n\t\twidth,\n\t\theight,\n\t\tfontSize,\n\t\tstyle\n\t);\n\t[singleAbsValueTopRightCorner, borderTopRightRadius] = resolveRadius(\n\t\tborderTopRightRadius,\n\t\twidth,\n\t\theight,\n\t\tfontSize,\n\t\tstyle\n\t);\n\t[singleAbsValueBottomLeftCorner, borderBottomLeftRadius] = resolveRadius(\n\t\tborderBottomLeftRadius,\n\t\twidth,\n\t\theight,\n\t\tfontSize,\n\t\tstyle\n\t);\n\t[singleAbsValueBottomRightCorner, borderBottomRightRadius] = resolveRadius(\n\t\tborderBottomRightRadius,\n\t\twidth,\n\t\theight,\n\t\tfontSize,\n\t\tstyle\n\t);\n\n\tif (\n\t\t!partialSides &&\n\t\t!radiusZeroOrNull(borderTopLeftRadius) &&\n\t\t!radiusZeroOrNull(borderTopRightRadius) &&\n\t\t!radiusZeroOrNull(borderBottomLeftRadius) &&\n\t\t!radiusZeroOrNull(borderBottomRightRadius)\n\t) {\n\t\treturn '';\n\t}\n\tborderTopLeftRadius ||= [0, 0];\n\tborderTopRightRadius ||= [0, 0];\n\tborderBottomLeftRadius ||= [0, 0];\n\tborderBottomRightRadius ||= [0, 0];\n\n\t// Limit the radius sizes of each edge to make sure they will never overlap.\n\n\t// Top\n\t[borderTopLeftRadius[0], borderTopRightRadius[0]] = resolveSize(\n\t\tborderTopLeftRadius[0],\n\t\tborderTopRightRadius[0],\n\t\twidth\n\t);\n\t// Bottom\n\t[borderBottomLeftRadius[0], borderBottomRightRadius[0]] = resolveSize(\n\t\tborderBottomLeftRadius[0],\n\t\tborderBottomRightRadius[0],\n\t\twidth\n\t);\n\t// Left\n\t[borderTopLeftRadius[1], borderBottomLeftRadius[1]] = resolveSize(\n\t\tborderTopLeftRadius[1],\n\t\tborderBottomLeftRadius[1],\n\t\theight\n\t);\n\t// Right\n\t[borderTopRightRadius[1], borderBottomRightRadius[1]] = resolveSize(\n\t\tborderTopRightRadius[1],\n\t\tborderBottomRightRadius[1],\n\t\theight\n\t);\n\n\t// If the specified border radius is a single value (e.g. 10px or 10em), we take\n\t// the minimum of the resolved horizontal and vertical radius and apply to both.\n\tif (singleAbsValueTopLeftCorner) {\n\t\tmakeSmaller(borderTopLeftRadius);\n\t}\n\tif (singleAbsValueTopRightCorner) {\n\t\tmakeSmaller(borderTopRightRadius);\n\t}\n\tif (singleAbsValueBottomLeftCorner) {\n\t\tmakeSmaller(borderBottomLeftRadius);\n\t}\n\tif (singleAbsValueBottomRightCorner) {\n\t\tmakeSmaller(borderBottomRightRadius);\n\t}\n\n\ttype Arc = [[number, number], [number, number]];\n\tconst p: Arc[] = [];\n\tp[0] = [borderTopRightRadius, borderTopRightRadius];\n\tp[1] = [\n\t\tborderBottomRightRadius,\n\t\t[-borderBottomRightRadius[0], borderBottomRightRadius[1]]\n\t];\n\tp[2] = [\n\t\tborderBottomLeftRadius,\n\t\t[-borderBottomLeftRadius[0], -borderBottomLeftRadius[1]]\n\t];\n\tp[3] = [\n\t\tborderTopLeftRadius,\n\t\t[borderTopLeftRadius[0], -borderTopLeftRadius[1]]\n\t];\n\n\tconst T = `h${width - borderTopLeftRadius[0] - borderTopRightRadius[0]} a${\n\t\tp[0][0]\n\t} 0 0 1 ${p[0][1]}`;\n\tconst R = `v${\n\t\theight - borderTopRightRadius[1] - borderBottomRightRadius[1]\n\t} a${p[1][0]} 0 0 1 ${p[1][1]}`;\n\tconst B = `h${\n\t\tborderBottomRightRadius[0] + borderBottomLeftRadius[0] - width\n\t} a${p[2][0]} 0 0 1 ${p[2][1]}`;\n\tconst L = `v${\n\t\tborderBottomLeftRadius[1] + borderTopLeftRadius[1] - height\n\t} a${p[3][0]} 0 0 1 ${p[3][1]}`;\n\n\tif (partialSides) {\n\t\t// \"However it is not defined what these transitions look like or what function maps from this ratio to a point on the curve.\"\n\t\t// https://w3c.github.io/csswg-drafts/css-backgrounds-3/#corner-transitions\n\t\tlet start = partialSides.indexOf(false);\n\n\t\tif (!partialSides.includes(true))\n\t\t\tthrow new Error('Invalid `partialSides`.');\n\n\t\tif (start === -1) {\n\t\t\tstart = 0;\n\t\t} else {\n\t\t\twhile (!partialSides[start]) {\n\t\t\t\tstart = (start + 1) % 4;\n\t\t\t}\n\t\t}\n\n\t\tfunction getArc(i: number) {\n\t\t\tconst c0 = svgArcCenterOffset(\n\t\t\t\t[\n\t\t\t\t\tborderTopLeftRadius,\n\t\t\t\t\tborderTopRightRadius,\n\t\t\t\t\tborderBottomRightRadius,\n\t\t\t\t\tborderBottomLeftRadius\n\t\t\t\t][i]\n\t\t\t);\n\t\t\treturn i === 0\n\t\t\t\t? [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tleft + borderTopLeftRadius[0] - c0,\n\t\t\t\t\t\t\ttop + borderTopLeftRadius[1] - c0\n\t\t\t\t\t\t],\n\t\t\t\t\t\t[left + borderTopLeftRadius[0], top]\n\t\t\t\t ]\n\t\t\t\t: i === 1\n\t\t\t\t? [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tleft + width - borderTopRightRadius[0] + c0,\n\t\t\t\t\t\t\ttop + borderTopRightRadius[1] - c0\n\t\t\t\t\t\t],\n\t\t\t\t\t\t[left + width, top + borderTopRightRadius[1]]\n\t\t\t\t ]\n\t\t\t\t: i === 2\n\t\t\t\t? [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tleft + width - borderBottomRightRadius[0] + c0,\n\t\t\t\t\t\t\ttop + height - borderBottomRightRadius[1] + c0\n\t\t\t\t\t\t],\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tleft + width - borderBottomRightRadius[0],\n\t\t\t\t\t\t\ttop + height\n\t\t\t\t\t\t]\n\t\t\t\t ]\n\t\t\t\t: [\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tleft + borderBottomLeftRadius[0] - c0,\n\t\t\t\t\t\t\ttop + height - borderBottomLeftRadius[1] + c0\n\t\t\t\t\t\t],\n\t\t\t\t\t\t[left, top + height - borderBottomLeftRadius[1]]\n\t\t\t\t ];\n\t\t}\n\n\t\tlet result = '';\n\n\t\tconst arc0 = getArc(start);\n\n\t\tlet l = `M${arc0[0]} A${p[(start + 3) % 4][0]} 0 0 1 ${arc0[1]}`;\n\n\t\tlet len = 0;\n\t\tfor (; len < 4 && partialSides[(start + len) % 4]; len++) {\n\t\t\tresult += l + ' ';\n\t\t\tl = [T, R, B, L][(start + len) % 4];\n\t\t}\n\t\tconst end = (start + len) % 4;\n\n\t\t// For the last segment, we skip the full arc and add the half arc.\n\t\tresult += l.split(' ')[0];\n\n\t\tconst arc1 = getArc(end);\n\t\tresult += ` A${p[(end + 3) % 4][0]} 0 0 1 ${arc1[0]}`;\n\n\t\treturn result;\n\t}\n\n\t// Generate the path\n\treturn `M${left + borderTopLeftRadius[0]},${top} ${T} ${R} ${B} ${L}`;\n}\n","import { buildXMLString } from '../utils.js';\nimport radius from './border-radius.js';\n\nfunction compareBorderDirections(a: string, b: string, style: any) {\n\treturn (\n\t\tstyle[a + 'Width'] === style[b + 'Width'] &&\n\t\tstyle[a + 'Style'] === style[b + 'Style'] &&\n\t\tstyle[a + 'Color'] === style[b + 'Color']\n\t);\n}\n\nexport function getBorderClipPath(\n\t{\n\t\tid,\n\t\t// Can be `overflow: hidden` from parent containers.\n\t\tcurrentClipPathId,\n\t\tborderPath,\n\t\tborderType,\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight\n\t}: {\n\t\tid: string;\n\t\tcurrentClipPathId?: string | number;\n\t\tborderPath?: string;\n\t\tborderType?: 'rect' | 'path';\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t},\n\tstyle: Record<string, number | string>\n) {\n\tconst hasBorder =\n\t\tstyle.borderTopWidth ||\n\t\tstyle.borderRightWidth ||\n\t\tstyle.borderBottomWidth ||\n\t\tstyle.borderLeftWidth;\n\n\tif (!hasBorder) return null;\n\n\t// In SVG, stroke is always centered on the path and there is no\n\t// existing property to make it behave like CSS border. So here we\n\t// 2x the border width and introduce another clip path to clip the\n\t// overflowed part.\n\tconst rectClipId = `satori_bc-${id}`;\n\tconst defs = buildXMLString(\n\t\t'clipPath',\n\t\t{\n\t\t\tid: rectClipId,\n\t\t\t'clip-path': currentClipPathId\n\t\t\t\t? `url(#${currentClipPathId})`\n\t\t\t\t: undefined\n\t\t},\n\t\tbuildXMLString(borderType, {\n\t\t\tx: left,\n\t\t\ty: top,\n\t\t\twidth,\n\t\t\theight,\n\t\t\td: borderPath ? borderPath : undefined\n\t\t})\n\t);\n\n\treturn [defs, rectClipId];\n}\n\nexport default function border(\n\t{\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight,\n\t\tprops,\n\t\tasContentMask,\n\t\tmaskBorderOnly\n\t}: {\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t\tprops: any;\n\t\tasContentMask?: boolean;\n\t\tmaskBorderOnly?: boolean;\n\t},\n\tstyle: Record<string, number | string>\n) {\n\tconst directions = [\n\t\t'borderTop',\n\t\t'borderRight',\n\t\t'borderBottom',\n\t\t'borderLeft'\n\t];\n\n\t// No border\n\tif (\n\t\t!asContentMask &&\n\t\t!directions.some(direction => style[direction + 'Width'])\n\t)\n\t\treturn '';\n\n\tlet fullBorder = '';\n\n\tlet start = 0;\n\twhile (\n\t\tstart > 0 &&\n\t\tcompareBorderDirections(\n\t\t\tdirections[start],\n\t\t\tdirections[(start + 3) % 4],\n\t\t\tstyle\n\t\t)\n\t) {\n\t\tstart = (start + 3) % 4;\n\t}\n\n\tlet partialSides = [false, false, false, false];\n\tlet currentStyle = [];\n\tfor (let _i = 0; _i < 4; _i++) {\n\t\tconst i = (start + _i) % 4;\n\t\tconst ni = (start + _i + 1) % 4;\n\n\t\tconst d = directions[i];\n\t\tconst nd = directions[ni];\n\n\t\tpartialSides[i] = true;\n\t\tcurrentStyle = [\n\t\t\tstyle[d + 'Width'],\n\t\t\tstyle[d + 'Style'],\n\t\t\tstyle[d + 'Color'],\n\t\t\td\n\t\t];\n\n\t\tif (!compareBorderDirections(d, nd, style)) {\n\t\t\tconst w =\n\t\t\t\t(currentStyle[0] || 0) +\n\t\t\t\t(asContentMask && !maskBorderOnly\n\t\t\t\t\t? style[d.replace('border', 'padding')] || 0\n\t\t\t\t\t: 0);\n\t\t\tif (w) {\n\t\t\t\tfullBorder += buildXMLString('path', {\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\t...props,\n\t\t\t\t\tfill: 'none',\n\t\t\t\t\tstroke: asContentMask ? '#000' : currentStyle[2],\n\t\t\t\t\t'stroke-width': w * 2,\n\t\t\t\t\t'stroke-dasharray':\n\t\t\t\t\t\t!asContentMask && currentStyle[1] === 'dashed'\n\t\t\t\t\t\t\t? w * 2 + ' ' + w\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\td: radius(\n\t\t\t\t\t\t{ left, top, width, height },\n\t\t\t\t\t\tstyle as Record<string, number>,\n\t\t\t\t\t\tpartialSides\n\t\t\t\t\t)\n\t\t\t\t});\n\t\t\t}\n\t\t\tpartialSides = [false, false, false, false];\n\t\t}\n\t}\n\n\tif (partialSides.some(Boolean)) {\n\t\tconst w =\n\t\t\t(currentStyle[0] || 0) +\n\t\t\t(asContentMask && !maskBorderOnly\n\t\t\t\t? style[currentStyle[3].replace('border', 'padding')] || 0\n\t\t\t\t: 0);\n\t\tif (w) {\n\t\t\tfullBorder += buildXMLString('path', {\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\t...props,\n\t\t\t\tfill: 'none',\n\t\t\t\tstroke: asContentMask ? '#000' : currentStyle[2],\n\t\t\t\t'stroke-width': w * 2,\n\t\t\t\t'stroke-dasharray':\n\t\t\t\t\t!asContentMask && currentStyle[1] === 'dashed'\n\t\t\t\t\t\t? w * 2 + ' ' + w\n\t\t\t\t\t\t: undefined,\n\t\t\t\td: radius(\n\t\t\t\t\t{ left, top, width, height },\n\t\t\t\t\tstyle as Record<string, number>,\n\t\t\t\t\tpartialSides\n\t\t\t\t)\n\t\t\t});\n\t\t}\n\t}\n\n\treturn fullBorder;\n}\n","/**\n * When there is border radius, the content area should be clipped by the\n * inner path of border + padding. This applies to <img> element as well as any\n * child element inside a `overflow: hidden` container.\n */\n\nimport { buildXMLString } from '../utils.js';\nimport border from './border.js';\n\nexport default function contentMask(\n\t{\n\t\tid,\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight,\n\t\tmatrix,\n\t\tborderOnly\n\t}: {\n\t\tid: string;\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t\tmatrix: string | undefined;\n\t\tborderOnly?: boolean;\n\t},\n\tstyle: Record<string, number | string>\n) {\n\tconst offsetLeft =\n\t\t((style.borderLeftWidth as number) || 0) +\n\t\t(borderOnly ? 0 : (style.paddingLeft as number) || 0);\n\tconst offsetTop =\n\t\t((style.borderTopWidth as number) || 0) +\n\t\t(borderOnly ? 0 : (style.paddingTop as number) || 0);\n\tconst offsetRight =\n\t\t((style.borderRightWidth as number) || 0) +\n\t\t(borderOnly ? 0 : (style.paddingRight as number) || 0);\n\tconst offsetBottom =\n\t\t((style.borderBottomWidth as number) || 0) +\n\t\t(borderOnly ? 0 : (style.paddingBottom as number) || 0);\n\n\tconst contentArea = {\n\t\tx: left + offsetLeft,\n\t\ty: top + offsetTop,\n\t\twidth: width - offsetLeft - offsetRight,\n\t\theight: height - offsetTop - offsetBottom\n\t};\n\n\tconst _contentMask = buildXMLString(\n\t\t'mask',\n\t\t{ id },\n\t\tbuildXMLString('rect', {\n\t\t\t...contentArea,\n\t\t\tfill: '#fff',\n\t\t\t// add transformation matrix to mask if overflow is hidden AND a\n\t\t\t// transformation style is defined, otherwise children will be clipped\n\t\t\t// incorrectly\n\t\t\ttransform:\n\t\t\t\tstyle.overflow === 'hidden' && style.transform && matrix\n\t\t\t\t\t? matrix\n\t\t\t\t\t: undefined,\n\t\t\tmask: style._inheritedMaskId\n\t\t\t\t? `url(#${style._inheritedMaskId})`\n\t\t\t\t: undefined\n\t\t}) +\n\t\t\tborder(\n\t\t\t\t{\n\t\t\t\t\tleft,\n\t\t\t\t\ttop,\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\ttransform: matrix ? matrix : undefined\n\t\t\t\t\t},\n\t\t\t\t\tasContentMask: true,\n\t\t\t\t\tmaskBorderOnly: borderOnly\n\t\t\t\t},\n\t\t\t\tstyle\n\t\t\t)\n\t);\n\n\treturn _contentMask;\n}\n","import { lengthToNumber } from '../utils.js';\nimport { default as buildBorderRadius } from '../builder/border-radius.js';\nimport { getStylesForProperty } from 'css-to-react-native';\n\nconst regexMap = {\n\tcircle: /circle\\((.+)\\)/,\n\tellipse: /ellipse\\((.+)\\)/,\n\tpath: /path\\((.+)\\)/,\n\tpolygon: /polygon\\((.+)\\)/,\n\tinset: /inset\\((.+)\\)/\n};\n\nexport function createShapeParser(\n\t{\n\t\twidth,\n\t\theight\n\t}: {\n\t\twidth: number;\n\t\theight: number;\n\t},\n\tstyle: Record<string, string | number>,\n\tinheritedStyle: Record<string, string | number>\n) {\n\tfunction parseCircle(str: string) {\n\t\tconst res = str.match(regexMap['circle']);\n\n\t\tif (!res) return null;\n\n\t\tconst [, value] = res;\n\t\tconst [radius, pos = ''] = value.split('at').map(v => v.trim());\n\t\tconst { x, y } = resolvePosition(pos, width, height);\n\n\t\treturn {\n\t\t\ttype: 'circle',\n\t\t\tr: lengthToNumber(\n\t\t\t\tradius,\n\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\tMath.sqrt(Math.pow(width, 2) + Math.pow(height, 2)) /\n\t\t\t\t\tMath.sqrt(2),\n\t\t\t\tinheritedStyle,\n\t\t\t\ttrue\n\t\t\t),\n\t\t\tcx: lengthToNumber(\n\t\t\t\tx,\n\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\twidth,\n\t\t\t\tinheritedStyle,\n\t\t\t\ttrue\n\t\t\t),\n\t\t\tcy: lengthToNumber(\n\t\t\t\ty,\n\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\theight,\n\t\t\t\tinheritedStyle,\n\t\t\t\ttrue\n\t\t\t)\n\t\t};\n\t}\n\tfunction parseEllipse(str: string) {\n\t\tconst res = str.match(regexMap['ellipse']);\n\n\t\tif (!res) return null;\n\n\t\tconst [, value] = res;\n\t\tconst [radius, pos = ''] = value.split('at').map(v => v.trim());\n\t\tconst [rx, ry] = radius.split(' ');\n\t\tconst { x, y } = resolvePosition(pos, width, height);\n\n\t\treturn {\n\t\t\ttype: 'ellipse',\n\t\t\trx: lengthToNumber(\n\t\t\t\trx || '50%',\n\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\twidth,\n\t\t\t\tinheritedStyle,\n\t\t\t\ttrue\n\t\t\t),\n\t\t\try: lengthToNumber(\n\t\t\t\try || '50%',\n\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\theight,\n\t\t\t\tinheritedStyle,\n\t\t\t\ttrue\n\t\t\t),\n\t\t\tcx: lengthToNumber(\n\t\t\t\tx,\n\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\twidth,\n\t\t\t\tinheritedStyle,\n\t\t\t\ttrue\n\t\t\t),\n\t\t\tcy: lengthToNumber(\n\t\t\t\ty,\n\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\theight,\n\t\t\t\tinheritedStyle,\n\t\t\t\ttrue\n\t\t\t)\n\t\t};\n\t}\n\tfunction parsePath(str: string) {\n\t\tconst res = str.match(regexMap['path']);\n\n\t\tif (!res) return null;\n\n\t\tconst [fillRule, d] = resolveFillRule(res[1]);\n\n\t\treturn {\n\t\t\ttype: 'path',\n\t\t\td,\n\t\t\t'fill-rule': fillRule\n\t\t};\n\t}\n\tfunction parsePolygon(str: string) {\n\t\tconst res = str.match(regexMap['polygon']);\n\n\t\tif (!res) return null;\n\n\t\tconst [fillRule, points] = resolveFillRule(res[1]);\n\n\t\treturn {\n\t\t\ttype: 'polygon',\n\t\t\t'fill-rule': fillRule,\n\t\t\tpoints: points\n\t\t\t\t.split(',')\n\t\t\t\t.map(v =>\n\t\t\t\t\tv\n\t\t\t\t\t\t.split(' ')\n\t\t\t\t\t\t.map((k, i) =>\n\t\t\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\t\t\tk,\n\t\t\t\t\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\t\t\t\t\ti === 0 ? width : height,\n\t\t\t\t\t\t\t\tinheritedStyle,\n\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(' ')\n\t\t\t\t)\n\t\t\t\t.join(',')\n\t\t};\n\t}\n\tfunction parseInset(str: string) {\n\t\tconst res = str.match(regexMap['inset']);\n\n\t\tif (!res) return null;\n\n\t\tconst [inset, radius] = (\n\t\t\tres[1].includes('round') ? res[1] : `${res[1].trim()} round 0`\n\t\t).split('round');\n\t\tconst radiusMap = getStylesForProperty('borderRadius', radius, true);\n\t\tconst r = Object.values(radiusMap)\n\t\t\t.map(s => String(s))\n\t\t\t.map(\n\t\t\t\t(s, i) =>\n\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\ts,\n\t\t\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\t\t\ti === 0 || i === 2 ? height : width,\n\t\t\t\t\t\tinheritedStyle,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) || 0\n\t\t\t);\n\t\tconst offsets = Object.values(\n\t\t\tgetStylesForProperty('margin', inset, true)\n\t\t)\n\t\t\t.map(s => String(s))\n\t\t\t.map(\n\t\t\t\t(s, i) =>\n\t\t\t\t\tlengthToNumber(\n\t\t\t\t\t\ts,\n\t\t\t\t\t\tinheritedStyle.fontSize as number,\n\t\t\t\t\t\ti === 0 || i === 2 ? height : width,\n\t\t\t\t\t\tinheritedStyle,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) || 0\n\t\t\t);\n\t\tconst x = offsets[3];\n\t\tconst y = offsets[0];\n\t\tconst w = width - (offsets[1] + offsets[3]);\n\t\tconst h = height - (offsets[0] + offsets[2]);\n\n\t\tif (r.some(v => v > 0)) {\n\t\t\tconst d = buildBorderRadius(\n\t\t\t\t{ left: x, top: y, width: w, height: h },\n\t\t\t\t{ ...style, ...radiusMap }\n\t\t\t);\n\n\t\t\treturn { type: 'path', d };\n\t\t}\n\n\t\treturn {\n\t\t\ttype: 'rect',\n\t\t\tx,\n\t\t\ty,\n\t\t\twidth: w,\n\t\t\theight: h\n\t\t};\n\t}\n\n\treturn {\n\t\tparseCircle,\n\t\tparseEllipse,\n\t\tparsePath,\n\t\tparsePolygon,\n\t\tparseInset\n\t};\n}\n\nfunction resolveFillRule(str: string) {\n\tconst [, fillRule = 'nonzero', d] =\n\t\tstr.replace(/('|\")/g, '').match(/^(nonzero|evenodd)?,?(.+)/) || [];\n\n\treturn [fillRule, d];\n}\n\nfunction resolvePosition(position: string, xDelta: number, yDelta: number) {\n\tconst pos = position.split(' ');\n\tconst res: { x: number | string; y: number | string } = {\n\t\tx: pos[0] || '50%',\n\t\ty: pos[1] || '50%'\n\t};\n\n\tpos.forEach(v => {\n\t\tif (v === 'top') {\n\t\t\tres.y = 0;\n\t\t} else if (v === 'bottom') {\n\t\t\tres.y = yDelta;\n\t\t} else if (v === 'left') {\n\t\t\tres.x = 0;\n\t\t} else if (v === 'right') {\n\t\t\tres.x = xDelta;\n\t\t} else if (v === 'center') {\n\t\t\tres.x = xDelta / 2;\n\t\t\tres.y = yDelta / 2;\n\t\t} else {\n\t\t\t// do nothing\n\t\t}\n\t});\n\n\treturn res;\n}\n","import { buildXMLString } from '../utils.js';\nimport { createShapeParser } from '../parser/shape.js';\n\nexport function genClipPathId(id: string) {\n\treturn `satori_cp-${id}`;\n}\nexport function genClipPath(id: string) {\n\treturn `url(#${genClipPathId(id)})`;\n}\n\nexport function buildClipPath(\n\tv: {\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t\tpath: string;\n\t\tmatrix: string | undefined;\n\t\tid: string;\n\t\tcurrentClipPath: string | string;\n\t\tsrc?: string;\n\t},\n\tstyle: Record<string, string | number>,\n\tinheritedStyle: Record<string, string | number>\n) {\n\tif (style.clipPath === 'none') return '';\n\n\tconst parser = createShapeParser(v, style, inheritedStyle);\n\tconst clipPath = style.clipPath as string;\n\n\tlet tmp: { type: string; [p: string]: string | number } = { type: '' };\n\n\tfor (const k of Object.keys(parser)) {\n\t\ttmp = parser[k](clipPath);\n\t\tif (tmp) break;\n\t}\n\n\tif (tmp) {\n\t\tconst { type, ...rest } = tmp;\n\t\treturn buildXMLString(\n\t\t\t'clipPath',\n\t\t\t{\n\t\t\t\tid: genClipPathId(v.id),\n\t\t\t\t'clip-path': v.currentClipPath,\n\t\t\t\ttransform: `translate(${v.left}, ${v.top})`\n\t\t\t},\n\t\t\tbuildXMLString(type, rest)\n\t\t);\n\t}\n\treturn '';\n}\n","/**\n * Generate clip path for the given element.\n */\n\nimport { buildXMLString } from '../utils.js';\nimport mask from './content-mask.js';\nimport { buildClipPath, genClipPathId } from './clip-path.js';\n\nexport default function overflow(\n\t{\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight,\n\t\tpath,\n\t\tmatrix,\n\t\tid,\n\t\tcurrentClipPath,\n\t\tsrc\n\t}: {\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t\tpath: string;\n\t\tmatrix: string | undefined;\n\t\tid: string;\n\t\tcurrentClipPath: string | string;\n\t\tsrc?: string;\n\t},\n\tstyle: Record<string, string | number>,\n\tinheritableStyle: Record<string, string | number>\n) {\n\tlet overflowClipPath = '';\n\tconst clipPath =\n\t\tstyle.clipPath && style.clipPath !== 'none'\n\t\t\t? buildClipPath(\n\t\t\t\t\t{\n\t\t\t\t\t\tleft,\n\t\t\t\t\t\ttop,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t\theight,\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tmatrix,\n\t\t\t\t\t\tcurrentClipPath,\n\t\t\t\t\t\tsrc\n\t\t\t\t\t},\n\t\t\t\t\tstyle as Record<string, number>,\n\t\t\t\t\tinheritableStyle\n\t\t\t )\n\t\t\t: '';\n\n\tif (style.overflow !== 'hidden' && !src) {\n\t\toverflowClipPath = '';\n\t} else {\n\t\tconst _id = clipPath ? `satori_ocp-${id}` : genClipPathId(id);\n\n\t\toverflowClipPath = buildXMLString(\n\t\t\t'clipPath',\n\t\t\t{\n\t\t\t\tid: _id,\n\t\t\t\t'clip-path': currentClipPath\n\t\t\t},\n\t\t\tbuildXMLString(path ? 'path' : 'rect', {\n\t\t\t\tx: left,\n\t\t\t\ty: top,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\td: path ? path : undefined,\n\t\t\t\t// add transformation matrix to clip path if overflow is hidden AND a\n\t\t\t\t// transformation style is defined, otherwise children will be clipped\n\t\t\t\t// relative to the parent's original plane instead of the transformed\n\t\t\t\t// plane\n\t\t\t\ttransform:\n\t\t\t\t\tstyle.overflow === 'hidden' && style.transform && matrix\n\t\t\t\t\t\t? matrix\n\t\t\t\t\t\t: undefined\n\t\t\t})\n\t\t);\n\t}\n\n\tconst contentMask = mask(\n\t\t{\n\t\t\tid: `satori_om-${id}`,\n\t\t\tleft,\n\t\t\ttop,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tmatrix,\n\t\t\tborderOnly: src ? false : true\n\t\t},\n\t\tstyle\n\t);\n\n\treturn clipPath + overflowClipPath + contentMask;\n}\n","import { buildXMLString } from '../utils.js';\nimport buildBackgroundImage from './background-image.js';\nimport type { MaskProperty } from '../parser/mask.js';\n\nconst genMaskImageId = (id: string) => `satori_mi-${id}`;\n\nexport default async function buildMaskImage(\n\tv: {\n\t\tid: string;\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t},\n\tstyle: Record<string, string | number>,\n\tinheritedStyle: Record<string, string | number>\n): Promise<[string, string]> {\n\tif (!style.maskImage) return ['', ''];\n\tconst { left, top, width, height, id } = v;\n\tconst maskImage = style.maskImage as unknown as MaskProperty[];\n\tconst length = maskImage.length;\n\tif (!length) return ['', ''];\n\tconst miId = genMaskImageId(id);\n\n\tlet mask = '';\n\n\tfor (let i = 0; i < length; i++) {\n\t\tconst m = maskImage[i];\n\n\t\tconst [_id, def] = await buildBackgroundImage(\n\t\t\t{ id: `${miId}-${i}`, left, top, width, height },\n\t\t\tm,\n\t\t\tinheritedStyle,\n\t\t\t'mask'\n\t\t);\n\n\t\tmask +=\n\t\t\tdef +\n\t\t\tbuildXMLString('rect', {\n\t\t\t\tx: left,\n\t\t\t\ty: top,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tfill: `url(#${_id})`\n\t\t\t});\n\t}\n\n\tmask = buildXMLString('mask', { id: miId }, mask);\n\n\treturn [miId, mask];\n}\n","import type { ParsedTransformOrigin } from '../transform-origin.js';\n\nimport backgroundImage from './background-image.js';\nimport radius, { getBorderRadiusClipPath } from './border-radius.js';\nimport { boxShadow } from './shadow.js';\nimport transform from './transform.js';\nimport overflow from './overflow.js';\nimport { buildXMLString } from '../utils.js';\nimport border, { getBorderClipPath } from './border.js';\nimport { genClipPath } from './clip-path.js';\nimport buildMaskImage from './mask-image.js';\nimport CssDimension from '../vendor/parse-css-dimension/index.js';\n\n/**\n * Parse object-position value into [xOffset, yOffset] in pixels.\n * Supports keywords (left, center, right, top, bottom), percentages, and lengths.\n * Similar to background-position parsing.\n */\nfunction parseObjectPosition(\n\tposition: string,\n\tcontainerWidth: number,\n\tcontainerHeight: number\n): [number, number] {\n\tconst parts = position.toLowerCase().trim().split(/\\s+/);\n\n\t// Convert keyword to percentage\n\tconst keywordToPercent = (keyword: string, axis: 'x' | 'y'): string => {\n\t\tconst map = {\n\t\t\tleft: '0%',\n\t\t\tcenter: '50%',\n\t\t\tright: '100%',\n\t\t\ttop: '0%',\n\t\t\tbottom: '100%'\n\t\t};\n\t\treturn map[keyword] || keyword;\n\t};\n\n\tlet xValue: string;\n\tlet yValue: string;\n\n\tif (parts.length === 1) {\n\t\tconst part = parts[0];\n\t\t// Single value\n\t\tif (part === 'left' || part === 'center' || part === 'right') {\n\t\t\txValue = keywordToPercent(part, 'x');\n\t\t\tyValue = '50%'; // center\n\t\t} else if (part === 'top' || part === 'bottom') {\n\t\t\txValue = '50%'; // center\n\t\t\tyValue = keywordToPercent(part, 'y');\n\t\t} else {\n\t\t\t// Assume it's x value, y defaults to center\n\t\t\txValue = part;\n\t\t\tyValue = '50%';\n\t\t}\n\t} else {\n\t\t// Two or more values\n\t\tconst first = parts[0];\n\t\tconst second = parts[1];\n\n\t\t// Check if first is a y-axis keyword (top/bottom)\n\t\tif (first === 'top' || first === 'bottom') {\n\t\t\tyValue = keywordToPercent(first, 'y');\n\t\t\tif (\n\t\t\t\tsecond === 'left' ||\n\t\t\t\tsecond === 'right' ||\n\t\t\t\tsecond === 'center'\n\t\t\t) {\n\t\t\t\txValue = keywordToPercent(second, 'x');\n\t\t\t} else {\n\t\t\t\t// Second is a length/percentage, default x to center\n\t\t\t\txValue = '50%';\n\t\t\t\tyValue =\n\t\t\t\t\tfirst === 'top' || first === 'bottom'\n\t\t\t\t\t\t? keywordToPercent(first, 'y')\n\t\t\t\t\t\t: second;\n\t\t\t}\n\t\t} else {\n\t\t\t// Normal order: x then y\n\t\t\txValue = keywordToPercent(first, 'x');\n\t\t\tyValue = keywordToPercent(second, 'y');\n\t\t}\n\t}\n\n\t// Convert to absolute pixels\n\tconst parseValue = (value: string, containerSize: number): number => {\n\t\ttry {\n\t\t\tif (value.endsWith('%')) {\n\t\t\t\treturn (containerSize * parseFloat(value)) / 100;\n\t\t\t}\n\t\t\tconst parsed = new CssDimension(value);\n\t\t\tif (parsed.type === 'length' || parsed.type === 'number') {\n\t\t\t\treturn parsed.value;\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (e) {\n\t\t\treturn 0;\n\t\t}\n\t};\n\n\treturn [\n\t\tparseValue(xValue, containerWidth),\n\t\tparseValue(yValue, containerHeight)\n\t];\n}\n\nexport default async function rect(\n\t{\n\t\tid,\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight,\n\t\tisInheritingTransform,\n\t\tsrc,\n\t\tdebug\n\t}: {\n\t\tid: string;\n\t\tleft: number;\n\t\ttop: number;\n\t\twidth: number;\n\t\theight: number;\n\t\tisInheritingTransform: boolean;\n\t\tsrc?: string;\n\t\tdebug?: boolean;\n\t},\n\tstyle: Record<string, number | string>,\n\tinheritableStyle: Record<string, number | string>\n) {\n\tif (style.display === 'none') return '';\n\n\tconst isImage = !!src;\n\n\tlet type: 'rect' | 'path' = 'rect';\n\tlet matrix = '';\n\tlet defs = '';\n\tlet fills: string[] = [];\n\tlet opacity = 1;\n\tlet extra = '';\n\n\tif (style.backgroundColor) {\n\t\tfills.push(style.backgroundColor as string);\n\t}\n\n\tif (style.opacity !== undefined) {\n\t\topacity = +style.opacity;\n\t}\n\n\tif (style.transform) {\n\t\tmatrix = transform(\n\t\t\t{\n\t\t\t\tleft,\n\t\t\t\ttop,\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t},\n\t\t\tstyle.transform as unknown as number[],\n\t\t\tisInheritingTransform,\n\t\t\tstyle.transformOrigin as ParsedTransformOrigin | undefined\n\t\t);\n\t}\n\n\tlet backgroundShapes = '';\n\tif (style.backgroundImage) {\n\t\tconst backgrounds: string[][] = [];\n\n\t\tfor (\n\t\t\tlet index = 0;\n\t\t\tindex < (style.backgroundImage as any).length;\n\t\t\tindex++\n\t\t) {\n\t\t\tconst background = (style.backgroundImage as any)[index];\n\t\t\tconst image = await backgroundImage(\n\t\t\t\t{ id: id + '_' + index, width, height, left, top },\n\t\t\t\tbackground,\n\t\t\t\tinheritableStyle\n\t\t\t);\n\t\t\tif (image) {\n\t\t\t\t// Background images that come first in the array are rendered last.\n\t\t\t\tbackgrounds.unshift(image);\n\t\t\t}\n\t\t}\n\n\t\tfor (const background of backgrounds) {\n\t\t\tfills.push(`url(#${background[0]})`);\n\t\t\tdefs += background[1];\n\t\t\tif (background[2]) {\n\t\t\t\tbackgroundShapes += background[2];\n\t\t\t}\n\t\t}\n\t}\n\n\tconst [miId, mi] = await buildMaskImage(\n\t\t{ id, left, top, width, height },\n\t\tstyle,\n\t\tinheritableStyle\n\t);\n\n\tdefs += mi;\n\tconst maskId = miId\n\t\t? `url(#${miId})`\n\t\t: style._inheritedMaskId\n\t\t? `url(#${style._inheritedMaskId})`\n\t\t: undefined;\n\n\tconst path = radius(\n\t\t{ left, top, width, height },\n\t\tstyle as Record<string, number>\n\t);\n\tif (path) {\n\t\ttype = 'path';\n\t}\n\n\tconst clipPathId = style._inheritedClipPathId as number | undefined;\n\n\tif (debug) {\n\t\textra = buildXMLString('rect', {\n\t\t\tx: left,\n\t\t\ty: top,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tfill: 'transparent',\n\t\t\tstroke: '#ff5757',\n\t\t\t'stroke-width': 1,\n\t\t\ttransform: matrix || undefined,\n\t\t\t'clip-path': clipPathId ? `url(#${clipPathId})` : undefined\n\t\t});\n\t}\n\n\tconst { backgroundClip, filter: cssFilter, mixBlendMode } = style;\n\n\tconst inlineStyle =\n\t\t[\n\t\t\tcssFilter ? `filter:${cssFilter}` : undefined,\n\t\t\tmixBlendMode ? `mix-blend-mode:${mixBlendMode}` : undefined\n\t\t]\n\t\t\t.filter(v => v)\n\t\t\t.join(';') || undefined;\n\n\tconst currentClipPath =\n\t\tbackgroundClip === 'text'\n\t\t\t? `url(#satori_bct-${id})`\n\t\t\t: clipPathId\n\t\t\t? `url(#${clipPathId})`\n\t\t\t: style.clipPath\n\t\t\t? genClipPath(id)\n\t\t\t: undefined;\n\n\tconst clip = overflow(\n\t\t{ left, top, width, height, path, id, matrix, currentClipPath, src },\n\t\tstyle as Record<string, number>,\n\t\tinheritableStyle\n\t);\n\n\t// Each background generates a new rectangle.\n\t// @TODO: Not sure if this is the best way to do it, maybe <pattern> with\n\t// multiple <image>s is better.\n\tlet shape = fills\n\t\t.map(fill =>\n\t\t\tbuildXMLString(type, {\n\t\t\t\tx: left,\n\t\t\t\ty: top,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tfill,\n\t\t\t\td: path ? path : undefined,\n\t\t\t\ttransform: matrix ? matrix : undefined,\n\t\t\t\t'clip-path': style.transform ? undefined : currentClipPath,\n\t\t\t\tstyle: inlineStyle,\n\t\t\t\tmask: style.transform ? undefined : maskId\n\t\t\t})\n\t\t)\n\t\t.join('');\n\n\tconst borderClip = getBorderClipPath(\n\t\t{\n\t\t\tid,\n\t\t\tleft,\n\t\t\ttop,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tcurrentClipPathId: clipPathId,\n\t\t\tborderPath: path,\n\t\t\tborderType: type\n\t\t},\n\t\tstyle\n\t);\n\n\t// border radius for images with transform property\n\tlet imageBorderRadius = undefined;\n\n\t// If it's an image (<img>) tag, we add an extra layer of the image itself.\n\tif (isImage) {\n\t\t// We need to subtract the border and padding sizes from the image size.\n\t\tconst offsetLeft =\n\t\t\t((style.borderLeftWidth as number) || 0) +\n\t\t\t((style.paddingLeft as number) || 0);\n\t\tconst offsetTop =\n\t\t\t((style.borderTopWidth as number) || 0) +\n\t\t\t((style.paddingTop as number) || 0);\n\t\tconst offsetRight =\n\t\t\t((style.borderRightWidth as number) || 0) +\n\t\t\t((style.paddingRight as number) || 0);\n\t\tconst offsetBottom =\n\t\t\t((style.borderBottomWidth as number) || 0) +\n\t\t\t((style.paddingBottom as number) || 0);\n\n\t\tconst containerInnerWidth = width - offsetLeft - offsetRight;\n\t\tconst containerInnerHeight = height - offsetTop - offsetBottom;\n\n\t\t// Parse object-position\n\t\tconst position = (style.objectPosition || 'center').toString();\n\t\tconst [objPosX, objPosY] = parseObjectPosition(\n\t\t\tposition,\n\t\t\tcontainerInnerWidth,\n\t\t\tcontainerInnerHeight\n\t\t);\n\n\t\t// Get natural image dimensions if available\n\t\tconst naturalWidth =\n\t\t\t(style.__naturalWidth as number) || containerInnerWidth;\n\t\tconst naturalHeight =\n\t\t\t(style.__naturalHeight as number) || containerInnerHeight;\n\n\t\t// Calculate objectFit behavior\n\t\tlet preserveAspectRatio: string;\n\t\tlet imageWidth = containerInnerWidth;\n\t\tlet imageHeight = containerInnerHeight;\n\t\tlet imageX = left + offsetLeft;\n\t\tlet imageY = top + offsetTop;\n\n\t\tif (style.objectFit === 'contain') {\n\t\t\t// Scale to fit within container while preserving aspect ratio\n\t\t\tconst scaleX = containerInnerWidth / naturalWidth;\n\t\t\tconst scaleY = containerInnerHeight / naturalHeight;\n\t\t\tconst scale = Math.min(scaleX, scaleY);\n\n\t\t\timageWidth = naturalWidth * scale;\n\t\t\timageHeight = naturalHeight * scale;\n\n\t\t\t// Apply object-position to center the image within the container\n\t\t\timageX =\n\t\t\t\tleft +\n\t\t\t\toffsetLeft +\n\t\t\t\tobjPosX -\n\t\t\t\t(imageWidth * objPosX) / containerInnerWidth;\n\t\t\timageY =\n\t\t\t\ttop +\n\t\t\t\toffsetTop +\n\t\t\t\tobjPosY -\n\t\t\t\t(imageHeight * objPosY) / containerInnerHeight;\n\n\t\t\tpreserveAspectRatio = 'none';\n\t\t} else if (style.objectFit === 'cover') {\n\t\t\t// Scale to cover the container while preserving aspect ratio\n\t\t\tconst scaleX = containerInnerWidth / naturalWidth;\n\t\t\tconst scaleY = containerInnerHeight / naturalHeight;\n\t\t\tconst scale = Math.max(scaleX, scaleY);\n\n\t\t\timageWidth = naturalWidth * scale;\n\t\t\timageHeight = naturalHeight * scale;\n\n\t\t\t// Apply object-position\n\t\t\timageX =\n\t\t\t\tleft +\n\t\t\t\toffsetLeft +\n\t\t\t\tobjPosX -\n\t\t\t\t(imageWidth * objPosX) / containerInnerWidth;\n\t\t\timageY =\n\t\t\t\ttop +\n\t\t\t\toffsetTop +\n\t\t\t\tobjPosY -\n\t\t\t\t(imageHeight * objPosY) / containerInnerHeight;\n\n\t\t\tpreserveAspectRatio = 'none';\n\t\t} else if (style.objectFit === 'fill') {\n\t\t\t// Stretch to fill (ignore aspect ratio)\n\t\t\tpreserveAspectRatio = 'none';\n\t\t} else if (style.objectFit === 'scale-down') {\n\t\t\tif (naturalWidth && naturalHeight) {\n\t\t\t\t// Calculate if we need to scale down\n\t\t\t\tconst scaleX = containerInnerWidth / naturalWidth;\n\t\t\t\tconst scaleY = containerInnerHeight / naturalHeight;\n\t\t\t\tconst minScale = Math.min(scaleX, scaleY);\n\n\t\t\t\tif (minScale >= 1) {\n\t\t\t\t\t// Image is smaller than or equal to container\n\t\t\t\t\t// Use natural size (don't scale up)\n\t\t\t\t\timageWidth = naturalWidth;\n\t\t\t\t\timageHeight = naturalHeight;\n\t\t\t\t\tpreserveAspectRatio = 'none';\n\n\t\t\t\t\t// Apply object-position to position the un-scaled image\n\t\t\t\t\timageX =\n\t\t\t\t\t\tleft +\n\t\t\t\t\t\toffsetLeft +\n\t\t\t\t\t\tobjPosX -\n\t\t\t\t\t\t(imageWidth * objPosX) / containerInnerWidth;\n\t\t\t\t\timageY =\n\t\t\t\t\t\ttop +\n\t\t\t\t\t\toffsetTop +\n\t\t\t\t\t\tobjPosY -\n\t\t\t\t\t\t(imageHeight * objPosY) / containerInnerHeight;\n\t\t\t\t} else {\n\t\t\t\t\t// Image is larger than container, scale down like 'contain'\n\t\t\t\t\tconst scale = minScale;\n\t\t\t\t\timageWidth = naturalWidth * scale;\n\t\t\t\t\timageHeight = naturalHeight * scale;\n\n\t\t\t\t\t// Apply object-position\n\t\t\t\t\timageX =\n\t\t\t\t\t\tleft +\n\t\t\t\t\t\toffsetLeft +\n\t\t\t\t\t\tobjPosX -\n\t\t\t\t\t\t(imageWidth * objPosX) / containerInnerWidth;\n\t\t\t\t\timageY =\n\t\t\t\t\t\ttop +\n\t\t\t\t\t\toffsetTop +\n\t\t\t\t\t\tobjPosY -\n\t\t\t\t\t\t(imageHeight * objPosY) / containerInnerHeight;\n\n\t\t\t\t\tpreserveAspectRatio = 'none';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Fall back to 'contain' behavior if natural dimensions are unavailable\n\t\t\t\tconst scaleX = containerInnerWidth / naturalWidth;\n\t\t\t\tconst scaleY = containerInnerHeight / naturalHeight;\n\t\t\t\tconst scale = Math.min(scaleX, scaleY);\n\n\t\t\t\timageWidth = naturalWidth * scale;\n\t\t\t\timageHeight = naturalHeight * scale;\n\n\t\t\t\timageX =\n\t\t\t\t\tleft +\n\t\t\t\t\toffsetLeft +\n\t\t\t\t\tobjPosX -\n\t\t\t\t\t(imageWidth * objPosX) / containerInnerWidth;\n\t\t\t\timageY =\n\t\t\t\t\ttop +\n\t\t\t\t\toffsetTop +\n\t\t\t\t\tobjPosY -\n\t\t\t\t\t(imageHeight * objPosY) / containerInnerHeight;\n\n\t\t\t\tpreserveAspectRatio = 'none';\n\t\t\t}\n\t\t} else {\n\t\t\t// Default/none: fill (stretch)\n\t\t\tpreserveAspectRatio = 'none';\n\t\t}\n\n\t\tif (style.transform) {\n\t\t\timageBorderRadius = getBorderRadiusClipPath(\n\t\t\t\t{\n\t\t\t\t\tid,\n\t\t\t\t\tborderRadiusPath: path,\n\t\t\t\t\tborderType: type,\n\t\t\t\t\tleft,\n\t\t\t\t\ttop,\n\t\t\t\t\twidth,\n\t\t\t\t\theight\n\t\t\t\t},\n\t\t\t\tstyle\n\t\t\t);\n\t\t}\n\n\t\tshape += buildXMLString('image', {\n\t\t\tx: imageX,\n\t\t\ty: imageY,\n\t\t\twidth: imageWidth,\n\t\t\theight: imageHeight,\n\t\t\thref: src,\n\t\t\tpreserveAspectRatio,\n\t\t\ttransform: matrix ? matrix : undefined,\n\t\t\tstyle: inlineStyle,\n\t\t\t'clip-path': style.transform\n\t\t\t\t? imageBorderRadius\n\t\t\t\t\t? `url(#${imageBorderRadius[1]})`\n\t\t\t\t\t: undefined\n\t\t\t\t: `url(#satori_cp-${id})`,\n\t\t\tmask: style.transform\n\t\t\t\t? undefined\n\t\t\t\t: miId\n\t\t\t\t? `url(#${miId})`\n\t\t\t\t: `url(#satori_om-${id})`\n\t\t});\n\t}\n\n\tif (borderClip) {\n\t\tdefs += borderClip[0];\n\t\tconst rectClipId = borderClip[1];\n\n\t\tshape += border(\n\t\t\t{\n\t\t\t\tleft,\n\t\t\t\ttop,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tprops: {\n\t\t\t\t\ttransform: matrix ? matrix : undefined,\n\t\t\t\t\t// When using `background-clip: text`, we need to draw the extra border because\n\t\t\t\t\t// it shouldn't be clipped by the clip path, so we are not using currentClipPath here.\n\t\t\t\t\t'clip-path': `url(#${rectClipId})`\n\t\t\t\t}\n\t\t\t},\n\t\t\tstyle\n\t\t);\n\t}\n\n\t// box-shadow.\n\tconst shadow = boxShadow(\n\t\t{\n\t\t\twidth,\n\t\t\theight,\n\t\t\tid,\n\t\t\topacity,\n\t\t\tshape: buildXMLString(type, {\n\t\t\t\tx: left,\n\t\t\t\ty: top,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tfill: '#fff',\n\t\t\t\tstroke: '#fff',\n\t\t\t\t'stroke-width': 0,\n\t\t\t\td: path ? path : undefined,\n\t\t\t\ttransform: matrix ? matrix : undefined,\n\t\t\t\t'clip-path': currentClipPath,\n\t\t\t\tmask: maskId\n\t\t\t})\n\t\t},\n\t\tstyle\n\t);\n\n\treturn (\n\t\t(defs ? buildXMLString('defs', {}, defs) : '') +\n\t\t(shadow ? shadow[0] : '') +\n\t\t(imageBorderRadius ? imageBorderRadius[0] : '') +\n\t\tclip +\n\t\t(opacity !== 1 ? `<g opacity=\"${opacity}\">` : '') +\n\t\t(style.transform && (currentClipPath || maskId)\n\t\t\t? `<g${currentClipPath ? ` clip-path=\"${currentClipPath}\"` : ''}${\n\t\t\t\t\tmaskId ? ` mask=\"${maskId}\"` : ''\n\t\t\t }>`\n\t\t\t: '') +\n\t\t(backgroundShapes || shape) +\n\t\t(style.transform && (currentClipPath || maskId) ? '</g>' : '') +\n\t\t(opacity !== 1 ? `</g>` : '') +\n\t\t(shadow ? shadow[1] : '') +\n\t\textra\n\t);\n}\n","import { buildXMLString } from '../utils.js';\nimport radius from './border-radius.js';\n\ntype BuildBackdropFilterOptions = {\n\tbgGroupId: string;\n\tfilterValue: string;\n\theight: number;\n\tid: string;\n\tleft: number;\n\tmaskId?: string;\n\tstyle: Record<string, any>;\n\ttop: number;\n\twidth: number;\n};\n\nconst parseFilterValue = (value: string): string => {\n\tlet primitives = '';\n\tlet lastResult = 'SourceGraphic';\n\tlet hasBlur = false;\n\n\t// blur(Npx)\n\tconst blurMatch = value.match(/blur\\(([\\d.]+)(?:px)?\\)/);\n\tif (blurMatch) {\n\t\thasBlur = true;\n\t\tconst sigma = parseFloat(blurMatch[1]);\n\t\tconst pad = Math.ceil(sigma * 3);\n\n\t\t// Extend content beyond source bounds using 4 diagonal offset copies.\n\t\t// Without this, feGaussianBlur samples transparent pixels at the edges,\n\t\t// creating a semi-transparent fade. The copies provide real pixel data\n\t\t// in all directions (edges + corners) so the blur is consistent.\n\t\tprimitives += buildXMLString('feOffset', {\n\t\t\tdx: -pad,\n\t\t\tdy: -pad,\n\t\t\tin: 'SourceGraphic',\n\t\t\tresult: 'satori_bfTL'\n\t\t});\n\t\tprimitives += buildXMLString('feOffset', {\n\t\t\tdx: pad,\n\t\t\tdy: -pad,\n\t\t\tin: 'SourceGraphic',\n\t\t\tresult: 'satori_bfTR'\n\t\t});\n\t\tprimitives += buildXMLString('feOffset', {\n\t\t\tdx: -pad,\n\t\t\tdy: pad,\n\t\t\tin: 'SourceGraphic',\n\t\t\tresult: 'satori_bfBL'\n\t\t});\n\t\tprimitives += buildXMLString('feOffset', {\n\t\t\tdx: pad,\n\t\t\tdy: pad,\n\t\t\tin: 'SourceGraphic',\n\t\t\tresult: 'satori_bfBR'\n\t\t});\n\t\tprimitives += buildXMLString(\n\t\t\t'feMerge',\n\t\t\t{ result: 'satori_bfext' },\n\t\t\tbuildXMLString('feMergeNode', { in: 'satori_bfTL' }) +\n\t\t\t\tbuildXMLString('feMergeNode', { in: 'satori_bfTR' }) +\n\t\t\t\tbuildXMLString('feMergeNode', { in: 'satori_bfBL' }) +\n\t\t\t\tbuildXMLString('feMergeNode', { in: 'satori_bfBR' }) +\n\t\t\t\tbuildXMLString('feMergeNode', { in: 'SourceGraphic' })\n\t\t);\n\t\tlastResult = 'satori_bfext';\n\n\t\tconst result = 'satori_bfblur';\n\t\tprimitives += buildXMLString('feGaussianBlur', {\n\t\t\tedgeMode: 'duplicate',\n\t\t\tin: lastResult,\n\t\t\tresult,\n\t\t\tstdDeviation: sigma\n\t\t});\n\t\tlastResult = result;\n\t}\n\n\t// saturate(N) or saturate(N%)\n\tconst saturateMatch = value.match(/saturate\\(([\\d.]+)(%?)\\)/);\n\tif (saturateMatch) {\n\t\tconst val =\n\t\t\tsaturateMatch[2] === '%'\n\t\t\t\t? parseFloat(saturateMatch[1]) / 100\n\t\t\t\t: parseFloat(saturateMatch[1]);\n\t\tconst result = 'satori_bfsat';\n\t\tprimitives += buildXMLString('feColorMatrix', {\n\t\t\tin: lastResult,\n\t\t\tresult,\n\t\t\ttype: 'saturate',\n\t\t\tvalues: val\n\t\t});\n\t\tlastResult = result;\n\t}\n\n\t// brightness(N)\n\tconst brightnessMatch = value.match(/brightness\\(([\\d.]+)\\)/);\n\tif (brightnessMatch) {\n\t\tconst val = parseFloat(brightnessMatch[1]);\n\t\tconst result = 'satori_bfbri';\n\t\tprimitives += buildXMLString(\n\t\t\t'feComponentTransfer',\n\t\t\t{ in: lastResult, result },\n\t\t\tbuildXMLString('feFuncR', { slope: val, type: 'linear' }) +\n\t\t\t\tbuildXMLString('feFuncG', { slope: val, type: 'linear' }) +\n\t\t\t\tbuildXMLString('feFuncB', { slope: val, type: 'linear' })\n\t\t);\n\t\tlastResult = result;\n\t}\n\n\t// contrast(N)\n\tconst contrastMatch = value.match(/contrast\\(([\\d.]+)\\)/);\n\tif (contrastMatch) {\n\t\tconst val = parseFloat(contrastMatch[1]);\n\t\tconst intercept = -(0.5 * val) + 0.5;\n\t\tconst result = 'satori_bfcon';\n\t\tprimitives += buildXMLString(\n\t\t\t'feComponentTransfer',\n\t\t\t{ in: lastResult, result },\n\t\t\tbuildXMLString('feFuncR', {\n\t\t\t\tintercept,\n\t\t\t\tslope: val,\n\t\t\t\ttype: 'linear'\n\t\t\t}) +\n\t\t\t\tbuildXMLString('feFuncG', {\n\t\t\t\t\tintercept,\n\t\t\t\t\tslope: val,\n\t\t\t\t\ttype: 'linear'\n\t\t\t\t}) +\n\t\t\t\tbuildXMLString('feFuncB', {\n\t\t\t\t\tintercept,\n\t\t\t\t\tslope: val,\n\t\t\t\t\ttype: 'linear'\n\t\t\t\t})\n\t\t);\n\t\tlastResult = result;\n\t}\n\n\t// grayscale(N) or grayscale(N%)\n\tconst grayscaleMatch = value.match(/grayscale\\(([\\d.]+)(%?)\\)/);\n\tif (grayscaleMatch) {\n\t\tconst val =\n\t\t\tgrayscaleMatch[2] === '%'\n\t\t\t\t? parseFloat(grayscaleMatch[1]) / 100\n\t\t\t\t: parseFloat(grayscaleMatch[1]);\n\t\tconst result = 'satori_bfgray';\n\t\tprimitives += buildXMLString('feColorMatrix', {\n\t\t\tin: lastResult,\n\t\t\tresult,\n\t\t\ttype: 'saturate',\n\t\t\tvalues: 1 - Math.min(val, 1)\n\t\t});\n\t\tlastResult = result;\n\t}\n\n\t// Fix blur edge transparency: composite with source to force opaque output\n\t// where the original was opaque. Without this, feGaussianBlur fades to\n\t// transparent at content boundaries (edgeMode=\"duplicate\" is not widely\n\t// supported by SVG renderers like resvg).\n\tif (hasBlur) {\n\t\tprimitives += buildXMLString('feComposite', {\n\t\t\tin: lastResult,\n\t\t\tin2: 'SourceGraphic',\n\t\t\toperator: 'atop'\n\t\t});\n\t}\n\n\treturn primitives;\n};\n\nexport const buildBackdropFilter = (\n\toptions: BuildBackdropFilterOptions\n): string => {\n\tconst {\n\t\tbgGroupId,\n\t\tfilterValue,\n\t\theight,\n\t\tid,\n\t\tleft,\n\t\tmaskId,\n\t\tstyle,\n\t\ttop,\n\t\twidth\n\t} = options;\n\n\tconst primitives = parseFilterValue(filterValue);\n\tif (!primitives) {\n\t\treturn '';\n\t}\n\n\tconst filterId = `satori_bf-${id}`;\n\tconst clipId = `satori_bfc-${id}`;\n\n\t// Filter definition with generous region for blur overflow.\n\tconst filterDef = buildXMLString(\n\t\t'filter',\n\t\t{\n\t\t\theight: '200%',\n\t\t\tid: filterId,\n\t\t\twidth: '200%',\n\t\t\tx: '-50%',\n\t\t\ty: '-50%'\n\t\t},\n\t\tprimitives\n\t);\n\n\t// Clip path — use border-radius path when available, else a rect.\n\tconst borderRadiusPath = radius({ height, left, top, width }, style);\n\tconst clipContent = borderRadiusPath\n\t\t? buildXMLString('path', { d: borderRadiusPath })\n\t\t: buildXMLString('rect', { height, width, x: left, y: top });\n\tconst clipDef = buildXMLString('clipPath', { id: clipId }, clipContent);\n\n\tconst defs = buildXMLString('defs', {}, filterDef + clipDef);\n\n\t// Build the <use> inside a clip group. The filter is on the <use> so the\n\t// blur operates on the FULL content, then the outer <g> clips the result.\n\tconst useElement = buildXMLString('use', {\n\t\tfilter: `url(#${filterId})`,\n\t\thref: `#${bgGroupId}`\n\t});\n\n\t// Outer <g> clips the blurred result; mask is also on the outer group.\n\tconst gAttrs: Record<string, string> = {\n\t\t'clip-path': `url(#${clipId})`\n\t};\n\n\tif (maskId) {\n\t\tgAttrs.mask = `url(#${maskId})`;\n\t}\n\n\treturn defs + buildXMLString('g', gAttrs, useElement);\n};\n","const r = String.raw,\n e = r`\\p{Emoji}(?:\\p{EMod}|[\\u{E0020}-\\u{E007E}]+\\u{E007F}|\\uFE0F?\\u20E3?)`;\nexport default () => new RegExp(r`\\p{RI}{2}|(?![#*\\d](?!\\uFE0F?\\u20E3))${e}(?:\\u200D${e})*`, 'gu');\n","// This function guesses the human language (writing system) of the given\n// JavaScript string, using the Unicode Alias in extended RegExp.\n//\n// You can learn more about this in:\n// - https://en.wikipedia.org/wiki/Script_(Unicode)\n// - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Unicode_Property_Escapes\n// - https://unicode.org/reports/tr18/#General_Category_Property\n// - https://tc39.es/ecma262/multipage/text-processing.html#table-unicode-script-values\n\nimport createEmojiRegex from 'emoji-regex-xs';\n\nconst emojiRegex = new RegExp(createEmojiRegex(), 'u');\n\n// Supported languages. The order matters.\n// Usually, this is only for \"special cases\" like CJKV languages as latin\n// characters are usually included in the base font, and can be safely fallback\n// to the Noto Sans font. A list of special cases we want to support can be\n// found here (sort by popularity):\n// - https://fonts.google.com/noto/fonts?sort=popularity&noto.query=sans\n//\n// We can't tell if a hanzi(kanji) is Chinese or Japanese by regular expressions.\n// - https://unicode.org/faq/han_cjk.html\n\nconst specialCode = {\n\temoji: emojiRegex,\n\tsymbol: /\\p{Symbol}/u,\n\tmath: /\\p{Math}/u\n} as const;\n\nconst code = {\n\t'ja-JP': /\\p{scx=Hira}|\\p{scx=Kana}|\\p{scx=Han}|[\\u3000]|[\\uFF00-\\uFFEF]/u,\n\t'ko-KR': /\\p{scx=Hangul}/u,\n\t'zh-CN': /\\p{scx=Han}/u,\n\t'zh-TW': /\\p{scx=Han}/u,\n\t'zh-HK': /\\p{scx=Han}/u,\n\t'th-TH': /\\p{scx=Thai}/u,\n\t'bn-IN': /\\p{scx=Bengali}/u,\n\t'ar-AR': /\\p{scx=Arabic}/u,\n\t'ta-IN': /\\p{scx=Tamil}/u,\n\t'ml-IN': /\\p{scx=Malayalam}/u,\n\t'he-IL': /\\p{scx=Hebrew}/u,\n\t'te-IN': /\\p{scx=Telugu}/u,\n\tdevanagari: /\\p{scx=Devanagari}/u,\n\tkannada: /\\p{scx=Kannada}/u\n} as const;\n\ntype SpecialCodeKey = keyof typeof specialCode;\ntype CodeKey = keyof typeof specialCode | keyof typeof code;\nexport type Locale = keyof typeof code;\nexport type LangCode = CodeKey | 'unknown';\n\nexport const locales = Object.keys({ ...code, ...specialCode }) as Locale[];\nexport function isValidLocale(x: any): x is Locale {\n\treturn locales.includes(x);\n}\n\nexport function detectLanguageCode(\n\tsegment: string,\n\tlocale?: Locale\n): Array<Locale> | ['unknown'] | [SpecialCodeKey] {\n\tfor (const c of Object.keys(specialCode) as SpecialCodeKey[]) {\n\t\tif (specialCode[c].test(segment)) {\n\t\t\treturn [c];\n\t\t}\n\t}\n\n\tconst languages = Object.keys(code).filter(lang =>\n\t\tcode[lang].test(segment)\n\t) as Locale[];\n\n\tif (languages.length === 0) {\n\t\treturn ['unknown'];\n\t}\n\n\tif (locale) {\n\t\tconst index = languages.findIndex(lang => lang === locale);\n\t\tif (index !== -1) {\n\t\t\tlanguages.splice(index, 1);\n\t\t\tlanguages.unshift(locale);\n\t\t}\n\t}\n\n\treturn languages;\n}\n\nexport function normalizeLocale(locale?: string): Locale | undefined {\n\tif (locale) {\n\t\treturn locales.find(l =>\n\t\t\tl.toLowerCase().startsWith(locale.toLowerCase())\n\t\t);\n\t}\n}\n","/**\n * This module is used to calculate the layout of the current sub-tree.\n */\n\nimport type { ReactNode } from 'react';\nimport {\n\tisReactElement,\n\tisClass,\n\tbuildXMLString,\n\tnormalizeChildren,\n\thasDangerouslySetInnerHTMLProp,\n\tisReactComponent,\n\tisForwardRefComponent\n} from './utils.js';\nimport { getYoga, YogaNode } from './yoga.js';\nimport { SVGNodeToImage } from './handler/preprocess.js';\nimport computeStyle from './handler/compute.js';\nimport FontLoader from './font.js';\nimport buildTextNodes from './text/index.js';\nimport rect from './builder/rect.js';\nimport { buildBackdropFilter } from './builder/backdrop-filter.js';\nimport { Locale, normalizeLocale } from './language.js';\nimport { SerializedStyle } from './handler/expand.js';\n\nexport type BackdropFilterInfo = {\n\tfilter: string;\n\tinheritedStyle: SerializedStyle;\n\tnode: YogaNode;\n\tstyle: SerializedStyle;\n};\n\nexport interface LayoutContext {\n\tid: string;\n\tparentStyle: SerializedStyle;\n\tinheritedStyle: SerializedStyle;\n\tisInheritingTransform?: boolean;\n\tparent: YogaNode;\n\tfont: FontLoader;\n\tembedFont: boolean;\n\tdebug?: boolean;\n\tgraphemeImages?: Record<string, string>;\n\tcanLoadAdditionalAssets: boolean;\n\tlocale?: Locale;\n\tonBackdropFilterDetected?: (info: BackdropFilterInfo) => void;\n\tonNodeDetected?: (node: SatoriNode) => void;\n}\n\nexport interface SatoriNode {\n\t// Layout information.\n\tleft: number;\n\ttop: number;\n\twidth: number;\n\theight: number;\n\ttype: string;\n\tkey?: string | number;\n\tprops: Record<string, any>;\n\ttextContent?: string;\n}\n\nexport default async function* layout(\n\telement: ReactNode,\n\tcontext: LayoutContext\n): AsyncGenerator<\n\t{ word: string; locale?: string }[],\n\tstring,\n\t[number, number]\n> {\n\tconst Yoga = await getYoga();\n\tconst {\n\t\tid,\n\t\tinheritedStyle,\n\t\tparent,\n\t\tfont,\n\t\tdebug,\n\t\tlocale,\n\t\tembedFont = true,\n\t\tgraphemeImages,\n\t\tcanLoadAdditionalAssets\n\t} = context;\n\n\t// 1. Pre-process the node.\n\tif (element === null || typeof element === 'undefined') {\n\t\tyield;\n\t\tyield;\n\t\treturn '';\n\t}\n\n\t// Not a regular element.\n\tif (!isReactElement(element) || isReactComponent(element.type)) {\n\t\tlet iter: ReturnType<typeof layout>;\n\n\t\tif (!isReactElement(element)) {\n\t\t\t// Process as text node.\n\t\t\titer = buildTextNodes(String(element), context);\n\t\t\tyield (await iter.next()).value as {\n\t\t\t\tword: string;\n\t\t\t\tlocale?: Locale;\n\t\t\t}[];\n\t\t} else {\n\t\t\tif (isClass(element.type as Function)) {\n\t\t\t\tthrow new Error('Class component is not supported.');\n\t\t\t}\n\n\t\t\tlet render: Function;\n\n\t\t\t// This is a hack to support React.forwardRef wrapped components.\n\t\t\t// https://github.com/vercel/satori/issues/600\n\t\t\tif (isForwardRefComponent(element.type)) {\n\t\t\t\trender = (element.type as any).render;\n\t\t\t} else {\n\t\t\t\trender = element.type as Function;\n\t\t\t}\n\n\t\t\t// If it's a custom component, Satori strictly requires it to be pure,\n\t\t\t// stateless, and not relying on any React APIs such as hooks or suspense.\n\t\t\t// So we can safely evaluate it to render. Otherwise, an error will be\n\t\t\t// thrown by React.\n\t\t\titer = layout(await render(element.props), context);\n\t\t\tyield (await iter.next()).value as {\n\t\t\t\tword: string;\n\t\t\t\tlocale?: string;\n\t\t\t}[];\n\t\t}\n\n\t\tawait iter.next();\n\t\tconst offset = yield;\n\t\treturn (await iter.next(offset)).value as string;\n\t}\n\n\t// Process as element.\n\tconst { type: $type, props } = element;\n\t// type must be a string here.\n\tconst type = $type as string;\n\n\tif (props && hasDangerouslySetInnerHTMLProp(props)) {\n\t\tthrow new Error(\n\t\t\t'dangerouslySetInnerHTML property is not supported. See documentation for more information https://github.com/vercel/satori#jsx.'\n\t\t);\n\t}\n\tlet { style, children, lang: _newLocale = locale } = props || {};\n\tconst newLocale = normalizeLocale(_newLocale);\n\n\tconst node = Yoga.Node.create();\n\tparent.insertChild(node, parent.getChildCount());\n\n\tconst [computedStyle, newInheritableStyle] = await computeStyle(\n\t\tnode,\n\t\ttype,\n\t\tinheritedStyle,\n\t\tstyle,\n\t\tprops\n\t);\n\t// Post-process styles to attach inheritable properties for Satori.\n\n\t// If the element is inheriting the parent `transform`, or applying its own.\n\t// This affects the coordinate system.\n\tconst isInheritingTransform =\n\t\tcomputedStyle.transform === inheritedStyle.transform;\n\tif (!isInheritingTransform) {\n\t\t(computedStyle.transform as any).__parent = inheritedStyle.transform;\n\t}\n\n\t// If the element has `overflow` set to `hidden` or clip-path is set, we need to create a clip\n\t// path and use it in all its children.\n\tif (\n\t\tcomputedStyle.overflow === 'hidden' ||\n\t\t(computedStyle.clipPath && computedStyle.clipPath !== 'none')\n\t) {\n\t\tnewInheritableStyle._inheritedClipPathId = `satori_cp-${id}`;\n\t\tnewInheritableStyle._inheritedMaskId = `satori_om-${id}`;\n\t}\n\n\tif (computedStyle.maskImage) {\n\t\tnewInheritableStyle._inheritedMaskId = `satori_mi-${id}`;\n\t}\n\n\t// Register backdrop-filter with parent so it can inject the effect.\n\tif (computedStyle.backdropFilter && context.onBackdropFilterDetected) {\n\t\tcontext.onBackdropFilterDetected({\n\t\t\tfilter: computedStyle.backdropFilter as string,\n\t\t\tinheritedStyle: newInheritableStyle,\n\t\t\tnode,\n\t\t\tstyle: computedStyle\n\t\t});\n\t}\n\n\t// If the element has `background-clip: text` set, we need to create a clip\n\t// path and use it in all its children.\n\tif (computedStyle.backgroundClip === 'text') {\n\t\tconst mutateRefValue = { value: '' } as any;\n\t\tnewInheritableStyle._inheritedBackgroundClipTextPath = mutateRefValue;\n\t\tcomputedStyle._inheritedBackgroundClipTextPath = mutateRefValue;\n\n\t\tif (computedStyle.backgroundImage) {\n\t\t\tnewInheritableStyle._inheritedBackgroundClipTextHasBackground =\n\t\t\t\t'true';\n\t\t\tcomputedStyle._inheritedBackgroundClipTextHasBackground = 'true';\n\t\t}\n\t}\n\n\t// 2. Do layout recursively for its children.\n\tconst normalizedChildren = normalizeChildren(children);\n\tconst iterators: ReturnType<typeof layout>[] = [];\n\tconst backdropInfoByIndex: Record<number, BackdropFilterInfo> = {};\n\n\tlet i = 0;\n\tconst segmentsMissingFont: { word: string; locale?: string }[] = [];\n\tfor (const child of normalizedChildren) {\n\t\tconst currentIndex = i;\n\t\tconst iter = layout(child, {\n\t\t\tid: id + '-' + i++,\n\t\t\tparentStyle: computedStyle,\n\t\t\tinheritedStyle: newInheritableStyle,\n\t\t\tisInheritingTransform: true,\n\t\t\tparent: node,\n\t\t\tfont,\n\t\t\tembedFont,\n\t\t\tdebug,\n\t\t\tgraphemeImages,\n\t\t\tcanLoadAdditionalAssets,\n\t\t\tlocale: newLocale,\n\t\t\tonNodeDetected: context.onNodeDetected,\n\t\t\tonBackdropFilterDetected: (info: BackdropFilterInfo) => {\n\t\t\t\tbackdropInfoByIndex[currentIndex] = info;\n\t\t\t}\n\t\t});\n\t\tif (canLoadAdditionalAssets) {\n\t\t\tsegmentsMissingFont.push(\n\t\t\t\t...(((await iter.next()).value as any) || [])\n\t\t\t);\n\t\t} else {\n\t\t\tawait iter.next();\n\t\t}\n\t\titerators.push(iter);\n\t}\n\tyield segmentsMissingFont;\n\tfor (const iter of iterators) await iter.next();\n\n\t// 3. Post-process the node.\n\tconst [x, y] = yield;\n\tlet { left, top, width, height } = node.getComputedLayout();\n\t// Attach offset to the current node.\n\tleft += x;\n\ttop += y;\n\n\tlet childrenRenderResult = '';\n\tlet baseRenderResult = '';\n\tlet depsRenderResult = '';\n\n\t// Emit event for the current node. We don't pass the children prop to the\n\t// event handler because everything is already flattened, unless it's a text\n\t// node.\n\tconst { children: childrenNode, ...restProps } = props;\n\tcontext.onNodeDetected?.({\n\t\tleft,\n\t\ttop,\n\t\twidth,\n\t\theight,\n\t\ttype,\n\t\tprops: restProps,\n\t\tkey: element.key,\n\t\ttextContent: isReactElement(childrenNode) ? undefined : childrenNode\n\t});\n\n\t// Generate the rendered markup for the current node.\n\tif (type === 'img') {\n\t\tconst src = computedStyle.__src as string;\n\t\tbaseRenderResult = await rect(\n\t\t\t{\n\t\t\t\tid,\n\t\t\t\tleft,\n\t\t\t\ttop,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tsrc,\n\t\t\t\tisInheritingTransform,\n\t\t\t\tdebug\n\t\t\t},\n\t\t\tcomputedStyle,\n\t\t\tnewInheritableStyle\n\t\t);\n\t} else if (type === 'svg') {\n\t\t// When entering a <svg> node, we need to convert it to a <img> with the\n\t\t// SVG data URL embedded.\n\t\tconst currentColor = computedStyle.color;\n\t\tconst src = await SVGNodeToImage(element, currentColor);\n\t\tbaseRenderResult = await rect(\n\t\t\t{\n\t\t\t\tid,\n\t\t\t\tleft,\n\t\t\t\ttop,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tsrc,\n\t\t\t\tisInheritingTransform,\n\t\t\t\tdebug\n\t\t\t},\n\t\t\tcomputedStyle,\n\t\t\tnewInheritableStyle\n\t\t);\n\t} else {\n\t\tconst display = style?.display;\n\t\tif (\n\t\t\ttype === 'div' &&\n\t\t\tchildren &&\n\t\t\ttypeof children !== 'string' &&\n\t\t\tdisplay !== 'flex' &&\n\t\t\tdisplay !== 'none' &&\n\t\t\tdisplay !== 'contents'\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`Expected <div> to have explicit \"display: flex\", \"display: contents\", or \"display: none\" if it has more than one child node.`\n\t\t\t);\n\t\t}\n\t\tbaseRenderResult = await rect(\n\t\t\t{ id, left, top, width, height, isInheritingTransform, debug },\n\t\t\tcomputedStyle,\n\t\t\tnewInheritableStyle\n\t\t);\n\t}\n\n\t// Generate the rendered markup for the children.\n\tfor (let j = 0; j < iterators.length; j++) {\n\t\t// If this child has backdrop-filter, wrap all prior content in a <g> and\n\t\t// insert a <use> with the SVG filter + clip before the child.\n\t\tif (backdropInfoByIndex[j]) {\n\t\t\tconst info = backdropInfoByIndex[j];\n\t\t\tconst childLayout = info.node.getComputedLayout();\n\t\t\tconst childLeft = left + childLayout.left;\n\t\t\tconst childTop = top + childLayout.top;\n\t\t\tconst childWidth = childLayout.width;\n\t\t\tconst childHeight = childLayout.height;\n\n\t\t\tconst bgGroupId = `satori_bfbg-${id}-${j}`;\n\t\t\tconst currentContent = baseRenderResult + childrenRenderResult;\n\t\t\tbaseRenderResult = `<g id=\"${bgGroupId}\">${currentContent}</g>`;\n\t\t\tchildrenRenderResult = '';\n\n\t\t\t// Forward-reference the child's mask (generated by the child later).\n\t\t\tconst childId = id + '-' + j;\n\t\t\tconst maskId = info.style.maskImage\n\t\t\t\t? `satori_mi-${childId}`\n\t\t\t\t: undefined;\n\n\t\t\tchildrenRenderResult += buildBackdropFilter({\n\t\t\t\tbgGroupId,\n\t\t\t\tfilterValue: info.filter,\n\t\t\t\theight: childHeight,\n\t\t\t\tid: childId,\n\t\t\t\tleft: childLeft,\n\t\t\t\tmaskId,\n\t\t\t\tstyle: info.style as Record<string, any>,\n\t\t\t\ttop: childTop,\n\t\t\t\twidth: childWidth\n\t\t\t});\n\t\t}\n\n\t\tchildrenRenderResult += (await iterators[j].next([left, top])).value;\n\t}\n\n\t// An extra pass to generate the special background-clip shape collected from\n\t// children.\n\tif (computedStyle._inheritedBackgroundClipTextPath) {\n\t\tdepsRenderResult += buildXMLString(\n\t\t\t'clipPath',\n\t\t\t{\n\t\t\t\tid: `satori_bct-${id}`,\n\t\t\t\t'clip-path': computedStyle._inheritedClipPathId\n\t\t\t\t\t? `url(#${computedStyle._inheritedClipPathId})`\n\t\t\t\t\t: undefined\n\t\t\t},\n\t\t\t(computedStyle._inheritedBackgroundClipTextPath as any).value\n\t\t);\n\t}\n\n\treturn depsRenderResult + baseRenderResult + childrenRenderResult;\n}\n","/**\n * This class handles everything related to fonts.\n */\nimport opentype from '@shuding/opentype.js';\nimport { Locale, locales, isValidLocale } from './language.js';\n\nexport type Weight = 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900;\nexport type WeightName = 'normal' | 'bold';\nexport type FontWeight = Weight | WeightName;\nexport type FontStyle = 'normal' | 'italic';\nconst SUFFIX_WHEN_LANG_NOT_SET = 'unknown';\n\nexport interface FontOptions {\n\tdata: Buffer | ArrayBuffer;\n\tname: string;\n\tweight?: Weight;\n\tstyle?: FontStyle;\n\tlang?: string;\n}\n\nexport type GlyphBox = {\n\tx1: number;\n\tx2: number;\n\ty1: number;\n\ty2: number;\n};\ntype SkipInkBand = {\n\tunderlineY: number;\n\tstrokeWidth: number;\n};\n\nexport type FontEngine = {\n\thas: (s: string) => boolean;\n\tbaseline: (s?: string, resolvedFont?: any) => number;\n\theight: (s?: string, resolvedFont?: any) => number;\n\tmeasure: (\n\t\ts: string,\n\t\tstyle: {\n\t\t\tfontSize: number;\n\t\t\tletterSpacing: number;\n\t\t}\n\t) => number;\n\tgetSVG: (\n\t\ts: string,\n\t\tstyle: {\n\t\t\tfontSize: number;\n\t\t\ttop: number;\n\t\t\tleft: number;\n\t\t\tletterSpacing: number;\n\t\t},\n\t\tband?: SkipInkBand\n\t) => { path: string; boxes: GlyphBox[] };\n\tfauxBoldStrokeWidth?: number;\n};\n\ntype BandPoint = [number, number];\n\ntype LineSegment = {\n\tfrom: BandPoint;\n\tto: BandPoint;\n};\n\nfunction flattenPath(commands: opentype.Path['commands']): LineSegment[] {\n\tconst segments: LineSegment[] = [];\n\tlet start: BandPoint = [0, 0];\n\tlet current: BandPoint = [0, 0];\n\n\tconst addCurve = (points: BandPoint[], steps: number) => {\n\t\tlet prev = points[0];\n\t\tfor (let i = 1; i <= steps; i++) {\n\t\t\tconst t = i / steps;\n\t\t\tconst next = evaluateBezier(points, t);\n\t\t\tsegments.push({ from: prev, to: next });\n\t\t\tprev = next;\n\t\t}\n\t\tcurrent = points[points.length - 1];\n\t};\n\n\tfor (const cmd of commands) {\n\t\tif (cmd.type === 'M') {\n\t\t\tstart = current = [cmd.x, cmd.y];\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (cmd.type === 'L') {\n\t\t\tconst next: BandPoint = [cmd.x, cmd.y];\n\t\t\tsegments.push({ from: current, to: next });\n\t\t\tcurrent = next;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (cmd.type === 'Q') {\n\t\t\taddCurve([current, [cmd.x1, cmd.y1], [cmd.x, cmd.y]], 12);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (cmd.type === 'C') {\n\t\t\taddCurve(\n\t\t\t\t[current, [cmd.x1, cmd.y1], [cmd.x2, cmd.y2], [cmd.x, cmd.y]],\n\t\t\t\t16\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (cmd.type === 'Z') {\n\t\t\tsegments.push({ from: current, to: start });\n\t\t\tcurrent = start;\n\t\t}\n\t}\n\n\treturn segments;\n}\n\nfunction evaluateBezier(points: BandPoint[], t: number): BandPoint {\n\tlet working = points;\n\n\twhile (working.length > 1) {\n\t\tconst next: BandPoint[] = [];\n\t\tfor (let i = 0; i < working.length - 1; i++) {\n\t\t\tnext.push([\n\t\t\t\tworking[i][0] + (working[i + 1][0] - working[i][0]) * t,\n\t\t\t\tworking[i][1] + (working[i + 1][1] - working[i][1]) * t\n\t\t\t]);\n\t\t}\n\t\tworking = next;\n\t}\n\n\treturn working[0];\n}\n\nfunction computeBandBox(\n\tcommands: opentype.Path['commands'],\n\tband?: SkipInkBand\n): GlyphBox[] {\n\tif (!band) return [];\n\n\tconst strokeWidth = band.strokeWidth;\n\tconst bandMin = band.underlineY - strokeWidth * 0.25;\n\tconst bandMax = band.underlineY + strokeWidth * 2.5;\n\n\tconst segments = flattenPath(commands);\n\tif (!segments.length) return [];\n\n\tconst bandHeight = bandMax - bandMin;\n\tconst ySamples = Math.max(12, Math.ceil(bandHeight / 0.25));\n\tconst yStep = bandHeight / ySamples;\n\tconst yStart = bandMin + yStep / 2;\n\n\tconst columnHits = new Set<number>();\n\n\tfor (let i = 0; i < ySamples; i++) {\n\t\tconst y = yStart + yStep * i;\n\t\tconst intersections: number[] = [];\n\n\t\tfor (const seg of segments) {\n\t\t\tconst [x1, y1] = seg.from;\n\t\t\tconst [x2, y2] = seg.to;\n\n\t\t\tif (y1 === y2) continue;\n\t\t\tconst yMin = Math.min(y1, y2);\n\t\t\tconst yMax = Math.max(y1, y2);\n\t\t\tif (y < yMin || y >= yMax) continue;\n\n\t\t\tconst t = (y - y1) / (y2 - y1);\n\t\t\tconst x = x1 + (x2 - x1) * t;\n\t\t\tintersections.push(x);\n\t\t}\n\n\t\tif (!intersections.length) continue;\n\t\tintersections.sort((a, b) => a - b);\n\n\t\tfor (let j = 0; j < intersections.length - 1; j += 2) {\n\t\t\tconst from = Math.min(intersections[j], intersections[j + 1]);\n\t\t\tconst to = Math.max(intersections[j], intersections[j + 1]);\n\t\t\tconst start = Math.floor(from);\n\t\t\tconst end = Math.ceil(to);\n\t\t\tfor (let col = start; col < end; col++) {\n\t\t\t\tcolumnHits.add(col);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!columnHits.size) return [];\n\n\tconst columns = Array.from(columnHits.values()).sort((a, b) => a - b);\n\tconst inkRanges: [number, number][] = [];\n\n\tlet rangeStart = columns[0];\n\tlet prev = columns[0];\n\tfor (let i = 1; i < columns.length; i++) {\n\t\tconst col = columns[i];\n\t\tif (col > prev + 1) {\n\t\t\tinkRanges.push([rangeStart, prev + 1]);\n\t\t\trangeStart = col;\n\t\t}\n\t\tprev = col;\n\t}\n\tinkRanges.push([rangeStart, prev + 1]);\n\n\tconst boxes: GlyphBox[] = [];\n\tconst bleed = strokeWidth * 0.6;\n\tconst minX = inkRanges[0][0];\n\tconst maxX = inkRanges[inkRanges.length - 1][1];\n\n\tfor (const [x1, x2] of inkRanges) {\n\t\tconst left = Math.min(x1, minX) - bleed;\n\t\tconst right = Math.max(x2, maxX) + bleed;\n\t\tboxes.push({\n\t\t\tx1: left,\n\t\t\tx2: right,\n\t\t\ty1: bandMin,\n\t\t\ty2: bandMax\n\t\t});\n\t}\n\n\treturn boxes;\n}\n\nfunction computeBoundingBox(\n\tcommands: opentype.Path['commands']\n): GlyphBox | null {\n\tconst xs: number[] = [];\n\tconst ys: number[] = [];\n\n\tfor (const cmd of commands) {\n\t\tif ('x' in cmd && typeof cmd.x === 'number') xs.push(cmd.x);\n\t\tif ('y' in cmd && typeof cmd.y === 'number') ys.push(cmd.y);\n\t\tif ('x1' in cmd && typeof cmd.x1 === 'number') xs.push(cmd.x1);\n\t\tif ('y1' in cmd && typeof cmd.y1 === 'number') ys.push(cmd.y1);\n\t\tif ('x2' in cmd && typeof cmd.x2 === 'number') xs.push(cmd.x2);\n\t\tif ('y2' in cmd && typeof cmd.y2 === 'number') ys.push(cmd.y2);\n\t}\n\n\tif (!xs.length || !ys.length) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tx1: Math.min(...xs),\n\t\tx2: Math.max(...xs),\n\t\ty1: Math.min(...ys),\n\t\ty2: Math.max(...ys)\n\t};\n}\n\nfunction compareFont(\n\tweight,\n\tstyle,\n\t[matchedWeight, matchedStyle],\n\t[nextWeight, nextStyle]\n) {\n\tif (matchedWeight !== nextWeight) {\n\t\t// Put the defined weight first.\n\t\tif (!matchedWeight) return 1;\n\t\tif (!nextWeight) return -1;\n\n\t\t// Exact match.\n\t\tif (matchedWeight === weight) return -1;\n\t\tif (nextWeight === weight) return 1;\n\n\t\t// 400 and 500.\n\t\tif (weight === 400 && matchedWeight === 500) return -1;\n\t\tif (weight === 500 && matchedWeight === 400) return -1;\n\t\tif (weight === 400 && nextWeight === 500) return 1;\n\t\tif (weight === 500 && nextWeight === 400) return 1;\n\n\t\t// Less than 400.\n\t\tif (weight < 400) {\n\t\t\tif (matchedWeight < weight && nextWeight < weight)\n\t\t\t\treturn nextWeight - matchedWeight;\n\t\t\tif (matchedWeight < weight) return -1;\n\t\t\tif (nextWeight < weight) return 1;\n\t\t\treturn matchedWeight - nextWeight;\n\t\t}\n\n\t\t// Greater than 500.\n\t\tif (weight < matchedWeight && weight < nextWeight)\n\t\t\treturn matchedWeight - nextWeight;\n\t\tif (weight < matchedWeight) return -1;\n\t\tif (weight < nextWeight) return 1;\n\t\treturn nextWeight - matchedWeight;\n\t}\n\n\tif (matchedStyle !== nextStyle) {\n\t\t// Exact match.\n\t\tif (matchedStyle === style) return -1;\n\t\tif (nextStyle === style) return 1;\n\t}\n\n\treturn -1;\n}\n\nconst cachedParsedFont = new WeakMap<\n\tBuffer | ArrayBuffer,\n\topentype.Font | null | undefined\n>();\n\nexport default class FontLoader {\n\tdefaultFont: opentype.Font;\n\tfonts = new Map<string, [opentype.Font, Weight?, FontStyle?][]>();\n\tconstructor(fontOptions: FontOptions[]) {\n\t\tthis.addFonts(fontOptions);\n\t}\n\n\t// Get font by name and weight.\n\tprivate get({\n\t\tname,\n\t\tweight,\n\t\tstyle\n\t}: {\n\t\tname: string;\n\t\tweight: Weight | WeightName;\n\t\tstyle: FontStyle;\n\t}) {\n\t\tif (!this.fonts.has(name)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (weight === 'normal') weight = 400;\n\t\tif (weight === 'bold') weight = 700;\n\t\tif (typeof weight === 'string')\n\t\t\tweight = Number.parseInt(weight, 10) as Weight;\n\n\t\tconst fonts = [...this.fonts.get(name)];\n\n\t\tlet matchedFont = fonts[0];\n\n\t\t// Fallback to the closest weight and style according to the strategy here:\n\t\t// https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight#fallback_weights\n\t\tfor (let i = 1; i < fonts.length; i++) {\n\t\t\tconst [, weight1, style1] = matchedFont;\n\t\t\tconst [, weight2, style2] = fonts[i];\n\t\t\tif (\n\t\t\t\tcompareFont(\n\t\t\t\t\tweight,\n\t\t\t\t\tstyle,\n\t\t\t\t\t[weight1, style1],\n\t\t\t\t\t[weight2, style2]\n\t\t\t\t) > 0\n\t\t\t) {\n\t\t\t\tmatchedFont = fonts[i];\n\t\t\t}\n\t\t}\n\n\t\treturn { font: matchedFont[0], weight: matchedFont[1] };\n\t}\n\n\tpublic addFonts(fontOptions: FontOptions[]) {\n\t\tfor (const fontOption of fontOptions) {\n\t\t\tconst { name, data, lang } = fontOption;\n\t\t\tif (lang && !isValidLocale(lang)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Invalid value for props \\`lang\\`: \"${lang}\". The value must be one of the following: ${locales.join(\n\t\t\t\t\t\t', '\n\t\t\t\t\t)}.`\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst _lang = lang ?? SUFFIX_WHEN_LANG_NOT_SET;\n\t\t\tlet font;\n\n\t\t\tif (cachedParsedFont.has(data)) {\n\t\t\t\tfont = cachedParsedFont.get(data);\n\t\t\t} else {\n\t\t\t\tfont = opentype.parse(\n\t\t\t\t\t// Buffer to ArrayBuffer.\n\t\t\t\t\t'buffer' in data\n\t\t\t\t\t\t? data.buffer.slice(\n\t\t\t\t\t\t\t\tdata.byteOffset,\n\t\t\t\t\t\t\t\tdata.byteOffset + data.byteLength\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: data,\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t{ lowMemory: true }\n\t\t\t\t);\n\t\t\t\t// Modify the `charToGlyphIndex` method, so we can know which char is\n\t\t\t\t// being mapped to which glyph.\n\t\t\t\tconst originalCharToGlyphIndex = font.charToGlyphIndex;\n\t\t\t\tfont.charToGlyphIndex = char => {\n\t\t\t\t\tconst index = originalCharToGlyphIndex.call(font, char);\n\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t// The current requested char is missing a glyph.\n\t\t\t\t\t\tif ((font as any)._trackBrokenChars) {\n\t\t\t\t\t\t\t(font as any)._trackBrokenChars.push(char);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn index;\n\t\t\t\t};\n\n\t\t\t\tcachedParsedFont.set(data, font);\n\t\t\t}\n\n\t\t\t// We use the first font as the default font fallback.\n\t\t\tif (!this.defaultFont) this.defaultFont = font;\n\n\t\t\tconst _name = `${name.toLowerCase()}_${_lang}`;\n\n\t\t\tif (!this.fonts.has(_name)) {\n\t\t\t\tthis.fonts.set(_name, []);\n\t\t\t}\n\t\t\tthis.fonts\n\t\t\t\t.get(_name)\n\t\t\t\t.push([font, fontOption.weight, fontOption.style]);\n\t\t}\n\t}\n\n\tpublic getEngine(\n\t\tfontSize = 16,\n\t\tlineHeight: number | string = 'normal',\n\t\t{\n\t\t\tfontFamily = 'sans-serif',\n\t\t\tfontWeight = 400,\n\t\t\tfontStyle = 'normal'\n\t\t}: {\n\t\t\tfontFamily?: string | string[];\n\t\t\tfontWeight?: FontWeight;\n\t\t\tfontStyle?: FontStyle;\n\t\t},\n\t\tlocale: Locale | undefined\n\t): FontEngine {\n\t\tif (!this.fonts.size) {\n\t\t\tthrow new Error(\n\t\t\t\t'No fonts are loaded. At least one font is required to calculate the layout.'\n\t\t\t);\n\t\t}\n\n\t\tfontFamily = (\n\t\t\tArray.isArray(fontFamily) ? fontFamily : [fontFamily]\n\t\t).map(name => name.toLowerCase());\n\t\tlet fonts = [];\n\t\tlet primaryMatchedWeight: Weight | undefined;\n\n\t\tfontFamily.forEach(face => {\n\t\t\tconst getNormal = this.get({\n\t\t\t\tname: face,\n\t\t\t\tweight: fontWeight,\n\t\t\t\tstyle: fontStyle\n\t\t\t});\n\t\t\tif (getNormal) {\n\t\t\t\tfonts.push(getNormal.font);\n\t\t\t\tif (fonts.length === 1) {\n\t\t\t\t\tprimaryMatchedWeight = getNormal.weight;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst getUnknown = this.get({\n\t\t\t\tname: face + '_unknown',\n\t\t\t\tweight: fontWeight,\n\t\t\t\tstyle: fontStyle\n\t\t\t});\n\n\t\t\tif (getUnknown) {\n\t\t\t\tfonts.push(getUnknown.font);\n\t\t\t\tif (fonts.length === 1) {\n\t\t\t\t\tprimaryMatchedWeight = getUnknown.weight;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t});\n\n\t\t// Add additional fonts as the fallback.\n\t\tconst keys = Array.from(this.fonts.keys());\n\t\tconst specifiedLangFonts = [];\n\t\tconst nonSpecifiedLangFonts = [];\n\t\tconst additionalFonts = [];\n\t\tconst pushFallback = (\n\t\t\tarr: opentype.Font[],\n\t\t\tresult: { font: opentype.Font; weight: Weight | undefined } | null\n\t\t) => {\n\t\t\tif (!result) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tarr.push(result.font);\n\t\t\tif (primaryMatchedWeight === undefined) {\n\t\t\t\tprimaryMatchedWeight = result.weight;\n\t\t\t}\n\t\t};\n\t\tfor (const name of keys) {\n\t\t\tif (fontFamily.includes(name)) continue;\n\t\t\tif (locale) {\n\t\t\t\tconst lang = getLangFromFontName(name);\n\t\t\t\tif (lang) {\n\t\t\t\t\tif (lang === locale) {\n\t\t\t\t\t\tpushFallback(\n\t\t\t\t\t\t\tspecifiedLangFonts,\n\t\t\t\t\t\t\tthis.get({\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tweight: fontWeight,\n\t\t\t\t\t\t\t\tstyle: fontStyle\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpushFallback(\n\t\t\t\t\t\t\tnonSpecifiedLangFonts,\n\t\t\t\t\t\t\tthis.get({\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tweight: fontWeight,\n\t\t\t\t\t\t\t\tstyle: fontStyle\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tpushFallback(\n\t\t\t\t\t\tadditionalFonts,\n\t\t\t\t\t\tthis.get({\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tweight: fontWeight,\n\t\t\t\t\t\t\tstyle: fontStyle\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpushFallback(\n\t\t\t\t\tadditionalFonts,\n\t\t\t\t\tthis.get({\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tweight: fontWeight,\n\t\t\t\t\t\tstyle: fontStyle\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst cachedFontResolver = new Map<number, opentype.Font | undefined>();\n\t\tconst resolveFont = (word: string, fallback = true) => {\n\t\t\tconst _fonts = [\n\t\t\t\t...fonts,\n\t\t\t\t...additionalFonts,\n\t\t\t\t...specifiedLangFonts,\n\t\t\t\t...(fallback ? nonSpecifiedLangFonts : [])\n\t\t\t];\n\n\t\t\tif (typeof word === 'undefined') {\n\t\t\t\tif (fallback) {\n\t\t\t\t\treturn _fonts[_fonts.length - 1];\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst code = word.charCodeAt(0);\n\t\t\tif (cachedFontResolver.has(code))\n\t\t\t\treturn cachedFontResolver.get(code);\n\n\t\t\tconst font = _fonts.find((_font, index) => {\n\t\t\t\treturn (\n\t\t\t\t\t!!_font.charToGlyphIndex(word) ||\n\t\t\t\t\t(fallback && index === _fonts.length - 1)\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tif (font) {\n\t\t\t\tcachedFontResolver.set(code, font);\n\t\t\t}\n\n\t\t\treturn font;\n\t\t};\n\n\t\tconst ascender = (resolvedFont: opentype.Font, useOS2Table = false) => {\n\t\t\tconst _ascender =\n\t\t\t\t(useOS2Table ? resolvedFont.tables?.os2?.sTypoAscender : 0) ||\n\t\t\t\tresolvedFont.ascender;\n\t\t\treturn (_ascender / resolvedFont.unitsPerEm) * fontSize;\n\t\t};\n\n\t\tconst descender = (\n\t\t\tresolvedFont: opentype.Font,\n\t\t\tuseOS2Table = false\n\t\t) => {\n\t\t\tconst _descender =\n\t\t\t\t(useOS2Table ? resolvedFont.tables?.os2?.sTypoDescender : 0) ||\n\t\t\t\tresolvedFont.descender;\n\t\t\treturn (_descender / resolvedFont.unitsPerEm) * fontSize;\n\t\t};\n\n\t\tconst height = (resolvedFont: opentype.Font, useOS2Table = false) => {\n\t\t\tif ('string' === typeof lineHeight && 'normal' === lineHeight) {\n\t\t\t\tconst _lineGap =\n\t\t\t\t\t(useOS2Table\n\t\t\t\t\t\t? resolvedFont.tables?.os2?.sTypoLineGap\n\t\t\t\t\t\t: 0) || 0;\n\t\t\t\treturn (\n\t\t\t\t\tascender(resolvedFont, useOS2Table) -\n\t\t\t\t\tdescender(resolvedFont, useOS2Table) +\n\t\t\t\t\t(_lineGap / resolvedFont.unitsPerEm) * fontSize\n\t\t\t\t);\n\t\t\t} else if ('number' === typeof lineHeight) {\n\t\t\t\treturn fontSize * lineHeight;\n\t\t\t}\n\t\t};\n\n\t\tconst resolve = (s: string) => {\n\t\t\treturn resolveFont(s, false);\n\t\t};\n\n\t\t// Compute faux bold stroke width when requested weight exceeds available weight.\n\t\tlet fauxBoldStrokeWidth: number | undefined;\n\t\tconst normalizedWeight =\n\t\t\tfontWeight === 'bold'\n\t\t\t\t? 700\n\t\t\t\t: fontWeight === 'normal'\n\t\t\t\t? 400\n\t\t\t\t: Number(fontWeight);\n\t\tif (\n\t\t\tnormalizedWeight >= 600 &&\n\t\t\t(!primaryMatchedWeight || primaryMatchedWeight < 600)\n\t\t) {\n\t\t\tconst weightDiff = normalizedWeight - (primaryMatchedWeight || 400);\n\t\t\tfauxBoldStrokeWidth = fontSize * 0.04 * (weightDiff / 300);\n\t\t}\n\n\t\tconst engine = {\n\t\t\tfauxBoldStrokeWidth,\n\t\t\thas: (s: string) => {\n\t\t\t\tif (s === '\\n') return true;\n\t\t\t\tconst font = resolve(s);\n\t\t\t\tif (!font) return false;\n\t\t\t\t(font as any)._trackBrokenChars = [];\n\t\t\t\tfont.stringToGlyphs(s);\n\t\t\t\tif (!(font as any)._trackBrokenChars.length) return true;\n\t\t\t\t(font as any)._trackBrokenChars = undefined;\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tbaseline: (\n\t\t\t\ts?: string,\n\t\t\t\tresolvedFont = typeof s === 'undefined'\n\t\t\t\t\t? fonts[0]\n\t\t\t\t\t: resolveFont(s)\n\t\t\t) => {\n\t\t\t\tconst asc = ascender(resolvedFont);\n\t\t\t\tconst desc = descender(resolvedFont);\n\t\t\t\tconst contentHeight = asc - desc;\n\n\t\t\t\treturn asc + (height(resolvedFont) - contentHeight) / 2;\n\t\t\t},\n\t\t\theight: (\n\t\t\t\ts?: string,\n\t\t\t\tresolvedFont = typeof s === 'undefined'\n\t\t\t\t\t? fonts[0]\n\t\t\t\t\t: resolveFont(s)\n\t\t\t) => {\n\t\t\t\treturn height(resolvedFont);\n\t\t\t},\n\t\t\tmeasure: (\n\t\t\t\ts: string,\n\t\t\t\tstyle: {\n\t\t\t\t\tfontSize: number;\n\t\t\t\t\tletterSpacing: number;\n\t\t\t\t}\n\t\t\t) => {\n\t\t\t\treturn this.measure(resolveFont, s, style);\n\t\t\t},\n\t\t\tgetSVG: (\n\t\t\t\ts: string,\n\t\t\t\tstyle: {\n\t\t\t\t\tfontSize: number;\n\t\t\t\t\ttop: number;\n\t\t\t\t\tleft: number;\n\t\t\t\t\tletterSpacing: number;\n\t\t\t\t},\n\t\t\t\tband?: SkipInkBand\n\t\t\t) => {\n\t\t\t\treturn this.getSVG(resolveFont, s, style, band);\n\t\t\t}\n\t\t};\n\n\t\treturn engine;\n\t}\n\n\tprivate patchFontFallbackResolver(\n\t\tfont: opentype.Font,\n\t\tresolveFont: (word: string, fallback?: boolean) => opentype.Font\n\t) {\n\t\tconst brokenChars = [];\n\t\t(font as any)._trackBrokenChars = brokenChars;\n\n\t\tconst originalStringToGlyphs = font.stringToGlyphs;\n\t\tfont.stringToGlyphs = (s: string, ...args: any) => {\n\t\t\tconst glyphs = originalStringToGlyphs.call(font, s, ...args);\n\n\t\t\tfor (let i = 0; i < glyphs.length; i++) {\n\t\t\t\t// Hitting an undefined glyph. We have to try to resolve it from other\n\t\t\t\t// fonts.\n\t\t\t\t// @TODO: This affects the kerning resolution but should be fine for now.\n\t\t\t\tif (glyphs[i].unicode === undefined) {\n\t\t\t\t\tconst char = brokenChars.shift();\n\t\t\t\t\tconst anotherFont = resolveFont(char);\n\t\t\t\t\tif (anotherFont !== font) {\n\t\t\t\t\t\tconst glyph = anotherFont.charToGlyph(char);\n\t\t\t\t\t\t// Scale the glyph to match the current units per em.\n\t\t\t\t\t\tconst scale = font.unitsPerEm / anotherFont.unitsPerEm;\n\t\t\t\t\t\tconst p = new opentype.Path();\n\t\t\t\t\t\tp.unitsPerEm = font.unitsPerEm;\n\t\t\t\t\t\tp.commands = glyph.path.commands.map(command => {\n\t\t\t\t\t\t\tconst scaledCommand = { ...command };\n\t\t\t\t\t\t\tfor (let k in scaledCommand) {\n\t\t\t\t\t\t\t\tif (typeof scaledCommand[k] === 'number') {\n\t\t\t\t\t\t\t\t\tscaledCommand[k] *= scale;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn scaledCommand;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconst g = new opentype.Glyph({\n\t\t\t\t\t\t\t...glyph,\n\t\t\t\t\t\t\tadvanceWidth: glyph.advanceWidth * scale,\n\t\t\t\t\t\t\txMin: glyph.xMin * scale,\n\t\t\t\t\t\t\txMax: glyph.xMax * scale,\n\t\t\t\t\t\t\tyMin: glyph.yMin * scale,\n\t\t\t\t\t\t\tyMax: glyph.yMax * scale,\n\t\t\t\t\t\t\tpath: p\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tglyphs[i] = g;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn glyphs;\n\t\t};\n\n\t\treturn () => {\n\t\t\tfont.stringToGlyphs = originalStringToGlyphs;\n\t\t\t(font as any)._trackBrokenChars = undefined;\n\t\t};\n\t}\n\n\tprivate measure(\n\t\tresolveFont: (word: string, fallback?: boolean) => opentype.Font,\n\t\tcontent: string,\n\t\t{\n\t\t\tfontSize,\n\t\t\tletterSpacing = 0\n\t\t}: {\n\t\t\tfontSize: number;\n\t\t\tletterSpacing: number;\n\t\t}\n\t) {\n\t\tconst font = resolveFont(content);\n\t\tconst unpatch = this.patchFontFallbackResolver(font, resolveFont);\n\n\t\ttry {\n\t\t\treturn font.getAdvanceWidth(content, fontSize, {\n\t\t\t\tletterSpacing: letterSpacing / fontSize\n\t\t\t});\n\t\t} finally {\n\t\t\tunpatch();\n\t\t}\n\t}\n\n\tprivate getSVG(\n\t\tresolveFont: (word: string, fallback?: boolean) => opentype.Font,\n\t\tcontent: string,\n\t\t{\n\t\t\tfontSize,\n\t\t\ttop,\n\t\t\tleft,\n\t\t\tletterSpacing = 0\n\t\t}: {\n\t\t\tfontSize: number;\n\t\t\ttop: number;\n\t\t\tleft: number;\n\t\t\tletterSpacing: number;\n\t\t},\n\t\tband?: SkipInkBand\n\t): { path: string; boxes: GlyphBox[] } {\n\t\tconst font = resolveFont(content);\n\t\tconst unpatch = this.patchFontFallbackResolver(font, resolveFont);\n\n\t\ttry {\n\t\t\tif (fontSize === 0) {\n\t\t\t\treturn { path: '', boxes: [] };\n\t\t\t}\n\n\t\t\tconst fullPath = new opentype.Path();\n\t\t\tconst boxes: GlyphBox[] = [];\n\n\t\t\tconst options = {\n\t\t\t\tletterSpacing: letterSpacing / fontSize\n\t\t\t};\n\n\t\t\tconst cachedPath = new WeakMap<\n\t\t\t\topentype.Glyph,\n\t\t\t\t[number, number, opentype.Path]\n\t\t\t>();\n\n\t\t\tfont.forEachGlyph(\n\t\t\t\tcontent.replace(/\\n/g, ''),\n\t\t\t\tleft,\n\t\t\t\ttop,\n\t\t\t\tfontSize,\n\t\t\t\toptions,\n\t\t\t\tfunction (glyph, gX, gY, gFontSize) {\n\t\t\t\t\tlet glyphPath: opentype.Path;\n\t\t\t\t\tif (!cachedPath.has(glyph)) {\n\t\t\t\t\t\tglyphPath = glyph.getPath(gX, gY, gFontSize, options);\n\t\t\t\t\t\tcachedPath.set(glyph, [gX, gY, glyphPath]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst [_x, _y, _glyphPath] = cachedPath.get(glyph);\n\t\t\t\t\t\tglyphPath = new opentype.Path();\n\t\t\t\t\t\tglyphPath.commands = _glyphPath.commands.map(\n\t\t\t\t\t\t\tcommand => {\n\t\t\t\t\t\t\t\tconst movedCommand = { ...command };\n\t\t\t\t\t\t\t\tfor (let k in movedCommand) {\n\t\t\t\t\t\t\t\t\tif (typeof movedCommand[k] === 'number') {\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tk === 'x' ||\n\t\t\t\t\t\t\t\t\t\t\tk === 'x1' ||\n\t\t\t\t\t\t\t\t\t\t\tk === 'x2'\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tmovedCommand[k] += gX - _x;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tk === 'y' ||\n\t\t\t\t\t\t\t\t\t\t\tk === 'y1' ||\n\t\t\t\t\t\t\t\t\t\t\tk === 'y2'\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tmovedCommand[k] += gY - _y;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn movedCommand;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst bandBoxes = band\n\t\t\t\t\t\t? computeBandBox(glyphPath.commands, band)\n\t\t\t\t\t\t: [];\n\t\t\t\t\tif (bandBoxes.length) {\n\t\t\t\t\t\tboxes.push(...bandBoxes);\n\t\t\t\t\t}\n\n\t\t\t\t\tfullPath.extend(glyphPath);\n\t\t\t\t}\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tpath: fullPath.toPathData(1),\n\t\t\t\tboxes\n\t\t\t};\n\t\t} finally {\n\t\t\tunpatch();\n\t\t}\n\t}\n}\n\nfunction getLangFromFontName(name: string): Locale | undefined {\n\tconst arr = name.split('_');\n\tconst lang = arr[arr.length - 1];\n\n\treturn lang === SUFFIX_WHEN_LANG_NOT_SET ? undefined : (lang as Locale);\n}\n","import { buildXMLString } from '../utils.js';\n\nexport default function svg({\n\twidth,\n\theight,\n\tcontent\n}: {\n\twidth: number;\n\theight: number;\n\tcontent: string;\n}) {\n\treturn buildXMLString(\n\t\t'svg',\n\t\t{\n\t\t\twidth,\n\t\t\theight,\n\t\t\tviewBox: `0 0 ${width} ${height}`,\n\t\t\txmlns: 'http://www.w3.org/2000/svg'\n\t\t},\n\t\tcontent\n\t);\n}\n","import type { ReactNode } from 'react';\nimport type { SatoriNode } from './layout.js';\n\nimport layout from './layout.js';\nimport FontLoader, { FontOptions } from './font.js';\nimport svg from './builder/svg.js';\nimport { getYoga, TYoga } from './yoga.js';\nimport { detectLanguageCode, LangCode, Locale } from './language.js';\nimport { preProcessNode } from './handler/preprocess.js';\nimport { cache, inflightRequests } from './handler/image.js';\nimport { segment } from './utils.js';\n\n// We don't need to initialize the opentype instances every time.\nconst fontCache = new WeakMap();\n\nexport type SatoriOptions = (\n\t| {\n\t\t\twidth: number;\n\t\t\theight: number;\n\t }\n\t| {\n\t\t\twidth: number;\n\t }\n\t| {\n\t\t\theight: number;\n\t }\n) & {\n\tfonts: FontOptions[];\n\tembedFont?: boolean;\n\tdebug?: boolean;\n\tgraphemeImages?: Record<string, string>;\n\tloadAdditionalAsset?: (\n\t\tlanguageCode: string,\n\t\tsegment: string\n\t) => Promise<string | Array<FontOptions>>;\n\tonNodeDetected?: (node: SatoriNode) => void;\n\tpointScaleFactor?: number;\n};\nexport type { SatoriNode };\n\nexport default async function satori(\n\telement: ReactNode,\n\toptions: SatoriOptions\n): Promise<string> {\n\tconst Yoga = await getYoga();\n\tif (!Yoga || !Yoga.Node) {\n\t\tthrow new Error(\n\t\t\t'Satori is not initialized: expect `yoga` to be loaded, got ' + Yoga\n\t\t);\n\t}\n\toptions.fonts = options.fonts || [];\n\n\tlet font: FontLoader;\n\tif (fontCache.has(options.fonts)) {\n\t\tfont = fontCache.get(options.fonts);\n\t} else {\n\t\tfontCache.set(options.fonts, (font = new FontLoader(options.fonts)));\n\t}\n\n\tconst definedWidth = 'width' in options ? options.width : undefined;\n\tconst definedHeight = 'height' in options ? options.height : undefined;\n\n\tconst root = getRootNode(Yoga, options.pointScaleFactor);\n\tif (definedWidth) root.setWidth(definedWidth);\n\tif (definedHeight) root.setHeight(definedHeight);\n\troot.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);\n\troot.setFlexWrap(Yoga.WRAP_WRAP);\n\troot.setAlignContent(Yoga.ALIGN_AUTO);\n\troot.setAlignItems(Yoga.ALIGN_FLEX_START);\n\troot.setJustifyContent(Yoga.JUSTIFY_FLEX_START);\n\troot.setOverflow(Yoga.OVERFLOW_HIDDEN);\n\n\tconst graphemeImages = { ...options.graphemeImages };\n\t// Some Chinese characters have different glyphs in Chinese and\n\t// Japanese, but their Unicode is the same. If the user needs to display\n\t// the Chinese and Japanese characters simultaneously correctly, the user\n\t// needs to download the Chinese and Japanese fonts, respectively.\n\t// Assuming that the user has downloaded the corresponding Japanese font,\n\t// to let the program realize that the font has not been downloaded in Chinese,\n\t// we need to prohibit Japanese as the fallback when executing `engine.has`.\n\t//\n\t// This causes a problem. Consider a scenario where we need to display Chinese\n\t// correctly under tags with `lang=\"ja\"` set. `engine.has` will repeatedly treat\n\t// the Chinese as missing font because we have removed the Chinese as a fallback.\n\t// To address this situation, we may need to add `processedWordsMissingFont`\n\tconst processedWordsMissingFonts = new Set();\n\n\tcache.clear();\n\tinflightRequests.clear();\n\tawait preProcessNode(element);\n\n\tconst handler = layout(element, {\n\t\tid: 'id',\n\t\tparentStyle: {},\n\t\tinheritedStyle: {\n\t\t\tfontSize: 16,\n\t\t\tfontWeight: 'normal',\n\t\t\tfontFamily: 'serif',\n\t\t\tfontStyle: 'normal',\n\t\t\tlineHeight: 'normal',\n\t\t\tcolor: 'black',\n\t\t\topacity: 1,\n\t\t\twhiteSpace: 'normal',\n\n\t\t\t// Special style properties:\n\t\t\t_viewportWidth: definedWidth,\n\t\t\t_viewportHeight: definedHeight\n\t\t},\n\t\tparent: root,\n\t\tfont,\n\t\tembedFont: options.embedFont,\n\t\tdebug: options.debug,\n\t\tgraphemeImages,\n\t\tcanLoadAdditionalAssets: !!options.loadAdditionalAsset,\n\t\tonNodeDetected: options.onNodeDetected\n\t});\n\n\tconst segmentsMissingFont = (await handler.next()).value as {\n\t\tword: string;\n\t\tlocale?: Locale;\n\t}[];\n\n\tif (options.loadAdditionalAsset) {\n\t\tif (segmentsMissingFont.length) {\n\t\t\tconst languageCodes = convertToLanguageCodes(segmentsMissingFont);\n\t\t\tconst fonts: FontOptions[] = [];\n\t\t\tconst images: Record<string, string> = {};\n\n\t\t\tawait Promise.all(\n\t\t\t\tObject.entries(languageCodes).flatMap(([code, segments]) =>\n\t\t\t\t\tsegments.map(_segment => {\n\t\t\t\t\t\tconst key = `${code}_${_segment}`;\n\t\t\t\t\t\tif (processedWordsMissingFonts.has(key)) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprocessedWordsMissingFonts.add(key);\n\n\t\t\t\t\t\treturn options\n\t\t\t\t\t\t\t.loadAdditionalAsset(code, _segment)\n\t\t\t\t\t\t\t.then((asset: any) => {\n\t\t\t\t\t\t\t\tif (typeof asset === 'string') {\n\t\t\t\t\t\t\t\t\timages[_segment] = asset;\n\t\t\t\t\t\t\t\t} else if (asset) {\n\t\t\t\t\t\t\t\t\tif (Array.isArray(asset)) {\n\t\t\t\t\t\t\t\t\t\tfonts.push(...asset);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tfonts.push(asset);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t);\n\n\t\t\t// Directly mutate the font provider and the grapheme map.\n\t\t\tfont.addFonts(fonts);\n\t\t\tObject.assign(graphemeImages, images);\n\t\t}\n\t}\n\n\tawait handler.next();\n\troot.calculateLayout(definedWidth, definedHeight, Yoga.DIRECTION_LTR);\n\n\tconst content = (await handler.next([0, 0])).value as string;\n\n\tconst computedWidth = root.getComputedWidth();\n\tconst computedHeight = root.getComputedHeight();\n\n\troot.freeRecursive();\n\n\treturn svg({ width: computedWidth, height: computedHeight, content });\n}\n\nfunction getRootNode(\n\tYoga: TYoga,\n\tpointScaleFactor?: SatoriOptions['pointScaleFactor']\n) {\n\tif (!pointScaleFactor) {\n\t\treturn Yoga.Node.create();\n\t} else {\n\t\tconst config = Yoga.Config.create();\n\t\tconfig.setPointScaleFactor(pointScaleFactor);\n\t\treturn Yoga.Node.createWithConfig(config);\n\t}\n}\n\nfunction convertToLanguageCodes(\n\tsegmentsMissingFont: { word: string; locale?: Locale }[]\n): Partial<Record<LangCode, string[]>> {\n\tconst languageCodes = {};\n\tlet wordsByCode = {};\n\n\tfor (const { word, locale } of segmentsMissingFont) {\n\t\tconst code = detectLanguageCode(word, locale).join('|');\n\t\twordsByCode[code] = wordsByCode[code] || '';\n\t\twordsByCode[code] += word;\n\t}\n\n\tObject.keys(wordsByCode).forEach((code: LangCode) => {\n\t\tlanguageCodes[code] = languageCodes[code] || [];\n\t\tif (code === 'emoji') {\n\t\t\tlanguageCodes[code].push(\n\t\t\t\t...unique(segment(wordsByCode[code], 'grapheme'))\n\t\t\t);\n\t\t} else {\n\t\t\tlanguageCodes[code][0] = languageCodes[code][0] || '';\n\t\t\tlanguageCodes[code][0] += unique(\n\t\t\t\tsegment(\n\t\t\t\t\twordsByCode[code],\n\t\t\t\t\t'grapheme',\n\t\t\t\t\tcode === 'unknown' ? undefined : code\n\t\t\t\t)\n\t\t\t).join('');\n\t\t}\n\t});\n\n\treturn languageCodes;\n}\n\nfunction unique<T>(arr: T[]): T[] {\n\treturn Array.from(new Set(arr));\n}\n"],"mappings":"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AW,MACX,aAAc,KACf,EACA,IAAK,CACJ,QAASA,EACV,EACA,WAAY,CACX,QAASA,GACT,UAAW,MACX,aAAc,MACd,WAAY,GACZ,YAAa,EACd,EACA,OAAQ,CACP,QAASA,GACT,UAAW,QACZ,EACA,GAAI,CACH,QAASA,GACT,UAAW,QACX,aAAc,QACd,WAAY,OACZ,YAAa,OACb,YAAa,EAEb,YAAa,OACd,EAEA,GAAI,CACH,QAASA,GACT,SAAU,MACV,UAAW,SACX,aAAc,SACd,WAAY,EACZ,YAAa,EACb,WAAY,MACb,EACA,GAAI,CACH,QAASA,GACT,SAAU,QACV,UAAW,SACX,aAAc,SACd,WAAY,EACZ,YAAa,EACb,WAAY,MACb,EACA,GAAI,CACH,QAASA,GACT,SAAU,SACV,UAAW,MACX,aAAc,MACd,WAAY,EACZ,YAAa,EACb,WAAY,MACb,EACA,GAAI,CACH,QAASA,GACT,UAAW,SACX,aAAc,SACd,WAAY,EACZ,YAAa,EACb,WAAY,MACb,EACA,GAAI,CACH,QAASA,GACT,SAAU,SACV,UAAW,SACX,aAAc,SACd,WAAY,EACZ,YAAa,EACb,WAAY,MACb,EACA,GAAI,CACH,QAASA,GACT,SAAU,SACV,UAAW,SACX,aAAc,SACd,WAAY,EACZ,YAAa,EACb,WAAY,MACb,EAKA,EAAG,CACF,eAAgB,WACjB,EACA,OAAQ,CACP,WAAY,MACb,EACA,EAAG,CACF,WAAY,MACb,EACA,EAAG,CACF,UAAW,QACZ,EACA,GAAI,CACH,UAAW,QACZ,EACA,KAAM,CACL,WAAY,WACb,EACA,IAAK,CACJ,WAAY,WACb,EACA,IAAK,CACJ,QAASA,GACT,WAAY,YACZ,WAAY,MACZ,UAAW,MACX,aAAc,KACf,EACA,KAAM,CACL,gBAAiB,SACjB,MAAO,OACR,EACA,IAAK,CACJ,SAAU,QACX,EACA,MAAO,CACN,SAAU,SACX,EACA,EAAG,CACF,eAAgB,cACjB,CACD,EC1IA,IAAME,GAAO,IAAI,IAAI,CACpB,QACA,OACA,aACA,WACA,YACA,aACA,gBACA,aACA,YACA,aACA,gBACA,mBACA,kBA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","names":["yoga_wasm_esm_default","loadYoga","h","aa","ca","a","b","da","q","_scriptDir","ea","v","w","noExitRuntime","x","fa","ha","z","c","d","e","f","g","ia","ja","A","C","ka","D","E","la","ma","na","oa","pa","qa","ra","sa","F","ta","G","ua","H","va","wa","xa","ya","za","Aa","Ba","J","Ca","Da","K","L","M","Ea","Fa","Ga","N","O","Ha","P","Q","Ia","R","Ja","Ka","S","La","Ma","Na","Oa","Pa","Qa","Ra","Sa","Ta","Ua","T","Va","Wa","Xa","U","Ya","V","k","m","W","Za","$a","X","ab","bb","cb","db","eb","fb","gb","hb","Y","ib","jb","Z","mb","nb","ob","l","n","p","r","u","t","y","B","pb","qb","rb","sb","tb","ub","vb","wb","xb","yb","zb","Ab","Bb","Cb","Db","Eb","Fb","Gb","Hb","Jb","ba","I","kb","lb","Ib","Kb","Lb","Mb","init_yoga_wasm_esm","__esmMin","Align","BoxSizing","Dimension","Direction","Display","Edge","Errata","ExperimentalFeature","FlexDirection","Gutter","Justify","LogLevel","MeasureMode","NodeType","Overflow","PositionType","Unit","Wrap","constants","YGEnums_default","init_YGEnums","__esmMin","ALIGN_AUTO","Auto","ALIGN_FLEX_START","FlexStart","ALIGN_CENTER","Center","ALIGN_FLEX_END","FlexEnd","ALIGN_STRETCH","Stretch","ALIGN_BASELINE","Baseline","ALIGN_SPACE_BETWEEN","SpaceBetween","ALIGN_SPACE_AROUND","SpaceAround","ALIGN_SPACE_EVENLY","SpaceEvenly","BOX_SIZING_BORDER_BOX","BorderBox","BOX_SIZING_CONTENT_BOX","ContentBox","DIMENSION_WIDTH","Width","DIMENSION_HEIGHT","Height","DIRECTION_INHERIT","Inherit","DIRECTION_LTR","LTR","DIRECTION_RTL","RTL","DISPLAY_FLEX","Flex","DISPLAY_NONE","None","DISPLAY_CONTENTS","Contents","EDGE_LEFT","Left","EDGE_TOP","Top","EDGE_RIGHT","Right","EDGE_BOTTOM","Bottom","EDGE_START","Start","EDGE_END","End","EDGE_HORIZONTAL","Horizontal","EDGE_VERTICAL","Vertical","EDGE_ALL","All","ERRATA_NONE","ERRATA_STRETCH_FLEX_BASIS","StretchFlexBasis","ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING","AbsolutePositionWithoutInsetsExcludesPadding","ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE","AbsolutePercentAgainstInnerSize","ERRATA_ALL","ERRATA_CLASSIC","Classic","EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS","WebFlexBasis","FLEX_DIRECTION_COLUMN","Column","FLEX_DIRECTION_COLUMN_REVERSE","ColumnReverse","FLEX_DIRECTION_ROW","Row","FLEX_DIRECTION_ROW_REVERSE","RowReverse","GUTTER_COLUMN","GUTTER_ROW","GUTTER_ALL","JUSTIFY_FLEX_START","JUSTIFY_CENTER","JUSTIFY_FLEX_END","JUSTIFY_SPACE_BETWEEN","JUSTIFY_SPACE_AROUND","JUSTIFY_SPACE_EVENLY","LOG_LEVEL_ERROR","Error","LOG_LEVEL_WARN","Warn","LOG_LEVEL_INFO","Info","LOG_LEVEL_DEBUG","Debug","LOG_LEVEL_VERBOSE","Verbose","LOG_LEVEL_FATAL","Fatal","MEASURE_MODE_UNDEFINED","Undefined","MEASURE_MODE_EXACTLY","Exactly","MEASURE_MODE_AT_MOST","AtMost","NODE_TYPE_DEFAULT","Default","NODE_TYPE_TEXT","Text","OVERFLOW_VISIBLE","Visible","OVERFLOW_HIDDEN","Hidden","OVERFLOW_SCROLL","Scroll","POSITION_TYPE_STATIC","Static","POSITION_TYPE_RELATIVE","Relative","POSITION_TYPE_ABSOLUTE","Absolute","UNIT_UNDEFINED","UNIT_POINT","Point","UNIT_PERCENT","Percent","UNIT_AUTO","WRAP_NO_WRAP","NoWrap","WRAP_WRAP","WRAP_WRAP_REVERSE","WrapReverse","wrapAssembly","lib","patch","prototype","name","fn","original","_len","arguments","length","args","Array","_key","call","fnName","methods","Unit","Point","Node","Percent","Auto","_len2","_key2","value","pop","unit","asNumber","undefined","valueOf","endsWith","parseFloat","Number","isNaN","Error","wrapMeasureFunction","measureFunction","MeasureCallback","implement","measure","width","height","NaN","measureFunc","unsetMeasureFunc","wrapDirtiedFunc","dirtiedFunction","DirtiedCallback","dirtied","dirtiedFunc","Config","destroy","_","config","createWithConfig","createDefault","t","T","getChildCount","getChild","freeRecursive","free","direction","Direction","LTR","YGEnums","init_wrapAssembly","__esmMin","init_YGEnums","loadYoga","wasmOptions","wrapAssembly","loadYogaImpl","init_load","__esmMin","init_yoga_wasm_esm","init_wrapAssembly","init_YGEnums","yoga_external_exports","__export","getYoga","init","loadWasm","input","imports","source","e","bytes","instantiated","loadYoga","successCallback","instance","rejectYoga","resolveYoga","yogaPromise","init_yoga_external","__esmMin","init_load","resolve","reject","LineBreaker","e","t","r","u","k","g","a","z","v","c","L","w","h","$","y","m","j","b","q","f","p","l","d","s","x","o","O","F","U","E","D","i","isReactElement","node","type","isClass","f","isForwardRefComponent","isReactComponent","hasDangerouslySetInnerHTMLProp","props","normalizeChildren","children","flattend","res","i","value","lengthToNumber","length","baseFontSize","baseLength","inheritedStyle","percentage","parsed","U","calcDegree","deg","multiply","m1","m2","v","field","map","fallback","errorIfNotAllowedForProperty","_v","wordSegmenter","graphemeSegmenter","wordSeparators","point","segmentCache","MAX_SEGMENT_CACHE_SIZE","segment","content","granularity","locale","cacheKey","result","seg","segmented","output","previousWord","nextWord","firstKey","buildXMLString","attrs","attrString","k","createLRU","max","store","get","key","set","clear","parseViewBox","viewBox","isString","x","isNumber","isUndefined","asPointPercentageLength","propertyName","percentageValue","asPointAutoPercentageLength","splitByBreakOpportunities","content","wordBreak","segment","breaker","LineBreaker","last","bk","words","requiredBreaks","word","midline","s","_","letter","splitEffects","input","separator","result","l","parenCount","i","init","input","mod","getYoga","AVIF","WEBP","APNG","PNG","JPEG","GIF","SVG","parseJPEG","buf","view","offset","len","next","parseGIF","parsePNG","v","cache","createLRU","inflightRequests","ALLOWED_IMAGE_TYPES","SVG_ATTRS_REGEX","VIEWBOX_REGEX","WIDTH_REGEX","HEIGHT_REGEX","arrayBufferToBase64","buffer","bytes","CHUNK_SIZE","binary","chunk","base64ToArrayBuffer","base64","binaryString","parseSvgImageSize","src","data","svgMatch","svgTag","viewBoxMatch","widthMatch","heightMatch","viewBox","parseViewBox","size","ratio","arrayBufferToDataUri","imageSize","imageType","detectContentType","resolveImageData","newSrc","decodedURI","encodingType","dataString","utf8Src","base64Src","cached","url","promise","res","type","e","result","err","b","i","detectAPNG","dv","length","off","isAPNG","chars","ATTRIBUTE_MAPPING","SVGSymbols","translateSVGNodeToSVGString","node","inheritedColor","n","type","children","style","restProps","currentColor","attrs","k","_v","cache","styles","midline","preProcessNode","set","walk","_node","isReactElement","v","imageSrc","c","s","resolveImageData","SVGNodeToImage","viewBox","viewbox","width","height","className","viewBoxSize","parseViewBox","ratio","DEFAULT_DISPLAY","presets_default","list","inheritable","style","inheritedStyle","prop","getPropertyName","getStylesForProperty","parseElementStyle","parseBoxShadow","cssColorParse","valueParser","parseUnit","word","baseFontSize","parsed","U","handleWord","unitIsHorizontal","parsedUnit","parseTransformOrigin","value","words","valueParser","node","getPropertyName","getMaskProperty","style","name","key","getPropertyName","parseMask","maskImage","common","splitEffects","v","m","valueParser","extractCustomProperties","style","variables","remainingStyle","prop","mergeVariables","inherited","current","resolveVariables","value","visitedVars","parsed","hasChanges","node","args","extractVarArgs","varName","fallback","replaceNode","variableValue","newVisitedVars","resolvedValue","resolvedFallback","varNameNode","commaIndex","child","fallbackNodes","optOutPx","keepNumber","handleFallbackColor","prop","parsed","rawInput","currentColor","purify","name","value","num","handleSpecialCase","_v","horizontal","vertical","vh","getStylesForProperty","vv","k","resolved","purified","v","full","p","parseBoxShadow","symbols","replaced","_","symbol","t","result","shadows","splitEffects","shadow","styles","values","normalized","getErrorHint","RGB_SLASH","normalizeColor","r","g","b","a","expand","style","inheritedStyle","serializedStyle","inheritedVariables","currentVariables","processableStyle","variables","remainingStyle","extractCustomProperties","mergedVariables","mergeVariables","varName","resolvedColor","resolveVariables","getCurrentColor","getPropertyName","resolvedValue","preprocess","resolvedStyle","err","backgrounds","parseElementStyle","parseMask","baseFontSize","calcBaseFontSize","parseTransformOrigin","lengthToNumber","len","color","transforms","transform","type","textShadowRadius","textShadowOffset","height","width","size","inheritedSize","U","refineHSL","cssColorParse","h","s","l","inheritedColor","convertCurrentColorToActualValue","isString","compute","node","type","inheritedStyle","definedStyle","props","Yoga","getYoga","style","expand","presets_default","resolvedSrc","imageWidth","imageHeight","resolveImageData","r","extraHorizontal","extraVertical","contentBoxWidth","contentBoxHeight","isAbsoluteContentSize","viewBox","viewBoxSize","parseViewBox","ratio","width","height","lengthToNumber","v","asPointAutoPercentageLength","asPointPercentageLength","inheritable","escapeHTML","baseMatrix","resolveTransforms","transforms","width","height","matrix","transform","type","v","len","transformMatrix","rad","c","s","multiply","left","top","isInheritingTransform","transformOrigin","result","xOrigin","yOrigin","x","y","container","left","top","width","height","isInheritingTransform","style","matrix","opacity","transform","buildText","id","content","filter","image","clipPathId","debug","fauxBoldStrokeWidth","shape","decorationShape","extra","buildXMLString","shapeProps","hasWebkitStroke","hasFauxBold","escapeHTML","shiftPath","path","dx","dy","_","command","x","y","SCALE","buildDropShadow","id","width","height","style","transparentText","shadowCount","effects","merge","left","right","top","bottom","i","grow","resultId","buildXMLString","boxShadow","shape","opacity","shadow","innerShadow","s","shadowStyle","sid","maskId","shapeWithSpread","finalShape","buildSkipInkSegments","start","end","glyphBoxes","y","strokeWidth","baseline","halfStroke","bleed","skipRanges","box","from","to","last","segments","cursor","buildDecoration","width","left","top","ascender","clipPathId","matrix","style","textDecorationColor","textDecorationStyle","textDecorationLine","textDecorationSkipInk","fontSize","color","height","dasharray","applySkipInk","extraLine","x1","x2","buildXMLString","stringFromCode","code","Space","Tab","HorizontalEllipsis","genMeasurer","engine","isImage","style","fontSize","letterSpacing","cache","measureGrapheme","grapheme","width","measureGraphemeArray","graphemes","measureText","text","segment","preprocess","content","style","locale","textTransform","whiteSpace","wordBreak","processTextTransform","processedContent","shouldCollapseTabsAndSpaces","allowSoftWrap","processWhiteSpace","words","requiredBreaks","allowBreakWord","processWordBreak","lineLimit","blockEllipsis","processTextOverflow","segment","word","grapheme","index","textOverflow","lineClamp","WebkitLineClamp","WebkitBoxOrient","overflow","display","HorizontalEllipsis","parseLineClamp","isNumber","splitByBreakOpportunities","shouldKeepLinebreak","Space","input","regex1","regex2","match1","match2","number","text","cssColorParse","skippedWordWhenFindingMissingFont","Tab","shouldSkipWhenFindingMissingFont","word","isFullyTransparent","color","parsed","isOpaqueWhite","r","g","b","a","buildTextNodes","content","context","Yoga","getYoga","parentStyle","inheritedStyle","parent","font","id","isInheritingTransform","debug","embedFont","graphemeImages","locale","canLoadAdditionalAssets","textAlign","textIndent","lineHeight","textWrap","fontSize","cssFilter","tabSize","letterSpacing","_inheritedBackgroundClipTextPath","_inheritedBackgroundClipTextHasBackground","flexShrink","words","requiredBreaks","allowSoftWrap","allowBreakWord","processedContent","shouldCollapseTabsAndSpaces","lineLimit","blockEllipsis","preprocess","textContainer","createTextContainerNode","isUndefined","engine","wordsMissingFont","segment","isImage","s","measureGrapheme","measureGraphemeArray","measureText","genMeasurer","tabWidth","isString","lengthToNumber","Space","calc","text","currentWidth","index","tabCount","detectTabs","originWidth","textBeforeTab","textAfterTab","textWidthBeforeTab","offsetBeforeTab","afterTrimEndWidth","lineWidths","baselines","lineSegmentNumber","texts","wordPositionInLayout","flow","width","lines","maxWidth","lineIndex","height","currentLineHeight","currentBaselineOffset","i","prevLineEndingSpacesWidth","forceBreak","w","endingSpacesWidth","_word","lineEndingSpacesWidth","allowedToJustify","willWrap","chars","glyphHeight","x","_texts","j","_text","_width","_isImage","measuredTextSize","containerWidth","l","m","mHeight","adjustedWidth","result","y","backgroundClipDef","clipPathId","overflowMaskId","containerLeft","containerTop","containerHeight","textIndentNumber","parentContainerInnerWidth","left","top","matrix","opacity","container","filter","textShadowColor","textShadowOffset","textShadowRadius","buildDropShadow","buildXMLString","decorationShape","mergedPath","extra","skippedLine","decorationLines","decorationGlyphs","wordBuffer","bufferedOffset","layout","nextLayout","path","isLastDisplayedBeforeEllipsis","image","topOffset","leftOffset","line","shouldCollectDecorationBoxes","extendedWidth","remainingWidth","segments","gutter","baselineOfLine","baselineOfWord","heightOfWord","baselineDelta","buildUnderlineBand","offset","calcEllipsis","baseWidth","subset","resolvedWidth","char","ellipsisWidth","_blockEllipsis","HorizontalEllipsis","spaceWidth","isNotLastLine","nextLineText","wordSeparators","finalizedSegment","finalizedLeftOffset","finalizedWidth","band","svg","t","shape","buildText","deco","glyphBoxes","buildDecoration","hasWebkitStroke","hasFauxBold","fillColor","p","v","parseLinearGradient","cssColorParse","normalizeStops","totalLength","colorStops","inheritedStyle","repeating","from","stops","lastColorStop","totalPercentage","stop","color","offset","lengthToNumber","lastStop","previousStop","nextStop","i","buildLinearGradient","id","width","height","repeatX","repeatY","image","dimensions","offsets","inheritableStyle","from","parsed","parseLinearGradient","imageWidth","imageHeight","repeating","points","length","xys","resolveXYFromDirection","l","p","calcNormalPoint","calcDegree","calcPercentage","stops","normalizeStops","resolveRepeatingCycle","gradientId","patternId","defs","buildXMLString","stop","last","offset","dir","x1","y1","x2","y2","v","w","h","r","tmp","a","b","dfs","angle","p1","lengthToNumber","p2","sx","sy","ex","ey","parseRadialGradient","buildRadialGradient","id","width","height","repeatX","repeatY","image","dimensions","offsets","inheritableStyle","from","_a","shape","colorStops","position","size","repeating","parseRadialGradient","xDelta","yDelta","cx","cy","pos","calcRadialGradient","colorStopTotalLength","calcColorStopTotalLength","stops","normalizeStops","gradientId","patternId","maskId","spread","calcRadius","props","calcRadialGradientProps","defs","buildXMLString","stop","lastStop","lengthToNumber","baseFontSize","style","calcPos","key","dir","r","rx","ratio","last","radius","endingShape","centerAxis","length","fx","fy","isSizeAllLength","v","patchSpread","f2r","mfx","mfy","mrx","mry","mr","ry","s","cssColorParse","toAbsoluteValue","v","base","calculateKeywordSize","keyword","containerWidth","containerHeight","imageWidth","imageHeight","scaleX","scaleY","scale","parts","widthPart","heightPart","finalWidth","finalHeight","parsedHeight","parsedWidth","positionKeywordMap","parsePositionValues","str","part","computeBgPositionOffset","rawValue","containerSize","imageSize","percentage","parsed","U","parseLengthPairs","x","y","defaultX","defaultY","value","dim","index","backgroundImage","id","width","height","left","top","image","size","position","repeat","inheritableStyle","from","repeatX","repeatY","isKeywordSize","isGradient","dimensions","normalizedPos","offsets","buildLinearGradient","buildRadialGradient","src","resolveImageData","resolvedWidth","resolvedHeight","calcWidth","calcHeight","dimensionsWithoutFallback","rawPos","imageOffsetX","imageOffsetY","buildXMLString","colorObj","r","g","b","a","color","svgArcCenterOffset","rx","ry","resolveSize","a","b","limit","makeSmaller","arr","resolveRadius","v","width","height","fontSize","style","sides","s","singleValue","lengthToNumber","radiusZeroOrNull","_radius","getBorderRadiusClipPath","id","borderRadiusPath","borderType","left","top","rectClipId","buildXMLString","radius","partialSides","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","singleAbsValueTopLeftCorner","singleAbsValueTopRightCorner","singleAbsValueBottomLeftCorner","singleAbsValueBottomRightCorner","p","T","R","B","L","getArc","i","c0","start","result","arc0","l","len","end","arc1","compareBorderDirections","a","b","style","getBorderClipPath","id","currentClipPathId","borderPath","borderType","left","top","width","height","rectClipId","buildXMLString","border","props","asContentMask","maskBorderOnly","directions","direction","fullBorder","start","partialSides","currentStyle","_i","i","ni","d","nd","w","radius","contentMask","id","left","top","width","height","matrix","borderOnly","style","offsetLeft","offsetTop","offsetRight","offsetBottom","contentArea","buildXMLString","border","getStylesForProperty","regexMap","createShapeParser","width","height","style","inheritedStyle","parseCircle","str","res","value","radius","pos","v","x","y","resolvePosition","lengthToNumber","parseEllipse","rx","ry","parsePath","fillRule","d","resolveFillRule","parsePolygon","points","k","i","parseInset","inset","radiusMap","r","s","offsets","w","h","position","xDelta","yDelta","genClipPathId","id","genClipPath","buildClipPath","v","style","inheritedStyle","parser","createShapeParser","clipPath","tmp","k","type","rest","buildXMLString","overflow","left","top","width","height","path","matrix","id","currentClipPath","src","style","inheritableStyle","overflowClipPath","clipPath","buildClipPath","_id","genClipPathId","buildXMLString","contentMask","genMaskImageId","id","buildMaskImage","v","style","inheritedStyle","left","top","width","height","maskImage","length","miId","mask","i","m","_id","def","backgroundImage","buildXMLString","parseObjectPosition","position","containerWidth","containerHeight","parts","keywordToPercent","keyword","axis","xValue","yValue","part","first","second","parseValue","value","containerSize","parsed","U","rect","id","left","top","width","height","isInheritingTransform","src","debug","style","inheritableStyle","isImage","type","matrix","defs","fills","opacity","extra","transform","backgroundShapes","backgrounds","index","background","image","backgroundImage","miId","mi","buildMaskImage","maskId","path","radius","clipPathId","buildXMLString","backgroundClip","cssFilter","mixBlendMode","inlineStyle","v","currentClipPath","genClipPath","clip","overflow","shape","fill","borderClip","getBorderClipPath","imageBorderRadius","offsetLeft","offsetTop","offsetRight","offsetBottom","containerInnerWidth","containerInnerHeight","objPosX","objPosY","naturalWidth","naturalHeight","preserveAspectRatio","imageWidth","imageHeight","imageX","imageY","scaleX","scaleY","scale","minScale","getBorderRadiusClipPath","rectClipId","border","shadow","boxShadow","parseFilterValue","value","primitives","lastResult","hasBlur","blurMatch","sigma","pad","buildXMLString","result","saturateMatch","val","brightnessMatch","contrastMatch","intercept","grayscaleMatch","buildBackdropFilter","options","bgGroupId","filterValue","height","id","left","maskId","style","top","width","filterId","clipId","filterDef","borderRadiusPath","radius","clipContent","clipDef","defs","useElement","gAttrs","r","e","emoji_regex_xs_default","emojiRegex","emoji_regex_xs_default","specialCode","code","locales","isValidLocale","x","detectLanguageCode","segment","locale","c","languages","lang","index","normalizeLocale","l","layout","element","context","_a","Yoga","getYoga","id","inheritedStyle","parent","font","debug","locale","embedFont","graphemeImages","canLoadAdditionalAssets","isReactElement","isReactComponent","iter","buildTextNodes","isClass","render","isForwardRefComponent","offset","$type","props","type","hasDangerouslySetInnerHTMLProp","style","children","_newLocale","newLocale","normalizeLocale","node","computedStyle","newInheritableStyle","compute","isInheritingTransform","mutateRefValue","normalizedChildren","normalizeChildren","iterators","backdropInfoByIndex","i","segmentsMissingFont","child","currentIndex","info","x","y","left","top","width","height","childrenRenderResult","baseRenderResult","depsRenderResult","childrenNode","restProps","src","rect","currentColor","SVGNodeToImage","display","j","childLayout","childLeft","childTop","childWidth","childHeight","bgGroupId","currentContent","childId","maskId","buildBackdropFilter","buildXMLString","opentype","SUFFIX_WHEN_LANG_NOT_SET","flattenPath","commands","segments","start","current","addCurve","points","steps","prev","i","t","next","evaluateBezier","cmd","working","computeBandBox","band","strokeWidth","bandMin","bandMax","bandHeight","ySamples","yStep","yStart","columnHits","y","intersections","seg","x1","y1","x2","y2","yMin","yMax","x","a","b","j","from","to","end","col","columns","inkRanges","rangeStart","boxes","bleed","minX","maxX","left","right","compareFont","weight","style","matchedWeight","matchedStyle","nextWeight","nextStyle","cachedParsedFont","FontLoader","fontOptions","name","fonts","matchedFont","i","weight1","style1","weight2","style2","fontOption","data","lang","isValidLocale","locales","_lang","SUFFIX_WHEN_LANG_NOT_SET","font","opentype","originalCharToGlyphIndex","char","index","_name","fontSize","lineHeight","fontFamily","fontWeight","fontStyle","locale","primaryMatchedWeight","face","getNormal","getUnknown","keys","specifiedLangFonts","nonSpecifiedLangFonts","additionalFonts","pushFallback","arr","result","getLangFromFontName","cachedFontResolver","resolveFont","word","fallback","_fonts","code","_font","ascender","resolvedFont","useOS2Table","_a","_b","descender","height","_lineGap","resolve","s","fauxBoldStrokeWidth","normalizedWeight","weightDiff","asc","desc","contentHeight","band","brokenChars","originalStringToGlyphs","args","glyphs","anotherFont","glyph","scale","p","command","scaledCommand","k","g","content","letterSpacing","unpatch","top","left","fullPath","boxes","options","cachedPath","gX","gY","gFontSize","glyphPath","_x","_y","_glyphPath","movedCommand","bandBoxes","computeBandBox","svg","width","height","content","buildXMLString","fontCache","satori","element","options","Yoga","getYoga","font","FontLoader","definedWidth","definedHeight","root","getRootNode","graphemeImages","processedWordsMissingFonts","cache","inflightRequests","preProcessNode","handler","layout","segmentsMissingFont","languageCodes","convertToLanguageCodes","fonts","images","code","segments","_segment","key","asset","content","computedWidth","computedHeight","svg","pointScaleFactor","config","wordsByCode","word","locale","detectLanguageCode","unique","segment","arr"]}