@react-email/editor 0.0.0-experimental.4 → 0.0.0-experimental.41
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/core/index.cjs +9 -0
- package/dist/core/index.d.cts +2 -0
- package/dist/core/index.d.mts +3 -0
- package/dist/core/index.mjs +4 -0
- package/dist/create-paste-handler-B8BtjBk3.d.cts +14 -0
- package/dist/create-paste-handler-B8BtjBk3.d.cts.map +1 -0
- package/dist/create-paste-handler-CGR738bC.d.mts +14 -0
- package/dist/create-paste-handler-CGR738bC.d.mts.map +1 -0
- package/dist/event-bus-CHEzOS_O.mjs +329 -0
- package/dist/event-bus-CHEzOS_O.mjs.map +1 -0
- package/dist/event-bus-fb8U7hrl.cjs +450 -0
- package/dist/extension-DyY8_bh4.mjs +1110 -0
- package/dist/extension-DyY8_bh4.mjs.map +1 -0
- package/dist/extension-w5VaUeSw.cjs +1235 -0
- package/dist/extensions/index.cjs +51 -0
- package/dist/extensions/index.d.cts +399 -0
- package/dist/extensions/index.d.cts.map +1 -0
- package/dist/extensions/index.d.mts +400 -0
- package/dist/extensions/index.d.mts.map +1 -0
- package/dist/extensions/index.mjs +5 -0
- package/dist/extensions-BvfmaKCn.mjs +2088 -0
- package/dist/extensions-BvfmaKCn.mjs.map +1 -0
- package/dist/extensions-CkjPj2JO.cjs +2369 -0
- package/dist/global-content-D_WYaFgX.mjs +78 -0
- package/dist/global-content-D_WYaFgX.mjs.map +1 -0
- package/dist/global-content-bJgotqmA.cjs +89 -0
- package/dist/index-C4KcMQ0R.d.cts +161 -0
- package/dist/index-C4KcMQ0R.d.cts.map +1 -0
- package/dist/index-CxX7W63O.d.mts +161 -0
- package/dist/index-CxX7W63O.d.mts.map +1 -0
- package/dist/index.cjs +74 -0
- package/dist/index.css +832 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.cts +33 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +31 -277
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +64 -1377
- package/dist/index.mjs.map +1 -1
- package/dist/plugins/index.cjs +23 -0
- package/dist/plugins/index.d.cts +191 -0
- package/dist/plugins/index.d.cts.map +1 -0
- package/dist/plugins/index.d.mts +191 -0
- package/dist/plugins/index.d.mts.map +1 -0
- package/dist/plugins/index.mjs +3 -0
- package/dist/root-Jq1R3tkX.cjs +2832 -0
- package/dist/root-pS4l8bVZ.mjs +2316 -0
- package/dist/root-pS4l8bVZ.mjs.map +1 -0
- package/dist/set-text-alignment-Cv72txmv.cjs +24 -0
- package/dist/set-text-alignment-OA8IMWmO.mjs +19 -0
- package/dist/set-text-alignment-OA8IMWmO.mjs.map +1 -0
- package/dist/styles-C-cCyJCn.cjs +211 -0
- package/dist/styles-_TMw3YxC.mjs +194 -0
- package/dist/styles-_TMw3YxC.mjs.map +1 -0
- package/dist/ui/bubble-menu/bubble-menu.css +285 -0
- package/dist/ui/index.cjs +147 -0
- package/dist/ui/index.d.cts +939 -0
- package/dist/ui/index.d.cts.map +1 -0
- package/dist/ui/index.d.mts +939 -0
- package/dist/ui/index.d.mts.map +1 -0
- package/dist/ui/index.mjs +60 -0
- package/dist/ui/index.mjs.map +1 -0
- package/dist/ui/slash-command/slash-command.css +44 -0
- package/dist/ui/themes/default.css +830 -0
- package/dist/utils/index.cjs +3 -0
- package/dist/utils/index.d.cts +7 -0
- package/dist/utils/index.d.cts.map +1 -0
- package/dist/utils/index.d.mts +7 -0
- package/dist/utils/index.d.mts.map +1 -0
- package/dist/utils/index.mjs +3 -0
- package/package.json +109 -21
- package/dist/index.d.ts +0 -279
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -1436
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Node, mergeAttributes } from "@tiptap/core";
|
|
2
|
+
|
|
3
|
+
//#region src/extensions/global-content.ts
|
|
4
|
+
const GLOBAL_CONTENT_NODE_TYPE = "globalContent";
|
|
5
|
+
let cachedGlobalPosition = null;
|
|
6
|
+
function findGlobalContentPositions(doc) {
|
|
7
|
+
const positions = [];
|
|
8
|
+
doc.descendants((node, position) => {
|
|
9
|
+
if (node.type.name === GLOBAL_CONTENT_NODE_TYPE) positions.push(position);
|
|
10
|
+
});
|
|
11
|
+
return positions;
|
|
12
|
+
}
|
|
13
|
+
function getCachedGlobalContentPosition(doc) {
|
|
14
|
+
if (cachedGlobalPosition != null) try {
|
|
15
|
+
if (doc.nodeAt(cachedGlobalPosition)?.type.name === GLOBAL_CONTENT_NODE_TYPE) return cachedGlobalPosition;
|
|
16
|
+
} catch {
|
|
17
|
+
cachedGlobalPosition = null;
|
|
18
|
+
}
|
|
19
|
+
cachedGlobalPosition = findGlobalContentPositions(doc)[0] ?? null;
|
|
20
|
+
return cachedGlobalPosition;
|
|
21
|
+
}
|
|
22
|
+
function getGlobalContent(key, editor) {
|
|
23
|
+
const position = getCachedGlobalContentPosition(editor.state.doc);
|
|
24
|
+
if (cachedGlobalPosition == null) return null;
|
|
25
|
+
return editor.state.doc.nodeAt(position)?.attrs.data[key] ?? null;
|
|
26
|
+
}
|
|
27
|
+
const GlobalContent = Node.create({
|
|
28
|
+
name: GLOBAL_CONTENT_NODE_TYPE,
|
|
29
|
+
addOptions() {
|
|
30
|
+
return {
|
|
31
|
+
key: GLOBAL_CONTENT_NODE_TYPE,
|
|
32
|
+
data: {}
|
|
33
|
+
};
|
|
34
|
+
},
|
|
35
|
+
group: "block",
|
|
36
|
+
selectable: false,
|
|
37
|
+
draggable: false,
|
|
38
|
+
atom: true,
|
|
39
|
+
addAttributes() {
|
|
40
|
+
return { data: { default: this.options.data } };
|
|
41
|
+
},
|
|
42
|
+
parseHTML() {
|
|
43
|
+
return [{ tag: `div[data-type="${this.name}"]` }];
|
|
44
|
+
},
|
|
45
|
+
renderHTML({ HTMLAttributes }) {
|
|
46
|
+
return ["div", mergeAttributes(HTMLAttributes, {
|
|
47
|
+
"data-type": this.name,
|
|
48
|
+
style: "width: 100%; height: 1px; visibility: hidden; background-color: transparent;"
|
|
49
|
+
})];
|
|
50
|
+
},
|
|
51
|
+
addCommands() {
|
|
52
|
+
return { setGlobalContent: (key, value) => ({ tr, dispatch }) => {
|
|
53
|
+
const ensureGlobalPosition = () => {
|
|
54
|
+
const positions = findGlobalContentPositions(tr.doc);
|
|
55
|
+
for (let i = positions.length - 1; i > 0; i--) tr.delete(positions[i], positions[i] + 1);
|
|
56
|
+
const pos = positions[0] ?? -1;
|
|
57
|
+
if (pos >= 0) cachedGlobalPosition = pos;
|
|
58
|
+
else {
|
|
59
|
+
cachedGlobalPosition = 0;
|
|
60
|
+
tr.insert(0, this.type.create());
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
if (dispatch) {
|
|
64
|
+
ensureGlobalPosition();
|
|
65
|
+
if (cachedGlobalPosition == null) return false;
|
|
66
|
+
tr.setNodeAttribute(cachedGlobalPosition, "data", {
|
|
67
|
+
...tr.doc.nodeAt(cachedGlobalPosition)?.attrs.data,
|
|
68
|
+
[key]: value
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return true;
|
|
72
|
+
} };
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
//#endregion
|
|
77
|
+
export { getGlobalContent as n, GlobalContent as t };
|
|
78
|
+
//# sourceMappingURL=global-content-D_WYaFgX.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-content-D_WYaFgX.mjs","names":[],"sources":["../src/extensions/global-content.ts"],"sourcesContent":["import { type Editor, mergeAttributes, Node } from '@tiptap/core';\n\nconst GLOBAL_CONTENT_NODE_TYPE = 'globalContent' as const;\n\nexport interface GlobalContentOptions {\n key: string;\n data: Record<string, unknown>;\n}\n\ndeclare module '@tiptap/core' {\n interface GlobalContent<ReturnType> {\n setGlobalContent: (key: string, value: unknown) => ReturnType;\n }\n\n interface Commands<ReturnType> {\n globalContent: GlobalContent<ReturnType>;\n }\n}\n\nlet cachedGlobalPosition: number | null = null;\n\nfunction findGlobalContentPositions(doc: Editor['state']['doc']) {\n const positions: number[] = [];\n\n doc.descendants((node, position) => {\n if (node.type.name === GLOBAL_CONTENT_NODE_TYPE) {\n positions.push(position);\n }\n });\n\n return positions;\n}\n\nfunction getCachedGlobalContentPosition(doc: Editor['state']['doc']) {\n if (cachedGlobalPosition != null) {\n try {\n if (\n doc.nodeAt(cachedGlobalPosition)?.type.name === GLOBAL_CONTENT_NODE_TYPE\n ) {\n return cachedGlobalPosition;\n }\n } catch {\n cachedGlobalPosition = null;\n }\n }\n\n const positions = findGlobalContentPositions(doc);\n cachedGlobalPosition = positions[0] ?? null;\n return cachedGlobalPosition;\n}\n\nexport function getGlobalContent(key: string, editor: Editor): unknown | null {\n const position = getCachedGlobalContentPosition(editor.state.doc);\n if (cachedGlobalPosition == null) {\n return null;\n }\n return editor.state.doc.nodeAt(position)?.attrs.data[key] ?? null;\n}\n\nexport const GlobalContent = Node.create<GlobalContentOptions>({\n name: GLOBAL_CONTENT_NODE_TYPE,\n\n addOptions() {\n return {\n key: GLOBAL_CONTENT_NODE_TYPE,\n data: {},\n };\n },\n\n group: 'block',\n\n selectable: false,\n draggable: false,\n atom: true,\n\n addAttributes() {\n return {\n data: {\n default: this.options.data,\n },\n };\n },\n\n parseHTML() {\n return [{ tag: `div[data-type=\"${this.name}\"]` }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n 'div',\n mergeAttributes(HTMLAttributes, {\n 'data-type': this.name,\n // The node needs to have a width and height, so then\n // internal TipTap extension can find the first node position\n // and calculate the correct position of the document container\n style:\n 'width: 100%; height: 1px; visibility: hidden; background-color: transparent;',\n }),\n ];\n },\n\n addCommands() {\n return {\n setGlobalContent:\n (key: string, value: unknown) =>\n ({ tr, dispatch }) => {\n const ensureGlobalPosition = () => {\n const positions = findGlobalContentPositions(tr.doc);\n\n for (let i = positions.length - 1; i > 0; i--) {\n tr.delete(positions[i], positions[i] + 1);\n }\n\n const pos = positions[0] ?? -1;\n if (pos >= 0) {\n cachedGlobalPosition = pos;\n } else {\n cachedGlobalPosition = 0;\n tr.insert(0, this.type.create());\n }\n };\n\n if (dispatch) {\n ensureGlobalPosition();\n\n if (cachedGlobalPosition == null) {\n return false;\n }\n tr.setNodeAttribute(cachedGlobalPosition, 'data', {\n ...tr.doc.nodeAt(cachedGlobalPosition)?.attrs.data,\n [key]: value,\n });\n }\n\n return true;\n },\n };\n },\n});\n"],"mappings":";;;AAEA,MAAM,2BAA2B;AAiBjC,IAAI,uBAAsC;AAE1C,SAAS,2BAA2B,KAA6B;CAC/D,MAAM,YAAsB,EAAE;AAE9B,KAAI,aAAa,MAAM,aAAa;AAClC,MAAI,KAAK,KAAK,SAAS,yBACrB,WAAU,KAAK,SAAS;GAE1B;AAEF,QAAO;;AAGT,SAAS,+BAA+B,KAA6B;AACnE,KAAI,wBAAwB,KAC1B,KAAI;AACF,MACE,IAAI,OAAO,qBAAqB,EAAE,KAAK,SAAS,yBAEhD,QAAO;SAEH;AACN,yBAAuB;;AAK3B,wBADkB,2BAA2B,IAAI,CAChB,MAAM;AACvC,QAAO;;AAGT,SAAgB,iBAAiB,KAAa,QAAgC;CAC5E,MAAM,WAAW,+BAA+B,OAAO,MAAM,IAAI;AACjE,KAAI,wBAAwB,KAC1B,QAAO;AAET,QAAO,OAAO,MAAM,IAAI,OAAO,SAAS,EAAE,MAAM,KAAK,QAAQ;;AAG/D,MAAa,gBAAgB,KAAK,OAA6B;CAC7D,MAAM;CAEN,aAAa;AACX,SAAO;GACL,KAAK;GACL,MAAM,EAAE;GACT;;CAGH,OAAO;CAEP,YAAY;CACZ,WAAW;CACX,MAAM;CAEN,gBAAgB;AACd,SAAO,EACL,MAAM,EACJ,SAAS,KAAK,QAAQ,MACvB,EACF;;CAGH,YAAY;AACV,SAAO,CAAC,EAAE,KAAK,kBAAkB,KAAK,KAAK,KAAK,CAAC;;CAGnD,WAAW,EAAE,kBAAkB;AAC7B,SAAO,CACL,OACA,gBAAgB,gBAAgB;GAC9B,aAAa,KAAK;GAIlB,OACE;GACH,CAAC,CACH;;CAGH,cAAc;AACZ,SAAO,EACL,mBACG,KAAa,WACb,EAAE,IAAI,eAAe;GACpB,MAAM,6BAA6B;IACjC,MAAM,YAAY,2BAA2B,GAAG,IAAI;AAEpD,SAAK,IAAI,IAAI,UAAU,SAAS,GAAG,IAAI,GAAG,IACxC,IAAG,OAAO,UAAU,IAAI,UAAU,KAAK,EAAE;IAG3C,MAAM,MAAM,UAAU,MAAM;AAC5B,QAAI,OAAO,EACT,wBAAuB;SAClB;AACL,4BAAuB;AACvB,QAAG,OAAO,GAAG,KAAK,KAAK,QAAQ,CAAC;;;AAIpC,OAAI,UAAU;AACZ,0BAAsB;AAEtB,QAAI,wBAAwB,KAC1B,QAAO;AAET,OAAG,iBAAiB,sBAAsB,QAAQ;KAChD,GAAG,GAAG,IAAI,OAAO,qBAAqB,EAAE,MAAM;MAC7C,MAAM;KACR,CAAC;;AAGJ,UAAO;KAEZ;;CAEJ,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
const require_event_bus = require('./event-bus-fb8U7hrl.cjs');
|
|
2
|
+
let _tiptap_core = require("@tiptap/core");
|
|
3
|
+
|
|
4
|
+
//#region src/extensions/global-content.ts
|
|
5
|
+
const GLOBAL_CONTENT_NODE_TYPE = "globalContent";
|
|
6
|
+
let cachedGlobalPosition = null;
|
|
7
|
+
function findGlobalContentPositions(doc) {
|
|
8
|
+
const positions = [];
|
|
9
|
+
doc.descendants((node, position) => {
|
|
10
|
+
if (node.type.name === GLOBAL_CONTENT_NODE_TYPE) positions.push(position);
|
|
11
|
+
});
|
|
12
|
+
return positions;
|
|
13
|
+
}
|
|
14
|
+
function getCachedGlobalContentPosition(doc) {
|
|
15
|
+
if (cachedGlobalPosition != null) try {
|
|
16
|
+
if (doc.nodeAt(cachedGlobalPosition)?.type.name === GLOBAL_CONTENT_NODE_TYPE) return cachedGlobalPosition;
|
|
17
|
+
} catch {
|
|
18
|
+
cachedGlobalPosition = null;
|
|
19
|
+
}
|
|
20
|
+
cachedGlobalPosition = findGlobalContentPositions(doc)[0] ?? null;
|
|
21
|
+
return cachedGlobalPosition;
|
|
22
|
+
}
|
|
23
|
+
function getGlobalContent(key, editor) {
|
|
24
|
+
const position = getCachedGlobalContentPosition(editor.state.doc);
|
|
25
|
+
if (cachedGlobalPosition == null) return null;
|
|
26
|
+
return editor.state.doc.nodeAt(position)?.attrs.data[key] ?? null;
|
|
27
|
+
}
|
|
28
|
+
const GlobalContent = _tiptap_core.Node.create({
|
|
29
|
+
name: GLOBAL_CONTENT_NODE_TYPE,
|
|
30
|
+
addOptions() {
|
|
31
|
+
return {
|
|
32
|
+
key: GLOBAL_CONTENT_NODE_TYPE,
|
|
33
|
+
data: {}
|
|
34
|
+
};
|
|
35
|
+
},
|
|
36
|
+
group: "block",
|
|
37
|
+
selectable: false,
|
|
38
|
+
draggable: false,
|
|
39
|
+
atom: true,
|
|
40
|
+
addAttributes() {
|
|
41
|
+
return { data: { default: this.options.data } };
|
|
42
|
+
},
|
|
43
|
+
parseHTML() {
|
|
44
|
+
return [{ tag: `div[data-type="${this.name}"]` }];
|
|
45
|
+
},
|
|
46
|
+
renderHTML({ HTMLAttributes }) {
|
|
47
|
+
return ["div", (0, _tiptap_core.mergeAttributes)(HTMLAttributes, {
|
|
48
|
+
"data-type": this.name,
|
|
49
|
+
style: "width: 100%; height: 1px; visibility: hidden; background-color: transparent;"
|
|
50
|
+
})];
|
|
51
|
+
},
|
|
52
|
+
addCommands() {
|
|
53
|
+
return { setGlobalContent: (key, value) => ({ tr, dispatch }) => {
|
|
54
|
+
const ensureGlobalPosition = () => {
|
|
55
|
+
const positions = findGlobalContentPositions(tr.doc);
|
|
56
|
+
for (let i = positions.length - 1; i > 0; i--) tr.delete(positions[i], positions[i] + 1);
|
|
57
|
+
const pos = positions[0] ?? -1;
|
|
58
|
+
if (pos >= 0) cachedGlobalPosition = pos;
|
|
59
|
+
else {
|
|
60
|
+
cachedGlobalPosition = 0;
|
|
61
|
+
tr.insert(0, this.type.create());
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
if (dispatch) {
|
|
65
|
+
ensureGlobalPosition();
|
|
66
|
+
if (cachedGlobalPosition == null) return false;
|
|
67
|
+
tr.setNodeAttribute(cachedGlobalPosition, "data", {
|
|
68
|
+
...tr.doc.nodeAt(cachedGlobalPosition)?.attrs.data,
|
|
69
|
+
[key]: value
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return true;
|
|
73
|
+
} };
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
//#endregion
|
|
78
|
+
Object.defineProperty(exports, 'GlobalContent', {
|
|
79
|
+
enumerable: true,
|
|
80
|
+
get: function () {
|
|
81
|
+
return GlobalContent;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
Object.defineProperty(exports, 'getGlobalContent', {
|
|
85
|
+
enumerable: true,
|
|
86
|
+
get: function () {
|
|
87
|
+
return getGlobalContent;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { n as UploadImageHandler, t as PasteHandler } from "./create-paste-handler-B8BtjBk3.cjs";
|
|
2
|
+
import { Node } from "@tiptap/pm/model";
|
|
3
|
+
import { Content, Editor, Extensions, JSONContent, Mark, MarkConfig, MarkType, Node as Node$1, NodeConfig, NodeType } from "@tiptap/core";
|
|
4
|
+
import { UseEditorOptions } from "@tiptap/react";
|
|
5
|
+
|
|
6
|
+
//#region src/core/event-bus.d.ts
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Base event map interface for the editor event bus.
|
|
10
|
+
*
|
|
11
|
+
* Components extend this via TypeScript module augmentation:
|
|
12
|
+
* ```ts
|
|
13
|
+
* declare module '@react-email/editor' {
|
|
14
|
+
* interface EditorEventMap {
|
|
15
|
+
* 'my-component:custom-event': { data: string };
|
|
16
|
+
* }
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
interface EditorEventMap {
|
|
21
|
+
'bubble-menu:add-link': undefined;
|
|
22
|
+
}
|
|
23
|
+
type EditorEventName = keyof EditorEventMap;
|
|
24
|
+
type EditorEventHandler<T extends EditorEventName> = (payload: EditorEventMap[T]) => void | Promise<void>;
|
|
25
|
+
interface EditorEventSubscription {
|
|
26
|
+
unsubscribe: () => void;
|
|
27
|
+
}
|
|
28
|
+
declare class EditorEventBus {
|
|
29
|
+
private prefixEventName;
|
|
30
|
+
dispatch<T extends EditorEventName>(eventName: T, payload: EditorEventMap[T], options?: {
|
|
31
|
+
target?: EventTarget;
|
|
32
|
+
}): void;
|
|
33
|
+
on<T extends EditorEventName>(eventName: T, handler: EditorEventHandler<T>, options?: AddEventListenerOptions & {
|
|
34
|
+
target?: EventTarget;
|
|
35
|
+
}): EditorEventSubscription;
|
|
36
|
+
}
|
|
37
|
+
declare const editorEventBus: EditorEventBus;
|
|
38
|
+
//#endregion
|
|
39
|
+
//#region src/core/is-document-visually-empty.d.ts
|
|
40
|
+
declare function isDocumentVisuallyEmpty(doc: Node): boolean;
|
|
41
|
+
//#endregion
|
|
42
|
+
//#region src/core/serializer/compose-react-email.d.ts
|
|
43
|
+
interface ComposeReactEmailResult {
|
|
44
|
+
html: string;
|
|
45
|
+
text: string;
|
|
46
|
+
}
|
|
47
|
+
declare const composeReactEmail: ({
|
|
48
|
+
editor,
|
|
49
|
+
preview
|
|
50
|
+
}: {
|
|
51
|
+
editor: Editor;
|
|
52
|
+
preview?: string;
|
|
53
|
+
}) => Promise<ComposeReactEmailResult>;
|
|
54
|
+
//#endregion
|
|
55
|
+
//#region src/core/serializer/email-mark.d.ts
|
|
56
|
+
type SerializedMark = NonNullable<JSONContent['marks']>[number];
|
|
57
|
+
type MarkRendererComponent = (props: {
|
|
58
|
+
mark: SerializedMark;
|
|
59
|
+
node: JSONContent;
|
|
60
|
+
style: React.CSSProperties;
|
|
61
|
+
children?: React.ReactNode;
|
|
62
|
+
extension: EmailMark<any, any>;
|
|
63
|
+
}) => React.ReactNode;
|
|
64
|
+
interface EmailMarkConfig<Options, Storage> extends MarkConfig<Options, Storage> {
|
|
65
|
+
renderToReactEmail: MarkRendererComponent;
|
|
66
|
+
}
|
|
67
|
+
type ConfigParameter$1<Options, Storage> = Partial<Omit<EmailMarkConfig<Options, Storage>, 'renderToReactEmail'>> & Pick<EmailMarkConfig<Options, Storage>, 'renderToReactEmail'> & ThisType<{
|
|
68
|
+
name: string;
|
|
69
|
+
options: Options;
|
|
70
|
+
storage: Storage;
|
|
71
|
+
editor: Editor;
|
|
72
|
+
type: MarkType;
|
|
73
|
+
parent: (...args: any[]) => any;
|
|
74
|
+
}>;
|
|
75
|
+
declare class EmailMark<Options = Record<string, never>, Storage = Record<string, never>> extends Mark<Options, Storage> {
|
|
76
|
+
config: EmailMarkConfig<Options, Storage>;
|
|
77
|
+
constructor(config: ConfigParameter$1<Options, Storage>);
|
|
78
|
+
/**
|
|
79
|
+
* Create a new Mark instance
|
|
80
|
+
* @param config - Mark configuration object or a function that returns a configuration object
|
|
81
|
+
*/
|
|
82
|
+
static create<O = Record<string, never>, S = Record<string, never>>(config: ConfigParameter$1<O, S> | (() => ConfigParameter$1<O, S>)): EmailMark<O, S>;
|
|
83
|
+
static from<O, S>(mark: Mark<O, S>, renderToReactEmail: MarkRendererComponent): EmailMark<O, S>;
|
|
84
|
+
configure(options?: Partial<Options>): EmailMark<Options, Storage>;
|
|
85
|
+
extend<ExtendedOptions = Options, ExtendedStorage = Storage, ExtendedConfig extends MarkConfig<ExtendedOptions, ExtendedStorage> = EmailMarkConfig<ExtendedOptions, ExtendedStorage>>(extendedConfig?: (() => Partial<ExtendedConfig>) | (Partial<ExtendedConfig> & ThisType<{
|
|
86
|
+
name: string;
|
|
87
|
+
options: ExtendedOptions;
|
|
88
|
+
storage: ExtendedStorage;
|
|
89
|
+
editor: Editor;
|
|
90
|
+
type: MarkType;
|
|
91
|
+
}>)): EmailMark<ExtendedOptions, ExtendedStorage>;
|
|
92
|
+
}
|
|
93
|
+
//#endregion
|
|
94
|
+
//#region src/core/serializer/email-node.d.ts
|
|
95
|
+
type NodeRendererComponent = (props: {
|
|
96
|
+
node: JSONContent;
|
|
97
|
+
style: React.CSSProperties;
|
|
98
|
+
children?: React.ReactNode;
|
|
99
|
+
extension: EmailNode<any, any>;
|
|
100
|
+
}) => React.ReactNode;
|
|
101
|
+
interface EmailNodeConfig<Options, Storage> extends NodeConfig<Options, Storage> {
|
|
102
|
+
renderToReactEmail: NodeRendererComponent;
|
|
103
|
+
}
|
|
104
|
+
type ConfigParameter<Options, Storage> = Partial<Omit<EmailNodeConfig<Options, Storage>, 'renderToReactEmail'>> & Pick<EmailNodeConfig<Options, Storage>, 'renderToReactEmail'> & ThisType<{
|
|
105
|
+
name: string;
|
|
106
|
+
options: Options;
|
|
107
|
+
storage: Storage;
|
|
108
|
+
editor: Editor;
|
|
109
|
+
type: NodeType;
|
|
110
|
+
parent: (...args: any[]) => any;
|
|
111
|
+
}>;
|
|
112
|
+
declare class EmailNode<Options = Record<string, never>, Storage = Record<string, never>> extends Node$1<Options, Storage> {
|
|
113
|
+
config: EmailNodeConfig<Options, Storage>;
|
|
114
|
+
constructor(config: ConfigParameter<Options, Storage>);
|
|
115
|
+
/**
|
|
116
|
+
* Create a new Node instance
|
|
117
|
+
* @param config - Node configuration object or a function that returns a configuration object
|
|
118
|
+
*/
|
|
119
|
+
static create<O = Record<string, never>, S = Record<string, never>>(config: ConfigParameter<O, S> | (() => ConfigParameter<O, S>)): EmailNode<O, S>;
|
|
120
|
+
static from<O, S>(node: Node$1<O, S>, renderToReactEmail: NodeRendererComponent): EmailNode<O, S>;
|
|
121
|
+
configure(options?: Partial<Options>): EmailNode<Options, Storage>;
|
|
122
|
+
extend<ExtendedOptions = Options, ExtendedStorage = Storage, ExtendedConfig extends NodeConfig<ExtendedOptions, ExtendedStorage> = EmailNodeConfig<ExtendedOptions, ExtendedStorage>>(extendedConfig?: (() => Partial<ExtendedConfig>) | (Partial<ExtendedConfig> & ThisType<{
|
|
123
|
+
name: string;
|
|
124
|
+
options: ExtendedOptions;
|
|
125
|
+
storage: ExtendedStorage;
|
|
126
|
+
editor: Editor;
|
|
127
|
+
type: NodeType;
|
|
128
|
+
}>)): EmailNode<ExtendedOptions, ExtendedStorage>;
|
|
129
|
+
}
|
|
130
|
+
//#endregion
|
|
131
|
+
//#region src/core/use-editor.d.ts
|
|
132
|
+
type Merge<A, B> = A & Omit<B, keyof A>;
|
|
133
|
+
declare function useEditor({
|
|
134
|
+
content,
|
|
135
|
+
extensions,
|
|
136
|
+
onUpdate,
|
|
137
|
+
onPaste,
|
|
138
|
+
onUploadImage,
|
|
139
|
+
onReady,
|
|
140
|
+
editable,
|
|
141
|
+
...rest
|
|
142
|
+
}: Merge<{
|
|
143
|
+
content: Content;
|
|
144
|
+
extensions?: Extensions;
|
|
145
|
+
onUpdate?: (editor: Editor, transaction: {
|
|
146
|
+
getMeta: (key: string) => unknown;
|
|
147
|
+
}) => void;
|
|
148
|
+
onPaste?: PasteHandler;
|
|
149
|
+
onUploadImage?: UploadImageHandler;
|
|
150
|
+
onReady?: (editor: Editor | null) => void;
|
|
151
|
+
editable?: boolean;
|
|
152
|
+
}, UseEditorOptions>): {
|
|
153
|
+
editor: Editor;
|
|
154
|
+
isEditorEmpty: boolean;
|
|
155
|
+
extensions: Extensions;
|
|
156
|
+
contentError: Error | null;
|
|
157
|
+
isCollaborative: boolean;
|
|
158
|
+
};
|
|
159
|
+
//#endregion
|
|
160
|
+
export { EmailMark as a, SerializedMark as c, EditorEventHandler as d, EditorEventMap as f, editorEventBus as h, NodeRendererComponent as i, composeReactEmail as l, EditorEventSubscription as m, EmailNode as n, EmailMarkConfig as o, EditorEventName as p, EmailNodeConfig as r, MarkRendererComponent as s, useEditor as t, isDocumentVisuallyEmpty as u };
|
|
161
|
+
//# sourceMappingURL=index-C4KcMQ0R.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-C4KcMQ0R.d.cts","names":[],"sources":["../src/core/event-bus.ts","../src/core/is-document-visually-empty.ts","../src/core/serializer/compose-react-email.tsx","../src/core/serializer/email-mark.ts","../src/core/serializer/email-node.ts","../src/core/use-editor.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;AAcA;AAIA;AAEA;;;;AAEY,UARK,cAAA,CAQL;EAAO,sBAAA,EAAA,SAAA;AAEnB;AAIM,KAVM,eAAA,GAUQ,MAVgB,cAUhB;AAKC,KAbT,kBAaS,CAAA,UAboB,eAapB,CAAA,GAAA,CAAA,OAAA,EAZV,cAYU,CAZK,CAYL,CAAA,EAAA,GAAA,IAAA,GAXT,OAWS,CAAA,IAAA,CAAA;AACN,UAVE,uBAAA,CAUF;EACF,WAAA,EAAA,GAAA,GAAA,IAAA;;cAPP,cAAA,CAQmB;EAYV,QAAA,eAAA;EACA,QAAA,CAAA,UAhBM,eAgBN,CAAA,CAAA,SAAA,EAfA,CAeA,EAAA,OAAA,EAdF,cAcE,CAda,CAcb,CAAA,EAAA,OACF,CADE,EAAA;IACiB,MAAA,CAAA,EAdP,WAcO;EAAnB,CAAA,CAAA,EAAA,IAAA;EACC,EAAA,CAAA,UAHC,eAGD,CAAA,CAAA,SAAA,EAFC,CAED,EAAA,OAAA,EADD,kBACC,CADkB,CAClB,CAAA,EAAA,OACT,CADS,EAAA,uBAAA,GAAA;IAAqC,MAAA,CAAA,EAAA,WAAA;EAC9C,CAAA,CAAA,EAAA,uBAAA;;AAgCQ,cAAA,cAAc,EAAA,cAAuB;;;iBClFlC,uBAAA,MAA6B;;;UCWnC,uBAAA;;;;cAKG;;;AFEb;EANiB,MAAA,EEQP,MFRO;EAIL,OAAA,CAAA,EAAA,MAAA;AAEZ,CAAA,EAAA,GEII,OFJQ,CEIA,uBFJkB,CAAA;;;KGZlB,cAAA,GAAiB,YAAY;KAE7B,qBAAA;QACJ;QACA;SACC,KAAA,CAAM;EHCE,QAAA,CAAA,EGAJ,KAAA,CAAM,SHAY;EAInB,SAAA,EGFC,SHEc,CAAA,GAAA,EAAA,GAAS,CAAA;AAEpC,CAAA,EAAA,GGHM,KAAA,CAAM,SHGA;AAA6B,UGDxB,eHCwB,CAAA,OAAA,EAAA,OAAA,CAAA,SGA/B,UHA+B,CGApB,OHAoB,EGAX,OHAW,CAAA,CAAA;EAC9B,kBAAA,EGAW,qBHAX;;KGGN,iBHFO,CAAA,OAAA,EAAA,OAAA,CAAA,GGE6B,OHF7B,CGGV,IHHU,CGGL,eHHK,CGGW,OHHX,EGGoB,OHHpB,CAAA,EAAA,oBAAA,CAAA,CAAA,GGKV,IHLU,CGKL,eHLK,CGKW,OHLX,EGKoB,OHLpB,CAAA,EAAA,oBAAA,CAAA,GGMV,QHNU,CAAA;EAAO,IAAA,EAAA,MAAA;EAEF,OAAA,EGMJ,OHNI;EAIX,OAAA,EGGO,OHHP;EAKe,MAAA,EGDT,MHCS;EACN,IAAA,EGDL,QHCK;EACF,MAAA,EAAA,CAAA,GAAA,IAAA,EAAA,GAAA,EAAA,EAAA,GAAA,GAAA;CAAe,CAAA;AACH,cGCZ,SHDY,CAAA,UGEb,MHFa,CAAA,MAAA,EAAA,KAAA,CAAA,EAAA,UGGb,MHHa,CAAA,MAAA,EAAA,KAAA,CAAA,CAAA,SGIf,IHJe,CGIV,OHJU,EGID,OHJC,CAAA,CAAA;EAYV,MAAA,EGPG,eHOH,CGPmB,OHOnB,EGP4B,OHO5B,CAAA;EACA,WAAA,CAAA,MAAA,EGLO,iBHKP,CGLuB,OHKvB,EGLgC,OHKhC,CAAA;EACiB;;;;EAE3B,OAAA,MAAA,CAAA,IGAe,MHAf,CAAA,MAAA,EAAA,KAAA,CAAA,EAAA,IGA0C,MHA1C,CAAA,MAAA,EAAA,KAAA,CAAA,CAAA,CAAA,MAAA,EGCO,iBHDP,CGCuB,CHDvB,EGC0B,CHD1B,CAAA,GAAA,CAAA,GAAA,GGCsC,iBHDtC,CGCsD,CHDtD,EGCyD,CHDzD,CAAA,CAAA,CAAA,EGC4D,SHD5D,CGC4D,CHD5D,EGC4D,CHD5D,CAAA;EAAuB,OAAA,IAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,IAAA,EGQlB,IHRkB,CGQb,CHRa,EGQV,CHRU,CAAA,EAAA,kBAAA,EGSJ,qBHTI,CAAA,EGUvB,SHVuB,CGUb,CHVa,EGUV,CHVU,CAAA;EAgCf,SAAA,CAAA,OAAc,CAAuB,EGZ5B,OHY4B,CGZpB,OHYH,CAAA,CAAA,EGXY,SHWW,CGXD,OHWC,EGXQ,OHWR,CAAA;2BGN5B,2BACA,gCACK,WACrB,iBACA,mBACE,gBAAgB,iBAAiB,0CAG1B,QAAQ,oBACd,QAAQ,kBACP;;aAEW;IFxFL,OAAA,EEyFK,eFzFkB;YE0FnB;UACF;QAEb,UAAU,iBAAiB;AD9FwB;;;KEO5C,qBAAA;QACJ;SACC,KAAA,CAAM;aACF,KAAA,CAAM;aAEN;AJCb,CAAA,EAAA,GIAM,KAAA,CAAM,SJAmB;AAInB,UIFK,eJEU,CAAS,OAAA,EAAA,OAAc,CAAA,SIDxC,UJCwC,CID7B,OJC6B,EIDpB,OJCoB,CAAA,CAAA;EAEtC,kBAAA,EIFU,qBJEQ;;KICzB,eJAM,CAAA,OAAA,EAAA,OAAA,CAAA,GIA8B,OJA9B,CICT,IJDS,CICJ,eJDI,CICY,OJDZ,EICqB,OJDrB,CAAA,EAAA,oBAAA,CAAA,CAAA,GIGT,IJHS,CIGJ,eJHI,CIGY,OJHZ,EIGqB,OJHrB,CAAA,EAAA,oBAAA,CAAA,GIIT,QJJS,CAAA;EAAe,IAAA,EAAA,MAAA;EACd,OAAA,EIKC,OJLD;EAAO,OAAA,EIMN,OJNM;EAEF,MAAA,EIKL,MJLK;EAIX,IAAA,EIEI,QJFJ;EAKe,MAAA,EAAA,CAAA,GAAA,IAAA,EAAA,GAAA,EAAA,EAAA,GAAA,GAAA;CACN,CAAA;AACF,cIDA,SJCA,CAAA,UIAD,MJAC,CAAA,MAAA,EAAA,KAAA,CAAA,EAAA,UICD,MJDC,CAAA,MAAA,EAAA,KAAA,CAAA,CAAA,SIEH,MJFG,CIEE,OJFF,EIEW,OJFX,CAAA,CAAA;EAAe,MAAA,EIGV,eJHU,CIGM,OJHN,EIGe,OJHf,CAAA;EACH,WAAA,CAAA,MAAA,EIKH,eJLG,CIKa,OJLb,EIKsB,OJLtB,CAAA;EAYV;;;;EAGD,OAAA,MAAA,CAAA,IIFM,MJEN,CAAA,MAAA,EAAA,KAAA,CAAA,EAAA,IIFiC,MJEjC,CAAA,MAAA,EAAA,KAAA,CAAA,CAAA,CAAA,MAAA,EIDF,eJCE,CIDc,CJCd,EIDiB,CJCjB,CAAA,GAAA,CAAA,GAAA,GID6B,eJC7B,CID6C,CJC7C,EIDgD,CJChD,CAAA,CAAA,CAAA,EIDmD,SJCnD,CIDmD,CJCnD,EIDmD,CJCnD,CAAA;EAAqC,OAAA,IAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,IAAA,EIOzC,MJPyC,CIOpC,CJPoC,EIOjC,CJPiC,CAAA,EAAA,kBAAA,EIQ3B,qBJR2B,CAAA,EIS9C,SJT8C,CISpC,CJToC,EISjC,CJTiC,CAAA;EAC9C,SAAA,CAAA,OAAA,CAAA,EIkBiB,OJlBjB,CIkByB,OJlBzB,CAAA,CAAA,EImBkC,SJnBlC,CImB4C,OJnB5C,EImBqD,OJnBrD,CAAA;EAAuB,MAAA,CAAA,kBIwBN,OJxBM,EAAA,kBIyBN,OJzBM,EAAA,uBI0BD,UJ1BC,CI2BtB,eJ3BsB,EI4BtB,eJ5BsB,CAAA,GI6BpB,eJ7BoB,CI6BJ,eJ7BI,EI6Ba,eJ7Bb,CAAA,CAAA,CAAA,eAAA,EAAA,CAAA,GAAA,GIgCb,OJhCa,CIgCL,cJhCK,CAAA,CAAA,GAAA,CIiCnB,OJjCmB,CIiCX,cJjCW,CAAA,GIkClB,QJlCkB,CAAA;IAgCf,IAAA,EAAA,MAAA;aIIQ;aACA;YACD;IHxFJ,IAAA,EGyFE,QHzFF;QG2FX,UAAU,iBAAiB;;;;KC3E3B,cAAc,IAAI,KAAK,SAAS;iBAErB,SAAA;;;;;;;;;ALIC,GKKd;WAEU;ELjBI,UAAA,CAAA,EKkBA,ULlBc;EAInB,QAAA,CAAA,EAAA,CAAA,MAAe,EKgBb,MLhBsB,EAAA,WAAc,EAAA;IAEtC,OAAA,EAAA,CAAA,GAAA,EAAA,MAAkB,EAAA,GAAA,OAAA;EAAW,CAAA,EAAA,GAAA,IAAA;EAC9B,OAAA,CAAA,EKgBG,YLhBH;EAAe,aAAA,CAAA,EKiBN,kBLjBM;EACd,OAAA,CAAA,EAAA,CAAA,MAAA,EKiBW,MLjBX,GAAA,IAAA,EAAA,GAAA,IAAA;EAAO,QAAA,CAAA,EAAA,OAAA;AAEnB,CAAA,EKkBE,gBLlBe,CAAA,CAAA,EAAA;EAIX,MAAA,QAAc;EAKC,aAAA,EAAA,OAAA;EACN,UAAA,YAAA;EACF,YAAA,OAAA,GAAA,IAAA;EAAe,eAAA,EAAA,OAAA;CACH"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { n as UploadImageHandler, t as PasteHandler } from "./create-paste-handler-CGR738bC.mjs";
|
|
2
|
+
import { UseEditorOptions } from "@tiptap/react";
|
|
3
|
+
import { Content, Editor, Extensions, JSONContent, Mark, MarkConfig, MarkType, Node, NodeConfig, NodeType } from "@tiptap/core";
|
|
4
|
+
import { Node as Node$1 } from "@tiptap/pm/model";
|
|
5
|
+
|
|
6
|
+
//#region src/core/event-bus.d.ts
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Base event map interface for the editor event bus.
|
|
10
|
+
*
|
|
11
|
+
* Components extend this via TypeScript module augmentation:
|
|
12
|
+
* ```ts
|
|
13
|
+
* declare module '@react-email/editor' {
|
|
14
|
+
* interface EditorEventMap {
|
|
15
|
+
* 'my-component:custom-event': { data: string };
|
|
16
|
+
* }
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
interface EditorEventMap {
|
|
21
|
+
'bubble-menu:add-link': undefined;
|
|
22
|
+
}
|
|
23
|
+
type EditorEventName = keyof EditorEventMap;
|
|
24
|
+
type EditorEventHandler<T extends EditorEventName> = (payload: EditorEventMap[T]) => void | Promise<void>;
|
|
25
|
+
interface EditorEventSubscription {
|
|
26
|
+
unsubscribe: () => void;
|
|
27
|
+
}
|
|
28
|
+
declare class EditorEventBus {
|
|
29
|
+
private prefixEventName;
|
|
30
|
+
dispatch<T extends EditorEventName>(eventName: T, payload: EditorEventMap[T], options?: {
|
|
31
|
+
target?: EventTarget;
|
|
32
|
+
}): void;
|
|
33
|
+
on<T extends EditorEventName>(eventName: T, handler: EditorEventHandler<T>, options?: AddEventListenerOptions & {
|
|
34
|
+
target?: EventTarget;
|
|
35
|
+
}): EditorEventSubscription;
|
|
36
|
+
}
|
|
37
|
+
declare const editorEventBus: EditorEventBus;
|
|
38
|
+
//#endregion
|
|
39
|
+
//#region src/core/is-document-visually-empty.d.ts
|
|
40
|
+
declare function isDocumentVisuallyEmpty(doc: Node$1): boolean;
|
|
41
|
+
//#endregion
|
|
42
|
+
//#region src/core/serializer/compose-react-email.d.ts
|
|
43
|
+
interface ComposeReactEmailResult {
|
|
44
|
+
html: string;
|
|
45
|
+
text: string;
|
|
46
|
+
}
|
|
47
|
+
declare const composeReactEmail: ({
|
|
48
|
+
editor,
|
|
49
|
+
preview
|
|
50
|
+
}: {
|
|
51
|
+
editor: Editor;
|
|
52
|
+
preview?: string;
|
|
53
|
+
}) => Promise<ComposeReactEmailResult>;
|
|
54
|
+
//#endregion
|
|
55
|
+
//#region src/core/serializer/email-mark.d.ts
|
|
56
|
+
type SerializedMark = NonNullable<JSONContent['marks']>[number];
|
|
57
|
+
type MarkRendererComponent = (props: {
|
|
58
|
+
mark: SerializedMark;
|
|
59
|
+
node: JSONContent;
|
|
60
|
+
style: React.CSSProperties;
|
|
61
|
+
children?: React.ReactNode;
|
|
62
|
+
extension: EmailMark<any, any>;
|
|
63
|
+
}) => React.ReactNode;
|
|
64
|
+
interface EmailMarkConfig<Options, Storage> extends MarkConfig<Options, Storage> {
|
|
65
|
+
renderToReactEmail: MarkRendererComponent;
|
|
66
|
+
}
|
|
67
|
+
type ConfigParameter$1<Options, Storage> = Partial<Omit<EmailMarkConfig<Options, Storage>, 'renderToReactEmail'>> & Pick<EmailMarkConfig<Options, Storage>, 'renderToReactEmail'> & ThisType<{
|
|
68
|
+
name: string;
|
|
69
|
+
options: Options;
|
|
70
|
+
storage: Storage;
|
|
71
|
+
editor: Editor;
|
|
72
|
+
type: MarkType;
|
|
73
|
+
parent: (...args: any[]) => any;
|
|
74
|
+
}>;
|
|
75
|
+
declare class EmailMark<Options = Record<string, never>, Storage = Record<string, never>> extends Mark<Options, Storage> {
|
|
76
|
+
config: EmailMarkConfig<Options, Storage>;
|
|
77
|
+
constructor(config: ConfigParameter$1<Options, Storage>);
|
|
78
|
+
/**
|
|
79
|
+
* Create a new Mark instance
|
|
80
|
+
* @param config - Mark configuration object or a function that returns a configuration object
|
|
81
|
+
*/
|
|
82
|
+
static create<O = Record<string, never>, S = Record<string, never>>(config: ConfigParameter$1<O, S> | (() => ConfigParameter$1<O, S>)): EmailMark<O, S>;
|
|
83
|
+
static from<O, S>(mark: Mark<O, S>, renderToReactEmail: MarkRendererComponent): EmailMark<O, S>;
|
|
84
|
+
configure(options?: Partial<Options>): EmailMark<Options, Storage>;
|
|
85
|
+
extend<ExtendedOptions = Options, ExtendedStorage = Storage, ExtendedConfig extends MarkConfig<ExtendedOptions, ExtendedStorage> = EmailMarkConfig<ExtendedOptions, ExtendedStorage>>(extendedConfig?: (() => Partial<ExtendedConfig>) | (Partial<ExtendedConfig> & ThisType<{
|
|
86
|
+
name: string;
|
|
87
|
+
options: ExtendedOptions;
|
|
88
|
+
storage: ExtendedStorage;
|
|
89
|
+
editor: Editor;
|
|
90
|
+
type: MarkType;
|
|
91
|
+
}>)): EmailMark<ExtendedOptions, ExtendedStorage>;
|
|
92
|
+
}
|
|
93
|
+
//#endregion
|
|
94
|
+
//#region src/core/serializer/email-node.d.ts
|
|
95
|
+
type NodeRendererComponent = (props: {
|
|
96
|
+
node: JSONContent;
|
|
97
|
+
style: React.CSSProperties;
|
|
98
|
+
children?: React.ReactNode;
|
|
99
|
+
extension: EmailNode<any, any>;
|
|
100
|
+
}) => React.ReactNode;
|
|
101
|
+
interface EmailNodeConfig<Options, Storage> extends NodeConfig<Options, Storage> {
|
|
102
|
+
renderToReactEmail: NodeRendererComponent;
|
|
103
|
+
}
|
|
104
|
+
type ConfigParameter<Options, Storage> = Partial<Omit<EmailNodeConfig<Options, Storage>, 'renderToReactEmail'>> & Pick<EmailNodeConfig<Options, Storage>, 'renderToReactEmail'> & ThisType<{
|
|
105
|
+
name: string;
|
|
106
|
+
options: Options;
|
|
107
|
+
storage: Storage;
|
|
108
|
+
editor: Editor;
|
|
109
|
+
type: NodeType;
|
|
110
|
+
parent: (...args: any[]) => any;
|
|
111
|
+
}>;
|
|
112
|
+
declare class EmailNode<Options = Record<string, never>, Storage = Record<string, never>> extends Node<Options, Storage> {
|
|
113
|
+
config: EmailNodeConfig<Options, Storage>;
|
|
114
|
+
constructor(config: ConfigParameter<Options, Storage>);
|
|
115
|
+
/**
|
|
116
|
+
* Create a new Node instance
|
|
117
|
+
* @param config - Node configuration object or a function that returns a configuration object
|
|
118
|
+
*/
|
|
119
|
+
static create<O = Record<string, never>, S = Record<string, never>>(config: ConfigParameter<O, S> | (() => ConfigParameter<O, S>)): EmailNode<O, S>;
|
|
120
|
+
static from<O, S>(node: Node<O, S>, renderToReactEmail: NodeRendererComponent): EmailNode<O, S>;
|
|
121
|
+
configure(options?: Partial<Options>): EmailNode<Options, Storage>;
|
|
122
|
+
extend<ExtendedOptions = Options, ExtendedStorage = Storage, ExtendedConfig extends NodeConfig<ExtendedOptions, ExtendedStorage> = EmailNodeConfig<ExtendedOptions, ExtendedStorage>>(extendedConfig?: (() => Partial<ExtendedConfig>) | (Partial<ExtendedConfig> & ThisType<{
|
|
123
|
+
name: string;
|
|
124
|
+
options: ExtendedOptions;
|
|
125
|
+
storage: ExtendedStorage;
|
|
126
|
+
editor: Editor;
|
|
127
|
+
type: NodeType;
|
|
128
|
+
}>)): EmailNode<ExtendedOptions, ExtendedStorage>;
|
|
129
|
+
}
|
|
130
|
+
//#endregion
|
|
131
|
+
//#region src/core/use-editor.d.ts
|
|
132
|
+
type Merge<A, B> = A & Omit<B, keyof A>;
|
|
133
|
+
declare function useEditor$1({
|
|
134
|
+
content,
|
|
135
|
+
extensions,
|
|
136
|
+
onUpdate,
|
|
137
|
+
onPaste,
|
|
138
|
+
onUploadImage,
|
|
139
|
+
onReady,
|
|
140
|
+
editable,
|
|
141
|
+
...rest
|
|
142
|
+
}: Merge<{
|
|
143
|
+
content: Content;
|
|
144
|
+
extensions?: Extensions;
|
|
145
|
+
onUpdate?: (editor: Editor, transaction: {
|
|
146
|
+
getMeta: (key: string) => unknown;
|
|
147
|
+
}) => void;
|
|
148
|
+
onPaste?: PasteHandler;
|
|
149
|
+
onUploadImage?: UploadImageHandler;
|
|
150
|
+
onReady?: (editor: Editor | null) => void;
|
|
151
|
+
editable?: boolean;
|
|
152
|
+
}, UseEditorOptions>): {
|
|
153
|
+
editor: Editor;
|
|
154
|
+
isEditorEmpty: boolean;
|
|
155
|
+
extensions: Extensions;
|
|
156
|
+
contentError: Error | null;
|
|
157
|
+
isCollaborative: boolean;
|
|
158
|
+
};
|
|
159
|
+
//#endregion
|
|
160
|
+
export { EmailMark as a, SerializedMark as c, EditorEventHandler as d, EditorEventMap as f, editorEventBus as h, NodeRendererComponent as i, composeReactEmail as l, EditorEventSubscription as m, EmailNode as n, EmailMarkConfig as o, EditorEventName as p, EmailNodeConfig as r, MarkRendererComponent as s, useEditor$1 as t, isDocumentVisuallyEmpty as u };
|
|
161
|
+
//# sourceMappingURL=index-CxX7W63O.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CxX7W63O.d.mts","names":[],"sources":["../src/core/event-bus.ts","../src/core/is-document-visually-empty.ts","../src/core/serializer/compose-react-email.tsx","../src/core/serializer/email-mark.ts","../src/core/serializer/email-node.ts","../src/core/use-editor.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
const require_event_bus = require('./event-bus-fb8U7hrl.cjs');
|
|
2
|
+
const require_extensions = require('./extensions-CkjPj2JO.cjs');
|
|
3
|
+
const require_extension = require('./extension-w5VaUeSw.cjs');
|
|
4
|
+
const require_root = require('./root-Jq1R3tkX.cjs');
|
|
5
|
+
let _tiptap_extensions = require("@tiptap/extensions");
|
|
6
|
+
let _tiptap_react = require("@tiptap/react");
|
|
7
|
+
let react = require("react");
|
|
8
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
9
|
+
|
|
10
|
+
//#region src/email-editor/email-editor.tsx
|
|
11
|
+
function RefBridge({ editorRef }) {
|
|
12
|
+
const { editor } = (0, _tiptap_react.useCurrentEditor)();
|
|
13
|
+
(0, react.useImperativeHandle)(editorRef, () => ({
|
|
14
|
+
export: async () => {
|
|
15
|
+
if (!editor) return {
|
|
16
|
+
html: "",
|
|
17
|
+
text: ""
|
|
18
|
+
};
|
|
19
|
+
return require_extensions.composeReactEmail({ editor });
|
|
20
|
+
},
|
|
21
|
+
getJSON: () => editor?.getJSON() ?? {
|
|
22
|
+
type: "doc",
|
|
23
|
+
content: []
|
|
24
|
+
},
|
|
25
|
+
getHTML: () => editor?.getHTML() ?? "",
|
|
26
|
+
editor
|
|
27
|
+
}), [editor]);
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
const EmailEditor = (0, react.forwardRef)(({ content, onChange, onUploadImage, onReady, theme = "basic", editable = true, placeholder, bubbleMenu, extensions: extensionsProp, className }, ref) => {
|
|
31
|
+
const extensions = (0, react.useMemo)(() => {
|
|
32
|
+
if (extensionsProp) return extensionsProp;
|
|
33
|
+
return [
|
|
34
|
+
require_extensions.StarterKit.configure({ Placeholder: placeholder ? { placeholder } : void 0 }),
|
|
35
|
+
_tiptap_extensions.UndoRedo,
|
|
36
|
+
require_extension.EmailTheming.configure({ theme })
|
|
37
|
+
];
|
|
38
|
+
}, [
|
|
39
|
+
extensionsProp,
|
|
40
|
+
theme,
|
|
41
|
+
placeholder
|
|
42
|
+
]);
|
|
43
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_tiptap_react.EditorProvider, {
|
|
44
|
+
extensions,
|
|
45
|
+
content,
|
|
46
|
+
editable,
|
|
47
|
+
immediatelyRender: false,
|
|
48
|
+
editorProps: (0, react.useMemo)(() => ({
|
|
49
|
+
handlePaste: require_extensions.createPasteHandler({
|
|
50
|
+
onUploadImage,
|
|
51
|
+
extensions
|
|
52
|
+
}),
|
|
53
|
+
handleDrop: require_extensions.createDropHandler({ onUploadImage })
|
|
54
|
+
}), [onUploadImage, extensions]),
|
|
55
|
+
editorContainerProps: { className },
|
|
56
|
+
onCreate: ({ editor }) => onReady?.(editor),
|
|
57
|
+
onUpdate: ({ editor }) => onChange?.(editor),
|
|
58
|
+
children: [
|
|
59
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(RefBridge, { editorRef: ref }),
|
|
60
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_root.BubbleMenuDefault, {
|
|
61
|
+
hideWhenActiveNodes: bubbleMenu?.hideWhenActiveNodes ?? ["button"],
|
|
62
|
+
hideWhenActiveMarks: bubbleMenu?.hideWhenActiveMarks ?? ["link"]
|
|
63
|
+
}),
|
|
64
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_root.BubbleMenuLinkDefault, {}),
|
|
65
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_root.BubbleMenuButtonDefault, {}),
|
|
66
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_root.BubbleMenuImageDefault, {}),
|
|
67
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_root.SlashCommandRoot, {})
|
|
68
|
+
]
|
|
69
|
+
}, theme);
|
|
70
|
+
});
|
|
71
|
+
EmailEditor.displayName = "EmailEditor";
|
|
72
|
+
|
|
73
|
+
//#endregion
|
|
74
|
+
exports.EmailEditor = EmailEditor;
|