@pilotiq/tiptap 3.10.7 → 3.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/Block.js +0 -1
  3. package/dist/MentionProvider.js +0 -1
  4. package/dist/PlainTextEditor.js +0 -1
  5. package/dist/RichTextField.js +0 -1
  6. package/dist/extensions/AiInlineDiffExtension.js +0 -1
  7. package/dist/extensions/AiSuggestionExtension.js +0 -1
  8. package/dist/extensions/BlockNodeExtension.js +0 -1
  9. package/dist/extensions/DragHandleExtension.js +0 -1
  10. package/dist/extensions/GridExtension.js +0 -1
  11. package/dist/extensions/MentionExtension.js +0 -1
  12. package/dist/extensions/MergeTagExtension.js +0 -1
  13. package/dist/extensions/SlashCommandExtension.js +0 -1
  14. package/dist/extensions/TextSizeMarks.js +0 -1
  15. package/dist/index.js +0 -1
  16. package/dist/markdownExtension.js +2 -2
  17. package/dist/markdownStorage.js +0 -1
  18. package/dist/plugin.js +0 -1
  19. package/dist/react/AiSuggestionBanner.js +0 -1
  20. package/dist/react/BlockNodeView.js +0 -1
  21. package/dist/react/BlockSidePanel.js +0 -1
  22. package/dist/react/CollabTextRenderer.js +47 -25
  23. package/dist/react/FloatingToolbar.js +0 -1
  24. package/dist/react/MarkdownEditor.js +0 -1
  25. package/dist/react/MentionMenu.js +0 -1
  26. package/dist/react/Palette.js +0 -1
  27. package/dist/react/SlashMenu.js +0 -1
  28. package/dist/react/TableFloatingToolbar.js +0 -1
  29. package/dist/react/TiptapEditor.js +0 -1
  30. package/dist/react/Toolbar.js +0 -1
  31. package/dist/react/toolbarButtons.js +0 -1
  32. package/dist/react/useAiInlineDiff.js +0 -1
  33. package/dist/react/useAiSuggestionBridge.js +0 -1
  34. package/dist/register.js +0 -1
  35. package/dist/render.js +0 -1
  36. package/dist/surgicalOps.js +0 -1
  37. package/dist/test/setup.js +12 -1
  38. package/package.json +22 -22
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @pilotiq/tiptap
2
2
 
3
+ ## 3.11.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 30a802e: `CollabTextRenderer` (the Tiptap surface behind collab/AI `TextField` / `TextareaField`) now renders whole-field AI suggestions through `AiInlineDiffExtension` + `AiSuggestionBanner` — the same red/green inline diff and amber Accept/Reject banner `RichTextField` uses — instead of the legacy green-pill chip with ✓/✕. One review surface across every text shape. The chip bridge stays mounted for producer-supplied `editorRange` suggestions; `onApplyWholeField` remains the fallback when a suggestion can't parse.
8
+
9
+ ## 3.10.8
10
+
11
+ ### Patch Changes
12
+
13
+ - 0d346bd: Stop emitting JS sourcemaps in the build (`sourceMap` removed from tsconfig.base.json). The previous release excluded `dist/*.js.map` from the tarball but left the trailing `//# sourceMappingURL=` comment in every `.js` file, so Vite dev in consumer apps chased the pointer and logged an ENOENT stack trace per module — louder than the warning it replaced. `declarationMap` stays on (editors silently skip missing `.d.ts.map`; Vite never reads `.d.ts`).
14
+ - c7d62e9: Relax the exact `3.22.4` pins on the ten `@tiptap/extension-*` peer (and dev) dependencies to `^3.22.4`. The exact pins were an accident of pinning the installed version when each extension feature landed, not an intentional ceiling — and because Tiptap extensions peer-pin `@tiptap/core` exactly per release train, the pins made it impossible for consumers to align on core ≥3.23 (required by `@tiptap/extension-collaboration@^3.23`), producing unavoidable `unmet peer` warnings. Consumers should keep their whole `@tiptap/*` set on one release train.
15
+
3
16
  ## 3.10.7
4
17
 
5
18
  ### Patch Changes
package/dist/Block.js CHANGED
@@ -53,4 +53,3 @@ export class Block {
53
53
  };
