polotno 3.0.0-beta.13 → 3.0.0-beta.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blueprint.polotno.css +269 -39
- package/canvas/audio.d.ts +1 -1
- package/canvas/context-menu/context-menu.d.ts +1 -1
- package/canvas/drawing-layer.d.ts +1 -1
- package/canvas/element.d.ts +1 -1
- package/canvas/image-element.d.ts +1 -1
- package/canvas/page-controls.d.ts +1 -1
- package/canvas/rules.d.ts +4 -2
- package/canvas/rules.js +3 -3
- package/canvas/tooltip.d.ts +1 -1
- package/canvas/use-color.d.ts +2 -2
- package/canvas/video-element.d.ts +1 -1
- package/canvas/workspace-canvas.d.ts +2 -1
- package/canvas/workspace-canvas.js +1 -1
- package/model/audio-model.d.ts +6 -6
- package/model/figure-model.d.ts +112 -88
- package/model/gif-model.d.ts +125 -101
- package/model/group-model.d.ts +843 -675
- package/model/history.d.ts +2 -2
- package/model/history.js +1 -1
- package/model/image-model.d.ts +122 -98
- package/model/line-model.d.ts +112 -88
- package/model/node-model.d.ts +72 -40
- package/model/node-model.js +1 -1
- package/model/page-model.d.ts +11 -11
- package/model/page-model.js +1 -1
- package/model/shape-model.d.ts +112 -88
- package/model/shape-model.js +1 -1
- package/model/store.d.ts +346 -309
- package/model/store.js +1 -1
- package/model/svg-model.d.ts +114 -90
- package/model/text-model.d.ts +131 -107
- package/model/video-model.d.ts +127 -103
- package/package.json +16 -13
- package/pages-timeline/audio-track.js +1 -1
- package/pages-timeline/audios.d.ts +1 -1
- package/pages-timeline/elements.d.ts +1 -1
- package/pages-timeline/waveform.d.ts +2 -2
- package/polotno.bundle.js +73 -73
- package/side-panel/animations-panel.d.ts +1 -1
- package/side-panel/effects-panel.d.ts +1 -1
- package/side-panel/select-video.d.ts +236 -199
- package/side-panel/videos-grid.d.ts +1 -1
- package/toolbar/element-container.d.ts +1 -1
- package/toolbar/figure-toolbar.d.ts +1 -1
- package/toolbar/sketch.d.ts +7 -7
- package/toolbar/text-ai-write.d.ts +1 -1
- package/toolbar/toolbar.d.ts +1 -1
- package/toolbar/use-copy-style.d.ts +2 -2
- package/toolbar/video-toolbar.d.ts +1 -1
- package/utils/clipboard.js +1 -1
- package/utils/font-metric.d.ts +4 -4
- package/utils/from-svg.js +1 -1
- package/utils/gif-lib.d.ts +5 -0
- package/utils/goober.d.ts +5 -0
- package/utils/gradient.js +1 -1
- package/utils/l10n.d.ts +5 -1
- package/utils/l10n.js +1 -1
- package/utils/luma.js +1 -1
- package/utils/pdf.d.ts +6 -1
- package/utils/pdf.js +1 -1
- package/utils/react-color/components/common/ColorWrap.d.ts +2 -2
- package/utils/react-color/components/common/Swatch.d.ts +3 -3
- package/utils/react-color/helpers/interaction.d.ts +3 -3
- package/utils/reactcss/components/active.d.ts +3 -3
- package/utils/reactcss/components/hover.d.ts +3 -3
- package/utils/styled.js +1 -1
- package/utils/svg.d.ts +1 -1
- package/utils/svg.js +1 -1
- package/utils/to-canvas.d.ts +3 -1
- package/utils/to-canvas.js +1 -1
- package/utils/to-pptx.d.ts +1 -1
- package/utils/to-svg.d.ts +9 -7
- package/utils/use-api.d.ts +3 -3
- package/utils/validate-key.js +1 -1
package/model/store.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=this&&this.__rest||function(e,t){var i={};for(var o in e){Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(i[o]=e[o])}if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(o=Object.getOwnPropertySymbols(e);n<o.length;n++){t.indexOf(o[n])<0&&Object.prototype.propertyIsEnumerable.call(e,o[n])&&(i[o[n]]=e[o[n]])}}return i};import{applySnapshot as t,cast as i,destroy as o,detach as n,getSnapshot as s,onSnapshot as a,setLivelinessChecking as r,types as l}from"mobx-state-tree";import{UndoManager as d}from"./history.js";import{nanoid as c}from"nanoid";import p from"konva";import{computed as g}from"mobx";import{downloadFile as m}from"../utils/download.js";import{getJsPDF as u}from"../utils/pdf.js";import{createGIF as f}from"../utils/gif-lib.js";import{validateKey as h}from"../utils/validate-key.js";import*as b from"../utils/fonts.js";import{flags as y}from"../utils/flags.js";import{addDpiMetadataToImage as v}from"../utils/image-dpi.js";import{nodeToCanvas as w}from"../utils/canvas.js";import{whenLoaded as P}from"../utils/loader.js";import{pxToUnit as E}from"../utils/unit.js";import{deepEqual as x}from"../utils/deep-equal.js";import{waitTillAvailable as _}from"../utils/wait.js";import{jsonToHTML as k}from"../utils/to-html.js";import{jsonToSVG as I}from"../utils/to-svg.js";import{Page as O}from"./page-model.js";import{forEveryChild as j}from"./group-model.js";import{Audio as S}from"./audio-model.js";r("ignore");export const Font=l.model("Font",{fontFamily:l.string,url:l.optional(l.string,""),styles:l.frozen()}).preProcessSnapshot(e=>Object.assign(Object.assign({},e),{fontFamily:e.fontFamily||e.name}));export const Store=l.model("Store",{role:"",pages:l.array(O),fonts:l.array(Font),audios:l.array(S),width:1080,height:1080,currentTime:0,isPlaying:!1,scale:1,scaleToFit:1,unit:"px",dpi:72,schemaVersion:2,bleedVisible:!1,rulesVisible:!1,distanceGuidesVisible:!1,openedSidePanel:"",previousOpenedSidePanel:"",custom:l.frozen(),tool:l.optional(l.enumeration("Tool",["selection","draw","pan","text","eraser"]),"selection"),toolOptions:l.optional(l.model({brushType:l.optional(l.enumeration("BrushType",["brush","highlighter"]),"brush"),strokeWidth:l.optional(l.number,5),stroke:l.optional(l.string,"#000000"),opacity:l.optional(l.number,1)}),{}),selectedElementsIds:l.array(l.string),animatedElementsIds:l.array(l.string),history:l.optional(d,{targetPath:"../pages"}),_elementsPixelRatio:Math.min(2,"undefined"!=typeof window&&window.devicePixelRatio||1),_activePageId:"",_selectedPagesIds:l.array(l.string),_forceShowCredit:!1,_key:"",_validated:!1}).views(e=>{const t=g(()=>{const t={};return j({children:e.pages},e=>(t[e.id]=e,!1)),t},{keepAlive:!0});return{get _idsMap(){return t.get()}}}).views(e=>({get _bleedVisible(){return console.warn("store._bleedVisible is deprecated. Please use store.bleedVisible instead."),e.bleedVisible},get selectedElements(){return e.selectedElementsIds.map(t=>{for(const i of e.pages){for(const e of i.children){if(e.id===t){return e}}}}).filter(e=>!!e)},get children(){return e.pages},get selectedShapes(){const t=[];return j({children:e.selectedElements},e=>{"group"!==e.type&&t.push(e)}),t},get activePage(){return e.pages.slice().find(t=>t.id===e._activePageId)||(e.pages.length?e.pages[0]:null)},get selectedPages(){return e._selectedPagesIds.map(t=>e.pages.find(e=>e.id===t))},get duration(){let t=0;return e.pages.forEach(e=>{t+=e.duration}),t},get _hasCroppedImages(){return e.find(e=>"image"===e.type&&e._cropModeEnabled)},find(t){let i;return j({children:e.pages},e=>{if(!i&&t(e)){return i=e,!0}}),i},getElementById:t=>e._idsMap[t]})).actions(e=>{let t=0,o=null,n=!1;return{afterCreate(){e.history.canUndo},setCurrentTime(t){e.currentTime=t},_togglePlaying(t=!e.isPlaying){e.isPlaying=t},play({animatedElementsIds:s=[],startTime:a=0,currentTime:r=0,endTime:l=e.duration,repeat:d=!1}={}){r&&(console.warn("currentTime property of store.play() is deprecated. Please use startTime instead."),a=r),e.animatedElementsIds=i(s),e.currentTime=a,e.isPlaying=!0,t=Date.now(),o=l,n=d,requestAnimationFrame(e.seek)},checkActivePage(){let t=0;for(const i of e.pages){if(e.currentTime>=i.startTime&&e.currentTime<i.startTime+i.duration){e.selectPage(i.id);break}t+=i.duration}},seek(){if(!e.isPlaying){return}const i=Date.now(),s=i-t;t=i,e.currentTime+=s,e.checkActivePage();const a=o||e.duration;e.isPlaying&&e.currentTime<a?requestAnimationFrame(e.seek):e.isPlaying&&n?(e.currentTime=0,requestAnimationFrame(e.seek)):e.stop()},stop(){e.isPlaying=!1,e.currentTime=0,e.animatedElementsIds=i([]),e.checkActivePage()}}}).actions(r=>({__(){r._validated||(h(r._key,r._forceShowCredit),r._validated=!0)},set(e){Object.assign(r,e)},setUnit({unit:e,dpi:t}){r.unit=e||r.unit,r.dpi=t||r.dpi},setRole(e){r.role=e},setTool(e){r.tool=e},setToolOptions(e){Object.assign(r.toolOptions,e)},addPage(e){const t=O.create(Object.assign({id:c(10)},e));return r.pages.push(t),r._activePageId=t.id,t},selectPage(e){r._activePageId=e,1===r._selectedPagesIds.length&&(r._selectedPagesIds=i([e]))},selectPages(e){r._selectedPagesIds=i(e),1===r._selectedPagesIds.length&&(r._activePageId=r._selectedPagesIds[0])},selectElements(e){const t=e.map(e=>r.getElementById(e)).sort((e,t)=>e.page.children.indexOf(e)-e.page.children.indexOf(t)).filter(e=>!!e).map(e=>e.id);r.selectedElementsIds=i(t)},toggleBleed(e){r.bleedVisible=null!=e?e:!r.bleedVisible},toggleRulers(e){r.rulesVisible=null!=e?e:!r.rulesVisible},toggleDistanceGuides(e){r.distanceGuidesVisible=null!=e?e:!r.distanceGuidesVisible},openSidePanel(e){r.openedSidePanel!==e&&(r.previousOpenedSidePanel=r.openedSidePanel,r.openedSidePanel=e)},setScale(e){r.scale=e},_setScaleToFit(e){r.scaleToFit=e},setElementsPixelRatio(e){r._elementsPixelRatio=e},setSize(e,t,i){r.pages.forEach(o=>{o.setSize({width:e,height:t,useMagic:i,softChange:!0})}),r.width=e,r.height=t},setPageZIndex(e,t){const i=r.pages.find(t=>t.id===e);i&&(n(i),r.pages.remove(i),r.pages.splice(t,0,i))},deletePages(e){const t=r.pages.indexOf(r.activePage);e.forEach(e=>{const t=r.pages.find(t=>t.id===e);o(t)});const n=Math.min(r.pages.length-1,t),s=r.pages[n];s&&(r._activePageId=s.id),r.selectedElementsIds=i(r.selectedElementsIds.filter(e=>r.getElementById(e)))},groupElements(e,t={}){const o=e.map(e=>r.getElementById(e)),s=o[0].page;if(o.forEach(e=>{e&&n(e)}),!o.length){return}const a=s.children.reduce((e,t)=>{if("group"===t.type){const i=t.name.match(/group-(\d+)/);if(i){const t=parseInt(i[1],10);return Math.max(e,t)}}return e},0),l=Object.assign({id:c(10),name:`group-${a+1}`,children:o,type:"group"},t);return s.children.push(l),r.selectedElementsIds=i([l.id]),s.children.find(e=>e.id===l.id)},ungroupElements(e){const t=e.map(e=>r.getElementById(e)),o=[];t.forEach(e=>{if(e&&"group"===e.type){const t=e.page,i=t.children.indexOf(e);e.children.forEach(e=>{o.push(e.id)}),e.children.forEach(e=>{n(e),t.children.push(e)}),t.children.splice(i,1)}}),r.selectedElementsIds=i(o)},deleteElements(e){const t=[];r.find(i=>(e.includes(i.id)&&t.push(i),!1)),t.forEach(e=>{o(e)}),r.selectedElementsIds=i(r.selectedElementsIds.filter(e=>r.getElementById(e)))},on(e,t){if("change"===e){let e=r.toJSON();return a(r,i=>{const o=r.toJSON();!x(e,o)&&(e=o,t(o))})}},async _toCanvas({pixelRatio:e,ignoreBackground:t,pageId:i,mimeType:o,includeBleed:n,_skipTimeout:s,quickMode:a=!1,_exportCanvases:l}={}){var d;const c=e||1;i=i||(null===(d=r.pages[0])||void 0===d?void 0:d.id);const g=r.pages.find(e=>e.id===i);if(!g){throw new Error(`No page for export with id ${i}`)}const m=r._elementsPixelRatio;c>r._elementsPixelRatio&&r.setElementsPixelRatio(c),a?null==g||g.set({_forceMount:!0}):null==g||g.set({_exporting:!0});const u=await _(()=>{const e=p.stages.filter(e=>e.getAttr("pageId")===i);return 0===e.length?null:e});if(!u){throw null==g||g.set({_forceMount:!1,_exporting:!1}),r.setElementsPixelRatio(m),new Error(`Export is failed. Can not find stage for page ${i}. Looks like <Workspace /> component is not mounted, but it is required in order to process the export.`)}u.length>1&&console.error(`Polotno error: Detected several canvas elements for page "${i}" in the document. This is not supported and will lead to incorrect export. Make sure to use unique ids for all pages and make sure you unmount <Workspace /> when it is not needed.`);const f=u[0];await r.waitLoading({_skipTimeout:s});const h=f.findOne(".page-container");if(!h){throw r.setElementsPixelRatio(m),null==g||g.set({_forceMount:!1,_exporting:!1}),new Error("Export is failed. Canvas was unmounted.")}const b=f.position();f.position({x:0,y:0}),f.find("Transformer").forEach(e=>{e.setAttr("oldVisible",e.visible()),e.visible(!1)}),h.find(".page-background").forEach(e=>e.shadowEnabled(!1)),h.find(".page-background").forEach(e=>e.strokeEnabled(!1)),h.find(".highlighter").forEach(e=>e.visible(!1));const y=h.findOne(".page-background-group"),v=y.clip();y.clip({x:null,y:null,width:null,height:null});const P=h.findOne(".elements-container"),E=P.clip();P.clip({x:null,y:null,width:null,height:null});const x=h.find(e=>!e.visible()&&e.getAttr("editModeEnabled")&&!e.getAttr("hideInExport"));x.forEach(e=>{e.setAttr("oldVisible",e.visible()),e.show()});const k=h.find(e=>e.getAttr("hideInExport"));k.forEach(e=>{e.setAttr("oldVisible",e.visible()),e.hide()}),t&&h.find(".page-background").forEach(e=>e.hide());const I=n?g.bleed:0;let O=I;!r.bleedVisible&&n||(r.bleedVisible||n?r.bleedVisible&&n?O=0:r.bleedVisible&&!n&&(O=-g.bleed):O=0);const j=g.computedWidth+2*I,S=g.computedHeight+2*I,T=h.scale();h.scale({x:1,y:1});const F=w(h,{x:h.x()-O,y:h.y()-O,width:j,height:S,pixelRatio:c,sceneCanvas:null==l?void 0:l.sceneCanvas,bufferCanvas:null==l?void 0:l.bufferCanvas});h.scale(T);const R=F._canvas;if("image/jpeg"===o){const e=R.getContext("2d");e.save(),e.globalCompositeOperation="destination-over",e.fillStyle="white",e.fillRect(0,0,R.width,R.height),e.restore()}return t&&h.find(".page-background").forEach(e=>e.show()),k.forEach(e=>{e.visible(e.getAttr("oldVisible"))}),x.forEach(e=>{e.visible(e.getAttr("oldVisible"))}),h.find(".page-background").forEach(e=>e.shadowEnabled(!0)),h.find(".page-background").forEach(e=>e.strokeEnabled(!0)),f.find("Transformer").forEach(e=>{e.visible(e.getAttr("oldVisible"))}),h.find(".highlighter").forEach(e=>e.visible(!0)),y.clip(v),P.clip(E),f.position(b),null==g||g.set({_exporting:!1,_forceMount:!1}),await Promise.resolve(),r.setElementsPixelRatio(m),R},async toDataURL(t={}){var{mimeType:i,quality:o,dpi:n,dpiMetadata:s="auto"}=t,a=e(t,["mimeType","quality","dpi","dpiMetadata"]);const l=await r._toCanvas(Object.assign({mimeType:i},a)),d=i||"image/png",c=l.toDataURL(d,o);p.Util.releaseCanvas(l);const g=null!=n?n:r.dpi;return"image/png"!==d&&"image/jpeg"!==d||"never"===s||"auto"===s&&72===g?c:v(c,d,g)},async toBlob(t={}){var{mimeType:i,quality:o}=t,n=e(t,["mimeType","quality"]);const s=await r._toCanvas(Object.assign({mimeType:i},n)),a=await new Promise(e=>{s.toBlob(e,i,o)});return p.Util.releaseCanvas(s),a},async saveAsImage(t={}){var{fileName:i}=t,o=e(t,["fileName"]);const n=o.mimeType||"image/png",s=n.split("/")[1];m(await r.toDataURL(o),i||"polotno."+s,n)},async _toPDF(e){const t=e.dpi||r.dpi,i=e.parallel||1,o=e.unit||("px"===r.unit?"mm":r.unit),n=e.pixelRatio||1,s=e.pageIds||r.pages.map(e=>e.id),a=r.pages.filter(e=>s.includes(e.id)),l=await u(),d=e=>E({px:e,unit:o,dpi:t}),c=e.cropMarkSize||0,p=d(c),g=a[0]||{},m=e.includeBleed?g.bleed:0,f=d(g.computedWidth+2*m+2*p),h=d(g.computedHeight+2*m+2*p);var b=new l({unit:o,orientation:f>h?"landscape":"portrait",format:[f,h],compress:!0,putOnlyUsedFonts:!0});b.deletePage(1);const y=((e,t)=>{for(var i=[],o=0;o<e.length;o+=t){i.push(e.slice(o,o+t))}return i})(a,i);let v=0;for(const u of y){const t=u.map(async t=>{const i=e.includeBleed?t.bleed:0,o=t.computedWidth+2*i+2*c,a=t.computedHeight+2*i+2*c,l=d(o),p=d(a);let g=0,m=n;for(;g<10;){g+=1,2===g&&console.error("Polotno can not export PDF with current settings. Quality is automatically reduced.");const i=await r.toDataURL(Object.assign(Object.assign({},e),{pageId:t.id,pixelRatio:m}));if(i.length>20){return e.onProgress&&e.onProgress(++v/s.length*.9),{url:i,width:l,height:p,widthPx:o,heightPx:a}}m*=.8}});(await Promise.all(t)).forEach(({url:e,width:t,height:i,widthPx:n,heightPx:s})=>{b.addPage([t,i],t>i?"landscape":"portrait");const a=b.getCurrentPageInfo();var r;switch(o){case"pt":r=1;break;case"mm":r=72/25.4;break;case"cm":r=72/2.54;break;case"in":r=72;break;case"px":r=.75;break;case"pc":case"em":r=12;break;case"ex":r=6;break;default:throw"Invalid unit: "+o}if(a.pageContext.cropBox={bottomLeftX:0,bottomLeftY:0,topRightX:t*r,topRightY:i*r},a.pageContext.artBox={bottomLeftX:d(c+m)*r,bottomLeftY:d(c+m)*r,topRightX:d(n-c-m)*r,topRightY:d(s-c-m)*r},a.pageContext.bleedBox={bottomLeftX:d(c+m)*r,bottomLeftY:d(c+m)*r,topRightX:d(n-c-m)*r,topRightY:d(s-c-m)*r},p){b.setLineWidth(d(1));const e=p+d(m);b.line(e,0,e,p),b.line(0,e,p,e),b.line(t-e,0,t-e,p),b.line(t,e,t-p,e),b.line(0,i-e,p,i-e),b.line(e,i,e,i-p),b.line(t,i-e,t-p,i-e),b.line(t-e,i,t-e,i-p)}b.addImage(e,p,p,t-2*p,i-2*p,void 0,"FAST")})}return b},toPDFDataURL:async e=>(await r._toPDF(Object.assign({mimeType:"image/jpeg"},e))).output("datauristring"),async toGIFDataURL(e={}){const t=e.pixelRatio||1,i=await f({width:r.width*t,height:r.height*t}),o=1e3/(e.fps||10),n=r.duration/o;for(let s=0;s<n-1;s++){const e=s*o||1;r.setCurrentTime(e);let n=0,a="";for(const t of r.pages){if(n+=t.duration,t.set({_rendering:n>e}),n>e){a=t.id;break}}const l=await r._toCanvas({pixelRatio:t,pageId:a,_skipTimeout:!0});i.addFrame(l.getContext("2d"),{delay:o,copy:!0})}for(const s of r.pages){s.set({_rendering:!1})}return r.stop(),i.render(),new Promise(e=>{i.on("finished",function(t){!function(e,t){var i=new FileReader;i.onload=function(e){t(e.target.result)},i.readAsDataURL(e)}(t,e)})})},async saveAsGIF(t={}){var{fileName:i}=t,o=e(t,["fileName"]);const n=await r.toGIFDataURL(o);m(n,i||"polotno.gif")},async toHTML({elementHook:e}={elementHook:void 0}){const t=r.toJSON();return k({json:t,elementHook:e})},async saveAsHTML({fileName:e,elementHook:t}={}){const i=await r.toHTML({elementHook:t}),o="data:text/html;base64,"+window.btoa(unescape(encodeURIComponent(i)));m(o,e||"polotno.html")},async toSVG({elementHook:e,pageId:t,fontEmbedding:i="inline"}={fontEmbedding:"inline"}){var o;const n=r.toJSON();t=t||(null===(o=n.pages[0])||void 0===o?void 0:o.id);const s=n.pages.find(e=>e.id===t);return I({json:Object.assign(Object.assign({},n),{pages:s?[s]:[]}),elementHook:e,fontEmbedding:i})},async saveAsSVG({fileName:e,elementHook:t,pageId:i,fontEmbedding:o="inline"}={}){const n=await r.toSVG({elementHook:t,pageId:i,fontEmbedding:o}),s="data:text/svg;base64,"+window.btoa(unescape(encodeURIComponent(n)));m(s,e||"polotno.svg")},async saveAsPDF(t={}){var{fileName:i}=t,o=e(t,["fileName"]);(await r._toPDF(Object.assign({mimeType:"image/jpeg"},o))).save(i||"polotno.pdf")},async waitLoading({_skipTimeout:e=!1}={}){e||await new Promise(e=>setTimeout(e,50)),await P()},toJSON:()=>({width:r.width,height:r.height,fonts:s(r.fonts),pages:s(r.pages),audios:s(r.audios),unit:r.unit,dpi:r.dpi,custom:r.custom,schemaVersion:r.schemaVersion}),loadJSON(e,i=!1){var o;const n=JSON.parse(JSON.stringify(e)),a=n.schemaVersion||0;a<1&&y.htmlRenderEnabled&&j({children:n.pages},e=>{if("text"===e.type){const t=16,i=e.letterSpacing*t;e.letterSpacing=i/e.fontSize}}),a<2&&j({children:n.pages},e=>{e.filters&&Object.keys(e.filters).forEach(t=>{if(["warm","cold","natural"].includes(t)){return}const i=e.filters[t];i&&"number"==typeof i.intensity&&(i.intensity=i.intensity/100)})}),delete n.schemaVersion;const l=r.pages.indexOf(r.activePage);let d=null===(o=n.pages[l]||n.pages[0])||void 0===o?void 0:o.id;n._activePageId=d;const c=Object.assign({},s(r));Object.assign(c,n),c.history=i?r.history.toJSON():{history:[],undoIdx:-1},t(r,c)},clear({keepHistory:e=!1}={}){const t=r.pages.map(e=>e.id);r.deletePages(t),r.custom=null,e||r.history.clear()},addFont(e){r.removeFont(e.fontFamily),r.fonts.push(e)},removeFont(e){r.fonts.filter(t=>t.fontFamily===e).forEach(e=>o(e))},addAudio(e){const t=S.create(Object.assign({id:c(10)},e));r.audios.push(t)},removeAudio(e){const t=r.audios.find(t=>t.id===e);t&&r.audios.remove(t)},async loadFont(e,t=""){const i=r.fonts.find(t=>t.fontFamily===e)||b.globalFonts.find(t=>t.fontFamily===e);let o=[{fontStyle:"normal",fontWeight:"normal"},{fontStyle:"normal",fontWeight:"bold"}];return i?(i.styles&&(o=i.styles.map(e=>({fontStyle:e.fontStyle||"normal",fontWeight:e.fontWeight||"normal"}))),b.injectCustomFont(i)):b.injectGoogleFont(e),Promise.all(o.map(i=>b.loadFont(e,i.fontStyle,i.fontWeight,t)))},validate:e=>Store.validate(e,[{path:"",type:Store}]).map(e=>({path:"store"+e.context.map(e=>e.path).join("."),message:e.message}))}));export function createStore({key:e,showCredit:t}={key:"",showCredit:!1}){return Store.create({_forceShowCredit:t,_key:e})}export default createStore;
|
|
1
|
+
var e=this&&this.__rest||function(e,t){var i={};for(var o in e){Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(i[o]=e[o])}if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(o=Object.getOwnPropertySymbols(e);n<o.length;n++){t.indexOf(o[n])<0&&Object.prototype.propertyIsEnumerable.call(e,o[n])&&(i[o[n]]=e[o[n]])}}return i};import{applySnapshot as t,cast as i,destroy as o,detach as n,getSnapshot as s,onSnapshot as a,setLivelinessChecking as r,types as l}from"mobx-state-tree";import{UndoManager as d}from"./history.js";import{nanoid as c}from"nanoid";import p from"konva";import{computed as g}from"mobx";import{downloadFile as m}from"../utils/download.js";import{getJsPDF as u}from"../utils/pdf.js";import{createGIF as f}from"../utils/gif-lib.js";import{validateKey as h}from"../utils/validate-key.js";import*as b from"../utils/fonts.js";import{flags as y}from"../utils/flags.js";import{addDpiMetadataToImage as v}from"../utils/image-dpi.js";import{nodeToCanvas as P}from"../utils/canvas.js";import{whenLoaded as w}from"../utils/loader.js";import{pxToUnit as E}from"../utils/unit.js";import{deepEqual as x}from"../utils/deep-equal.js";import{waitTillAvailable as _}from"../utils/wait.js";import{jsonToHTML as I}from"../utils/to-html.js";import{jsonToSVG as k}from"../utils/to-svg.js";import{Page as O}from"./page-model.js";import{forEveryChild as j}from"./group-model.js";import{Audio as T}from"./audio-model.js";r("ignore");export const Font=l.model("Font",{fontFamily:l.string,url:l.optional(l.string,""),styles:l.frozen()}).preProcessSnapshot(e=>Object.assign(Object.assign({},e),{fontFamily:e.fontFamily||e.name}));export const Store=l.model("Store",{role:"",pages:l.array(O),fonts:l.array(Font),audios:l.array(T),width:1080,height:1080,currentTime:0,isPlaying:!1,scale:1,scaleToFit:1,unit:l.optional(l.enumeration("UnitType",["pt","mm","cm","in","px"]),"px"),dpi:72,schemaVersion:2,bleedVisible:!1,rulesVisible:!1,distanceGuidesVisible:!1,openedSidePanel:"",previousOpenedSidePanel:"",custom:l.frozen(),tool:l.optional(l.enumeration("Tool",["selection","draw","pan","text","eraser"]),"selection"),toolOptions:l.optional(l.model({brushType:l.optional(l.enumeration("BrushType",["brush","highlighter"]),"brush"),strokeWidth:l.optional(l.number,5),stroke:l.optional(l.string,"#000000"),opacity:l.optional(l.number,1)}),{}),selectedElementsIds:l.array(l.string),animatedElementsIds:l.array(l.string),history:l.optional(d,{targetPath:"../pages"}),_elementsPixelRatio:Math.min(2,"undefined"!=typeof window&&window.devicePixelRatio||1),_activePageId:"",_selectedPagesIds:l.array(l.string),_forceShowCredit:!1,_key:"",_validated:!1}).views(e=>{const t=g(()=>{const t={};return j({children:e.pages},e=>(t[e.id]=e,!1)),t},{keepAlive:!0});return{get _idsMap(){return t.get()}}}).views(e=>({get _bleedVisible(){return console.warn("store._bleedVisible is deprecated. Please use store.bleedVisible instead."),e.bleedVisible},get selectedElements(){return e.selectedElementsIds.map(t=>{for(const i of e.pages){for(const e of i.children){if(e.id===t){return e}}}}).filter(e=>!!e)},get children(){return e.pages},get selectedShapes(){const e=[];return j({children:this.selectedElements},t=>{"group"!==t.type&&e.push(t)}),e},get activePage(){return e.pages.slice().find(t=>t.id===e._activePageId)||(e.pages.length?e.pages[0]:null)},get selectedPages(){return e._selectedPagesIds.map(t=>e.pages.find(e=>e.id===t))},get duration(){let t=0;return e.pages.forEach(e=>{t+=e.duration}),t},get _hasCroppedImages(){return this.find(e=>"image"===e.type&&e._cropModeEnabled)},find(t){let i;return j({children:e.pages},e=>{if(!i&&t(e)){return i=e,!0}}),i},getElementById:t=>e._idsMap[t]})).actions(r=>{let l=0,d=null,g=!1;const S={afterCreate(){r.history.canUndo},setCurrentTime(e){r.currentTime=e},_togglePlaying(e=!r.isPlaying){r.isPlaying=e},play({animatedElementsIds:e=[],startTime:t=0,currentTime:o=0,endTime:n=r.duration,repeat:s=!1}={}){o&&(console.warn("currentTime property of store.play() is deprecated. Please use startTime instead."),t=o),r.animatedElementsIds=i(e),r.currentTime=t,r.isPlaying=!0,l=Date.now(),d=n,g=s,requestAnimationFrame(()=>S.seek())},checkActivePage(){let e=0;for(const t of r.pages){if(r.currentTime>=t.startTime&&r.currentTime<t.startTime+t.duration){S.selectPage(t.id);break}e+=t.duration}},seek(){if(!r.isPlaying){return}const e=Date.now(),t=e-l;l=e,r.currentTime+=t,S.checkActivePage();const i=d||r.duration;r.isPlaying&&r.currentTime<i?requestAnimationFrame(()=>S.seek()):r.isPlaying&&g?(r.currentTime=0,requestAnimationFrame(()=>S.seek())):S.stop()},stop(){r.isPlaying=!1,r.currentTime=0,r.animatedElementsIds=i([]),S.checkActivePage()},__(){r._validated||(h(r._key,r._forceShowCredit),r._validated=!0)},set(e){Object.assign(r,e)},setUnit({unit:e,dpi:t}){r.unit=e||r.unit,r.dpi=t||r.dpi},setRole(e){r.role=e},setTool(e){r.tool=e},setToolOptions(e){Object.assign(r.toolOptions,e)},addPage(e){const t=O.create(Object.assign({id:c(10)},e));return r.pages.push(t),r._activePageId=t.id,t},selectPage(e){r._activePageId=e,1===r._selectedPagesIds.length&&(r._selectedPagesIds=i([e]))},selectPages(e){r._selectedPagesIds=i(e),1===r._selectedPagesIds.length&&(r._activePageId=r._selectedPagesIds[0])},selectElements(e){const t=e.map(e=>r.getElementById(e)).sort((e,t)=>e.page.children.indexOf(e)-e.page.children.indexOf(t)).filter(e=>!!e).map(e=>e.id);r.selectedElementsIds=i(t)},toggleBleed(e){r.bleedVisible=null!=e?e:!r.bleedVisible},toggleRulers(e){r.rulesVisible=null!=e?e:!r.rulesVisible},toggleDistanceGuides(e){r.distanceGuidesVisible=null!=e?e:!r.distanceGuidesVisible},openSidePanel(e){r.openedSidePanel!==e&&(r.previousOpenedSidePanel=r.openedSidePanel,r.openedSidePanel=e)},setScale(e){r.scale=e},_setScaleToFit(e){r.scaleToFit=e},setElementsPixelRatio(e){r._elementsPixelRatio=e},setSize(e,t,i){r.pages.forEach(o=>{o.setSize({width:e,height:t,useMagic:i,softChange:!0})}),r.width=e,r.height=t},setPageZIndex(e,t){const i=r.pages.find(t=>t.id===e);i&&(n(i),r.pages.remove(i),r.pages.splice(t,0,i))},deletePages(e){const t=r.pages.indexOf(r.activePage);e.forEach(e=>{const t=r.pages.find(t=>t.id===e);o(t)});const n=Math.min(r.pages.length-1,t),s=r.pages[n];s&&(r._activePageId=s.id),r.selectedElementsIds=i(r.selectedElementsIds.filter(e=>r.getElementById(e)))},groupElements(e,t={}){const o=e.map(e=>r.getElementById(e)),s=o[0].page;if(o.forEach(e=>{e&&n(e)}),!o.length){return}const a=s.children.reduce((e,t)=>{if("group"===t.type){const i=t.name.match(/group-(\d+)/);if(i){const t=parseInt(i[1],10);return Math.max(e,t)}}return e},0),l=Object.assign({id:c(10),name:`group-${a+1}`,children:o,type:"group"},t);return s.children.push(l),r.selectedElementsIds=i([l.id]),s.children.find(e=>e.id===l.id)},ungroupElements(e){const t=e.map(e=>r.getElementById(e)),o=[];t.forEach(e=>{if(e&&"group"===e.type){const t=e.page,i=t.children.indexOf(e);e.children.forEach(e=>{o.push(e.id)}),e.children.forEach(e=>{n(e),t.children.push(e)}),t.children.splice(i,1)}}),r.selectedElementsIds=i(o)},deleteElements(e){const t=[];r.find(i=>(e.includes(i.id)&&t.push(i),!1)),t.forEach(e=>{o(e)}),r.selectedElementsIds=i(r.selectedElementsIds.filter(e=>r.getElementById(e)))},on(e,t){if("change"===e){let e=S.toJSON();return a(r,i=>{const o=S.toJSON();!x(e,o)&&(e=o,t(o))})}},async _toCanvas({pixelRatio:e,ignoreBackground:t,pageId:i,mimeType:o,includeBleed:n,_skipTimeout:s,quickMode:a=!1,_exportCanvases:l}={}){var d;const c=e||1;i=i||(null===(d=r.pages[0])||void 0===d?void 0:d.id);const g=r.pages.find(e=>e.id===i);if(!g){throw new Error(`No page for export with id ${i}`)}const m=r._elementsPixelRatio;c>r._elementsPixelRatio&&S.setElementsPixelRatio(c),a?null==g||g.set({_forceMount:!0}):null==g||g.set({_exporting:!0});const u=await _(()=>{const e=p.stages.filter(e=>e.getAttr("pageId")===i);return 0===e.length?null:e});if(!u){throw null==g||g.set({_forceMount:!1,_exporting:!1}),S.setElementsPixelRatio(m),new Error(`Export is failed. Can not find stage for page ${i}. Looks like <Workspace /> component is not mounted, but it is required in order to process the export.`)}u.length>1&&console.error(`Polotno error: Detected several canvas elements for page "${i}" in the document. This is not supported and will lead to incorrect export. Make sure to use unique ids for all pages and make sure you unmount <Workspace /> when it is not needed.`);const f=u[0];await S.waitLoading({_skipTimeout:s});const h=f.findOne(".page-container");if(!h){throw S.setElementsPixelRatio(m),null==g||g.set({_forceMount:!1,_exporting:!1}),new Error("Export is failed. Canvas was unmounted.")}const b=f.position();f.position({x:0,y:0}),f.find("Transformer").forEach(e=>{e.setAttr("oldVisible",e.visible()),e.visible(!1)}),h.find(".page-background").forEach(e=>e.shadowEnabled(!1)),h.find(".page-background").forEach(e=>e.strokeEnabled(!1)),h.find(".highlighter").forEach(e=>e.visible(!1));const y=h.findOne(".page-background-group"),v=y.clip();y.clip({x:null,y:null,width:null,height:null});const w=h.findOne(".elements-container"),E=w.clip();w.clip({x:null,y:null,width:null,height:null});const x=h.find(e=>!e.visible()&&e.getAttr("editModeEnabled")&&!e.getAttr("hideInExport"));x.forEach(e=>{e.setAttr("oldVisible",e.visible()),e.show()});const I=h.find(e=>e.getAttr("hideInExport"));I.forEach(e=>{e.setAttr("oldVisible",e.visible()),e.hide()}),t&&h.find(".page-background").forEach(e=>e.hide());const k=n?g.bleed:0;let O=k;!r.bleedVisible&&n||(r.bleedVisible||n?r.bleedVisible&&n?O=0:r.bleedVisible&&!n&&(O=-g.bleed):O=0);const j=g.computedWidth+2*k,T=g.computedHeight+2*k,F=h.scale();h.scale({x:1,y:1});const R=P(h,{x:h.x()-O,y:h.y()-O,width:j,height:T,pixelRatio:c,sceneCanvas:null==l?void 0:l.sceneCanvas,bufferCanvas:null==l?void 0:l.bufferCanvas});h.scale(F);const C=R._canvas;if("image/jpeg"===o){const e=C.getContext("2d");e.save(),e.globalCompositeOperation="destination-over",e.fillStyle="white",e.fillRect(0,0,C.width,C.height),e.restore()}return t&&h.find(".page-background").forEach(e=>e.show()),I.forEach(e=>{e.visible(e.getAttr("oldVisible"))}),x.forEach(e=>{e.visible(e.getAttr("oldVisible"))}),h.find(".page-background").forEach(e=>e.shadowEnabled(!0)),h.find(".page-background").forEach(e=>e.strokeEnabled(!0)),f.find("Transformer").forEach(e=>{e.visible(e.getAttr("oldVisible"))}),h.find(".highlighter").forEach(e=>e.visible(!0)),y.clip(v),w.clip(E),f.position(b),null==g||g.set({_exporting:!1,_forceMount:!1}),await Promise.resolve(),S.setElementsPixelRatio(m),C},async toDataURL(t={}){var{mimeType:i,quality:o,dpi:n,dpiMetadata:s="auto"}=t,a=e(t,["mimeType","quality","dpi","dpiMetadata"]);const l=await S._toCanvas(Object.assign({mimeType:i},a)),d=i||"image/png",c=l.toDataURL(d,o);p.Util.releaseCanvas(l);const g=null!=n?n:r.dpi;return"image/png"!==d&&"image/jpeg"!==d||"never"===s||"auto"===s&&72===g?c:v(c,d,g)},async toBlob(t={}){var{mimeType:i,quality:o}=t,n=e(t,["mimeType","quality"]);const s=await S._toCanvas(Object.assign({mimeType:i},n)),a=await new Promise(e=>{s.toBlob(e,i,o)});return p.Util.releaseCanvas(s),a},async saveAsImage(t={}){var{fileName:i}=t,o=e(t,["fileName"]);const n=(o.mimeType||"image/png").split("/")[1];m(await S.toDataURL(o),i||"polotno."+n)},async _toPDF(e){const t=e.dpi||r.dpi,i=e.parallel||1,o=e.unit||("px"===r.unit?"mm":r.unit),n=e.pixelRatio||1,s=e.pageIds||r.pages.map(e=>e.id),a=r.pages.filter(e=>s.includes(e.id)),l=await u(),d=e=>E({px:e,unit:o,dpi:t}),c=e.cropMarkSize||0,p=d(c),g=a[0]||{},m=e.includeBleed?g.bleed:0,f=d(g.computedWidth+2*m+2*p),h=d(g.computedHeight+2*m+2*p);var b=new l({unit:o,orientation:f>h?"landscape":"portrait",format:[f,h],compress:!0,putOnlyUsedFonts:!0});b.deletePage(1);const y=((e,t)=>{const i=[];for(let o=0;o<e.length;o+=t){i.push(e.slice(o,o+t))}return i})(a,i);let v=0;for(const r of y){const t=r.map(async t=>{const i=e.includeBleed?t.bleed:0,o=t.computedWidth+2*i+2*c,a=t.computedHeight+2*i+2*c,r=d(o),l=d(a);let p=0,g=n;for(;p<10;){p+=1,2===p&&console.error("Polotno can not export PDF with current settings. Quality is automatically reduced.");const i=await S.toDataURL(Object.assign(Object.assign({},e),{pageId:t.id,pixelRatio:g}));if(i.length>20){return e.onProgress&&e.onProgress(++v/s.length*.9),{url:i,width:r,height:l,widthPx:o,heightPx:a}}g*=.8}});(await Promise.all(t)).filter(e=>void 0!==e).forEach(({url:e,width:t,height:i,widthPx:n,heightPx:s})=>{b.addPage([t,i],t>i?"landscape":"portrait");const a=b.getCurrentPageInfo();var r;switch(o){case"pt":r=1;break;case"mm":r=72/25.4;break;case"cm":r=72/2.54;break;case"in":r=72;break;case"px":r=.75;break;default:throw"Invalid unit: "+o}if(a.pageContext.cropBox={bottomLeftX:0,bottomLeftY:0,topRightX:t*r,topRightY:i*r},a.pageContext.artBox={bottomLeftX:d(c+m)*r,bottomLeftY:d(c+m)*r,topRightX:d(n-c-m)*r,topRightY:d(s-c-m)*r},a.pageContext.bleedBox={bottomLeftX:d(c+m)*r,bottomLeftY:d(c+m)*r,topRightX:d(n-c-m)*r,topRightY:d(s-c-m)*r},p){b.setLineWidth(d(1));const e=p+d(m);b.line(e,0,e,p),b.line(0,e,p,e),b.line(t-e,0,t-e,p),b.line(t,e,t-p,e),b.line(0,i-e,p,i-e),b.line(e,i,e,i-p),b.line(t,i-e,t-p,i-e),b.line(t-e,i,t-e,i-p)}b.addImage(e,p,p,t-2*p,i-2*p,void 0,"FAST")})}return b},toPDFDataURL:async e=>(await S._toPDF(Object.assign({mimeType:"image/jpeg"},e))).output("datauristring"),async toGIFDataURL(e={}){const t=e.pixelRatio||1,i=await f({width:r.width*t,height:r.height*t}),o=1e3/(e.fps||10),n=r.duration/o;for(let s=0;s<n-1;s++){const e=s*o||1;S.setCurrentTime(e);let n=0,a="";for(const t of r.pages){if(n+=t.duration,t.set({_rendering:n>e}),n>e){a=t.id;break}}const l=await S._toCanvas({pixelRatio:t,pageId:a,_skipTimeout:!0});i.addFrame(l.getContext("2d"),{delay:o,copy:!0})}for(const s of r.pages){s.set({_rendering:!1})}return S.stop(),i.render(),new Promise(e=>{i.on("finished",function(t){!function(e,t){var i=new FileReader;i.onload=function(e){t(e.target.result)},i.readAsDataURL(e)}(t,e)})})},async saveAsGIF(t={}){var{fileName:i}=t,o=e(t,["fileName"]);const n=await S.toGIFDataURL(o);m(n,i||"polotno.gif")},async toHTML({elementHook:e}={}){const t=S.toJSON();return I({json:t,elementHook:e})},async saveAsHTML({fileName:e,elementHook:t}={}){const i=await S.toHTML({elementHook:t}),o="data:text/html;base64,"+window.btoa(unescape(encodeURIComponent(i)));m(o,e||"polotno.html")},async toSVG({elementHook:e,pageId:t,fontEmbedding:i="inline"}={fontEmbedding:"inline"}){var o;const n=S.toJSON();t=t||(null===(o=n.pages[0])||void 0===o?void 0:o.id);const s=n.pages.find(e=>e.id===t);return k({json:Object.assign(Object.assign({},n),{pages:s?[s]:[]}),elementHook:e,fontEmbedding:i})},async saveAsSVG({fileName:e,elementHook:t,pageId:i,fontEmbedding:o="inline"}={}){const n=await S.toSVG({elementHook:t,pageId:i,fontEmbedding:o}),s="data:text/svg;base64,"+window.btoa(unescape(encodeURIComponent(n)));m(s,e||"polotno.svg")},async saveAsPDF(t={}){var{fileName:i}=t,o=e(t,["fileName"]);(await S._toPDF(Object.assign({mimeType:"image/jpeg"},o))).save(i||"polotno.pdf")},async waitLoading({_skipTimeout:e=!1}={}){e||await new Promise(e=>setTimeout(e,50)),await w()},toJSON:()=>({width:r.width,height:r.height,fonts:s(r.fonts),pages:s(r.pages),audios:s(r.audios),unit:r.unit,dpi:r.dpi,custom:r.custom,schemaVersion:r.schemaVersion}),loadJSON(e,i=!1){var o;const n=JSON.parse(JSON.stringify(e)),a=n.schemaVersion||0;a<1&&y.htmlRenderEnabled&&j({children:n.pages},e=>{if("text"===e.type){const t=16,i=e.letterSpacing*t;e.letterSpacing=i/e.fontSize}}),a<2&&j({children:n.pages},e=>{e.filters&&Object.keys(e.filters).forEach(t=>{if(["warm","cold","natural"].includes(t)){return}const i=e.filters[t];i&&"number"==typeof i.intensity&&(i.intensity=i.intensity/100)})}),delete n.schemaVersion;const l=r.activePage?r.pages.indexOf(r.activePage):0;let d=null===(o=n.pages[l]||n.pages[0])||void 0===o?void 0:o.id;n._activePageId=d;const c=Object.assign({},s(r));Object.assign(c,n),c.history=i?s(r.history):{history:[],undoIdx:-1,targetPath:""},t(r,c)},clear({keepHistory:e=!1}={}){const t=r.pages.map(e=>e.id);S.deletePages(t),r.custom=null,e||r.history.clear()},addFont(e){S.removeFont(e.fontFamily),r.fonts.push(e)},removeFont(e){r.fonts.filter(t=>t.fontFamily===e).forEach(e=>o(e))},addAudio(e){const t=T.create(Object.assign({id:c(10)},e));r.audios.push(t)},removeAudio(e){const t=r.audios.find(t=>t.id===e);t&&r.audios.remove(t)},async loadFont(e,t=""){const i=r.fonts.find(t=>t.fontFamily===e)||b.globalFonts.find(t=>t.fontFamily===e);let o=[{fontStyle:"normal",fontWeight:"normal"},{fontStyle:"normal",fontWeight:"bold"}];return i?(i.styles&&(o=i.styles.map(e=>({fontStyle:e.fontStyle||"normal",fontWeight:e.fontWeight||"normal"}))),b.injectCustomFont(i)):b.injectGoogleFont(e),Promise.all(o.map(i=>b.loadFont(e,i.fontStyle,i.fontWeight,t)))},validate:e=>Store.validate(e,[{path:"",type:Store}]).map(e=>({path:"store"+e.context.map(e=>e.path).join("."),message:e.message}))};return S});export function createStore({key:e,showCredit:t}={key:"",showCredit:!1}){return Store.create({_forceShowCredit:t,_key:e})}export default createStore;
|
package/model/svg-model.d.ts
CHANGED
|
@@ -1,98 +1,123 @@
|
|
|
1
1
|
import { Instance } from 'mobx-state-tree';
|
|
2
2
|
export declare const SVGElement: import("mobx-state-tree").IModelType<{
|
|
3
3
|
id: import("mobx-state-tree").ISimpleType<string>;
|
|
4
|
-
type: import("mobx-state-tree").IType<string, string, string>;
|
|
5
|
-
name: import("mobx-state-tree").IType<string, string, string>;
|
|
6
|
-
opacity: import("mobx-state-tree").IType<number, number, number>;
|
|
4
|
+
type: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
5
|
+
name: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
6
|
+
opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
7
7
|
custom: import("mobx-state-tree").IType<any, any, any>;
|
|
8
|
-
visible: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
9
|
-
selectable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
10
|
-
removable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
11
|
-
alwaysOnTop: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
12
|
-
showInExport: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
8
|
+
visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
9
|
+
selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
10
|
+
removable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
11
|
+
alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
12
|
+
showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
13
13
|
} & {
|
|
14
|
-
x: import("mobx-state-tree").IType<number, number, number>;
|
|
15
|
-
y: import("mobx-state-tree").IType<number, number, number>;
|
|
16
|
-
width: import("mobx-state-tree").IType<number, number, number>;
|
|
17
|
-
height: import("mobx-state-tree").IType<number, number, number>;
|
|
18
|
-
rotation: import("mobx-state-tree").IType<number, number, number>;
|
|
19
|
-
opacity: import("mobx-state-tree").IType<number, number, number>;
|
|
14
|
+
x: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
15
|
+
y: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
16
|
+
width: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
17
|
+
height: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
18
|
+
rotation: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
19
|
+
opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
20
20
|
animations: import("mobx-state-tree").IArrayType<import("mobx-state-tree").IModelType<{
|
|
21
|
-
delay: import("mobx-state-tree").IType<number, number, number>;
|
|
22
|
-
duration: import("mobx-state-tree").IType<number, number, number>;
|
|
23
|
-
enabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
21
|
+
delay: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
22
|
+
duration: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
23
|
+
enabled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
24
24
|
type: import("mobx-state-tree").ISimpleType<string>;
|
|
25
|
-
name: import("mobx-state-tree").IType<string, string, string>;
|
|
26
|
-
data: import("mobx-state-tree").IType<{}, {}, {}>;
|
|
25
|
+
name: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
26
|
+
data: import("mobx-state-tree").IType<{} | null | undefined, {}, {}>;
|
|
27
27
|
}, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
|
|
28
|
-
blurEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
29
|
-
blurRadius: import("mobx-state-tree").IType<number, number, number>;
|
|
30
|
-
brightnessEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
31
|
-
brightness: import("mobx-state-tree").IType<number, number, number>;
|
|
32
|
-
sepiaEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
33
|
-
grayscaleEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
28
|
+
blurEnabled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
29
|
+
blurRadius: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
30
|
+
brightnessEnabled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
31
|
+
brightness: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
32
|
+
sepiaEnabled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
33
|
+
grayscaleEnabled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
34
34
|
filters: import("mobx-state-tree").IMapType<import("mobx-state-tree").IModelType<{
|
|
35
|
-
intensity: import("mobx-state-tree").IType<number, number, number>;
|
|
35
|
+
intensity: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
36
36
|
}, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
|
|
37
|
-
shadowEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
38
|
-
shadowBlur: import("mobx-state-tree").IType<number, number, number>;
|
|
39
|
-
shadowOffsetX: import("mobx-state-tree").IType<number, number, number>;
|
|
40
|
-
shadowOffsetY: import("mobx-state-tree").IType<number, number, number>;
|
|
41
|
-
shadowColor: import("mobx-state-tree").IType<string, string, string>;
|
|
42
|
-
shadowOpacity: import("mobx-state-tree").IType<number, number, number>;
|
|
43
|
-
visible: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
44
|
-
draggable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
45
|
-
resizable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
46
|
-
selectable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
47
|
-
contentEditable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
48
|
-
styleEditable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
49
|
-
alwaysOnTop: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
50
|
-
showInExport: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
37
|
+
shadowEnabled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
38
|
+
shadowBlur: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
39
|
+
shadowOffsetX: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
40
|
+
shadowOffsetY: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
41
|
+
shadowColor: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
42
|
+
shadowOpacity: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
43
|
+
visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
44
|
+
draggable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
45
|
+
resizable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
46
|
+
selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
47
|
+
contentEditable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
48
|
+
styleEditable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
49
|
+
alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
50
|
+
showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
51
51
|
} & {
|
|
52
|
-
type: import("mobx-state-tree").IType<string, string, string>;
|
|
53
|
-
src: import("mobx-state-tree").IType<string, string, string>;
|
|
54
|
-
maskSrc: import("mobx-state-tree").IType<string, string, string>;
|
|
55
|
-
cropX: import("mobx-state-tree").IType<number, number, number>;
|
|
56
|
-
cropY: import("mobx-state-tree").IType<number, number, number>;
|
|
57
|
-
cropWidth: import("mobx-state-tree").IType<number, number, number>;
|
|
58
|
-
cropHeight: import("mobx-state-tree").IType<number, number, number>;
|
|
59
|
-
keepRatio: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
60
|
-
stretchEnabled: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
61
|
-
flipX: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
62
|
-
flipY: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
63
|
-
width: import("mobx-state-tree").IType<number, number, number>;
|
|
64
|
-
height: import("mobx-state-tree").IType<number, number, number>;
|
|
65
|
-
borderColor: import("mobx-state-tree").IType<string, string, string>;
|
|
66
|
-
borderSize: import("mobx-state-tree").IType<number, number, number>;
|
|
67
|
-
cornerRadius: import("mobx-state-tree").IType<number, number, number>;
|
|
52
|
+
type: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
53
|
+
src: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
54
|
+
maskSrc: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
55
|
+
cropX: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
56
|
+
cropY: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
57
|
+
cropWidth: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
58
|
+
cropHeight: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
59
|
+
keepRatio: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
60
|
+
stretchEnabled: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
61
|
+
flipX: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
62
|
+
flipY: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
63
|
+
width: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
64
|
+
height: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
65
|
+
borderColor: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
66
|
+
borderSize: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
67
|
+
cornerRadius: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
68
68
|
colorsReplace: import("mobx-state-tree").IMapType<import("mobx-state-tree").ISimpleType<string>>;
|
|
69
69
|
}, {
|
|
70
|
-
readonly locked: boolean;
|
|
71
70
|
readonly page: any;
|
|
72
71
|
readonly store: any;
|
|
73
72
|
readonly top: import("mobx-state-tree").ModelInstanceTypeProps<{
|
|
74
73
|
id: import("mobx-state-tree").ISimpleType<string>;
|
|
75
|
-
type: import("mobx-state-tree").IType<string, string, string>;
|
|
76
|
-
name: import("mobx-state-tree").IType<string, string, string>;
|
|
77
|
-
opacity: import("mobx-state-tree").IType<number, number, number>;
|
|
74
|
+
type: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
75
|
+
name: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
76
|
+
opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
78
77
|
custom: import("mobx-state-tree").IType<any, any, any>;
|
|
79
|
-
visible: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
80
|
-
selectable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
81
|
-
removable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
82
|
-
alwaysOnTop: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
83
|
-
showInExport: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
78
|
+
visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
79
|
+
selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
80
|
+
removable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
81
|
+
alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
82
|
+
showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
84
83
|
}> & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IModelType<{
|
|
85
84
|
id: import("mobx-state-tree").ISimpleType<string>;
|
|
86
|
-
type: import("mobx-state-tree").IType<string, string, string>;
|
|
87
|
-
name: import("mobx-state-tree").IType<string, string, string>;
|
|
88
|
-
opacity: import("mobx-state-tree").IType<number, number, number>;
|
|
85
|
+
type: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
86
|
+
name: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
87
|
+
opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
89
88
|
custom: import("mobx-state-tree").IType<any, any, any>;
|
|
90
|
-
visible: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
91
|
-
selectable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
92
|
-
removable: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
93
|
-
alwaysOnTop: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
94
|
-
showInExport: import("mobx-state-tree").IType<boolean, boolean, boolean>;
|
|
89
|
+
visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
90
|
+
selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
91
|
+
removable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
92
|
+
alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
93
|
+
showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
95
94
|
}, {}, import("mobx-state-tree").ModelCreationType<{
|
|
95
|
+
id: string;
|
|
96
|
+
type: string | undefined;
|
|
97
|
+
name: string | undefined;
|
|
98
|
+
opacity: number | undefined;
|
|
99
|
+
custom: any;
|
|
100
|
+
visible: boolean | undefined;
|
|
101
|
+
selectable: boolean | undefined;
|
|
102
|
+
removable: boolean | undefined;
|
|
103
|
+
alwaysOnTop: boolean | undefined;
|
|
104
|
+
showInExport: boolean | undefined;
|
|
105
|
+
}>, import("mobx-state-tree").ModelSnapshotType<{
|
|
106
|
+
id: import("mobx-state-tree").ISimpleType<string>;
|
|
107
|
+
type: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
108
|
+
name: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
109
|
+
opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
110
|
+
custom: import("mobx-state-tree").IType<any, any, any>;
|
|
111
|
+
visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
112
|
+
selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
113
|
+
removable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
114
|
+
alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
115
|
+
showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
116
|
+
}>>>;
|
|
117
|
+
readonly parent: any;
|
|
118
|
+
readonly zIndex: any;
|
|
119
|
+
} & {
|
|
120
|
+
toJSON(): {
|
|
96
121
|
id: string;
|
|
97
122
|
type: string;
|
|
98
123
|
name: string;
|
|
@@ -103,14 +128,10 @@ export declare const SVGElement: import("mobx-state-tree").IModelType<{
|
|
|
103
128
|
removable: boolean;
|
|
104
129
|
alwaysOnTop: boolean;
|
|
105
130
|
showInExport: boolean;
|
|
106
|
-
}
|
|
107
|
-
readonly parent: any;
|
|
108
|
-
readonly zIndex: any;
|
|
109
|
-
} & {
|
|
110
|
-
toJSON(): {};
|
|
131
|
+
};
|
|
111
132
|
} & {
|
|
112
133
|
clone(attrs?: any, { skipSelect }?: {
|
|
113
|
-
skipSelect?: boolean;
|
|
134
|
+
skipSelect?: boolean | undefined;
|
|
114
135
|
}): import("./node-model.js").NodeType;
|
|
115
136
|
set(attrs: any): void;
|
|
116
137
|
moveUp(): void;
|
|
@@ -120,21 +141,24 @@ export declare const SVGElement: import("mobx-state-tree").IModelType<{
|
|
|
120
141
|
setZIndex(zIndex: number): void;
|
|
121
142
|
beforeDestroy(): void;
|
|
122
143
|
} & {
|
|
123
|
-
readonly
|
|
124
|
-
|
|
125
|
-
y: number;
|
|
126
|
-
width: number;
|
|
127
|
-
height: number;
|
|
128
|
-
rotation: number;
|
|
129
|
-
opacity: number;
|
|
130
|
-
color: any;
|
|
131
|
-
fontSize: any;
|
|
132
|
-
};
|
|
144
|
+
readonly locked: boolean;
|
|
145
|
+
readonly a: Record<string, any>;
|
|
133
146
|
animated(attr: any): any;
|
|
134
147
|
} & {
|
|
135
148
|
setAnimation(type: any, attrs: any): void;
|
|
136
149
|
setFilter(type: any, value: any): void;
|
|
137
150
|
} & {
|
|
138
151
|
replaceColor(oldColor: any, newColor: any): void;
|
|
139
|
-
}, any, {
|
|
152
|
+
}, any, import("mobx-state-tree").ModelSnapshotType<{
|
|
153
|
+
id: import("mobx-state-tree").ISimpleType<string>;
|
|
154
|
+
type: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
155
|
+
name: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
156
|
+
opacity: import("mobx-state-tree").IType<number | undefined, number, number>;
|
|
157
|
+
custom: import("mobx-state-tree").IType<any, any, any>;
|
|
158
|
+
visible: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
159
|
+
selectable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
160
|
+
removable: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
161
|
+
alwaysOnTop: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
162
|
+
showInExport: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
|
|
163
|
+
}>>;
|
|
140
164
|
export type SVGElementType = Instance<typeof SVGElement>;
|