@leafer-draw/worker 1.0.0-rc.27 → 1.0.0-rc.30

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.
@@ -50,10 +50,8 @@ function useCanvas(_canvasType, _power) {
50
50
  download(_url, _filename) { return undefined; },
51
51
  loadImage(src) {
52
52
  return new Promise((resolve, reject) => {
53
- if (!src.startsWith('data:') && Platform.image.suffix)
54
- src += (src.includes("?") ? "&" : "?") + Platform.image.suffix;
55
53
  let req = new XMLHttpRequest();
56
- req.open('GET', src, true);
54
+ req.open('GET', Platform.image.getRealURL(src), true);
57
55
  req.responseType = "blob";
58
56
  req.onload = () => {
59
57
  createImageBitmap(req.response).then(img => {
@@ -1304,7 +1302,7 @@ function checkImage(ui, canvas, paint, allowPaint) {
1304
1302
  width *= data.scaleX;
1305
1303
  height *= data.scaleY;
1306
1304
  }
1307
- allowPaint = width * height > Platform.image.maxCacheSize;
1305
+ allowPaint = (width * height > Platform.image.maxCacheSize) || Export.running;
1308
1306
  }
1309
1307
  else {
1310
1308
  allowPaint = false;
@@ -1816,7 +1814,8 @@ function createRows(drawData, content, style) {
1816
1814
  if (breakAll) {
1817
1815
  if (wordWidth)
1818
1816
  addWord();
1819
- addRow();
1817
+ if (rowWidth)
1818
+ addRow();
1820
1819
  }
1821
1820
  else {
1822
1821
  if (!afterBreak)
@@ -1824,10 +1823,12 @@ function createRows(drawData, content, style) {
1824
1823
  if (langBreak || afterBreak || charType === Break || charType === Before || charType === Single || (wordWidth + charWidth > realWidth)) {
1825
1824
  if (wordWidth)
1826
1825
  addWord();
1827
- addRow();
1826
+ if (rowWidth)
1827
+ addRow();
1828
1828
  }
1829
1829
  else {
1830
- addRow();
1830
+ if (rowWidth)
1831
+ addRow();
1831
1832
  }
1832
1833
  }
1833
1834
  }
@@ -2030,7 +2031,9 @@ function layoutText(drawData, style) {
2030
2031
  bounds.height = realHeight;
2031
2032
  }
2032
2033
 
2033
- function clipText(drawData, style) {
2034
+ function clipText(drawData, style, x, width) {
2035
+ if (!width)
2036
+ return;
2034
2037
  const { rows, overflow } = drawData;
2035
2038
  let { textOverflow } = style;
2036
2039
  rows.splice(overflow);
@@ -2041,7 +2044,7 @@ function clipText(drawData, style) {
2041
2044
  textOverflow = '...';
2042
2045
  let char, charRight;
2043
2046
  const ellipsisWidth = textOverflow ? Platform.canvas.measureText(textOverflow).width : 0;
2044
- const right = style.x + style.width - ellipsisWidth;
2047
+ const right = x + width - ellipsisWidth;
2045
2048
  const list = style.textWrap === 'none' ? rows : [rows[overflow - 1]];
2046
2049
  list.forEach(row => {
2047
2050
  if (row.isOverflow && row.data) {
@@ -2117,7 +2120,7 @@ function getDrawData(content, style) {
2117
2120
  layoutText(drawData, style);
2118
2121
  layoutChar(drawData, style, width);
2119
2122
  if (drawData.overflow)
2120
- clipText(drawData, style);
2123
+ clipText(drawData, style, x, width);
2121
2124
  if (textDecoration !== 'none')
2122
2125
  decorationText(drawData, style);
2123
2126
  return drawData;
@@ -2188,6 +2191,8 @@ function getTrimBounds(canvas) {
2188
2191
  const ExportModule = {
2189
2192
  export(leaf, filename, options) {
2190
2193
  this.running = true;
2194
+ const fileType = FileHelper.fileType(filename);
2195
+ options = FileHelper.getExportOptions(options);
2191
2196
  return addTask((success) => new Promise((resolve) => {
2192
2197
  const over = (result) => {
2193
2198
  success(result);
@@ -2196,12 +2201,11 @@ const ExportModule = {
2196
2201
  };
2197
2202
  const { toURL } = Platform;
2198
2203
  const { download } = Platform.origin;
2199
- const fileType = FileHelper.fileType(filename);
2200
2204
  if (filename === 'json') {
2201
- return over({ data: leaf.toJSON() });
2205
+ return over({ data: leaf.toJSON(options.json) });
2202
2206
  }
2203
2207
  else if (fileType === 'json') {
2204
- download(toURL(JSON.stringify(leaf.toJSON()), 'text'), filename);
2208
+ download(toURL(JSON.stringify(leaf.toJSON(options.json)), 'text'), filename);
2205
2209
  return over({ data: true });
2206
2210
  }
2207
2211
  if (filename === 'svg') {
@@ -2213,13 +2217,15 @@ const ExportModule = {
2213
2217
  }
2214
2218
  const { leafer } = leaf;
2215
2219
  if (leafer) {
2220
+ checkLazy(leaf);
2216
2221
  leafer.waitViewCompleted(() => __awaiter(this, void 0, void 0, function* () {
2217
- options = FileHelper.getExportOptions(options);
2218
2222
  let renderBounds, trimBounds, scaleX = 1, scaleY = 1;
2219
2223
  const { worldTransform, isLeafer, isFrame } = leaf;
2220
2224
  const { slice, trim, onCanvas } = options;
2221
2225
  let scale = options.scale || 1;
2222
2226
  let pixelRatio = options.pixelRatio || 1;
2227
+ const smooth = options.smooth === undefined ? leafer.config.smooth : options.smooth;
2228
+ const contextSettings = options.contextSettings || leafer.config.contextSettings;
2223
2229
  if (leaf.isApp) {
2224
2230
  scale *= pixelRatio;
2225
2231
  pixelRatio = leaf.app.pixelRatio;
@@ -2258,7 +2264,7 @@ const ExportModule = {
2258
2264
  renderBounds = leaf.getBounds('render', relative);
2259
2265
  }
2260
2266
  const { x, y, width, height } = new Bounds(renderBounds).scale(scale);
2261
- let canvas = Creator.canvas({ width: Math.round(width), height: Math.round(height), pixelRatio });
2267
+ let canvas = Creator.canvas({ width: Math.round(width), height: Math.round(height), pixelRatio, smooth, contextSettings });
2262
2268
  const renderOptions = { matrix: matrix.scale(1 / scale).invert().translate(-x, -y).withScale(1 / scaleX * scale, 1 / scaleY * scale) };
2263
2269
  if (slice) {
2264
2270
  leaf = leafer;
@@ -2304,6 +2310,12 @@ function addTask(task) {
2304
2310
  tasker.add(() => __awaiter(this, void 0, void 0, function* () { return yield task(resolve); }), { parallel: false });
2305
2311
  });
2306
2312
  }
2313
+ function checkLazy(leaf) {
2314
+ if (leaf.__.__needComputePaint)
2315
+ leaf.__.__computePaint();
2316
+ if (leaf.isBranch)
2317
+ leaf.children.forEach(child => checkLazy(child));
2318
+ }
2307
2319
 
2308
2320
  const canvas = LeaferCanvasBase.prototype;
2309
2321
  const debug = Debug.get('@leafer-ui/export');
@@ -1 +1 @@
1
- import{LeaferCanvasBase as t,Platform as e,canvasPatch as n,Creator as i,LeaferImage as s,FileHelper as o,LeafList as a,DataHelper as r,RenderEvent as d,ChildEvent as l,WatchEvent as c,PropertyEvent as h,LeafHelper as u,BranchHelper as f,Bounds as p,LeafBoundsHelper as _,Debug as g,LeafLevelList as w,LayoutEvent as y,Run as m,ImageManager as v,AnimateEvent as x,ResizeEvent as b,BoundsHelper as B,MatrixHelper as R,AlignHelper as k,ImageEvent as E,AroundHelper as S,PointHelper as L,Direction4 as W,TwoPointBoundsHelper as A,TaskProcessor as O,Matrix as T}from"@leafer/core";export*from"@leafer/core";export{LeaferImage}from"@leafer/core";import{PaintImage as M,ColorConvert as C,PaintGradient as D,Export as I,Group as P,TextConvert as F,Paint as Y,Effect as G}from"@leafer-ui/draw";export*from"@leafer-ui/draw";class U extends t{get allowBackgroundColor(){return!0}init(){this.__createView(),this.__createContext(),this.resize(this.config)}__createView(){this.view=e.origin.createCanvas(1,1)}updateViewSize(){const{width:t,height:e,pixelRatio:n}=this;this.view.width=Math.ceil(t*n),this.view.height=Math.ceil(e*n),this.clientBounds=this.bounds}}n(OffscreenCanvasRenderingContext2D.prototype),n(Path2D.prototype);const{mineType:N}=o;function X(t,n){e.origin={createCanvas:(t,e)=>new OffscreenCanvas(t,e),canvasToDataURL:(t,e,n)=>new Promise(((i,s)=>{t.convertToBlob({type:N(e),quality:n}).then((t=>{var e=new FileReader;e.onload=t=>i(t.target.result),e.onerror=t=>s(t),e.readAsDataURL(t)})).catch((t=>{s(t)}))})),canvasToBolb:(t,e,n)=>t.convertToBlob({type:N(e),quality:n}),canvasSaveAs:(t,e,n)=>new Promise((t=>t())),download(t,e){},loadImage:t=>new Promise(((n,i)=>{!t.startsWith("data:")&&e.image.suffix&&(t+=(t.includes("?")?"&":"?")+e.image.suffix);let s=new XMLHttpRequest;s.open("GET",t,!0),s.responseType="blob",s.onload=()=>{createImageBitmap(s.response).then((t=>{n(t)})).catch((t=>{i(t)}))},s.onerror=t=>i(t),s.send()}))},e.canvas=i.canvas(),e.conicGradientSupport=!!e.canvas.context.createConicGradient}Object.assign(i,{canvas:(t,e)=>new U(t,e),image:t=>new s(t)}),e.name="web",e.isWorker=!0,e.requestRender=function(t){requestAnimationFrame(t)},e.devicePixelRatio=1;const{userAgent:V}=navigator;V.indexOf("Firefox")>-1?(e.conicGradientRotate90=!0,e.intWheelDeltaY=!0):V.indexOf("Safari")>-1&&-1===V.indexOf("Chrome")&&(e.fullImageShadow=!0),V.indexOf("Windows")>-1?(e.os="Windows",e.intWheelDeltaY=!0):V.indexOf("Mac")>-1?e.os="Mac":V.indexOf("Linux")>-1&&(e.os="Linux");class j{get childrenChanged(){return this.hasAdd||this.hasRemove||this.hasVisible}get updatedList(){if(this.hasRemove){const t=new a;return this.__updatedList.list.forEach((e=>{e.leafer&&t.add(e)})),t}return this.__updatedList}constructor(t,e){this.totalTimes=0,this.config={},this.__updatedList=new a,this.target=t,e&&(this.config=r.default(e,this.config)),this.__listenEvents()}start(){this.disabled||(this.running=!0)}stop(){this.running=!1}disable(){this.stop(),this.__removeListenEvents(),this.disabled=!0}update(){this.changed=!0,this.running&&this.target.emit(d.REQUEST)}__onAttrChange(t){this.__updatedList.add(t.target),this.update()}__onChildEvent(t){t.type===l.ADD?(this.hasAdd=!0,this.__pushChild(t.child)):(this.hasRemove=!0,this.__updatedList.add(t.parent)),this.update()}__pushChild(t){this.__updatedList.add(t),t.isBranch&&this.__loopChildren(t)}__loopChildren(t){const{children:e}=t;for(let t=0,n=e.length;t<n;t++)this.__pushChild(e[t])}__onRquestData(){this.target.emitEvent(new c(c.DATA,{updatedList:this.updatedList})),this.__updatedList=new a,this.totalTimes++,this.changed=!1,this.hasVisible=!1,this.hasRemove=!1,this.hasAdd=!1}__listenEvents(){const{target:t}=this;this.__eventIds=[t.on_(h.CHANGE,this.__onAttrChange,this),t.on_([l.ADD,l.REMOVE],this.__onChildEvent,this),t.on_(c.REQUEST,this.__onRquestData,this)]}__removeListenEvents(){this.target.off_(this.__eventIds)}destroy(){this.target&&(this.stop(),this.__removeListenEvents(),this.target=null,this.__updatedList=null)}}const{updateAllMatrix:q,updateBounds:z,updateAllWorldOpacity:H}=u,{pushAllChildBranch:Q,pushAllParent:J}=f;const{worldBounds:Z}=_,$={x:0,y:0,width:1e5,height:1e5};class K{constructor(t){this.updatedBounds=new p,this.beforeBounds=new p,this.afterBounds=new p,t instanceof Array&&(t=new a(t)),this.updatedList=t}setBefore(){this.beforeBounds.setListWithFn(this.updatedList.list,Z)}setAfter(){const{list:t}=this.updatedList;t.some((t=>t.noBounds))?this.afterBounds.set($):this.afterBounds.setListWithFn(t,Z),this.updatedBounds.setList([this.beforeBounds,this.afterBounds])}merge(t){this.updatedList.addList(t.updatedList.list),this.beforeBounds.add(t.beforeBounds),this.afterBounds.add(t.afterBounds),this.updatedBounds.add(t.updatedBounds)}destroy(){this.updatedList=null}}const{updateAllMatrix:tt,updateAllChange:et}=u,nt=g.get("Layouter");class it{constructor(t,e){this.totalTimes=0,this.config={},this.__levelList=new w,this.target=t,e&&(this.config=r.default(e,this.config)),this.__listenEvents()}start(){this.disabled||(this.running=!0)}stop(){this.running=!1}disable(){this.stop(),this.__removeListenEvents(),this.disabled=!0}layout(){if(!this.running)return;const{target:t}=this;this.times=0;try{t.emit(y.START),this.layoutOnce(),t.emitEvent(new y(y.END,this.layoutedBlocks,this.times))}catch(t){nt.error(t)}this.layoutedBlocks=null}layoutAgain(){this.layouting?this.waitAgain=!0:this.layoutOnce()}layoutOnce(){return this.layouting?nt.warn("layouting"):this.times>3?nt.warn("layout max times"):(this.times++,this.totalTimes++,this.layouting=!0,this.target.emit(c.REQUEST),this.totalTimes>1?this.partLayout():this.fullLayout(),this.layouting=!1,void(this.waitAgain&&(this.waitAgain=!1,this.layoutOnce())))}partLayout(){var t;if(!(null===(t=this.__updatedList)||void 0===t?void 0:t.length))return;const e=m.start("PartLayout"),{target:n,__updatedList:i}=this,{BEFORE:s,LAYOUT:o,AFTER:a}=y,r=this.getBlocks(i);r.forEach((t=>t.setBefore())),n.emitEvent(new y(s,r,this.times)),this.extraBlock=null,i.sort(),function(t,e){let n;t.list.forEach((t=>{n=t.__layout,e.without(t)&&!n.proxyZoom&&(n.matrixChanged?(q(t,!0),e.add(t),t.isBranch&&Q(t,e),J(t,e)):n.boundsChanged&&(e.add(t),t.isBranch&&(t.__tempNumber=0),J(t,e)))}))}(i,this.__levelList),function(t){let e,n,i;t.sort(!0),t.levels.forEach((s=>{e=t.levelMap[s];for(let t=0,s=e.length;t<s;t++){if(n=e[t],n.isBranch&&n.__tempNumber){i=n.children;for(let t=0,e=i.length;t<e;t++)i[t].isBranch||z(i[t])}z(n)}}))}(this.__levelList),function(t){t.list.forEach((t=>{t.__layout.opacityChanged&&H(t),t.__updateChange()}))}(i),this.extraBlock&&r.push(this.extraBlock),r.forEach((t=>t.setAfter())),n.emitEvent(new y(o,r,this.times)),n.emitEvent(new y(a,r,this.times)),this.addBlocks(r),this.__levelList.reset(),this.__updatedList=null,m.end(e)}fullLayout(){const t=m.start("FullLayout"),{target:e}=this,{BEFORE:n,LAYOUT:i,AFTER:s}=y,o=this.getBlocks(new a(e));e.emitEvent(new y(n,o,this.times)),it.fullLayout(e),o.forEach((t=>{t.setAfter()})),e.emitEvent(new y(i,o,this.times)),e.emitEvent(new y(s,o,this.times)),this.addBlocks(o),m.end(t)}static fullLayout(t){tt(t,!0),t.isBranch?f.updateBounds(t):u.updateBounds(t),et(t)}addExtra(t){if(!this.__updatedList.has(t)){const{updatedList:e,beforeBounds:n}=this.extraBlock||(this.extraBlock=new K([]));e.length?n.add(t.__world):n.set(t.__world),e.add(t)}}createBlock(t){return new K(t)}getBlocks(t){return[this.createBlock(t)]}addBlocks(t){this.layoutedBlocks?this.layoutedBlocks.push(...t):this.layoutedBlocks=t}__onReceiveWatchData(t){this.__updatedList=t.data.updatedList}__listenEvents(){const{target:t}=this;this.__eventIds=[t.on_(y.REQUEST,this.layout,this),t.on_(y.AGAIN,this.layoutAgain,this),t.on_(c.DATA,this.__onReceiveWatchData,this)]}__removeListenEvents(){this.target.off_(this.__eventIds)}destroy(){this.target&&(this.stop(),this.__removeListenEvents(),this.target=this.config=null)}}const st=g.get("Renderer");class ot{get needFill(){return!(this.canvas.allowBackgroundColor||!this.config.fill)}constructor(t,e,n){this.FPS=60,this.totalTimes=0,this.times=0,this.config={usePartRender:!0,maxFPS:60},this.target=t,this.canvas=e,n&&(this.config=r.default(n,this.config)),this.__listenEvents(),this.__requestRender()}start(){this.running=!0}stop(){this.running=!1}update(){this.changed=!0}requestLayout(){this.target.emit(y.REQUEST)}render(t){if(!this.running||!this.canvas.view)return void(this.changed=!0);const{target:e}=this;this.times=0,this.totalBounds=new p,st.log(e.innerName,"---\x3e");try{this.emitRender(d.START),this.renderOnce(t),this.emitRender(d.END,this.totalBounds),v.clearRecycled()}catch(t){this.rendering=!1,st.error(t)}st.log("-------------|")}renderAgain(){this.rendering?this.waitAgain=!0:this.renderOnce()}renderOnce(t){if(this.rendering)return st.warn("rendering");if(this.times>3)return st.warn("render max times");if(this.times++,this.totalTimes++,this.rendering=!0,this.changed=!1,this.renderBounds=new p,this.renderOptions={},t)this.emitRender(d.BEFORE),t();else{if(this.requestLayout(),this.ignore)return void(this.ignore=this.rendering=!1);this.emitRender(d.BEFORE),this.config.usePartRender&&this.totalTimes>1?this.partRender():this.fullRender()}this.emitRender(d.RENDER,this.renderBounds,this.renderOptions),this.emitRender(d.AFTER,this.renderBounds,this.renderOptions),this.updateBlocks=null,this.rendering=!1,this.waitAgain&&(this.waitAgain=!1,this.renderOnce())}partRender(){const{canvas:t,updateBlocks:e}=this;if(!e)return st.warn("PartRender: need update attr");this.mergeBlocks(),e.forEach((e=>{t.bounds.hit(e)&&!e.isEmpty()&&this.clipRender(e)}))}clipRender(t){const e=m.start("PartRender"),{canvas:n}=this,i=t.getIntersect(n.bounds),s=t.includes(this.target.__world),o=new p(i);n.save(),s&&!g.showRepaint?n.clear():(i.spread(10+1/this.canvas.pixelRatio).ceil(),n.clearWorld(i,!0),n.clipWorld(i,!0)),this.__render(i,s,o),n.restore(),m.end(e)}fullRender(){const t=m.start("FullRender"),{canvas:e}=this;e.save(),e.clear(),this.__render(e.bounds,!0),e.restore(),m.end(t)}__render(t,e,n){const i=t.includes(this.target.__world)?{includes:e}:{bounds:t,includes:e};this.needFill&&this.canvas.fillWorld(t,this.config.fill),g.showRepaint&&this.canvas.strokeWorld(t,"red"),this.target.__render(this.canvas,i),this.renderBounds=n||t,this.renderOptions=i,this.totalBounds.isEmpty()?this.totalBounds=this.renderBounds:this.totalBounds.add(this.renderBounds),g.showHitView&&this.renderHitView(i),g.showBoundsView&&this.renderBoundsView(i),this.canvas.updateRender()}renderHitView(t){}renderBoundsView(t){}addBlock(t){this.updateBlocks||(this.updateBlocks=[]),this.updateBlocks.push(t)}mergeBlocks(){const{updateBlocks:t}=this;if(t){const e=new p;e.setList(t),t.length=0,t.push(e)}}__requestRender(){const t=Date.now();e.requestRender((()=>{this.FPS=Math.min(60,Math.ceil(1e3/(Date.now()-t))),this.running&&(this.target.emit(x.FRAME),this.changed&&this.canvas.view&&this.render(),this.target.emit(d.NEXT)),this.target&&this.__requestRender()}))}__onResize(t){if(!this.canvas.unreal){if(t.bigger||!t.samePixelRatio){const{width:e,height:n}=t.old;if(!new p(0,0,e,n).includes(this.target.__world)||this.needFill||!t.samePixelRatio)return this.addBlock(this.canvas.bounds),void this.target.forceUpdate("surface")}this.addBlock(new p(0,0,1,1)),this.changed=!0}}__onLayoutEnd(t){t.data&&t.data.map((t=>{let e;t.updatedList&&t.updatedList.list.some((t=>(e=!t.__world.width||!t.__world.height,e&&(t.isLeafer||st.tip(t.innerName,": empty"),e=!t.isBranch||t.isBranchLeaf),e))),this.addBlock(e?this.canvas.bounds:t.updatedBounds)}))}emitRender(t,e,n){this.target.emitEvent(new d(t,this.times,e,n))}__listenEvents(){const{target:t}=this;this.__eventIds=[t.on_(d.REQUEST,this.update,this),t.on_(y.END,this.__onLayoutEnd,this),t.on_(d.AGAIN,this.renderAgain,this),t.on_(b.RESIZE,this.__onResize,this)]}__removeListenEvents(){this.target.off_(this.__eventIds)}destroy(){this.target&&(this.stop(),this.__removeListenEvents(),this.target=this.canvas=this.config=null)}}function at(t,e){let n;const{rows:i,decorationY:s,decorationHeight:o}=t.__.__textDrawData;for(let t=0,a=i.length;t<a;t++)n=i[t],n.text?e.fillText(n.text,n.x,n.y):n.data&&n.data.forEach((t=>{e.fillText(t.char,t.x,n.y)})),s&&e.fillRect(n.x,n.y+s,n.width,o)}function rt(t,e,n){const{strokeAlign:i}=e.__,s="string"!=typeof t;switch(i){case"center":n.setStroke(s?void 0:t,e.__.strokeWidth,e.__),s?ct(t,!0,e,n):lt(e,n);break;case"inside":dt("inside",t,s,e,n);break;case"outside":dt("outside",t,s,e,n)}}function dt(t,e,n,i,s){const{__strokeWidth:o,__font:a}=i.__,r=s.getSameCanvas(!0,!0);r.setStroke(n?void 0:e,2*o,i.__),r.font=a,n?ct(e,!0,i,r):lt(i,r),r.blendMode="outside"===t?"destination-out":"destination-in",at(i,r),r.blendMode="normal",i.__worldFlipped?s.copyWorldByReset(r,i.__nowWorld):s.copyWorldToInner(r,i.__nowWorld,i.__layout.renderBounds),r.recycle(i.__nowWorld)}function lt(t,e){let n;const{rows:i,decorationY:s,decorationHeight:o}=t.__.__textDrawData;for(let t=0,a=i.length;t<a;t++)n=i[t],n.text?e.strokeText(n.text,n.x,n.y):n.data&&n.data.forEach((t=>{e.strokeText(t.char,t.x,n.y)})),s&&e.strokeRect(n.x,n.y+s,n.width,o)}function ct(t,e,n,i){let s;for(let o=0,a=t.length;o<a;o++)s=t[o],s.image&&M.checkImage(n,i,s,!1)||s.style&&(i.strokeStyle=s.style,s.blendMode?(i.saveBlendMode(s.blendMode),e?lt(n,i):i.stroke(),i.restoreBlendMode()):e?lt(n,i):i.stroke())}Object.assign(i,{watcher:(t,e)=>new j(t,e),layouter:(t,e)=>new it(t,e),renderer:(t,e,n)=>new ot(t,e,n),selector:(t,e)=>{},interaction:(t,e,n,i)=>{}}),e.layout=it.fullLayout;const{getSpread:ht,getOuterOf:ut,getByMove:ft,getIntersectData:pt}=B;let _t;function gt(t,e,n){if("object"!=typeof e||!1===e.visible||0===e.opacity)return;const{boxBounds:i}=n.__layout;switch(e.type){case"solid":let{type:s,blendMode:o,color:a,opacity:r}=e;return{type:s,blendMode:o,style:C.string(a,r)};case"image":return M.image(n,t,e,i,!_t||!_t[e.url]);case"linear":return D.linearGradient(e,i);case"radial":return D.radialGradient(e,i);case"angular":return D.conicGradient(e,i);default:return void 0!==e.r?{type:"solid",style:C.string(e)}:void 0}}const wt={compute:function(t,e){const n=e.__,i=[];let s,o=n.__input[t];o instanceof Array||(o=[o]),_t=M.recycleImage(t,n);for(let n,s=0,a=o.length;s<a;s++)n=gt(t,o[s],e),n&&i.push(n);n["_"+t]=i.length?i:void 0,i.length&&i[0].image&&(s=i[0].image.hasOpacityPixel),"fill"===t?n.__pixelFill=s:n.__pixelStroke=s},fill:function(t,e,n){n.fillStyle=t,e.__.__font?at(e,n):e.__.windingRule?n.fill(e.__.windingRule):n.fill()},fills:function(t,e,n){let i;const{windingRule:s,__font:o}=e.__;for(let a=0,r=t.length;a<r;a++)i=t[a],i.image&&M.checkImage(e,n,i,!o)||i.style&&(n.fillStyle=i.style,i.transform?(n.save(),n.transform(i.transform),i.blendMode&&(n.blendMode=i.blendMode),o?at(e,n):s?n.fill(s):n.fill(),n.restore()):i.blendMode?(n.saveBlendMode(i.blendMode),o?at(e,n):s?n.fill(s):n.fill(),n.restoreBlendMode()):o?at(e,n):s?n.fill(s):n.fill())},fillText:at,stroke:function(t,e,n){const i=e.__,{__strokeWidth:s,strokeAlign:o,__font:a}=i;if(s)if(a)rt(t,e,n);else switch(o){case"center":n.setStroke(t,s,i),n.stroke();break;case"inside":n.save(),n.setStroke(t,2*s,i),i.windingRule?n.clip(i.windingRule):n.clip(),n.stroke(),n.restore();break;case"outside":const o=n.getSameCanvas(!0,!0);o.setStroke(t,2*s,i),e.__drawRenderPath(o),o.stroke(),i.windingRule?o.clip(i.windingRule):o.clip(),o.clearWorld(e.__layout.renderBounds),e.__worldFlipped?n.copyWorldByReset(o,e.__nowWorld):n.copyWorldToInner(o,e.__nowWorld,e.__layout.renderBounds),o.recycle(e.__nowWorld)}},strokes:function(t,e,n){const i=e.__,{__strokeWidth:s,strokeAlign:o,__font:a}=i;if(s)if(a)rt(t,e,n);else switch(o){case"center":n.setStroke(void 0,s,i),ct(t,!1,e,n);break;case"inside":n.save(),n.setStroke(void 0,2*s,i),i.windingRule?n.clip(i.windingRule):n.clip(),ct(t,!1,e,n),n.restore();break;case"outside":const{renderBounds:o}=e.__layout,a=n.getSameCanvas(!0,!0);e.__drawRenderPath(a),a.setStroke(void 0,2*s,i),ct(t,!1,e,a),i.windingRule?a.clip(i.windingRule):a.clip(),a.clearWorld(o),e.__worldFlipped?n.copyWorldByReset(a,e.__nowWorld):n.copyWorldToInner(a,e.__nowWorld,o),a.recycle(e.__nowWorld)}},strokeText:rt,drawTextStroke:lt,shape:function(t,e,n){const i=e.getSameCanvas(),s=t.__nowWorld;let o,a,r,d,{scaleX:l,scaleY:c}=s;if(l<0&&(l=-l),c<0&&(c=-c),e.bounds.includes(s))d=i,o=r=s;else{const{renderShapeSpread:i}=t.__layout,h=pt(i?ht(e.bounds,l===c?i*l:[i*c,i*l]):e.bounds,s);a=e.bounds.getFitMatrix(h);let{a:u,d:f}=a;if(a.a<1&&(d=e.getSameCanvas(),t.__renderShape(d,n),l*=u,c*=f),r=ut(s,a),o=ft(r,-a.e,-a.f),n.matrix){const{matrix:t}=n;a.multiply(t),u*=t.scaleX,f*=t.scaleY}n=Object.assign(Object.assign({},n),{matrix:a.withScale(u,f)})}return t.__renderShape(i,n),{canvas:i,matrix:a,bounds:o,worldCanvas:d,shapeBounds:r,scaleX:l,scaleY:c}}};let yt={};const{get:mt,rotateOfOuter:vt,translate:xt,scaleOfOuter:bt,scale:Bt,rotate:Rt}=R;function kt(t,e,n,i,s,o,a){const r=mt();xt(r,e.x+n,e.y+i),Bt(r,s,o),a&&vt(r,{x:e.x+e.width/2,y:e.y+e.height/2},a),t.transform=r}function Et(t,e,n,i,s,o,a){const r=mt();xt(r,e.x+n,e.y+i),s&&Bt(r,s,o),a&&Rt(r,a),t.transform=r}function St(t,e,n,i,s,o,a,r,d,l){const c=mt();if(d)if("center"===l)vt(c,{x:n/2,y:i/2},d);else switch(Rt(c,d),d){case 90:xt(c,i,0);break;case 180:xt(c,n,i);break;case 270:xt(c,0,n)}yt.x=e.x+s,yt.y=e.y+o,xt(c,yt.x,yt.y),a&&bt(c,yt,a,r),t.transform=c}const{get:Lt,translate:Wt}=R,At=new p,Ot={};function Tt(t,e,n,i){const{blendMode:s}=n;s&&(t.blendMode=s),t.data=Mt(n,i,e)}function Mt(t,e,n){let{width:i,height:s}=n;t.padding&&(e=At.set(e).shrink(t.padding));const{opacity:o,mode:a,align:r,offset:d,scale:l,size:c,rotation:h,repeat:u}=t,f=e.width===i&&e.height===s,p={mode:a},_="center"!==r&&(h||0)%180==90,g=_?s:i,w=_?i:s;let y,m,v=0,x=0;if(a&&"cover"!==a&&"fit"!==a)c?(y=("number"==typeof c?c:c.width)/i,m=("number"==typeof c?c:c.height)/s):l&&(y="number"==typeof l?l:l.x,m="number"==typeof l?l:l.y);else if(!f||h){const t=e.width/g,n=e.height/w;y=m="fit"===a?Math.min(t,n):Math.max(t,n),v+=(e.width-i*y)/2,x+=(e.height-s*m)/2}if(r){const t={x:v,y:x,width:g,height:w};y&&(t.width*=y,t.height*=m),k.toPoint(r,t,e,Ot,!0),v+=Ot.x,x+=Ot.y}switch(d&&(v+=d.x,x+=d.y),a){case"strench":f||(i=e.width,s=e.height);break;case"normal":case"clip":(v||x||y||h)&&Et(p,e,v,x,y,m,h);break;case"repeat":(!f||y||h)&&St(p,e,i,s,v,x,y,m,h,r),u||(p.repeat="repeat");break;default:y&&kt(p,e,v,x,y,m,h)}return p.transform||(e.x||e.y)&&(p.transform=Lt(),Wt(p.transform,e.x,e.y)),y&&"strench"!==a&&(p.scaleX=y,p.scaleY=m),p.width=i,p.height=s,o&&(p.opacity=o),u&&(p.repeat="string"==typeof u?"x"===u?"repeat-x":"repeat-y":"repeat"),p}let Ct,Dt=new p;const{isSame:It}=B;function Pt(t,e,n,i,s,o){if("fill"===e&&!t.__.__naturalWidth){const e=t.__;if(e.__naturalWidth=i.width/e.pixelRatio,e.__naturalHeight=i.height/e.pixelRatio,e.__autoSide)return t.forceUpdate("width"),t.__proxyData&&(t.setProxyAttr("width",e.width),t.setProxyAttr("height",e.height)),!1}return s.data||Tt(s,i,n,o),!0}function Ft(t,e){Ut(t,E.LOAD,e)}function Yt(t,e){Ut(t,E.LOADED,e)}function Gt(t,e,n){e.error=n,t.forceUpdate("surface"),Ut(t,E.ERROR,e)}function Ut(t,e,n){t.hasEvent(e)&&t.emitEvent(new E(e,n))}function Nt(t,e){const{leafer:n}=t;n&&n.viewReady&&(n.renderer.ignore=e)}const{get:Xt,scale:Vt,copy:jt}=R,{ceil:qt,abs:zt}=Math;function Ht(t,n,i){let{scaleX:s,scaleY:o}=v.patternLocked?t.__world:t.__nowWorld;const a=s+"-"+o;if(n.patternId===a||t.destroyed)return!1;{s=zt(s),o=zt(o);const{image:t,data:r}=n;let d,l,{width:c,height:h,scaleX:u,scaleY:f,opacity:p,transform:_,repeat:g}=r;u&&(l=Xt(),jt(l,_),Vt(l,1/u,1/f),s*=u,o*=f),s*=i,o*=i,c*=s,h*=o;const w=c*h;if(!g&&w>e.image.maxCacheSize)return!1;let y=e.image.maxPatternSize;if(!t.isSVG){const e=t.width*t.height;y>e&&(y=e)}w>y&&(d=Math.sqrt(w/y)),d&&(s/=d,o/=d,c/=d,h/=d),u&&(s/=u,o/=f),(_||1!==s||1!==o)&&(l||(l=Xt(),_&&jt(l,_)),Vt(l,1/s,1/o));const m=t.getCanvas(qt(c)||1,qt(h)||1,p),v=t.getPattern(m,g||e.origin.noRepeat||"no-repeat",l,n);return n.style=v,n.patternId=a,!0}}function Qt(t,e,n,i){return new(n||(n=Promise))((function(s,o){function a(t){try{d(i.next(t))}catch(t){o(t)}}function r(t){try{d(i.throw(t))}catch(t){o(t)}}function d(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,r)}d((i=i.apply(t,e||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const{abs:Jt}=Math;const Zt={image:function(t,e,n,i,s){let o,a;const r=v.get(n);return Ct&&n===Ct.paint&&It(i,Ct.boxBounds)?o=Ct.leafPaint:(o={type:n.type,image:r},Ct=r.use>1?{leafPaint:o,paint:n,boxBounds:Dt.set(i)}:null),(s||r.loading)&&(a={image:r,attrName:e,attrValue:n}),r.ready?(Pt(t,e,n,r,o,i),s&&(Ft(t,a),Yt(t,a))):r.error?s&&Gt(t,a,r.error):(Nt(t,!0),s&&Ft(t,a),o.loadId=r.load((()=>{Nt(t,!1),t.destroyed||(Pt(t,e,n,r,o,i)&&(r.hasOpacityPixel&&(t.__layout.hitCanvasChanged=!0),t.forceUpdate("surface")),Yt(t,a)),o.loadId=null}),(e=>{Nt(t,!1),Gt(t,a,e),o.loadId=null}))),o},checkImage:function(t,n,i,s){const{scaleX:o,scaleY:a}=v.patternLocked?t.__world:t.__nowWorld;if(i.data&&i.patternId!==o+"-"+a){const{data:r}=i;if(s)if(r.repeat)s=!1;else{let{width:t,height:i}=r;t*=Jt(o)*n.pixelRatio,i*=Jt(a)*n.pixelRatio,r.scaleX&&(t*=r.scaleX,i*=r.scaleY),s=t*i>e.image.maxCacheSize}return s?(n.save(),n.clip(),i.blendMode&&(n.blendMode=i.blendMode),r.opacity&&(n.opacity*=r.opacity),r.transform&&n.transform(r.transform),n.drawImage(i.image.view,0,0,r.width,r.height),n.restore(),!0):(!i.style||I.running?Ht(t,i,n.pixelRatio):i.patternTask||(i.patternTask=v.patternTasker.add((()=>Qt(this,void 0,void 0,(function*(){i.patternTask=null,n.bounds.hit(t.__nowWorld)&&Ht(t,i,n.pixelRatio),t.forceUpdate("surface")}))),300)),!1)}return!1},createPattern:Ht,recycleImage:function(t,e){const n=e["_"+t];if(n instanceof Array){let i,s,o,a;for(let r=0,d=n.length;r<d;r++)i=n[r].image,a=i&&i.url,a&&(s||(s={}),s[a]=!0,v.recycle(i),i.loading&&(o||(o=e.__input&&e.__input[t]||[],o instanceof Array||(o=[o])),i.unload(n[r].loadId,!o.some((t=>t.url===a)))));return s}return null},createData:Tt,getPatternData:Mt,fillOrFitMode:kt,clipMode:Et,repeatMode:St},{toPoint:$t}=S,Kt={},te={};function ee(t,e,n){let i;for(let s=0,o=e.length;s<o;s++)i=e[s],"string"==typeof i?t.addColorStop(s/(o-1),C.string(i,n)):t.addColorStop(i.offset,C.string(i.color,n))}const{getAngle:ne,getDistance:ie}=L,{get:se,rotateOfOuter:oe,scaleOfOuter:ae}=R,{toPoint:re}=S,de={},le={};function ce(t,e,n,i,s){let o;const{width:a,height:r}=t;if(a!==r||i){const t=ne(e,n);o=se(),s?(ae(o,e,a/r*(i||1),1),oe(o,e,t+90)):(ae(o,e,1,a/r*(i||1)),oe(o,e,t))}return o}const{getDistance:he}=L,{toPoint:ue}=S,fe={},pe={};const _e={linearGradient:function(t,n){let{from:i,to:s,type:o,blendMode:a,opacity:r}=t;$t(i||"top",n,Kt),$t(s||"bottom",n,te);const d=e.canvas.createLinearGradient(Kt.x,Kt.y,te.x,te.y);ee(d,t.stops,r);const l={type:o,style:d};return a&&(l.blendMode=a),l},radialGradient:function(t,n){let{from:i,to:s,type:o,opacity:a,blendMode:r,stretch:d}=t;re(i||"center",n,de),re(s||"bottom",n,le);const l=e.canvas.createRadialGradient(de.x,de.y,0,de.x,de.y,ie(de,le));ee(l,t.stops,a);const c={type:o,style:l},h=ce(n,de,le,d,!0);return h&&(c.transform=h),r&&(c.blendMode=r),c},conicGradient:function(t,n){let{from:i,to:s,type:o,opacity:a,blendMode:r,stretch:d}=t;ue(i||"center",n,fe),ue(s||"bottom",n,pe);const l=e.conicGradientSupport?e.canvas.createConicGradient(0,fe.x,fe.y):e.canvas.createRadialGradient(fe.x,fe.y,0,fe.x,fe.y,he(fe,pe));ee(l,t.stops,a);const c={type:o,style:l},h=ce(n,fe,pe,d||1,e.conicGradientRotate90);return h&&(c.transform=h),r&&(c.blendMode=r),c},getTransform:ce},{copy:ge,toOffsetOutBounds:we}=B,ye={},me={};function ve(t,n,i,s){const{bounds:o,shapeBounds:a}=s;if(e.fullImageShadow){if(ge(ye,t.bounds),ye.x+=n.x-a.x,ye.y+=n.y-a.y,i){const{matrix:t}=s;ye.x-=(o.x+(t?t.e:0)+o.width/2)*(i-1),ye.y-=(o.y+(t?t.f:0)+o.height/2)*(i-1),ye.width*=i,ye.height*=i}t.copyWorld(s.canvas,t.bounds,ye)}else i&&(ge(ye,n),ye.x-=n.width/2*(i-1),ye.y-=n.height/2*(i-1),ye.width*=i,ye.height*=i),t.copyWorld(s.canvas,a,i?ye:n)}const{toOffsetOutBounds:xe}=B,be={};const Be={shadow:function(t,e,n){let i,s;const{__nowWorld:o,__layout:a}=t,{shadow:r}=t.__,{worldCanvas:d,bounds:l,shapeBounds:c,scaleX:h,scaleY:u}=n,f=e.getSameCanvas(),p=r.length-1;we(l,me),r.forEach(((r,_)=>{f.setWorldShadow(me.offsetX+r.x*h,me.offsetY+r.y*u,r.blur*h,r.color),s=r.spread?1+2*r.spread/(a.boxBounds.width+2*(a.strokeBoxSpread||0)):0,ve(f,me,s,n),i=l,r.box&&(f.restore(),f.save(),d&&(f.copyWorld(f,l,o,"copy"),i=o),d?f.copyWorld(d,o,o,"destination-out"):f.copyWorld(n.canvas,c,l,"destination-out")),t.__worldFlipped?e.copyWorldByReset(f,i,o,r.blendMode):e.copyWorldToInner(f,i,a.renderBounds,r.blendMode),p&&_<p&&f.clearWorld(i,!0)})),f.recycle(i)},innerShadow:function(t,e,n){let i,s;const{__nowWorld:o,__layout:a}=t,{innerShadow:r}=t.__,{worldCanvas:d,bounds:l,shapeBounds:c,scaleX:h,scaleY:u}=n,f=e.getSameCanvas(),p=r.length-1;xe(l,be),r.forEach(((r,_)=>{f.save(),f.setWorldShadow(be.offsetX+r.x*h,be.offsetY+r.y*u,r.blur*h),s=r.spread?1-2*r.spread/(a.boxBounds.width+2*(a.strokeBoxSpread||0)):0,ve(f,be,s,n),f.restore(),d?(f.copyWorld(f,l,o,"copy"),f.copyWorld(d,o,o,"source-out"),i=o):(f.copyWorld(n.canvas,c,l,"source-out"),i=l),f.fillWorld(i,r.color,"source-in"),t.__worldFlipped?e.copyWorldByReset(f,i,o,r.blendMode):e.copyWorldToInner(f,i,a.renderBounds,r.blendMode),p&&_<p&&f.clearWorld(i,!0)})),f.recycle(i)},blur:function(t,e,n){const{blur:i}=t.__;n.setWorldBlur(i*t.__nowWorld.a),n.copyWorldToInner(e,t.__nowWorld,t.__layout.renderBounds),n.filter="none"},backgroundBlur:function(t,e,n){}},{excludeRenderBounds:Re}=_;function ke(t,e,n,i,s,o){switch(e){case"alpha":!function(t,e,n,i){const s=t.__nowWorld;n.resetTransform(),n.opacity=1,n.useMask(i,s),i.recycle(s),Se(t,e,n,1)}(t,n,i,s);break;case"opacity-path":Se(t,n,i,o);break;case"path":n.restore()}}function Ee(t){return t.getSameCanvas(!1,!0)}function Se(t,e,n,i){const s=t.__nowWorld;e.resetTransform(),e.opacity=i,e.copyWorld(n,s),n.recycle(s)}P.prototype.__renderMask=function(t,e){let n,i,s,o,a;const{children:r}=this;for(let d=0,l=r.length;d<l;d++)n=r[d],n.__.mask&&(a&&(ke(this,a,t,s,i,o),i=s=null),"path"===n.__.mask?(n.opacity<1?(a="opacity-path",o=n.opacity,s||(s=Ee(t))):(a="path",t.save()),n.__clip(s||t,e)):(a="alpha",i||(i=Ee(t)),s||(s=Ee(t)),n.__render(i,e)),"clipping"!==n.__.mask)||Re(n,e)||n.__render(s||t,e);ke(this,a,t,s,i,o)};const Le=">)]}%!?,.:;'\"》)」〉』〗】〕}┐>’”!?,、。:;‰",We=Le+"_#~&*+\\=|≮≯≈≠=…",Ae=new RegExp([[19968,40959],[13312,19903],[131072,173791],[173824,177983],[177984,178207],[178208,183983],[183984,191471],[196608,201551],[201552,205743],[11904,12031],[12032,12255],[12272,12287],[12288,12351],[12736,12783],[12800,13055],[13056,13311],[63744,64255],[65072,65103],[127488,127743],[194560,195103]].map((([t,e])=>`[\\u${t.toString(16)}-\\u${e.toString(16)}]`)).join("|"));function Oe(t){const e={};return t.split("").forEach((t=>e[t]=!0)),e}const Te=Oe("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"),Me=Oe("{[(<'\"《(「〈『〖【〔{┌<‘“=¥¥$€££¢¢"),Ce=Oe(Le),De=Oe(We),Ie=Oe("- —/~|┆·");var Pe;!function(t){t[t.Letter=0]="Letter",t[t.Single=1]="Single",t[t.Before=2]="Before",t[t.After=3]="After",t[t.Symbol=4]="Symbol",t[t.Break=5]="Break"}(Pe||(Pe={}));const{Letter:Fe,Single:Ye,Before:Ge,After:Ue,Symbol:Ne,Break:Xe}=Pe;function Ve(t){return Te[t]?Fe:Ie[t]?Xe:Me[t]?Ge:Ce[t]?Ue:De[t]?Ne:Ae.test(t)?Ye:Fe}const je={trimRight(t){const{words:e}=t;let n,i=0,s=e.length;for(let o=s-1;o>-1&&(n=e[o].data[0]," "===n.char);o--)i++,t.width-=n.width;i&&e.splice(s-i,i)}};function qe(t,e,n){switch(e){case"title":return n?t.toUpperCase():t;case"upper":return t.toUpperCase();case"lower":return t.toLowerCase();default:return t}}const{trimRight:ze}=je,{Letter:He,Single:Qe,Before:Je,After:Ze,Symbol:$e,Break:Ke}=Pe;let tn,en,nn,sn,on,an,rn,dn,ln,cn,hn,un,fn,pn,_n,gn,wn=[];function yn(t,e){ln&&!dn&&(dn=ln),tn.data.push({char:t,width:e}),nn+=e}function mn(){sn+=nn,tn.width=nn,en.words.push(tn),tn={data:[]},nn=0}function vn(){pn&&(_n.paraNumber++,en.paraStart=!0,pn=!1),ln&&(en.startCharSize=dn,en.endCharSize=ln,dn=0),en.width=sn,gn.width&&ze(en),wn.push(en),en={words:[]},sn=0}const xn=0,bn=1,Bn=2;const{top:Rn,right:kn,bottom:En,left:Sn}=W;function Ln(t,e,n){const{bounds:i,rows:s}=t;i[e]+=n;for(let t=0;t<s.length;t++)s[t][e]+=n}const Wn={getDrawData:function(t,n){"string"!=typeof t&&(t=String(t));let i=0,s=0,o=n.__getInput("width")||0,a=n.__getInput("height")||0;const{textDecoration:r,__font:d,__padding:l}=n;l&&(o&&(i=l[Sn],o-=l[kn]+l[Sn]),a&&(s=l[Rn],a-=l[Rn]+l[En]));const c={bounds:{x:i,y:s,width:o,height:a},rows:[],paraNumber:0,font:e.canvas.font=d};return function(t,n,i){_n=t,wn=t.rows,gn=t.bounds;const{__letterSpacing:s,paraIndent:o,textCase:a}=i,{canvas:r}=e,{width:d,height:l}=gn;if(d||l||s||"none"!==a){const t="none"!==i.textWrap,e="break"===i.textWrap;pn=!0,hn=null,dn=rn=ln=nn=sn=0,tn={data:[]},en={words:[]};for(let i=0,l=n.length;i<l;i++)an=n[i],"\n"===an?(nn&&mn(),en.paraEnd=!0,vn(),pn=!0):(cn=Ve(an),cn===He&&"none"!==a&&(an=qe(an,a,!nn)),rn=r.measureText(an).width,s&&(s<0&&(ln=rn),rn+=s),un=cn===Qe&&(hn===Qe||hn===He)||hn===Qe&&cn!==Ze,fn=!(cn!==Je&&cn!==Qe||hn!==$e&&hn!==Ze),on=pn&&o?d-o:d,t&&d&&sn+nn+rn>on&&(e?(nn&&mn(),vn()):(fn||(fn=cn===He&&hn==Ze),un||fn||cn===Ke||cn===Je||cn===Qe||nn+rn>on?(nn&&mn(),vn()):vn()))," "===an&&!0!==pn&&sn+nn===0||(cn===Ke?(" "===an&&nn&&mn(),yn(an,rn),mn()):un||fn?(nn&&mn(),yn(an,rn)):yn(an,rn)),hn=cn);nn&&mn(),sn&&vn(),wn.length>0&&(wn[wn.length-1].paraEnd=!0)}else n.split("\n").forEach((t=>{_n.paraNumber++,wn.push({x:o||0,text:t,width:r.measureText(t).width,paraStart:!0})}))}(c,t,n),l&&function(t,e,n,i,s){if(!i)switch(n.textAlign){case"left":Ln(e,"x",t[Sn]);break;case"right":Ln(e,"x",-t[kn])}if(!s)switch(n.verticalAlign){case"top":Ln(e,"y",t[Rn]);break;case"bottom":Ln(e,"y",-t[En])}}(l,c,n,o,a),function(t,e){const{rows:n,bounds:i}=t,{__lineHeight:s,__baseLine:o,__letterSpacing:a,__clipText:r,textAlign:d,verticalAlign:l,paraSpacing:c}=e;let h,u,f,{x:p,y:_,width:g,height:w}=i,y=s*n.length+(c?c*(t.paraNumber-1):0),m=o;if(r&&y>w)y=Math.max(w,s),t.overflow=n.length;else switch(l){case"middle":_+=(w-y)/2;break;case"bottom":_+=w-y}m+=_;for(let o=0,l=n.length;o<l;o++){if(h=n[o],h.x=p,h.width<g||h.width>g&&!r)switch(d){case"center":h.x+=(g-h.width)/2;break;case"right":h.x+=g-h.width}h.paraStart&&c&&o>0&&(m+=c),h.y=m,m+=s,t.overflow>o&&m>y&&(h.isOverflow=!0,t.overflow=o+1),u=h.x,f=h.width,a<0&&(h.width<0?(f=-h.width+e.fontSize+a,u-=f,f+=e.fontSize):f-=a),u<i.x&&(i.x=u),f>i.width&&(i.width=f),r&&g&&g<f&&(h.isOverflow=!0,t.overflow||(t.overflow=n.length))}i.y=_,i.height=y}(c,n),function(t,e,n,i){const{rows:s}=t,{textAlign:o,paraIndent:a,letterSpacing:r}=e;let d,l,c,h,u;s.forEach((t=>{t.words&&(c=a&&t.paraStart?a:0,l=n&&"justify"===o&&t.words.length>1?(n-t.width-c)/(t.words.length-1):0,h=r||t.isOverflow?xn:l>.01?bn:Bn,t.isOverflow&&!r&&(t.textMode=!0),h===Bn?(t.x+=c,function(t){t.text="",t.words.forEach((e=>{e.data.forEach((e=>{t.text+=e.char}))}))}(t)):(t.x+=c,d=t.x,t.data=[],t.words.forEach((e=>{h===bn?(u={char:"",x:d},d=function(t,e,n){return t.forEach((t=>{n.char+=t.char,e+=t.width})),e}(e.data,d,u),(t.isOverflow||" "!==u.char)&&t.data.push(u)):d=function(t,e,n,i){return t.forEach((t=>{(i||" "!==t.char)&&(t.x=e,n.push(t)),e+=t.width})),e}(e.data,d,t.data,t.isOverflow),!t.paraEnd&&l&&(d+=l,t.width+=l)}))),t.words=null)}))}(c,n,o),c.overflow&&function(t,n){const{rows:i,overflow:s}=t;let{textOverflow:o}=n;if(i.splice(s),o&&"show"!==o){let t,a;"hide"===o?o="":"ellipsis"===o&&(o="...");const r=o?e.canvas.measureText(o).width:0,d=n.x+n.width-r;("none"===n.textWrap?i:[i[s-1]]).forEach((e=>{if(e.isOverflow&&e.data){let n=e.data.length-1;for(let i=n;i>-1&&(t=e.data[i],a=t.x+t.width,!(i===n&&a<d));i--){if(a<d&&" "!==t.char){e.data.splice(i+1),e.width-=t.width;break}e.width-=t.width}e.width+=r,e.data.push({char:o,x:a}),e.textMode&&function(t){t.text="",t.data.forEach((e=>{t.text+=e.char})),t.data=null}(e)}}))}}(c,n),"none"!==r&&function(t,e){const{fontSize:n}=e;switch(t.decorationHeight=n/11,e.textDecoration){case"under":t.decorationY=.15*n;break;case"delete":t.decorationY=.35*-n}}(c,n),c}};const An={string:function(t,e){if("string"==typeof t)return t;let n=void 0===t.a?1:t.a;e&&(n*=e);const i=t.r+","+t.g+","+t.b;return 1===n?"rgb("+i+")":"rgba("+i+","+n+")"}},{setPoint:On,addPoint:Tn,toBounds:Mn}=A;const Cn={export(t,n,s){return this.running=!0,function(t){Dn||(Dn=new O);return new Promise((e=>{Dn.add((()=>Qt(this,void 0,void 0,(function*(){return yield t(e)}))),{parallel:!1})}))}((a=>new Promise((r=>{const d=t=>{a(t),r(),this.running=!1},{toURL:l}=e,{download:c}=e.origin,h=o.fileType(n);if("json"===n)return d({data:t.toJSON()});if("json"===h)return c(l(JSON.stringify(t.toJSON()),"text"),n),d({data:!0});if("svg"===n)return d({data:t.toSVG()});if("svg"===h)return c(l(t.toSVG(),"svg"),n),d({data:!0});const{leafer:u}=t;u?u.waitViewCompleted((()=>Qt(this,void 0,void 0,(function*(){s=o.getExportOptions(s);let e,a,r=1,l=1;const{worldTransform:c,isLeafer:h,isFrame:f}=t,{slice:_,trim:g,onCanvas:w}=s;let y=s.scale||1,m=s.pixelRatio||1;t.isApp&&(y*=m,m=t.app.pixelRatio);const v=s.screenshot||t.isApp,x=h&&v&&void 0===s.fill?t.fill:s.fill,b=o.isOpaqueImage(n)||x,B=new T;if(v)e=!0===v?h?u.canvas.bounds:t.worldRenderBounds:v;else{let n=s.relative||(h?"inner":"local");switch(r=c.scaleX,l=c.scaleY,n){case"inner":B.set(c);break;case"local":B.set(c).divide(t.localTransform),r/=t.scaleX,l/=t.scaleY;break;case"world":r=1,l=1;break;case"page":n=t.leafer;default:B.set(c).divide(t.getTransform(n));const e=n.worldTransform;r/=r/e.scaleX,l/=l/e.scaleY}e=t.getBounds("render",n)}const{x:R,y:k,width:E,height:S}=new p(e).scale(y);let L=i.canvas({width:Math.round(E),height:Math.round(S),pixelRatio:m});const W={matrix:B.scale(1/y).invert().translate(-R,-k).withScale(1/r*y,1/l*y)};if(_&&(t=u,W.bounds=L.bounds),L.save(),f&&void 0!==x){const e=t.get("fill");t.fill="",t.__render(L,W),t.fill=e}else t.__render(L,W);if(L.restore(),g){a=function(t){const{width:e,height:n}=t.view,{data:i}=t.context.getImageData(0,0,e,n);let s,o,a,r=0;for(let t=0;t<i.length;t+=4)0!==i[t+3]&&(s=r%e,o=(r-s)/e,a?Tn(a,s,o):On(a={},s,o)),r++;const d=new p;return Mn(a,d),d.scale(1/t.pixelRatio).ceil()}(L);const t=L,{width:e,height:n}=a,s={x:0,y:0,width:e,height:n,pixelRatio:m};L=i.canvas(s),L.copyWorld(t,a,s)}b&&L.fillWorld(L.bounds,x||"#FFFFFF","destination-over"),w&&w(L);const A="canvas"===n?L:yield L.export(n,s);d({data:A,width:L.pixelWidth,height:L.pixelHeight,renderBounds:e,trimBounds:a})})))):d({data:!1})}))))}};let Dn;const In=t.prototype,Pn=g.get("@leafer-ui/export");In.export=function(t,e){const{quality:n,blob:i}=o.getExportOptions(e);return t.includes(".")?this.saveAs(t,n):i?this.toBlob(t,n):this.toDataURL(t,n)},In.toBlob=function(t,n){return new Promise((i=>{e.origin.canvasToBolb(this.view,t,n).then((t=>{i(t)})).catch((t=>{Pn.error(t),i(null)}))}))},In.toDataURL=function(t,n){return e.origin.canvasToDataURL(this.view,t,n)},In.saveAs=function(t,n){return new Promise((i=>{e.origin.canvasSaveAs(this.view,t,n).then((()=>{i(!0)})).catch((t=>{Pn.error(t),i(!1)}))}))},Object.assign(F,Wn),Object.assign(C,An),Object.assign(Y,wt),Object.assign(M,Zt),Object.assign(D,_e),Object.assign(G,Be),Object.assign(I,Cn),X();export{it as Layouter,U as LeaferCanvas,ot as Renderer,j as Watcher,X as useCanvas};
1
+ import{LeaferCanvasBase as t,Platform as e,canvasPatch as n,Creator as i,LeaferImage as s,FileHelper as o,LeafList as a,DataHelper as r,RenderEvent as d,ChildEvent as l,WatchEvent as c,PropertyEvent as h,LeafHelper as u,BranchHelper as f,Bounds as p,LeafBoundsHelper as _,Debug as g,LeafLevelList as w,LayoutEvent as y,Run as m,ImageManager as v,AnimateEvent as x,ResizeEvent as b,BoundsHelper as B,MatrixHelper as R,AlignHelper as k,ImageEvent as E,AroundHelper as S,PointHelper as L,Direction4 as A,TwoPointBoundsHelper as O,TaskProcessor as W,Matrix as T}from"@leafer/core";export*from"@leafer/core";export{LeaferImage}from"@leafer/core";import{PaintImage as M,ColorConvert as C,PaintGradient as D,Export as I,Group as P,TextConvert as F,Paint as Y,Effect as G}from"@leafer-ui/draw";export*from"@leafer-ui/draw";class U extends t{get allowBackgroundColor(){return!0}init(){this.__createView(),this.__createContext(),this.resize(this.config)}__createView(){this.view=e.origin.createCanvas(1,1)}updateViewSize(){const{width:t,height:e,pixelRatio:n}=this;this.view.width=Math.ceil(t*n),this.view.height=Math.ceil(e*n),this.clientBounds=this.bounds}}n(OffscreenCanvasRenderingContext2D.prototype),n(Path2D.prototype);const{mineType:N}=o;function j(t,n){e.origin={createCanvas:(t,e)=>new OffscreenCanvas(t,e),canvasToDataURL:(t,e,n)=>new Promise(((i,s)=>{t.convertToBlob({type:N(e),quality:n}).then((t=>{var e=new FileReader;e.onload=t=>i(t.target.result),e.onerror=t=>s(t),e.readAsDataURL(t)})).catch((t=>{s(t)}))})),canvasToBolb:(t,e,n)=>t.convertToBlob({type:N(e),quality:n}),canvasSaveAs:(t,e,n)=>new Promise((t=>t())),download(t,e){},loadImage:t=>new Promise(((n,i)=>{let s=new XMLHttpRequest;s.open("GET",e.image.getRealURL(t),!0),s.responseType="blob",s.onload=()=>{createImageBitmap(s.response).then((t=>{n(t)})).catch((t=>{i(t)}))},s.onerror=t=>i(t),s.send()}))},e.canvas=i.canvas(),e.conicGradientSupport=!!e.canvas.context.createConicGradient}Object.assign(i,{canvas:(t,e)=>new U(t,e),image:t=>new s(t)}),e.name="web",e.isWorker=!0,e.requestRender=function(t){requestAnimationFrame(t)},e.devicePixelRatio=1;const{userAgent:X}=navigator;X.indexOf("Firefox")>-1?(e.conicGradientRotate90=!0,e.intWheelDeltaY=!0):X.indexOf("Safari")>-1&&-1===X.indexOf("Chrome")&&(e.fullImageShadow=!0),X.indexOf("Windows")>-1?(e.os="Windows",e.intWheelDeltaY=!0):X.indexOf("Mac")>-1?e.os="Mac":X.indexOf("Linux")>-1&&(e.os="Linux");class V{get childrenChanged(){return this.hasAdd||this.hasRemove||this.hasVisible}get updatedList(){if(this.hasRemove){const t=new a;return this.__updatedList.list.forEach((e=>{e.leafer&&t.add(e)})),t}return this.__updatedList}constructor(t,e){this.totalTimes=0,this.config={},this.__updatedList=new a,this.target=t,e&&(this.config=r.default(e,this.config)),this.__listenEvents()}start(){this.disabled||(this.running=!0)}stop(){this.running=!1}disable(){this.stop(),this.__removeListenEvents(),this.disabled=!0}update(){this.changed=!0,this.running&&this.target.emit(d.REQUEST)}__onAttrChange(t){this.__updatedList.add(t.target),this.update()}__onChildEvent(t){t.type===l.ADD?(this.hasAdd=!0,this.__pushChild(t.child)):(this.hasRemove=!0,this.__updatedList.add(t.parent)),this.update()}__pushChild(t){this.__updatedList.add(t),t.isBranch&&this.__loopChildren(t)}__loopChildren(t){const{children:e}=t;for(let t=0,n=e.length;t<n;t++)this.__pushChild(e[t])}__onRquestData(){this.target.emitEvent(new c(c.DATA,{updatedList:this.updatedList})),this.__updatedList=new a,this.totalTimes++,this.changed=!1,this.hasVisible=!1,this.hasRemove=!1,this.hasAdd=!1}__listenEvents(){const{target:t}=this;this.__eventIds=[t.on_(h.CHANGE,this.__onAttrChange,this),t.on_([l.ADD,l.REMOVE],this.__onChildEvent,this),t.on_(c.REQUEST,this.__onRquestData,this)]}__removeListenEvents(){this.target.off_(this.__eventIds)}destroy(){this.target&&(this.stop(),this.__removeListenEvents(),this.target=null,this.__updatedList=null)}}const{updateAllMatrix:q,updateBounds:z,updateAllWorldOpacity:H}=u,{pushAllChildBranch:Q,pushAllParent:J}=f;const{worldBounds:Z}=_,$={x:0,y:0,width:1e5,height:1e5};class K{constructor(t){this.updatedBounds=new p,this.beforeBounds=new p,this.afterBounds=new p,t instanceof Array&&(t=new a(t)),this.updatedList=t}setBefore(){this.beforeBounds.setListWithFn(this.updatedList.list,Z)}setAfter(){const{list:t}=this.updatedList;t.some((t=>t.noBounds))?this.afterBounds.set($):this.afterBounds.setListWithFn(t,Z),this.updatedBounds.setList([this.beforeBounds,this.afterBounds])}merge(t){this.updatedList.addList(t.updatedList.list),this.beforeBounds.add(t.beforeBounds),this.afterBounds.add(t.afterBounds),this.updatedBounds.add(t.updatedBounds)}destroy(){this.updatedList=null}}const{updateAllMatrix:tt,updateAllChange:et}=u,nt=g.get("Layouter");class it{constructor(t,e){this.totalTimes=0,this.config={},this.__levelList=new w,this.target=t,e&&(this.config=r.default(e,this.config)),this.__listenEvents()}start(){this.disabled||(this.running=!0)}stop(){this.running=!1}disable(){this.stop(),this.__removeListenEvents(),this.disabled=!0}layout(){if(!this.running)return;const{target:t}=this;this.times=0;try{t.emit(y.START),this.layoutOnce(),t.emitEvent(new y(y.END,this.layoutedBlocks,this.times))}catch(t){nt.error(t)}this.layoutedBlocks=null}layoutAgain(){this.layouting?this.waitAgain=!0:this.layoutOnce()}layoutOnce(){return this.layouting?nt.warn("layouting"):this.times>3?nt.warn("layout max times"):(this.times++,this.totalTimes++,this.layouting=!0,this.target.emit(c.REQUEST),this.totalTimes>1?this.partLayout():this.fullLayout(),this.layouting=!1,void(this.waitAgain&&(this.waitAgain=!1,this.layoutOnce())))}partLayout(){var t;if(!(null===(t=this.__updatedList)||void 0===t?void 0:t.length))return;const e=m.start("PartLayout"),{target:n,__updatedList:i}=this,{BEFORE:s,LAYOUT:o,AFTER:a}=y,r=this.getBlocks(i);r.forEach((t=>t.setBefore())),n.emitEvent(new y(s,r,this.times)),this.extraBlock=null,i.sort(),function(t,e){let n;t.list.forEach((t=>{n=t.__layout,e.without(t)&&!n.proxyZoom&&(n.matrixChanged?(q(t,!0),e.add(t),t.isBranch&&Q(t,e),J(t,e)):n.boundsChanged&&(e.add(t),t.isBranch&&(t.__tempNumber=0),J(t,e)))}))}(i,this.__levelList),function(t){let e,n,i;t.sort(!0),t.levels.forEach((s=>{e=t.levelMap[s];for(let t=0,s=e.length;t<s;t++){if(n=e[t],n.isBranch&&n.__tempNumber){i=n.children;for(let t=0,e=i.length;t<e;t++)i[t].isBranch||z(i[t])}z(n)}}))}(this.__levelList),function(t){t.list.forEach((t=>{t.__layout.opacityChanged&&H(t),t.__updateChange()}))}(i),this.extraBlock&&r.push(this.extraBlock),r.forEach((t=>t.setAfter())),n.emitEvent(new y(o,r,this.times)),n.emitEvent(new y(a,r,this.times)),this.addBlocks(r),this.__levelList.reset(),this.__updatedList=null,m.end(e)}fullLayout(){const t=m.start("FullLayout"),{target:e}=this,{BEFORE:n,LAYOUT:i,AFTER:s}=y,o=this.getBlocks(new a(e));e.emitEvent(new y(n,o,this.times)),it.fullLayout(e),o.forEach((t=>{t.setAfter()})),e.emitEvent(new y(i,o,this.times)),e.emitEvent(new y(s,o,this.times)),this.addBlocks(o),m.end(t)}static fullLayout(t){tt(t,!0),t.isBranch?f.updateBounds(t):u.updateBounds(t),et(t)}addExtra(t){if(!this.__updatedList.has(t)){const{updatedList:e,beforeBounds:n}=this.extraBlock||(this.extraBlock=new K([]));e.length?n.add(t.__world):n.set(t.__world),e.add(t)}}createBlock(t){return new K(t)}getBlocks(t){return[this.createBlock(t)]}addBlocks(t){this.layoutedBlocks?this.layoutedBlocks.push(...t):this.layoutedBlocks=t}__onReceiveWatchData(t){this.__updatedList=t.data.updatedList}__listenEvents(){const{target:t}=this;this.__eventIds=[t.on_(y.REQUEST,this.layout,this),t.on_(y.AGAIN,this.layoutAgain,this),t.on_(c.DATA,this.__onReceiveWatchData,this)]}__removeListenEvents(){this.target.off_(this.__eventIds)}destroy(){this.target&&(this.stop(),this.__removeListenEvents(),this.target=this.config=null)}}const st=g.get("Renderer");class ot{get needFill(){return!(this.canvas.allowBackgroundColor||!this.config.fill)}constructor(t,e,n){this.FPS=60,this.totalTimes=0,this.times=0,this.config={usePartRender:!0,maxFPS:60},this.target=t,this.canvas=e,n&&(this.config=r.default(n,this.config)),this.__listenEvents(),this.__requestRender()}start(){this.running=!0}stop(){this.running=!1}update(){this.changed=!0}requestLayout(){this.target.emit(y.REQUEST)}render(t){if(!this.running||!this.canvas.view)return void(this.changed=!0);const{target:e}=this;this.times=0,this.totalBounds=new p,st.log(e.innerName,"---\x3e");try{this.emitRender(d.START),this.renderOnce(t),this.emitRender(d.END,this.totalBounds),v.clearRecycled()}catch(t){this.rendering=!1,st.error(t)}st.log("-------------|")}renderAgain(){this.rendering?this.waitAgain=!0:this.renderOnce()}renderOnce(t){if(this.rendering)return st.warn("rendering");if(this.times>3)return st.warn("render max times");if(this.times++,this.totalTimes++,this.rendering=!0,this.changed=!1,this.renderBounds=new p,this.renderOptions={},t)this.emitRender(d.BEFORE),t();else{if(this.requestLayout(),this.ignore)return void(this.ignore=this.rendering=!1);this.emitRender(d.BEFORE),this.config.usePartRender&&this.totalTimes>1?this.partRender():this.fullRender()}this.emitRender(d.RENDER,this.renderBounds,this.renderOptions),this.emitRender(d.AFTER,this.renderBounds,this.renderOptions),this.updateBlocks=null,this.rendering=!1,this.waitAgain&&(this.waitAgain=!1,this.renderOnce())}partRender(){const{canvas:t,updateBlocks:e}=this;if(!e)return st.warn("PartRender: need update attr");this.mergeBlocks(),e.forEach((e=>{t.bounds.hit(e)&&!e.isEmpty()&&this.clipRender(e)}))}clipRender(t){const e=m.start("PartRender"),{canvas:n}=this,i=t.getIntersect(n.bounds),s=t.includes(this.target.__world),o=new p(i);n.save(),s&&!g.showRepaint?n.clear():(i.spread(10+1/this.canvas.pixelRatio).ceil(),n.clearWorld(i,!0),n.clipWorld(i,!0)),this.__render(i,s,o),n.restore(),m.end(e)}fullRender(){const t=m.start("FullRender"),{canvas:e}=this;e.save(),e.clear(),this.__render(e.bounds,!0),e.restore(),m.end(t)}__render(t,e,n){const i=t.includes(this.target.__world)?{includes:e}:{bounds:t,includes:e};this.needFill&&this.canvas.fillWorld(t,this.config.fill),g.showRepaint&&this.canvas.strokeWorld(t,"red"),this.target.__render(this.canvas,i),this.renderBounds=n||t,this.renderOptions=i,this.totalBounds.isEmpty()?this.totalBounds=this.renderBounds:this.totalBounds.add(this.renderBounds),g.showHitView&&this.renderHitView(i),g.showBoundsView&&this.renderBoundsView(i),this.canvas.updateRender()}renderHitView(t){}renderBoundsView(t){}addBlock(t){this.updateBlocks||(this.updateBlocks=[]),this.updateBlocks.push(t)}mergeBlocks(){const{updateBlocks:t}=this;if(t){const e=new p;e.setList(t),t.length=0,t.push(e)}}__requestRender(){const t=Date.now();e.requestRender((()=>{this.FPS=Math.min(60,Math.ceil(1e3/(Date.now()-t))),this.running&&(this.target.emit(x.FRAME),this.changed&&this.canvas.view&&this.render(),this.target.emit(d.NEXT)),this.target&&this.__requestRender()}))}__onResize(t){if(!this.canvas.unreal){if(t.bigger||!t.samePixelRatio){const{width:e,height:n}=t.old;if(!new p(0,0,e,n).includes(this.target.__world)||this.needFill||!t.samePixelRatio)return this.addBlock(this.canvas.bounds),void this.target.forceUpdate("surface")}this.addBlock(new p(0,0,1,1)),this.changed=!0}}__onLayoutEnd(t){t.data&&t.data.map((t=>{let e;t.updatedList&&t.updatedList.list.some((t=>(e=!t.__world.width||!t.__world.height,e&&(t.isLeafer||st.tip(t.innerName,": empty"),e=!t.isBranch||t.isBranchLeaf),e))),this.addBlock(e?this.canvas.bounds:t.updatedBounds)}))}emitRender(t,e,n){this.target.emitEvent(new d(t,this.times,e,n))}__listenEvents(){const{target:t}=this;this.__eventIds=[t.on_(d.REQUEST,this.update,this),t.on_(y.END,this.__onLayoutEnd,this),t.on_(d.AGAIN,this.renderAgain,this),t.on_(b.RESIZE,this.__onResize,this)]}__removeListenEvents(){this.target.off_(this.__eventIds)}destroy(){this.target&&(this.stop(),this.__removeListenEvents(),this.target=this.canvas=this.config=null)}}function at(t,e){let n;const{rows:i,decorationY:s,decorationHeight:o}=t.__.__textDrawData;for(let t=0,a=i.length;t<a;t++)n=i[t],n.text?e.fillText(n.text,n.x,n.y):n.data&&n.data.forEach((t=>{e.fillText(t.char,t.x,n.y)})),s&&e.fillRect(n.x,n.y+s,n.width,o)}function rt(t,e,n){const{strokeAlign:i}=e.__,s="string"!=typeof t;switch(i){case"center":n.setStroke(s?void 0:t,e.__.strokeWidth,e.__),s?ct(t,!0,e,n):lt(e,n);break;case"inside":dt("inside",t,s,e,n);break;case"outside":dt("outside",t,s,e,n)}}function dt(t,e,n,i,s){const{__strokeWidth:o,__font:a}=i.__,r=s.getSameCanvas(!0,!0);r.setStroke(n?void 0:e,2*o,i.__),r.font=a,n?ct(e,!0,i,r):lt(i,r),r.blendMode="outside"===t?"destination-out":"destination-in",at(i,r),r.blendMode="normal",i.__worldFlipped?s.copyWorldByReset(r,i.__nowWorld):s.copyWorldToInner(r,i.__nowWorld,i.__layout.renderBounds),r.recycle(i.__nowWorld)}function lt(t,e){let n;const{rows:i,decorationY:s,decorationHeight:o}=t.__.__textDrawData;for(let t=0,a=i.length;t<a;t++)n=i[t],n.text?e.strokeText(n.text,n.x,n.y):n.data&&n.data.forEach((t=>{e.strokeText(t.char,t.x,n.y)})),s&&e.strokeRect(n.x,n.y+s,n.width,o)}function ct(t,e,n,i){let s;for(let o=0,a=t.length;o<a;o++)s=t[o],s.image&&M.checkImage(n,i,s,!1)||s.style&&(i.strokeStyle=s.style,s.blendMode?(i.saveBlendMode(s.blendMode),e?lt(n,i):i.stroke(),i.restoreBlendMode()):e?lt(n,i):i.stroke())}Object.assign(i,{watcher:(t,e)=>new V(t,e),layouter:(t,e)=>new it(t,e),renderer:(t,e,n)=>new ot(t,e,n),selector:(t,e)=>{},interaction:(t,e,n,i)=>{}}),e.layout=it.fullLayout;const{getSpread:ht,getOuterOf:ut,getByMove:ft,getIntersectData:pt}=B;let _t;function gt(t,e,n){if("object"!=typeof e||!1===e.visible||0===e.opacity)return;const{boxBounds:i}=n.__layout;switch(e.type){case"solid":let{type:s,blendMode:o,color:a,opacity:r}=e;return{type:s,blendMode:o,style:C.string(a,r)};case"image":return M.image(n,t,e,i,!_t||!_t[e.url]);case"linear":return D.linearGradient(e,i);case"radial":return D.radialGradient(e,i);case"angular":return D.conicGradient(e,i);default:return void 0!==e.r?{type:"solid",style:C.string(e)}:void 0}}const wt={compute:function(t,e){const n=e.__,i=[];let s,o=n.__input[t];o instanceof Array||(o=[o]),_t=M.recycleImage(t,n);for(let n,s=0,a=o.length;s<a;s++)n=gt(t,o[s],e),n&&i.push(n);n["_"+t]=i.length?i:void 0,i.length&&i[0].image&&(s=i[0].image.hasOpacityPixel),"fill"===t?n.__pixelFill=s:n.__pixelStroke=s},fill:function(t,e,n){n.fillStyle=t,e.__.__font?at(e,n):e.__.windingRule?n.fill(e.__.windingRule):n.fill()},fills:function(t,e,n){let i;const{windingRule:s,__font:o}=e.__;for(let a=0,r=t.length;a<r;a++)i=t[a],i.image&&M.checkImage(e,n,i,!o)||i.style&&(n.fillStyle=i.style,i.transform?(n.save(),n.transform(i.transform),i.blendMode&&(n.blendMode=i.blendMode),o?at(e,n):s?n.fill(s):n.fill(),n.restore()):i.blendMode?(n.saveBlendMode(i.blendMode),o?at(e,n):s?n.fill(s):n.fill(),n.restoreBlendMode()):o?at(e,n):s?n.fill(s):n.fill())},fillText:at,stroke:function(t,e,n){const i=e.__,{__strokeWidth:s,strokeAlign:o,__font:a}=i;if(s)if(a)rt(t,e,n);else switch(o){case"center":n.setStroke(t,s,i),n.stroke();break;case"inside":n.save(),n.setStroke(t,2*s,i),i.windingRule?n.clip(i.windingRule):n.clip(),n.stroke(),n.restore();break;case"outside":const o=n.getSameCanvas(!0,!0);o.setStroke(t,2*s,i),e.__drawRenderPath(o),o.stroke(),i.windingRule?o.clip(i.windingRule):o.clip(),o.clearWorld(e.__layout.renderBounds),e.__worldFlipped?n.copyWorldByReset(o,e.__nowWorld):n.copyWorldToInner(o,e.__nowWorld,e.__layout.renderBounds),o.recycle(e.__nowWorld)}},strokes:function(t,e,n){const i=e.__,{__strokeWidth:s,strokeAlign:o,__font:a}=i;if(s)if(a)rt(t,e,n);else switch(o){case"center":n.setStroke(void 0,s,i),ct(t,!1,e,n);break;case"inside":n.save(),n.setStroke(void 0,2*s,i),i.windingRule?n.clip(i.windingRule):n.clip(),ct(t,!1,e,n),n.restore();break;case"outside":const{renderBounds:o}=e.__layout,a=n.getSameCanvas(!0,!0);e.__drawRenderPath(a),a.setStroke(void 0,2*s,i),ct(t,!1,e,a),i.windingRule?a.clip(i.windingRule):a.clip(),a.clearWorld(o),e.__worldFlipped?n.copyWorldByReset(a,e.__nowWorld):n.copyWorldToInner(a,e.__nowWorld,o),a.recycle(e.__nowWorld)}},strokeText:rt,drawTextStroke:lt,shape:function(t,e,n){const i=e.getSameCanvas(),s=t.__nowWorld;let o,a,r,d,{scaleX:l,scaleY:c}=s;if(l<0&&(l=-l),c<0&&(c=-c),e.bounds.includes(s))d=i,o=r=s;else{const{renderShapeSpread:i}=t.__layout,h=pt(i?ht(e.bounds,l===c?i*l:[i*c,i*l]):e.bounds,s);a=e.bounds.getFitMatrix(h);let{a:u,d:f}=a;if(a.a<1&&(d=e.getSameCanvas(),t.__renderShape(d,n),l*=u,c*=f),r=ut(s,a),o=ft(r,-a.e,-a.f),n.matrix){const{matrix:t}=n;a.multiply(t),u*=t.scaleX,f*=t.scaleY}n=Object.assign(Object.assign({},n),{matrix:a.withScale(u,f)})}return t.__renderShape(i,n),{canvas:i,matrix:a,bounds:o,worldCanvas:d,shapeBounds:r,scaleX:l,scaleY:c}}};let yt={};const{get:mt,rotateOfOuter:vt,translate:xt,scaleOfOuter:bt,scale:Bt,rotate:Rt}=R;function kt(t,e,n,i,s,o,a){const r=mt();xt(r,e.x+n,e.y+i),Bt(r,s,o),a&&vt(r,{x:e.x+e.width/2,y:e.y+e.height/2},a),t.transform=r}function Et(t,e,n,i,s,o,a){const r=mt();xt(r,e.x+n,e.y+i),s&&Bt(r,s,o),a&&Rt(r,a),t.transform=r}function St(t,e,n,i,s,o,a,r,d,l){const c=mt();if(d)if("center"===l)vt(c,{x:n/2,y:i/2},d);else switch(Rt(c,d),d){case 90:xt(c,i,0);break;case 180:xt(c,n,i);break;case 270:xt(c,0,n)}yt.x=e.x+s,yt.y=e.y+o,xt(c,yt.x,yt.y),a&&bt(c,yt,a,r),t.transform=c}const{get:Lt,translate:At}=R,Ot=new p,Wt={};function Tt(t,e,n,i){const{blendMode:s}=n;s&&(t.blendMode=s),t.data=Mt(n,i,e)}function Mt(t,e,n){let{width:i,height:s}=n;t.padding&&(e=Ot.set(e).shrink(t.padding));const{opacity:o,mode:a,align:r,offset:d,scale:l,size:c,rotation:h,repeat:u}=t,f=e.width===i&&e.height===s,p={mode:a},_="center"!==r&&(h||0)%180==90,g=_?s:i,w=_?i:s;let y,m,v=0,x=0;if(a&&"cover"!==a&&"fit"!==a)c?(y=("number"==typeof c?c:c.width)/i,m=("number"==typeof c?c:c.height)/s):l&&(y="number"==typeof l?l:l.x,m="number"==typeof l?l:l.y);else if(!f||h){const t=e.width/g,n=e.height/w;y=m="fit"===a?Math.min(t,n):Math.max(t,n),v+=(e.width-i*y)/2,x+=(e.height-s*m)/2}if(r){const t={x:v,y:x,width:g,height:w};y&&(t.width*=y,t.height*=m),k.toPoint(r,t,e,Wt,!0),v+=Wt.x,x+=Wt.y}switch(d&&(v+=d.x,x+=d.y),a){case"strench":f||(i=e.width,s=e.height);break;case"normal":case"clip":(v||x||y||h)&&Et(p,e,v,x,y,m,h);break;case"repeat":(!f||y||h)&&St(p,e,i,s,v,x,y,m,h,r),u||(p.repeat="repeat");break;default:y&&kt(p,e,v,x,y,m,h)}return p.transform||(e.x||e.y)&&(p.transform=Lt(),At(p.transform,e.x,e.y)),y&&"strench"!==a&&(p.scaleX=y,p.scaleY=m),p.width=i,p.height=s,o&&(p.opacity=o),u&&(p.repeat="string"==typeof u?"x"===u?"repeat-x":"repeat-y":"repeat"),p}let Ct,Dt=new p;const{isSame:It}=B;function Pt(t,e,n,i,s,o){if("fill"===e&&!t.__.__naturalWidth){const e=t.__;if(e.__naturalWidth=i.width/e.pixelRatio,e.__naturalHeight=i.height/e.pixelRatio,e.__autoSide)return t.forceUpdate("width"),t.__proxyData&&(t.setProxyAttr("width",e.width),t.setProxyAttr("height",e.height)),!1}return s.data||Tt(s,i,n,o),!0}function Ft(t,e){Ut(t,E.LOAD,e)}function Yt(t,e){Ut(t,E.LOADED,e)}function Gt(t,e,n){e.error=n,t.forceUpdate("surface"),Ut(t,E.ERROR,e)}function Ut(t,e,n){t.hasEvent(e)&&t.emitEvent(new E(e,n))}function Nt(t,e){const{leafer:n}=t;n&&n.viewReady&&(n.renderer.ignore=e)}const{get:jt,scale:Xt,copy:Vt}=R,{ceil:qt,abs:zt}=Math;function Ht(t,n,i){let{scaleX:s,scaleY:o}=v.patternLocked?t.__world:t.__nowWorld;const a=s+"-"+o;if(n.patternId===a||t.destroyed)return!1;{s=zt(s),o=zt(o);const{image:t,data:r}=n;let d,l,{width:c,height:h,scaleX:u,scaleY:f,opacity:p,transform:_,repeat:g}=r;u&&(l=jt(),Vt(l,_),Xt(l,1/u,1/f),s*=u,o*=f),s*=i,o*=i,c*=s,h*=o;const w=c*h;if(!g&&w>e.image.maxCacheSize)return!1;let y=e.image.maxPatternSize;if(!t.isSVG){const e=t.width*t.height;y>e&&(y=e)}w>y&&(d=Math.sqrt(w/y)),d&&(s/=d,o/=d,c/=d,h/=d),u&&(s/=u,o/=f),(_||1!==s||1!==o)&&(l||(l=jt(),_&&Vt(l,_)),Xt(l,1/s,1/o));const m=t.getCanvas(qt(c)||1,qt(h)||1,p),v=t.getPattern(m,g||e.origin.noRepeat||"no-repeat",l,n);return n.style=v,n.patternId=a,!0}}function Qt(t,e,n,i){return new(n||(n=Promise))((function(s,o){function a(t){try{d(i.next(t))}catch(t){o(t)}}function r(t){try{d(i.throw(t))}catch(t){o(t)}}function d(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,r)}d((i=i.apply(t,e||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const{abs:Jt}=Math;const Zt={image:function(t,e,n,i,s){let o,a;const r=v.get(n);return Ct&&n===Ct.paint&&It(i,Ct.boxBounds)?o=Ct.leafPaint:(o={type:n.type,image:r},Ct=r.use>1?{leafPaint:o,paint:n,boxBounds:Dt.set(i)}:null),(s||r.loading)&&(a={image:r,attrName:e,attrValue:n}),r.ready?(Pt(t,e,n,r,o,i),s&&(Ft(t,a),Yt(t,a))):r.error?s&&Gt(t,a,r.error):(Nt(t,!0),s&&Ft(t,a),o.loadId=r.load((()=>{Nt(t,!1),t.destroyed||(Pt(t,e,n,r,o,i)&&(r.hasOpacityPixel&&(t.__layout.hitCanvasChanged=!0),t.forceUpdate("surface")),Yt(t,a)),o.loadId=null}),(e=>{Nt(t,!1),Gt(t,a,e),o.loadId=null}))),o},checkImage:function(t,n,i,s){const{scaleX:o,scaleY:a}=v.patternLocked?t.__world:t.__nowWorld;if(i.data&&i.patternId!==o+"-"+a){const{data:r}=i;if(s)if(r.repeat)s=!1;else{let{width:t,height:i}=r;t*=Jt(o)*n.pixelRatio,i*=Jt(a)*n.pixelRatio,r.scaleX&&(t*=r.scaleX,i*=r.scaleY),s=t*i>e.image.maxCacheSize||I.running}return s?(n.save(),n.clip(),i.blendMode&&(n.blendMode=i.blendMode),r.opacity&&(n.opacity*=r.opacity),r.transform&&n.transform(r.transform),n.drawImage(i.image.view,0,0,r.width,r.height),n.restore(),!0):(!i.style||I.running?Ht(t,i,n.pixelRatio):i.patternTask||(i.patternTask=v.patternTasker.add((()=>Qt(this,void 0,void 0,(function*(){i.patternTask=null,n.bounds.hit(t.__nowWorld)&&Ht(t,i,n.pixelRatio),t.forceUpdate("surface")}))),300)),!1)}return!1},createPattern:Ht,recycleImage:function(t,e){const n=e["_"+t];if(n instanceof Array){let i,s,o,a;for(let r=0,d=n.length;r<d;r++)i=n[r].image,a=i&&i.url,a&&(s||(s={}),s[a]=!0,v.recycle(i),i.loading&&(o||(o=e.__input&&e.__input[t]||[],o instanceof Array||(o=[o])),i.unload(n[r].loadId,!o.some((t=>t.url===a)))));return s}return null},createData:Tt,getPatternData:Mt,fillOrFitMode:kt,clipMode:Et,repeatMode:St},{toPoint:$t}=S,Kt={},te={};function ee(t,e,n){let i;for(let s=0,o=e.length;s<o;s++)i=e[s],"string"==typeof i?t.addColorStop(s/(o-1),C.string(i,n)):t.addColorStop(i.offset,C.string(i.color,n))}const{getAngle:ne,getDistance:ie}=L,{get:se,rotateOfOuter:oe,scaleOfOuter:ae}=R,{toPoint:re}=S,de={},le={};function ce(t,e,n,i,s){let o;const{width:a,height:r}=t;if(a!==r||i){const t=ne(e,n);o=se(),s?(ae(o,e,a/r*(i||1),1),oe(o,e,t+90)):(ae(o,e,1,a/r*(i||1)),oe(o,e,t))}return o}const{getDistance:he}=L,{toPoint:ue}=S,fe={},pe={};const _e={linearGradient:function(t,n){let{from:i,to:s,type:o,blendMode:a,opacity:r}=t;$t(i||"top",n,Kt),$t(s||"bottom",n,te);const d=e.canvas.createLinearGradient(Kt.x,Kt.y,te.x,te.y);ee(d,t.stops,r);const l={type:o,style:d};return a&&(l.blendMode=a),l},radialGradient:function(t,n){let{from:i,to:s,type:o,opacity:a,blendMode:r,stretch:d}=t;re(i||"center",n,de),re(s||"bottom",n,le);const l=e.canvas.createRadialGradient(de.x,de.y,0,de.x,de.y,ie(de,le));ee(l,t.stops,a);const c={type:o,style:l},h=ce(n,de,le,d,!0);return h&&(c.transform=h),r&&(c.blendMode=r),c},conicGradient:function(t,n){let{from:i,to:s,type:o,opacity:a,blendMode:r,stretch:d}=t;ue(i||"center",n,fe),ue(s||"bottom",n,pe);const l=e.conicGradientSupport?e.canvas.createConicGradient(0,fe.x,fe.y):e.canvas.createRadialGradient(fe.x,fe.y,0,fe.x,fe.y,he(fe,pe));ee(l,t.stops,a);const c={type:o,style:l},h=ce(n,fe,pe,d||1,e.conicGradientRotate90);return h&&(c.transform=h),r&&(c.blendMode=r),c},getTransform:ce},{copy:ge,toOffsetOutBounds:we}=B,ye={},me={};function ve(t,n,i,s){const{bounds:o,shapeBounds:a}=s;if(e.fullImageShadow){if(ge(ye,t.bounds),ye.x+=n.x-a.x,ye.y+=n.y-a.y,i){const{matrix:t}=s;ye.x-=(o.x+(t?t.e:0)+o.width/2)*(i-1),ye.y-=(o.y+(t?t.f:0)+o.height/2)*(i-1),ye.width*=i,ye.height*=i}t.copyWorld(s.canvas,t.bounds,ye)}else i&&(ge(ye,n),ye.x-=n.width/2*(i-1),ye.y-=n.height/2*(i-1),ye.width*=i,ye.height*=i),t.copyWorld(s.canvas,a,i?ye:n)}const{toOffsetOutBounds:xe}=B,be={};const Be={shadow:function(t,e,n){let i,s;const{__nowWorld:o,__layout:a}=t,{shadow:r}=t.__,{worldCanvas:d,bounds:l,shapeBounds:c,scaleX:h,scaleY:u}=n,f=e.getSameCanvas(),p=r.length-1;we(l,me),r.forEach(((r,_)=>{f.setWorldShadow(me.offsetX+r.x*h,me.offsetY+r.y*u,r.blur*h,r.color),s=r.spread?1+2*r.spread/(a.boxBounds.width+2*(a.strokeBoxSpread||0)):0,ve(f,me,s,n),i=l,r.box&&(f.restore(),f.save(),d&&(f.copyWorld(f,l,o,"copy"),i=o),d?f.copyWorld(d,o,o,"destination-out"):f.copyWorld(n.canvas,c,l,"destination-out")),t.__worldFlipped?e.copyWorldByReset(f,i,o,r.blendMode):e.copyWorldToInner(f,i,a.renderBounds,r.blendMode),p&&_<p&&f.clearWorld(i,!0)})),f.recycle(i)},innerShadow:function(t,e,n){let i,s;const{__nowWorld:o,__layout:a}=t,{innerShadow:r}=t.__,{worldCanvas:d,bounds:l,shapeBounds:c,scaleX:h,scaleY:u}=n,f=e.getSameCanvas(),p=r.length-1;xe(l,be),r.forEach(((r,_)=>{f.save(),f.setWorldShadow(be.offsetX+r.x*h,be.offsetY+r.y*u,r.blur*h),s=r.spread?1-2*r.spread/(a.boxBounds.width+2*(a.strokeBoxSpread||0)):0,ve(f,be,s,n),f.restore(),d?(f.copyWorld(f,l,o,"copy"),f.copyWorld(d,o,o,"source-out"),i=o):(f.copyWorld(n.canvas,c,l,"source-out"),i=l),f.fillWorld(i,r.color,"source-in"),t.__worldFlipped?e.copyWorldByReset(f,i,o,r.blendMode):e.copyWorldToInner(f,i,a.renderBounds,r.blendMode),p&&_<p&&f.clearWorld(i,!0)})),f.recycle(i)},blur:function(t,e,n){const{blur:i}=t.__;n.setWorldBlur(i*t.__nowWorld.a),n.copyWorldToInner(e,t.__nowWorld,t.__layout.renderBounds),n.filter="none"},backgroundBlur:function(t,e,n){}},{excludeRenderBounds:Re}=_;function ke(t,e,n,i,s,o){switch(e){case"alpha":!function(t,e,n,i){const s=t.__nowWorld;n.resetTransform(),n.opacity=1,n.useMask(i,s),i.recycle(s),Se(t,e,n,1)}(t,n,i,s);break;case"opacity-path":Se(t,n,i,o);break;case"path":n.restore()}}function Ee(t){return t.getSameCanvas(!1,!0)}function Se(t,e,n,i){const s=t.__nowWorld;e.resetTransform(),e.opacity=i,e.copyWorld(n,s),n.recycle(s)}P.prototype.__renderMask=function(t,e){let n,i,s,o,a;const{children:r}=this;for(let d=0,l=r.length;d<l;d++)n=r[d],n.__.mask&&(a&&(ke(this,a,t,s,i,o),i=s=null),"path"===n.__.mask?(n.opacity<1?(a="opacity-path",o=n.opacity,s||(s=Ee(t))):(a="path",t.save()),n.__clip(s||t,e)):(a="alpha",i||(i=Ee(t)),s||(s=Ee(t)),n.__render(i,e)),"clipping"!==n.__.mask)||Re(n,e)||n.__render(s||t,e);ke(this,a,t,s,i,o)};const Le=">)]}%!?,.:;'\"》)」〉』〗】〕}┐>’”!?,、。:;‰",Ae=Le+"_#~&*+\\=|≮≯≈≠=…",Oe=new RegExp([[19968,40959],[13312,19903],[131072,173791],[173824,177983],[177984,178207],[178208,183983],[183984,191471],[196608,201551],[201552,205743],[11904,12031],[12032,12255],[12272,12287],[12288,12351],[12736,12783],[12800,13055],[13056,13311],[63744,64255],[65072,65103],[127488,127743],[194560,195103]].map((([t,e])=>`[\\u${t.toString(16)}-\\u${e.toString(16)}]`)).join("|"));function We(t){const e={};return t.split("").forEach((t=>e[t]=!0)),e}const Te=We("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"),Me=We("{[(<'\"《(「〈『〖【〔{┌<‘“=¥¥$€££¢¢"),Ce=We(Le),De=We(Ae),Ie=We("- —/~|┆·");var Pe;!function(t){t[t.Letter=0]="Letter",t[t.Single=1]="Single",t[t.Before=2]="Before",t[t.After=3]="After",t[t.Symbol=4]="Symbol",t[t.Break=5]="Break"}(Pe||(Pe={}));const{Letter:Fe,Single:Ye,Before:Ge,After:Ue,Symbol:Ne,Break:je}=Pe;function Xe(t){return Te[t]?Fe:Ie[t]?je:Me[t]?Ge:Ce[t]?Ue:De[t]?Ne:Oe.test(t)?Ye:Fe}const Ve={trimRight(t){const{words:e}=t;let n,i=0,s=e.length;for(let o=s-1;o>-1&&(n=e[o].data[0]," "===n.char);o--)i++,t.width-=n.width;i&&e.splice(s-i,i)}};function qe(t,e,n){switch(e){case"title":return n?t.toUpperCase():t;case"upper":return t.toUpperCase();case"lower":return t.toLowerCase();default:return t}}const{trimRight:ze}=Ve,{Letter:He,Single:Qe,Before:Je,After:Ze,Symbol:$e,Break:Ke}=Pe;let tn,en,nn,sn,on,an,rn,dn,ln,cn,hn,un,fn,pn,_n,gn,wn=[];function yn(t,e){ln&&!dn&&(dn=ln),tn.data.push({char:t,width:e}),nn+=e}function mn(){sn+=nn,tn.width=nn,en.words.push(tn),tn={data:[]},nn=0}function vn(){pn&&(_n.paraNumber++,en.paraStart=!0,pn=!1),ln&&(en.startCharSize=dn,en.endCharSize=ln,dn=0),en.width=sn,gn.width&&ze(en),wn.push(en),en={words:[]},sn=0}const xn=0,bn=1,Bn=2;const{top:Rn,right:kn,bottom:En,left:Sn}=A;function Ln(t,e,n){const{bounds:i,rows:s}=t;i[e]+=n;for(let t=0;t<s.length;t++)s[t][e]+=n}const An={getDrawData:function(t,n){"string"!=typeof t&&(t=String(t));let i=0,s=0,o=n.__getInput("width")||0,a=n.__getInput("height")||0;const{textDecoration:r,__font:d,__padding:l}=n;l&&(o&&(i=l[Sn],o-=l[kn]+l[Sn]),a&&(s=l[Rn],a-=l[Rn]+l[En]));const c={bounds:{x:i,y:s,width:o,height:a},rows:[],paraNumber:0,font:e.canvas.font=d};return function(t,n,i){_n=t,wn=t.rows,gn=t.bounds;const{__letterSpacing:s,paraIndent:o,textCase:a}=i,{canvas:r}=e,{width:d,height:l}=gn;if(d||l||s||"none"!==a){const t="none"!==i.textWrap,e="break"===i.textWrap;pn=!0,hn=null,dn=rn=ln=nn=sn=0,tn={data:[]},en={words:[]};for(let i=0,l=n.length;i<l;i++)an=n[i],"\n"===an?(nn&&mn(),en.paraEnd=!0,vn(),pn=!0):(cn=Xe(an),cn===He&&"none"!==a&&(an=qe(an,a,!nn)),rn=r.measureText(an).width,s&&(s<0&&(ln=rn),rn+=s),un=cn===Qe&&(hn===Qe||hn===He)||hn===Qe&&cn!==Ze,fn=!(cn!==Je&&cn!==Qe||hn!==$e&&hn!==Ze),on=pn&&o?d-o:d,t&&d&&sn+nn+rn>on&&(e?(nn&&mn(),sn&&vn()):(fn||(fn=cn===He&&hn==Ze),un||fn||cn===Ke||cn===Je||cn===Qe||nn+rn>on?(nn&&mn(),sn&&vn()):sn&&vn()))," "===an&&!0!==pn&&sn+nn===0||(cn===Ke?(" "===an&&nn&&mn(),yn(an,rn),mn()):un||fn?(nn&&mn(),yn(an,rn)):yn(an,rn)),hn=cn);nn&&mn(),sn&&vn(),wn.length>0&&(wn[wn.length-1].paraEnd=!0)}else n.split("\n").forEach((t=>{_n.paraNumber++,wn.push({x:o||0,text:t,width:r.measureText(t).width,paraStart:!0})}))}(c,t,n),l&&function(t,e,n,i,s){if(!i)switch(n.textAlign){case"left":Ln(e,"x",t[Sn]);break;case"right":Ln(e,"x",-t[kn])}if(!s)switch(n.verticalAlign){case"top":Ln(e,"y",t[Rn]);break;case"bottom":Ln(e,"y",-t[En])}}(l,c,n,o,a),function(t,e){const{rows:n,bounds:i}=t,{__lineHeight:s,__baseLine:o,__letterSpacing:a,__clipText:r,textAlign:d,verticalAlign:l,paraSpacing:c}=e;let h,u,f,{x:p,y:_,width:g,height:w}=i,y=s*n.length+(c?c*(t.paraNumber-1):0),m=o;if(r&&y>w)y=Math.max(w,s),t.overflow=n.length;else switch(l){case"middle":_+=(w-y)/2;break;case"bottom":_+=w-y}m+=_;for(let o=0,l=n.length;o<l;o++){if(h=n[o],h.x=p,h.width<g||h.width>g&&!r)switch(d){case"center":h.x+=(g-h.width)/2;break;case"right":h.x+=g-h.width}h.paraStart&&c&&o>0&&(m+=c),h.y=m,m+=s,t.overflow>o&&m>y&&(h.isOverflow=!0,t.overflow=o+1),u=h.x,f=h.width,a<0&&(h.width<0?(f=-h.width+e.fontSize+a,u-=f,f+=e.fontSize):f-=a),u<i.x&&(i.x=u),f>i.width&&(i.width=f),r&&g&&g<f&&(h.isOverflow=!0,t.overflow||(t.overflow=n.length))}i.y=_,i.height=y}(c,n),function(t,e,n,i){const{rows:s}=t,{textAlign:o,paraIndent:a,letterSpacing:r}=e;let d,l,c,h,u;s.forEach((t=>{t.words&&(c=a&&t.paraStart?a:0,l=n&&"justify"===o&&t.words.length>1?(n-t.width-c)/(t.words.length-1):0,h=r||t.isOverflow?xn:l>.01?bn:Bn,t.isOverflow&&!r&&(t.textMode=!0),h===Bn?(t.x+=c,function(t){t.text="",t.words.forEach((e=>{e.data.forEach((e=>{t.text+=e.char}))}))}(t)):(t.x+=c,d=t.x,t.data=[],t.words.forEach((e=>{h===bn?(u={char:"",x:d},d=function(t,e,n){return t.forEach((t=>{n.char+=t.char,e+=t.width})),e}(e.data,d,u),(t.isOverflow||" "!==u.char)&&t.data.push(u)):d=function(t,e,n,i){return t.forEach((t=>{(i||" "!==t.char)&&(t.x=e,n.push(t)),e+=t.width})),e}(e.data,d,t.data,t.isOverflow),!t.paraEnd&&l&&(d+=l,t.width+=l)}))),t.words=null)}))}(c,n,o),c.overflow&&function(t,n,i,s){if(!s)return;const{rows:o,overflow:a}=t;let{textOverflow:r}=n;if(o.splice(a),r&&"show"!==r){let t,d;"hide"===r?r="":"ellipsis"===r&&(r="...");const l=r?e.canvas.measureText(r).width:0,c=i+s-l;("none"===n.textWrap?o:[o[a-1]]).forEach((e=>{if(e.isOverflow&&e.data){let n=e.data.length-1;for(let i=n;i>-1&&(t=e.data[i],d=t.x+t.width,!(i===n&&d<c));i--){if(d<c&&" "!==t.char){e.data.splice(i+1),e.width-=t.width;break}e.width-=t.width}e.width+=l,e.data.push({char:r,x:d}),e.textMode&&function(t){t.text="",t.data.forEach((e=>{t.text+=e.char})),t.data=null}(e)}}))}}(c,n,i,o),"none"!==r&&function(t,e){const{fontSize:n}=e;switch(t.decorationHeight=n/11,e.textDecoration){case"under":t.decorationY=.15*n;break;case"delete":t.decorationY=.35*-n}}(c,n),c}};const On={string:function(t,e){if("string"==typeof t)return t;let n=void 0===t.a?1:t.a;e&&(n*=e);const i=t.r+","+t.g+","+t.b;return 1===n?"rgb("+i+")":"rgba("+i+","+n+")"}},{setPoint:Wn,addPoint:Tn,toBounds:Mn}=O;const Cn={export(t,n,s){this.running=!0;const a=o.fileType(n);return s=o.getExportOptions(s),function(t){Dn||(Dn=new W);return new Promise((e=>{Dn.add((()=>Qt(this,void 0,void 0,(function*(){return yield t(e)}))),{parallel:!1})}))}((r=>new Promise((d=>{const l=t=>{r(t),d(),this.running=!1},{toURL:c}=e,{download:h}=e.origin;if("json"===n)return l({data:t.toJSON(s.json)});if("json"===a)return h(c(JSON.stringify(t.toJSON(s.json)),"text"),n),l({data:!0});if("svg"===n)return l({data:t.toSVG()});if("svg"===a)return h(c(t.toSVG(),"svg"),n),l({data:!0});const{leafer:u}=t;u?(In(t),u.waitViewCompleted((()=>Qt(this,void 0,void 0,(function*(){let e,a,r=1,d=1;const{worldTransform:c,isLeafer:h,isFrame:f}=t,{slice:_,trim:g,onCanvas:w}=s;let y=s.scale||1,m=s.pixelRatio||1;const v=void 0===s.smooth?u.config.smooth:s.smooth,x=s.contextSettings||u.config.contextSettings;t.isApp&&(y*=m,m=t.app.pixelRatio);const b=s.screenshot||t.isApp,B=h&&b&&void 0===s.fill?t.fill:s.fill,R=o.isOpaqueImage(n)||B,k=new T;if(b)e=!0===b?h?u.canvas.bounds:t.worldRenderBounds:b;else{let n=s.relative||(h?"inner":"local");switch(r=c.scaleX,d=c.scaleY,n){case"inner":k.set(c);break;case"local":k.set(c).divide(t.localTransform),r/=t.scaleX,d/=t.scaleY;break;case"world":r=1,d=1;break;case"page":n=t.leafer;default:k.set(c).divide(t.getTransform(n));const e=n.worldTransform;r/=r/e.scaleX,d/=d/e.scaleY}e=t.getBounds("render",n)}const{x:E,y:S,width:L,height:A}=new p(e).scale(y);let O=i.canvas({width:Math.round(L),height:Math.round(A),pixelRatio:m,smooth:v,contextSettings:x});const W={matrix:k.scale(1/y).invert().translate(-E,-S).withScale(1/r*y,1/d*y)};if(_&&(t=u,W.bounds=O.bounds),O.save(),f&&void 0!==B){const e=t.get("fill");t.fill="",t.__render(O,W),t.fill=e}else t.__render(O,W);if(O.restore(),g){a=function(t){const{width:e,height:n}=t.view,{data:i}=t.context.getImageData(0,0,e,n);let s,o,a,r=0;for(let t=0;t<i.length;t+=4)0!==i[t+3]&&(s=r%e,o=(r-s)/e,a?Tn(a,s,o):Wn(a={},s,o)),r++;const d=new p;return Mn(a,d),d.scale(1/t.pixelRatio).ceil()}(O);const t=O,{width:e,height:n}=a,s={x:0,y:0,width:e,height:n,pixelRatio:m};O=i.canvas(s),O.copyWorld(t,a,s)}R&&O.fillWorld(O.bounds,B||"#FFFFFF","destination-over"),w&&w(O);const M="canvas"===n?O:yield O.export(n,s);l({data:M,width:O.pixelWidth,height:O.pixelHeight,renderBounds:e,trimBounds:a})}))))):l({data:!1})}))))}};let Dn;function In(t){t.__.__needComputePaint&&t.__.__computePaint(),t.isBranch&&t.children.forEach((t=>In(t)))}const Pn=t.prototype,Fn=g.get("@leafer-ui/export");Pn.export=function(t,e){const{quality:n,blob:i}=o.getExportOptions(e);return t.includes(".")?this.saveAs(t,n):i?this.toBlob(t,n):this.toDataURL(t,n)},Pn.toBlob=function(t,n){return new Promise((i=>{e.origin.canvasToBolb(this.view,t,n).then((t=>{i(t)})).catch((t=>{Fn.error(t),i(null)}))}))},Pn.toDataURL=function(t,n){return e.origin.canvasToDataURL(this.view,t,n)},Pn.saveAs=function(t,n){return new Promise((i=>{e.origin.canvasSaveAs(this.view,t,n).then((()=>{i(!0)})).catch((t=>{Fn.error(t),i(!1)}))}))},Object.assign(F,An),Object.assign(C,On),Object.assign(Y,wt),Object.assign(M,Zt),Object.assign(D,_e),Object.assign(G,Be),Object.assign(I,Cn),j();export{it as Layouter,U as LeaferCanvas,ot as Renderer,V as Watcher,j as useCanvas};
package/dist/worker.js CHANGED
@@ -14,8 +14,15 @@ var LeaferUI = (function (exports) {
14
14
  hitCanvasSize: 100,
15
15
  maxCacheSize: 2560 * 1600,
16
16
  maxPatternSize: 4096 * 2160,
17
- suffix: '',
18
- crossOrigin: 'anonymous'
17
+ crossOrigin: 'anonymous',
18
+ getRealURL(url) {
19
+ const { prefix, suffix } = Platform.image;
20
+ if (suffix && !url.startsWith('data:') && !url.startsWith('blob:'))
21
+ url += (url.includes("?") ? "&" : "?") + suffix;
22
+ if (prefix && url[0] === '/')
23
+ url = prefix + url;
24
+ return url;
25
+ }
19
26
  }
20
27
  };
21
28
 
@@ -1551,7 +1558,7 @@ var LeaferUI = (function (exports) {
1551
1558
  if (this.__input && this.__input[name] !== undefined)
1552
1559
  this.__input[name] = undefined;
1553
1560
  }
1554
- __getInputData(names) {
1561
+ __getInputData(names, options) {
1555
1562
  const data = {};
1556
1563
  if (names) {
1557
1564
  if (names instanceof Array) {
@@ -1578,6 +1585,12 @@ var LeaferUI = (function (exports) {
1578
1585
  }
1579
1586
  }
1580
1587
  }
1588
+ if (options) {
1589
+ if (options.matrix) {
1590
+ const { a, b, c, d, e, f } = this.__leaf.__localMatrix;
1591
+ data.matrix = { a, b, c, d, e, f };
1592
+ }
1593
+ }
1581
1594
  return data;
1582
1595
  }
1583
1596
  __setMiddle(name, value) {
@@ -5129,6 +5142,7 @@ var LeaferUI = (function (exports) {
5129
5142
  get __worldFlipped() { return this.__world.scaleX < 0 || this.__world.scaleY < 0; }
5130
5143
  get __onlyHitMask() { return this.__hasMask && !this.__.hitChildren; }
5131
5144
  get __ignoreHitWorld() { return (this.__hasMask || this.__hasEraser) && this.__.hitChildren; }
5145
+ get __inLazyBounds() { const { leafer } = this; return leafer && leafer.created && leafer.lazyBounds.hit(this.__world); }
5132
5146
  get pathInputed() { return this.__.__pathInputed; }
5133
5147
  constructor(data) {
5134
5148
  this.innerId = create(LEAF);
@@ -5195,11 +5209,13 @@ var LeaferUI = (function (exports) {
5195
5209
  setAttr(name, value) { this[name] = value; }
5196
5210
  getAttr(name) { return this[name]; }
5197
5211
  getComputedAttr(name) { return this.__[name]; }
5198
- toJSON() {
5199
- return this.__.__getInputData();
5212
+ toJSON(options) {
5213
+ if (options)
5214
+ this.__layout.update();
5215
+ return this.__.__getInputData(null, options);
5200
5216
  }
5201
- toString() {
5202
- return JSON.stringify(this.toJSON());
5217
+ toString(options) {
5218
+ return JSON.stringify(this.toJSON(options));
5203
5219
  }
5204
5220
  toSVG() { return undefined; }
5205
5221
  __SVG(_data) { }
@@ -5213,6 +5229,9 @@ var LeaferUI = (function (exports) {
5213
5229
  findOne(_condition, _options) { return undefined; }
5214
5230
  findId(_id) { return undefined; }
5215
5231
  focus(_value) { }
5232
+ updateLayout() {
5233
+ this.__layout.update();
5234
+ }
5216
5235
  forceUpdate(attrName) {
5217
5236
  if (attrName === undefined)
5218
5237
  attrName = 'width';
@@ -5222,8 +5241,8 @@ var LeaferUI = (function (exports) {
5222
5241
  this.__[attrName] = value === undefined ? null : undefined;
5223
5242
  this[attrName] = value;
5224
5243
  }
5225
- updateLayout() {
5226
- this.__layout.update();
5244
+ forceRender(_bounds) {
5245
+ this.forceUpdate('surface');
5227
5246
  }
5228
5247
  __updateWorldMatrix() { }
5229
5248
  __updateLocalMatrix() { }
@@ -5269,14 +5288,6 @@ var LeaferUI = (function (exports) {
5269
5288
  return this.__world;
5270
5289
  }
5271
5290
  }
5272
- getWorld(attrName) {
5273
- this.__layout.update();
5274
- if (attrName === 'x')
5275
- return this.__world.e;
5276
- if (attrName === 'y')
5277
- return this.__world.f;
5278
- return this.getLayoutBounds()[attrName];
5279
- }
5280
5291
  getTransform(relative) {
5281
5292
  return this.__layout.getTransform(relative || 'local');
5282
5293
  }
@@ -5397,14 +5408,8 @@ var LeaferUI = (function (exports) {
5397
5408
  this.scaleY *= scaleY;
5398
5409
  }
5399
5410
  __scaleResize(_scaleX, _scaleY) { }
5400
- resizeWidth(width) {
5401
- const scale = width / this.__localBoxBounds.width;
5402
- this.scaleResize(scale, this.__.lockRatio ? scale : 1);
5403
- }
5404
- resizeHeight(height) {
5405
- const scale = height / this.__localBoxBounds.height;
5406
- this.scaleResize(this.__.lockRatio ? scale : 1, scale);
5407
- }
5411
+ resizeWidth(_width) { }
5412
+ resizeHeight(_height) { }
5408
5413
  __hitWorld(_point) { return true; }
5409
5414
  __hit(_local) { return true; }
5410
5415
  __hitFill(_inner) { return true; }
@@ -5755,7 +5760,7 @@ var LeaferUI = (function (exports) {
5755
5760
  }
5756
5761
  }
5757
5762
 
5758
- const version = "1.0.0-rc.27";
5763
+ const version = "1.0.0-rc.30";
5759
5764
  const inviteCode = {};
5760
5765
 
5761
5766
  class LeaferCanvas extends LeaferCanvasBase {
@@ -5804,10 +5809,8 @@ var LeaferUI = (function (exports) {
5804
5809
  download(_url, _filename) { return undefined; },
5805
5810
  loadImage(src) {
5806
5811
  return new Promise((resolve, reject) => {
5807
- if (!src.startsWith('data:') && Platform.image.suffix)
5808
- src += (src.includes("?") ? "&" : "?") + Platform.image.suffix;
5809
5812
  let req = new XMLHttpRequest();
5810
- req.open('GET', src, true);
5813
+ req.open('GET', Platform.image.getRealURL(src), true);
5811
5814
  req.responseType = "blob";
5812
5815
  req.onload = () => {
5813
5816
  createImageBitmap(req.response).then(img => {
@@ -6940,7 +6943,7 @@ var LeaferUI = (function (exports) {
6940
6943
  __onUpdateSize() {
6941
6944
  if (this.__.__input) {
6942
6945
  const data = this.__;
6943
- (data.lazy && this.leafer && this.leafer.created && !this.leafer.lazyBounds.hit(this.__world)) ? data.__needComputePaint = true : data.__computePaint();
6946
+ (data.lazy && !this.__inLazyBounds && !Export.running) ? data.__needComputePaint = true : data.__computePaint();
6944
6947
  }
6945
6948
  }
6946
6949
  __updateRenderPath() {
@@ -7297,9 +7300,9 @@ var LeaferUI = (function (exports) {
7297
7300
  super.set(data);
7298
7301
  }
7299
7302
  }
7300
- toJSON() {
7301
- const data = super.toJSON();
7302
- data.children = this.children.map(child => child.toJSON());
7303
+ toJSON(options) {
7304
+ const data = super.toJSON(options);
7305
+ data.children = this.children.map(child => child.toJSON(options));
7303
7306
  return data;
7304
7307
  }
7305
7308
  pick(_hitPoint, _options) { return undefined; }
@@ -7466,6 +7469,8 @@ var LeaferUI = (function (exports) {
7466
7469
  __onResize(event) {
7467
7470
  this.emitEvent(event);
7468
7471
  DataHelper.copyAttrs(this.__, event, canvasSizeAttrs);
7472
+ if (!event.width || !event.height)
7473
+ debug$1.warn('w = 0 or h = 0');
7469
7474
  setTimeout(() => { if (this.canvasManager)
7470
7475
  this.canvasManager.clearRecycled(); }, 0);
7471
7476
  }
@@ -7489,6 +7494,8 @@ var LeaferUI = (function (exports) {
7489
7494
  __setAttr(attrName, newValue) {
7490
7495
  if (this.canvas) {
7491
7496
  if (canvasSizeAttrs.includes(attrName)) {
7497
+ if (!newValue)
7498
+ debug$1.warn(attrName + ' is 0');
7492
7499
  this.__changeCanvasSize(attrName, newValue);
7493
7500
  }
7494
7501
  else if (attrName === 'fill') {
@@ -7498,6 +7505,10 @@ var LeaferUI = (function (exports) {
7498
7505
  if (!this.parent)
7499
7506
  this.canvas.hittable = newValue;
7500
7507
  }
7508
+ else if (attrName === 'zIndex') {
7509
+ this.canvas.zIndex = newValue;
7510
+ setTimeout(() => this.parent && this.parent.__updateSortChildren());
7511
+ }
7501
7512
  }
7502
7513
  return super.__setAttr(attrName, newValue);
7503
7514
  }
@@ -8116,7 +8127,7 @@ var LeaferUI = (function (exports) {
8116
8127
  __drawAfterFill(canvas, _options) {
8117
8128
  const origin = this.canvas.view;
8118
8129
  const { width, height } = this;
8119
- if (this.__.cornerRadius) {
8130
+ if (this.__.cornerRadius || this.pathInputed) {
8120
8131
  canvas.save();
8121
8132
  canvas.clip();
8122
8133
  canvas.drawImage(this.canvas.view, 0, 0, origin.width, origin.height, 0, 0, width, height);
@@ -8997,7 +9008,7 @@ var LeaferUI = (function (exports) {
8997
9008
  width *= data.scaleX;
8998
9009
  height *= data.scaleY;
8999
9010
  }
9000
- allowPaint = width * height > Platform.image.maxCacheSize;
9011
+ allowPaint = (width * height > Platform.image.maxCacheSize) || Export.running;
9001
9012
  }
9002
9013
  else {
9003
9014
  allowPaint = false;
@@ -9509,7 +9520,8 @@ var LeaferUI = (function (exports) {
9509
9520
  if (breakAll) {
9510
9521
  if (wordWidth)
9511
9522
  addWord();
9512
- addRow();
9523
+ if (rowWidth)
9524
+ addRow();
9513
9525
  }
9514
9526
  else {
9515
9527
  if (!afterBreak)
@@ -9517,10 +9529,12 @@ var LeaferUI = (function (exports) {
9517
9529
  if (langBreak || afterBreak || charType === Break || charType === Before || charType === Single || (wordWidth + charWidth > realWidth)) {
9518
9530
  if (wordWidth)
9519
9531
  addWord();
9520
- addRow();
9532
+ if (rowWidth)
9533
+ addRow();
9521
9534
  }
9522
9535
  else {
9523
- addRow();
9536
+ if (rowWidth)
9537
+ addRow();
9524
9538
  }
9525
9539
  }
9526
9540
  }
@@ -9723,7 +9737,9 @@ var LeaferUI = (function (exports) {
9723
9737
  bounds.height = realHeight;
9724
9738
  }
9725
9739
 
9726
- function clipText(drawData, style) {
9740
+ function clipText(drawData, style, x, width) {
9741
+ if (!width)
9742
+ return;
9727
9743
  const { rows, overflow } = drawData;
9728
9744
  let { textOverflow } = style;
9729
9745
  rows.splice(overflow);
@@ -9734,7 +9750,7 @@ var LeaferUI = (function (exports) {
9734
9750
  textOverflow = '...';
9735
9751
  let char, charRight;
9736
9752
  const ellipsisWidth = textOverflow ? Platform.canvas.measureText(textOverflow).width : 0;
9737
- const right = style.x + style.width - ellipsisWidth;
9753
+ const right = x + width - ellipsisWidth;
9738
9754
  const list = style.textWrap === 'none' ? rows : [rows[overflow - 1]];
9739
9755
  list.forEach(row => {
9740
9756
  if (row.isOverflow && row.data) {
@@ -9810,7 +9826,7 @@ var LeaferUI = (function (exports) {
9810
9826
  layoutText(drawData, style);
9811
9827
  layoutChar(drawData, style, width);
9812
9828
  if (drawData.overflow)
9813
- clipText(drawData, style);
9829
+ clipText(drawData, style, x, width);
9814
9830
  if (textDecoration !== 'none')
9815
9831
  decorationText(drawData, style);
9816
9832
  return drawData;
@@ -9881,6 +9897,8 @@ var LeaferUI = (function (exports) {
9881
9897
  const ExportModule = {
9882
9898
  export(leaf, filename, options) {
9883
9899
  this.running = true;
9900
+ const fileType = FileHelper.fileType(filename);
9901
+ options = FileHelper.getExportOptions(options);
9884
9902
  return addTask((success) => new Promise((resolve) => {
9885
9903
  const over = (result) => {
9886
9904
  success(result);
@@ -9889,12 +9907,11 @@ var LeaferUI = (function (exports) {
9889
9907
  };
9890
9908
  const { toURL } = Platform;
9891
9909
  const { download } = Platform.origin;
9892
- const fileType = FileHelper.fileType(filename);
9893
9910
  if (filename === 'json') {
9894
- return over({ data: leaf.toJSON() });
9911
+ return over({ data: leaf.toJSON(options.json) });
9895
9912
  }
9896
9913
  else if (fileType === 'json') {
9897
- download(toURL(JSON.stringify(leaf.toJSON()), 'text'), filename);
9914
+ download(toURL(JSON.stringify(leaf.toJSON(options.json)), 'text'), filename);
9898
9915
  return over({ data: true });
9899
9916
  }
9900
9917
  if (filename === 'svg') {
@@ -9906,13 +9923,15 @@ var LeaferUI = (function (exports) {
9906
9923
  }
9907
9924
  const { leafer } = leaf;
9908
9925
  if (leafer) {
9926
+ checkLazy(leaf);
9909
9927
  leafer.waitViewCompleted(() => __awaiter(this, void 0, void 0, function* () {
9910
- options = FileHelper.getExportOptions(options);
9911
9928
  let renderBounds, trimBounds, scaleX = 1, scaleY = 1;
9912
9929
  const { worldTransform, isLeafer, isFrame } = leaf;
9913
9930
  const { slice, trim, onCanvas } = options;
9914
9931
  let scale = options.scale || 1;
9915
9932
  let pixelRatio = options.pixelRatio || 1;
9933
+ const smooth = options.smooth === undefined ? leafer.config.smooth : options.smooth;
9934
+ const contextSettings = options.contextSettings || leafer.config.contextSettings;
9916
9935
  if (leaf.isApp) {
9917
9936
  scale *= pixelRatio;
9918
9937
  pixelRatio = leaf.app.pixelRatio;
@@ -9951,7 +9970,7 @@ var LeaferUI = (function (exports) {
9951
9970
  renderBounds = leaf.getBounds('render', relative);
9952
9971
  }
9953
9972
  const { x, y, width, height } = new Bounds(renderBounds).scale(scale);
9954
- let canvas = Creator.canvas({ width: Math.round(width), height: Math.round(height), pixelRatio });
9973
+ let canvas = Creator.canvas({ width: Math.round(width), height: Math.round(height), pixelRatio, smooth, contextSettings });
9955
9974
  const renderOptions = { matrix: matrix.scale(1 / scale).invert().translate(-x, -y).withScale(1 / scaleX * scale, 1 / scaleY * scale) };
9956
9975
  if (slice) {
9957
9976
  leaf = leafer;
@@ -9997,6 +10016,12 @@ var LeaferUI = (function (exports) {
9997
10016
  tasker.add(() => __awaiter(this, void 0, void 0, function* () { return yield task(resolve); }), { parallel: false });
9998
10017
  });
9999
10018
  }
10019
+ function checkLazy(leaf) {
10020
+ if (leaf.__.__needComputePaint)
10021
+ leaf.__.__computePaint();
10022
+ if (leaf.isBranch)
10023
+ leaf.children.forEach(child => checkLazy(child));
10024
+ }
10000
10025
 
10001
10026
  const canvas = LeaferCanvasBase.prototype;
10002
10027
  const debug = Debug.get('@leafer-ui/export');