54
54
  }
55
55
  }
56
- //# sourceMappingURL=Block.js.map
@@ -101,4 +101,3 @@ export class MentionProvider {
101
101
  return { trigger: this._trigger, items: [...this._items] };
102
102
  }
103
103
  }
104
- //# sourceMappingURL=MentionProvider.js.map
@@ -154,4 +154,3 @@ export function createPlainTextEditor(options = {}) {
154
154
  }
155
155
  return config;
156
156
  }
157
- //# sourceMappingURL=PlainTextEditor.js.map
@@ -366,4 +366,3 @@ export class RichTextField extends Field {
366
366
  };
367
367
  }
368
368
  }
369
- //# sourceMappingURL=RichTextField.js.map
@@ -213,4 +213,3 @@ function buildDeletedWidget(text, prefix, id) {
213
213
  root.appendChild(inner);
214
214
  return root;
215
215
  }
216
- //# sourceMappingURL=AiInlineDiffExtension.js.map
@@ -407,4 +407,3 @@ function buildButton(prefix, variant, glyph, title, onClick) {
407
407
  });
408
408
  return btn;
409
409
  }
410
- //# sourceMappingURL=AiSuggestionExtension.js.map
@@ -100,4 +100,3 @@ export const BlockNodeExtension = Node.create({
100
100
  };
101
101
  },
102
102
  });
103
- //# sourceMappingURL=BlockNodeExtension.js.map
@@ -163,4 +163,3 @@ function createDragHandleView(view) {
163
163
  },
164
164
  };
165
165
  }
166
- //# sourceMappingURL=DragHandleExtension.js.map
@@ -102,4 +102,3 @@ export const GridColumn = Node.create({
102
102
  return ['div', mergeAttributes(HTMLAttributes, { 'data-type': 'gridColumn' }), 0];
103
103
  },
104
104
  });
105
- //# sourceMappingURL=GridExtension.js.map
@@ -162,4 +162,3 @@ async function fetchAsyncMentionItems(url, field, trigger, query) {
162
162
  return [];
163
163
  }
164
164
  }
165
- //# sourceMappingURL=MentionExtension.js.map
@@ -54,4 +54,3 @@ export const MergeTagExtension = Node.create({
54
54
  };
55
55
  },
56
56
  });
57
- //# sourceMappingURL=MergeTagExtension.js.map
@@ -241,4 +241,3 @@ function defaultsFromSchema(block) {
241
241
  }
242
242
  return out;
243
243
  }
244
- //# sourceMappingURL=SlashCommandExtension.js.map
@@ -44,4 +44,3 @@ export const SmallMarkExtension = Mark.create({
44
44
  };
45
45
  },
46
46
  });
47
- //# sourceMappingURL=TextSizeMarks.js.map
package/dist/index.js CHANGED
@@ -10,4 +10,3 @@ export { useAiSuggestionBridge } from './react/useAiSuggestionBridge.js';
10
10
  export { AiInlineDiffExtension, aiInlineDiffPluginKey, getAiInlineDiffState, } from './extensions/AiInlineDiffExtension.js';
11
11
  export { planReplaceBlock, planInsertBlockBefore, planDeleteBlock, planUpdateBlockMark, summarizeBlockStructure, } from './surgicalOps.js';
12
12
  export { renderRichTextToHtml, isRichTextValue, } from './render.js';
13
- //# sourceMappingURL=index.js.map
@@ -129,7 +129,7 @@ var require_markdown_it_task_lists = __commonJS({
129
129
  }
130
130
  });
131
131
 
132
- // ../../node_modules/.pnpm/tiptap-markdown@0.9.0_@tiptap+core@3.22.4_@tiptap+pm@3.22.4_/node_modules/tiptap-markdown/dist/tiptap-markdown.es.js
132
+ // ../../node_modules/.pnpm/tiptap-markdown@0.9.0_@tiptap+core@3.26.0_@tiptap+pm@3.26.0_/node_modules/tiptap-markdown/dist/tiptap-markdown.es.js
133
133
  import { Extension, Mark as Mark2, getHTMLFromFragment, Node as Node$1, extensions } from "@tiptap/core";
