Skip to content

Commit 36f5f76

Browse files
add typescript support, use unlayer-types package, add build commands
1 parent 202fafc commit 36f5f76

16 files changed

+7437
-24079
lines changed

jsconfig.json

-19
This file was deleted.

package-lock.json

+5,681-16,673
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+18-36
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,35 @@
11
{
22
"name": "vue-email-editor",
3-
"version": "2.0.0",
4-
"main": "./dist/vue-email-editor.common.js",
3+
"version": "2.1.0",
4+
"main": "vue-email-editor.es",
5+
"types": "./components/index.d.ts",
56
"scripts": {
67
"serve": "vue-cli-service serve",
78
"build": "vue-cli-service build",
8-
"build-bundle": "vue-cli-service build --target lib --name vue-email-editor ./src/components/index.js",
99
"lint": "vue-cli-service lint",
10+
"build-dts": "touch ./dist/vue-email-editor.d.ts && cat ./dist/**/*.d.ts > ./dist/vue-email-editor.d.ts",
11+
"copy-types": "cp ./src/components/types.ts ./dist/components/types.d.ts",
12+
"build-bundle": "vite build && cd ./src/components && vue-tsc --emitDeclarationOnly && npm run copy-types",
1013
"release": "npm run build-bundle && npm publish"
1114
},
1215
"dependencies": {
13-
"core-js": "^3.8.3",
16+
"unlayer-types": "^1.52.0",
1417
"vue": "^3.2.13"
1518
},
1619
"devDependencies": {
17-
"@babel/core": "^7.12.16",
18-
"@babel/eslint-parser": "^7.12.16",
19-
"@vue/cli-plugin-babel": "~5.0.0",
20-
"@vue/cli-plugin-eslint": "~5.0.0",
20+
"@babel/types": "^7.24.7",
21+
"@vitejs/plugin-vue": "^5.0.5",
2122
"@vue/cli-service": "~5.0.0",
22-
"eslint": "^7.32.0",
23-
"eslint-plugin-vue": "^8.0.3",
24-
"vue-router": "^4.0.16"
23+
"@vue/cli-plugin-typescript": "~5.0.0",
24+
"typescript": "^5.2.2",
25+
"vite": "^5.3.1",
26+
"vue-dts-gen": "^0.3.0",
27+
"vue-loader": "^17.4.2",
28+
"vue-router": "^4.4.0",
29+
"vue-template-compiler": "^2.7.16",
30+
"vue-tsc": "^2.0.22"
2531
},
2632
"files": [
27-
"dist/*",
28-
"src/*",
29-
"public/*",
30-
"*.json",
31-
"*.js"
32-
],
33-
"eslintConfig": {
34-
"root": true,
35-
"env": {
36-
"node": true
37-
},
38-
"extends": [
39-
"plugin:vue/vue3-essential",
40-
"eslint:recommended"
41-
],
42-
"parserOptions": {
43-
"parser": "@babel/eslint-parser"
44-
},
45-
"rules": {}
46-
},
47-
"browserslist": [
48-
"> 1%",
49-
"last 2 versions",
50-
"not dead",
51-
"not ie 11"
33+
"dist"
5234
]
5335
}

src/components/EmailEditor.vue

+29-22
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,35 @@
66
></div>
77
</template>
88

9-
<script>
10-
import { loadScript } from './loadScript';
9+
<script lang="ts">
10+
import { defineComponent, PropType } from 'vue';
1111
import pkg from '../../package.json';
12-
12+
import { loadScript } from './loadScript';
13+
import { EmailEditorProps } from './types';
1314
let lastEditorId = 0;
1415
15-
export default {
16+
export default defineComponent({
1617
name: 'EmailEditor',
1718
props: {
18-
editorId: String,
19-
options: Object,
20-
projectId: Number,
21-
tools: Object,
22-
appearance: Object,
23-
locale: String,
19+
appearance: Object as PropType<EmailEditorProps['appearance']>,
20+
displayMode: String as PropType<EmailEditorProps['displayMode']>,
21+
editorId: String as PropType<EmailEditorProps['editorId']>,
22+
locale: String as PropType<EmailEditorProps['locale']>,
23+
projectId: Number as PropType<EmailEditorProps['projectId']>,
24+
tools: Object as PropType<EmailEditorProps['tools']>,
2425
minHeight: {
25-
type: String,
26+
type: String as PropType<EmailEditorProps['minHeight']>,
2627
default: '500px',
27-
},
28+
}
29+
},
30+
data() {
31+
return {
32+
editor: null as EmailEditorProps['editor'],
33+
options: Object as EmailEditorProps['options'],
34+
};
2835
},
2936
computed: {
30-
id() {
37+
id(): string | undefined {
3138
return this.editorId || `editor-${++lastEditorId}`;
3239
},
3340
},
@@ -58,30 +65,30 @@ export default {
5865
this.editor = unlayer.createEditor({
5966
...options,
6067
id: this.id,
61-
displayMode: 'email',
68+
displayMode: this.displayMode || 'email',
6269
source: {
6370
name: pkg.name,
6471
version: pkg.version,
6572
},
6673
});
6774
6875
this.$emit('load');
69-
76+
7077
this.editor.addEventListener('editor:ready', () => {
7178
this.$emit('ready');
7279
});
7380
},
74-
loadDesign(design) {
75-
this.editor.loadDesign(design);
81+
loadDesign(design: any) {
82+
this.editor?.loadDesign(design);
7683
},
77-
saveDesign(callback) {
78-
this.editor.saveDesign(callback);
84+
saveDesign(callback: any) {
85+
this.editor?.saveDesign(callback);
7986
},
80-
exportHtml(callback) {
81-
this.editor.exportHtml(callback);
87+
exportHtml(callback: any) {
88+
this.editor?.exportHtml(callback);
8289
},
8390
},
84-
};
91+
});
8592
</script>
8693

8794
<style scoped>

src/components/index.js

-16
This file was deleted.

src/components/types.ts

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// ignore next line
2+
/// <reference path="../../node_modules/unlayer-types/embed.d.ts" />
3+
4+
import Embed from 'embed/index';
5+
import { Editor as EditorClass } from 'embed/Editor';
6+
import { Config } from "embed/Config";
7+
import { AppearanceConfig, DisplayMode, ToolsConfig } from 'state/types/types';
8+
9+
export type Unlayer = typeof Embed;
10+
export type Editor = InstanceType<typeof EditorClass>;
11+
12+
export interface EmailEditorProps {
13+
editor: Editor | null;
14+
editorId?: string | undefined;
15+
minHeight?: number | string | undefined;
16+
onLoad?(unlayer: Editor): void;
17+
onReady?(unlayer: Editor): void;
18+
options?: Config;
19+
scriptUrl?: string | undefined;
20+
// style?: CSSProperties | undefined;
21+
22+
// redundant props -- already available in options
23+
/** @deprecated */
24+
appearance?: AppearanceConfig | undefined;
25+
/** @deprecated */
26+
displayMode?: DisplayMode;
27+
/** @deprecated */
28+
locale?: string | undefined;
29+
/** @deprecated */
30+
projectId?: number | undefined;
31+
/** @deprecated */
32+
tools?: ToolsConfig | undefined;
33+
}
34+
35+
declare global {
36+
const unlayer: Unlayer;
37+
38+
interface Window {
39+
__unlayer_lastEditorId: number;
40+
}
41+
}

0 commit comments

Comments
 (0)