@tiptap/extension-mathematics 3.0.0-beta.17 → 3.0.0-beta.19

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/index.d.ts CHANGED
@@ -1,27 +1,55 @@
1
1
  import { Node as Node$1, Editor, Extension } from '@tiptap/core';
2
2
  import { KatexOptions } from 'katex';
3
3
  import { Node } from '@tiptap/pm/model';
4
+ import { Transaction } from '@tiptap/pm/state';
4
5
 
6
+ /**
7
+ * Configuration options for the BlockMath extension.
8
+ */
5
9
  type BlockMathOptions = {
10
+ /**
11
+ * KaTeX specific options
12
+ * @see https://katex.org/docs/options.html
13
+ * @example
14
+ * ```ts
15
+ * katexOptions: {
16
+ * displayMode: true,
17
+ * throwOnError: false,
18
+ * },
19
+ */
20
+ katexOptions?: KatexOptions;
21
+ /**
22
+ * Optional click handler for block math nodes.
23
+ * Called when a user clicks on a block math expression in the editor.
24
+ *
25
+ * @param node - The ProseMirror node representing the block math element
26
+ * @param pos - The position of the node within the document
27
+ * @example
28
+ * ```ts
29
+ * onClick: (node, pos) => {
30
+ * console.log('Block math clicked:', node.attrs.latex, 'at position:', pos)
31
+ * },
32
+ * ```
33
+ */
6
34
  onClick?: (node: Node, pos: number) => void;
7
35
  };