134
134
 
135
135
  // ../../node_modules/.pnpm/orderedmap@2.1.1/node_modules/orderedmap/dist/index.js
@@ -8859,7 +8859,7 @@ var MarkdownSerializerState = class {
8859
8859
  }
8860
8860
  };
8861
8861
 
8862
- // ../../node_modules/.pnpm/tiptap-markdown@0.9.0_@tiptap+core@3.22.4_@tiptap+pm@3.22.4_/node_modules/tiptap-markdown/dist/tiptap-markdown.es.js
8862
+ // ../../node_modules/.pnpm/tiptap-markdown@0.9.0_@tiptap+core@3.26.0_@tiptap+pm@3.26.0_/node_modules/tiptap-markdown/dist/tiptap-markdown.es.js
8863
8863
  var import_markdown_it_task_lists = __toESM(require_markdown_it_task_lists(), 1);
8864
8864
  import { Fragment as Fragment2, DOMParser } from "@tiptap/pm/model";
8865
8865
  import { Plugin, PluginKey } from "@tiptap/pm/state";
@@ -20,4 +20,3 @@ export function parseMarkdownToHtml(editor, source) {
20
20
  const html = getMarkdownStorage(editor)?.parser.parse(source);
21
21
  return typeof html === 'string' ? html : undefined;
22
22
  }
23
- //# sourceMappingURL=markdownStorage.js.map
package/dist/plugin.js CHANGED
@@ -22,4 +22,3 @@ export function tiptap() {
22
22
  },
23
23
  };
24
24
  }
25
- //# sourceMappingURL=plugin.js.map
@@ -69,4 +69,3 @@ export function AiSuggestionBanner({ fieldName, onApplyWholeField, onAcceptViaEd
69
69
  : 'Changes suggested'
70
70
  : `${pending.length} changes suggested` }), _jsxs("div", { className: "pilotiq-ai-banner-actions", children: [_jsx("button", { type: "button", className: "pilotiq-ai-banner-reject", onClick: handleReject, children: single ? 'Reject' : 'Reject all' }), _jsx("button", { type: "button", className: "pilotiq-ai-banner-accept", onClick: handleAccept, children: single ? 'Accept' : 'Accept all' })] })] }));
71
71
  }
72
- //# sourceMappingURL=AiSuggestionBanner.js.map
@@ -57,4 +57,3 @@ export function BlockNodeView(props) {
57
57
  };
58
58
  return (_jsx(NodeViewWrapper, { className: "pilotiq-block my-3 rounded-lg border bg-muted/30", children: _jsxs("div", { className: "flex items-start justify-between gap-2 px-3 py-2", children: [_jsxs("button", { type: "button", onClick: handleEdit, disabled: !onEdit, className: "flex items-center gap-2 text-left text-sm disabled:cursor-default", children: [meta.icon && _jsx("span", { "aria-hidden": "true", children: meta.icon }), _jsx("span", { className: "font-medium", children: meta.label }), _jsx("span", { className: "text-xs text-muted-foreground line-clamp-1", children: summary })] }), _jsxs("div", { className: "flex items-center gap-2", children: [onEdit && (_jsx("button", { type: "button", onClick: handleEdit, className: "text-xs text-muted-foreground hover:text-foreground", children: "Edit" })), _jsx("button", { type: "button", onClick: () => deleteNode(), className: "text-xs text-destructive hover:underline", children: "Remove" })] })] }) }));
59
59
  }
60
- //# sourceMappingURL=BlockNodeView.js.map
@@ -336,4 +336,3 @@ function nodeAt(editor, pos) {
336
336
  return null;
337
337
  }
338
338
  }
339
- //# sourceMappingURL=BlockSidePanel.js.map
@@ -1,11 +1,15 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useMemo, useRef } from 'react';
3
3
  import { useEditor, EditorContent } from '@tiptap/react';
4
+ import { Slice } from '@tiptap/pm/model';
4
5
  import { useCollabRoom, getCollabExtensions, } from '@pilotiq/pilotiq/react';
5
6
  import { useCollabSeed } from '@rudderjs/sync/react';
6
7
  import { createPlainTextEditor, plainTextOf, plainTextToDoc } from '../PlainTextEditor.js';
