@ydesign/react-editor 0.0.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/CHANGELOG.md +106 -0
- package/LICENSE +21 -0
- package/README.md +129 -0
- package/dist/app.css +2 -0
- package/dist/app.d.ts +13 -0
- package/dist/app.js +17 -0
- package/dist/canvas/context-menu/context-menu.d.ts +2 -0
- package/dist/canvas/context-menu/context-menu.js +0 -0
- package/dist/canvas/hotkeys.d.ts +3 -0
- package/dist/canvas/hotkeys.js +1 -0
- package/dist/canvas/workspace-canvas.d.ts +15 -0
- package/dist/canvas/workspace-canvas.js +1 -0
- package/dist/canvas/workspace.d.ts +9 -0
- package/dist/canvas/workspace.js +1 -0
- package/dist/chunk-2AWYWIIK.js +1 -0
- package/dist/chunk-3HQUN5MA.js +14 -0
- package/dist/chunk-55FJG4FK.js +1 -0
- package/dist/chunk-5MWZMSER.js +1 -0
- package/dist/chunk-6LFGFFHI.js +1 -0
- package/dist/chunk-75WC3GVB.js +1 -0
- package/dist/chunk-7LU5UGIG.js +16 -0
- package/dist/chunk-B35ZYWID.js +1 -0
- package/dist/chunk-DBQHEZPG.js +1 -0
- package/dist/chunk-DJBTBRPS.js +1 -0
- package/dist/chunk-E7ZSWHPU.js +1 -0
- package/dist/chunk-EMAFC3HG.js +1 -0
- package/dist/chunk-FIAIYSJ7.js +1 -0
- package/dist/chunk-GMISU6MD.js +1 -0
- package/dist/chunk-GYDTKPW5.js +1 -0
- package/dist/chunk-H67HTXU4.js +1 -0
- package/dist/chunk-IUFYYEGO.js +1 -0
- package/dist/chunk-JMIN2XMC.js +1 -0
- package/dist/chunk-JW76IC3E.js +1 -0
- package/dist/chunk-JWQ2DUXA.js +8 -0
- package/dist/chunk-LW2W4B2N.js +22 -0
- package/dist/chunk-M33EDDXB.js +1 -0
- package/dist/chunk-MNACXCF5.js +1 -0
- package/dist/chunk-O2XFH626.js +1 -0
- package/dist/chunk-OQ6HU62L.js +1 -0
- package/dist/chunk-P5I43V7X.js +1 -0
- package/dist/chunk-PBQY5UTI.js +1 -0
- package/dist/chunk-QJBRJELT.js +1 -0
- package/dist/chunk-R6Z6F447.js +1 -0
- package/dist/chunk-TE6HYOIP.js +7 -0
- package/dist/chunk-TX4BNXQC.js +1 -0
- package/dist/chunk-U7HIFGXC.js +1 -0
- package/dist/chunk-V5RJX32O.js +1 -0
- package/dist/chunk-V6ZZKUTN.js +1 -0
- package/dist/chunk-WIM26GEM.js +1 -0
- package/dist/chunk-WJT6VPDR.js +9 -0
- package/dist/chunk-XDLFQXMN.js +54 -0
- package/dist/chunk-XRRO2RT7.js +1 -0
- package/dist/chunk-XZAP76LL.js +1 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.js +0 -0
- package/dist/hooks/use-duplicate-element.d.ts +12 -0
- package/dist/hooks/use-duplicate-element.js +1 -0
- package/dist/hooks/use-lock.d.ts +14 -0
- package/dist/hooks/use-lock.js +1 -0
- package/dist/hooks/use-remove-element.d.ts +12 -0
- package/dist/hooks/use-remove-element.js +1 -0
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.js +1 -0
- package/dist/model/store.d.ts +307 -0
- package/dist/model/store.js +1 -0
- package/dist/project.d.ts +21 -0
- package/dist/project.js +1 -0
- package/dist/side-panel/background-panel.d.ts +10 -0
- package/dist/side-panel/background-panel.js +1 -0
- package/dist/side-panel/index.d.ts +6 -0
- package/dist/side-panel/index.js +1 -0
- package/dist/side-panel/layers-panel.d.ts +10 -0
- package/dist/side-panel/layers-panel.js +1 -0
- package/dist/side-panel/photos-panel.d.ts +10 -0
- package/dist/side-panel/photos-panel.js +1 -0
- package/dist/side-panel/shapes-panel.d.ts +10 -0
- package/dist/side-panel/shapes-panel.js +1 -0
- package/dist/side-panel/side-panel.d.ts +35 -0
- package/dist/side-panel/side-panel.js +1 -0
- package/dist/side-panel/size-panel.d.ts +10 -0
- package/dist/side-panel/size-panel.js +1 -0
- package/dist/side-panel/tab-button.d.ts +12 -0
- package/dist/side-panel/tab-button.js +1 -0
- package/dist/side-panel/templates-panel.d.ts +10 -0
- package/dist/side-panel/templates-panel.js +1 -0
- package/dist/side-panel/text-panel.d.ts +10 -0
- package/dist/side-panel/text-panel.js +1 -0
- package/dist/side-panel/upload-panel.d.ts +10 -0
- package/dist/side-panel/upload-panel.js +1 -0
- package/dist/toolbar/default-toolbar.d.ts +12 -0
- package/dist/toolbar/default-toolbar.js +1 -0
- package/dist/toolbar/download-button.d.ts +10 -0
- package/dist/toolbar/download-button.js +1 -0
- package/dist/toolbar/duplicate-button.d.ts +12 -0
- package/dist/toolbar/duplicate-button.js +1 -0
- package/dist/toolbar/element-container.d.ts +13 -0
- package/dist/toolbar/element-container.js +1 -0
- package/dist/toolbar/filters-picker.d.ts +14 -0
- package/dist/toolbar/filters-picker.js +1 -0
- package/dist/toolbar/flip-button.d.ts +12 -0
- package/dist/toolbar/flip-button.js +1 -0
- package/dist/toolbar/group-button.d.ts +12 -0
- package/dist/toolbar/group-button.js +1 -0
- package/dist/toolbar/history-buttons.d.ts +12 -0
- package/dist/toolbar/history-buttons.js +1 -0
- package/dist/toolbar/image-eraser-pen.d.ts +5 -0
- package/dist/toolbar/image-eraser-pen.js +1 -0
- package/dist/toolbar/image-remove-background.d.ts +5 -0
- package/dist/toolbar/image-remove-background.js +1 -0
- package/dist/toolbar/image-toolbar.d.ts +24 -0
- package/dist/toolbar/image-toolbar.js +1 -0
- package/dist/toolbar/lock-button.d.ts +12 -0
- package/dist/toolbar/lock-button.js +1 -0
- package/dist/toolbar/many-toolbar.d.ts +5 -0
- package/dist/toolbar/many-toolbar.js +1 -0
- package/dist/toolbar/opacity-picker.d.ts +12 -0
- package/dist/toolbar/opacity-picker.js +1 -0
- package/dist/toolbar/position-picker.d.ts +12 -0
- package/dist/toolbar/position-picker.js +1 -0
- package/dist/toolbar/remove-button.d.ts +12 -0
- package/dist/toolbar/remove-button.js +1 -0
- package/dist/toolbar/text-ai-write.d.ts +7 -0
- package/dist/toolbar/text-ai-write.js +1 -0
- package/dist/toolbar/text-toolbar.d.ts +15 -0
- package/dist/toolbar/text-toolbar.js +1 -0
- package/dist/toolbar/toolbar.d.ts +20 -0
- package/dist/toolbar/toolbar.js +1 -0
- package/dist/toolbar/zoom-buttons.d.ts +15 -0
- package/dist/toolbar/zoom-buttons.js +12 -0
- package/dist/utils/blob.d.ts +5 -0
- package/dist/utils/blob.js +1 -0
- package/dist/utils/download.d.ts +3 -0
- package/dist/utils/download.js +1 -0
- package/dist/utils/file.d.ts +3 -0
- package/dist/utils/file.js +1 -0
- package/dist/utils/filters.d.ts +2 -0
- package/dist/utils/filters.js +0 -0
- package/dist/utils/fonts.d.ts +68 -0
- package/dist/utils/fonts.js +1 -0
- package/dist/utils/image.d.ts +13 -0
- package/dist/utils/image.js +1 -0
- package/dist/utils/index.d.ts +21 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/l10n.d.ts +21 -0
- package/dist/utils/l10n.js +1 -0
- package/dist/utils/loader.d.ts +6 -0
- package/dist/utils/loader.js +1 -0
- package/dist/utils/screen.d.ts +6 -0
- package/dist/utils/screen.js +1 -0
- package/package.json +128 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import*as A from"mobx";var u=A.observable([]);function S(t){u.push(t)}function I(t){let e=u.findIndex(n=>n.fontFamily===t);e!==-1&&u.splice(e,1)}function O(t){u.replace(t)}var E="Some test text;?#D-\u041F\u0420\u0418\u0412\u0415\u0422!1230o9u8i7y6t5r4e3w2q1",g=null;function i(t,e="Arial",n="normal",s="normal"){g||(g=document.createElement("canvas"));let o=g.getContext("2d");return o.font=`${n} ${s} 40px '${t}', ${e}`,o.measureText(E).width}var c={Arial:!0},N=t=>!!c[t],v=6e3,p=60,y=()=>{},R=t=>{y=t},$=()=>v,W=t=>{$=t};async function M(t,e="normal",n="normal"){if(c[t])return;let s=!!document.fonts?.load,o=i("Arial","Arial",e,n);if(s)try{if(await document.fonts.load(`${n} ${e} 16px '${t}'`),i(t,"Arial",e,n)!==o){c[t]=!0;return}}catch{}let l=i("Times","Times",e,n),a=i(t,"Arial",e,n),d=Math.min(v,$())/p;for(let m=0;m<d;m++){let x=i(t,"Arial",e,n),C=i(t,"Times",e,n);if(x!==a||x!==o||C!==l){await T(p),c[t]=!0;return}await T(p)}let f=`Timeout for loading font "${t}". Is it a correct font family?`;console.warn(f),y(f)}function T(t){return new Promise(e=>setTimeout(e,t))}var F={},r=null;function w(){return r||(r=document.getElementById("custom-font-style"),r||(r=document.createElement("style"),r.id="custom-font-style",document.head.appendChild(r))),r.sheet}function P(t){let{fontFamily:e,url:n,styles:s}=t;if(F[e]||!n&&!s)return;let o=s||(n?[{src:`url("${n}")`}]:[]),l=w();o.forEach(a=>{let d=`
|
|
2
|
+
@font-face {
|
|
3
|
+
font-family: '${e}';
|
|
4
|
+
src: ${a.src};
|
|
5
|
+
font-style: ${a.fontStyle||"normal"};
|
|
6
|
+
font-weight: ${a.fontWeight||"normal"};
|
|
7
|
+
font-display: swap;
|
|
8
|
+
}
|
|
9
|
+
`;l.insertRule(d,l.cssRules.length)}),F[e]=!0}var b={},h="400,400italic,700,700italic";function j(t){h=t}function V(){return h}function L(t){return`https://fonts.googleapis.com/css?family=${t.replace(/ /g,"+")}:${h}`}function k(t){if(b[t])return;let e=document.createElement("link");e.rel="stylesheet",e.type="text/css",e.href=L(t),document.head.appendChild(e),b[t]=!0}export{u as a,S as b,I as c,O as d,N as e,R as f,W as g,M as h,P as i,j,V as k,L as l,k as m};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import{c as s,d as S}from"./chunk-JWQ2DUXA.js";import{a as x}from"./chunk-WIM26GEM.js";import{a as o}from"./chunk-LW2W4B2N.js";import{a as P}from"./chunk-QJBRJELT.js";import{a as u}from"./chunk-6LFGFFHI.js";import{a as h}from"./chunk-DBQHEZPG.js";import{a as m}from"./chunk-TX4BNXQC.js";import{a as y}from"./chunk-M33EDDXB.js";import{a as f}from"./chunk-DJBTBRPS.js";import{a as T}from"./chunk-55FJG4FK.js";import a from"styled-components";import{useRef as g,useLayoutEffect as C}from"react";import{observer as i}from"mobx-react-lite";import{LayoutTemplate as z,TypeOutline as L,Image as N,Shapes as M,Upload as B,Wallpaper as H,Layers as I,ImageUpscale as E}from"lucide-react";import{clsx as R}from"clsx";import{jsx as n,jsxs as p}from"react/jsx-runtime";var U=a.div`
|
|
2
|
+
display: flex;
|
|
3
|
+
height: 100% !important;
|
|
4
|
+
padding: 0px !important;
|
|
5
|
+
position: relative;
|
|
6
|
+
|
|
7
|
+
&.bp5-navbar {
|
|
8
|
+
box-shadow: none;
|
|
9
|
+
}
|
|
10
|
+
`,$=a.div`
|
|
11
|
+
@media screen and (min-width: 501px) {
|
|
12
|
+
overflow-y: auto;
|
|
13
|
+
overflow-x: hidden;
|
|
14
|
+
min-width: 72px;
|
|
15
|
+
}
|
|
16
|
+
`,D=a.div`
|
|
17
|
+
display: flex;
|
|
18
|
+
flex-direction: column;
|
|
19
|
+
`,F=a.div`
|
|
20
|
+
padding: 10px 10px 0px 10px !important;
|
|
21
|
+
height: 100% !important;
|
|
22
|
+
|
|
23
|
+
&.bp5-navbar {
|
|
24
|
+
width: 350px;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
&.bp5-navbar.collapsed {
|
|
28
|
+
width: 0px;
|
|
29
|
+
}
|
|
30
|
+
`,O=a.div`
|
|
31
|
+
display: none;
|
|
32
|
+
${s(`
|
|
33
|
+
position: absolute;
|
|
34
|
+
bottom: 72px;
|
|
35
|
+
display: block;
|
|
36
|
+
width: 100vw;
|
|
37
|
+
height: 100vh;
|
|
38
|
+
background-color: rgba(0, 0, 0, 0.05);
|
|
39
|
+
`)}
|
|
40
|
+
`,W=a.div`
|
|
41
|
+
position: absolute;
|
|
42
|
+
right: 1px;
|
|
43
|
+
top: 50%;
|
|
44
|
+
height: 96px;
|
|
45
|
+
width: 15px;
|
|
46
|
+
fill: white;
|
|
47
|
+
cursor: pointer;
|
|
48
|
+
z-index: 10;
|
|
49
|
+
transform: translate(100%, -50%);
|
|
50
|
+
|
|
51
|
+
${s(`
|
|
52
|
+
display: none;
|
|
53
|
+
`)}
|
|
54
|
+
`,A=({onClick:e})=>n(W,{onClick:e,children:n("div",{children:p("button",{className:"grid relative justify-center arrow",children:[p("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 13 96",width:"13",height:"96",fill:"none",children:[n("path",{d:"M0,0 h1 c0,20,12,12,12,32 v32 c0,20,-12,12,-12,32 H0 z",className:"fill-white dark:fill-[#0b0809]"}),n("path",{d:"M0.5,0 c0,20,12,12,12,32 v32 c0,20,-12,12,-12,32",className:"fill-white stroke-gray-200 dark:fill-[#0b0809] dark:stroke-[#0b0809]"})]}),n("div",{className:"absolute self-center",children:n("span",{className:"w-3 h-3 text-block inline-flex items-center box-border dark:text-white",children:n("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 12 12",children:n("path",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeWidth:"1.25",d:"M7 3.17 4.88 5.3a1 1 0 0 0 0 1.42L7 8.83"})})})})]})})}),_={name:"templates",Tab:i(e=>n(o,{name:"templates",...e,children:n(z,{style:{display:"inline-block"},size:20})})),Panel:({store:e})=>n(P,{store:e})},j={name:"text",Tab:i(e=>n(o,{name:"text",...e,children:n(L,{style:{display:"inline-block"},size:20})})),Panel:({store:e})=>n(u,{store:e})},q={name:"photos",Tab:i(e=>n(o,{name:"photos",...e,children:n(N,{style:{display:"inline-block"},size:20})})),Panel:({store:e})=>n(f,{store:e})},G={name:"shapes",Tab:i(e=>n(o,{name:"shapes",...e,children:n(M,{style:{display:"inline-block"},size:20})})),Panel:({store:e})=>n(T,{store:e})},J={name:"upload",Tab:i(e=>n(o,{name:"upload",...e,children:n(B,{style:{display:"inline-block"},size:20})})),Panel:({store:e})=>n(h,{store:e})},K={name:"background",Tab:i(e=>n(o,{name:"background",...e,children:n(H,{style:{display:"inline-block"},size:20})})),Panel:({store:e})=>n(m,{store:e})},Q={name:"layers",Tab:i(e=>n(o,{name:"layers",...e,children:n(I,{style:{display:"inline-block"},size:20})})),Panel:({store:e})=>n(y,{store:e})},V={name:"size",Tab:i(e=>n(o,{name:"size",...e,children:n(E,{style:{display:"inline-block"},size:20})})),Panel:({store:e})=>n(x,{store:e})},X=[_,j,q,G,J,K,Q,V],Y=i(({store:e,sections:v,defaultSection:c="templates"})=>{(()=>{let t=g(!0);t.current&&(t.current=!1,e.openSidePanel(c))})();let r=S();C(()=>{r?e.openSidePanel(""):e.openSidePanel(c)},[r]);let d=[...v||X].filter(t=>t.visibleInList!==!1),b=d.find(t=>t.name===e.openedSidePanel)?.Panel,k=g(null);return p(U,{className:`bp5-navbar design-side-panel ${e.openedSidePanel?"":"collapsed"}`,children:[n($,{className:"design-side-tabs-container border-r-1 border-gray-200 dark:border-gray-800",ref:k,children:n(D,{className:"design-side-tabs-inner",children:d.map(({name:t,Tab:l})=>n(l,{name:t,onClick:()=>{t===e.openedSidePanel?e.openSidePanel(""):e.openSidePanel(t)},active:e.openedSidePanel===t},t))})}),b&&n(F,{className:R("bp5-navbar design-panel-container","border-r-1 border-gray-200 dark:border-gray-800"),onClick:t=>{let l=t.target.closest(".design-close-panel"),w=t.target.closest(".design-mobile");l&&(r||w)&&e.openSidePanel("")},children:n(b,{store:e})}),e.openedSidePanel&&n(O,{onClick:()=>e.openSidePanel("")}),e.openedSidePanel&&n(A,{onClick:()=>e.openSidePanel("")})]})}),Pe=Y;export{_ as a,j as b,q as c,G as d,J as e,K as f,Q as g,V as h,X as i,Y as j,Pe as k};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as d}from"react/jsx-runtime";var o=()=>d("div",{}),r=o;export{o as a,r as b};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as u,b as m}from"./chunk-3HQUN5MA.js";import{a as s}from"./chunk-OQ6HU62L.js";import{a as c,b as p}from"./chunk-E7ZSWHPU.js";import{ColorPicker as y,Tooltip as k,Button as f}from"antd";import{CirclePlus as g}from"lucide-react";import{cssGradient2FabricGradient as T}from"@ydesign/core";import{jsx as t,jsxs as d}from"react/jsx-runtime";var C=async e=>s(e),x=({store:e})=>{let i=e.editor?.workareaHandler.workarea?.fill,o=c(i);return t(k,{title:"\u80CC\u666F\u989C\u8272",children:t("div",{style:{height:32},children:t(y,{value:o,allowClear:!0,mode:["single","gradient"],onChangeComplete:r=>{let n=r.toCssString();if(n.includes("gradient")){let a=T(n);e.editor?.workareaHandler.setWorkareaBgColor(a)}else e.editor?.workareaHandler.setWorkareaBgColor(n)}})})})},P=({store:e})=>t("div",{children:d("label",{htmlFor:"input-file",children:[d(f,{type:"text",styles:{root:{padding:"0 8px"}},onClick:()=>{document.querySelector("#input-file")?.click()},children:[t(g,{size:16})," add image"]}),t("input",{type:"file",id:"input-file",style:{display:"none"},onChange:async i=>{let{target:o}=i;if(!(!o.files||o.files.length===0)){for(let r of o.files){let a={type:"image",src:await C(r)};e.editor?.objectsHandler.add(a)}o.value=""}},multiple:!0,accept:"image/*"})]})}),v=({store:e})=>t("div",{children:d(f,{type:"text",styles:{root:{padding:"0 8px"}},onClick:()=>{e.editor?.objectsHandler.add({originX:"left",originY:"top",fontSize:100,textAlign:"left",fill:p(),text:"Hello World",type:"textbox"})},children:[t(g,{size:16}),"add text"]})}),b={DefaultBackgroundPicker:x,DefaultAddImage:P,DefaultAddText:v},h=({store:e,components:l})=>{let o=u({type:"text",usedItems:["DefaultBackgroundPicker","DefaultAddImage","DefaultAddText"],components:l});return t(m,{items:o,itemRender:r=>{let n=l[r]||b[r];return n&&t(n,{store:e},r)}})},I=h;export{h as a,I as b};
|
package/dist/config.d.ts
ADDED
package/dist/config.js
ADDED
|
File without changes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { StoreType } from '../model/store.js';
|
|
2
|
+
import 'mobx-state-tree';
|
|
3
|
+
import '@ydesign/core';
|
|
4
|
+
|
|
5
|
+
declare const useDuplicateElement: ({ store }: {
|
|
6
|
+
store: StoreType;
|
|
7
|
+
}) => {
|
|
8
|
+
disabled: boolean;
|
|
9
|
+
duplicate: () => void;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export { useDuplicateElement };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"../chunk-JMIN2XMC.js";import"../chunk-O2XFH626.js";export{a as useDuplicateElement};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { StoreType } from '../model/store.js';
|
|
2
|
+
import 'mobx-state-tree';
|
|
3
|
+
import '@ydesign/core';
|
|
4
|
+
|
|
5
|
+
declare const useLock: ({ store }: {
|
|
6
|
+
store: StoreType;
|
|
7
|
+
}) => {
|
|
8
|
+
disabled: boolean;
|
|
9
|
+
lock: () => void;
|
|
10
|
+
unlock: () => void;
|
|
11
|
+
locked: boolean | undefined;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export { useLock };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"../chunk-75WC3GVB.js";import"../chunk-O2XFH626.js";export{a as useLock};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { StoreType } from '../model/store.js';
|
|
2
|
+
import 'mobx-state-tree';
|
|
3
|
+
import '@ydesign/core';
|
|
4
|
+
|
|
5
|
+
declare const useRemoveElement: ({ store }: {
|
|
6
|
+
store: StoreType;
|
|
7
|
+
}) => {
|
|
8
|
+
disabled: boolean;
|
|
9
|
+
remove: () => void;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export { useRemoveElement };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"../chunk-IUFYYEGO.js";import"../chunk-O2XFH626.js";export{a as useRemoveElement};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"../chunk-O2XFH626.js";import{clsx as e}from"clsx";import{twMerge as t}from"tailwind-merge";function s(...r){return t(e(r))}export{s as cn};
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import * as mobx_state_tree from 'mobx-state-tree';
|
|
2
|
+
import { Instance } from 'mobx-state-tree';
|
|
3
|
+
import { Editor } from '@ydesign/core';
|
|
4
|
+
|
|
5
|
+
interface ExportOptions {
|
|
6
|
+
multiplier: number;
|
|
7
|
+
format?: 'jpeg' | 'png' | 'webp';
|
|
8
|
+
quality?: number;
|
|
9
|
+
enableRetinaScaling?: boolean;
|
|
10
|
+
left?: number;
|
|
11
|
+
top?: number;
|
|
12
|
+
width?: number;
|
|
13
|
+
height?: number;
|
|
14
|
+
filter?: (object: any) => boolean;
|
|
15
|
+
}
|
|
16
|
+
interface BaseElement {
|
|
17
|
+
id: string;
|
|
18
|
+
type: string;
|
|
19
|
+
locked?: boolean;
|
|
20
|
+
[key: string]: any;
|
|
21
|
+
}
|
|
22
|
+
type ElementType = (BaseElement & {
|
|
23
|
+
type: 'textbox';
|
|
24
|
+
text: string;
|
|
25
|
+
}) | (BaseElement & {
|
|
26
|
+
type: 'image';
|
|
27
|
+
src: string;
|
|
28
|
+
}) | (BaseElement & {
|
|
29
|
+
type: 'group';
|
|
30
|
+
objects: ElementsArray;
|
|
31
|
+
}) | BaseElement;
|
|
32
|
+
type ElementsArray = ElementType[];
|
|
33
|
+
declare const forEveryChild: (e: any, callback: (e: ElementType) => boolean | void) => void;
|
|
34
|
+
declare const Font: mobx_state_tree.IModelType<{
|
|
35
|
+
fontFamily: mobx_state_tree.ISimpleType<string>;
|
|
36
|
+
name: mobx_state_tree.IOptionalIType<mobx_state_tree.ISimpleType<string>, [undefined]>;
|
|
37
|
+
url: mobx_state_tree.IOptionalIType<mobx_state_tree.ISimpleType<string>, [undefined]>;
|
|
38
|
+
img: mobx_state_tree.IOptionalIType<mobx_state_tree.ISimpleType<string>, [undefined]>;
|
|
39
|
+
styles: mobx_state_tree.IType<any, any, any>;
|
|
40
|
+
}, {}, mobx_state_tree.ModelCreationType<{
|
|
41
|
+
fontFamily: string;
|
|
42
|
+
name: string | undefined;
|
|
43
|
+
url: string | undefined;
|
|
44
|
+
img: string | undefined;
|
|
45
|
+
styles: any;
|
|
46
|
+
}>, mobx_state_tree._NotCustomized>;
|
|
47
|
+
/**
|
|
48
|
+
* 三个对象要搞清楚关系
|
|
49
|
+
* 1. selectedElementsIds: 选中的元素id数组
|
|
50
|
+
* 2. selectedElements: 会根据ids返回元素实例
|
|
51
|
+
* 3. selectElements: 设置 ids 的
|
|
52
|
+
* 4. selectedShapes:
|
|
53
|
+
*/
|
|
54
|
+
declare const Store: mobx_state_tree.IModelType<{
|
|
55
|
+
name: mobx_state_tree.IType<string | undefined, string, string>;
|
|
56
|
+
width: mobx_state_tree.IType<number | undefined, number, number>;
|
|
57
|
+
height: mobx_state_tree.IType<number | undefined, number, number>;
|
|
58
|
+
scale: mobx_state_tree.IType<number | undefined, number, number>;
|
|
59
|
+
scaleToFit: mobx_state_tree.IType<number | undefined, number, number>;
|
|
60
|
+
unit: mobx_state_tree.IType<string | undefined, string, string>;
|
|
61
|
+
dpi: mobx_state_tree.IType<number | undefined, number, number>;
|
|
62
|
+
bleed: mobx_state_tree.IType<number | undefined, number, number>;
|
|
63
|
+
bleedVisible: mobx_state_tree.IType<boolean | undefined, boolean, boolean>;
|
|
64
|
+
rulesVisible: mobx_state_tree.IType<boolean | undefined, boolean, boolean>;
|
|
65
|
+
openedSidePanel: mobx_state_tree.IType<string | undefined, string, string>;
|
|
66
|
+
selectedElementsIds: mobx_state_tree.IArrayType<mobx_state_tree.ISimpleType<string>>;
|
|
67
|
+
fonts: mobx_state_tree.IArrayType<mobx_state_tree.IModelType<{
|
|
68
|
+
fontFamily: mobx_state_tree.ISimpleType<string>;
|
|
69
|
+
name: mobx_state_tree.IOptionalIType<mobx_state_tree.ISimpleType<string>, [undefined]>;
|
|
70
|
+
url: mobx_state_tree.IOptionalIType<mobx_state_tree.ISimpleType<string>, [undefined]>;
|
|
71
|
+
img: mobx_state_tree.IOptionalIType<mobx_state_tree.ISimpleType<string>, [undefined]>;
|
|
72
|
+
styles: mobx_state_tree.IType<any, any, any>;
|
|
73
|
+
}, {}, mobx_state_tree.ModelCreationType<{
|
|
74
|
+
fontFamily: string;
|
|
75
|
+
name: string | undefined;
|
|
76
|
+
url: string | undefined;
|
|
77
|
+
img: string | undefined;
|
|
78
|
+
styles: any;
|
|
79
|
+
}>, mobx_state_tree._NotCustomized>>;
|
|
80
|
+
editor: mobx_state_tree.IType<Editor | null | undefined, Editor | null, Editor | null>;
|
|
81
|
+
custom: mobx_state_tree.IType<any, any, any>;
|
|
82
|
+
objects: mobx_state_tree.IType<any, any, any>;
|
|
83
|
+
_key: mobx_state_tree.IType<string | undefined, string, string>;
|
|
84
|
+
_updateTrigger: mobx_state_tree.IType<number | undefined, number, number>;
|
|
85
|
+
_updateHistory: mobx_state_tree.IType<number | undefined, number, number>;
|
|
86
|
+
_updateFontSize: mobx_state_tree.IType<number | undefined, number, number>;
|
|
87
|
+
}, {
|
|
88
|
+
readonly selectedElements: ElementType[];
|
|
89
|
+
} & {
|
|
90
|
+
readonly selectedShapes: ElementType[];
|
|
91
|
+
} & {
|
|
92
|
+
_setEditor(editor: Editor): void;
|
|
93
|
+
_triggerUpdate(): void;
|
|
94
|
+
_historyUpdate(): void;
|
|
95
|
+
_fontSizeUpdate(): void;
|
|
96
|
+
} & {
|
|
97
|
+
setObjects(objects: any): void;
|
|
98
|
+
selectElements(ids: string[]): void;
|
|
99
|
+
openSidePanel(t: string): void;
|
|
100
|
+
deleteElements(ids: string[]): void;
|
|
101
|
+
setScale(scale: number): void;
|
|
102
|
+
clone(): void;
|
|
103
|
+
addElement(): void;
|
|
104
|
+
setupEditorListeners(): void;
|
|
105
|
+
} & {
|
|
106
|
+
_forEachElementUp(ids: Array<string>, callback: Function): void;
|
|
107
|
+
_forEachElementDown(ids: Array<string>, callback: Function): false | undefined;
|
|
108
|
+
} & {
|
|
109
|
+
canMoveElementsUp(ids: Array<string>): false;
|
|
110
|
+
moveElementsUp(ids: Array<string>): void;
|
|
111
|
+
canMoveElementsTop(ids: Array<string>): false;
|
|
112
|
+
moveElementsTop(ids: Array<string>): void;
|
|
113
|
+
canMoveElementsDown(ids: Array<string>): false;
|
|
114
|
+
moveElementsDown(ids: Array<string>): void;
|
|
115
|
+
canMoveElementsBottom(ids: Array<string>): false;
|
|
116
|
+
moveElementsBottom(ids: Array<string>): void;
|
|
117
|
+
setElementZIndex(): void;
|
|
118
|
+
} & {
|
|
119
|
+
toDataURL(options?: ExportOptions): Promise<string | null | undefined>;
|
|
120
|
+
toBlob(options?: ExportOptions): Promise<Blob | null | undefined>;
|
|
121
|
+
saveAsImage(options?: ExportOptions & {
|
|
122
|
+
fileName?: string;
|
|
123
|
+
}): Promise<void>;
|
|
124
|
+
toJSON(): any;
|
|
125
|
+
toObject(): any;
|
|
126
|
+
loadJSON: (data: any) => Promise<void>;
|
|
127
|
+
clear(): void;
|
|
128
|
+
} & {
|
|
129
|
+
addFont(): void;
|
|
130
|
+
removeFont(): void;
|
|
131
|
+
/**
|
|
132
|
+
* 加载字体(注入 CSS 并等待字体可用)
|
|
133
|
+
* @param fontFamily - 字体名称
|
|
134
|
+
*/
|
|
135
|
+
loadFont(fontFamily: string): Promise<void[]>;
|
|
136
|
+
}, mobx_state_tree._NotCustomized, mobx_state_tree._NotCustomized>;
|
|
137
|
+
type StoreType = Instance<typeof Store>;
|
|
138
|
+
interface StoreProps {
|
|
139
|
+
key: string;
|
|
140
|
+
}
|
|
141
|
+
declare function createStore({ key }: StoreProps): mobx_state_tree.ModelInstanceTypeProps<{
|
|
142
|
+
name: mobx_state_tree.IType<string | undefined, string, string>;
|
|
143
|
+
width: mobx_state_tree.IType<number | undefined, number, number>;
|
|
144
|
+
height: mobx_state_tree.IType<number | undefined, number, number>;
|
|
145
|
+
scale: mobx_state_tree.IType<number | undefined, number, number>;
|
|
146
|
+
scaleToFit: mobx_state_tree.IType<number | undefined, number, number>;
|
|
147
|
+
unit: mobx_state_tree.IType<string | undefined, string, string>;
|
|
148
|
+
dpi: mobx_state_tree.IType<number | undefined, number, number>;
|
|
149
|
+
bleed: mobx_state_tree.IType<number | undefined, number, number>;
|
|
150
|
+
bleedVisible: mobx_state_tree.IType<boolean | undefined, boolean, boolean>;
|
|
151
|
+
rulesVisible: mobx_state_tree.IType<boolean | undefined, boolean, boolean>;
|
|
152
|
+
openedSidePanel: mobx_state_tree.IType<string | undefined, string, string>;
|
|
153
|
+
selectedElementsIds: mobx_state_tree.IArrayType<mobx_state_tree.ISimpleType<string>>;
|
|
154
|
+
fonts: mobx_state_tree.IArrayType<mobx_state_tree.IModelType<{
|
|
155
|
+
fontFamily: mobx_state_tree.ISimpleType<string>;
|
|
156
|
+
name: mobx_state_tree.IOptionalIType<mobx_state_tree.ISimpleType<string>, [undefined]>;
|
|
157
|
+
url: mobx_state_tree.IOptionalIType<mobx_state_tree.ISimpleType<string>, [undefined]>;
|
|
158
|
+
img: mobx_state_tree.IOptionalIType<mobx_state_tree.ISimpleType<string>, [undefined]>;
|
|
159
|
+
styles: mobx_state_tree.IType<any, any, any>;
|
|
160
|
+
}, {}, mobx_state_tree.ModelCreationType<{
|
|
161
|
+
fontFamily: string;
|
|
162
|
+
name: string | undefined;
|
|
163
|
+
url: string | undefined;
|
|
164
|
+
img: string | undefined;
|
|
165
|
+
styles: any;
|
|
166
|
+
}>, mobx_state_tree._NotCustomized>>;
|
|
167
|
+
editor: mobx_state_tree.IType<Editor | null | undefined, Editor | null, Editor | null>;
|
|
168
|
+
custom: mobx_state_tree.IType<any, any, any>;
|
|
169
|
+
objects: mobx_state_tree.IType<any, any, any>;
|
|
170
|
+
_key: mobx_state_tree.IType<string | undefined, string, string>;
|
|
171
|
+
_updateTrigger: mobx_state_tree.IType<number | undefined, number, number>;
|
|
172
|
+
_updateHistory: mobx_state_tree.IType<number | undefined, number, number>;
|
|
173
|
+
_updateFontSize: mobx_state_tree.IType<number | undefined, number, number>;
|
|
174
|
+
}> & {
|
|
175
|
+
readonly selectedElements: ElementType[];
|
|
176
|
+
} & {
|
|
177
|
+
readonly selectedShapes: ElementType[];
|
|
178
|
+
} & {
|
|
179
|
+
_setEditor(editor: Editor): void;
|
|
180
|
+
_triggerUpdate(): void;
|
|
181
|
+
_historyUpdate(): void;
|
|
182
|
+
_fontSizeUpdate(): void;
|
|
183
|
+
} & {
|
|
184
|
+
setObjects(objects: any): void;
|
|
185
|
+
selectElements(ids: string[]): void;
|
|
186
|
+
openSidePanel(t: string): void;
|
|
187
|
+
deleteElements(ids: string[]): void;
|
|
188
|
+
setScale(scale: number): void;
|
|
189
|
+
clone(): void;
|
|
190
|
+
addElement(): void;
|
|
191
|
+
setupEditorListeners(): void;
|
|
192
|
+
} & {
|
|
193
|
+
_forEachElementUp(ids: Array<string>, callback: Function): void;
|
|
194
|
+
_forEachElementDown(ids: Array<string>, callback: Function): false | undefined;
|
|
195
|
+
} & {
|
|
196
|
+
canMoveElementsUp(ids: Array<string>): false;
|
|
197
|
+
moveElementsUp(ids: Array<string>): void;
|
|
198
|
+
canMoveElementsTop(ids: Array<string>): false;
|
|
199
|
+
moveElementsTop(ids: Array<string>): void;
|
|
200
|
+
canMoveElementsDown(ids: Array<string>): false;
|
|
201
|
+
moveElementsDown(ids: Array<string>): void;
|
|
202
|
+
canMoveElementsBottom(ids: Array<string>): false;
|
|
203
|
+
moveElementsBottom(ids: Array<string>): void;
|
|
204
|
+
setElementZIndex(): void;
|
|
205
|
+
} & {
|
|
206
|
+
toDataURL(options?: ExportOptions): Promise<string | null | undefined>;
|
|
207
|
+
toBlob(options?: ExportOptions): Promise<Blob | null | undefined>;
|
|
208
|
+
saveAsImage(options?: ExportOptions & {
|
|
209
|
+
fileName?: string;
|
|
210
|
+
}): Promise<void>;
|
|
211
|
+
toJSON(): any;
|
|
212
|
+
toObject(): any;
|
|
213
|
+
loadJSON: (data: any) => Promise<void>;
|
|
214
|
+
clear(): void;
|
|
215
|
+
} & {
|
|
216
|
+
addFont(): void;
|
|
217
|
+
removeFont(): void;
|
|
218
|
+
/**
|
|
219
|
+
* 加载字体(注入 CSS 并等待字体可用)
|
|
220
|
+
* @param fontFamily - 字体名称
|
|
221
|
+
*/
|
|
222
|
+
loadFont(fontFamily: string): Promise<void[]>;
|
|
223
|
+
} & mobx_state_tree.IStateTreeNode<mobx_state_tree.IModelType<{
|
|
224
|
+
name: mobx_state_tree.IType<string | undefined, string, string>;
|
|
225
|
+
width: mobx_state_tree.IType<number | undefined, number, number>;
|
|
226
|
+
height: mobx_state_tree.IType<number | undefined, number, number>;
|
|
227
|
+
scale: mobx_state_tree.IType<number | undefined, number, number>;
|
|
228
|
+
scaleToFit: mobx_state_tree.IType<number | undefined, number, number>;
|
|
229
|
+
unit: mobx_state_tree.IType<string | undefined, string, string>;
|
|
230
|
+
dpi: mobx_state_tree.IType<number | undefined, number, number>;
|
|
231
|
+
bleed: mobx_state_tree.IType<number | undefined, number, number>;
|
|
232
|
+
bleedVisible: mobx_state_tree.IType<boolean | undefined, boolean, boolean>;
|
|
233
|
+
rulesVisible: mobx_state_tree.IType<boolean | undefined, boolean, boolean>;
|
|
234
|
+
openedSidePanel: mobx_state_tree.IType<string | undefined, string, string>;
|
|
235
|
+
selectedElementsIds: mobx_state_tree.IArrayType<mobx_state_tree.ISimpleType<string>>;
|
|
236
|
+
fonts: mobx_state_tree.IArrayType<mobx_state_tree.IModelType<{
|
|
237
|
+
fontFamily: mobx_state_tree.ISimpleType<string>;
|
|
238
|
+
name: mobx_state_tree.IOptionalIType<mobx_state_tree.ISimpleType<string>, [undefined]>;
|
|
239
|
+
url: mobx_state_tree.IOptionalIType<mobx_state_tree.ISimpleType<string>, [undefined]>;
|
|
240
|
+
img: mobx_state_tree.IOptionalIType<mobx_state_tree.ISimpleType<string>, [undefined]>;
|
|
241
|
+
styles: mobx_state_tree.IType<any, any, any>;
|
|
242
|
+
}, {}, mobx_state_tree.ModelCreationType<{
|
|
243
|
+
fontFamily: string;
|
|
244
|
+
name: string | undefined;
|
|
245
|
+
url: string | undefined;
|
|
246
|
+
img: string | undefined;
|
|
247
|
+
styles: any;
|
|
248
|
+
}>, mobx_state_tree._NotCustomized>>;
|
|
249
|
+
editor: mobx_state_tree.IType<Editor | null | undefined, Editor | null, Editor | null>;
|
|
250
|
+
custom: mobx_state_tree.IType<any, any, any>;
|
|
251
|
+
objects: mobx_state_tree.IType<any, any, any>;
|
|
252
|
+
_key: mobx_state_tree.IType<string | undefined, string, string>;
|
|
253
|
+
_updateTrigger: mobx_state_tree.IType<number | undefined, number, number>;
|
|
254
|
+
_updateHistory: mobx_state_tree.IType<number | undefined, number, number>;
|
|
255
|
+
_updateFontSize: mobx_state_tree.IType<number | undefined, number, number>;
|
|
256
|
+
}, {
|
|
257
|
+
readonly selectedElements: ElementType[];
|
|
258
|
+
} & {
|
|
259
|
+
readonly selectedShapes: ElementType[];
|
|
260
|
+
} & {
|
|
261
|
+
_setEditor(editor: Editor): void;
|
|
262
|
+
_triggerUpdate(): void;
|
|
263
|
+
_historyUpdate(): void;
|
|
264
|
+
_fontSizeUpdate(): void;
|
|
265
|
+
} & {
|
|
266
|
+
setObjects(objects: any): void;
|
|
267
|
+
selectElements(ids: string[]): void;
|
|
268
|
+
openSidePanel(t: string): void;
|
|
269
|
+
deleteElements(ids: string[]): void;
|
|
270
|
+
setScale(scale: number): void;
|
|
271
|
+
clone(): void;
|
|
272
|
+
addElement(): void;
|
|
273
|
+
setupEditorListeners(): void;
|
|
274
|
+
} & {
|
|
275
|
+
_forEachElementUp(ids: Array<string>, callback: Function): void;
|
|
276
|
+
_forEachElementDown(ids: Array<string>, callback: Function): false | undefined;
|
|
277
|
+
} & {
|
|
278
|
+
canMoveElementsUp(ids: Array<string>): false;
|
|
279
|
+
moveElementsUp(ids: Array<string>): void;
|
|
280
|
+
canMoveElementsTop(ids: Array<string>): false;
|
|
281
|
+
moveElementsTop(ids: Array<string>): void;
|
|
282
|
+
canMoveElementsDown(ids: Array<string>): false;
|
|
283
|
+
moveElementsDown(ids: Array<string>): void;
|
|
284
|
+
canMoveElementsBottom(ids: Array<string>): false;
|
|
285
|
+
moveElementsBottom(ids: Array<string>): void;
|
|
286
|
+
setElementZIndex(): void;
|
|
287
|
+
} & {
|
|
288
|
+
toDataURL(options?: ExportOptions): Promise<string | null | undefined>;
|
|
289
|
+
toBlob(options?: ExportOptions): Promise<Blob | null | undefined>;
|
|
290
|
+
saveAsImage(options?: ExportOptions & {
|
|
291
|
+
fileName?: string;
|
|
292
|
+
}): Promise<void>;
|
|
293
|
+
toJSON(): any;
|
|
294
|
+
toObject(): any;
|
|
295
|
+
loadJSON: (data: any) => Promise<void>;
|
|
296
|
+
clear(): void;
|
|
297
|
+
} & {
|
|
298
|
+
addFont(): void;
|
|
299
|
+
removeFont(): void;
|
|
300
|
+
/**
|
|
301
|
+
* 加载字体(注入 CSS 并等待字体可用)
|
|
302
|
+
* @param fontFamily - 字体名称
|
|
303
|
+
*/
|
|
304
|
+
loadFont(fontFamily: string): Promise<void[]>;
|
|
305
|
+
}, mobx_state_tree._NotCustomized, mobx_state_tree._NotCustomized>>;
|
|
306
|
+
|
|
307
|
+
export { type BaseElement, type ElementType, type ElementsArray, type ExportOptions, Font, Store, type StoreProps, type StoreType, createStore, createStore as default, forEveryChild };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as g}from"../chunk-P5I43V7X.js";import{a as l,h as c,i as p,m}from"../chunk-WJT6VPDR.js";import"../chunk-O2XFH626.js";import{types as i,cast as u,flow as f}from"mobx-state-tree";var y=(e,t)=>{if(e?.objects)for(let n of e.objects){if(t(n)===!0)break;y(n,t)}},E=i.model("Font",{fontFamily:i.string,name:i.optional(i.string,""),url:i.optional(i.string,""),img:i.optional(i.string,""),styles:i.frozen()}).preProcessSnapshot(e=>Object.assign(Object.assign({},e),{fontFamily:e.fontFamily||e.name})),b=i.model("Store",{name:"yitu-design",width:1080,height:1080,scale:1,scaleToFit:1,unit:"px",dpi:72,bleed:0,bleedVisible:!1,rulesVisible:!1,openedSidePanel:"",selectedElementsIds:i.array(i.string),fonts:i.array(E),editor:i.frozen(null),custom:i.frozen(),objects:i.frozen(),_key:"",_updateTrigger:0,_updateHistory:0,_updateFontSize:0}).views(e=>({get selectedElements(){let t=e._updateTrigger;return console.log("_trigger\u90FD\u53D8\u5316\u662F\u89E6\u53D1\u805A\u7126\u5143\u7D20\u7684\u5237\u65B0 ---> ",t),e.selectedElementsIds.map(n=>e.editor?.objectsHandler.findOneById(n))}})).views(e=>({get selectedShapes(){let t=[];return y({objects:e.selectedElements},n=>{n?.type!=="group"&&t.push(n)}),t}})).actions(e=>({_setEditor(t){e.editor=t},_triggerUpdate(){e._updateTrigger=e._updateTrigger+1},_historyUpdate(){e._updateHistory=e._updateHistory+1},_fontSizeUpdate(){e._updateFontSize=e._updateFontSize+1}})).actions(e=>({setObjects(t){e.objects=t},selectElements(t){e.selectedElementsIds=u(t)},openSidePanel(t){e.openedSidePanel!==t&&(e.openedSidePanel=t)},deleteElements(t){t.forEach(n=>{e.editor?.objectsHandler.remove(n)})},setScale(t){e.scale=t},clone(){e.editor?.objectsHandler.clone()},addElement(){},setupEditorListeners(){e.editor&&(e.editor.on("object:modified",()=>{console.log("\u805A\u7126\u5BF9\u8C61\u5C5E\u6027\u53D8\u5316: ---> "),e._triggerUpdate()}),e.editor.on("history:change",()=>{console.log("\u5386\u53F2\u8BB0\u5F55\u53D8\u5316: ---> "),e._historyUpdate()}),e.editor.on("textbox:modified",()=>{e._fontSizeUpdate()}))}})).actions(e=>({_forEachElementUp(t,n){if(!e.editor)return;let a=e.editor.layerHandler.getEffectiveLayers(),o=t.map(r=>({id:r,index:a.findIndex(d=>d.id===r)}));o.sort((r,d)=>d.index-r.index);for(let{index:r}of o){if(r==-1)continue;let d=r<a.length-1&&a[r+1],s=t.indexOf(d?.id)>=0;r===a.length-1||s||n(r)}},_forEachElementDown(t,n){if(!e.editor)return;let a=e.editor.layerHandler.getEffectiveLayers(),o=t.map(r=>({id:r,index:a.findIndex(d=>d.id===r)}));o.sort((r,d)=>d.index-r.index);for(let{index:r}of o){if(r==-1)continue;let d=r>0&&a[r-1],s=t.indexOf(d?.id)>=0;r===0||s||n(r)}return!1}})).actions(e=>({canMoveElementsUp(t){let n=!1;return e._forEachElementUp(t,()=>{n=!0}),n},moveElementsUp(t){if(!e.editor)return;let n=e.editor.layerHandler.getEffectiveLayers();[...t].map(o=>({id:o,index:n.findIndex(r=>r.id===o)})).filter(o=>o.index!==-1).sort((o,r)=>r.index-o.index).map(o=>o.id).forEach(o=>{e.editor?.layerHandler.bringForward(o)}),e._triggerUpdate()},canMoveElementsTop(t){return this.canMoveElementsUp(t)},moveElementsTop(t){e.editor&&(t.forEach(n=>{e.editor?.layerHandler.bringToFront(n)}),e._triggerUpdate())},canMoveElementsDown(t){let n=!1;return e._forEachElementDown(t,()=>{n=!0}),n},moveElementsDown(t){if(!e.editor)return;let n=e.editor.layerHandler.getEffectiveLayers();[...t].map(o=>({id:o,index:n.findIndex(r=>r.id===o)})).filter(o=>o.index!==-1).sort((o,r)=>o.index-r.index).map(o=>o.id).forEach(o=>{e.editor?.layerHandler.sendBackwards(o)}),e._triggerUpdate()},canMoveElementsBottom(t){return this.canMoveElementsDown(t)},moveElementsBottom(t){e.editor&&(t.forEach(n=>{e.editor?.layerHandler.sendToBack(n)}),e._triggerUpdate())},setElementZIndex(){}})).actions(e=>({async toDataURL(t){return e.editor?.rendererHandler.toDataURL(t)},async toBlob(t){return e.editor?.rendererHandler.toBlob(t)},async saveAsImage(t){if(!e.editor)return;let{fileName:n,...a}=t||{multiplier:1},o=await e.editor.rendererHandler.toBlob(a);o&&g(o,n||"yitu."+a.format)},toJSON(){return e.editor?.rendererHandler.toJSON()},toObject(){return e.editor?.rendererHandler.toObject()},loadJSON:f(function*(t){if(!e.editor)return;let n=yield e.editor.sceneHandler.importFromJSON(t);n&&(e.width=n.width,e.height=n.height)}),clear(){}})).actions(e=>({addFont(){},removeFont(){},async loadFont(t){let n=e.fonts.find(r=>r.fontFamily===t)||l.find(r=>r.fontFamily===t),o=[{fontStyle:"normal",fontWeight:"normal"},{fontStyle:"normal",fontWeight:"bold"}];return n?(n.styles&&(o=n.styles.map(r=>({fontStyle:r.fontStyle||"normal",fontWeight:r.fontWeight||"normal"}))),p(n)):m(t),Promise.all(o.map(r=>c(t,r.fontStyle,r.fontWeight)))}}));function x({key:e}){return b.create({_key:e})}var j=x;export{E as Font,b as Store,x as createStore,j as default,y as forEveryChild};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { StoreType } from './model/store.js';
|
|
3
|
+
import { FONT } from './utils/fonts.js';
|
|
4
|
+
import 'mobx-state-tree';
|
|
5
|
+
import '@ydesign/core';
|
|
6
|
+
import 'mobx';
|
|
7
|
+
|
|
8
|
+
interface ProjectOptions {
|
|
9
|
+
store: StoreType;
|
|
10
|
+
}
|
|
11
|
+
declare class Project {
|
|
12
|
+
store: StoreType;
|
|
13
|
+
constructor({ store }: ProjectOptions);
|
|
14
|
+
firstLoad(data?: any): Promise<void>;
|
|
15
|
+
getGlobalFont(fonts?: FONT[]): Promise<FONT[]>;
|
|
16
|
+
}
|
|
17
|
+
declare const ProjectContext: react.Context<Project | null>;
|
|
18
|
+
declare const useProject: () => Project;
|
|
19
|
+
declare const createProject: (options: ProjectOptions) => Project;
|
|
20
|
+
|
|
21
|
+
export { ProjectContext, createProject, createProject as default, useProject };
|
package/dist/project.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as s}from"./chunk-WJT6VPDR.js";import{a as r}from"./chunk-O2XFH626.js";import*as c from"mobx";import{createContext as n,useContext as i}from"react";var o=class{constructor({store:t}){r(this,"store");c.makeAutoObservable(this),this.store=t}async firstLoad(t){this.store.loadJSON(t)}async getGlobalFont(t){return t?.length?(s(t),t):[]}},a=n(null),j=()=>{let e=i(a);if(!e)throw new Error("useProject must be used within a ProjectProvider");return e},p=e=>new o(e),P=p;export{a as ProjectContext,p as createProject,P as default,j as useProject};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { StoreType } from '../model/store.js';
|
|
3
|
+
import 'mobx-state-tree';
|
|
4
|
+
import '@ydesign/core';
|
|
5
|
+
|
|
6
|
+
declare const BackgroundPanel: ({ store }: {
|
|
7
|
+
store: StoreType;
|
|
8
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
9
|
+
|
|
10
|
+
export { BackgroundPanel };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"../chunk-TX4BNXQC.js";import"../chunk-O2XFH626.js";export{a as BackgroundPanel};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { BackgroundSection, DEFAULT_SECTIONS, LayersSection, PhotosSection, Section, ShapesSection, default as SidePanel, SizeSection, TemplatesSection, TextSection, UploadSection } from './side-panel.js';
|
|
2
|
+
export { SectionTab } from './tab-button.js';
|
|
3
|
+
import '../model/store.js';
|
|
4
|
+
import 'mobx-state-tree';
|
|
5
|
+
import '@ydesign/core';
|
|
6
|
+
import 'react/jsx-runtime';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as r,b as e,c as f,d as m,e as p,f as t,g as x,h as a,i as b,j as c}from"../chunk-XDLFQXMN.js";import"../chunk-JWQ2DUXA.js";import"../chunk-WIM26GEM.js";import{a as o}from"../chunk-LW2W4B2N.js";import"../chunk-QJBRJELT.js";import"../chunk-6LFGFFHI.js";import"../chunk-DBQHEZPG.js";import"../chunk-TX4BNXQC.js";import"../chunk-M33EDDXB.js";import"../chunk-DJBTBRPS.js";import"../chunk-55FJG4FK.js";import"../chunk-O2XFH626.js";export{t as BackgroundSection,b as DEFAULT_SECTIONS,x as LayersSection,f as PhotosSection,o as SectionTab,m as ShapesSection,c as SidePanel,a as SizeSection,r as TemplatesSection,e as TextSection,p as UploadSection};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { StoreType } from '../model/store.js';
|
|
3
|
+
import 'mobx-state-tree';
|
|
4
|
+
import '@ydesign/core';
|
|
5
|
+
|
|
6
|
+
declare const LayersPanel: ({ store }: {
|
|
7
|
+
store: StoreType;
|
|
8
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
9
|
+
|
|
10
|
+
export { LayersPanel };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"../chunk-M33EDDXB.js";import"../chunk-O2XFH626.js";export{a as LayersPanel};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { StoreType } from '../model/store.js';
|
|
3
|
+
import 'mobx-state-tree';
|
|
4
|
+
import '@ydesign/core';
|
|
5
|
+
|
|
6
|
+
declare const PhotosPanel: ({ store }: {
|
|
7
|
+
store: StoreType;
|
|
8
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
9
|
+
|
|
10
|
+
export { PhotosPanel };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"../chunk-DJBTBRPS.js";import"../chunk-O2XFH626.js";export{a as PhotosPanel};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { StoreType } from '../model/store.js';
|
|
3
|
+
import 'mobx-state-tree';
|
|
4
|
+
import '@ydesign/core';
|
|
5
|
+
|
|
6
|
+
declare const ShapesPanel: ({ store }: {
|
|
7
|
+
store: StoreType;
|
|
8
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
9
|
+
|
|
10
|
+
export { ShapesPanel };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"../chunk-55FJG4FK.js";import"../chunk-O2XFH626.js";export{a as ShapesPanel};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { StoreType } from '../model/store.js';
|
|
2
|
+
export { SectionTab } from './tab-button.js';
|
|
3
|
+
import 'mobx-state-tree';
|
|
4
|
+
import '@ydesign/core';
|
|
5
|
+
import 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
interface SectionTabProps {
|
|
8
|
+
onClick: any;
|
|
9
|
+
active: boolean;
|
|
10
|
+
}
|
|
11
|
+
type Section = {
|
|
12
|
+
name: string;
|
|
13
|
+
Tab: React.ComponentType<SectionTabProps>;
|
|
14
|
+
Panel: React.ComponentType<{
|
|
15
|
+
store: StoreType;
|
|
16
|
+
}>;
|
|
17
|
+
visibleInList?: boolean;
|
|
18
|
+
};
|
|
19
|
+
interface SidePanelProps {
|
|
20
|
+
store: StoreType;
|
|
21
|
+
sections?: Section[];
|
|
22
|
+
defaultSection?: string;
|
|
23
|
+
}
|
|
24
|
+
declare const TemplatesSection: Section;
|
|
25
|
+
declare const TextSection: Section;
|
|
26
|
+
declare const PhotosSection: Section;
|
|
27
|
+
declare const ShapesSection: Section;
|
|
28
|
+
declare const UploadSection: Section;
|
|
29
|
+
declare const BackgroundSection: Section;
|
|
30
|
+
declare const LayersSection: Section;
|
|
31
|
+
declare const SizeSection: Section;
|
|
32
|
+
declare const DEFAULT_SECTIONS: Section[];
|
|
33
|
+
declare const SidePanel: React.FC<SidePanelProps>;
|
|
34
|
+
|
|
35
|
+
export { BackgroundSection, DEFAULT_SECTIONS, LayersSection, PhotosSection, type Section, ShapesSection, SidePanel, SizeSection, TemplatesSection, TextSection, UploadSection, SidePanel as default };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as b,b as c,c as d,d as e,e as f,f as g,g as h,h as i,i as j,j as k,k as l}from"../chunk-XDLFQXMN.js";import"../chunk-JWQ2DUXA.js";import"../chunk-WIM26GEM.js";import{a}from"../chunk-LW2W4B2N.js";import"../chunk-QJBRJELT.js";import"../chunk-6LFGFFHI.js";import"../chunk-DBQHEZPG.js";import"../chunk-TX4BNXQC.js";import"../chunk-M33EDDXB.js";import"../chunk-DJBTBRPS.js";import"../chunk-55FJG4FK.js";import"../chunk-O2XFH626.js";export{g as BackgroundSection,j as DEFAULT_SECTIONS,h as LayersSection,d as PhotosSection,a as SectionTab,e as ShapesSection,k as SidePanel,i as SizeSection,b as TemplatesSection,c as TextSection,f as UploadSection,l as default};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { StoreType } from '../model/store.js';
|
|
3
|
+
import 'mobx-state-tree';
|
|
4
|
+
import '@ydesign/core';
|
|
5
|
+
|
|
6
|
+
declare const SizePanel: ({ store }: {
|
|
7
|
+
store: StoreType;
|
|
8
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
9
|
+
|
|
10
|
+
export { SizePanel };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"../chunk-WIM26GEM.js";import"../chunk-O2XFH626.js";export{a as SizePanel};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface SectionTabProps {
|
|
4
|
+
children: any;
|
|
5
|
+
name: string;
|
|
6
|
+
onClick: any;
|
|
7
|
+
active: boolean;
|
|
8
|
+
iconSize?: number;
|
|
9
|
+
}
|
|
10
|
+
declare const SectionTab: ({ children, name, iconSize, onClick, active }: SectionTabProps) => react_jsx_runtime.JSX.Element;
|
|
11
|
+
|
|
12
|
+
export { SectionTab };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"../chunk-LW2W4B2N.js";import"../chunk-O2XFH626.js";export{a as SectionTab};
|