@servicetitan/dte-unlayer 0.90.0 → 0.91.0
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/dist/editor.d.ts +1 -0
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +7 -0
- package/dist/editor.js.map +1 -1
- package/dist/shared/configs.d.ts +6 -0
- package/dist/shared/configs.d.ts.map +1 -0
- package/dist/shared/configs.js +7 -0
- package/dist/shared/configs.js.map +1 -0
- package/dist/store.d.ts +3 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +76 -8
- package/dist/store.js.map +1 -1
- package/dist/unlayer-interface.d.ts +5 -0
- package/dist/unlayer-interface.d.ts.map +1 -1
- package/dist/unlayer-interface.js.map +1 -1
- package/package.json +1 -1
- package/src/editor.tsx +8 -0
- package/src/shared/configs.ts +5 -0
- package/src/store.ts +85 -6
- package/src/unlayer-interface.tsx +5 -0
package/dist/editor.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export interface UnlayerEditorProps {
|
|
|
14
14
|
onImage?(file: File): Promise<{
|
|
15
15
|
url: string;
|
|
16
16
|
}>;
|
|
17
|
+
onError?(title: string, description?: string): void;
|
|
17
18
|
onMessage?(type: string, data: any): void;
|
|
18
19
|
}
|
|
19
20
|
export declare const useUnlayerRef: () => import("react").MutableRefObject<UnlayerRef | null>;
|
package/dist/editor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../src/editor.tsx"],"names":[],"mappings":"AAAA,OAAO,EACH,aAAa,EAOhB,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAgB,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,MAAM,WAAW,kBAAkB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,IAAI,EAAE,wBAAwB,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IAEtB,OAAO,CAAC,IAAI,IAAI,CAAC;IAEjB,QAAQ,CAAC,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAE/C,cAAc,CAAC,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAE/C,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE/C,SAAS,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;CAC7C;AAED,eAAO,MAAM,aAAa,2DAAwC,CAAC;AAEnE,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../src/editor.tsx"],"names":[],"mappings":"AAAA,OAAO,EACH,aAAa,EAOhB,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAgB,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,MAAM,WAAW,kBAAkB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,IAAI,EAAE,wBAAwB,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IAEtB,OAAO,CAAC,IAAI,IAAI,CAAC;IAEjB,QAAQ,CAAC,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAE/C,cAAc,CAAC,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAE/C,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE/C,OAAO,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpD,SAAS,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;CAC7C;AAED,eAAO,MAAM,aAAa,2DAAwC,CAAC;AAEnE,eAAO,MAAM,aAAa,2GA6ExB,CAAC"}
|
package/dist/editor.js
CHANGED
|
@@ -63,6 +63,13 @@ export const UnlayerEditor = /*#__PURE__*/ forwardRef((props, ref)=>{
|
|
|
63
63
|
props.onImage,
|
|
64
64
|
store
|
|
65
65
|
]);
|
|
66
|
+
useEffect(()=>{
|
|
67
|
+
store.setOnError(props.onError);
|
|
68
|
+
return ()=>store.setOnError();
|
|
69
|
+
}, [
|
|
70
|
+
props.onError,
|
|
71
|
+
store
|
|
72
|
+
]);
|
|
66
73
|
useEffect(()=>{
|
|
67
74
|
store.setOnMessage(props.onMessage);
|
|
68
75
|
return ()=>store.setOnMessage();
|
package/dist/editor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/editor.tsx"],"sourcesContent":["import {\n CSSProperties,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { UnlayerEditorTwin } from './shared/const';\nimport { UnlayerStore, UnlayerDesignChangeInfo } from './store';\nimport { UnlayerRef, CreateUnlayerEditorProps } from './unlayer-interface';\n\nexport interface UnlayerEditorProps {\n id?: string;\n design?: any;\n opts: CreateUnlayerEditorProps;\n minHeight?: number;\n style?: CSSProperties;\n\n onReady?(): void;\n\n onChange?(info: UnlayerDesignChangeInfo): void;\n\n onSnapshotSave?(tool: UnlayerEditorTwin): void;\n\n onImage?(file: File): Promise<{ url: string }>;\n\n onMessage?(type: string, data: any): void;\n}\n\nexport const useUnlayerRef = () => useRef<UnlayerRef | null>(null);\n\nexport const UnlayerEditor = forwardRef<UnlayerRef, UnlayerEditorProps>((props, ref) => {\n const [isReady, setIsReady] = useState(false);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const store = useMemo(\n () => new UnlayerStore(props.opts),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n useEffect(() => {\n if (containerRef.current) {\n store\n .init(containerRef.current)\n .then(() => setIsReady(true))\n .catch(() => setIsReady(false));\n }\n\n return () => store.destroy();\n }, [store]);\n useImperativeHandle(ref, () => store.unlayerRef, [store]);\n\n useEffect(() => {\n if (isReady) {\n store.setDesign(props.design);\n }\n }, [isReady, props.design, store]);\n\n useEffect(() => {\n store.setOnChange(props.onChange);\n\n return () => store.setOnChange();\n }, [props.onChange, store]);\n\n useEffect(() => {\n store.setOnSnapshotSave(props.onSnapshotSave);\n\n return () => store.setOnSnapshotSave();\n }, [props.onSnapshotSave, store]);\n\n useEffect(() => {\n if (props.opts.newSnapshot) {\n store.addTwin(props.opts.newSnapshot);\n }\n }, [props.opts.newSnapshot, store]);\n\n useEffect(() => {\n store.setOnReady(props.onReady);\n\n return () => store.setOnReady();\n }, [props.onReady, store]);\n\n useEffect(() => {\n store.setOnImage(props.onImage);\n\n return () => store.setOnImage();\n }, [props.onImage, store]);\n\n useEffect(() => {\n store.setOnMessage(props.onMessage);\n\n return () => store.setOnMessage();\n }, [props.onMessage, store]);\n\n const { minHeight = 800, style = {} } = props;\n\n return (\n <div style={{ minHeight, display: 'flex' }}>\n {!isReady && <p className=\"c-red-500\">error loading editor</p>}\n <div id={props.id ?? 'editor'} style={style} ref={containerRef} />\n </div>\n );\n});\n"],"names":["forwardRef","useEffect","useImperativeHandle","useMemo","useRef","useState","UnlayerStore","useUnlayerRef","UnlayerEditor","props","ref","isReady","setIsReady","containerRef","store","opts","current","init","then","catch","destroy","unlayerRef","setDesign","design","setOnChange","onChange","setOnSnapshotSave","onSnapshotSave","newSnapshot","addTwin","setOnReady","onReady","setOnImage","onImage","setOnMessage","onMessage","minHeight","style","div","display","p","className","id"],"mappings":";AAAA,SAEIA,UAAU,EACVC,SAAS,EACTC,mBAAmB,EACnBC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACL,QAAQ;AAEf,SAASC,YAAY,QAAiC,UAAU;
|
|
1
|
+
{"version":3,"sources":["../src/editor.tsx"],"sourcesContent":["import {\n CSSProperties,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { UnlayerEditorTwin } from './shared/const';\nimport { UnlayerStore, UnlayerDesignChangeInfo } from './store';\nimport { UnlayerRef, CreateUnlayerEditorProps } from './unlayer-interface';\n\nexport interface UnlayerEditorProps {\n id?: string;\n design?: any;\n opts: CreateUnlayerEditorProps;\n minHeight?: number;\n style?: CSSProperties;\n\n onReady?(): void;\n\n onChange?(info: UnlayerDesignChangeInfo): void;\n\n onSnapshotSave?(tool: UnlayerEditorTwin): void;\n\n onImage?(file: File): Promise<{ url: string }>;\n\n onError?(title: string, description?: string): void;\n\n onMessage?(type: string, data: any): void;\n}\n\nexport const useUnlayerRef = () => useRef<UnlayerRef | null>(null);\n\nexport const UnlayerEditor = forwardRef<UnlayerRef, UnlayerEditorProps>((props, ref) => {\n const [isReady, setIsReady] = useState(false);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const store = useMemo(\n () => new UnlayerStore(props.opts),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n useEffect(() => {\n if (containerRef.current) {\n store\n .init(containerRef.current)\n .then(() => setIsReady(true))\n .catch(() => setIsReady(false));\n }\n\n return () => store.destroy();\n }, [store]);\n useImperativeHandle(ref, () => store.unlayerRef, [store]);\n\n useEffect(() => {\n if (isReady) {\n store.setDesign(props.design);\n }\n }, [isReady, props.design, store]);\n\n useEffect(() => {\n store.setOnChange(props.onChange);\n\n return () => store.setOnChange();\n }, [props.onChange, store]);\n\n useEffect(() => {\n store.setOnSnapshotSave(props.onSnapshotSave);\n\n return () => store.setOnSnapshotSave();\n }, [props.onSnapshotSave, store]);\n\n useEffect(() => {\n if (props.opts.newSnapshot) {\n store.addTwin(props.opts.newSnapshot);\n }\n }, [props.opts.newSnapshot, store]);\n\n useEffect(() => {\n store.setOnReady(props.onReady);\n\n return () => store.setOnReady();\n }, [props.onReady, store]);\n\n useEffect(() => {\n store.setOnImage(props.onImage);\n\n return () => store.setOnImage();\n }, [props.onImage, store]);\n\n useEffect(() => {\n store.setOnError(props.onError);\n\n return () => store.setOnError();\n }, [props.onError, store]);\n\n useEffect(() => {\n store.setOnMessage(props.onMessage);\n\n return () => store.setOnMessage();\n }, [props.onMessage, store]);\n\n const { minHeight = 800, style = {} } = props;\n\n return (\n <div style={{ minHeight, display: 'flex' }}>\n {!isReady && <p className=\"c-red-500\">error loading editor</p>}\n <div id={props.id ?? 'editor'} style={style} ref={containerRef} />\n </div>\n );\n});\n"],"names":["forwardRef","useEffect","useImperativeHandle","useMemo","useRef","useState","UnlayerStore","useUnlayerRef","UnlayerEditor","props","ref","isReady","setIsReady","containerRef","store","opts","current","init","then","catch","destroy","unlayerRef","setDesign","design","setOnChange","onChange","setOnSnapshotSave","onSnapshotSave","newSnapshot","addTwin","setOnReady","onReady","setOnImage","onImage","setOnError","onError","setOnMessage","onMessage","minHeight","style","div","display","p","className","id"],"mappings":";AAAA,SAEIA,UAAU,EACVC,SAAS,EACTC,mBAAmB,EACnBC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACL,QAAQ;AAEf,SAASC,YAAY,QAAiC,UAAU;AAuBhE,OAAO,MAAMC,gBAAgB,IAAMH,OAA0B,MAAM;AAEnE,OAAO,MAAMI,8BAAgBR,WAA2C,CAACS,OAAOC;IAC5E,MAAM,CAACC,SAASC,WAAW,GAAGP,SAAS;IACvC,MAAMQ,eAAeT,OAA8B;IACnD,MAAMU,QAAQX,QACV,IAAM,IAAIG,aAAaG,MAAMM,IAAI,GACjC,uDAAuD;IACvD,EAAE;IAGNd,UAAU;QACN,IAAIY,aAAaG,OAAO,EAAE;YACtBF,MACKG,IAAI,CAACJ,aAAaG,OAAO,EACzBE,IAAI,CAAC,IAAMN,WAAW,OACtBO,KAAK,CAAC,IAAMP,WAAW;QAChC;QAEA,OAAO,IAAME,MAAMM,OAAO;IAC9B,GAAG;QAACN;KAAM;IACVZ,oBAAoBQ,KAAK,IAAMI,MAAMO,UAAU,EAAE;QAACP;KAAM;IAExDb,UAAU;QACN,IAAIU,SAAS;YACTG,MAAMQ,SAAS,CAACb,MAAMc,MAAM;QAChC;IACJ,GAAG;QAACZ;QAASF,MAAMc,MAAM;QAAET;KAAM;IAEjCb,UAAU;QACNa,MAAMU,WAAW,CAACf,MAAMgB,QAAQ;QAEhC,OAAO,IAAMX,MAAMU,WAAW;IAClC,GAAG;QAACf,MAAMgB,QAAQ;QAAEX;KAAM;IAE1Bb,UAAU;QACNa,MAAMY,iBAAiB,CAACjB,MAAMkB,cAAc;QAE5C,OAAO,IAAMb,MAAMY,iBAAiB;IACxC,GAAG;QAACjB,MAAMkB,cAAc;QAAEb;KAAM;IAEhCb,UAAU;QACN,IAAIQ,MAAMM,IAAI,CAACa,WAAW,EAAE;YACxBd,MAAMe,OAAO,CAACpB,MAAMM,IAAI,CAACa,WAAW;QACxC;IACJ,GAAG;QAACnB,MAAMM,IAAI,CAACa,WAAW;QAAEd;KAAM;IAElCb,UAAU;QACNa,MAAMgB,UAAU,CAACrB,MAAMsB,OAAO;QAE9B,OAAO,IAAMjB,MAAMgB,UAAU;IACjC,GAAG;QAACrB,MAAMsB,OAAO;QAAEjB;KAAM;IAEzBb,UAAU;QACNa,MAAMkB,UAAU,CAACvB,MAAMwB,OAAO;QAE9B,OAAO,IAAMnB,MAAMkB,UAAU;IACjC,GAAG;QAACvB,MAAMwB,OAAO;QAAEnB;KAAM;IAEzBb,UAAU;QACNa,MAAMoB,UAAU,CAACzB,MAAM0B,OAAO;QAE9B,OAAO,IAAMrB,MAAMoB,UAAU;IACjC,GAAG;QAACzB,MAAM0B,OAAO;QAAErB;KAAM;IAEzBb,UAAU;QACNa,MAAMsB,YAAY,CAAC3B,MAAM4B,SAAS;QAElC,OAAO,IAAMvB,MAAMsB,YAAY;IACnC,GAAG;QAAC3B,MAAM4B,SAAS;QAAEvB;KAAM;IAE3B,MAAM,EAAEwB,YAAY,GAAG,EAAEC,QAAQ,CAAC,CAAC,EAAE,GAAG9B;QAKvBA;IAHjB,qBACI,MAAC+B;QAAID,OAAO;YAAED;YAAWG,SAAS;QAAO;;YACpC,CAAC9B,yBAAW,KAAC+B;gBAAEC,WAAU;0BAAY;;0BACtC,KAACH;gBAAII,IAAInC,CAAAA,YAAAA,MAAMmC,EAAE,cAARnC,uBAAAA,YAAY;gBAAU8B,OAAOA;gBAAO7B,KAAKG;;;;AAG9D,GAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configs.d.ts","sourceRoot":"","sources":["../../src/shared/configs.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB;;;;CAIlC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/shared/configs.ts"],"sourcesContent":["export const defaultImageValidation = {\n maxWidth: 5000,\n maxHeight: 5000,\n maxFileSize: 10 * 1024 * 1024, // 10mb\n};\n"],"names":["defaultImageValidation","maxWidth","maxHeight","maxFileSize"],"mappings":"AAAA,OAAO,MAAMA,yBAAyB;IAClCC,UAAU;IACVC,WAAW;IACXC,aAAa,KAAK,OAAO;AAC7B,EAAE"}
|
package/dist/store.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export declare class UnlayerStore {
|
|
|
15
15
|
private onSnapshotSaveCB?;
|
|
16
16
|
private onReadyCB?;
|
|
17
17
|
private onImageCB?;
|
|
18
|
+
private onErrorCB?;
|
|
18
19
|
constructor(props: CreateUnlayerEditorProps);
|
|
19
20
|
init: (container: HTMLDivElement) => Promise<void>;
|
|
20
21
|
destroy: () => void;
|
|
@@ -24,11 +25,13 @@ export declare class UnlayerStore {
|
|
|
24
25
|
setOnSnapshotSave: (onSnapshotSave?: UnlayerStore["onSnapshotSaveCB"]) => void;
|
|
25
26
|
setOnReady: (onReady?: UnlayerStore["onReadyCB"]) => void;
|
|
26
27
|
setOnImage: (onImage?: UnlayerStore["onImageCB"]) => void;
|
|
28
|
+
setOnError: (onError?: UnlayerStore["onErrorCB"]) => void;
|
|
27
29
|
setOnMessage: (onMessage?: UnlayerStore["onMessageCB"]) => void;
|
|
28
30
|
private onDesignLoaded;
|
|
29
31
|
private onDesignUpdated;
|
|
30
32
|
private onPostMessage;
|
|
31
33
|
private sendMessage;
|
|
32
34
|
private uploadImage;
|
|
35
|
+
private validateImage;
|
|
33
36
|
}
|
|
34
37
|
//# sourceMappingURL=store.d.ts.map
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAA4C,MAAM,gBAAgB,CAAC;AAS7F,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAIhG,MAAM,WAAW,uBAAuB;IACpC,kBAAkB,EAAE,OAAO,CAAC;CAC/B;AAmBD,qBAAa,YAAY;IAeT,QAAQ,CAAC,KAAK,EAAE,wBAAwB;IAdpD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAEhC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAC,CAAoB;IACnC,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,WAAW,CAAC,CAAoC;IACxD,OAAO,CAAC,UAAU,CAAC,CAA0C;IAC7D,OAAO,CAAC,gBAAgB,CAAC,CAAwC;IACjE,OAAO,CAAC,SAAS,CAAC,CAAa;IAC/B,OAAO,CAAC,SAAS,CAAC,CAA2C;IAC7D,OAAO,CAAC,SAAS,CAAC,CAAgD;gBAE7C,KAAK,EAAE,wBAAwB;IAkBpD,IAAI,GAAU,WAAW,cAAc,mBAiBrC;IAEF,OAAO,aAUL;IAEF,OAAO,GAAI,MAAM,iBAAiB,UAGhC;IAEF,SAAS,GAAI,SAAS,mBAAmB,UAUvC;IAEF,WAAW,GAAI,WAAW,YAAY,CAAC,YAAY,CAAC,UAElD;IAEF,iBAAiB,GAAI,iBAAiB,YAAY,CAAC,kBAAkB,CAAC,UAEpE;IAEF,UAAU,GAAI,UAAU,YAAY,CAAC,WAAW,CAAC,UAE/C;IAEF,UAAU,GAAI,UAAU,YAAY,CAAC,WAAW,CAAC,UAE/C;IAEF,UAAU,GAAI,UAAU,YAAY,CAAC,WAAW,CAAC,UAE/C;IAEF,YAAY,GAAI,YAAY,YAAY,CAAC,aAAa,CAAC,UAErD;IAEF,OAAO,CAAC,cAAc,CAQpB;IAEF,OAAO,CAAC,eAAe,CAmCrB;IAEF,OAAO,CAAC,aAAa,CA4DnB;IAEF,OAAO,CAAC,WAAW,CAUjB;IAEF,OAAO,CAAC,WAAW,CAqCjB;IAEF,OAAO,CAAC,aAAa,CA+CnB;CACL"}
|
package/dist/store.js
CHANGED
|
@@ -12,6 +12,7 @@ function _define_property(obj, key, value) {
|
|
|
12
12
|
return obj;
|
|
13
13
|
}
|
|
14
14
|
import { loadScript } from './loadScript';
|
|
15
|
+
import { defaultImageValidation } from './shared/configs';
|
|
15
16
|
import { unlayerToolsParseTwinKey } from './shared/tools';
|
|
16
17
|
import { unlayerToolsIterate } from './tools';
|
|
17
18
|
import { createUnlayerEditor, DesignUpdatedEventType } from './unlayer';
|
|
@@ -44,6 +45,7 @@ export class UnlayerStore {
|
|
|
44
45
|
_define_property(this, "onSnapshotSaveCB", void 0);
|
|
45
46
|
_define_property(this, "onReadyCB", void 0);
|
|
46
47
|
_define_property(this, "onImageCB", void 0);
|
|
48
|
+
_define_property(this, "onErrorCB", void 0);
|
|
47
49
|
_define_property(this, "init", void 0);
|
|
48
50
|
_define_property(this, "destroy", void 0);
|
|
49
51
|
_define_property(this, "addTwin", void 0);
|
|
@@ -52,12 +54,14 @@ export class UnlayerStore {
|
|
|
52
54
|
_define_property(this, "setOnSnapshotSave", void 0);
|
|
53
55
|
_define_property(this, "setOnReady", void 0);
|
|
54
56
|
_define_property(this, "setOnImage", void 0);
|
|
57
|
+
_define_property(this, "setOnError", void 0);
|
|
55
58
|
_define_property(this, "setOnMessage", void 0);
|
|
56
59
|
_define_property(this, "onDesignLoaded", void 0);
|
|
57
60
|
_define_property(this, "onDesignUpdated", void 0);
|
|
58
61
|
_define_property(this, "onPostMessage", void 0);
|
|
59
62
|
_define_property(this, "sendMessage", void 0);
|
|
60
63
|
_define_property(this, "uploadImage", void 0);
|
|
64
|
+
_define_property(this, "validateImage", void 0);
|
|
61
65
|
this.props = props;
|
|
62
66
|
this.isInit = false;
|
|
63
67
|
this.hasDesign = false;
|
|
@@ -110,6 +114,9 @@ export class UnlayerStore {
|
|
|
110
114
|
this.setOnImage = (onImage)=>{
|
|
111
115
|
this.onImageCB = onImage;
|
|
112
116
|
};
|
|
117
|
+
this.setOnError = (onError)=>{
|
|
118
|
+
this.onErrorCB = onError;
|
|
119
|
+
};
|
|
113
120
|
this.setOnMessage = (onMessage)=>{
|
|
114
121
|
this.onMessageCB = onMessage;
|
|
115
122
|
};
|
|
@@ -229,7 +236,7 @@ export class UnlayerStore {
|
|
|
229
236
|
}
|
|
230
237
|
}, '*');
|
|
231
238
|
};
|
|
232
|
-
this.uploadImage = (data, done)=>{
|
|
239
|
+
this.uploadImage = async (data, done)=>{
|
|
233
240
|
var _data_attachments;
|
|
234
241
|
if (!this.onImageCB) {
|
|
235
242
|
done({
|
|
@@ -237,18 +244,79 @@ export class UnlayerStore {
|
|
|
237
244
|
});
|
|
238
245
|
throw new Error('image upload is not implemented');
|
|
239
246
|
}
|
|
247
|
+
if (!((_data_attachments = data.attachments) === null || _data_attachments === void 0 ? void 0 : _data_attachments.length)) {
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
const file = data.attachments[0];
|
|
251
|
+
var _this_props_imageValidation;
|
|
252
|
+
const res = await this.validateImage(file, {
|
|
253
|
+
...defaultImageValidation,
|
|
254
|
+
...(_this_props_imageValidation = this.props.imageValidation) !== null && _this_props_imageValidation !== void 0 ? _this_props_imageValidation : {}
|
|
255
|
+
});
|
|
256
|
+
if (!res.isValid) {
|
|
257
|
+
var _this_onErrorCB, _this;
|
|
258
|
+
(_this_onErrorCB = (_this = this).onErrorCB) === null || _this_onErrorCB === void 0 ? void 0 : _this_onErrorCB.call(_this, res.title, res.description);
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
240
261
|
done({
|
|
241
262
|
progress: 0
|
|
242
263
|
});
|
|
243
|
-
|
|
244
|
-
this.onImageCB(
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
264
|
+
try {
|
|
265
|
+
const { url } = await this.onImageCB(file);
|
|
266
|
+
done({
|
|
267
|
+
progress: 100,
|
|
268
|
+
url
|
|
269
|
+
});
|
|
270
|
+
} catch (e) {
|
|
271
|
+
var _this_onErrorCB1, _this1;
|
|
272
|
+
(_this_onErrorCB1 = (_this1 = this).onErrorCB) === null || _this_onErrorCB1 === void 0 ? void 0 : _this_onErrorCB1.call(_this1, 'Image upload failed', 'Something went wrong while uploading the image. Please try again or select another image.');
|
|
273
|
+
done({
|
|
274
|
+
progress: 100
|
|
275
|
+
});
|
|
250
276
|
}
|
|
251
277
|
};
|
|
278
|
+
this.validateImage = async (file, imageValidation)=>{
|
|
279
|
+
const { maxFileSize, maxHeight, maxWidth } = imageValidation;
|
|
280
|
+
if (file.size > maxFileSize) {
|
|
281
|
+
const maxSizeMB = (maxFileSize / 1024 / 1024).toFixed(2);
|
|
282
|
+
const fileSizeMB = (file.size / 1024 / 1024).toFixed(2);
|
|
283
|
+
return {
|
|
284
|
+
isValid: false,
|
|
285
|
+
title: 'Image size limit reached',
|
|
286
|
+
description: `This image is ${fileSizeMB}MB, which is above the ${maxSizeMB}MB limit. Please upload a smaller file to continue.`
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
return new Promise((resolve)=>{
|
|
290
|
+
const img = new Image();
|
|
291
|
+
const objectUrl = URL.createObjectURL(file);
|
|
292
|
+
img.onload = ()=>{
|
|
293
|
+
URL.revokeObjectURL(objectUrl);
|
|
294
|
+
const { height, width } = img;
|
|
295
|
+
if (width > maxWidth || height > maxHeight) {
|
|
296
|
+
resolve({
|
|
297
|
+
isValid: false,
|
|
298
|
+
title: 'Dimension limit reached',
|
|
299
|
+
description: `These image dimensions (${width}x${height}px) exceed the ${maxWidth}x${maxHeight}px limit. Please resize the image and try again.`
|
|
300
|
+
});
|
|
301
|
+
} else {
|
|
302
|
+
resolve({
|
|
303
|
+
isValid: true,
|
|
304
|
+
title: '',
|
|
305
|
+
description: ''
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
img.onerror = ()=>{
|
|
310
|
+
URL.revokeObjectURL(objectUrl);
|
|
311
|
+
resolve({
|
|
312
|
+
isValid: false,
|
|
313
|
+
title: 'The image is broken',
|
|
314
|
+
description: 'Looks like this image isn’t valid. Please choose another image and try again.'
|
|
315
|
+
});
|
|
316
|
+
};
|
|
317
|
+
img.src = objectUrl;
|
|
318
|
+
});
|
|
319
|
+
};
|
|
252
320
|
this.props.eSignFieldTypes = [
|
|
253
321
|
'Signature',
|
|
254
322
|
'Initials',
|
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/store.ts"],"sourcesContent":["import { loadScript } from './loadScript';\nimport { UnlayerEditorTwin, UnlayerEventConfig, UnlayerEventRegister } from './shared/const';\nimport { unlayerToolsParseTwinKey } from './shared/tools';\nimport { unlayerToolsIterate } from './tools';\nimport {\n createUnlayerEditor,\n DesignUpdatedEventType,\n EventDesignUpdated,\n Unlayer,\n} from './unlayer';\nimport { CreateUnlayerEditorProps, UnlayerDesignFormat, UnlayerRef } from './unlayer-interface';\n\nconst defaultScriptUrl = 'https://editor.unlayer.com/embed.js?2';\n\nexport interface UnlayerDesignChangeInfo {\n isToolsListChanged: boolean;\n}\n\n// We are using exclusive lists here, because we can't be sure that we know all unlayer event types\nconst eventsNotChangingToolsList: DesignUpdatedEventType[] = [\n DesignUpdatedEventType.ContentMoved,\n DesignUpdatedEventType.ContentModified,\n DesignUpdatedEventType.ColumnModified,\n DesignUpdatedEventType.RowMoved,\n DesignUpdatedEventType.RowModified,\n DesignUpdatedEventType.BodyModified,\n];\n\nconst eventsNotAddingTools: DesignUpdatedEventType[] = [\n ...eventsNotChangingToolsList,\n DesignUpdatedEventType.ContentRemoved,\n DesignUpdatedEventType.ColumnRemoved,\n DesignUpdatedEventType.RowRemoved,\n];\n\nexport class UnlayerStore {\n readonly unlayerRef: UnlayerRef;\n\n private editor: Unlayer | undefined;\n private isInit = false;\n private iframe?: HTMLIFrameElement;\n private hasDesign = false;\n\n private onMessageCB?: (type: string, data: any) => void;\n private onChangeCB?: (info: UnlayerDesignChangeInfo) => void;\n private onSnapshotSaveCB?: (snapshot: UnlayerEditorTwin) => void;\n private onReadyCB?: () => void;\n private onImageCB?: (file: File) => Promise<{ url: string }>;\n\n constructor(readonly props: CreateUnlayerEditorProps) {\n this.props.eSignFieldTypes = ['Signature', 'Initials', 'Date Signed', 'Full Name'];\n\n this.unlayerRef = {\n loadDesign: design => {\n this.editor?.loadDesign(design);\n },\n saveDesign: cb => {\n this.editor?.saveDesign(cb);\n },\n exportHtml: cb => {\n this.editor?.exportHtml(data => {\n cb(data);\n });\n },\n };\n }\n\n init = async (container: HTMLDivElement) => {\n if (this.isInit) {\n return;\n }\n\n this.isInit = true;\n\n setTimeout(() => window.addEventListener('message', this.onPostMessage));\n\n await loadScript(defaultScriptUrl);\n\n this.editor = createUnlayerEditor(container, this.props);\n this.editor.addEventListener('design:loaded', this.onDesignLoaded);\n this.editor.addEventListener('design:updated', this.onDesignUpdated);\n this.editor.registerCallback('image', this.uploadImage);\n\n this.iframe = container.querySelector(`iframe`) ?? undefined;\n };\n\n destroy = () => {\n window.removeEventListener('message', this.onPostMessage);\n\n if (this.editor) {\n this.editor.removeEventListener('design:loaded', this.onDesignLoaded);\n this.editor.removeEventListener('design:updated', this.onDesignUpdated);\n this.editor.unregisterCallback('image', this.uploadImage);\n\n this.editor = undefined;\n }\n };\n\n addTwin = (twin: UnlayerEditorTwin) => {\n this.props.toolTwins?.push(twin);\n this.sendMessage('--add-twin', JSON.parse(JSON.stringify(twin)));\n };\n\n setDesign = (design?: UnlayerDesignFormat) => {\n if (!this.editor) {\n return;\n }\n\n this.hasDesign = !!design;\n\n if (design) {\n this.editor.loadDesign(design);\n }\n };\n\n setOnChange = (onChange?: UnlayerStore['onChangeCB']) => {\n this.onChangeCB = onChange;\n };\n\n setOnSnapshotSave = (onSnapshotSave?: UnlayerStore['onSnapshotSaveCB']) => {\n this.onSnapshotSaveCB = onSnapshotSave;\n };\n\n setOnReady = (onReady?: UnlayerStore['onReadyCB']) => {\n this.onReadyCB = onReady;\n };\n\n setOnImage = (onImage?: UnlayerStore['onImageCB']) => {\n this.onImageCB = onImage;\n };\n\n setOnMessage = (onMessage?: UnlayerStore['onMessageCB']) => {\n this.onMessageCB = onMessage;\n };\n\n private onDesignLoaded = () => {\n if (!this.hasDesign) {\n this.hasDesign = true;\n this.editor?.setBodyValues({\n backgroundColor: 'rgba(0,0,0,0)',\n contentWidth: '100%',\n });\n }\n };\n\n private onDesignUpdated = (event: EventDesignUpdated) => {\n const isToolAdded = !eventsNotAddingTools.includes(event.type);\n const isToolsListChanged = !eventsNotChangingToolsList.includes(event.type);\n\n if (isToolAdded) {\n this.editor?.exportHtml(data => {\n let hasChanges = false;\n\n unlayerToolsIterate(data.design, tool => {\n const realTool = tool.slug\n ? unlayerToolsParseTwinKey(tool.slug ?? '')\n : undefined;\n\n if (realTool) {\n hasChanges = true;\n\n if (tool.slug) {\n delete data.design.counters[`u_content_custom_${tool.slug}`];\n delete tool.values._meta.htmlID;\n }\n\n tool.type = realTool.type;\n tool.slug = realTool.slug;\n }\n });\n\n if (hasChanges) {\n this.setDesign(data.design);\n }\n\n this.onChangeCB?.({ isToolsListChanged });\n });\n } else {\n this.onChangeCB?.({ isToolsListChanged });\n }\n };\n\n private onPostMessage = (e: MessageEvent) => {\n if (!e.data?.['-dte-message-from']) {\n return;\n }\n\n const type = e.data?.['-dte-message-from']?.type;\n const data = e.data?.['-dte-message-from']?.data;\n\n if (!type) {\n return;\n }\n\n if (type === '--ready' || type === '--registered') {\n this.onReadyCB?.();\n } else if (type === '--core-loaded') {\n const data: UnlayerEventConfig = {\n dummyData: this.props.dummyData,\n schema: this.props.schema,\n generics: this.props.generics,\n genericConfigMode: this.props.genericConfigMode,\n isSnapshotMode: this.props.isSnapshotMode,\n };\n\n this.sendMessage('--config', JSON.parse(JSON.stringify(data)));\n } else if (type === '--data-loaded') {\n const data: UnlayerEventRegister = {\n customTools: this.props.tools.map(tool => ({ key: tool.key })),\n toolTwins: this.props.toolTwins,\n eSignRecipients: this.props.eSignRecipients,\n eSignFieldTypes: this.props.eSignFieldTypes,\n units: this.props.units?.map(unit => ({\n ...unit,\n values: {\n ...unit.values,\n adminConfig: undefined,\n },\n })),\n };\n\n this.sendMessage('--register', JSON.parse(JSON.stringify(data)));\n } else if (type === '--save-snapshot') {\n this.editor?.exportHtml(template => {\n unlayerToolsIterate(template.design, tool => {\n if (tool.values?.twin?.id === data.id) {\n if (!tool.slug) {\n return;\n }\n\n this.onSnapshotSaveCB?.({\n title: '',\n tool: tool.slug,\n values: tool.values,\n });\n return false;\n }\n });\n });\n }\n\n this.onMessageCB?.(type, data);\n };\n\n private sendMessage = (type: string, data?: any) => {\n this.iframe?.contentWindow?.postMessage(\n {\n '-dte-message-to': {\n type,\n data,\n },\n },\n '*'\n );\n };\n\n private uploadImage = (data: any, done: (result: any) => void) => {\n if (!this.onImageCB) {\n done({ progress: 100 });\n throw new Error('image upload is not implemented');\n }\n\n done({ progress: 0 });\n\n if (data.attachments?.length) {\n this.onImageCB(data.attachments[0])\n .catch(() => ({ url: '' }))\n .then(({ url }) => done({ progress: 100, url }));\n }\n };\n}\n"],"names":["loadScript","unlayerToolsParseTwinKey","unlayerToolsIterate","createUnlayerEditor","DesignUpdatedEventType","defaultScriptUrl","eventsNotChangingToolsList","ContentMoved","ContentModified","ColumnModified","RowMoved","RowModified","BodyModified","eventsNotAddingTools","ContentRemoved","ColumnRemoved","RowRemoved","UnlayerStore","props","unlayerRef","editor","isInit","iframe","hasDesign","onMessageCB","onChangeCB","onSnapshotSaveCB","onReadyCB","onImageCB","init","destroy","addTwin","setDesign","setOnChange","setOnSnapshotSave","setOnReady","setOnImage","setOnMessage","onDesignLoaded","onDesignUpdated","onPostMessage","sendMessage","uploadImage","container","setTimeout","window","addEventListener","registerCallback","querySelector","undefined","removeEventListener","unregisterCallback","twin","toolTwins","push","JSON","parse","stringify","design","loadDesign","onChange","onSnapshotSave","onReady","onImage","onMessage","setBodyValues","backgroundColor","contentWidth","event","isToolAdded","includes","type","isToolsListChanged","exportHtml","data","hasChanges","tool","realTool","slug","counters","values","_meta","htmlID","e","dummyData","schema","generics","genericConfigMode","isSnapshotMode","customTools","tools","map","key","eSignRecipients","eSignFieldTypes","units","unit","adminConfig","template","id","title","contentWindow","postMessage","done","progress","Error","attachments","length","catch","url","then","saveDesign","cb"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/store.ts"],"sourcesContent":["import { loadScript } from './loadScript';\nimport { defaultImageValidation } from './shared/configs';\nimport { UnlayerEditorTwin, UnlayerEventConfig, UnlayerEventRegister } from './shared/const';\nimport { unlayerToolsParseTwinKey } from './shared/tools';\nimport { unlayerToolsIterate } from './tools';\nimport {\n createUnlayerEditor,\n DesignUpdatedEventType,\n EventDesignUpdated,\n Unlayer,\n} from './unlayer';\nimport { CreateUnlayerEditorProps, UnlayerDesignFormat, UnlayerRef } from './unlayer-interface';\n\nconst defaultScriptUrl = 'https://editor.unlayer.com/embed.js?2';\n\nexport interface UnlayerDesignChangeInfo {\n isToolsListChanged: boolean;\n}\n\n// We are using exclusive lists here, because we can't be sure that we know all unlayer event types\nconst eventsNotChangingToolsList: DesignUpdatedEventType[] = [\n DesignUpdatedEventType.ContentMoved,\n DesignUpdatedEventType.ContentModified,\n DesignUpdatedEventType.ColumnModified,\n DesignUpdatedEventType.RowMoved,\n DesignUpdatedEventType.RowModified,\n DesignUpdatedEventType.BodyModified,\n];\n\nconst eventsNotAddingTools: DesignUpdatedEventType[] = [\n ...eventsNotChangingToolsList,\n DesignUpdatedEventType.ContentRemoved,\n DesignUpdatedEventType.ColumnRemoved,\n DesignUpdatedEventType.RowRemoved,\n];\n\nexport class UnlayerStore {\n readonly unlayerRef: UnlayerRef;\n\n private editor: Unlayer | undefined;\n private isInit = false;\n private iframe?: HTMLIFrameElement;\n private hasDesign = false;\n\n private onMessageCB?: (type: string, data: any) => void;\n private onChangeCB?: (info: UnlayerDesignChangeInfo) => void;\n private onSnapshotSaveCB?: (snapshot: UnlayerEditorTwin) => void;\n private onReadyCB?: () => void;\n private onImageCB?: (file: File) => Promise<{ url: string }>;\n private onErrorCB?: (title: string, description?: string) => void;\n\n constructor(readonly props: CreateUnlayerEditorProps) {\n this.props.eSignFieldTypes = ['Signature', 'Initials', 'Date Signed', 'Full Name'];\n\n this.unlayerRef = {\n loadDesign: design => {\n this.editor?.loadDesign(design);\n },\n saveDesign: cb => {\n this.editor?.saveDesign(cb);\n },\n exportHtml: cb => {\n this.editor?.exportHtml(data => {\n cb(data);\n });\n },\n };\n }\n\n init = async (container: HTMLDivElement) => {\n if (this.isInit) {\n return;\n }\n\n this.isInit = true;\n\n setTimeout(() => window.addEventListener('message', this.onPostMessage));\n\n await loadScript(defaultScriptUrl);\n\n this.editor = createUnlayerEditor(container, this.props);\n this.editor.addEventListener('design:loaded', this.onDesignLoaded);\n this.editor.addEventListener('design:updated', this.onDesignUpdated);\n this.editor.registerCallback('image', this.uploadImage);\n\n this.iframe = container.querySelector(`iframe`) ?? undefined;\n };\n\n destroy = () => {\n window.removeEventListener('message', this.onPostMessage);\n\n if (this.editor) {\n this.editor.removeEventListener('design:loaded', this.onDesignLoaded);\n this.editor.removeEventListener('design:updated', this.onDesignUpdated);\n this.editor.unregisterCallback('image', this.uploadImage);\n\n this.editor = undefined;\n }\n };\n\n addTwin = (twin: UnlayerEditorTwin) => {\n this.props.toolTwins?.push(twin);\n this.sendMessage('--add-twin', JSON.parse(JSON.stringify(twin)));\n };\n\n setDesign = (design?: UnlayerDesignFormat) => {\n if (!this.editor) {\n return;\n }\n\n this.hasDesign = !!design;\n\n if (design) {\n this.editor.loadDesign(design);\n }\n };\n\n setOnChange = (onChange?: UnlayerStore['onChangeCB']) => {\n this.onChangeCB = onChange;\n };\n\n setOnSnapshotSave = (onSnapshotSave?: UnlayerStore['onSnapshotSaveCB']) => {\n this.onSnapshotSaveCB = onSnapshotSave;\n };\n\n setOnReady = (onReady?: UnlayerStore['onReadyCB']) => {\n this.onReadyCB = onReady;\n };\n\n setOnImage = (onImage?: UnlayerStore['onImageCB']) => {\n this.onImageCB = onImage;\n };\n\n setOnError = (onError?: UnlayerStore['onErrorCB']) => {\n this.onErrorCB = onError;\n };\n\n setOnMessage = (onMessage?: UnlayerStore['onMessageCB']) => {\n this.onMessageCB = onMessage;\n };\n\n private onDesignLoaded = () => {\n if (!this.hasDesign) {\n this.hasDesign = true;\n this.editor?.setBodyValues({\n backgroundColor: 'rgba(0,0,0,0)',\n contentWidth: '100%',\n });\n }\n };\n\n private onDesignUpdated = (event: EventDesignUpdated) => {\n const isToolAdded = !eventsNotAddingTools.includes(event.type);\n const isToolsListChanged = !eventsNotChangingToolsList.includes(event.type);\n\n if (isToolAdded) {\n this.editor?.exportHtml(data => {\n let hasChanges = false;\n\n unlayerToolsIterate(data.design, tool => {\n const realTool = tool.slug\n ? unlayerToolsParseTwinKey(tool.slug ?? '')\n : undefined;\n\n if (realTool) {\n hasChanges = true;\n\n if (tool.slug) {\n delete data.design.counters[`u_content_custom_${tool.slug}`];\n delete tool.values._meta.htmlID;\n }\n\n tool.type = realTool.type;\n tool.slug = realTool.slug;\n }\n });\n\n if (hasChanges) {\n this.setDesign(data.design);\n }\n\n this.onChangeCB?.({ isToolsListChanged });\n });\n } else {\n this.onChangeCB?.({ isToolsListChanged });\n }\n };\n\n private onPostMessage = (e: MessageEvent) => {\n if (!e.data?.['-dte-message-from']) {\n return;\n }\n\n const type = e.data?.['-dte-message-from']?.type;\n const data = e.data?.['-dte-message-from']?.data;\n\n if (!type) {\n return;\n }\n\n if (type === '--ready' || type === '--registered') {\n this.onReadyCB?.();\n } else if (type === '--core-loaded') {\n const data: UnlayerEventConfig = {\n dummyData: this.props.dummyData,\n schema: this.props.schema,\n generics: this.props.generics,\n genericConfigMode: this.props.genericConfigMode,\n isSnapshotMode: this.props.isSnapshotMode,\n };\n\n this.sendMessage('--config', JSON.parse(JSON.stringify(data)));\n } else if (type === '--data-loaded') {\n const data: UnlayerEventRegister = {\n customTools: this.props.tools.map(tool => ({ key: tool.key })),\n toolTwins: this.props.toolTwins,\n eSignRecipients: this.props.eSignRecipients,\n eSignFieldTypes: this.props.eSignFieldTypes,\n units: this.props.units?.map(unit => ({\n ...unit,\n values: {\n ...unit.values,\n adminConfig: undefined,\n },\n })),\n };\n\n this.sendMessage('--register', JSON.parse(JSON.stringify(data)));\n } else if (type === '--save-snapshot') {\n this.editor?.exportHtml(template => {\n unlayerToolsIterate(template.design, tool => {\n if (tool.values?.twin?.id === data.id) {\n if (!tool.slug) {\n return;\n }\n\n this.onSnapshotSaveCB?.({\n title: '',\n tool: tool.slug,\n values: tool.values,\n });\n return false;\n }\n });\n });\n }\n\n this.onMessageCB?.(type, data);\n };\n\n private sendMessage = (type: string, data?: any) => {\n this.iframe?.contentWindow?.postMessage(\n {\n '-dte-message-to': {\n type,\n data,\n },\n },\n '*',\n );\n };\n\n private uploadImage = async (\n data: { attachments: File[] },\n done: (result: { progress: number; url?: string }) => void,\n ) => {\n if (!this.onImageCB) {\n done({ progress: 100 });\n throw new Error('image upload is not implemented');\n }\n\n if (!data.attachments?.length) {\n return;\n }\n\n const file = data.attachments[0];\n\n const res = await this.validateImage(file, {\n ...defaultImageValidation,\n ...(this.props.imageValidation ?? {}),\n });\n\n if (!res.isValid) {\n this.onErrorCB?.(res.title, res.description);\n return;\n }\n\n done({ progress: 0 });\n\n try {\n const { url } = await this.onImageCB(file);\n done({ progress: 100, url });\n } catch {\n this.onErrorCB?.(\n 'Image upload failed',\n 'Something went wrong while uploading the image. Please try again or select another image.',\n );\n done({ progress: 100 });\n }\n };\n\n private validateImage = async (\n file: File,\n imageValidation: { maxFileSize: number; maxWidth: number; maxHeight: number },\n ): Promise<{ isValid: boolean; title: string; description: string }> => {\n const { maxFileSize, maxHeight, maxWidth } = imageValidation;\n\n if (file.size > maxFileSize) {\n const maxSizeMB = (maxFileSize / 1024 / 1024).toFixed(2);\n const fileSizeMB = (file.size / 1024 / 1024).toFixed(2);\n return {\n isValid: false,\n title: 'Image size limit reached',\n description: `This image is ${fileSizeMB}MB, which is above the ${maxSizeMB}MB limit. Please upload a smaller file to continue.`,\n };\n }\n\n return new Promise(resolve => {\n const img = new Image();\n const objectUrl = URL.createObjectURL(file);\n\n img.onload = () => {\n URL.revokeObjectURL(objectUrl);\n const { height, width } = img;\n\n if (width > maxWidth || height > maxHeight) {\n resolve({\n isValid: false,\n title: 'Dimension limit reached',\n description: `These image dimensions (${width}x${height}px) exceed the ${maxWidth}x${maxHeight}px limit. Please resize the image and try again.`,\n });\n } else {\n resolve({ isValid: true, title: '', description: '' });\n }\n };\n\n img.onerror = () => {\n URL.revokeObjectURL(objectUrl);\n resolve({\n isValid: false,\n title: 'The image is broken',\n description:\n 'Looks like this image isn’t valid. Please choose another image and try again.',\n });\n };\n\n img.src = objectUrl;\n });\n };\n}\n"],"names":["loadScript","defaultImageValidation","unlayerToolsParseTwinKey","unlayerToolsIterate","createUnlayerEditor","DesignUpdatedEventType","defaultScriptUrl","eventsNotChangingToolsList","ContentMoved","ContentModified","ColumnModified","RowMoved","RowModified","BodyModified","eventsNotAddingTools","ContentRemoved","ColumnRemoved","RowRemoved","UnlayerStore","props","unlayerRef","editor","isInit","iframe","hasDesign","onMessageCB","onChangeCB","onSnapshotSaveCB","onReadyCB","onImageCB","onErrorCB","init","destroy","addTwin","setDesign","setOnChange","setOnSnapshotSave","setOnReady","setOnImage","setOnError","setOnMessage","onDesignLoaded","onDesignUpdated","onPostMessage","sendMessage","uploadImage","validateImage","container","setTimeout","window","addEventListener","registerCallback","querySelector","undefined","removeEventListener","unregisterCallback","twin","toolTwins","push","JSON","parse","stringify","design","loadDesign","onChange","onSnapshotSave","onReady","onImage","onError","onMessage","setBodyValues","backgroundColor","contentWidth","event","isToolAdded","includes","type","isToolsListChanged","exportHtml","data","hasChanges","tool","realTool","slug","counters","values","_meta","htmlID","e","dummyData","schema","generics","genericConfigMode","isSnapshotMode","customTools","tools","map","key","eSignRecipients","eSignFieldTypes","units","unit","adminConfig","template","id","title","contentWindow","postMessage","done","progress","Error","attachments","length","file","res","imageValidation","isValid","description","url","maxFileSize","maxHeight","maxWidth","size","maxSizeMB","toFixed","fileSizeMB","Promise","resolve","img","Image","objectUrl","URL","createObjectURL","onload","revokeObjectURL","height","width","onerror","src","saveDesign","cb"],"mappings":"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"}
|
|
@@ -68,5 +68,10 @@ export interface CreateUnlayerEditorProps {
|
|
|
68
68
|
hideBodyMenuItem?: boolean;
|
|
69
69
|
enableHTMLEditing?: boolean;
|
|
70
70
|
enableHTMLEditingReadonly?: boolean;
|
|
71
|
+
imageValidation?: {
|
|
72
|
+
maxWidth?: number;
|
|
73
|
+
maxHeight?: number;
|
|
74
|
+
maxFileSize?: number;
|
|
75
|
+
};
|
|
71
76
|
}
|
|
72
77
|
//# sourceMappingURL=unlayer-interface.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unlayer-interface.d.ts","sourceRoot":"","sources":["../src/unlayer-interface.tsx"],"names":[],"mappings":"AAAA,OAAO,EACH,+BAA+B,EAC/B,iBAAiB,EACjB,iBAAiB,EACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,GAAG,CAAC;CACf;AACD,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAC9D,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE;QACF,IAAI,EAAE;YACF,KAAK,EAAE,MAAM,EAAE,CAAC;YAChB,OAAO,EAAE;gBACL,QAAQ,EAAE,iBAAiB,EAAE,CAAC;gBAC9B,MAAM,CAAC,EAAE,GAAG,CAAC;aAChB,EAAE,CAAC;YACJ,MAAM,CAAC,EAAE,GAAG,CAAC;SAChB,EAAE,CAAC;QACJ,MAAM,CAAC,EAAE,GAAG,CAAC;KAChB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,GAAG,CAAC;IACZ,MAAM,EAAE,mBAAmB,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACvB,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;IAC9B,UAAU,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IAC5C,UAAU,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI,CAAC;CACvD;AAED,MAAM,WAAW,yBAAyB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACrC,KAAK,EAAE,uBAAuB,EAAE,CAAC;IACjC,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,SAAS,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAChC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;IACzC,SAAS,CAAC,EAAE,yBAAyB,EAAE,GAAG,SAAS,CAAC;IACpD,eAAe,CAAC,EAAE,+BAA+B,EAAE,GAAG,SAAS,CAAC;IAChE,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACvC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,IAAI,GAAG,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,yBAAyB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"unlayer-interface.d.ts","sourceRoot":"","sources":["../src/unlayer-interface.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/unlayer-interface.tsx"],"sourcesContent":["import {\n UnlayerEditorESignRecipientInfo,\n UnlayerEditorTwin,\n UnlayerEditorUnit,\n} from './shared/const';\nimport { SchemaObject } from './shared/schema';\n\nexport interface UnlayerDesignTool {\n type: string;\n slug?: string;\n values: any;\n}\nexport interface UnlayerDesignCustomTool extends UnlayerDesignTool {\n slug: string;\n}\n\nexport interface UnlayerDesignFormat {\n body: {\n rows: {\n cells: number[];\n columns: {\n contents: UnlayerDesignTool[];\n values?: any;\n }[];\n values?: any;\n }[];\n values?: any;\n };\n counters: Record<string, number>;\n schemaVersion: number;\n}\n\nexport interface UnlayerExport {\n html: string;\n chunks: any;\n design: UnlayerDesignFormat;\n}\n\nexport interface UnlayerRef {\n loadDesign(design: any): void;\n saveDesign(cb: (design: any) => void): void;\n exportHtml(cb: (data: UnlayerExport) => void): void;\n}\n\nexport interface UnlayerEditorMergeTagInfo {\n id: string;\n name: string;\n propertyPath: string;\n}\n\nexport interface UnlayerEditorCustomTool {\n key: string;\n title: string;\n description?: string;\n url: string;\n groupUrl?: string;\n}\n\nexport interface CreateUnlayerEditorProps {\n tools: UnlayerEditorCustomTool[];\n newSnapshot?: UnlayerEditorTwin;\n toolTwins?: UnlayerEditorTwin[];\n isSnapshotMode?: boolean;\n dummyData?: any;\n schema?: SchemaObject;\n customCSS?: string | string[] | undefined;\n customJS?: string | string[] | undefined;\n mergeTags?: UnlayerEditorMergeTagInfo[] | undefined;\n eSignRecipients?: UnlayerEditorESignRecipientInfo[] | undefined;\n eSignFieldTypes?: string[] | undefined;\n genericConfigMode?: boolean;\n generics?: true | string[];\n units?: UnlayerEditorUnit[];\n noCoreTools?: boolean;\n latest?: boolean;\n blocks?: boolean;\n hideAllTools?: boolean;\n hideContentControls?: boolean;\n hideBodyMenuItem?: boolean;\n enableHTMLEditing?: boolean;\n enableHTMLEditingReadonly?: boolean;\n}\n"],"names":[],"mappings":"AA0DA,
|
|
1
|
+
{"version":3,"sources":["../src/unlayer-interface.tsx"],"sourcesContent":["import {\n UnlayerEditorESignRecipientInfo,\n UnlayerEditorTwin,\n UnlayerEditorUnit,\n} from './shared/const';\nimport { SchemaObject } from './shared/schema';\n\nexport interface UnlayerDesignTool {\n type: string;\n slug?: string;\n values: any;\n}\nexport interface UnlayerDesignCustomTool extends UnlayerDesignTool {\n slug: string;\n}\n\nexport interface UnlayerDesignFormat {\n body: {\n rows: {\n cells: number[];\n columns: {\n contents: UnlayerDesignTool[];\n values?: any;\n }[];\n values?: any;\n }[];\n values?: any;\n };\n counters: Record<string, number>;\n schemaVersion: number;\n}\n\nexport interface UnlayerExport {\n html: string;\n chunks: any;\n design: UnlayerDesignFormat;\n}\n\nexport interface UnlayerRef {\n loadDesign(design: any): void;\n saveDesign(cb: (design: any) => void): void;\n exportHtml(cb: (data: UnlayerExport) => void): void;\n}\n\nexport interface UnlayerEditorMergeTagInfo {\n id: string;\n name: string;\n propertyPath: string;\n}\n\nexport interface UnlayerEditorCustomTool {\n key: string;\n title: string;\n description?: string;\n url: string;\n groupUrl?: string;\n}\n\nexport interface CreateUnlayerEditorProps {\n tools: UnlayerEditorCustomTool[];\n newSnapshot?: UnlayerEditorTwin;\n toolTwins?: UnlayerEditorTwin[];\n isSnapshotMode?: boolean;\n dummyData?: any;\n schema?: SchemaObject;\n customCSS?: string | string[] | undefined;\n customJS?: string | string[] | undefined;\n mergeTags?: UnlayerEditorMergeTagInfo[] | undefined;\n eSignRecipients?: UnlayerEditorESignRecipientInfo[] | undefined;\n eSignFieldTypes?: string[] | undefined;\n genericConfigMode?: boolean;\n generics?: true | string[];\n units?: UnlayerEditorUnit[];\n noCoreTools?: boolean;\n latest?: boolean;\n blocks?: boolean;\n hideAllTools?: boolean;\n hideContentControls?: boolean;\n hideBodyMenuItem?: boolean;\n enableHTMLEditing?: boolean;\n enableHTMLEditingReadonly?: boolean;\n imageValidation?: {\n maxWidth?: number;\n maxHeight?: number;\n maxFileSize?: number;\n }\n}\n"],"names":[],"mappings":"AA0DA,WA4BC"}
|
package/package.json
CHANGED
package/src/editor.tsx
CHANGED
|
@@ -26,6 +26,8 @@ export interface UnlayerEditorProps {
|
|
|
26
26
|
|
|
27
27
|
onImage?(file: File): Promise<{ url: string }>;
|
|
28
28
|
|
|
29
|
+
onError?(title: string, description?: string): void;
|
|
30
|
+
|
|
29
31
|
onMessage?(type: string, data: any): void;
|
|
30
32
|
}
|
|
31
33
|
|
|
@@ -88,6 +90,12 @@ export const UnlayerEditor = forwardRef<UnlayerRef, UnlayerEditorProps>((props,
|
|
|
88
90
|
return () => store.setOnImage();
|
|
89
91
|
}, [props.onImage, store]);
|
|
90
92
|
|
|
93
|
+
useEffect(() => {
|
|
94
|
+
store.setOnError(props.onError);
|
|
95
|
+
|
|
96
|
+
return () => store.setOnError();
|
|
97
|
+
}, [props.onError, store]);
|
|
98
|
+
|
|
91
99
|
useEffect(() => {
|
|
92
100
|
store.setOnMessage(props.onMessage);
|
|
93
101
|
|
package/src/store.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { loadScript } from './loadScript';
|
|
2
|
+
import { defaultImageValidation } from './shared/configs';
|
|
2
3
|
import { UnlayerEditorTwin, UnlayerEventConfig, UnlayerEventRegister } from './shared/const';
|
|
3
4
|
import { unlayerToolsParseTwinKey } from './shared/tools';
|
|
4
5
|
import { unlayerToolsIterate } from './tools';
|
|
@@ -46,6 +47,7 @@ export class UnlayerStore {
|
|
|
46
47
|
private onSnapshotSaveCB?: (snapshot: UnlayerEditorTwin) => void;
|
|
47
48
|
private onReadyCB?: () => void;
|
|
48
49
|
private onImageCB?: (file: File) => Promise<{ url: string }>;
|
|
50
|
+
private onErrorCB?: (title: string, description?: string) => void;
|
|
49
51
|
|
|
50
52
|
constructor(readonly props: CreateUnlayerEditorProps) {
|
|
51
53
|
this.props.eSignFieldTypes = ['Signature', 'Initials', 'Date Signed', 'Full Name'];
|
|
@@ -129,6 +131,10 @@ export class UnlayerStore {
|
|
|
129
131
|
this.onImageCB = onImage;
|
|
130
132
|
};
|
|
131
133
|
|
|
134
|
+
setOnError = (onError?: UnlayerStore['onErrorCB']) => {
|
|
135
|
+
this.onErrorCB = onError;
|
|
136
|
+
};
|
|
137
|
+
|
|
132
138
|
setOnMessage = (onMessage?: UnlayerStore['onMessageCB']) => {
|
|
133
139
|
this.onMessageCB = onMessage;
|
|
134
140
|
};
|
|
@@ -250,22 +256,95 @@ export class UnlayerStore {
|
|
|
250
256
|
data,
|
|
251
257
|
},
|
|
252
258
|
},
|
|
253
|
-
'*'
|
|
259
|
+
'*',
|
|
254
260
|
);
|
|
255
261
|
};
|
|
256
262
|
|
|
257
|
-
private uploadImage =
|
|
263
|
+
private uploadImage = async (
|
|
264
|
+
data: { attachments: File[] },
|
|
265
|
+
done: (result: { progress: number; url?: string }) => void,
|
|
266
|
+
) => {
|
|
258
267
|
if (!this.onImageCB) {
|
|
259
268
|
done({ progress: 100 });
|
|
260
269
|
throw new Error('image upload is not implemented');
|
|
261
270
|
}
|
|
262
271
|
|
|
272
|
+
if (!data.attachments?.length) {
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
const file = data.attachments[0];
|
|
277
|
+
|
|
278
|
+
const res = await this.validateImage(file, {
|
|
279
|
+
...defaultImageValidation,
|
|
280
|
+
...(this.props.imageValidation ?? {}),
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
if (!res.isValid) {
|
|
284
|
+
this.onErrorCB?.(res.title, res.description);
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
|
|
263
288
|
done({ progress: 0 });
|
|
264
289
|
|
|
265
|
-
|
|
266
|
-
this.onImageCB(
|
|
267
|
-
|
|
268
|
-
|
|
290
|
+
try {
|
|
291
|
+
const { url } = await this.onImageCB(file);
|
|
292
|
+
done({ progress: 100, url });
|
|
293
|
+
} catch {
|
|
294
|
+
this.onErrorCB?.(
|
|
295
|
+
'Image upload failed',
|
|
296
|
+
'Something went wrong while uploading the image. Please try again or select another image.',
|
|
297
|
+
);
|
|
298
|
+
done({ progress: 100 });
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
private validateImage = async (
|
|
303
|
+
file: File,
|
|
304
|
+
imageValidation: { maxFileSize: number; maxWidth: number; maxHeight: number },
|
|
305
|
+
): Promise<{ isValid: boolean; title: string; description: string }> => {
|
|
306
|
+
const { maxFileSize, maxHeight, maxWidth } = imageValidation;
|
|
307
|
+
|
|
308
|
+
if (file.size > maxFileSize) {
|
|
309
|
+
const maxSizeMB = (maxFileSize / 1024 / 1024).toFixed(2);
|
|
310
|
+
const fileSizeMB = (file.size / 1024 / 1024).toFixed(2);
|
|
311
|
+
return {
|
|
312
|
+
isValid: false,
|
|
313
|
+
title: 'Image size limit reached',
|
|
314
|
+
description: `This image is ${fileSizeMB}MB, which is above the ${maxSizeMB}MB limit. Please upload a smaller file to continue.`,
|
|
315
|
+
};
|
|
269
316
|
}
|
|
317
|
+
|
|
318
|
+
return new Promise(resolve => {
|
|
319
|
+
const img = new Image();
|
|
320
|
+
const objectUrl = URL.createObjectURL(file);
|
|
321
|
+
|
|
322
|
+
img.onload = () => {
|
|
323
|
+
URL.revokeObjectURL(objectUrl);
|
|
324
|
+
const { height, width } = img;
|
|
325
|
+
|
|
326
|
+
if (width > maxWidth || height > maxHeight) {
|
|
327
|
+
resolve({
|
|
328
|
+
isValid: false,
|
|
329
|
+
title: 'Dimension limit reached',
|
|
330
|
+
description: `These image dimensions (${width}x${height}px) exceed the ${maxWidth}x${maxHeight}px limit. Please resize the image and try again.`,
|
|
331
|
+
});
|
|
332
|
+
} else {
|
|
333
|
+
resolve({ isValid: true, title: '', description: '' });
|
|
334
|
+
}
|
|
335
|
+
};
|
|
336
|
+
|
|
337
|
+
img.onerror = () => {
|
|
338
|
+
URL.revokeObjectURL(objectUrl);
|
|
339
|
+
resolve({
|
|
340
|
+
isValid: false,
|
|
341
|
+
title: 'The image is broken',
|
|
342
|
+
description:
|
|
343
|
+
'Looks like this image isn’t valid. Please choose another image and try again.',
|
|
344
|
+
});
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
img.src = objectUrl;
|
|
348
|
+
});
|
|
270
349
|
};
|
|
271
350
|
}
|