7
8
  import { AiSuggestionExtension } from '../extensions/AiSuggestionExtension.js';
9
+ import { AiInlineDiffExtension } from '../extensions/AiInlineDiffExtension.js';
8
10
  import { useAiSuggestionBridge } from './useAiSuggestionBridge.js';
11
+ import { useAiInlineDiff, useIsAiInlineDiffActive } from './useAiInlineDiff.js';
12
+ import { AiSuggestionBanner } from './AiSuggestionBanner.js';
9
13
  /**
10
14
  * Tiptap-backed plain-text editor for pilotiq's `TextField` / `TextareaField`
11
15
  * / similar single-line / multi-line text fields when collab is on.
@@ -93,12 +97,14 @@ export function CollabTextRenderer({ name, fragmentKey, multiline, defaultValue,
93
97
  // seeds the fragment on first connect when it's still empty. When
94
98
  // collab is off, seed from defaultValue directly.
95
99
  content: collabActive ? '' : defaultValue,
96
- // AI suggestions — always-on extension that tracks suggested edits as
97
- // inline strikethrough + Approve/Reject chip widgets. Idle until the
98
- // host calls `editor.commands.addAiSuggestion(...)` via the bridge below.
99
- // Matches the `TiptapEditor` wiring so suggestion mode works uniformly
100
+ // AI suggestions — chip extension (producer-supplied range
101
+ // suggestions) + inline-diff extension (whole-field suggestions:
102
+ // red strikethrough on removed runs, green on inserted, with the
103
+ // `<AiSuggestionBanner>` Accept / Reject below). Both idle until
104
+ // a suggestion arrives via the bridges below. Matches the
105
+ // `TiptapEditor` wiring so the review surface reads identically
100
106
  // across RichTextField / MarkdownField / TextField+TextareaField.
101
- extensions: [...collabExtensions, AiSuggestionExtension],
107
+ extensions: [...collabExtensions, AiSuggestionExtension, AiInlineDiffExtension],
102
108
  onUpdate: (text) => onChange(text),
103
109
  ...(onSubmit ? { onSubmit: () => { onSubmit(); return false; } } : {}),
104
110
  ...(className || editorAttributes
@@ -125,26 +131,35 @@ export function CollabTextRenderer({ name, fragmentKey, multiline, defaultValue,
125
131
  // `<PendingSuggestionsContext>` queue with the editor's `AiSuggestion`
126
132
  // extension. No-op when no provider is mounted (default no-op context).
127
133
  //
128
- // Whole-field fallback: chat-driven suggestions (e.g. `update_form_state`)
129
- // arrive without `meta.editorRange`. Plain-text editors opt into a
130
- // synthesized full-doc range so the inline-diff chip (red strikethrough on
131
- // the current value + green chip with the suggested text + ✓/✕ buttons)
132
- // renders BEFORE the user approves. The extension's `applyApprove` is
133
- // text-node-based which fits the plain-text schema exactly. The
134
- // `onApplyWholeField` callback stays as a fallback for cases that don't
135
- // synthesize (e.g. an empty doc — `from === to` skips the chip but the
136
- // applier still needs to swap content).
134
+ // Whole-field suggestions do NOT synthesize a chip range anymore —
135
+ // they render through `useAiInlineDiff` below (same red/green inline
136
+ // diff + banner as `TiptapEditor`), replacing the old green-pill chip
137
+ // that read differently from the rich-text surface. The bridge stays
138
+ // mounted for producer-supplied `meta.editorRange` suggestions (precise
139
+ // anchors worth visualizing in place) and as the `onApplyWholeField`
140
+ // fallback when the diff path can't parse a suggestion.
141
+ const applyWholeField = (value) => {
142
+ if (!editor || editor.isDestroyed)
143
+ return;
144
+ editor.commands.setContent(plainTextToDoc(value, !!multiline));
145
+ };
137
146
  useAiSuggestionBridge(editor ?? null, name, {
138
- synthesizeWholeFieldRange: (ed) => ({
139
- from: 0,
140
- to: ed.state.doc.content.size,
141
- }),
142
- onApplyWholeField: (value) => {
143
- if (!editor || editor.isDestroyed)
144
- return;
145
- editor.commands.setContent(plainTextToDoc(value, !!multiline));
147
+ onApplyWholeField: applyWholeField,
148
+ });
149
+ // Inline diff for whole-field suggestions — plain-text shape: each
150
+ // line wraps in a `paragraph` node, mirroring `plainTextToDoc`.
151
+ useAiInlineDiff(editor ?? null, name, {
152
+ parseSuggestion: (ed, value) => {
153
+ try {
154
+ const node = ed.schema.nodeFromJSON(plainTextToDoc(value, !!multiline));
155
+ return new Slice(node.content, 0, 0);
156
+ }
157
+ catch {
158
+ return null;
159
+ }
146
160
  },
147
161
  });
162
+ const isDiffActive = useIsAiInlineDiffActive(editor ?? null);
148
163
  // First-load seed when collab is active. Collaboration starts the editor
149
164
  // empty regardless of `defaultValue`; once the room's first sync
150
165
  // resolves, `useCollabSeed` runs the callback inside `ydoc.transact`.
@@ -197,6 +212,13 @@ export function CollabTextRenderer({ name, fragmentKey, multiline, defaultValue,
197
212
  onChange(plainTextOf(editor));
198
213
  // eslint-disable-next-line react-hooks/exhaustive-deps
199
214
  }, [editor]);
200
- return _jsx(EditorContent, { editor: editor });
215
+ // Banner mounts below the editor exactly like `TiptapEditor`'s — it
216
+ // renders nothing while no suggestion is pending for this field, so
217
+ // the single-line text surface keeps its normal footprint.
218
+ return (_jsxs(_Fragment, { children: [_jsx(EditorContent, { editor: editor }), _jsx(AiSuggestionBanner, { fieldName: name, onApplyWholeField: applyWholeField, ...(isDiffActive && editor
219
+ ? {
220
+ onAcceptViaEditor: () => editor.commands.acceptAiInlineDiff(),
221
+ onRejectViaEditor: () => editor.commands.rejectAiInlineDiff(),
222
+ }
223
+ : {}) })] }));
201
224
  }
202
- //# sourceMappingURL=CollabTextRenderer.js.map
@@ -110,4 +110,3 @@ function CodeIcon() {
110
110
  function LinkIcon() {
111
111
  return (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [_jsx("path", { d: "M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" }), _jsx("path", { d: "M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" })] }));
112
112
  }
113
- //# sourceMappingURL=FloatingToolbar.js.map
@@ -434,4 +434,3 @@ function TabButton({ active, onClick, children }) {
434
434
  : 'text-muted-foreground hover:text-foreground',
435
435
  ].join(' '), onClick: onClick, children: children }));
436
436
  }
437
- //# sourceMappingURL=MarkdownEditor.js.map
@@ -61,4 +61,3 @@ function groupBy(items, key) {
61
61
  }
62
62
  return out;
63
63
  }
64
- //# sourceMappingURL=MentionMenu.js.map
@@ -18,4 +18,3 @@ export function Palette({ trigger, swatches, custom, activeColor, onPick, onClea
18
18
  return (_jsx("button", { type: "button", title: s.label, "aria-label": s.label, "aria-pressed": Boolean(isActive), onClick: () => pick(s.value), className: `h-6 w-6 rounded border transition-transform hover:scale-110 ${isActive ? 'ring-2 ring-ring ring-offset-1' : 'border-border/60'}`, style: { background: s.value } }, s.value));
19
19
  }) }), custom && (_jsxs("label", { className: "mt-2 flex items-center justify-between gap-2 text-xs text-muted-foreground", children: [_jsx("span", { children: "Custom" }), _jsx("input", { type: "color", defaultValue: activeColor ?? '#000000', onChange: (e) => onPick(e.target.value), className: "h-6 w-12 cursor-pointer rounded border-0 bg-transparent p-0" })] })), _jsx("button", { type: "button", onClick: clear, className: "mt-2 w-full rounded px-2 py-1 text-xs text-muted-foreground hover:bg-accent hover:text-accent-foreground", children: clearLabel })] }) }) })] }));
20
20
  }
21
- //# sourceMappingURL=Palette.js.map
@@ -71,4 +71,3 @@ function groupBy(items, key) {
71
71
  }
72
72
  return out;
73
73
  }
74
- //# sourceMappingURL=SlashMenu.js.map
@@ -105,4 +105,3 @@ function findEnclosingTable(editor) {
105
105
  }
106
106
  return null;
107
107
  }
108
- //# sourceMappingURL=TableFloatingToolbar.js.map
@@ -610,4 +610,3 @@ function serializeForHidden(content, storage) {
610
610
  }
611
611
  return JSON.stringify(null);
612
612
  }
613
- //# sourceMappingURL=TiptapEditor.js.map
@@ -201,4 +201,3 @@ function isMac() {
201
201
  return false;
202
202
  return /Mac|iPhone|iPad|iPod/.test(navigator.platform);
203
203
  }
204
- //# sourceMappingURL=Toolbar.js.map
@@ -297,4 +297,3 @@ function makeAlign(value, label, icon) {
297
297
  command: (ed) => { ed.chain().focus().setTextAlign(value).run(); },
298
298
  };
299
299
  }
300
- //# sourceMappingURL=toolbarButtons.js.map
@@ -293,4 +293,3 @@ function planSurgicalModifier(editor, surgical) {
293
293
  }
294
294
  return planOp(editor, surgical);
295
295
  }
296
- //# sourceMappingURL=useAiInlineDiff.js.map
@@ -145,4 +145,3 @@ export function useAiSuggestionBridge(editor, fieldName, options = {}) {
145
145
  return registerPendingSuggestionApplier(formId, fieldName, applier);
146
146
  }, [editor, fieldName, formId]);
147
147
  }
148
- //# sourceMappingURL=useAiSuggestionBridge.js.map
package/dist/register.js CHANGED
@@ -39,4 +39,3 @@ export function registerTiptap() {
39
39
  // to the textarea path so panels that skip the adapter still work.
40
40
  registerMarkdownEditor(MarkdownEditor);
41
41
  }
42
- //# sourceMappingURL=register.js.map
package/dist/render.js CHANGED
@@ -436,4 +436,3 @@ function sanitizeUrl(raw) {
436
436
  return '#';
437
437
  return escapeAttr(v);
438
438
  }
439
- //# sourceMappingURL=render.js.map
@@ -180,4 +180,3 @@ function describeStructuralNode(node) {
180
180
  return `1 ${node.firstChild?.type.name ?? 'child'}`;
181
181
  return `${kids} children`;
182
182
  }
183
- //# sourceMappingURL=surgicalOps.js.map
@@ -40,6 +40,9 @@ const globals = {
40
40
  KeyboardEvent: window.KeyboardEvent,
41
41
  CustomEvent: window.CustomEvent,
42
42
  DocumentFragment: window.DocumentFragment,
43
+ // prosemirror-view ≥1.41 probes `root instanceof ShadowRoot` while
44
+ // resolving the editor's event root.
45
+ ShadowRoot: window.ShadowRoot,
43
46
  Range: window.Range,
44
47
  Selection: window.Selection,
45
48
  MutationObserver: window.MutationObserver,
@@ -57,9 +60,17 @@ const globals = {
57
60
  for (const [k, v] of Object.entries(globals)) {
58
61
  Object.defineProperty(globalThis, k, { value: v, writable: true, configurable: true });
59
62
  }
63
+ // jsdom has no layout engine and never implements elementFromPoint;
64
+ // prosemirror-view ≥1.41 calls it during view initialization.
65
+ if (typeof window.document.elementFromPoint !== 'function') {
66
+ Object.defineProperty(window.document, 'elementFromPoint', {
67
+ value: () => null,
68
+ writable: true,
69
+ configurable: true,
70
+ });
71
+ }
60
72
  // React 19 + RTL require `IS_REACT_ACT_ENVIRONMENT` so `act()` warnings
61
73
  // don't fire on every render. Without it, Tiptap's mount cascade
62
74
  // produces dozens of warnings that swamp real test failures.
63
75
  ;
64
76
  globalThis['IS_REACT_ACT_ENVIRONMENT'] = true;
65
- //# sourceMappingURL=setup.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pilotiq/tiptap",
3
- "version": "3.10.7",
3
+ "version": "3.11.0",
4
4
  "description": "Tiptap rich-text editor adapter for @pilotiq/pilotiq — slash menu, draggable blocks, custom-block API",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -40,18 +40,18 @@
40
40
  "@pilotiq/pilotiq": ">=0.6.0 <1.0.0",
41
41
  "@rudderjs/sync": "^1.2.0",
42
42
  "@tiptap/core": "^3",
43
- "@tiptap/extension-color": "3.22.4",
44
- "@tiptap/extension-details": "3.22.4",
45
- "@tiptap/extension-highlight": "3.22.4",
46
- "@tiptap/extension-image": "3.22.4",
43
+ "@tiptap/extension-color": "^3.22.4",
44
+ "@tiptap/extension-details": "^3.22.4",
45
+ "@tiptap/extension-highlight": "^3.22.4",
46
+ "@tiptap/extension-image": "^3.22.4",
47
47
  "@tiptap/extension-link": "^3",
48
48
  "@tiptap/extension-placeholder": "^3",
49
- "@tiptap/extension-subscript": "3.22.4",
50
- "@tiptap/extension-superscript": "3.22.4",
51
- "@tiptap/extension-table": "3.22.4",
52
- "@tiptap/extension-text-align": "3.22.4",
53
- "@tiptap/extension-text-style": "3.22.4",
54
- "@tiptap/extension-underline": "3.22.4",
49
+ "@tiptap/extension-subscript": "^3.22.4",
50
+ "@tiptap/extension-superscript": "^3.22.4",
51
+ "@tiptap/extension-table": "^3.22.4",
52
+ "@tiptap/extension-text-align": "^3.22.4",
53
+ "@tiptap/extension-text-style": "^3.22.4",
54
+ "@tiptap/extension-underline": "^3.22.4",
55
55
  "@tiptap/pm": "^3",
56
56
  "@tiptap/react": "^3",
57
57
  "@tiptap/starter-kit": "^3",
@@ -65,18 +65,18 @@
65
65
  "@testing-library/dom": "^10.4.1",
66
66
  "@testing-library/react": "^16.3.2",
67
67
  "@tiptap/core": "^3",
68
- "@tiptap/extension-color": "3.22.4",
69
- "@tiptap/extension-details": "3.22.4",
70
- "@tiptap/extension-highlight": "3.22.4",
71
- "@tiptap/extension-image": "3.22.4",
68
+ "@tiptap/extension-color": "^3.22.4",
69
+ "@tiptap/extension-details": "^3.22.4",
70
+ "@tiptap/extension-highlight": "^3.22.4",
71
+ "@tiptap/extension-image": "^3.22.4",
72
72
  "@tiptap/extension-link": "^3",
73
73
  "@tiptap/extension-placeholder": "^3",
74
- "@tiptap/extension-subscript": "3.22.4",
75
- "@tiptap/extension-superscript": "3.22.4",
76
- "@tiptap/extension-table": "3.22.4",
77
- "@tiptap/extension-text-align": "3.22.4",
78
- "@tiptap/extension-text-style": "3.22.4",
79
- "@tiptap/extension-underline": "3.22.4",
74
+ "@tiptap/extension-subscript": "^3.22.4",
75
+ "@tiptap/extension-superscript": "^3.22.4",
76
+ "@tiptap/extension-table": "^3.22.4",
77
+ "@tiptap/extension-text-align": "^3.22.4",
78
+ "@tiptap/extension-text-style": "^3.22.4",
79
+ "@tiptap/extension-underline": "^3.22.4",
80
80
  "@tiptap/pm": "^3",
81
81
  "@tiptap/react": "^3",
82
82
  "@tiptap/starter-kit": "^3",
@@ -91,7 +91,7 @@
91
91
  "react-dom": "^19",
92
92
  "tiptap-markdown": "^0.9",
93
93
  "typescript": "^5",
94
- "@pilotiq/pilotiq": "^0.35.1"
94
+ "@pilotiq/pilotiq": "^0.37.0"
95
95
  },
96
96
  "author": "Suleiman Shahbari",
97
97
  "scripts": {