@topol.io/editor 0.2.1 → 1.0.0-alpha.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/LICENSE +1 -1
- package/dist/topol-plugin.es.js +107 -20
- package/dist/topol-plugin.umd.js +1 -1
- package/dist/types/src/core/script-loader.d.ts +7 -0
- package/dist/types/src/email-editor/constants.d.ts +7 -0
- package/dist/types/src/email-editor/index.d.ts +97 -0
- package/dist/types/src/landing-page-editor/constants.d.ts +1 -0
- package/dist/types/src/landing-page-editor/index.d.ts +55 -0
- package/dist/types/src/landing-page-editor/schemas/ai/aiSchema.d.ts +15 -0
- package/dist/types/src/landing-page-editor/schemas/api/apiSchema.d.ts +33 -0
- package/dist/types/src/landing-page-editor/schemas/authHeaderConfig/authHeaderConfigScheme.d.ts +3 -0
- package/dist/types/src/landing-page-editor/schemas/autosave/autosaveSchema.d.ts +33 -0
- package/dist/types/src/landing-page-editor/schemas/comments/commentsSchema.d.ts +91 -0
- package/dist/types/src/landing-page-editor/schemas/contentBlock/contentBlockScheme.d.ts +470 -0
- package/dist/types/src/landing-page-editor/schemas/font/fontSchema.d.ts +12 -0
- package/dist/types/src/landing-page-editor/schemas/helpdesk/helpdeskSchema.d.ts +8 -0
- package/dist/types/src/landing-page-editor/schemas/image/imageSchema.d.ts +26 -0
- package/dist/types/src/landing-page-editor/schemas/language/languageSchema.d.ts +3 -0
- package/dist/types/src/landing-page-editor/schemas/mjmlStore/mjmlStoreSchema.d.ts +31 -0
- package/dist/types/src/landing-page-editor/schemas/notification/notificationSchema.d.ts +16 -0
- package/dist/types/src/landing-page-editor/schemas/openAI/openAISchema.d.ts +7 -0
- package/dist/types/src/landing-page-editor/schemas/pluginOptions/pluginOptionsSchema.d.ts +81 -0
- package/dist/types/src/landing-page-editor/schemas/premadeBlock/premadeBlockSchema.d.ts +59750 -0
- package/dist/types/src/landing-page-editor/schemas/premadeTemplates/premadeTemplatesSchema.d.ts +65 -0
- package/dist/types/src/landing-page-editor/schemas/savedBlock/savedBlockApiSchema.d.ts +44831 -0
- package/dist/types/src/landing-page-editor/schemas/savedBlock/savedBlockSchema.d.ts +59725 -0
- package/dist/types/src/landing-page-editor/schemas/template/blocks/buttonBlockSchema.d.ts +700 -0
- package/dist/types/src/landing-page-editor/schemas/template/blocks/carouselBlockSchema.d.ts +74 -0
- package/dist/types/src/landing-page-editor/schemas/template/blocks/dividerBlockSchema.d.ts +362 -0
- package/dist/types/src/landing-page-editor/schemas/template/blocks/imageAnGifBlockSchema.d.ts +1157 -0
- package/dist/types/src/landing-page-editor/schemas/template/blocks/index.d.ts +12 -0
- package/dist/types/src/landing-page-editor/schemas/template/blocks/rawBlockSchema.d.ts +45 -0
- package/dist/types/src/landing-page-editor/schemas/template/blocks/socialBlockSchema.d.ts +637 -0
- package/dist/types/src/landing-page-editor/schemas/template/blocks/spacerBlockSchema.d.ts +392 -0
- package/dist/types/src/landing-page-editor/schemas/template/blocks/textBlockSchema.d.ts +480 -0
- package/dist/types/src/landing-page-editor/schemas/template/blocks/videoBlockSchema.d.ts +333 -0
- package/dist/types/src/landing-page-editor/schemas/template/commonSchema.d.ts +265 -0
- package/dist/types/src/landing-page-editor/schemas/template/settingsSchema.d.ts +4812 -0
- package/dist/types/src/landing-page-editor/schemas/template/structure/blockSchema.d.ts +7502 -0
- package/dist/types/src/landing-page-editor/schemas/template/structure/columnSchema.d.ts +7983 -0
- package/dist/types/src/landing-page-editor/schemas/template/structure/sectionSchema.d.ts +15074 -0
- package/dist/types/src/landing-page-editor/schemas/template/styleSchema.d.ts +185 -0
- package/dist/types/src/landing-page-editor/schemas/templateSchema.d.ts +58720 -0
- package/dist/types/src/landing-page-editor/schemas/templateSettings/templateSettingsSchema.d.ts +4959 -0
- package/dist/types/src/landing-page-editor/schemas/theme/themeSchema.d.ts +40 -0
- package/dist/types/src/landing-page-editor/schemas/user/userSchema.d.ts +13 -0
- package/dist/types/src/landing-page-editor/schemas/utils/transformBorder.d.ts +9 -0
- package/dist/types/src/main.d.ts +78 -24
- package/dist/types/types/Callbacks/ICallbackPayloads.d.ts +29 -0
- package/dist/types/types/Callbacks/IEmailCallbacks.d.ts +109 -0
- package/dist/types/types/ITopolOptions.d.ts +20 -38
- package/dist/types/types/ITopolPlugin.d.ts +7 -0
- package/dist/types/types/landing-page/ILandingPageEditorInstance.d.ts +19 -0
- package/dist/types/types/landing-page/ILandingPageOptions.d.ts +114 -0
- package/package.json +12 -6
package/LICENSE
CHANGED
package/dist/topol-plugin.es.js
CHANGED
|
@@ -1,129 +1,216 @@
|
|
|
1
|
-
function
|
|
1
|
+
function s(e) {
|
|
2
2
|
return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e;
|
|
3
3
|
}
|
|
4
|
-
var
|
|
4
|
+
var c = function(n, o, i) {
|
|
5
5
|
var l = document.head || document.getElementsByTagName("head")[0], t = document.createElement("script");
|
|
6
6
|
typeof o == "function" && (i = o, o = {}), o = o || {}, i = i || function() {
|
|
7
7
|
}, t.type = o.type || "text/javascript", t.charset = o.charset || "utf8", t.async = "async" in o ? !!o.async : !0, t.src = n, o.attrs && w(t, o.attrs), o.text && (t.text = "" + o.text);
|
|
8
|
-
var r = "onload" in t ?
|
|
9
|
-
r(t, i), t.onload ||
|
|
8
|
+
var r = "onload" in t ? g : p;
|
|
9
|
+
r(t, i), t.onload || g(t, i), l.appendChild(t);
|
|
10
10
|
};
|
|
11
11
|
function w(e, n) {
|
|
12
12
|
for (var o in n)
|
|
13
13
|
e.setAttribute(o, n[o]);
|
|
14
14
|
}
|
|
15
|
-
function
|
|
15
|
+
function g(e, n) {
|
|
16
16
|
e.onload = function() {
|
|
17
17
|
this.onerror = this.onload = null, n(null, e);
|
|
18
18
|
}, e.onerror = function() {
|
|
19
19
|
this.onerror = this.onload = null, n(new Error("Failed to load " + this.src), e);
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
|
-
function
|
|
22
|
+
function p(e, n) {
|
|
23
23
|
e.onreadystatechange = function() {
|
|
24
24
|
this.readyState != "complete" && this.readyState != "loaded" || (this.onreadystatechange = null, n(null, e));
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
|
-
const
|
|
27
|
+
const d = /* @__PURE__ */ s(c);
|
|
28
|
+
var u = { BASE_URL: "/", MODE: "production", DEV: !1, PROD: !0, SSR: !1 };
|
|
29
|
+
const a = {
|
|
30
|
+
production: u.VITE_TOPOL_URL,
|
|
31
|
+
dev: u.VITE_TOPOL_DEV_URL,
|
|
32
|
+
staging: u.VITE_TOPOL_STAGING_URL
|
|
33
|
+
}, P = "https://d10h8ga60f7b91.cloudfront.net/preview-app-{stage}/loader/build.js";
|
|
28
34
|
function T(e = "production") {
|
|
29
35
|
switch (e) {
|
|
30
36
|
case "dev":
|
|
31
|
-
return
|
|
37
|
+
return a.dev;
|
|
32
38
|
case "staging":
|
|
33
|
-
return
|
|
39
|
+
return a.staging;
|
|
34
40
|
case "production":
|
|
35
|
-
return a;
|
|
41
|
+
return a.production;
|
|
36
42
|
default:
|
|
37
|
-
return
|
|
43
|
+
return P.replace("{stage}", String(e));
|
|
38
44
|
}
|
|
39
45
|
}
|
|
40
|
-
async function
|
|
46
|
+
async function f(e) {
|
|
41
47
|
return new Promise((n, o) => {
|
|
42
|
-
|
|
43
|
-
i !== null
|
|
48
|
+
d(a.production, (i) => {
|
|
49
|
+
if (i !== null) {
|
|
50
|
+
o(i);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
window.TopolPlugin.init(e), n(!0);
|
|
44
54
|
});
|
|
45
55
|
});
|
|
46
56
|
}
|
|
47
|
-
const
|
|
57
|
+
const m = {
|
|
58
|
+
/**
|
|
59
|
+
* Initialize the Email Editor.
|
|
60
|
+
* @param topolOptions - Configuration options for the editor
|
|
61
|
+
* @param options - Plugin options including stage selection
|
|
62
|
+
* @returns Promise that resolves to true when the editor is ready
|
|
63
|
+
*/
|
|
48
64
|
init: (e, n) => new Promise((o, i) => {
|
|
49
65
|
const l = T(n == null ? void 0 : n.stage);
|
|
50
|
-
|
|
66
|
+
d(l, async (t) => {
|
|
51
67
|
if (t !== null) {
|
|
52
|
-
if (l !== a)
|
|
68
|
+
if (l !== a.production)
|
|
53
69
|
try {
|
|
54
|
-
return await
|
|
70
|
+
return await f(e), o(!0);
|
|
55
71
|
} catch (r) {
|
|
56
72
|
i(r);
|
|
57
73
|
}
|
|
58
74
|
i(t);
|
|
75
|
+
return;
|
|
59
76
|
}
|
|
60
77
|
window.TopolPlugin.init(e), o(!0);
|
|
61
78
|
});
|
|
62
79
|
}),
|
|
80
|
+
/** Trigger the save callback with current editor content */
|
|
63
81
|
save: () => {
|
|
64
82
|
window.TopolPlugin.save();
|
|
65
83
|
},
|
|
84
|
+
/** Load a template JSON into the editor */
|
|
66
85
|
load: (e) => {
|
|
67
86
|
window.TopolPlugin.load(e);
|
|
68
87
|
},
|
|
88
|
+
/** Toggle the preview mode */
|
|
69
89
|
togglePreview: () => {
|
|
70
90
|
window.TopolPlugin.togglePreview();
|
|
71
91
|
},
|
|
92
|
+
/** Toggle between desktop and mobile preview sizes */
|
|
72
93
|
togglePreviewSize: () => {
|
|
73
94
|
window.TopolPlugin.togglePreviewSize();
|
|
74
95
|
},
|
|
96
|
+
/** Select a file from the custom file manager */
|
|
75
97
|
chooseFile: (e) => {
|
|
76
98
|
window.TopolPlugin.chooseFile(e);
|
|
77
99
|
},
|
|
100
|
+
/** Undo the last action */
|
|
78
101
|
undo: () => {
|
|
79
102
|
window.TopolPlugin.undo();
|
|
80
103
|
},
|
|
104
|
+
/** Redo the last undone action */
|
|
81
105
|
redo: () => {
|
|
82
106
|
window.TopolPlugin.redo();
|
|
83
107
|
},
|
|
108
|
+
/** Destroy the editor instance and clean up resources */
|
|
84
109
|
destroy: () => {
|
|
85
110
|
window.TopolPlugin.destroy();
|
|
86
111
|
},
|
|
112
|
+
/** Update the list of saved/reusable blocks */
|
|
87
113
|
setSavedBlocks: (e) => {
|
|
88
114
|
window.TopolPlugin.setSavedBlocks(e);
|
|
89
115
|
},
|
|
116
|
+
/** Set custom HTML for the preview */
|
|
90
117
|
setPreviewHTML: (e) => {
|
|
91
118
|
window.TopolPlugin.setPreviewHTML(e);
|
|
92
119
|
},
|
|
120
|
+
/** Display a notification in the editor */
|
|
93
121
|
createNotification: (e) => {
|
|
94
122
|
window.TopolPlugin.createNotification(e);
|
|
95
123
|
},
|
|
124
|
+
/** Set the list of active collaboration members */
|
|
96
125
|
setActiveMembers: (e) => {
|
|
97
126
|
window.TopolPlugin.setActiveMembers(e);
|
|
98
127
|
},
|
|
128
|
+
/** Switch to mobile view */
|
|
99
129
|
changeEmailToMobile: () => {
|
|
100
130
|
window.TopolPlugin.changeEmailToMobile();
|
|
101
131
|
},
|
|
132
|
+
/** Switch to desktop view */
|
|
102
133
|
changeEmailToDesktop: () => {
|
|
103
134
|
window.TopolPlugin.changeEmailToDesktop();
|
|
104
135
|
},
|
|
136
|
+
/** Toggle visibility of hidden blocks and structures */
|
|
105
137
|
toggleBlocksAndStructuresVisibility: () => {
|
|
106
138
|
window.TopolPlugin.toggleBlocksAndStructuresVisibility();
|
|
107
139
|
},
|
|
140
|
+
/** Update the content of a custom block */
|
|
108
141
|
updateCustomBlockContent: (e) => {
|
|
109
142
|
window.TopolPlugin.updateCustomBlockContent(e);
|
|
110
143
|
},
|
|
144
|
+
/** Refresh comments/conversations */
|
|
111
145
|
refreshComments: (e) => {
|
|
112
146
|
window.TopolPlugin.refreshComments(e);
|
|
113
147
|
},
|
|
148
|
+
/** Refresh synced rows */
|
|
114
149
|
refreshSyncedRows: () => {
|
|
115
150
|
window.TopolPlugin.refreshSyncedRows();
|
|
116
151
|
},
|
|
152
|
+
/** Open the premade templates selection modal */
|
|
117
153
|
openPremadeTemplatesSelection: () => {
|
|
118
154
|
window.TopolPlugin.openPremadeTemplatesSelection();
|
|
119
155
|
},
|
|
156
|
+
/** Update the API authorization header */
|
|
120
157
|
updateApiAuthorizationHeader: (e) => {
|
|
121
158
|
window.TopolPlugin.updateApiAuthorizationHeader(e);
|
|
122
159
|
},
|
|
160
|
+
/** Set the template name/title */
|
|
123
161
|
setTemplateName: (e) => {
|
|
124
162
|
window.TopolPlugin.setTemplateName(e);
|
|
163
|
+
},
|
|
164
|
+
/** Toggle the AI chat feature */
|
|
165
|
+
toggleChatAI: () => {
|
|
166
|
+
window.TopolPlugin.toggleChatAI();
|
|
167
|
+
},
|
|
168
|
+
/** Toggle the autosaves feature */
|
|
169
|
+
toggleAutosaves: () => {
|
|
170
|
+
window.TopolPlugin.toggleAutosaves();
|
|
171
|
+
},
|
|
172
|
+
/** Toggle the comments panel */
|
|
173
|
+
toggleComments: () => {
|
|
174
|
+
window.TopolPlugin.toggleComments();
|
|
175
|
+
},
|
|
176
|
+
/** Create a new language variant */
|
|
177
|
+
createLanguage: (e) => {
|
|
178
|
+
window.TopolPlugin.createLanguage(e);
|
|
179
|
+
},
|
|
180
|
+
/** Set the primary language */
|
|
181
|
+
setPrimaryLanguage: (e) => {
|
|
182
|
+
window.TopolPlugin.setPrimaryLanguage(e);
|
|
183
|
+
},
|
|
184
|
+
/** Delete a language variant */
|
|
185
|
+
deleteLanguage: (e) => {
|
|
186
|
+
window.TopolPlugin.deleteLanguage(e);
|
|
187
|
+
},
|
|
188
|
+
/** Select/switch to a language */
|
|
189
|
+
selectLanguage: (e) => {
|
|
190
|
+
window.TopolPlugin.selectLanguage(e);
|
|
125
191
|
}
|
|
126
|
-
}
|
|
192
|
+
}, h = "https://v1.page-assets.topol.io/topol-lpe.js", E = {
|
|
193
|
+
/**
|
|
194
|
+
* Inits Landing Page Editor.
|
|
195
|
+
*
|
|
196
|
+
* @param options - Configuration options for the editor
|
|
197
|
+
* @param pluginOptions - Plugin options (reserved for future staging/dev URL support)
|
|
198
|
+
* @returns Promise that resolves with the editor instance
|
|
199
|
+
*/
|
|
200
|
+
init: (e, n) => new Promise((o, i) => {
|
|
201
|
+
d(h, (l) => {
|
|
202
|
+
if (l !== null) {
|
|
203
|
+
i(l);
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
const t = window.LandingPageEditor(e);
|
|
207
|
+
o(t);
|
|
208
|
+
});
|
|
209
|
+
})
|
|
210
|
+
}, v = m;
|
|
127
211
|
export {
|
|
128
|
-
|
|
212
|
+
m as EmailEditor,
|
|
213
|
+
E as LandingPageEditor,
|
|
214
|
+
v as TopolPlugin,
|
|
215
|
+
v as default
|
|
129
216
|
};
|
package/dist/topol-plugin.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(l,
|
|
1
|
+
(function(l,u){typeof exports=="object"&&typeof module<"u"?u(exports):typeof define=="function"&&define.amd?define(["exports"],u):(l=typeof globalThis<"u"?globalThis:l||self,u(l["topol-plugin"]={}))})(this,function(l){"use strict";function u(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var T=function(n,o,i){var a=document.head||document.getElementsByTagName("head")[0],t=document.createElement("script");typeof o=="function"&&(i=o,o={}),o=o||{},i=i||function(){},t.type=o.type||"text/javascript",t.charset=o.charset||"utf8",t.async="async"in o?!!o.async:!0,t.src=n,o.attrs&&P(t,o.attrs),o.text&&(t.text=""+o.text);var s="onload"in t?c:f;s(t,i),t.onload||c(t,i),a.appendChild(t)};function P(e,n){for(var o in n)e.setAttribute(o,n[o])}function c(e,n){e.onload=function(){this.onerror=this.onload=null,n(null,e)},e.onerror=function(){this.onerror=this.onload=null,n(new Error("Failed to load "+this.src),e)}}function f(e,n){e.onreadystatechange=function(){this.readyState!="complete"&&this.readyState!="loaded"||(this.onreadystatechange=null,n(null,e))}}const d=u(T);var g={BASE_URL:"/",MODE:"production",DEV:!1,PROD:!0,SSR:!1};const r={production:g.VITE_TOPOL_URL,dev:g.VITE_TOPOL_DEV_URL,staging:g.VITE_TOPOL_STAGING_URL},m="https://d10h8ga60f7b91.cloudfront.net/preview-app-{stage}/loader/build.js";function h(e="production"){switch(e){case"dev":return r.dev;case"staging":return r.staging;case"production":return r.production;default:return m.replace("{stage}",String(e))}}async function E(e){return new Promise((n,o)=>{d(r.production,i=>{if(i!==null){o(i);return}window.TopolPlugin.init(e),n(!0)})})}const w={init:(e,n)=>new Promise((o,i)=>{const a=h(n==null?void 0:n.stage);d(a,async t=>{if(t!==null){if(a!==r.production)try{return await E(e),o(!0)}catch(s){i(s)}i(t);return}window.TopolPlugin.init(e),o(!0)})}),save:()=>{window.TopolPlugin.save()},load:e=>{window.TopolPlugin.load(e)},togglePreview:()=>{window.TopolPlugin.togglePreview()},togglePreviewSize:()=>{window.TopolPlugin.togglePreviewSize()},chooseFile:e=>{window.TopolPlugin.chooseFile(e)},undo:()=>{window.TopolPlugin.undo()},redo:()=>{window.TopolPlugin.redo()},destroy:()=>{window.TopolPlugin.destroy()},setSavedBlocks:e=>{window.TopolPlugin.setSavedBlocks(e)},setPreviewHTML:e=>{window.TopolPlugin.setPreviewHTML(e)},createNotification:e=>{window.TopolPlugin.createNotification(e)},setActiveMembers:e=>{window.TopolPlugin.setActiveMembers(e)},changeEmailToMobile:()=>{window.TopolPlugin.changeEmailToMobile()},changeEmailToDesktop:()=>{window.TopolPlugin.changeEmailToDesktop()},toggleBlocksAndStructuresVisibility:()=>{window.TopolPlugin.toggleBlocksAndStructuresVisibility()},updateCustomBlockContent:e=>{window.TopolPlugin.updateCustomBlockContent(e)},refreshComments:e=>{window.TopolPlugin.refreshComments(e)},refreshSyncedRows:()=>{window.TopolPlugin.refreshSyncedRows()},openPremadeTemplatesSelection:()=>{window.TopolPlugin.openPremadeTemplatesSelection()},updateApiAuthorizationHeader:e=>{window.TopolPlugin.updateApiAuthorizationHeader(e)},setTemplateName:e=>{window.TopolPlugin.setTemplateName(e)},toggleChatAI:()=>{window.TopolPlugin.toggleChatAI()},toggleAutosaves:()=>{window.TopolPlugin.toggleAutosaves()},toggleComments:()=>{window.TopolPlugin.toggleComments()},createLanguage:e=>{window.TopolPlugin.createLanguage(e)},setPrimaryLanguage:e=>{window.TopolPlugin.setPrimaryLanguage(e)},deleteLanguage:e=>{window.TopolPlugin.deleteLanguage(e)},selectLanguage:e=>{window.TopolPlugin.selectLanguage(e)}},v="https://v1.page-assets.topol.io/topol-lpe.js",y={init:(e,n)=>new Promise((o,i)=>{d(v,a=>{if(a!==null){i(a);return}const t=window.LandingPageEditor(e);o(t)})})},p=w;l.EmailEditor=w,l.LandingPageEditor=y,l.TopolPlugin=p,l.default=p,Object.defineProperties(l,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loads a script from a URL with optional fallback.
|
|
3
|
+
* @param url - Primary URL to load
|
|
4
|
+
* @param fallbackUrl - Optional fallback URL if primary fails
|
|
5
|
+
* @returns Promise that resolves when script is loaded
|
|
6
|
+
*/
|
|
7
|
+
export declare function loadScriptWithFallback(url: string, fallbackUrl?: string): Promise<void>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const EMAIL_EDITOR_URLS: {
|
|
2
|
+
readonly production: string;
|
|
3
|
+
readonly dev: string;
|
|
4
|
+
readonly staging: string;
|
|
5
|
+
};
|
|
6
|
+
export declare const EMAIL_EDITOR_PREVIEW_URL_PATTERN = "https://d10h8ga60f7b91.cloudfront.net/preview-app-{stage}/loader/build.js";
|
|
7
|
+
export declare const EMAIL_EDITOR_HTML_ID = "topol-editor";
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import type ITopolOptions from "../../types/ITopolOptions";
|
|
2
|
+
import type ITopolPlugin from "../../types/ITopolPlugin";
|
|
3
|
+
import type INotification from "../../types/Notification/INotification";
|
|
4
|
+
import type ISavedBlock from "../../types/SavedBlock/ISavedBlock";
|
|
5
|
+
import { Stage } from "../../types/Stage";
|
|
6
|
+
declare global {
|
|
7
|
+
interface Window {
|
|
8
|
+
TopolPlugin: ITopolPlugin;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export interface EmailEditorPluginOptions {
|
|
12
|
+
stage?: Stage;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Email Editor - Create rich email templates with drag-and-drop editing.
|
|
16
|
+
*
|
|
17
|
+
* This is the main Email Editor integration that loads the Topol Email Editor
|
|
18
|
+
* into your application.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* import { EmailEditor } from '@topol.io/editor';
|
|
23
|
+
*
|
|
24
|
+
* await EmailEditor.init({
|
|
25
|
+
* id: '#editor',
|
|
26
|
+
* authorize: { apiKey: 'your-key', userId: 'user-123' },
|
|
27
|
+
* callbacks: {
|
|
28
|
+
* onSave(json, html) { console.log('Saved:', json); }
|
|
29
|
+
* }
|
|
30
|
+
* });
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare const EmailEditor: {
|
|
34
|
+
/**
|
|
35
|
+
* Initialize the Email Editor.
|
|
36
|
+
* @param topolOptions - Configuration options for the editor
|
|
37
|
+
* @param options - Plugin options including stage selection
|
|
38
|
+
* @returns Promise that resolves to true when the editor is ready
|
|
39
|
+
*/
|
|
40
|
+
init: (topolOptions: ITopolOptions, options?: EmailEditorPluginOptions) => Promise<boolean | string>;
|
|
41
|
+
/** Trigger the save callback with current editor content */
|
|
42
|
+
save: () => void;
|
|
43
|
+
/** Load a template JSON into the editor */
|
|
44
|
+
load: (json: unknown) => void;
|
|
45
|
+
/** Toggle the preview mode */
|
|
46
|
+
togglePreview: () => void;
|
|
47
|
+
/** Toggle between desktop and mobile preview sizes */
|
|
48
|
+
togglePreviewSize: () => void;
|
|
49
|
+
/** Select a file from the custom file manager */
|
|
50
|
+
chooseFile: (url: string) => void;
|
|
51
|
+
/** Undo the last action */
|
|
52
|
+
undo: () => void;
|
|
53
|
+
/** Redo the last undone action */
|
|
54
|
+
redo: () => void;
|
|
55
|
+
/** Destroy the editor instance and clean up resources */
|
|
56
|
+
destroy: () => void;
|
|
57
|
+
/** Update the list of saved/reusable blocks */
|
|
58
|
+
setSavedBlocks: (savedBlocks: ISavedBlock[]) => void;
|
|
59
|
+
/** Set custom HTML for the preview */
|
|
60
|
+
setPreviewHTML: (html: unknown) => void;
|
|
61
|
+
/** Display a notification in the editor */
|
|
62
|
+
createNotification: (notification: INotification) => void;
|
|
63
|
+
/** Set the list of active collaboration members */
|
|
64
|
+
setActiveMembers: (activeMembers: string[]) => void;
|
|
65
|
+
/** Switch to mobile view */
|
|
66
|
+
changeEmailToMobile: () => void;
|
|
67
|
+
/** Switch to desktop view */
|
|
68
|
+
changeEmailToDesktop: () => void;
|
|
69
|
+
/** Toggle visibility of hidden blocks and structures */
|
|
70
|
+
toggleBlocksAndStructuresVisibility: () => void;
|
|
71
|
+
/** Update the content of a custom block */
|
|
72
|
+
updateCustomBlockContent: (content: string) => void;
|
|
73
|
+
/** Refresh comments/conversations */
|
|
74
|
+
refreshComments: (key: string) => void;
|
|
75
|
+
/** Refresh synced rows */
|
|
76
|
+
refreshSyncedRows: () => void;
|
|
77
|
+
/** Open the premade templates selection modal */
|
|
78
|
+
openPremadeTemplatesSelection: () => void;
|
|
79
|
+
/** Update the API authorization header */
|
|
80
|
+
updateApiAuthorizationHeader: (newHeader: string | Record<string, string>) => void;
|
|
81
|
+
/** Set the template name/title */
|
|
82
|
+
setTemplateName: (name: string) => void;
|
|
83
|
+
/** Toggle the AI chat feature */
|
|
84
|
+
toggleChatAI: () => void;
|
|
85
|
+
/** Toggle the autosaves feature */
|
|
86
|
+
toggleAutosaves: () => void;
|
|
87
|
+
/** Toggle the comments panel */
|
|
88
|
+
toggleComments: () => void;
|
|
89
|
+
/** Create a new language variant */
|
|
90
|
+
createLanguage: (lang: string) => void;
|
|
91
|
+
/** Set the primary language */
|
|
92
|
+
setPrimaryLanguage: (lang: string) => void;
|
|
93
|
+
/** Delete a language variant */
|
|
94
|
+
deleteLanguage: (lang: string) => void;
|
|
95
|
+
/** Select/switch to a language */
|
|
96
|
+
selectLanguage: (lang: string) => void;
|
|
97
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const LANDING_PAGE_EDITOR_URL = "https://v1.page-assets.topol.io/topol-lpe.js";
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type ILandingPageOptions from "../../types/landing-page/ILandingPageOptions";
|
|
2
|
+
import type ILandingPageEditorInstance from "../../types/landing-page/ILandingPageEditorInstance";
|
|
3
|
+
import { Stage } from "../../types/Stage";
|
|
4
|
+
type LandingPageEditorFactory = (options: ILandingPageOptions) => ILandingPageEditorInstance;
|
|
5
|
+
declare global {
|
|
6
|
+
interface Window {
|
|
7
|
+
LandingPageEditor: LandingPageEditorFactory;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export interface LandingPageEditorPluginOptions {
|
|
11
|
+
/**
|
|
12
|
+
* Stage/environment to use. Currently only 'production' is supported for LPE.
|
|
13
|
+
* This is reserved for future staging/dev URL support.
|
|
14
|
+
*/
|
|
15
|
+
stage?: Stage;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Landing Page Editor - Create landing pages with drag-and-drop editing.
|
|
19
|
+
*
|
|
20
|
+
* This integration loads the Topol Landing Page Editor into your application.
|
|
21
|
+
* Unlike the Email Editor, this creates an instance that you can interact with.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* import { LandingPageEditor } from '@topol.io/editor';
|
|
26
|
+
*
|
|
27
|
+
* const editor = await LandingPageEditor.init({
|
|
28
|
+
* config: {
|
|
29
|
+
* authorize: { apiKey: 'your-key', userId: 'user-123' },
|
|
30
|
+
* },
|
|
31
|
+
* onSave(json, html) { console.log('Saved:', json, html); },
|
|
32
|
+
* onLoaded() { console.log('Editor loaded'); }
|
|
33
|
+
* });
|
|
34
|
+
*
|
|
35
|
+
* // Render the editor into a container
|
|
36
|
+
* editor.render('#landing-page-editor');
|
|
37
|
+
*
|
|
38
|
+
* // Optionally load a template
|
|
39
|
+
* editor.load(templateJson);
|
|
40
|
+
*
|
|
41
|
+
* // Clean up when done
|
|
42
|
+
* editor.destroy();
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare const LandingPageEditor: {
|
|
46
|
+
/**
|
|
47
|
+
* Inits Landing Page Editor.
|
|
48
|
+
*
|
|
49
|
+
* @param options - Configuration options for the editor
|
|
50
|
+
* @param pluginOptions - Plugin options (reserved for future staging/dev URL support)
|
|
51
|
+
* @returns Promise that resolves with the editor instance
|
|
52
|
+
*/
|
|
53
|
+
init: (options: ILandingPageOptions, pluginOptions?: LandingPageEditorPluginOptions) => Promise<ILandingPageEditorInstance>;
|
|
54
|
+
};
|
|
55
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import z from "zod";
|
|
2
|
+
export declare const ContextMessageSchema: z.ZodObject<{
|
|
3
|
+
prompt: z.ZodString;
|
|
4
|
+
answer: z.ZodString;
|
|
5
|
+
}, z.core.$strip>;
|
|
6
|
+
export declare const ContextSchema: z.ZodObject<{
|
|
7
|
+
blockId: z.ZodNullable<z.ZodString>;
|
|
8
|
+
messages: z.ZodArray<z.ZodObject<{
|
|
9
|
+
prompt: z.ZodString;
|
|
10
|
+
answer: z.ZodString;
|
|
11
|
+
}, z.core.$strip>>;
|
|
12
|
+
defaultText: z.ZodString;
|
|
13
|
+
}, z.core.$strip>;
|
|
14
|
+
export type IContextMessage = z.infer<typeof ContextMessageSchema>;
|
|
15
|
+
export type IContext = z.infer<typeof ContextSchema>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import z from "zod";
|
|
2
|
+
export declare const ApiSchema: z.ZodObject<{
|
|
3
|
+
AUTOSAVE: z.ZodOptional<z.ZodString>;
|
|
4
|
+
AUTOSAVES: z.ZodOptional<z.ZodString>;
|
|
5
|
+
GET_AUTOSAVE: z.ZodOptional<z.ZodString>;
|
|
6
|
+
CONVERSATIONS: z.ZodOptional<z.ZodString>;
|
|
7
|
+
COMMENTS: z.ZodOptional<z.ZodString>;
|
|
8
|
+
IMAGE_UPLOAD: z.ZodOptional<z.ZodString>;
|
|
9
|
+
IMAGE_EDITOR_UPLOAD: z.ZodOptional<z.ZodString>;
|
|
10
|
+
FOLDERS: z.ZodOptional<z.ZodString>;
|
|
11
|
+
LOAD: z.ZodOptional<z.ZodString>;
|
|
12
|
+
PREVIEW: z.ZodOptional<z.ZodString>;
|
|
13
|
+
PRODUCTS: z.ZodOptional<z.ZodString>;
|
|
14
|
+
SAVE: z.ZodOptional<z.ZodString>;
|
|
15
|
+
SYNCED_SECTIONS: z.ZodOptional<z.ZodString>;
|
|
16
|
+
SAVED_BLOCKS: z.ZodOptional<z.ZodString>;
|
|
17
|
+
TEST_EMAIL: z.ZodOptional<z.ZodString>;
|
|
18
|
+
PREMADE_TEMPLATES: z.ZodOptional<z.ZodString>;
|
|
19
|
+
PREMADE_TEMPLATE_CATEGORIES: z.ZodOptional<z.ZodString>;
|
|
20
|
+
PREMADE_TEMPLATES_KEYWORDS: z.ZodOptional<z.ZodString>;
|
|
21
|
+
}, z.core.$strip>;
|
|
22
|
+
export declare const LockedApiSchema: z.ZodObject<{
|
|
23
|
+
AUTHORIZE: z.ZodString;
|
|
24
|
+
GCS_SIGNED_URL: z.ZodString;
|
|
25
|
+
GENERATE_CHAT: z.ZodString;
|
|
26
|
+
GENERATE_IMAGE: z.ZodString;
|
|
27
|
+
GENERATE_TEXT: z.ZodString;
|
|
28
|
+
GIPHY_API_KEY: z.ZodString;
|
|
29
|
+
GIPHY_SEARCH: z.ZodString;
|
|
30
|
+
SAVE_SERVER: z.ZodString;
|
|
31
|
+
}, z.core.$strip>;
|
|
32
|
+
export type IAPI = z.infer<typeof ApiSchema>;
|
|
33
|
+
export type ILockedAPI = z.infer<typeof LockedApiSchema>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import z from "zod";
|
|
2
|
+
export declare const AutosaveSchema: z.ZodObject<{
|
|
3
|
+
key: z.ZodString;
|
|
4
|
+
time: z.ZodString;
|
|
5
|
+
uid: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
|
|
6
|
+
created_by: z.ZodCatch<z.ZodOptional<z.ZodObject<{
|
|
7
|
+
user_id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
|
|
8
|
+
name: z.ZodString;
|
|
9
|
+
profile_photo_url: z.ZodString;
|
|
10
|
+
}, z.core.$strip>>>;
|
|
11
|
+
}, z.core.$strip>;
|
|
12
|
+
export declare const AutosavesSchema: z.ZodArray<z.ZodObject<{
|
|
13
|
+
key: z.ZodString;
|
|
14
|
+
time: z.ZodString;
|
|
15
|
+
uid: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
|
|
16
|
+
created_by: z.ZodCatch<z.ZodOptional<z.ZodObject<{
|
|
17
|
+
user_id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
|
|
18
|
+
name: z.ZodString;
|
|
19
|
+
profile_photo_url: z.ZodString;
|
|
20
|
+
}, z.core.$strip>>>;
|
|
21
|
+
}, z.core.$strip>>;
|
|
22
|
+
export declare const GroupedAutosavesSchema: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodObject<{
|
|
23
|
+
key: z.ZodString;
|
|
24
|
+
time: z.ZodString;
|
|
25
|
+
uid: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
|
|
26
|
+
created_by: z.ZodCatch<z.ZodOptional<z.ZodObject<{
|
|
27
|
+
user_id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
|
|
28
|
+
name: z.ZodString;
|
|
29
|
+
profile_photo_url: z.ZodString;
|
|
30
|
+
}, z.core.$strip>>>;
|
|
31
|
+
}, z.core.$strip>>>;
|
|
32
|
+
export type IAutosaves = z.infer<typeof AutosavesSchema>;
|
|
33
|
+
export type IGroupedAutosaves = z.infer<typeof GroupedAutosavesSchema>;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import z from "zod";
|
|
2
|
+
export declare const ReactionSchema: z.ZodObject<{
|
|
3
|
+
created_by: z.ZodObject<{
|
|
4
|
+
user_id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
|
|
5
|
+
name: z.ZodString;
|
|
6
|
+
profile_photo_url: z.ZodString;
|
|
7
|
+
}, z.core.$strip>;
|
|
8
|
+
type: z.ZodString;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
export declare const CommentSchema: z.ZodObject<{
|
|
11
|
+
id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
|
|
12
|
+
created_by: z.ZodObject<{
|
|
13
|
+
user_id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
|
|
14
|
+
name: z.ZodString;
|
|
15
|
+
profile_photo_url: z.ZodString;
|
|
16
|
+
}, z.core.$strip>;
|
|
17
|
+
created_at: z.ZodString;
|
|
18
|
+
read_by: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
|
|
19
|
+
content: z.ZodString;
|
|
20
|
+
reactions: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
21
|
+
created_by: z.ZodObject<{
|
|
22
|
+
user_id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
|
|
23
|
+
name: z.ZodString;
|
|
24
|
+
profile_photo_url: z.ZodString;
|
|
25
|
+
}, z.core.$strip>;
|
|
26
|
+
type: z.ZodString;
|
|
27
|
+
}, z.core.$strip>>>;
|
|
28
|
+
}, z.core.$strip>;
|
|
29
|
+
export declare const ConversationSchema: z.ZodObject<{
|
|
30
|
+
comments: z.ZodArray<z.ZodObject<{
|
|
31
|
+
id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
|
|
32
|
+
created_by: z.ZodObject<{
|
|
33
|
+
user_id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
|
|
34
|
+
name: z.ZodString;
|
|
35
|
+
profile_photo_url: z.ZodString;
|
|
36
|
+
}, z.core.$strip>;
|
|
37
|
+
created_at: z.ZodString;
|
|
38
|
+
read_by: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
|
|
39
|
+
content: z.ZodString;
|
|
40
|
+
reactions: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
41
|
+
created_by: z.ZodObject<{
|
|
42
|
+
user_id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
|
|
43
|
+
name: z.ZodString;
|
|
44
|
+
profile_photo_url: z.ZodString;
|
|
45
|
+
}, z.core.$strip>;
|
|
46
|
+
type: z.ZodString;
|
|
47
|
+
}, z.core.$strip>>>;
|
|
48
|
+
}, z.core.$strip>>;
|
|
49
|
+
key: z.ZodString;
|
|
50
|
+
type: z.ZodUnion<readonly [z.ZodLiteral<"block">, z.ZodLiteral<"section">]>;
|
|
51
|
+
involved_users: z.ZodCatch<z.ZodArray<z.ZodObject<{
|
|
52
|
+
user_id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
|
|
53
|
+
name: z.ZodString;
|
|
54
|
+
profile_photo_url: z.ZodString;
|
|
55
|
+
}, z.core.$strip>>>;
|
|
56
|
+
resolved: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<0>, z.ZodLiteral<1>]>>;
|
|
57
|
+
delete: z.ZodOptional<z.ZodBoolean>;
|
|
58
|
+
}, z.core.$strip>;
|
|
59
|
+
export declare const ConversationsSchema: z.ZodArray<z.ZodObject<{
|
|
60
|
+
comments: z.ZodArray<z.ZodObject<{
|
|
61
|
+
id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
|
|
62
|
+
created_by: z.ZodObject<{
|
|
63
|
+
user_id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
|
|
64
|
+
name: z.ZodString;
|
|
65
|
+
profile_photo_url: z.ZodString;
|
|
66
|
+
}, z.core.$strip>;
|
|
67
|
+
created_at: z.ZodString;
|
|
68
|
+
read_by: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
|
|
69
|
+
content: z.ZodString;
|
|
70
|
+
reactions: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
71
|
+
created_by: z.ZodObject<{
|
|
72
|
+
user_id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
|
|
73
|
+
name: z.ZodString;
|
|
74
|
+
profile_photo_url: z.ZodString;
|
|
75
|
+
}, z.core.$strip>;
|
|
76
|
+
type: z.ZodString;
|
|
77
|
+
}, z.core.$strip>>>;
|
|
78
|
+
}, z.core.$strip>>;
|
|
79
|
+
key: z.ZodString;
|
|
80
|
+
type: z.ZodUnion<readonly [z.ZodLiteral<"block">, z.ZodLiteral<"section">]>;
|
|
81
|
+
involved_users: z.ZodCatch<z.ZodArray<z.ZodObject<{
|
|
82
|
+
user_id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
|
|
83
|
+
name: z.ZodString;
|
|
84
|
+
profile_photo_url: z.ZodString;
|
|
85
|
+
}, z.core.$strip>>>;
|
|
86
|
+
resolved: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<0>, z.ZodLiteral<1>]>>;
|
|
87
|
+
delete: z.ZodOptional<z.ZodBoolean>;
|
|
88
|
+
}, z.core.$strip>>;
|
|
89
|
+
export type IReaction = z.infer<typeof ReactionSchema>;
|
|
90
|
+
export type IComment = z.infer<typeof CommentSchema>;
|
|
91
|
+
export type IConversation = z.infer<typeof ConversationSchema>;
|