@mesgflow/email-editor-vue 0.0.0-stage → 0.3.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/EmailEditor.d.ts +91 -0
- package/EmailEditor.js +92 -0
- package/EmailEditor.js.map +1 -0
- package/LICENSE.md +17 -0
- package/index.d.ts +2 -0
- package/index.js +2 -0
- package/index.js.map +1 -0
- package/package.json +18 -4
- package/README.md +0 -3
package/EmailEditor.d.ts
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { type PropType } from 'vue';
|
|
2
|
+
import type { EmailDocument } from '@mesgflow/email-core';
|
|
3
|
+
import type { EmailEditorConfig, EmailEditorRole, EmailEditorTheme } from '@mesgflow/email-editor';
|
|
4
|
+
import '@mesgflow/email-elements';
|
|
5
|
+
/** İmperatif API (Kademe 3 paket AF, `email-elements` İLE AYNI ÜÇ metot) — `expose()`'ün açtığı yüzey, bkz. bileşen alt tarafındaki not. */
|
|
6
|
+
export interface EmailEditorInstance {
|
|
7
|
+
getDocument(): EmailDocument | null;
|
|
8
|
+
exportHtml(): string | null;
|
|
9
|
+
loadTemplate(document: EmailDocument): void;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* `<mesgflow-email-editor>` özel elemanının (bkz. `@mesgflow/email-elements`)
|
|
13
|
+
* ince bir Vue 3 sarmalayıcısı — Angular BİLMENİZE gerek YOK.
|
|
14
|
+
*
|
|
15
|
+
* `@mesgflow/email-editor-react` İLE AYNI gerekçeyle (bkz. o paketin
|
|
16
|
+
* `index.tsx` üstündeki not) elemanı ŞABLONDA/`h()`'te DOĞRUDAN YAZMAK
|
|
17
|
+
* yerine `onMounted` İÇİNDE elle `document.createElement(...)` ile
|
|
18
|
+
* oluşturup TÜM property'leri (`config` DAHİL) DOM'a EKLEMEDEN ÖNCE
|
|
19
|
+
* atıyoruz — Vue'nun `ref` callback'i de (React'inki gibi) eleman
|
|
20
|
+
* BAĞLANDIKTAN SONRA çalışır, bu yüzden `config`'in "bağlanmadan ÖNCE
|
|
21
|
+
* verilmeli" kısıtını (bkz. `@mesgflow/email-elements` README'si) BAŞKA
|
|
22
|
+
* TÜRLÜ karşılamak mümkün değil.
|
|
23
|
+
*/
|
|
24
|
+
export declare const EmailEditor: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
25
|
+
initialDocument: {
|
|
26
|
+
type: PropType<EmailDocument | null>;
|
|
27
|
+
default: null;
|
|
28
|
+
};
|
|
29
|
+
editorRole: {
|
|
30
|
+
type: PropType<EmailEditorRole>;
|
|
31
|
+
default: string;
|
|
32
|
+
};
|
|
33
|
+
theme: {
|
|
34
|
+
type: PropType<EmailEditorTheme | null>;
|
|
35
|
+
default: null;
|
|
36
|
+
};
|
|
37
|
+
licenseKey: {
|
|
38
|
+
type: PropType<string | null>;
|
|
39
|
+
default: null;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* `@mesgflow/email-elements`'in `config` property'siyle AYNI — SADECE
|
|
43
|
+
* İLK monte edildiğinde uygulanır (bkz. sınıf üstündeki not). SONRADAN
|
|
44
|
+
* değişmesi HİÇBİR ETKİ YAPMAZ — DEĞİŞKEN bir adaptör seti gerekiyorsa
|
|
45
|
+
* bileşene `:key` vererek YENİDEN monte edilmesini sağlayın.
|
|
46
|
+
*/
|
|
47
|
+
config: {
|
|
48
|
+
type: PropType<EmailEditorConfig | null>;
|
|
49
|
+
default: null;
|
|
50
|
+
};
|
|
51
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
52
|
+
[key: string]: any;
|
|
53
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
54
|
+
documentChange: (document: EmailDocument) => true;
|
|
55
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
56
|
+
initialDocument: {
|
|
57
|
+
type: PropType<EmailDocument | null>;
|
|
58
|
+
default: null;
|
|
59
|
+
};
|
|
60
|
+
editorRole: {
|
|
61
|
+
type: PropType<EmailEditorRole>;
|
|
62
|
+
default: string;
|
|
63
|
+
};
|
|
64
|
+
theme: {
|
|
65
|
+
type: PropType<EmailEditorTheme | null>;
|
|
66
|
+
default: null;
|
|
67
|
+
};
|
|
68
|
+
licenseKey: {
|
|
69
|
+
type: PropType<string | null>;
|
|
70
|
+
default: null;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* `@mesgflow/email-elements`'in `config` property'siyle AYNI — SADECE
|
|
74
|
+
* İLK monte edildiğinde uygulanır (bkz. sınıf üstündeki not). SONRADAN
|
|
75
|
+
* değişmesi HİÇBİR ETKİ YAPMAZ — DEĞİŞKEN bir adaptör seti gerekiyorsa
|
|
76
|
+
* bileşene `:key` vererek YENİDEN monte edilmesini sağlayın.
|
|
77
|
+
*/
|
|
78
|
+
config: {
|
|
79
|
+
type: PropType<EmailEditorConfig | null>;
|
|
80
|
+
default: null;
|
|
81
|
+
};
|
|
82
|
+
}>> & Readonly<{
|
|
83
|
+
onDocumentChange?: ((document: EmailDocument) => any) | undefined;
|
|
84
|
+
}>, {
|
|
85
|
+
theme: EmailEditorTheme | null;
|
|
86
|
+
initialDocument: EmailDocument | null;
|
|
87
|
+
editorRole: EmailEditorRole;
|
|
88
|
+
licenseKey: string | null;
|
|
89
|
+
config: EmailEditorConfig | null;
|
|
90
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
91
|
+
export default EmailEditor;
|
package/EmailEditor.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { defineComponent, h, onBeforeUnmount, onMounted, ref, watch } from 'vue';
|
|
2
|
+
import '@mesgflow/email-elements';
|
|
3
|
+
/**
|
|
4
|
+
* `<mesgflow-email-editor>` özel elemanının (bkz. `@mesgflow/email-elements`)
|
|
5
|
+
* ince bir Vue 3 sarmalayıcısı — Angular BİLMENİZE gerek YOK.
|
|
6
|
+
*
|
|
7
|
+
* `@mesgflow/email-editor-react` İLE AYNI gerekçeyle (bkz. o paketin
|
|
8
|
+
* `index.tsx` üstündeki not) elemanı ŞABLONDA/`h()`'te DOĞRUDAN YAZMAK
|
|
9
|
+
* yerine `onMounted` İÇİNDE elle `document.createElement(...)` ile
|
|
10
|
+
* oluşturup TÜM property'leri (`config` DAHİL) DOM'a EKLEMEDEN ÖNCE
|
|
11
|
+
* atıyoruz — Vue'nun `ref` callback'i de (React'inki gibi) eleman
|
|
12
|
+
* BAĞLANDIKTAN SONRA çalışır, bu yüzden `config`'in "bağlanmadan ÖNCE
|
|
13
|
+
* verilmeli" kısıtını (bkz. `@mesgflow/email-elements` README'si) BAŞKA
|
|
14
|
+
* TÜRLÜ karşılamak mümkün değil.
|
|
15
|
+
*/
|
|
16
|
+
export const EmailEditor = defineComponent({
|
|
17
|
+
name: 'EmailEditor',
|
|
18
|
+
props: {
|
|
19
|
+
initialDocument: { type: Object, default: null },
|
|
20
|
+
editorRole: { type: String, default: 'brand' },
|
|
21
|
+
theme: { type: Object, default: null },
|
|
22
|
+
licenseKey: { type: String, default: null },
|
|
23
|
+
/**
|
|
24
|
+
* `@mesgflow/email-elements`'in `config` property'siyle AYNI — SADECE
|
|
25
|
+
* İLK monte edildiğinde uygulanır (bkz. sınıf üstündeki not). SONRADAN
|
|
26
|
+
* değişmesi HİÇBİR ETKİ YAPMAZ — DEĞİŞKEN bir adaptör seti gerekiyorsa
|
|
27
|
+
* bileşene `:key` vererek YENİDEN monte edilmesini sağlayın.
|
|
28
|
+
*/
|
|
29
|
+
config: { type: Object, default: null },
|
|
30
|
+
},
|
|
31
|
+
emits: {
|
|
32
|
+
documentChange: (document) => !!document,
|
|
33
|
+
},
|
|
34
|
+
setup(props, { emit, expose }) {
|
|
35
|
+
const containerRef = ref(null);
|
|
36
|
+
let element = null;
|
|
37
|
+
function handleDocumentChange(event) {
|
|
38
|
+
emit('documentChange', event.detail);
|
|
39
|
+
}
|
|
40
|
+
onMounted(() => {
|
|
41
|
+
const container = containerRef.value;
|
|
42
|
+
if (!container)
|
|
43
|
+
return;
|
|
44
|
+
const el = document.createElement('mesgflow-email-editor');
|
|
45
|
+
el.style.display = 'block';
|
|
46
|
+
el.style.height = '100%';
|
|
47
|
+
// `config` SADECE burada (bağlanmadan ÖNCE) atanır — bkz. sınıf üstündeki gerekçe notu.
|
|
48
|
+
el.config = props.config;
|
|
49
|
+
el.initialDocument = props.initialDocument;
|
|
50
|
+
el.editorRole = props.editorRole;
|
|
51
|
+
el.theme = props.theme;
|
|
52
|
+
el.licenseKey = props.licenseKey;
|
|
53
|
+
el.addEventListener('documentChange', handleDocumentChange);
|
|
54
|
+
element = el;
|
|
55
|
+
container.appendChild(el);
|
|
56
|
+
});
|
|
57
|
+
onBeforeUnmount(() => {
|
|
58
|
+
if (!element)
|
|
59
|
+
return;
|
|
60
|
+
element.removeEventListener('documentChange', handleDocumentChange);
|
|
61
|
+
element.remove();
|
|
62
|
+
element = null;
|
|
63
|
+
});
|
|
64
|
+
// `initialDocument`/`editorRole`/`theme`/`licenseKey` — `config`'İN AKSİNE — bağlandıktan
|
|
65
|
+
// SONRA da değiştirilebilen property'ler (bkz. `main.ts`'in `setInput()` kullanan
|
|
66
|
+
// setter'ları, `@mesgflow/email-elements`), bu yüzden HER prop değişiminde canlı güncellenir.
|
|
67
|
+
watch(() => props.initialDocument, (value) => {
|
|
68
|
+
if (element)
|
|
69
|
+
element.initialDocument = value;
|
|
70
|
+
});
|
|
71
|
+
watch(() => props.editorRole, (value) => {
|
|
72
|
+
if (element)
|
|
73
|
+
element.editorRole = value;
|
|
74
|
+
});
|
|
75
|
+
watch(() => props.theme, (value) => {
|
|
76
|
+
if (element)
|
|
77
|
+
element.theme = value;
|
|
78
|
+
});
|
|
79
|
+
watch(() => props.licenseKey, (value) => {
|
|
80
|
+
if (element)
|
|
81
|
+
element.licenseKey = value;
|
|
82
|
+
});
|
|
83
|
+
expose({
|
|
84
|
+
getDocument: () => element?.getDocument() ?? null,
|
|
85
|
+
exportHtml: () => element?.exportHtml() ?? null,
|
|
86
|
+
loadTemplate: (documentToLoad) => element?.loadTemplate(documentToLoad),
|
|
87
|
+
});
|
|
88
|
+
return () => h('div', { ref: containerRef, style: { display: 'block', height: '100%' } });
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
export default EmailEditor;
|
|
92
|
+
//# sourceMappingURL=EmailEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmailEditor.js","sourceRoot":"","sources":["../../../../../projects/email-editor-vue/src/EmailEditor.ts"],"names":[],"mappings":"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"}
|
package/LICENSE.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# @mesgflow/email-core · @mesgflow/email-editor · @mesgflow/email-elements — Lisans
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 MesgFlow. Tüm hakları saklıdır.
|
|
4
|
+
|
|
5
|
+
Bu paketler ticari yazılımdır. Paketlerin npm kaydında herkese açık olması kullanım hakkı vermez. Kullanım, MesgFlow
|
|
6
|
+
tarafından verilen geçerli bir lisans anahtarı ve MesgFlow ile yapılmış yazılı lisans sözleşmesi kapsamında mümkündür.
|
|
7
|
+
Lisans anahtarı olmadan editör değerlendirme kipinde çalışır ve üretim ortamında kullanılamaz.
|
|
8
|
+
|
|
9
|
+
Kaynak kodun kopyalanması, değiştirilmesi, dağıtılması, alt lisanslanması veya bu paketlerden türev eser üretilmesi,
|
|
10
|
+
lisans sözleşmesinde açıkça izin verilen haller dışında yasaktır.
|
|
11
|
+
|
|
12
|
+
Bu metin bir yer tutucudur; bağlayıcı lisans koşulları hukuk incelemesinden sonra güncellenecektir (0015a §14 Q-8).
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
This software is proprietary. Public availability on the npm registry does not grant any right of use. Use requires a
|
|
17
|
+
valid MesgFlow license key and a written license agreement with MesgFlow. All rights reserved.
|
package/index.d.ts
ADDED
package/index.js
ADDED
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../projects/email-editor-vue/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mesgflow/email-editor-vue",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "MesgFlow e-posta editörü için ince bir Vue 3 sarmalayıcı — <mesgflow-email-editor> özel elemanının (@mesgflow/email-elements) props/emits/expose üzerinden idiomatic bir Vue bileşeni olarak kullanılmasını sağlar. Angular BİLMENİZE gerek YOK.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./index.js",
|
|
7
|
+
"types": "./index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./index.d.ts",
|
|
11
|
+
"default": "./index.js"
|
|
12
|
+
},
|
|
13
|
+
"./package.json": "./package.json"
|
|
14
|
+
},
|
|
15
|
+
"sideEffects": false,
|
|
16
|
+
"peerDependencies": {
|
|
17
|
+
"@mesgflow/email-elements": "^0.3.0",
|
|
18
|
+
"vue": "^3.4"
|
|
19
|
+
}
|
|
20
|
+
}
|
package/README.md
DELETED