8
36
  declare module '@tiptap/core' {
9
37
  interface Commands<ReturnType> {
10
- blockMath: {
38
+ insertBlockMath: {
11
39
  /**
12
- * Set block math node with LaTeX string.
13
- * @param options - Options for setting block math.
40
+ * Inserts a math block node with LaTeX string.
41
+ * @param options - Options for inserting block math.
14
42
  * @returns ReturnType
15
43
  */
16
- setBlockMath: (options: {
44
+ insertBlockMath: (options: {
17
45
  latex: string;
18
46
  pos?: number;
19
47
  }) => ReturnType;
20
48
  /**
21
- * Unset block math node.
49
+ * Deletes a block math node.
22
50
  * @returns ReturnType
23
51
  */
24
- unsetBlockMath: (options?: {
52
+ deleteBlockMath: (options?: {
25
53
  pos?: number;
26
54
  }) => ReturnType;
27
55
  /**
@@ -30,7 +58,7 @@ declare module '@tiptap/core' {
30
58
  * @returns ReturnType
31
59
  */
32
60
  updateBlockMath: (options?: {
33
- latex?: string;
61
+ latex: string;
34
62
  pos?: number;
35
63
  }) => ReturnType;
36
64
  };
@@ -43,7 +71,7 @@ declare module '@tiptap/core' {
43
71
  *
44
72
  * @example
45
73
  * ```javascript
46
- * import { BlockMath } from 'your-extension-path'
74
+ * import { BlockMath } from '@tiptap/extension-mathematics'
47
75
  * import { Editor } from '@tiptap/core'
48
76
  *
49
77
  * const editor = new Editor({
@@ -56,28 +84,60 @@ declare module '@tiptap/core' {
56
84
  * ],
57
85
  * })
58
86
  */
59
- declare const BlockMath: Node$1<any, any>;
87
+ declare const BlockMath: Node$1<BlockMathOptions, any>;
60
88
 
89
+ /**
90
+ * Configuration options for the InlineMath extension.
91
+ */
61
92
  type InlineMathOptions = {
93
+ /**
94
+ * KaTeX specific options
95
+ * @see https://katex.org/docs/options.html
96
+ * @example
97
+ * ```ts
98
+ * katexOptions: {
99
+ * displayMode: false,
100
+ * throwOnError: false,
101
+ * macros: {
102
+ * '\\RR': '\\mathbb{R}',
103
+ * '\\ZZ': '\\mathbb{Z}'
104
+ * }
105
+ * }
106
+ * ```
107
+ */
108
+ katexOptions?: KatexOptions;
109
+ /**
110
+ * Optional click handler for inline math nodes.
111
+ * Called when a user clicks on an inline math expression in the editor.
112
+ *
113
+ * @param node - The ProseMirror node representing the inline math element
114
+ * @param pos - The position of the node within the document
115
+ * @example
116
+ * ```ts
117
+ * onClick: (node, pos) => {
118
+ * console.log('Inline math clicked:', node.attrs.latex, 'at position:', pos)
119
+ * }
120
+ * ```
121
+ */
62
122
  onClick?: (node: Node, pos: number) => void;
63
123
  };
64
124
  declare module '@tiptap/core' {
65
125
  interface Commands<ReturnType> {
66
126
  inlineMath: {
67
127
  /**
68
- * Set inline math node with LaTeX string.
69
- * @param options - Options for setting inline math.
128
+ * Insert a inline math node with LaTeX string.
129
+ * @param options - Options for inserting inline math.
70
130
  * @returns ReturnType
71
131
  */
72
- setInlineMath: (options: {
132
+ insertInlineMath: (options: {
73
133
  latex: string;
74
134
  pos?: number;
75
135
  }) => ReturnType;
76
136
  /**
77
- * Unset inline math node.
137
+ * Delete an inline math node.
78
138
  * @returns ReturnType
79
139
  */
80
- unsetInlineMath: (options?: {
140
+ deleteInlineMath: (options?: {
81
141
  pos?: number;
82
142
  }) => ReturnType;
83
143
  /**
@@ -99,7 +159,7 @@ declare module '@tiptap/core' {
99
159
  *
100
160
  * @example
101
161
  * ```javascript
102
- * import { InlineMath } from 'your-extension-path'
162
+ * import { InlineMath } from '@tiptap/extension-mathematics'
103
163
  * import { Editor } from '@tiptap/core'
104
164
  *
105
165
  * const editor = new Editor({
@@ -114,16 +174,125 @@ declare module '@tiptap/core' {
114
174
  */
115
175
  declare const InlineMath: Node$1<InlineMathOptions, any>;
116
176
 
177
+ /**
178
+ * Configuration options for the Mathematics extension.
179
+ * This type defines the available customization options for both inline and block math rendering.
180
+ */
117
181
  type MathematicsOptions = {
118
- inlineOptions?: InlineMathOptions;
119
- blockOptions?: BlockMathOptions;
182
+ /** Configuration options specific to inline math nodes */
183
+ inlineOptions?: Omit<InlineMathOptions, 'katexOptions'>;
184
+ /** Configuration options specific to block math nodes */
185
+ blockOptions?: Omit<BlockMathOptions, 'katexOptions'>;
186
+ /** KaTeX-specific rendering options passed to the KaTeX library */
120
187
  katexOptions?: KatexOptions;
121
188
  };
189
+ /**
190
+ * Extended mathematics options that include an editor instance.
191
+ * This type combines the base mathematics options with an editor reference,
192
+ * typically used internally by the extension for operations that require editor access.
193
+ */
122
194
  type MathematicsOptionsWithEditor = MathematicsOptions & {
123
195
  editor: Editor;
124
196
  };
125
197
 
126
- declare const Math: Extension<MathematicsOptions, any>;
198
+ /**
199
+ * Mathematics extension for Tiptap that provides both inline and block math support using KaTeX.
200
+ * This extension combines the InlineMath and BlockMath extensions to provide a complete
201
+ * mathematical expression solution for rich text editing. It supports LaTeX syntax,
202
+ * custom rendering options, and interactive math nodes.
203
+ *
204
+ * @example
205
+ * ```typescript
206
+ * import { Editor } from '@tiptap/core'
207
+ * import { Mathematics } from '@tiptap/extension-mathematics'
208
+ * import { migrateMathStrings } from '@tiptap/extension-mathematics/utils'
209
+ *
210
+ * const editor = new Editor({
211
+ * extensions: [
212
+ * Mathematics.configure({
213
+ * inlineOptions: {
214
+ * onClick: (node, pos) => {
215
+ * console.log('Inline math clicked:', node.attrs.latex)
216
+ * }
217
+ * },
218
+ * blockOptions: {
219
+ * onClick: (node, pos) => {
220
+ * console.log('Block math clicked:', node.attrs.latex)
221
+ * }
222
+ * },
223
+ * katexOptions: {
224
+ * displayMode: false,
225
+ * throwOnError: false,
226
+ * macros: {
227
+ * '\\RR': '\\mathbb{R}',
228
+ * '\\ZZ': '\\mathbb{Z}'
229
+ * }
230
+ * }
231
+ * })
232
+ * ],
233
+ * content: `
234
+ * <p>Inline math: $E = mc^2$</p>
235
+ * <div data-type="block-math" data-latex="\\sum_{i=1}^{n} x_i = X"></div>
236
+ * `,
237
+ * onCreate({ editor }) {
238
+ * // Optional: Migrate existing math strings to math nodes
239
+ * migrateMathStrings(editor)
240
+ * }
241
+ * })
242
+ * ```
243
+ */
127
244
  declare const Mathematics: Extension<MathematicsOptions, any>;
128
245
 
129
- export { BlockMath, type BlockMathOptions, InlineMath, type InlineMathOptions, Math, Mathematics, type MathematicsOptions, type MathematicsOptionsWithEditor, Math as default };
246
+ /**
247
+ * Regular expression to match LaTeX math strings wrapped in single dollar signs.
248
+ * This should not catch dollar signs which are not part of a math expression,
249
+ * like those used for currency or other purposes.
250
+ * It ensures that the dollar signs are not preceded or followed by digits,
251
+ * allowing for proper identification of inline math expressions.
252
+ *
253
+ * - `$x^2 + y^2 = z^2$` will match
254
+ * - `This is $inline math$ in text.` will match
255
+ * - `This is $100$ dollars.` will not match (as it is not a math expression)
256
+ * - `This is $x^2 + y^2 = z^2$ and $100$ dollars.` will match both math expressions
257
+ */
258
+ declare const mathMigrationRegex: RegExp;
259
+ /**
260
+ * Creates a transaction that migrates existing math strings in the document to new math nodes.
261
+ * This function traverses the document and replaces LaTeX math syntax (wrapped in single dollar signs)
262
+ * with proper inline math nodes, preserving the mathematical content.
263
+ *
264
+ * @param editor - The editor instance containing the schema and configuration
265
+ * @param tr - The transaction to modify with the migration operations
266
+ * @returns The modified transaction with math string replacements
267
+ *
268
+ * @example
269
+ * ```typescript
270
+ * const editor = new Editor({ ... })
271
+ * const tr = editor.state.tr
272
+ * const updatedTr = createMathMigrateTransaction(editor, tr)
273
+ * editor.view.dispatch(updatedTr)
274
+ * ```
275
+ */
276
+ declare function createMathMigrateTransaction(editor: Editor, tr: Transaction, regex?: RegExp): Transaction;
277
+ /**
278
+ * Migrates existing math strings in the editor document to math nodes.
279
+ * This function creates and dispatches a transaction that converts LaTeX math syntax
280
+ * (text wrapped in single dollar signs) into proper inline math nodes. The migration
281
+ * happens immediately and is not added to the editor's history.
282
+ *
283
+ * @param editor - The editor instance to perform the migration on
284
+ *
285
+ * @example
286
+ * ```typescript
287
+ * const editor = new Editor({
288
+ * extensions: [Mathematics],
289
+ * content: 'This is inline math: $x^2 + y^2 = z^2$ in text.'
290
+ * })
291
+ *
292
+ * // Math strings will be automatically migrated to math nodes
293
+ * migrateMathStrings(editor)
294
+ * ```
295
+ */
296
+ declare function migrateMathStrings(editor: Editor, regex?: RegExp): void;
297
+
298
+ export { BlockMath, type BlockMathOptions, InlineMath, type InlineMathOptions, Mathematics, type MathematicsOptions, type MathematicsOptionsWithEditor, createMathMigrateTransaction, Mathematics as default, mathMigrationRegex, migrateMathStrings };
package/dist/index.js CHANGED
@@ -10,7 +10,8 @@ var BlockMath = Node.create({
10
10
  atom: true,
11
11
  addOptions() {
12
12
  return {
13
- onClick: void 0
13
+ onClick: void 0,
14
+ katexOptions: void 0
14
15
  };
15
16
  },
16
17
  addAttributes() {
@@ -28,14 +29,17 @@ var BlockMath = Node.create({
28
29
  },
29
30
  addCommands() {
30
31
  return {
31
- setBlockMath: (options) => ({ commands, editor }) => {
32
+ insertBlockMath: (options) => ({ commands, editor }) => {
32
33
  const { latex, pos } = options;
34
+ if (!latex) {
35
+ return false;
36
+ }
33
37
  return commands.insertContentAt(pos != null ? pos : editor.state.selection.from, {
34
38
  type: this.name,
35
39
  attrs: { latex }
36
40
  });
37
41
  },
38
- unsetBlockMath: (options) => ({ editor, tr }) => {
42
+ deleteBlockMath: (options) => ({ editor, tr }) => {
39
43
  var _a;
40
44
  const pos = (_a = options == null ? void 0 : options.pos) != null ? _a : editor.state.selection.$from.pos;
41
45
  const node = editor.state.doc.nodeAt(pos);
@@ -88,17 +92,21 @@ var BlockMath = Node.create({
88
92
  ];
89
93
  },
90
94
  addNodeView() {
95
+ const { katexOptions } = this.options;
91
96
  return ({ node, getPos }) => {
92
97
  const wrapper = document.createElement("div");
93
98
  const innerWrapper = document.createElement("div");
94
- wrapper.className = "Tiptap-mathematics-render Tiptap-mathematics-render--editable";
99
+ wrapper.className = "tiptap-mathematics-render";
100
+ if (this.editor.isEditable) {
101
+ wrapper.classList.add("tiptap-mathematics-render--editable");
102
+ }
95
103
  innerWrapper.className = "block-math-inner";
96
104
  wrapper.dataset.type = "block-math";
97
105
  wrapper.setAttribute("data-latex", node.attrs.latex);
98
106
  wrapper.appendChild(innerWrapper);
99
107
  function renderMath() {
100
108
  try {
101
- katex.render(node.attrs.latex, innerWrapper);
109
+ katex.render(node.attrs.latex, innerWrapper, katexOptions);
102
110
  wrapper.classList.remove("block-math-error");
103
111
  } catch {
104
112
  wrapper.textContent = node.attrs.latex;
@@ -140,7 +148,8 @@ var InlineMath = Node2.create({
140
148
  atom: true,
141
149
  addOptions() {
142
150
  return {
143
- onClick: void 0
151
+ onClick: void 0,
152
+ katexOptions: void 0
144
153
  };
145
154
  },
146
155
  addAttributes() {
@@ -158,17 +167,17 @@ var InlineMath = Node2.create({
158
167
  },
159
168
  addCommands() {
160
169
  return {
161
- setInlineMath: (options) => ({ editor, tr }) => {
170
+ insertInlineMath: (options) => ({ editor, tr }) => {
162
171
  var _a;
163
- const latex = options == null ? void 0 : options.latex;
164
- const pos = (_a = options == null ? void 0 : options.pos) != null ? _a : editor.state.selection.$from.pos;
172
+ const latex = options.latex;
173
+ const from = (_a = options == null ? void 0 : options.pos) != null ? _a : editor.state.selection.from;
165
174
  if (!latex) {
166
175
  return false;
167
176
  }
168
- tr.replaceWith(pos, pos, this.type.create({ latex }));
177
+ tr.replaceWith(from, from, this.type.create({ latex }));
169
178
  return true;
170
179
  },
171
- unsetInlineMath: (options) => ({ editor, tr }) => {
180
+ deleteInlineMath: (options) => ({ editor, tr }) => {
172
181
  var _a;
173
182
  const pos = (_a = options == null ? void 0 : options.pos) != null ? _a : editor.state.selection.$from.pos;
174
183
  const node = editor.state.doc.nodeAt(pos);
@@ -218,14 +227,18 @@ var InlineMath = Node2.create({
218
227
  ];
219
228
  },
220
229
  addNodeView() {
230
+ const { katexOptions } = this.options;
221
231
  return ({ node, getPos }) => {
222
232
  const wrapper = document.createElement("span");
223
- wrapper.className = "Tiptap-mathematics-render Tiptap-mathematics-render--editable";
233
+ wrapper.className = "tiptap-mathematics-render";
234
+ if (this.editor.isEditable) {
235
+ wrapper.classList.add("tiptap-mathematics-render--editable");
236
+ }
224
237
  wrapper.dataset.type = "inline-math";
225
238
  wrapper.setAttribute("data-latex", node.attrs.latex);
226
239
  function renderMath() {
227
240
  try {
228
- katex2.render(node.attrs.latex, wrapper);
241
+ katex2.render(node.attrs.latex, wrapper, katexOptions);
229
242
  wrapper.classList.remove("inline-math-error");
230
243
  } catch {
231
244
  wrapper.textContent = node.attrs.latex;
@@ -258,7 +271,7 @@ var InlineMath = Node2.create({
258
271
  });
259
272
 
260
273
  // src/mathematics.ts
261
- var Math = Extension.create({
274
+ var Mathematics = Extension.create({
262
275
  name: "Mathematics",
263
276
  addOptions() {
264
277
  return {
@@ -268,18 +281,60 @@ var Math = Extension.create({
268
281
  };
269
282
  },
270
283
  addExtensions() {
271
- return [BlockMath.configure(this.options.blockOptions), InlineMath.configure(this.options.inlineOptions)];
284
+ return [
285
+ BlockMath.configure({ ...this.options.blockOptions, katexOptions: this.options.katexOptions }),
286
+ InlineMath.configure({ ...this.options.inlineOptions, katexOptions: this.options.katexOptions })
287
+ ];
272
288
  }
273
289
  });
274
- var Mathematics = Math;
290
+
291
+ // src/utils.ts
292
+ var mathMigrationRegex = /(?<!\d)\$(?!\$)(?:[^$\n]|\\\$)*?(?<!\\)\$(?!\d)/g;
293
+ function createMathMigrateTransaction(editor, tr, regex = mathMigrationRegex) {
294
+ tr.doc.descendants((node, pos) => {
295
+ if (!node.isText || !node.text || !node.text.includes("$")) {
296
+ return;
297
+ }
298
+ const { text } = node;
299
+ const match = node.text.match(regex);
300
+ if (!match) {
301
+ return;
302
+ }
303
+ match.forEach((mathMatch) => {
304
+ const start = text.indexOf(mathMatch);
305
+ const end = start + mathMatch.length;
306
+ const from = tr.mapping.map(pos + start);
307
+ const $from = tr.doc.resolve(from);
308
+ const parent = $from.parent;
309
+ const index = $from.index();
310
+ const { inlineMath } = editor.schema.nodes;
311
+ if (!parent.canReplaceWith(index, index + 1, inlineMath)) {
312
+ return;
313
+ }
314
+ tr.replaceWith(
315
+ tr.mapping.map(pos + start),
316
+ tr.mapping.map(pos + end),
317
+ inlineMath.create({ latex: mathMatch.slice(1, -1) })
318
+ );
319
+ });
320
+ });
321
+ tr.setMeta("addToHistory", false);
322
+ return tr;
323
+ }
324
+ function migrateMathStrings(editor, regex = mathMigrationRegex) {
325
+ const tr = createMathMigrateTransaction(editor, editor.state.tr, regex);
326
+ editor.view.dispatch(tr);
327
+ }
275
328
 
276
329
  // src/index.ts
277
- var index_default = Math;
330
+ var index_default = Mathematics;
278
331
  export {
279
332
  BlockMath,
280
333
  InlineMath,
281
- Math,
282
334
  Mathematics,
283
- index_default as default
335
+ createMathMigrateTransaction,
336
+ index_default as default,
337
+ mathMigrationRegex,
338
+ migrateMathStrings
284
339
  };
285
340
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/mathematics.ts","../src/extensions/BlockMath.ts","../src/extensions/InlineMath.ts","../src/index.ts"],"sourcesContent":["import { Extension } from '@tiptap/core'\n\nimport { BlockMath, InlineMath } from './extensions/index.js'\nimport type { MathematicsOptions } from './types.js'\n\nexport const Math = Extension.create<MathematicsOptions>({\n name: 'Mathematics',\n\n addOptions() {\n return {\n inlineOptions: undefined,\n blockOptions: undefined,\n katexOptions: undefined,\n }\n },\n\n addExtensions() {\n return [BlockMath.configure(this.options.blockOptions), InlineMath.configure(this.options.inlineOptions)]\n },\n})\n\nexport const Mathematics = Math\n\nexport default Math\n","import { InputRule, mergeAttributes, Node } from '@tiptap/core'\nimport type { Node as PMNode } from '@tiptap/pm/model'\nimport katex from 'katex'\n\nexport type BlockMathOptions = {\n onClick?: (node: PMNode, pos: number) => void\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n blockMath: {\n /**\n * Set block math node with LaTeX string.\n * @param options - Options for setting block math.\n * @returns ReturnType\n */\n setBlockMath: (options: { latex: string; pos?: number }) => ReturnType\n\n /**\n * Unset block math node.\n * @returns ReturnType\n */\n unsetBlockMath: (options?: { pos?: number }) => ReturnType\n\n /**\n * Update block math node with optional LaTeX string.\n * @param options - Options for updating block math.\n * @returns ReturnType\n */\n updateBlockMath: (options?: { latex?: string; pos?: number }) => ReturnType\n }\n }\n}\n\n/**\n * BlockMath is a Tiptap extension for rendering block mathematical expressions using KaTeX.\n * It allows users to insert LaTeX formatted math expressions block within text.\n * It supports rendering, input rules for LaTeX syntax, and click handling for interaction.\n *\n * @example\n * ```javascript\n * import { BlockMath } from 'your-extension-path'\n * import { Editor } from '@tiptap/core'\n *\n * const editor = new Editor({\n * extensions: [\n * BlockMath.configure({\n * onClick: (node, pos) => {\n * console.log('Block math clicked:', node.attrs.latex, 'at position:', pos)\n * },\n * }),\n * ],\n * })\n */\nexport const BlockMath = Node.create({\n name: 'blockMath',\n\n group: 'block',\n\n atom: true,\n\n addOptions() {\n return {\n onClick: undefined,\n }\n },\n\n addAttributes() {\n return {\n latex: {\n default: '',\n parseHTML: element => element.getAttribute('data-latex'),\n renderHTML: attributes => {\n return {\n 'data-latex': attributes.latex,\n }\n },\n },\n }\n },\n\n addCommands() {\n return {\n setBlockMath:\n options =>\n ({ commands, editor }) => {\n const { latex, pos } = options\n return commands.insertContentAt(pos ?? editor.state.selection.from, {\n type: this.name,\n attrs: { latex },\n })\n },\n\n unsetBlockMath:\n options =>\n ({ editor, tr }) => {\n const pos = options?.pos ?? editor.state.selection.$from.pos\n const node = editor.state.doc.nodeAt(pos)\n\n if (!node || node.type.name !== this.name) {\n return false\n }\n\n tr.delete(pos, pos + node.nodeSize)\n return true\n },\n\n updateBlockMath:\n options =>\n ({ editor, tr }) => {\n const latex = options?.latex\n let pos = options?.pos\n\n if (pos === undefined) {\n pos = editor.state.selection.$from.pos\n }\n\n const node = editor.state.doc.nodeAt(pos)\n\n if (!node || node.type.name !== this.name) {\n return false\n }\n\n tr.setNodeMarkup(pos, this.type, {\n ...node.attrs,\n latex: latex || node.attrs.latex,\n })\n\n return true\n },\n }\n },\n\n parseHTML() {\n return [\n {\n tag: 'div[data-type=\"block-math\"]',\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['div', mergeAttributes(HTMLAttributes, { 'data-type': 'block-math' })]\n },\n\n addInputRules() {\n return [\n new InputRule({\n find: /^\\$\\$\\$([^$]+)\\$\\$\\$$/,\n handler: ({ state, range, match }) => {\n const [, latex] = match\n const { tr } = state\n const start = range.from\n const end = range.to\n\n tr.replaceWith(start, end, this.type.create({ latex }))\n },\n }),\n ]\n },\n\n addNodeView() {\n return ({ node, getPos }) => {\n const wrapper = document.createElement('div')\n const innerWrapper = document.createElement('div')\n wrapper.className = 'Tiptap-mathematics-render Tiptap-mathematics-render--editable'\n innerWrapper.className = 'block-math-inner'\n wrapper.dataset.type = 'block-math'\n wrapper.setAttribute('data-latex', node.attrs.latex)\n wrapper.appendChild(innerWrapper)\n\n function renderMath() {\n try {\n katex.render(node.attrs.latex, innerWrapper)\n wrapper.classList.remove('block-math-error')\n } catch {\n wrapper.textContent = node.attrs.latex\n wrapper.classList.add('block-math-error')\n }\n }\n\n const handleClick = (event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n const pos = getPos()\n\n if (pos == null) {\n return\n }\n\n if (this.options.onClick) {\n this.options.onClick(node, pos)\n }\n }\n\n if (this.options.onClick) {\n wrapper.addEventListener('click', handleClick)\n }\n\n renderMath()\n\n return {\n dom: wrapper,\n destroy() {\n wrapper.removeEventListener('click', handleClick)\n },\n }\n }\n },\n})\n","import { InputRule, mergeAttributes, Node } from '@tiptap/core'\nimport type { Node as PMNode } from '@tiptap/pm/model'\nimport katex from 'katex'\n\nexport type InlineMathOptions = {\n onClick?: (node: PMNode, pos: number) => void\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n inlineMath: {\n /**\n * Set inline math node with LaTeX string.\n * @param options - Options for setting inline math.\n * @returns ReturnType\n */\n setInlineMath: (options: { latex: string; pos?: number }) => ReturnType\n\n /**\n * Unset inline math node.\n * @returns ReturnType\n */\n unsetInlineMath: (options?: { pos?: number }) => ReturnType\n\n /**\n * Update inline math node with optional LaTeX string.\n * @param options - Options for updating inline math.\n * @returns ReturnType\n */\n updateInlineMath: (options?: { latex?: string; pos?: number }) => ReturnType\n }\n }\n}\n\n/**\n * InlineMath is a Tiptap extension for rendering inline mathematical expressions using KaTeX.\n * It allows users to insert LaTeX formatted math expressions inline within text.\n * It supports rendering, input rules for LaTeX syntax, and click handling for interaction.\n *\n * @example\n * ```javascript\n * import { InlineMath } from 'your-extension-path'\n * import { Editor } from '@tiptap/core'\n *\n * const editor = new Editor({\n * extensions: [\n * InlineMath.configure({\n * onClick: (node, pos) => {\n * console.log('Inline math clicked:', node.attrs.latex, 'at position:', pos)\n * },\n * }),\n * ],\n * })\n */\nexport const InlineMath = Node.create<InlineMathOptions>({\n name: 'inlineMath',\n\n group: 'inline',\n\n inline: true,\n\n atom: true,\n\n addOptions() {\n return {\n onClick: undefined,\n }\n },\n\n addAttributes() {\n return {\n latex: {\n default: '',\n parseHTML: element => element.getAttribute('data-latex'),\n renderHTML: attributes => {\n return {\n 'data-latex': attributes.latex,\n }\n },\n },\n }\n },\n\n addCommands() {\n return {\n setInlineMath:\n options =>\n ({ editor, tr }) => {\n const latex = options?.latex\n const pos = options?.pos ?? editor.state.selection.$from.pos\n\n if (!latex) {\n return false\n }\n\n tr.replaceWith(pos, pos, this.type.create({ latex }))\n return true\n },\n\n unsetInlineMath:\n options =>\n ({ editor, tr }) => {\n const pos = options?.pos ?? editor.state.selection.$from.pos\n const node = editor.state.doc.nodeAt(pos)\n\n if (!node || node.type.name !== this.name) {\n return false\n }\n\n tr.delete(pos, pos + node.nodeSize)\n return true\n },\n\n updateInlineMath:\n options =>\n ({ editor, tr }) => {\n const latex = options?.latex\n let pos = options?.pos\n\n if (pos === undefined) {\n pos = editor.state.selection.$from.pos\n }\n\n const node = editor.state.doc.nodeAt(pos)\n\n if (!node || node.type.name !== this.name) {\n return false\n }\n\n tr.setNodeMarkup(pos, this.type, { ...node.attrs, latex })\n\n return true\n },\n }\n },\n\n parseHTML() {\n return [\n {\n tag: 'span[data-type=\"inline-math\"]',\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['span', mergeAttributes(HTMLAttributes, { 'data-type': 'inline-math' })]\n },\n\n addInputRules() {\n return [\n new InputRule({\n find: /(?<!\\$)\\$\\$([^$\\n]+)\\$\\$(?!\\$)$/,\n handler: ({ state, range, match }) => {\n const [, latex] = match\n const { tr } = state\n const start = range.from\n const end = range.to\n\n tr.replaceWith(start, end, this.type.create({ latex }))\n },\n }),\n ]\n },\n\n addNodeView() {\n return ({ node, getPos }) => {\n const wrapper = document.createElement('span')\n wrapper.className = 'Tiptap-mathematics-render Tiptap-mathematics-render--editable'\n wrapper.dataset.type = 'inline-math'\n wrapper.setAttribute('data-latex', node.attrs.latex)\n\n function renderMath() {\n try {\n katex.render(node.attrs.latex, wrapper)\n wrapper.classList.remove('inline-math-error')\n } catch {\n wrapper.textContent = node.attrs.latex\n wrapper.classList.add('inline-math-error')\n }\n }\n\n const handleClick = (event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n const pos = getPos()\n\n if (pos == null) {\n return\n }\n\n if (this.options.onClick) {\n this.options.onClick(node, pos)\n }\n }\n\n if (this.options.onClick) {\n wrapper.addEventListener('click', handleClick)\n }\n\n renderMath()\n\n return {\n dom: wrapper,\n destroy() {\n wrapper.removeEventListener('click', handleClick)\n },\n }\n }\n },\n})\n","import { Math } from './mathematics.js'\n\nexport * from './extensions/index.js'\nexport * from './mathematics.js'\nexport * from './types.js'\n\nexport default Math\n"],"mappings":"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","names":["InputRule","mergeAttributes","Node","katex"]}
1
+ {"version":3,"sources":["../src/mathematics.ts","../src/extensions/BlockMath.ts","../src/extensions/InlineMath.ts","../src/utils.ts","../src/index.ts"],"sourcesContent":["import { Extension } from '@tiptap/core'\n\nimport { BlockMath, InlineMath } from './extensions/index.js'\nimport type { MathematicsOptions } from './types.js'\n\n/**\n * Mathematics extension for Tiptap that provides both inline and block math support using KaTeX.\n * This extension combines the InlineMath and BlockMath extensions to provide a complete\n * mathematical expression solution for rich text editing. It supports LaTeX syntax,\n * custom rendering options, and interactive math nodes.\n *\n * @example\n * ```typescript\n * import { Editor } from '@tiptap/core'\n * import { Mathematics } from '@tiptap/extension-mathematics'\n * import { migrateMathStrings } from '@tiptap/extension-mathematics/utils'\n *\n * const editor = new Editor({\n * extensions: [\n * Mathematics.configure({\n * inlineOptions: {\n * onClick: (node, pos) => {\n * console.log('Inline math clicked:', node.attrs.latex)\n * }\n * },\n * blockOptions: {\n * onClick: (node, pos) => {\n * console.log('Block math clicked:', node.attrs.latex)\n * }\n * },\n * katexOptions: {\n * displayMode: false,\n * throwOnError: false,\n * macros: {\n * '\\\\RR': '\\\\mathbb{R}',\n * '\\\\ZZ': '\\\\mathbb{Z}'\n * }\n * }\n * })\n * ],\n * content: `\n * <p>Inline math: $E = mc^2$</p>\n * <div data-type=\"block-math\" data-latex=\"\\\\sum_{i=1}^{n} x_i = X\"></div>\n * `,\n * onCreate({ editor }) {\n * // Optional: Migrate existing math strings to math nodes\n * migrateMathStrings(editor)\n * }\n * })\n * ```\n */\nexport const Mathematics = Extension.create<MathematicsOptions>({\n name: 'Mathematics',\n\n addOptions() {\n return {\n inlineOptions: undefined,\n blockOptions: undefined,\n katexOptions: undefined,\n }\n },\n\n addExtensions() {\n return [\n BlockMath.configure({ ...this.options.blockOptions, katexOptions: this.options.katexOptions }),\n InlineMath.configure({ ...this.options.inlineOptions, katexOptions: this.options.katexOptions }),\n ]\n },\n})\n\nexport default Mathematics\n","import { InputRule, mergeAttributes, Node } from '@tiptap/core'\nimport type { Node as PMNode } from '@tiptap/pm/model'\nimport katex, { type KatexOptions } from 'katex'\n\n/**\n * Configuration options for the BlockMath extension.\n */\nexport type BlockMathOptions = {\n /**\n * KaTeX specific options\n * @see https://katex.org/docs/options.html\n * @example\n * ```ts\n * katexOptions: {\n * displayMode: true,\n * throwOnError: false,\n * },\n */\n katexOptions?: KatexOptions\n\n /**\n * Optional click handler for block math nodes.\n * Called when a user clicks on a block math expression in the editor.\n *\n * @param node - The ProseMirror node representing the block math element\n * @param pos - The position of the node within the document\n * @example\n * ```ts\n * onClick: (node, pos) => {\n * console.log('Block math clicked:', node.attrs.latex, 'at position:', pos)\n * },\n * ```\n */\n onClick?: (node: PMNode, pos: number) => void\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n insertBlockMath: {\n /**\n * Inserts a math block node with LaTeX string.\n * @param options - Options for inserting block math.\n * @returns ReturnType\n */\n insertBlockMath: (options: { latex: string; pos?: number }) => ReturnType\n\n /**\n * Deletes a block math node.\n * @returns ReturnType\n */\n deleteBlockMath: (options?: { pos?: number }) => ReturnType\n\n /**\n * Update block math node with optional LaTeX string.\n * @param options - Options for updating block math.\n * @returns ReturnType\n */\n updateBlockMath: (options?: { latex: string; pos?: number }) => ReturnType\n }\n }\n}\n\n/**\n * BlockMath is a Tiptap extension for rendering block mathematical expressions using KaTeX.\n * It allows users to insert LaTeX formatted math expressions block within text.\n * It supports rendering, input rules for LaTeX syntax, and click handling for interaction.\n *\n * @example\n * ```javascript\n * import { BlockMath } from '@tiptap/extension-mathematics'\n * import { Editor } from '@tiptap/core'\n *\n * const editor = new Editor({\n * extensions: [\n * BlockMath.configure({\n * onClick: (node, pos) => {\n * console.log('Block math clicked:', node.attrs.latex, 'at position:', pos)\n * },\n * }),\n * ],\n * })\n */\nexport const BlockMath = Node.create<BlockMathOptions>({\n name: 'blockMath',\n\n group: 'block',\n\n atom: true,\n\n addOptions() {\n return {\n onClick: undefined,\n katexOptions: undefined,\n }\n },\n\n addAttributes() {\n return {\n latex: {\n default: '',\n parseHTML: element => element.getAttribute('data-latex'),\n renderHTML: attributes => {\n return {\n 'data-latex': attributes.latex,\n }\n },\n },\n }\n },\n\n addCommands() {\n return {\n insertBlockMath:\n options =>\n ({ commands, editor }) => {\n const { latex, pos } = options\n\n if (!latex) {\n return false\n }\n\n return commands.insertContentAt(pos ?? editor.state.selection.from, {\n type: this.name,\n attrs: { latex },\n })\n },\n\n deleteBlockMath:\n options =>\n ({ editor, tr }) => {\n const pos = options?.pos ?? editor.state.selection.$from.pos\n const node = editor.state.doc.nodeAt(pos)\n\n if (!node || node.type.name !== this.name) {\n return false\n }\n\n tr.delete(pos, pos + node.nodeSize)\n return true\n },\n\n updateBlockMath:\n options =>\n ({ editor, tr }) => {\n const latex = options?.latex\n let pos = options?.pos\n\n if (pos === undefined) {\n pos = editor.state.selection.$from.pos\n }\n\n const node = editor.state.doc.nodeAt(pos)\n\n if (!node || node.type.name !== this.name) {\n return false\n }\n\n tr.setNodeMarkup(pos, this.type, {\n ...node.attrs,\n latex: latex || node.attrs.latex,\n })\n\n return true\n },\n }\n },\n\n parseHTML() {\n return [\n {\n tag: 'div[data-type=\"block-math\"]',\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['div', mergeAttributes(HTMLAttributes, { 'data-type': 'block-math' })]\n },\n\n addInputRules() {\n return [\n new InputRule({\n find: /^\\$\\$\\$([^$]+)\\$\\$\\$$/,\n handler: ({ state, range, match }) => {\n const [, latex] = match\n const { tr } = state\n const start = range.from\n const end = range.to\n\n tr.replaceWith(start, end, this.type.create({ latex }))\n },\n }),\n ]\n },\n\n addNodeView() {\n const { katexOptions } = this.options\n\n return ({ node, getPos }) => {\n const wrapper = document.createElement('div')\n const innerWrapper = document.createElement('div')\n wrapper.className = 'tiptap-mathematics-render'\n\n if (this.editor.isEditable) {\n wrapper.classList.add('tiptap-mathematics-render--editable')\n }\n\n innerWrapper.className = 'block-math-inner'\n wrapper.dataset.type = 'block-math'\n wrapper.setAttribute('data-latex', node.attrs.latex)\n wrapper.appendChild(innerWrapper)\n\n function renderMath() {\n try {\n katex.render(node.attrs.latex, innerWrapper, katexOptions)\n wrapper.classList.remove('block-math-error')\n } catch {\n wrapper.textContent = node.attrs.latex\n wrapper.classList.add('block-math-error')\n }\n }\n\n const handleClick = (event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n const pos = getPos()\n\n if (pos == null) {\n return\n }\n\n if (this.options.onClick) {\n this.options.onClick(node, pos)\n }\n }\n\n if (this.options.onClick) {\n wrapper.addEventListener('click', handleClick)\n }\n\n renderMath()\n\n return {\n dom: wrapper,\n destroy() {\n wrapper.removeEventListener('click', handleClick)\n },\n }\n }\n },\n})\n","import { InputRule, mergeAttributes, Node } from '@tiptap/core'\nimport type { Node as PMNode } from '@tiptap/pm/model'\nimport katex, { type KatexOptions } from 'katex'\n\n/**\n * Configuration options for the InlineMath extension.\n */\nexport type InlineMathOptions = {\n /**\n * KaTeX specific options\n * @see https://katex.org/docs/options.html\n * @example\n * ```ts\n * katexOptions: {\n * displayMode: false,\n * throwOnError: false,\n * macros: {\n * '\\\\RR': '\\\\mathbb{R}',\n * '\\\\ZZ': '\\\\mathbb{Z}'\n * }\n * }\n * ```\n */\n katexOptions?: KatexOptions\n\n /**\n * Optional click handler for inline math nodes.\n * Called when a user clicks on an inline math expression in the editor.\n *\n * @param node - The ProseMirror node representing the inline math element\n * @param pos - The position of the node within the document\n * @example\n * ```ts\n * onClick: (node, pos) => {\n * console.log('Inline math clicked:', node.attrs.latex, 'at position:', pos)\n * }\n * ```\n */\n onClick?: (node: PMNode, pos: number) => void\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n inlineMath: {\n /**\n * Insert a inline math node with LaTeX string.\n * @param options - Options for inserting inline math.\n * @returns ReturnType\n */\n insertInlineMath: (options: { latex: string; pos?: number }) => ReturnType\n\n /**\n * Delete an inline math node.\n * @returns ReturnType\n */\n deleteInlineMath: (options?: { pos?: number }) => ReturnType\n\n /**\n * Update inline math node with optional LaTeX string.\n * @param options - Options for updating inline math.\n * @returns ReturnType\n */\n updateInlineMath: (options?: { latex?: string; pos?: number }) => ReturnType\n }\n }\n}\n\n/**\n * InlineMath is a Tiptap extension for rendering inline mathematical expressions using KaTeX.\n * It allows users to insert LaTeX formatted math expressions inline within text.\n * It supports rendering, input rules for LaTeX syntax, and click handling for interaction.\n *\n * @example\n * ```javascript\n * import { InlineMath } from '@tiptap/extension-mathematics'\n * import { Editor } from '@tiptap/core'\n *\n * const editor = new Editor({\n * extensions: [\n * InlineMath.configure({\n * onClick: (node, pos) => {\n * console.log('Inline math clicked:', node.attrs.latex, 'at position:', pos)\n * },\n * }),\n * ],\n * })\n */\nexport const InlineMath = Node.create<InlineMathOptions>({\n name: 'inlineMath',\n\n group: 'inline',\n\n inline: true,\n\n atom: true,\n\n addOptions() {\n return {\n onClick: undefined,\n katexOptions: undefined,\n }\n },\n\n addAttributes() {\n return {\n latex: {\n default: '',\n parseHTML: element => element.getAttribute('data-latex'),\n renderHTML: attributes => {\n return {\n 'data-latex': attributes.latex,\n }\n },\n },\n }\n },\n\n addCommands() {\n return {\n insertInlineMath:\n options =>\n ({ editor, tr }) => {\n const latex = options.latex\n\n const from = options?.pos ?? editor.state.selection.from\n\n if (!latex) {\n return false\n }\n\n tr.replaceWith(from, from, this.type.create({ latex }))\n return true\n },\n\n deleteInlineMath:\n options =>\n ({ editor, tr }) => {\n const pos = options?.pos ?? editor.state.selection.$from.pos\n const node = editor.state.doc.nodeAt(pos)\n\n if (!node || node.type.name !== this.name) {\n return false\n }\n\n tr.delete(pos, pos + node.nodeSize)\n return true\n },\n\n updateInlineMath:\n options =>\n ({ editor, tr }) => {\n const latex = options?.latex\n let pos = options?.pos\n\n if (pos === undefined) {\n pos = editor.state.selection.$from.pos\n }\n\n const node = editor.state.doc.nodeAt(pos)\n\n if (!node || node.type.name !== this.name) {\n return false\n }\n\n tr.setNodeMarkup(pos, this.type, { ...node.attrs, latex })\n\n return true\n },\n }\n },\n\n parseHTML() {\n return [\n {\n tag: 'span[data-type=\"inline-math\"]',\n },\n ]\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['span', mergeAttributes(HTMLAttributes, { 'data-type': 'inline-math' })]\n },\n\n addInputRules() {\n return [\n new InputRule({\n find: /(?<!\\$)\\$\\$([^$\\n]+)\\$\\$(?!\\$)$/,\n handler: ({ state, range, match }) => {\n const [, latex] = match\n const { tr } = state\n const start = range.from\n const end = range.to\n\n tr.replaceWith(start, end, this.type.create({ latex }))\n },\n }),\n ]\n },\n\n addNodeView() {\n const { katexOptions } = this.options\n\n return ({ node, getPos }) => {\n const wrapper = document.createElement('span')\n wrapper.className = 'tiptap-mathematics-render'\n\n if (this.editor.isEditable) {\n wrapper.classList.add('tiptap-mathematics-render--editable')\n }\n\n wrapper.dataset.type = 'inline-math'\n wrapper.setAttribute('data-latex', node.attrs.latex)\n\n function renderMath() {\n try {\n katex.render(node.attrs.latex, wrapper, katexOptions)\n wrapper.classList.remove('inline-math-error')\n } catch {\n wrapper.textContent = node.attrs.latex\n wrapper.classList.add('inline-math-error')\n }\n }\n\n const handleClick = (event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n const pos = getPos()\n\n if (pos == null) {\n return\n }\n\n if (this.options.onClick) {\n this.options.onClick(node, pos)\n }\n }\n\n if (this.options.onClick) {\n wrapper.addEventListener('click', handleClick)\n }\n\n renderMath()\n\n return {\n dom: wrapper,\n destroy() {\n wrapper.removeEventListener('click', handleClick)\n },\n }\n }\n },\n})\n","import type { Editor } from '@tiptap/core'\nimport type { Transaction } from '@tiptap/pm/state'\n\n/**\n * Regular expression to match LaTeX math strings wrapped in single dollar signs.\n * This should not catch dollar signs which are not part of a math expression,\n * like those used for currency or other purposes.\n * It ensures that the dollar signs are not preceded or followed by digits,\n * allowing for proper identification of inline math expressions.\n *\n * - `$x^2 + y^2 = z^2$` will match\n * - `This is $inline math$ in text.` will match\n * - `This is $100$ dollars.` will not match (as it is not a math expression)\n * - `This is $x^2 + y^2 = z^2$ and $100$ dollars.` will match both math expressions\n */\nexport const mathMigrationRegex = /(?<!\\d)\\$(?!\\$)(?:[^$\\n]|\\\\\\$)*?(?<!\\\\)\\$(?!\\d)/g\n\n/**\n * Creates a transaction that migrates existing math strings in the document to new math nodes.\n * This function traverses the document and replaces LaTeX math syntax (wrapped in single dollar signs)\n * with proper inline math nodes, preserving the mathematical content.\n *\n * @param editor - The editor instance containing the schema and configuration\n * @param tr - The transaction to modify with the migration operations\n * @returns The modified transaction with math string replacements\n *\n * @example\n * ```typescript\n * const editor = new Editor({ ... })\n * const tr = editor.state.tr\n * const updatedTr = createMathMigrateTransaction(editor, tr)\n * editor.view.dispatch(updatedTr)\n * ```\n */\nexport function createMathMigrateTransaction(editor: Editor, tr: Transaction, regex: RegExp = mathMigrationRegex) {\n // we traverse the document and replace all math nodes with the new math nodes\n tr.doc.descendants((node, pos) => {\n if (!node.isText || !node.text || !node.text.includes('$')) {\n return\n }\n\n const { text } = node\n\n const match = node.text.match(regex)\n if (!match) {\n return\n }\n\n match.forEach(mathMatch => {\n const start = text.indexOf(mathMatch)\n const end = start + mathMatch.length\n\n const from = tr.mapping.map(pos + start)\n\n const $from = tr.doc.resolve(from)\n const parent = $from.parent\n const index = $from.index()\n\n const { inlineMath } = editor.schema.nodes\n\n if (!parent.canReplaceWith(index, index + 1, inlineMath)) {\n return\n }\n\n // Replace the math syntax with a new math node\n tr.replaceWith(\n tr.mapping.map(pos + start),\n tr.mapping.map(pos + end),\n inlineMath.create({ latex: mathMatch.slice(1, -1) }),\n )\n })\n })\n\n // don't add to history\n tr.setMeta('addToHistory', false)\n return tr\n}\n\n/**\n * Migrates existing math strings in the editor document to math nodes.\n * This function creates and dispatches a transaction that converts LaTeX math syntax\n * (text wrapped in single dollar signs) into proper inline math nodes. The migration\n * happens immediately and is not added to the editor's history.\n *\n * @param editor - The editor instance to perform the migration on\n *\n * @example\n * ```typescript\n * const editor = new Editor({\n * extensions: [Mathematics],\n * content: 'This is inline math: $x^2 + y^2 = z^2$ in text.'\n * })\n *\n * // Math strings will be automatically migrated to math nodes\n * migrateMathStrings(editor)\n * ```\n */\nexport function migrateMathStrings(editor: Editor, regex: RegExp = mathMigrationRegex) {\n const tr = createMathMigrateTransaction(editor, editor.state.tr, regex)\n editor.view.dispatch(tr)\n}\n","import { Mathematics } from './mathematics.js'\n\nexport * from './extensions/index.js'\nexport * from './mathematics.js'\nexport * from './types.js'\nexport * from './utils.js'\n\nexport default Mathematics\n"],"mappings":"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","names":["InputRule","mergeAttributes","Node","katex"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tiptap/extension-mathematics",
3
3
  "description": "latex math extension for tiptap",
4
- "version": "3.0.0-beta.17",
4
+ "version": "3.0.0-beta.19",
5
5
  "homepage": "https://tiptap.dev/api/extensions/mathematics",
6
6
  "keywords": [
7
7
  "tiptap",
@@ -37,13 +37,13 @@
37
37
  ],
38
38
  "devDependencies": {
39
39
  "@types/katex": "^0.16.7",
40
- "@tiptap/core": "3.0.0-beta.17",
41
- "@tiptap/pm": "3.0.0-beta.17"
40
+ "@tiptap/core": "3.0.0-beta.19",
41
+ "@tiptap/pm": "3.0.0-beta.19"
42
42
  },
43
43
  "peerDependencies": {
44
44
  "katex": "^0.16.4",
45
- "@tiptap/core": "3.0.0-beta.17",
46
- "@tiptap/pm": "3.0.0-beta.17"
45
+ "@tiptap/core": "3.0.0-beta.19",
46
+ "@tiptap/pm": "3.0.0-beta.19"
47
47
  },
48
48
  "scripts": {
49
49
  "build": "tsup",