polotno 2.38.1 → 2.38.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "polotno",
3
- "version": "2.38.1",
3
+ "version": "2.38.2",
4
4
  "description": "Design Editor Framework",
5
5
  "author": "Anton Lavrenov",
6
6
  "keywords": [
package/polotno.bundle.js CHANGED
@@ -18,7 +18,7 @@ For more info see: https://github.com/konvajs/react-konva/issues/256
18
18
  `,nN=`ReactKonva: You are using "zIndex" attribute for a Konva node.
19
19
  react-konva may get confused with ordering. Just define correct order of elements in your render function of a component.
20
20
  For more info see: https://github.com/konvajs/react-konva/issues/194
21
- `,nD={};function nz(e,t,n=nD){if(!nR&&"zIndex"in t&&(console.warn(nN),nR=!0),!nM&&t.draggable){var r=void 0!==t.x||void 0!==t.y,i=t.onDragEnd||t.onDragMove;r&&!i&&(console.warn(nj),nM=!0)}for(var a in n)if(!nI[a]){var o="on"===a.slice(0,2),l=n[a]!==t[a];if(o&&l){var s=a.substr(2).toLowerCase();"content"===s.substr(0,7)&&(s="content"+s.substr(7,1).toUpperCase()+s.substr(8)),e.off(s,n[a])}t.hasOwnProperty(a)||e.setAttr(a,void 0)}var c=t._useStrictMode,u={},d=!1;let h={};for(var a in t)if(!nI[a]){var o="on"===a.slice(0,2),f=n[a]!==t[a];if(o&&f){var s=a.substr(2).toLowerCase();"content"===s.substr(0,7)&&(s="content"+s.substr(7,1).toUpperCase()+s.substr(8)),t[a]&&(h[s]=t[a])}!o&&(t[a]!==n[a]||c&&t[a]!==e.getAttr(a))&&(d=!0,u[a]=t[a])}for(var s in d&&(e.setAttrs(u),nB(e)),h)e.on(s+nL,h[s])}function nB(e){if(!V.autoDrawEnabled){var t=e.getLayer()||e.getStage();t&&t.batchDraw()}}x("clk2u");let nF={},nH={};function nV(e,t){"string"==typeof t?console.error(`Do not use plain text as child of Konva.Node. You are using text: ${t}`):(e.add(t),nB(e))}function nU(e,t,n){let r=tE[e];r||(console.error(`Konva has no node with the type ${e}. Group will be used instead. If you use minimal version of react-konva, just import required nodes into Konva: "import "konva/lib/shapes/${e}" If you want to render DOM elements as part of canvas tree take a look into this demo: https://konvajs.github.io/docs/react/DOM_Portal.html`),r=tE.Group);let i={},a={};for(var o in t)"on"===o.slice(0,2)?a[o]=t[o]:i[o]=t[o];let l=new r(i);return nz(l,a),l}function n$(e,t,n){console.error(`Text components are not supported for now in ReactKonva. Your text is: "${e}"`)}function nW(e,t,n){return!1}function nq(e){return e}function nG(){return null}function nK(){return null}function nY(e,t,n,r){return nH}function nX(){}function nQ(e){}function nZ(e,t){return!1}function nJ(){return nF}function n0(){return nF}tE.Node.prototype._applyProps=nz;let n1=setTimeout,n2=clearTimeout,n4=!1,n3="function"==typeof queueMicrotask?e=>queueMicrotask(()=>queueMicrotask(e)):setTimeout,n8=-1;function n6(e,t){return!1}let n5=!1,n9=!0,n7=!0;function re(e,t){t.parent===e?t.moveToTop():e.add(t),nB(e)}function rt(e,t){t.parent===e?t.moveToTop():e.add(t),nB(e)}function rn(e,t,n){t._remove(),e.add(t),t.setZIndex(n.getZIndex()),nB(e)}function rr(e,t,n){rn(e,t,n)}function ri(e,t){t.destroy(),t.off(nL),nB(e)}function ra(e,t){t.destroy(),t.off(nL),nB(e)}function ro(e,t,n){console.error(`Text components are not yet supported in ReactKonva. You text is: "${n}"`)}function rl(e,t,n){}function rs(e,t,n,r,i){nz(e,i,r)}function rc(e){e.hide(),nB(e)}function ru(e){}function rd(e,t){(null==t.visible||t.visible)&&e.show()}function rh(e,t){}function rf(e){}function rp(){}let rg=()=>nO.DefaultEventPriority;var S=x("8NFma"),rm=Object.defineProperty,ry=Object.defineProperties,rb=Object.getOwnPropertyDescriptors,rv=Object.getOwnPropertySymbols,rx=Object.prototype.hasOwnProperty,rw=Object.prototype.propertyIsEnumerable,rC=(e,t,n)=>t in e?rm(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,rS=(e,t)=>{for(var n in t||(t={}))rx.call(t,n)&&rC(e,n,t[n]);if(rv)for(var n of rv(t))rw.call(t,n)&&rC(e,n,t[n]);return e};function rk(e){try{return Object.defineProperties(e,{_currentRenderer:{get:()=>null,set(){}},_currentRenderer2:{get:()=>null,set(){}}})}catch(t){return e}}"u">typeof window&&((null==(Dl=window.document)?void 0:Dl.createElement)||(null==(Ds=window.navigator)?void 0:Ds.product)==="ReactNative")?S.useLayoutEffect:S.useEffect;let r_=console.error;console.error=function(){let e=[...arguments].join("");if((null==e?void 0:e.startsWith("Warning:"))&&e.includes("useContext")){console.error=r_;return}return r_.apply(this,arguments)};let rE=rk(S.createContext(null));class rT extends S.Component{render(){return S.createElement(rE.Provider,{value:this._reactInternals},this.props.children)}}function rP(){let e=function(){let e=function(){let e=S.useContext(rE);if(null===e)throw Error("its-fine: useFiber must be called within a <FiberProvider />!");let t=S.useId();return S.useMemo(()=>{for(let n of[e,null==e?void 0:e.alternate]){if(!n)continue;let e=function e(t,n,r){if(!t)return;if(!0===r(t))return t;let i=n?t.return:t.child;for(;i;){let t=e(i,n,r);if(t)return t;i=n?null:i.sibling}}(n,!1,e=>{let n=e.memoizedState;for(;n;){if(n.memoizedState===t)return!0;n=n.next}});if(e)return e}},[e,t])}(),[t]=S.useState(()=>new Map);t.clear();let n=e;for(;n;){if(n.type&&"object"==typeof n.type){let e=void 0===n.type._context&&n.type.Provider===n.type?n.type:n.type._context;e&&e!==rE&&!t.has(e)&&t.set(e,S.useContext(rk(e)))}n=n.return}return t}();return S.useMemo(()=>Array.from(e.keys()).reduce((t,n)=>r=>S.createElement(t,null,S.createElement(n.Provider,ry(rS({},r),rb({value:e.get(n)})))),e=>S.createElement(rT,rS({},e))),[e])}console.log("react-konva v18");let rO=e=>{let t,n=g(S).useRef(null),r=g(S).useRef(null),i=g(S).useRef(null),a=(t=g(S).useRef({}),g(S).useLayoutEffect(()=>{t.current=e}),g(S).useLayoutEffect(()=>()=>{t.current={}},[]),t.current),o=rP(),l=t=>{let{forwardedRef:n}=e;n&&("function"==typeof n?n(t):n.current=t)};return g(S).useLayoutEffect(()=>(r.current=new tE.Stage({width:e.width,height:e.height,container:n.current}),l(r.current),i.current=rz.createContainer(r.current,nO.LegacyRoot,!1,null),rz.updateContainer(g(S).createElement(o,{},e.children),i.current),()=>{tE.isBrowser&&(l(null),rz.flushSync(()=>{rz.updateContainer(null,i.current,null)}),r.current.destroy())}),[]),g(S).useLayoutEffect(()=>{l(r.current),nz(r.current,e,a),rz.flushSync(()=>{rz.updateContainer(g(S).createElement(o,{},e.children),i.current,null)})}),g(S).createElement("div",{ref:n,id:e.id,accessKey:e.accessKey,className:e.className,role:e.role,style:e.style,tabIndex:e.tabIndex,title:e.title})},rA="Group",rI="Label",rR="Rect",rM="Line",rL="Image",rj="Text",rN="Path",rD="Transformer",rz=g(nP)(nA);rz.injectIntoDevTools({findHostInstanceByFiber:()=>null,bundleType:0,version:g(S).version,rendererPackageName:"react-konva"});let rB=g(S).forwardRef((e,t)=>g(S).createElement(rT,{},g(S).createElement(rO,{...e,forwardedRef:t})));var rF={},S=x("8NFma");rF=function(e,t,n){let r=S.useRef("loading"),i=S.useRef(),[a,o]=S.useState(0),l=S.useRef(),s=S.useRef(),c=S.useRef();return(l.current!==e||s.current!==t||c.current!==n)&&(r.current="loading",i.current=void 0,l.current=e,s.current=t,c.current=n),S.useLayoutEffect(function(){if(e){var a=document.createElement("img");return a.addEventListener("load",l),a.addEventListener("error",s),t&&(a.crossOrigin=t),n&&(a.referrerPolicy=n),a.src=e,function(){a.removeEventListener("load",l),a.removeEventListener("error",s)}}function l(){a.decode().catch(()=>{}).finally(()=>{r.current="loaded",i.current=a,o(Math.random())})}function s(){r.current="failed",i.current=void 0,o(Math.random())}},[e,t,n]),[i.current,r.current]};var S=(x("8NFma"),x("8NFma"),x("8NFma")),rH=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)0>t.indexOf(r[i])&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]]);return n};let rV=({children:e,groupProps:t,divProps:n,transform:r,transformFunc:i,parentNodeFunc:a})=>{let o=rP(),l=g(S).useRef(null),[s]=g(S).useState(()=>document.createElement("div")),c=g(S).useMemo(()=>g(k).createRoot(s),[s]),u=null==r||r,d=function(e=()=>{}){let t=g(S).useRef(e);return t.current=e,g(S).useCallback((...e)=>t.current.apply(null,e),[])}(()=>{if(u&&l.current){let e=l.current.getAbsoluteTransform().decompose();i&&(e=i(e)),s.style.position="absolute",s.style.zIndex="10",s.style.top="0px",s.style.left="0px",s.style.transform=`translate(${e.x}px, ${e.y}px) rotate(${e.rotation}deg) scaleX(${e.scaleX}) scaleY(${e.scaleY})`,s.style.transformOrigin="top left"}else s.style.position="",s.style.zIndex="",s.style.top="",s.style.left="",s.style.transform="",s.style.transformOrigin="";let e=n||{},{style:t}=e,r=rH(e,["style"]);Object.assign(s.style,t),Object.assign(s,r)});return g(S).useLayoutEffect(()=>{var e;let t=l.current;if(!t)return;let n=a?a({stage:t.getStage()}):null==(e=t.getStage())?void 0:e.container();if(n){let e;return n.appendChild(s),u&&"absolute"!==(e=window.getComputedStyle(n).position)&&"relative"!==e&&(n.style.position="relative"),t.on("absoluteTransformChange",d),d(),()=>{var e;t.off("absoluteTransformChange",d),null==(e=s.parentNode)||e.removeChild(s)}}},[u,a]),g(S).useLayoutEffect(()=>{d()},[n,i]),g(S).useLayoutEffect(()=>{queueMicrotask(()=>{(0,_.flushSync)(()=>{c.render(g(S).createElement(o,null,e))})})}),g(S).useLayoutEffect(()=>()=>{setTimeout(()=>{c.unmount()})},[]),g(S).createElement(rA,Object.assign({ref:l},t))};var S=x("8NFma");let rU=({selector:e,enabled:t,children:n})=>{let r=g(S).useRef(null),i=g(S).useRef(null),a=g(S).useRef(null),o=null==t||t;return g(S).useLayoutEffect(()=>{if(!r.current||!i.current)return;a.current=i.current;let t=r.current.getStage().findOne(e);o&&t?i.current.moveTo(t):i.current.moveTo(r.current);let n=r.current.getLayer();if(n&&(n.batchDraw(),t)){let e=t.getLayer();if(!e)return;e.batchDraw()}},[e,o]),g(S).useEffect(()=>()=>{var e;null==(e=a.current)||e.destroy()},[]),g(S).createElement(rA,{name:"_outer_portal",ref:r},g(S).createElement(rA,{name:"_inner_portal",ref:i},n))};var E=x("2SBKn");function r$(e,t,n){let r=n[t-1]||{values:{x:0,y:0}};if(e.marker===e.marker.toLowerCase())switch(e.marker=e.marker.toUpperCase(),e.marker){case"M":case"L":case"A":case"T":e.values.x+=r.values.x,e.values.y+=r.values.y;break;case"H":e.marker="L",e.values.x+=r.values.x,e.values.y=r.values.y;break;case"V":e.marker="L",e.values.x=r.values.x,e.values.y+=r.values.y;break;case"C":e.values.x+=r.values.x,e.values.y+=r.values.y,e.values.x1+=r.values.x,e.values.y1+=r.values.y,e.values.x2+=r.values.x,e.values.y2+=r.values.y;break;case"S":e.values.x+=r.values.x,e.values.y+=r.values.y,e.values.x2+=r.values.x,e.values.y2+=r.values.y;break;case"Q":e.values.x+=r.values.x,e.values.y+=r.values.y,e.values.x1+=r.values.x,e.values.y1+=r.values.y}else if(e.marker===e.marker.toUpperCase())switch(e.marker){case"H":e.marker="L",e.values.y=r.values.y;break;case"V":e.marker="L",e.values.x=r.values.x}if("Z"===e.marker){let r=function e(t,n){return"M"===t[n].marker?t[n]:e(t,n-1)}(n,t);e.values.x=r.values.x,e.values.y=r.values.y}return e}function rW(e,t,n){if(0!==t&&"L"===e.marker){let r=n[t-1];["x","y"].every(t=>0===Math.round(Math.abs(r.values[t]-e.values[t])))&&(e.overlap=!0)}return e}function rq(e,t){return Math.atan2(t.x-e.x,t.y-e.y)}function rG(e,t){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function rK(e,t){let n=t/Math.tan(e);return n===1/0||n===-1/0||isNaN(n)?t:n}function rY(e){let t=/-?[0-9]*\.?\d+/g;return[...e.matchAll(/[MmLlSsQqLlHhVvCcSsQqTtAaZz]/g)].map(e=>({marker:e[0],index:e.index})).reduceRight((t,n)=>{let r=e.substring(n.index,t.length?t[t.length-1].index:e.length);return t.concat([{marker:n.marker,index:n.index,chunk:r.length>0?r.substr(1,r.length-1):r}])},[]).reverse().flatMap(e=>{let n=e.chunk.match(t),r=n?n.map(parseFloat):[];return function(e,t){let n=[];switch(e.toUpperCase()){case"M":for(let r=0;r<t.length;r+=2){let i;i=e===e.toUpperCase()?0===r?"M":"L":0===r?"m":"l",n.push({marker:i,values:{x:t[r],y:t[r+1]}})}break;case"L":for(let r=0;r<t.length;r+=2)n.push({marker:e,values:{x:t[r],y:t[r+1]}});break;case"H":for(let r=0;r<t.length;r++)n.push({marker:e,values:{x:t[r],y:0}});break;case"V":for(let r=0;r<t.length;r++)n.push({marker:e,values:{x:0,y:t[r]}});break;case"C":for(let r=0;r<t.length;r+=6)n.push({marker:e,values:{x1:t[r],y1:t[r+1],x2:t[r+2],y2:t[r+3],x:t[r+4],y:t[r+5]}});break;case"S":for(let r=0;r<t.length;r+=4)n.push({marker:e,values:{x2:t[r],y2:t[r+1],x:t[r+2],y:t[r+3]}});break;case"Q":for(let r=0;r<t.length;r+=4)n.push({marker:e,values:{x1:t[r],y1:t[r+1],x:t[r+2],y:t[r+3]}});break;case"T":for(let r=0;r<t.length;r+=2)n.push({marker:e,values:{x:t[r],y:t[r+1]}});break;case"A":for(let r=0;r<t.length;r+=7)n.push({marker:e,values:{radiusX:t[r],radiusY:t[r+1],rotation:t[r+2],largeArc:t[r+3],sweep:t[r+4],x:t[r+5],y:t[r+6]}});break;case"Z":n.push({marker:e,values:{x:0,y:0}})}return n}(e.marker,r)}).map(r$)}function rX(e,t,n){let r,i=[],a=[];return n&&e.forEach(e=>(Object.keys(e.values).forEach(t=>e.values[t]=e.values[t]&&parseFloat(e.values[t].toFixed(n))),e)),e.forEach(e=>{"M"===e.marker&&i.push([]),i[i.length-1].push(e)}),i.forEach(e=>{e.map(rW),function e(t,n){let r=["x","y"].every(e=>0===Math.round(Math.abs(t[n].values[e]-t[0].values[e])));"L"===t[n].marker&&r&&(t[n].overlap=!0,e(t,n-1)),"Z"===t[n].marker&&e(t,n-1)}(e,e.length-1);let n="Z"==e[e.length-1].marker;e.filter(e=>!e.overlap).map((e,r,i)=>{let o,l,s,c,u=function e(t,n,r){var i;let a=n-1,o=r[(a%(i=r.length)+i)%i];return"Z"!==o.marker?o:e(t,a,r)}(e,r,i),d=function e(t,n,r){var i;let a=n+1,o=r[(a%(i=r.length)+i)%i];return"Z"===o.marker?e(t,a,r):o}(e,r,i),h=rq(e.values,u.values),f=rq(e.values,d.values),p=f-h,g=180/Math.PI*p,m=Math.min(t,Math.abs((o=rG(e.values,d.values),Math.min(rG(u.values,e.values),o)/2*Math.tan(p/2)))),y=(s=0,(c=180/Math.PI*p)<0&&c>=-180||c>180&&c<360?l=rK(p/2,-m):(l=rK(p/2,m),s=1,l===1/0&&(l=m)),{offset:l,sweepFlag:s}),b=y.offset,v=y.sweepFlag,x=(0==r||r==i.length-1)&&!n;switch(e.marker){case"M":case"L":let w=[e.values.x+Math.sin(h)*b,e.values.y+Math.cos(h)*b],C=[e.values.x+Math.sin(f)*b,e.values.y+Math.cos(f)*b];x?a.push({marker:e.marker,values:e.values}):a.push({marker:e.marker,values:{x:parseFloat(w[0].toFixed(3)),y:parseFloat(w[1].toFixed(3))}}),x||"L"!==d.marker&&"M"!==d.marker||a.push({marker:"A",radius:m,values:{radiusX:parseFloat(m.toFixed(3)),radiusY:parseFloat(m.toFixed(3)),rotation:g,largeArc:0,sweep:v,x:parseFloat(C[0].toFixed(3)),y:parseFloat(C[1].toFixed(3))}});break;case"C":case"S":case"Q":case"T":case"A":case"Z":a.push({marker:e.marker,values:e.values})}})}),{path:(r=["radiusX","radiusY","rotation","largeArc","sweep","x1","y1","x2","y2","x","y"],a.map(e=>{let t="";if("Z"!==e.marker){let n=Object.keys(e.values);t=r.filter(e=>-1!==n.indexOf(e)).map(t=>e.values[t]).join()}return`${e.marker}${t}`}).join("").trim()),commands:a}}var S=x("8NFma"),rQ={};h(rQ,"parse",()=>Dc,e=>Dc=e),h(rQ,"stringify",()=>Du,e=>Du=e);var rZ=rZ||{};rZ.stringify=(NI={"visit_linear-gradient":function(e){return NI.visit_gradient(e)},"visit_repeating-linear-gradient":function(e){return NI.visit_gradient(e)},"visit_radial-gradient":function(e){return NI.visit_gradient(e)},"visit_repeating-radial-gradient":function(e){return NI.visit_gradient(e)},visit_gradient:function(e){var t=NI.visit(e.orientation);return t&&(t+=", "),e.type+"("+t+NI.visit(e.colorStops)+")"},visit_shape:function(e){var t=e.value,n=NI.visit(e.at),r=NI.visit(e.style);return r&&(t+=" "+r),n&&(t+=" at "+n),t},"visit_default-radial":function(e){var t="",n=NI.visit(e.at);return n&&(t+=n),t},"visit_extent-keyword":function(e){var t=e.value,n=NI.visit(e.at);return n&&(t+=" at "+n),t},"visit_position-keyword":function(e){return e.value},visit_position:function(e){return NI.visit(e.value.x)+" "+NI.visit(e.value.y)},"visit_%":function(e){return e.value+"%"},visit_em:function(e){return e.value+"em"},visit_px:function(e){return e.value+"px"},visit_calc:function(e){return"calc("+e.value+")"},visit_literal:function(e){return NI.visit_color(e.value,e)},visit_hex:function(e){return NI.visit_color("#"+e.value,e)},visit_rgb:function(e){return NI.visit_color("rgb("+e.value.join(", ")+")",e)},visit_rgba:function(e){return NI.visit_color("rgba("+e.value.join(", ")+")",e)},visit_hsl:function(e){return NI.visit_color("hsl("+e.value[0]+", "+e.value[1]+"%, "+e.value[2]+"%)",e)},visit_hsla:function(e){return NI.visit_color("hsla("+e.value[0]+", "+e.value[1]+"%, "+e.value[2]+"%, "+e.value[3]+")",e)},visit_var:function(e){return NI.visit_color("var("+e.value+")",e)},visit_color:function(e,t){var n=e,r=NI.visit(t.length);return r&&(n+=" "+r),n},visit_angular:function(e){return e.value+"deg"},visit_directional:function(e){return"to "+e.value},visit_array:function(e){var t="",n=e.length;return e.forEach(function(e,r){t+=NI.visit(e),r<n-1&&(t+=", ")}),t},visit_object:function(e){return e.width&&e.height?NI.visit(e.width)+" "+NI.visit(e.height):""},visit:function(e){if(!e)return"";if(e instanceof Array)return NI.visit_array(e);if("object"==typeof e&&!e.type)return NI.visit_object(e);if(e.type){var t=NI["visit_"+e.type];if(t)return t(e);throw Error("Missing visitor visit_"+e.type)}throw Error("Invalid node.")}},function(e){return NI.visit(e)});var rZ=rZ||{};rZ.parse=function(){var e=/^(\-(webkit|o|ms|moz)\-)?(linear\-gradient)/i,t=/^(\-(webkit|o|ms|moz)\-)?(repeating\-linear\-gradient)/i,n=/^(\-(webkit|o|ms|moz)\-)?(radial\-gradient)/i,r=/^(\-(webkit|o|ms|moz)\-)?(repeating\-radial\-gradient)/i,i=/^to (left (top|bottom)|right (top|bottom)|top (left|right)|bottom (left|right)|left|right|top|bottom)/i,a=/^(closest\-side|closest\-corner|farthest\-side|farthest\-corner|contain|cover)/,o=/^(left|center|right|top|bottom)/i,l=/^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))px/,s=/^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))\%/,c=/^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))em/,u=/^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))deg/,d=/^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))rad/,h=/^\(/,f=/^\)/,p=/^,/,g=/^\#([0-9a-fA-F]+)/,m=/^([a-zA-Z]+)/,y=/^rgb/i,b=/^rgba/i,v=/^var/i,x=/^calc/i,w=/^(--[a-zA-Z0-9-,\s\#]+)/,C=/^(([0-9]*\.[0-9]+)|([0-9]+\.?))/,S=/^hsl/i,k=/^hsla/i,_="";function E(e){var t=Error(_+": "+e);throw t.source=_,t}function T(){return P("linear-gradient",e,A)||P("repeating-linear-gradient",t,A)||P("radial-gradient",n,I)||P("repeating-radial-gradient",r,I)}function P(e,t,n){return O(t,function(t){var r=n();return r&&!V(p)&&E("Missing comma before color stops"),{type:e,orientation:r,colorStops:N(D)}})}function O(e,t){var n=V(e);if(n){V(h)||E("Missing (");var r=t(n);return V(f)||E("Missing )"),r}}function A(){var e=H("directional",i,1);if(e)return e;var t=H("position-keyword",o,1);return t?{type:"directional",value:t.value}:H("angular",u,1)||H("angular",d,1)}function I(){var e,t,n=R();return n&&((e=[]).push(n),t=_,V(p)&&((n=R())?e.push(n):_=t)),e}function R(){var e,t,n=((e=H("shape",/^(circle)/i,0))&&(e.style=F()||M()),e||((t=H("shape",/^(ellipse)/i,0))&&(t.style=j()||B()||M()),t));if(n)n.at=L();else{var r=M();if(r){n=r;var i=L();i&&(n.at=i)}else{var a=L();if(a)n={type:"default-radial",at:a};else{var o=j();o&&(n={type:"default-radial",at:o})}}}return n}function M(){return H("extent-keyword",a,1)}function L(){if(H("position",/^at/,0)){var e=j();return e||E("Missing positioning value"),e}}function j(){var e={x:B(),y:B()};if(e.x||e.y)return{type:"position",value:e}}function N(e){var t=e(),n=[];if(t)for(n.push(t);V(p);)(t=e())?n.push(t):E("One extra comma");return n}function D(){var e=H("hex",g,1)||O(k,function(){var e=z();V(p);var t=V(s),n=t?t[1]:null;V(p);var r=(t=V(s))?t[1]:null;V(p);var i=z();return n&&r||E("Expected percentage value for saturation and lightness in HSLA"),{type:"hsla",value:[e,n,r,i]}})||O(S,function(){V(s)&&E("HSL hue value must be a number in degrees (0-360) or normalized (-360 to 360), not a percentage");var e=z();V(p);var t=V(s),n=t?t[1]:null;V(p);var r=(t=V(s))?t[1]:null;return n&&r||E("Expected percentage value for saturation and lightness in HSL"),{type:"hsl",value:[e,n,r]}})||O(b,function(){return{type:"rgba",value:N(z)}})||O(y,function(){return{type:"rgb",value:N(z)}})||O(v,function(){return{type:"var",value:V(w)[1]}})||H("literal",m,0);return e||E("Expected color definition"),e.length=B(),e}function z(){return V(C)[1]}function B(){return H("%",s,1)||H("position-keyword",o,1)||O(x,function(){for(var e=1,t=0;e>0&&t<_.length;){var n=_.charAt(t);"("===n?e++:")"===n&&e--,t++}e>0&&E("Missing closing parenthesis in calc() expression");var r=_.substring(0,t-1);return U(t-1),{type:"calc",value:r}})||F()}function F(){return H("px",l,1)||H("em",c,1)}function H(e,t,n){var r=V(t);if(r)return{type:e,value:r[n]}}function V(e){var t,n;return(n=/^[\n\r\t\s]+/.exec(_))&&U(n[0].length),(t=e.exec(_))&&U(t[0].length),t}function U(e){_=_.substr(e)}return function(e){var t;return(_=e.toString().trim()).endsWith(";")&&(_=_.slice(0,-1)),t=N(T),_.length>0&&E("Invalid input not EOF"),t}}(),Dc=rZ.parse,Du=rZ.stringify;let rJ=e=>e.indexOf("linear-gradient")>=0,r0=e=>{if(!rJ(e))return{rotation:0,stops:[{offset:0,color:e},{offset:1,color:e}]};let t=g(rQ).parse(e)[0];return{rotation:t.orientation&&"value"in t.orientation?parseFloat(t.orientation.value):0,stops:t.colorStops.map((e,n)=>({color:"hex"===e.type?"#"+e.value:"literal"===e.type?e.value:`${e.type}(${e.value.join(",")})`,offset:e.length?parseFloat(e.length.value)/100:n/(t.colorStops.length-1)}))}},r1=(e,t=e.fill??"",n="fill")=>g(S).useMemo(()=>{if(!rJ(t))return{[n]:t};let{stops:r,rotation:i}=r0(t),a={x:e.a.width/2,y:e.a.height/2},o=(i%180+180)%180,l=o>45&&o<135?e.a.width:e.a.height,s=nT.Util.degToRad(i)-Math.PI/2,c=[];return(r.forEach(({offset:e,color:t})=>{c.push(e,t)}),"fill"===n)?{fillLinearGradientStartPointX:a.x-l/2*Math.cos(s),fillLinearGradientStartPointY:a.y-l/2*Math.sin(s),fillLinearGradientColorStops:c,fillLinearGradientEndPointX:a.x+l/2*Math.cos(s),fillLinearGradientEndPointY:a.y+l/2*Math.sin(s),fill:r[1].color,fillPriority:"linear-gradient"}:{strokeLinearGradientStartPointX:a.x-l/2*Math.cos(s),strokeLinearGradientStartPointY:a.y-l/2*Math.sin(s),strokeLinearGradientColorStops:c,strokeLinearGradientEndPointX:a.x+l/2*Math.cos(s),strokeLinearGradientEndPointY:a.y+l/2*Math.sin(s)}},[t,e.width,e.height]);var S=x("8NFma");let r2=!1,r4=(e=!r2)=>{r2=e};function r3(e,t){let n=g(S).useRef();g(S).useLayoutEffect(()=>{n.current&&n.current.destroy()},[t]),g(S).useLayoutEffect(()=>{if(!r2)return;let t=e.current.opacity();if(t)return e.current.opacity(0),n.current=new nT.Tween({node:e.current,opacity:t,onFinish:()=>{n.current?.destroy()}}),n.current.play(),()=>{n.current?.destroy()}},[])}let r8=0,r6=[],r5=3e4,r9=e=>{r5=e},r7=6e3,ie=e=>{r7=e};function it(e){r8+=1;let t=!1,n=!1,r=setTimeout(()=>{t||(io(`Timeout loading asset ${e}`),console.error("Timeout triggered for loader. Some assets may not have loaded.",e),t=!0,ir())},r5);return()=>{n?console.error("Finish called twice! That is not expected. id: ",e):(n=!0,t||(clearTimeout(r),ir()))}}function ir(){0==(r8-=1)&&(r6.forEach(e=>e()),r6=[])}let ii=[];function ia(e){ii.push(e)}function io(e){ii.forEach(t=>t(e))}var E=x("2SBKn");function il(e=""){return(e.match(/<\/p>/gi)||[]).length>1&&(e=e.replace(/<\/p>/gi,(e,t,n)=>(n.slice(t+e.length).match(/<\/p>/gi)||[]).length>0?"\n":e)),e.replace(/(<([^>]+)>)/gi,"").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&nbsp;/g," ")}function is(e){if(!e)return[];let t=new DOMParser().parseFromString(e,"text/html"),n=[],r=t.body.querySelectorAll("p");function i(e,t){if(e.nodeType===Node.TEXT_NODE){let r,i=e.textContent||"";i&&n.push((r={text:i},t.bold&&(r.bold=!0),t.italic&&(r.italic=!0),t.underline&&(r.underline=!0),t.strike&&(r.strike=!0),t.color&&(r.color=t.color),r));return}if(e.nodeType!==Node.ELEMENT_NODE)return;let r=e.tagName.toLowerCase(),a={...t};("strong"===r||"b"===r)&&(a.bold=!0),("em"===r||"i"===r)&&(a.italic=!0),"u"===r&&(a.underline=!0),"s"===r&&(a.strike=!0);let o=e.style;o.color&&(a.color=o.color),("bold"===o.fontWeight||parseInt(o.fontWeight)>=700)&&(a.bold=!0),"italic"===o.fontStyle&&(a.italic=!0);let l=o.textDecoration||o.textDecorationLine||"";for(let t of(l.includes("underline")&&(a.underline=!0),l.includes("line-through")&&(a.strike=!0),Array.from(e.childNodes)))i(t,a)}r.length>0?r.forEach((e,t)=>{i(e,{}),t<r.length-1&&n.push({text:" "})}):i(t.body,{});let a=[];for(let e of n){if(!e.text)continue;let t=a[a.length-1];t&&!!t.bold==!!e.bold&&!!t.italic==!!e.italic&&!!t.underline==!!e.underline&&!!t.strike==!!e.strike&&(t.color||"")===(e.color||"")?t.text+=e.text:a.push(e)}return a}function ic(e){return e?/<[a-z][a-z0-9]*(\s[^>]*)?>[^<]*<\/[a-z][a-z0-9]*>/i.test(e)?e=(e=e.replace(/<(?![a-z/!])/gi,"&lt;")).replace(/([^a-z0-9"'\s/])>/gi,"$1&gt;"):e.replace(/</g,"&lt;").replace(/>/g,"&gt;"):""}let iu=E.observable(["Roboto","Amatic SC","Press Start 2P","Marck Script","Rubik Mono One"]),id=E.observable({value:!1});function ih(){return id.value}function ip(e){if("default"===e){id.value=!1;return}id.value=!0,iu.splice(0,iu.length),iu.push(...e)}let ig=E.observable([]);function im(e){ig.push(e)}function iy(e){let t=ig.findIndex(t=>t.fontFamily===e);-1!==t&&ig.splice(t,1)}function ib(e){ig.replace(e)}let iv="BESbswy 0123456789 Il1Ww",ix=["sans-serif","serif","monospace"];function iw(e){return{width:e.width,actualBoundingBoxLeft:e.actualBoundingBoxLeft||0,actualBoundingBoxRight:e.actualBoundingBoxRight||0,actualBoundingBoxAscent:e.actualBoundingBoxAscent||0,actualBoundingBoxDescent:e.actualBoundingBoxDescent||0}}function iC(e="sans-serif",t="normal",n="normal",i=iv){r||(r=document.createElement("canvas"));let a=r.getContext("2d");return a.font=`${t} ${n} 40px ${e}`,iw(a.measureText(i))}function iS(e,t,n,i,a){return ix.some(o=>(function(e,t,n=.01){return Math.abs(e.width-t.width)>n||Math.abs(e.actualBoundingBoxLeft-t.actualBoundingBoxLeft)>n||Math.abs(e.actualBoundingBoxRight-t.actualBoundingBoxRight)>n||Math.abs(e.actualBoundingBoxAscent-t.actualBoundingBoxAscent)>n||Math.abs(e.actualBoundingBoxDescent-t.actualBoundingBoxDescent)>n})(function(e,t="sans-serif",n="normal",i="normal",a=iv){r||(r=document.createElement("canvas"));let o=r.getContext("2d");return o.font=`${n} ${i} 40px '${e}', ${t}`,iw(o.measureText(a))}(e,o,t,n,i),a[o]))}let ik={Arial:!0},i_=(e,t,n)=>t&&n?!!ik[`${e}_${t}_${n}`]:Object.keys(ik).some(t=>t.startsWith(e+"_"))||!!ik[e];async function iE(e,t,n,r){let i,a=`${e}_${t}_${n}`;if(ik[a])return;let o=!!document.fonts?.load,l=(i=function(e=""){let t=il(e).replace(/\s+/g," ").trim();return t?Array.from(t).slice(0,10).join(""):""}(r))?`${iv} ${i}`:iv,s={"sans-serif":iC("sans-serif",t,n,l),serif:iC("serif",t,n,l),monospace:iC("monospace",t,n,l)};if(o)try{if(await document.fonts.load(`${t} ${n} 16px '${e}'`,l),iS(e,t,n,l,s)){ik[a]=!0;return}}catch{}let c=Math.min(6e3,r7)/60;for(let r=0;r<c;r++){if(iS(e,t,n,l,s)){await new Promise(e=>setTimeout(e,100)),ik[a]=!0;return}await new Promise(e=>setTimeout(e,60))}console.warn(`Timeout for loading font "${e}". Looks like polotno can't load it. Is it a correct font family?`),io(`Timeout for loading font "${e}"`)}let iT={},iP="400,400italic,700,700italic";function iO(e){iP=e}function iA(e){let t=e.replace(/ /g,"+");return`https://fonts.googleapis.com/css?family=${t}:${iP}`}let iI={};var E=x("2SBKn"),iR=x("ibaza");let iM=E.observable({imageDownScalingEnabled:!0,removeBackgroundEnabled:!1,htmlRenderEnabled:!1,forceTextFitEnabled:!1,textVerticalResizeEnabled:!1,textOverflow:"resize",textSplitAllowed:!1,animationsEnabled:!1,aiTextEnabled:!1,autoDeleteEmptyText:!0}),iL="u">typeof window&&"localhost"===window.location.hostname,ij=E.action(e=>{iM.textVerticalResizeEnabled=e}),iN=E.action(e=>{iM.removeBackgroundEnabled=e}),iD=E.action(e=>{iL&&console.warn("useRemoveBackground is deprecated. Use setRemoveBackgroundEnabled instead."),iN(e)}),iz=E.action(e=>{iM.aiTextEnabled=e}),iB=E.action(e=>{iL&&console.warn("useHtmlTextRender is deprecated. Use setRichTextEnabled instead."),iM.htmlRenderEnabled=e}),iF=E.action(e=>{iM.htmlRenderEnabled=e}),iH=E.action(e=>{iM.imageDownScalingEnabled=e}),iV=E.action(e=>{console.warn("useDownScaling is deprecated. Use setDownScalingEnabled instead."),iH(e)}),iU=E.action(e=>{console.warn("setForceTextFit is deprecated. Use setTextOverflow instead."),iM.textOverflow="change-font-size"}),i$=E.action(e=>{iM.textOverflow=e}),iW=E.action(e=>{iM.textSplitAllowed=e}),iq=E.action(e=>{iM.animationsEnabled=e}),iG=E.action(e=>{iM.autoDeleteEmptyText=e}),iK={fontSize:14,fontFamily:"Roboto",fontWeight:"normal",fontStyle:"normal",lineHeight:1.2,letterSpacing:0,textTransform:"none",textDecoration:"",align:"center",fill:"black",stroke:"black",strokeWidth:0,curveEnabled:!1,curvePower:.5};function iY(e){return!function(e){e=e.replace(/\s/g,"");let t=0;for(var n=0;n<e.length;n++)(function(e){var t="֑-߿‏‫‮יִ-﷽ﹰ-ﻼ";return RegExp("^[^"+t+"]*?["+t+"]").test(e)})(e[n])&&(t+=1);return t>e.length/2}(e)?"ltr":"rtl"}function iX(e,t,n,r){let i=Math.max(-.9999,Math.min(.9999,n));if(1e-4>Math.abs(i))return`M 0 ${t/2} L ${e} ${t/2}`;let a=5*r/(2*Math.abs(i))-r,o=e/2;if(i>0){let e=2*a+r/2;return`M ${o} ${e} A ${a} ${a} 0 1 1 ${o} ${e-2*a} A ${a} ${a} 0 1 1 ${o} ${e}`}{let e=-(2*a-Math.round(t))-r/2;return`M ${o} ${e} A ${a} ${a} 0 1 0 ${o} ${e+2*a} A ${a} ${a} 0 1 0 ${o} ${e}`}}function iQ(e,t,n,r){if(!rJ(e))return"";let{stops:i,rotation:a}=r0(e),o=a*Math.PI/180,l=.5-.5*Math.sin(o),s=.5+.5*Math.cos(o),c=.5+.5*Math.sin(o),u=.5-.5*Math.cos(o),d=i.map(({offset:e,color:t})=>`<stop offset="${100*e}%" stop-color="${t}" />`).join("");return`<linearGradient id="${t}" x1="${100*l}%" y1="${100*s}%" x2="${100*c}%" y2="${100*u}%">${d}</linearGradient>`}function iZ(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function iJ(e,t,n){return e.map(e=>{let r=[];e.bold&&"bold"!==t.fontWeight&&r.push('font-weight="bold"'),e.italic&&"italic"!==t.fontStyle&&r.push('font-style="italic"'),e.underline&&r.push('text-decoration="underline"'),e.strike&&r.push('text-decoration="line-through"'),!n?.omitColors&&e.color&&e.color!==t.fill&&r.push(`fill="${iZ(e.color)}"`);let i=iZ(e.text);return 0===r.length?i:`<tspan ${r.join(" ")}>${i}</tspan>`}).join("")}function i0(e,{fontFamily:t="",color:n="black",forEditor:r=!1}={}){let i={...iK,...e},a=t||i.fontFamily,o=rJ(i.fill),l=rJ(i.stroke),s="ellipsis"===iM.textOverflow&&!r&&!i.curveEnabled&&!!i.height,c=(()=>{if(!s)return[];let e=Math.max(1,Math.round(i.height)),t=Math.max(1,Math.floor(e/Math.max(1,("number"==typeof i.lineHeight?i.lineHeight:1.2)*i.fontSize)));return[`max-height: ${e}px`,"overflow: hidden","display: -webkit-box","-webkit-box-orient: vertical",`-webkit-line-clamp: ${t}`,`line-clamp: ${t}`]})(),u=e=>`
21
+ `,nD={};function nz(e,t,n=nD){if(!nR&&"zIndex"in t&&(console.warn(nN),nR=!0),!nM&&t.draggable){var r=void 0!==t.x||void 0!==t.y,i=t.onDragEnd||t.onDragMove;r&&!i&&(console.warn(nj),nM=!0)}for(var a in n)if(!nI[a]){var o="on"===a.slice(0,2),l=n[a]!==t[a];if(o&&l){var s=a.substr(2).toLowerCase();"content"===s.substr(0,7)&&(s="content"+s.substr(7,1).toUpperCase()+s.substr(8)),e.off(s,n[a])}t.hasOwnProperty(a)||e.setAttr(a,void 0)}var c=t._useStrictMode,u={},d=!1;let h={};for(var a in t)if(!nI[a]){var o="on"===a.slice(0,2),f=n[a]!==t[a];if(o&&f){var s=a.substr(2).toLowerCase();"content"===s.substr(0,7)&&(s="content"+s.substr(7,1).toUpperCase()+s.substr(8)),t[a]&&(h[s]=t[a])}!o&&(t[a]!==n[a]||c&&t[a]!==e.getAttr(a))&&(d=!0,u[a]=t[a])}for(var s in d&&(e.setAttrs(u),nB(e)),h)e.on(s+nL,h[s])}function nB(e){if(!V.autoDrawEnabled){var t=e.getLayer()||e.getStage();t&&t.batchDraw()}}x("clk2u");let nF={},nH={};function nV(e,t){"string"==typeof t?console.error(`Do not use plain text as child of Konva.Node. You are using text: ${t}`):(e.add(t),nB(e))}function nU(e,t,n){let r=tE[e];r||(console.error(`Konva has no node with the type ${e}. Group will be used instead. If you use minimal version of react-konva, just import required nodes into Konva: "import "konva/lib/shapes/${e}" If you want to render DOM elements as part of canvas tree take a look into this demo: https://konvajs.github.io/docs/react/DOM_Portal.html`),r=tE.Group);let i={},a={};for(var o in t)"on"===o.slice(0,2)?a[o]=t[o]:i[o]=t[o];let l=new r(i);return nz(l,a),l}function n$(e,t,n){console.error(`Text components are not supported for now in ReactKonva. Your text is: "${e}"`)}function nW(e,t,n){return!1}function nq(e){return e}function nG(){return null}function nK(){return null}function nY(e,t,n,r){return nH}function nX(){}function nQ(e){}function nZ(e,t){return!1}function nJ(){return nF}function n0(){return nF}tE.Node.prototype._applyProps=nz;let n1=setTimeout,n2=clearTimeout,n4=!1,n3="function"==typeof queueMicrotask?e=>queueMicrotask(()=>queueMicrotask(e)):setTimeout,n8=-1;function n6(e,t){return!1}let n5=!1,n9=!0,n7=!0;function re(e,t){t.parent===e?t.moveToTop():e.add(t),nB(e)}function rt(e,t){t.parent===e?t.moveToTop():e.add(t),nB(e)}function rn(e,t,n){t._remove(),e.add(t),t.setZIndex(n.getZIndex()),nB(e)}function rr(e,t,n){rn(e,t,n)}function ri(e,t){t.destroy(),t.off(nL),nB(e)}function ra(e,t){t.destroy(),t.off(nL),nB(e)}function ro(e,t,n){console.error(`Text components are not yet supported in ReactKonva. You text is: "${n}"`)}function rl(e,t,n){}function rs(e,t,n,r,i){nz(e,i,r)}function rc(e){e.hide(),nB(e)}function ru(e){}function rd(e,t){(null==t.visible||t.visible)&&e.show()}function rh(e,t){}function rf(e){}function rp(){}let rg=()=>nO.DefaultEventPriority;var S=x("8NFma"),rm=Object.defineProperty,ry=Object.defineProperties,rb=Object.getOwnPropertyDescriptors,rv=Object.getOwnPropertySymbols,rx=Object.prototype.hasOwnProperty,rw=Object.prototype.propertyIsEnumerable,rC=(e,t,n)=>t in e?rm(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,rS=(e,t)=>{for(var n in t||(t={}))rx.call(t,n)&&rC(e,n,t[n]);if(rv)for(var n of rv(t))rw.call(t,n)&&rC(e,n,t[n]);return e};function rk(e){try{return Object.defineProperties(e,{_currentRenderer:{get:()=>null,set(){}},_currentRenderer2:{get:()=>null,set(){}}})}catch(t){return e}}"u">typeof window&&((null==(Dl=window.document)?void 0:Dl.createElement)||(null==(Ds=window.navigator)?void 0:Ds.product)==="ReactNative")?S.useLayoutEffect:S.useEffect;let r_=console.error;console.error=function(){let e=[...arguments].join("");if((null==e?void 0:e.startsWith("Warning:"))&&e.includes("useContext")){console.error=r_;return}return r_.apply(this,arguments)};let rE=rk(S.createContext(null));class rT extends S.Component{render(){return S.createElement(rE.Provider,{value:this._reactInternals},this.props.children)}}function rP(){let e=function(){let e=function(){let e=S.useContext(rE);if(null===e)throw Error("its-fine: useFiber must be called within a <FiberProvider />!");let t=S.useId();return S.useMemo(()=>{for(let n of[e,null==e?void 0:e.alternate]){if(!n)continue;let e=function e(t,n,r){if(!t)return;if(!0===r(t))return t;let i=n?t.return:t.child;for(;i;){let t=e(i,n,r);if(t)return t;i=n?null:i.sibling}}(n,!1,e=>{let n=e.memoizedState;for(;n;){if(n.memoizedState===t)return!0;n=n.next}});if(e)return e}},[e,t])}(),[t]=S.useState(()=>new Map);t.clear();let n=e;for(;n;){if(n.type&&"object"==typeof n.type){let e=void 0===n.type._context&&n.type.Provider===n.type?n.type:n.type._context;e&&e!==rE&&!t.has(e)&&t.set(e,S.useContext(rk(e)))}n=n.return}return t}();return S.useMemo(()=>Array.from(e.keys()).reduce((t,n)=>r=>S.createElement(t,null,S.createElement(n.Provider,ry(rS({},r),rb({value:e.get(n)})))),e=>S.createElement(rT,rS({},e))),[e])}console.log("react-konva v18");let rO=e=>{let t,n=g(S).useRef(null),r=g(S).useRef(null),i=g(S).useRef(null),a=(t=g(S).useRef({}),g(S).useLayoutEffect(()=>{t.current=e}),g(S).useLayoutEffect(()=>()=>{t.current={}},[]),t.current),o=rP(),l=t=>{let{forwardedRef:n}=e;n&&("function"==typeof n?n(t):n.current=t)};return g(S).useLayoutEffect(()=>(r.current=new tE.Stage({width:e.width,height:e.height,container:n.current}),l(r.current),i.current=rz.createContainer(r.current,nO.LegacyRoot,!1,null),rz.updateContainer(g(S).createElement(o,{},e.children),i.current),()=>{tE.isBrowser&&(l(null),rz.flushSync(()=>{rz.updateContainer(null,i.current,null)}),r.current.destroy())}),[]),g(S).useLayoutEffect(()=>{l(r.current),nz(r.current,e,a),rz.flushSync(()=>{rz.updateContainer(g(S).createElement(o,{},e.children),i.current,null)})}),g(S).createElement("div",{ref:n,id:e.id,accessKey:e.accessKey,className:e.className,role:e.role,style:e.style,tabIndex:e.tabIndex,title:e.title})},rA="Group",rI="Label",rR="Rect",rM="Line",rL="Image",rj="Text",rN="Path",rD="Transformer",rz=g(nP)(nA);rz.injectIntoDevTools({findHostInstanceByFiber:()=>null,bundleType:0,version:g(S).version,rendererPackageName:"react-konva"});let rB=g(S).forwardRef((e,t)=>g(S).createElement(rT,{},g(S).createElement(rO,{...e,forwardedRef:t})));var rF={},S=x("8NFma");rF=function(e,t,n){let r=S.useRef("loading"),i=S.useRef(),[a,o]=S.useState(0),l=S.useRef(),s=S.useRef(),c=S.useRef();return(l.current!==e||s.current!==t||c.current!==n)&&(r.current="loading",i.current=void 0,l.current=e,s.current=t,c.current=n),S.useLayoutEffect(function(){if(e){var a=document.createElement("img");return a.addEventListener("load",l),a.addEventListener("error",s),t&&(a.crossOrigin=t),n&&(a.referrerPolicy=n),a.src=e,function(){a.removeEventListener("load",l),a.removeEventListener("error",s)}}function l(){a.decode().catch(()=>{}).finally(()=>{r.current="loaded",i.current=a,o(Math.random())})}function s(){r.current="failed",i.current=void 0,o(Math.random())}},[e,t,n]),[i.current,r.current]};var S=(x("8NFma"),x("8NFma"),x("8NFma")),rH=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)0>t.indexOf(r[i])&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]]);return n};let rV=({children:e,groupProps:t,divProps:n,transform:r,transformFunc:i,parentNodeFunc:a})=>{let o=rP(),l=g(S).useRef(null),[s]=g(S).useState(()=>document.createElement("div")),c=g(S).useMemo(()=>g(k).createRoot(s),[s]),u=null==r||r,d=function(e=()=>{}){let t=g(S).useRef(e);return t.current=e,g(S).useCallback((...e)=>t.current.apply(null,e),[])}(()=>{if(u&&l.current){let e=l.current.getAbsoluteTransform().decompose();i&&(e=i(e)),s.style.position="absolute",s.style.zIndex="10",s.style.top="0px",s.style.left="0px",s.style.transform=`translate(${e.x}px, ${e.y}px) rotate(${e.rotation}deg) scaleX(${e.scaleX}) scaleY(${e.scaleY})`,s.style.transformOrigin="top left"}else s.style.position="",s.style.zIndex="",s.style.top="",s.style.left="",s.style.transform="",s.style.transformOrigin="";let e=n||{},{style:t}=e,r=rH(e,["style"]);Object.assign(s.style,t),Object.assign(s,r)});return g(S).useLayoutEffect(()=>{var e;let t=l.current;if(!t)return;let n=a?a({stage:t.getStage()}):null==(e=t.getStage())?void 0:e.container();if(n){let e;return n.appendChild(s),u&&"absolute"!==(e=window.getComputedStyle(n).position)&&"relative"!==e&&(n.style.position="relative"),t.on("absoluteTransformChange",d),d(),()=>{var e;t.off("absoluteTransformChange",d),null==(e=s.parentNode)||e.removeChild(s)}}},[u,a]),g(S).useLayoutEffect(()=>{d()},[n,i]),g(S).useLayoutEffect(()=>{queueMicrotask(()=>{(0,_.flushSync)(()=>{c.render(g(S).createElement(o,null,e))})})}),g(S).useLayoutEffect(()=>()=>{setTimeout(()=>{c.unmount()})},[]),g(S).createElement(rA,Object.assign({ref:l},t))};var S=x("8NFma");let rU=({selector:e,enabled:t,children:n})=>{let r=g(S).useRef(null),i=g(S).useRef(null),a=g(S).useRef(null),o=null==t||t;return g(S).useLayoutEffect(()=>{if(!r.current||!i.current)return;a.current=i.current;let t=r.current.getStage().findOne(e);o&&t?i.current.moveTo(t):i.current.moveTo(r.current);let n=r.current.getLayer();if(n&&(n.batchDraw(),t)){let e=t.getLayer();if(!e)return;e.batchDraw()}},[e,o]),g(S).useEffect(()=>()=>{var e;null==(e=a.current)||e.destroy()},[]),g(S).createElement(rA,{name:"_outer_portal",ref:r},g(S).createElement(rA,{name:"_inner_portal",ref:i},n))};var E=x("2SBKn");function r$(e,t,n){let r=n[t-1]||{values:{x:0,y:0}};if(e.marker===e.marker.toLowerCase())switch(e.marker=e.marker.toUpperCase(),e.marker){case"M":case"L":case"A":case"T":e.values.x+=r.values.x,e.values.y+=r.values.y;break;case"H":e.marker="L",e.values.x+=r.values.x,e.values.y=r.values.y;break;case"V":e.marker="L",e.values.x=r.values.x,e.values.y+=r.values.y;break;case"C":e.values.x+=r.values.x,e.values.y+=r.values.y,e.values.x1+=r.values.x,e.values.y1+=r.values.y,e.values.x2+=r.values.x,e.values.y2+=r.values.y;break;case"S":e.values.x+=r.values.x,e.values.y+=r.values.y,e.values.x2+=r.values.x,e.values.y2+=r.values.y;break;case"Q":e.values.x+=r.values.x,e.values.y+=r.values.y,e.values.x1+=r.values.x,e.values.y1+=r.values.y}else if(e.marker===e.marker.toUpperCase())switch(e.marker){case"H":e.marker="L",e.values.y=r.values.y;break;case"V":e.marker="L",e.values.x=r.values.x}if("Z"===e.marker){let r=function e(t,n){return"M"===t[n].marker?t[n]:e(t,n-1)}(n,t);e.values.x=r.values.x,e.values.y=r.values.y}return e}function rW(e,t,n){if(0!==t&&"L"===e.marker){let r=n[t-1];["x","y"].every(t=>0===Math.round(Math.abs(r.values[t]-e.values[t])))&&(e.overlap=!0)}return e}function rq(e,t){return Math.atan2(t.x-e.x,t.y-e.y)}function rG(e,t){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function rK(e,t){let n=t/Math.tan(e);return n===1/0||n===-1/0||isNaN(n)?t:n}function rY(e){let t=/-?[0-9]*\.?\d+/g;return[...e.matchAll(/[MmLlSsQqLlHhVvCcSsQqTtAaZz]/g)].map(e=>({marker:e[0],index:e.index})).reduceRight((t,n)=>{let r=e.substring(n.index,t.length?t[t.length-1].index:e.length);return t.concat([{marker:n.marker,index:n.index,chunk:r.length>0?r.substr(1,r.length-1):r}])},[]).reverse().flatMap(e=>{let n=e.chunk.match(t),r=n?n.map(parseFloat):[];return function(e,t){let n=[];switch(e.toUpperCase()){case"M":for(let r=0;r<t.length;r+=2){let i;i=e===e.toUpperCase()?0===r?"M":"L":0===r?"m":"l",n.push({marker:i,values:{x:t[r],y:t[r+1]}})}break;case"L":for(let r=0;r<t.length;r+=2)n.push({marker:e,values:{x:t[r],y:t[r+1]}});break;case"H":for(let r=0;r<t.length;r++)n.push({marker:e,values:{x:t[r],y:0}});break;case"V":for(let r=0;r<t.length;r++)n.push({marker:e,values:{x:0,y:t[r]}});break;case"C":for(let r=0;r<t.length;r+=6)n.push({marker:e,values:{x1:t[r],y1:t[r+1],x2:t[r+2],y2:t[r+3],x:t[r+4],y:t[r+5]}});break;case"S":for(let r=0;r<t.length;r+=4)n.push({marker:e,values:{x2:t[r],y2:t[r+1],x:t[r+2],y:t[r+3]}});break;case"Q":for(let r=0;r<t.length;r+=4)n.push({marker:e,values:{x1:t[r],y1:t[r+1],x:t[r+2],y:t[r+3]}});break;case"T":for(let r=0;r<t.length;r+=2)n.push({marker:e,values:{x:t[r],y:t[r+1]}});break;case"A":for(let r=0;r<t.length;r+=7)n.push({marker:e,values:{radiusX:t[r],radiusY:t[r+1],rotation:t[r+2],largeArc:t[r+3],sweep:t[r+4],x:t[r+5],y:t[r+6]}});break;case"Z":n.push({marker:e,values:{x:0,y:0}})}return n}(e.marker,r)}).map(r$)}function rX(e,t,n){let r,i=[],a=[];return n&&e.forEach(e=>(Object.keys(e.values).forEach(t=>e.values[t]=e.values[t]&&parseFloat(e.values[t].toFixed(n))),e)),e.forEach(e=>{"M"===e.marker&&i.push([]),i[i.length-1].push(e)}),i.forEach(e=>{e.map(rW),function e(t,n){let r=["x","y"].every(e=>0===Math.round(Math.abs(t[n].values[e]-t[0].values[e])));"L"===t[n].marker&&r&&(t[n].overlap=!0,e(t,n-1)),"Z"===t[n].marker&&e(t,n-1)}(e,e.length-1);let n="Z"==e[e.length-1].marker;e.filter(e=>!e.overlap).map((e,r,i)=>{let o,l,s,c,u=function e(t,n,r){var i;let a=n-1,o=r[(a%(i=r.length)+i)%i];return"Z"!==o.marker?o:e(t,a,r)}(e,r,i),d=function e(t,n,r){var i;let a=n+1,o=r[(a%(i=r.length)+i)%i];return"Z"===o.marker?e(t,a,r):o}(e,r,i),h=rq(e.values,u.values),f=rq(e.values,d.values),p=f-h,g=180/Math.PI*p,m=Math.min(t,Math.abs((o=rG(e.values,d.values),Math.min(rG(u.values,e.values),o)/2*Math.tan(p/2)))),y=(s=0,(c=180/Math.PI*p)<0&&c>=-180||c>180&&c<360?l=rK(p/2,-m):(l=rK(p/2,m),s=1,l===1/0&&(l=m)),{offset:l,sweepFlag:s}),b=y.offset,v=y.sweepFlag,x=(0==r||r==i.length-1)&&!n;switch(e.marker){case"M":case"L":let w=[e.values.x+Math.sin(h)*b,e.values.y+Math.cos(h)*b],C=[e.values.x+Math.sin(f)*b,e.values.y+Math.cos(f)*b];x?a.push({marker:e.marker,values:e.values}):a.push({marker:e.marker,values:{x:parseFloat(w[0].toFixed(3)),y:parseFloat(w[1].toFixed(3))}}),x||"L"!==d.marker&&"M"!==d.marker||a.push({marker:"A",radius:m,values:{radiusX:parseFloat(m.toFixed(3)),radiusY:parseFloat(m.toFixed(3)),rotation:g,largeArc:0,sweep:v,x:parseFloat(C[0].toFixed(3)),y:parseFloat(C[1].toFixed(3))}});break;case"C":case"S":case"Q":case"T":case"A":case"Z":a.push({marker:e.marker,values:e.values})}})}),{path:(r=["radiusX","radiusY","rotation","largeArc","sweep","x1","y1","x2","y2","x","y"],a.map(e=>{let t="";if("Z"!==e.marker){let n=Object.keys(e.values);t=r.filter(e=>-1!==n.indexOf(e)).map(t=>e.values[t]).join()}return`${e.marker}${t}`}).join("").trim()),commands:a}}var S=x("8NFma"),rQ={};h(rQ,"parse",()=>Dc,e=>Dc=e),h(rQ,"stringify",()=>Du,e=>Du=e);var rZ=rZ||{};rZ.stringify=(NI={"visit_linear-gradient":function(e){return NI.visit_gradient(e)},"visit_repeating-linear-gradient":function(e){return NI.visit_gradient(e)},"visit_radial-gradient":function(e){return NI.visit_gradient(e)},"visit_repeating-radial-gradient":function(e){return NI.visit_gradient(e)},visit_gradient:function(e){var t=NI.visit(e.orientation);return t&&(t+=", "),e.type+"("+t+NI.visit(e.colorStops)+")"},visit_shape:function(e){var t=e.value,n=NI.visit(e.at),r=NI.visit(e.style);return r&&(t+=" "+r),n&&(t+=" at "+n),t},"visit_default-radial":function(e){var t="",n=NI.visit(e.at);return n&&(t+=n),t},"visit_extent-keyword":function(e){var t=e.value,n=NI.visit(e.at);return n&&(t+=" at "+n),t},"visit_position-keyword":function(e){return e.value},visit_position:function(e){return NI.visit(e.value.x)+" "+NI.visit(e.value.y)},"visit_%":function(e){return e.value+"%"},visit_em:function(e){return e.value+"em"},visit_px:function(e){return e.value+"px"},visit_calc:function(e){return"calc("+e.value+")"},visit_literal:function(e){return NI.visit_color(e.value,e)},visit_hex:function(e){return NI.visit_color("#"+e.value,e)},visit_rgb:function(e){return NI.visit_color("rgb("+e.value.join(", ")+")",e)},visit_rgba:function(e){return NI.visit_color("rgba("+e.value.join(", ")+")",e)},visit_hsl:function(e){return NI.visit_color("hsl("+e.value[0]+", "+e.value[1]+"%, "+e.value[2]+"%)",e)},visit_hsla:function(e){return NI.visit_color("hsla("+e.value[0]+", "+e.value[1]+"%, "+e.value[2]+"%, "+e.value[3]+")",e)},visit_var:function(e){return NI.visit_color("var("+e.value+")",e)},visit_color:function(e,t){var n=e,r=NI.visit(t.length);return r&&(n+=" "+r),n},visit_angular:function(e){return e.value+"deg"},visit_directional:function(e){return"to "+e.value},visit_array:function(e){var t="",n=e.length;return e.forEach(function(e,r){t+=NI.visit(e),r<n-1&&(t+=", ")}),t},visit_object:function(e){return e.width&&e.height?NI.visit(e.width)+" "+NI.visit(e.height):""},visit:function(e){if(!e)return"";if(e instanceof Array)return NI.visit_array(e);if("object"==typeof e&&!e.type)return NI.visit_object(e);if(e.type){var t=NI["visit_"+e.type];if(t)return t(e);throw Error("Missing visitor visit_"+e.type)}throw Error("Invalid node.")}},function(e){return NI.visit(e)});var rZ=rZ||{};rZ.parse=function(){var e=/^(\-(webkit|o|ms|moz)\-)?(linear\-gradient)/i,t=/^(\-(webkit|o|ms|moz)\-)?(repeating\-linear\-gradient)/i,n=/^(\-(webkit|o|ms|moz)\-)?(radial\-gradient)/i,r=/^(\-(webkit|o|ms|moz)\-)?(repeating\-radial\-gradient)/i,i=/^to (left (top|bottom)|right (top|bottom)|top (left|right)|bottom (left|right)|left|right|top|bottom)/i,a=/^(closest\-side|closest\-corner|farthest\-side|farthest\-corner|contain|cover)/,o=/^(left|center|right|top|bottom)/i,l=/^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))px/,s=/^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))\%/,c=/^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))em/,u=/^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))deg/,d=/^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))rad/,h=/^\(/,f=/^\)/,p=/^,/,g=/^\#([0-9a-fA-F]+)/,m=/^([a-zA-Z]+)/,y=/^rgb/i,b=/^rgba/i,v=/^var/i,x=/^calc/i,w=/^(--[a-zA-Z0-9-,\s\#]+)/,C=/^(([0-9]*\.[0-9]+)|([0-9]+\.?))/,S=/^hsl/i,k=/^hsla/i,_="";function E(e){var t=Error(_+": "+e);throw t.source=_,t}function T(){return P("linear-gradient",e,A)||P("repeating-linear-gradient",t,A)||P("radial-gradient",n,I)||P("repeating-radial-gradient",r,I)}function P(e,t,n){return O(t,function(t){var r=n();return r&&!V(p)&&E("Missing comma before color stops"),{type:e,orientation:r,colorStops:N(D)}})}function O(e,t){var n=V(e);if(n){V(h)||E("Missing (");var r=t(n);return V(f)||E("Missing )"),r}}function A(){var e=H("directional",i,1);if(e)return e;var t=H("position-keyword",o,1);return t?{type:"directional",value:t.value}:H("angular",u,1)||H("angular",d,1)}function I(){var e,t,n=R();return n&&((e=[]).push(n),t=_,V(p)&&((n=R())?e.push(n):_=t)),e}function R(){var e,t,n=((e=H("shape",/^(circle)/i,0))&&(e.style=F()||M()),e||((t=H("shape",/^(ellipse)/i,0))&&(t.style=j()||B()||M()),t));if(n)n.at=L();else{var r=M();if(r){n=r;var i=L();i&&(n.at=i)}else{var a=L();if(a)n={type:"default-radial",at:a};else{var o=j();o&&(n={type:"default-radial",at:o})}}}return n}function M(){return H("extent-keyword",a,1)}function L(){if(H("position",/^at/,0)){var e=j();return e||E("Missing positioning value"),e}}function j(){var e={x:B(),y:B()};if(e.x||e.y)return{type:"position",value:e}}function N(e){var t=e(),n=[];if(t)for(n.push(t);V(p);)(t=e())?n.push(t):E("One extra comma");return n}function D(){var e=H("hex",g,1)||O(k,function(){var e=z();V(p);var t=V(s),n=t?t[1]:null;V(p);var r=(t=V(s))?t[1]:null;V(p);var i=z();return n&&r||E("Expected percentage value for saturation and lightness in HSLA"),{type:"hsla",value:[e,n,r,i]}})||O(S,function(){V(s)&&E("HSL hue value must be a number in degrees (0-360) or normalized (-360 to 360), not a percentage");var e=z();V(p);var t=V(s),n=t?t[1]:null;V(p);var r=(t=V(s))?t[1]:null;return n&&r||E("Expected percentage value for saturation and lightness in HSL"),{type:"hsl",value:[e,n,r]}})||O(b,function(){return{type:"rgba",value:N(z)}})||O(y,function(){return{type:"rgb",value:N(z)}})||O(v,function(){return{type:"var",value:V(w)[1]}})||H("literal",m,0);return e||E("Expected color definition"),e.length=B(),e}function z(){return V(C)[1]}function B(){return H("%",s,1)||H("position-keyword",o,1)||O(x,function(){for(var e=1,t=0;e>0&&t<_.length;){var n=_.charAt(t);"("===n?e++:")"===n&&e--,t++}e>0&&E("Missing closing parenthesis in calc() expression");var r=_.substring(0,t-1);return U(t-1),{type:"calc",value:r}})||F()}function F(){return H("px",l,1)||H("em",c,1)}function H(e,t,n){var r=V(t);if(r)return{type:e,value:r[n]}}function V(e){var t,n;return(n=/^[\n\r\t\s]+/.exec(_))&&U(n[0].length),(t=e.exec(_))&&U(t[0].length),t}function U(e){_=_.substr(e)}return function(e){var t;return(_=e.toString().trim()).endsWith(";")&&(_=_.slice(0,-1)),t=N(T),_.length>0&&E("Invalid input not EOF"),t}}(),Dc=rZ.parse,Du=rZ.stringify;let rJ=e=>e.indexOf("linear-gradient")>=0,r0=e=>{if(!rJ(e))return{rotation:0,stops:[{offset:0,color:e},{offset:1,color:e}]};let t=g(rQ).parse(e)[0];return{rotation:t.orientation&&"value"in t.orientation?parseFloat(t.orientation.value):0,stops:t.colorStops.map((e,n)=>({color:"hex"===e.type?"#"+e.value:"literal"===e.type?e.value:`${e.type}(${e.value.join(",")})`,offset:e.length?parseFloat(e.length.value)/100:n/(t.colorStops.length-1)}))}},r1=(e,t=e.fill??"",n="fill")=>g(S).useMemo(()=>{if(!rJ(t))return{[n]:t};let{stops:r,rotation:i}=r0(t),a={x:e.a.width/2,y:e.a.height/2},o=(i%180+180)%180,l=o>45&&o<135?e.a.width:e.a.height,s=nT.Util.degToRad(i)-Math.PI/2,c=[];return(r.forEach(({offset:e,color:t})=>{c.push(e,t)}),"fill"===n)?{fillLinearGradientStartPointX:a.x-l/2*Math.cos(s),fillLinearGradientStartPointY:a.y-l/2*Math.sin(s),fillLinearGradientColorStops:c,fillLinearGradientEndPointX:a.x+l/2*Math.cos(s),fillLinearGradientEndPointY:a.y+l/2*Math.sin(s),fill:r[1].color,fillPriority:"linear-gradient"}:{strokeLinearGradientStartPointX:a.x-l/2*Math.cos(s),strokeLinearGradientStartPointY:a.y-l/2*Math.sin(s),strokeLinearGradientColorStops:c,strokeLinearGradientEndPointX:a.x+l/2*Math.cos(s),strokeLinearGradientEndPointY:a.y+l/2*Math.sin(s)}},[t,e.width,e.height]);var S=x("8NFma");let r2=!1,r4=(e=!r2)=>{r2=e};function r3(e,t){let n=g(S).useRef();g(S).useLayoutEffect(()=>{n.current&&n.current.destroy()},[t]),g(S).useLayoutEffect(()=>{if(!r2)return;let t=e.current.opacity();if(t)return e.current.opacity(0),n.current=new nT.Tween({node:e.current,opacity:t,onFinish:()=>{n.current?.destroy()}}),n.current.play(),()=>{n.current?.destroy()}},[])}let r8=0,r6=[],r5=3e4,r9=e=>{r5=e},r7=6e3,ie=e=>{r7=e};function it(e){r8+=1;let t=!1,n=!1,r=setTimeout(()=>{t||(io(`Timeout loading asset ${e}`),console.error("Timeout triggered for loader. Some assets may not have loaded.",e),t=!0,ir())},r5);return()=>{n?console.error("Finish called twice! That is not expected. id: ",e):(n=!0,t||(clearTimeout(r),ir()))}}function ir(){0==(r8-=1)&&(r6.forEach(e=>e()),r6=[])}let ii=[];function ia(e){ii.push(e)}function io(e){ii.forEach(t=>t(e))}var E=x("2SBKn");function il(e=""){return(e.match(/<\/p>/gi)||[]).length>1&&(e=e.replace(/<\/p>/gi,(e,t,n)=>(n.slice(t+e.length).match(/<\/p>/gi)||[]).length>0?"\n":e)),e.replace(/(<([^>]+)>)/gi,"").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&nbsp;/g," ")}function is(e){if(!e)return[];let t=new DOMParser().parseFromString(e,"text/html"),n=[],r=t.body.querySelectorAll("p");function i(e,t){if(e.nodeType===Node.TEXT_NODE){let r,i=e.textContent||"";i&&n.push((r={text:i},t.bold&&(r.bold=!0),t.italic&&(r.italic=!0),t.underline&&(r.underline=!0),t.strike&&(r.strike=!0),t.color&&(r.color=t.color),r));return}if(e.nodeType!==Node.ELEMENT_NODE)return;let r=e.tagName.toLowerCase(),a={...t};("strong"===r||"b"===r)&&(a.bold=!0),("em"===r||"i"===r)&&(a.italic=!0),"u"===r&&(a.underline=!0),"s"===r&&(a.strike=!0);let o=e.style;o.color&&(a.color=o.color),("bold"===o.fontWeight||parseInt(o.fontWeight)>=700)&&(a.bold=!0),"italic"===o.fontStyle&&(a.italic=!0);let l=o.textDecoration||o.textDecorationLine||"";for(let t of(l.includes("underline")&&(a.underline=!0),l.includes("line-through")&&(a.strike=!0),Array.from(e.childNodes)))i(t,a)}r.length>0?r.forEach((e,t)=>{i(e,{}),t<r.length-1&&n.push({text:" "})}):i(t.body,{});let a=[];for(let e of n){if(!e.text)continue;let t=a[a.length-1];t&&!!t.bold==!!e.bold&&!!t.italic==!!e.italic&&!!t.underline==!!e.underline&&!!t.strike==!!e.strike&&(t.color||"")===(e.color||"")?t.text+=e.text:a.push(e)}return a}function ic(e){return e?/<[a-z][a-z0-9]*(\s[^>]*)?>[^<]*<\/[a-z][a-z0-9]*>/i.test(e)?e=(e=e.replace(/<(?![a-z/!])/gi,"&lt;")).replace(/([^a-z0-9"'\s/])>/gi,"$1&gt;"):e.replace(/</g,"&lt;").replace(/>/g,"&gt;"):""}let iu=E.observable(["Roboto","Amatic SC","Press Start 2P","Marck Script","Rubik Mono One"]),id=E.observable({value:!1});function ih(){return id.value}function ip(e){if("default"===e){id.value=!1;return}id.value=!0,iu.splice(0,iu.length),iu.push(...e)}let ig=E.observable([]);function im(e){ig.push(e)}function iy(e){let t=ig.findIndex(t=>t.fontFamily===e);-1!==t&&ig.splice(t,1)}function ib(e){ig.replace(e)}let iv="BESbswy 0123456789 Il1Ww",ix=["sans-serif","serif","monospace"];function iw(e){return{width:e.width,actualBoundingBoxLeft:e.actualBoundingBoxLeft||0,actualBoundingBoxRight:e.actualBoundingBoxRight||0,actualBoundingBoxAscent:e.actualBoundingBoxAscent||0,actualBoundingBoxDescent:e.actualBoundingBoxDescent||0}}function iC(e="sans-serif",t="normal",n="normal",i=iv){r||(r=document.createElement("canvas"));let a=r.getContext("2d");return a.font=`${t} ${n} 40px ${e}`,iw(a.measureText(i))}function iS(e,t,n,i,a){return ix.some(o=>(function(e,t,n=.01){return Math.abs(e.width-t.width)>n||Math.abs(e.actualBoundingBoxLeft-t.actualBoundingBoxLeft)>n||Math.abs(e.actualBoundingBoxRight-t.actualBoundingBoxRight)>n||Math.abs(e.actualBoundingBoxAscent-t.actualBoundingBoxAscent)>n||Math.abs(e.actualBoundingBoxDescent-t.actualBoundingBoxDescent)>n})(function(e,t="sans-serif",n="normal",i="normal",a=iv){r||(r=document.createElement("canvas"));let o=r.getContext("2d");return o.font=`${n} ${i} 40px '${e}', ${t}`,iw(o.measureText(a))}(e,o,t,n,i),a[o]))}let ik={Arial:!0},i_=(e,t,n)=>t&&n?!!ik[`${e}_${t}_${n}`]:Object.keys(ik).some(t=>t.startsWith(e+"_"))||!!ik[e];async function iE(e,t,n,r){let i,a=`${e}_${t}_${n}`;if(ik[a])return;let o=!!document.fonts?.load,l=(i=function(e=""){let t=il(e).replace(/\s+/g," ").trim();return t?Array.from(t).slice(0,10).join(""):""}(r))?`${iv} ${i}`:iv,s={"sans-serif":iC("sans-serif",t,n,l),serif:iC("serif",t,n,l),monospace:iC("monospace",t,n,l)};if(o)try{if(await document.fonts.load(`${t} ${n} 16px '${e}'`,l),iS(e,t,n,l,s)){ik[a]=!0;return}}catch{}let c=Math.min(6e3,r7)/60;for(let r=0;r<c;r++){if(iS(e,t,n,l,s)){ik[a]=!0;return}await new Promise(e=>setTimeout(e,60))}console.warn(`Timeout for loading font "${e}". Looks like polotno can't load it. Is it a correct font family?`),io(`Timeout for loading font "${e}"`)}let iT={},iP="400,400italic,700,700italic";function iO(e){iP=e}function iA(e){let t=e.replace(/ /g,"+");return`https://fonts.googleapis.com/css?family=${t}:${iP}`}let iI={};var E=x("2SBKn"),iR=x("ibaza");let iM=E.observable({imageDownScalingEnabled:!0,removeBackgroundEnabled:!1,htmlRenderEnabled:!1,forceTextFitEnabled:!1,textVerticalResizeEnabled:!1,textOverflow:"resize",textSplitAllowed:!1,animationsEnabled:!1,aiTextEnabled:!1,autoDeleteEmptyText:!0}),iL="u">typeof window&&"localhost"===window.location.hostname,ij=E.action(e=>{iM.textVerticalResizeEnabled=e}),iN=E.action(e=>{iM.removeBackgroundEnabled=e}),iD=E.action(e=>{iL&&console.warn("useRemoveBackground is deprecated. Use setRemoveBackgroundEnabled instead."),iN(e)}),iz=E.action(e=>{iM.aiTextEnabled=e}),iB=E.action(e=>{iL&&console.warn("useHtmlTextRender is deprecated. Use setRichTextEnabled instead."),iM.htmlRenderEnabled=e}),iF=E.action(e=>{iM.htmlRenderEnabled=e}),iH=E.action(e=>{iM.imageDownScalingEnabled=e}),iV=E.action(e=>{console.warn("useDownScaling is deprecated. Use setDownScalingEnabled instead."),iH(e)}),iU=E.action(e=>{console.warn("setForceTextFit is deprecated. Use setTextOverflow instead."),iM.textOverflow="change-font-size"}),i$=E.action(e=>{iM.textOverflow=e}),iW=E.action(e=>{iM.textSplitAllowed=e}),iq=E.action(e=>{iM.animationsEnabled=e}),iG=E.action(e=>{iM.autoDeleteEmptyText=e}),iK={fontSize:14,fontFamily:"Roboto",fontWeight:"normal",fontStyle:"normal",lineHeight:1.2,letterSpacing:0,textTransform:"none",textDecoration:"",align:"center",fill:"black",stroke:"black",strokeWidth:0,curveEnabled:!1,curvePower:.5};function iY(e){return!function(e){e=e.replace(/\s/g,"");let t=0;for(var n=0;n<e.length;n++)(function(e){var t="֑-߿‏‫‮יִ-﷽ﹰ-ﻼ";return RegExp("^[^"+t+"]*?["+t+"]").test(e)})(e[n])&&(t+=1);return t>e.length/2}(e)?"ltr":"rtl"}function iX(e,t,n,r){let i=Math.max(-.9999,Math.min(.9999,n));if(1e-4>Math.abs(i))return`M 0 ${t/2} L ${e} ${t/2}`;let a=5*r/(2*Math.abs(i))-r,o=e/2;if(i>0){let e=2*a+r/2;return`M ${o} ${e} A ${a} ${a} 0 1 1 ${o} ${e-2*a} A ${a} ${a} 0 1 1 ${o} ${e}`}{let e=-(2*a-Math.round(t))-r/2;return`M ${o} ${e} A ${a} ${a} 0 1 0 ${o} ${e+2*a} A ${a} ${a} 0 1 0 ${o} ${e}`}}function iQ(e,t,n,r){if(!rJ(e))return"";let{stops:i,rotation:a}=r0(e),o=a*Math.PI/180,l=.5-.5*Math.sin(o),s=.5+.5*Math.cos(o),c=.5+.5*Math.sin(o),u=.5-.5*Math.cos(o),d=i.map(({offset:e,color:t})=>`<stop offset="${100*e}%" stop-color="${t}" />`).join("");return`<linearGradient id="${t}" x1="${100*l}%" y1="${100*s}%" x2="${100*c}%" y2="${100*u}%">${d}</linearGradient>`}function iZ(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function iJ(e,t,n){return e.map(e=>{let r=[];e.bold&&"bold"!==t.fontWeight&&r.push('font-weight="bold"'),e.italic&&"italic"!==t.fontStyle&&r.push('font-style="italic"'),e.underline&&r.push('text-decoration="underline"'),e.strike&&r.push('text-decoration="line-through"'),!n?.omitColors&&e.color&&e.color!==t.fill&&r.push(`fill="${iZ(e.color)}"`);let i=iZ(e.text);return 0===r.length?i:`<tspan ${r.join(" ")}>${i}</tspan>`}).join("")}function i0(e,{fontFamily:t="",color:n="black",forEditor:r=!1}={}){let i={...iK,...e},a=t||i.fontFamily,o=rJ(i.fill),l=rJ(i.stroke),s="ellipsis"===iM.textOverflow&&!r&&!i.curveEnabled&&!!i.height,c=(()=>{if(!s)return[];let e=Math.max(1,Math.round(i.height)),t=Math.max(1,Math.floor(e/Math.max(1,("number"==typeof i.lineHeight?i.lineHeight:1.2)*i.fontSize)));return[`max-height: ${e}px`,"overflow: hidden","display: -webkit-box","-webkit-box-orient: vertical",`-webkit-line-clamp: ${t}`,`line-clamp: ${t}`]})(),u=e=>`
22
22
  background-image: ${e};
23
23
  background-size: 100% 100%;
24
24
  background-repeat: repeat;
package/utils/fonts.js CHANGED
@@ -1 +1 @@
1
- import*as t from"mobx";import{triggerLoadError as n,getFontLoadTimeout as o}from"./loader.js";import{removeTags as e}from"./text.js";let a=t.observable(["Roboto","Amatic SC","Press Start 2P","Marck Script","Rubik Mono One"]),s=t.observable({value:!1});export function isGoogleFontChanged(){return s.value}export function setGoogleFonts(t){"default"!==t?(s.value=!0,a.splice(0,a.length),a.push(...t)):s.value=!1}export function getFontsList(){return a}export const globalFonts=t.observable([]);export function addGlobalFont(t){globalFonts.push(t)}export function removeGlobalFont(t){const n=globalFonts.findIndex(n=>n.fontFamily===t);-1!==n&&globalFonts.splice(n,1)}export function replaceGlobalFonts(t){globalFonts.replace(t)}const r="BESbswy 0123456789 Il1Ww",i=["sans-serif","serif","monospace"];function l(t){const n=function(t=""){const n=e(t).replace(/\s+/g," ").trim();return n?Array.from(n).slice(0,10).join(""):""}(t);return n?`${r} ${n}`:r}export function _getFontProbeTextForTesting(t){return l(t)}let c;function u(t){return{width:t.width,actualBoundingBoxLeft:t.actualBoundingBoxLeft||0,actualBoundingBoxRight:t.actualBoundingBoxRight||0,actualBoundingBoxAscent:t.actualBoundingBoxAscent||0,actualBoundingBoxDescent:t.actualBoundingBoxDescent||0}}function f(t="sans-serif",n="normal",o="normal",e=r){c||(c=document.createElement("canvas"));const a=c.getContext("2d");return a.font=`${n} ${o} 40px ${t}`,u(a.measureText(e))}function d(t,n,o,e,a){return i.some(s=>{const i=function(t,n="sans-serif",o="normal",e="normal",a=r){c||(c=document.createElement("canvas"));const s=c.getContext("2d");return s.font=`${o} ${e} 40px '${t}', ${n}`,u(s.measureText(a))}(t,s,n,o,e);return function(t,n,o=.01){return Math.abs(t.width-n.width)>o||Math.abs(t.actualBoundingBoxLeft-n.actualBoundingBoxLeft)>o||Math.abs(t.actualBoundingBoxRight-n.actualBoundingBoxRight)>o||Math.abs(t.actualBoundingBoxAscent-n.actualBoundingBoxAscent)>o||Math.abs(t.actualBoundingBoxDescent-n.actualBoundingBoxDescent)>o}(i,a[s])})}export function measureFontDom(t,n="sans-serif",o="normal",e="normal",a=r){if("undefined"==typeof document||!document.body){return 0}const s=document.createElement("span");s.textContent=a,s.style.cssText=`\n position:absolute;\n visibility:hidden;\n white-space:nowrap;\n top:-9999px;\n left:-9999px;\n font:${o} ${e} 90px '${t}', ${n};\n `,document.body.appendChild(s);const i=s.getBoundingClientRect().width;return s.remove(),i}const m={Arial:!0};export const isFontLoaded=(t,n,o)=>n&&o?!!m[`${t}_${n}_${o}`]:Object.keys(m).some(n=>n.startsWith(t+"_"))||!!m[t];export function _setFontLoadedForTesting(t,n){n?m[t]=!0:delete m[t]}export async function loadFont(t,e,a,s){var r;const i=`${t}_${e}_${a}`;if(m[i]){return}const c=!!(null===(r=document.fonts)||void 0===r?void 0:r.load),u=l(s),p={"sans-serif":f("sans-serif",e,a,u),serif:f("serif",e,a,u),monospace:f("monospace",e,a,u)};if(c){try{if(await document.fonts.load(`${e} ${a} 16px '${t}'`,u),d(t,e,a,u,p)){return void(m[i]=!0)}}catch(x){}}const g=Math.min(6e3,o())/60;for(let n=0;n<g;n++){if(d(t,e,a,u,p)){return await new Promise(t=>setTimeout(t,100)),void(m[i]=!0)}await new Promise(t=>setTimeout(t,60))}console.warn(`Timeout for loading font "${t}". Looks like polotno can't load it. Is it a correct font family?`),n(`Timeout for loading font "${t}"`)}const p={};let g="400,400italic,700,700italic";export function setGoogleFontsVariants(t){g=t}export function getGoogleFontsVariants(){return g}export function getGoogleFontsUrl(t){return`https://fonts.googleapis.com/css?family=${t.replace(/ /g,"+")}:${g}`}export function injectGoogleFont(t){if(p[t]){return}const n=getGoogleFontsUrl(t),o=document.createElement("link");o.type="text/css",o.href=n,o.rel="stylesheet",document.getElementsByTagName("head")[0].appendChild(o),p[t]=!0}const x={};let h;export function injectCustomFont(t){const n=t.fontFamily;if(x[n]){return}if(!t.url&&!t.styles){return}const o=t.styles||(t.url?[{src:`url("${t.url}")`}]:[]),e=(h||(h=document.getElementById("polotno-font-style"),h||(h=document.createElement("style"),h.id="polotno-font-style",document.head.appendChild(h)),h)).sheet;o.forEach(t=>{e.insertRule(`\n @font-face{\n font-family:'${n}';\n src:${t.src};\n font-style:${t.fontStyle||"normal"};\n font-weight:${t.fontWeight||"normal"};\n font-display:swap; /* optional but recommended */\n }`,e.cssRules.length)}),x[t.fontFamily]=!0}
1
+ import*as t from"mobx";import{triggerLoadError as n,getFontLoadTimeout as o}from"./loader.js";import{removeTags as e}from"./text.js";let a=t.observable(["Roboto","Amatic SC","Press Start 2P","Marck Script","Rubik Mono One"]),s=t.observable({value:!1});export function isGoogleFontChanged(){return s.value}export function setGoogleFonts(t){"default"!==t?(s.value=!0,a.splice(0,a.length),a.push(...t)):s.value=!1}export function getFontsList(){return a}export const globalFonts=t.observable([]);export function addGlobalFont(t){globalFonts.push(t)}export function removeGlobalFont(t){const n=globalFonts.findIndex(n=>n.fontFamily===t);-1!==n&&globalFonts.splice(n,1)}export function replaceGlobalFonts(t){globalFonts.replace(t)}const r="BESbswy 0123456789 Il1Ww",i=["sans-serif","serif","monospace"];function l(t){const n=function(t=""){const n=e(t).replace(/\s+/g," ").trim();return n?Array.from(n).slice(0,10).join(""):""}(t);return n?`${r} ${n}`:r}export function _getFontProbeTextForTesting(t){return l(t)}let c;function u(t){return{width:t.width,actualBoundingBoxLeft:t.actualBoundingBoxLeft||0,actualBoundingBoxRight:t.actualBoundingBoxRight||0,actualBoundingBoxAscent:t.actualBoundingBoxAscent||0,actualBoundingBoxDescent:t.actualBoundingBoxDescent||0}}function f(t="sans-serif",n="normal",o="normal",e=r){c||(c=document.createElement("canvas"));const a=c.getContext("2d");return a.font=`${n} ${o} 40px ${t}`,u(a.measureText(e))}function d(t,n,o,e,a){return i.some(s=>{const i=function(t,n="sans-serif",o="normal",e="normal",a=r){c||(c=document.createElement("canvas"));const s=c.getContext("2d");return s.font=`${o} ${e} 40px '${t}', ${n}`,u(s.measureText(a))}(t,s,n,o,e);return function(t,n,o=.01){return Math.abs(t.width-n.width)>o||Math.abs(t.actualBoundingBoxLeft-n.actualBoundingBoxLeft)>o||Math.abs(t.actualBoundingBoxRight-n.actualBoundingBoxRight)>o||Math.abs(t.actualBoundingBoxAscent-n.actualBoundingBoxAscent)>o||Math.abs(t.actualBoundingBoxDescent-n.actualBoundingBoxDescent)>o}(i,a[s])})}export function measureFontDom(t,n="sans-serif",o="normal",e="normal",a=r){if("undefined"==typeof document||!document.body){return 0}const s=document.createElement("span");s.textContent=a,s.style.cssText=`\n position:absolute;\n visibility:hidden;\n white-space:nowrap;\n top:-9999px;\n left:-9999px;\n font:${o} ${e} 90px '${t}', ${n};\n `,document.body.appendChild(s);const i=s.getBoundingClientRect().width;return s.remove(),i}const m={Arial:!0};export const isFontLoaded=(t,n,o)=>n&&o?!!m[`${t}_${n}_${o}`]:Object.keys(m).some(n=>n.startsWith(t+"_"))||!!m[t];export function _setFontLoadedForTesting(t,n){n?m[t]=!0:delete m[t]}export async function loadFont(t,e,a,s){var r;const i=`${t}_${e}_${a}`;if(m[i]){return}const c=!!(null===(r=document.fonts)||void 0===r?void 0:r.load),u=l(s),p={"sans-serif":f("sans-serif",e,a,u),serif:f("serif",e,a,u),monospace:f("monospace",e,a,u)};if(c){try{if(await document.fonts.load(`${e} ${a} 16px '${t}'`,u),d(t,e,a,u,p)){return void(m[i]=!0)}}catch(x){}}const g=Math.min(6e3,o())/60;for(let n=0;n<g;n++){if(d(t,e,a,u,p)){return void(m[i]=!0)}await new Promise(t=>setTimeout(t,60))}console.warn(`Timeout for loading font "${t}". Looks like polotno can't load it. Is it a correct font family?`),n(`Timeout for loading font "${t}"`)}const p={};let g="400,400italic,700,700italic";export function setGoogleFontsVariants(t){g=t}export function getGoogleFontsVariants(){return g}export function getGoogleFontsUrl(t){return`https://fonts.googleapis.com/css?family=${t.replace(/ /g,"+")}:${g}`}export function injectGoogleFont(t){if(p[t]){return}const n=getGoogleFontsUrl(t),o=document.createElement("link");o.type="text/css",o.href=n,o.rel="stylesheet",document.getElementsByTagName("head")[0].appendChild(o),p[t]=!0}const x={};let h;export function injectCustomFont(t){const n=t.fontFamily;if(x[n]){return}if(!t.url&&!t.styles){return}const o=t.styles||(t.url?[{src:`url("${t.url}")`}]:[]),e=(h||(h=document.getElementById("polotno-font-style"),h||(h=document.createElement("style"),h.id="polotno-font-style",document.head.appendChild(h)),h)).sheet;o.forEach(t=>{e.insertRule(`\n @font-face{\n font-family:'${n}';\n src:${t.src};\n font-style:${t.fontStyle||"normal"};\n font-weight:${t.fontWeight||"normal"};\n font-display:swap; /* optional but recommended */\n }`,e.cssRules.length)}),x[t.fontFamily]=!0}
@@ -1 +1 @@
1
- import*as e from"mobx";import{getAPI as o}from"./api.js";import{setRemoveBackgroundEnabled as t}from"./flags.js";const n=e.observable({value:!1}),a=e.observable({value:"v1"});export const ___=()=>a.value;const i=e.observable({value:0});export const ____=()=>i.value;export const isCreditVisible=()=>n.value;const r=e.action(()=>{n.value=!0});let s="";export const getKey=()=>s||"";let l="undefined"!=typeof window?window.location.origin:"";const c="undefined"!=typeof navigator&&navigator.userAgent.indexOf("Headless")>-1,d="undefined"!=typeof navigator&&navigator.userAgent.indexOf("Electron")>-1;"file://"===l&&c&&(l="headless"),"file://"===l&&d&&(l="electron");const p=`%cPolotno error! Current domain is not allowed. It may lead to unexpected behavior and stop working. Please add "${l}" here: https://polotno.com/cabinet`;let u=fetch;export const __=e=>{u=e};export async function isKeyPaid(n){for(let s=0;s<5;s++){try{const r=await u(o()+"/validate-key",{method:"POST",body:JSON.stringify({key:n,site:location.host,skdVersion:"2.38.1"})});if(e.runInAction(()=>{a.value=r.headers.get("x-api-version")||""}),!n){return console.error("Polotno API is initialized without API key. It may lead to unexpected behavior and stop working. Please create API key here: https://polotno.com/cabinet"),e.runInAction(()=>{i.value=1}),!1}if(200!==r.status){await new Promise(e=>setTimeout(e,3e3));continue}const s=await r.json();return s.is_valid||(console.error("Polotno API key is not valid. Please get new API key here: https://polotno.com/cabinet"),e.runInAction(()=>{i.value=1})),s.is_paid||(console.log("%cPolotno Free Version. For development usage only. https://polotno.com/","background: rgb(0, 161, 255); color: white; padding: 5px; margin: 5px;"),e.runInAction(()=>{0===i.value&&(i.value=2)})),s.is_domain_valid||console.log(p,"background: rgba(247, 101, 68, 1); color: white; padding: 5px; margin: 5px;"),t(s.remove_background_enabled),s.is_paid||!1}catch(r){await new Promise(e=>setTimeout(e,3e3))}}return console.error("Can not validate Polotno API key. Please report to anton@polotno.com immediately."),!0}export async function validateKey(e,o){s=e,await isKeyPaid(e)&&!o||r()}
1
+ import*as e from"mobx";import{getAPI as o}from"./api.js";import{setRemoveBackgroundEnabled as t}from"./flags.js";const n=e.observable({value:!1}),a=e.observable({value:"v1"});export const ___=()=>a.value;const i=e.observable({value:0});export const ____=()=>i.value;export const isCreditVisible=()=>n.value;const r=e.action(()=>{n.value=!0});let s="";export const getKey=()=>s||"";let l="undefined"!=typeof window?window.location.origin:"";const c="undefined"!=typeof navigator&&navigator.userAgent.indexOf("Headless")>-1,d="undefined"!=typeof navigator&&navigator.userAgent.indexOf("Electron")>-1;"file://"===l&&c&&(l="headless"),"file://"===l&&d&&(l="electron");const p=`%cPolotno error! Current domain is not allowed. It may lead to unexpected behavior and stop working. Please add "${l}" here: https://polotno.com/cabinet`;let u=fetch;export const __=e=>{u=e};export async function isKeyPaid(n){for(let s=0;s<5;s++){try{const r=await u(o()+"/validate-key",{method:"POST",body:JSON.stringify({key:n,site:location.host,skdVersion:"2.38.2"})});if(e.runInAction(()=>{a.value=r.headers.get("x-api-version")||""}),!n){return console.error("Polotno API is initialized without API key. It may lead to unexpected behavior and stop working. Please create API key here: https://polotno.com/cabinet"),e.runInAction(()=>{i.value=1}),!1}if(200!==r.status){await new Promise(e=>setTimeout(e,3e3));continue}const s=await r.json();return s.is_valid||(console.error("Polotno API key is not valid. Please get new API key here: https://polotno.com/cabinet"),e.runInAction(()=>{i.value=1})),s.is_paid||(console.log("%cPolotno Free Version. For development usage only. https://polotno.com/","background: rgb(0, 161, 255); color: white; padding: 5px; margin: 5px;"),e.runInAction(()=>{0===i.value&&(i.value=2)})),s.is_domain_valid||console.log(p,"background: rgba(247, 101, 68, 1); color: white; padding: 5px; margin: 5px;"),t(s.remove_background_enabled),s.is_paid||!1}catch(r){await new Promise(e=>setTimeout(e,3e3))}}return console.error("Can not validate Polotno API key. Please report to anton@polotno.com immediately."),!0}export async function validateKey(e,o){s=e,await isKeyPaid(e)&&!o||r()}