@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.
Files changed (74) hide show
  1. package/dist/core/index.cjs +9 -0
  2. package/dist/core/index.d.cts +2 -0
  3. package/dist/core/index.d.mts +3 -0
  4. package/dist/core/index.mjs +4 -0
  5. package/dist/create-paste-handler-B8BtjBk3.d.cts +14 -0
  6. package/dist/create-paste-handler-B8BtjBk3.d.cts.map +1 -0
  7. package/dist/create-paste-handler-CGR738bC.d.mts +14 -0
  8. package/dist/create-paste-handler-CGR738bC.d.mts.map +1 -0
  9. package/dist/event-bus-CHEzOS_O.mjs +329 -0
  10. package/dist/event-bus-CHEzOS_O.mjs.map +1 -0
  11. package/dist/event-bus-fb8U7hrl.cjs +450 -0
  12. package/dist/extension-DyY8_bh4.mjs +1110 -0
  13. package/dist/extension-DyY8_bh4.mjs.map +1 -0
  14. package/dist/extension-w5VaUeSw.cjs +1235 -0
  15. package/dist/extensions/index.cjs +51 -0
  16. package/dist/extensions/index.d.cts +399 -0
  17. package/dist/extensions/index.d.cts.map +1 -0
  18. package/dist/extensions/index.d.mts +400 -0
  19. package/dist/extensions/index.d.mts.map +1 -0
  20. package/dist/extensions/index.mjs +5 -0
  21. package/dist/extensions-BvfmaKCn.mjs +2088 -0
  22. package/dist/extensions-BvfmaKCn.mjs.map +1 -0
  23. package/dist/extensions-CkjPj2JO.cjs +2369 -0
  24. package/dist/global-content-D_WYaFgX.mjs +78 -0
  25. package/dist/global-content-D_WYaFgX.mjs.map +1 -0
  26. package/dist/global-content-bJgotqmA.cjs +89 -0
  27. package/dist/index-C4KcMQ0R.d.cts +161 -0
  28. package/dist/index-C4KcMQ0R.d.cts.map +1 -0
  29. package/dist/index-CxX7W63O.d.mts +161 -0
  30. package/dist/index-CxX7W63O.d.mts.map +1 -0
  31. package/dist/index.cjs +74 -0
  32. package/dist/index.css +832 -0
  33. package/dist/index.css.map +1 -0
  34. package/dist/index.d.cts +33 -0
  35. package/dist/index.d.cts.map +1 -0
  36. package/dist/index.d.mts +31 -277
  37. package/dist/index.d.mts.map +1 -1
  38. package/dist/index.mjs +64 -1377
  39. package/dist/index.mjs.map +1 -1
  40. package/dist/plugins/index.cjs +23 -0
  41. package/dist/plugins/index.d.cts +191 -0
  42. package/dist/plugins/index.d.cts.map +1 -0
  43. package/dist/plugins/index.d.mts +191 -0
  44. package/dist/plugins/index.d.mts.map +1 -0
  45. package/dist/plugins/index.mjs +3 -0
  46. package/dist/root-Jq1R3tkX.cjs +2832 -0
  47. package/dist/root-pS4l8bVZ.mjs +2316 -0
  48. package/dist/root-pS4l8bVZ.mjs.map +1 -0
  49. package/dist/set-text-alignment-Cv72txmv.cjs +24 -0
  50. package/dist/set-text-alignment-OA8IMWmO.mjs +19 -0
  51. package/dist/set-text-alignment-OA8IMWmO.mjs.map +1 -0
  52. package/dist/styles-C-cCyJCn.cjs +211 -0
  53. package/dist/styles-_TMw3YxC.mjs +194 -0
  54. package/dist/styles-_TMw3YxC.mjs.map +1 -0
  55. package/dist/ui/bubble-menu/bubble-menu.css +285 -0
  56. package/dist/ui/index.cjs +147 -0
  57. package/dist/ui/index.d.cts +939 -0
  58. package/dist/ui/index.d.cts.map +1 -0
  59. package/dist/ui/index.d.mts +939 -0
  60. package/dist/ui/index.d.mts.map +1 -0
  61. package/dist/ui/index.mjs +60 -0
  62. package/dist/ui/index.mjs.map +1 -0
  63. package/dist/ui/slash-command/slash-command.css +44 -0
  64. package/dist/ui/themes/default.css +830 -0
  65. package/dist/utils/index.cjs +3 -0
  66. package/dist/utils/index.d.cts +7 -0
  67. package/dist/utils/index.d.cts.map +1 -0
  68. package/dist/utils/index.d.mts +7 -0
  69. package/dist/utils/index.d.mts.map +1 -0
  70. package/dist/utils/index.mjs +3 -0
  71. package/package.json +109 -21
  72. package/dist/index.d.ts +0 -279
  73. package/dist/index.d.ts.map +0 -1
  74. 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":"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"}
@@ -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;