@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.
- package/CHANGELOG.md +13 -0
- package/dist/Block.js +0 -1
- package/dist/MentionProvider.js +0 -1
- package/dist/PlainTextEditor.js +0 -1
- package/dist/RichTextField.js +0 -1
- package/dist/extensions/AiInlineDiffExtension.js +0 -1
- package/dist/extensions/AiSuggestionExtension.js +0 -1
- package/dist/extensions/BlockNodeExtension.js +0 -1
- package/dist/extensions/DragHandleExtension.js +0 -1
- package/dist/extensions/GridExtension.js +0 -1
- package/dist/extensions/MentionExtension.js +0 -1
- package/dist/extensions/MergeTagExtension.js +0 -1
- package/dist/extensions/SlashCommandExtension.js +0 -1
- package/dist/extensions/TextSizeMarks.js +0 -1
- package/dist/index.js +0 -1
- package/dist/markdownExtension.js +2 -2
- package/dist/markdownStorage.js +0 -1
- package/dist/plugin.js +0 -1
- package/dist/react/AiSuggestionBanner.js +0 -1
- package/dist/react/BlockNodeView.js +0 -1
- package/dist/react/BlockSidePanel.js +0 -1
- package/dist/react/CollabTextRenderer.js +47 -25
- package/dist/react/FloatingToolbar.js +0 -1
- package/dist/react/MarkdownEditor.js +0 -1
- package/dist/react/MentionMenu.js +0 -1
- package/dist/react/Palette.js +0 -1
- package/dist/react/SlashMenu.js +0 -1
- package/dist/react/TableFloatingToolbar.js +0 -1
- package/dist/react/TiptapEditor.js +0 -1
- package/dist/react/Toolbar.js +0 -1
- package/dist/react/toolbarButtons.js +0 -1
- package/dist/react/useAiInlineDiff.js +0 -1
- package/dist/react/useAiSuggestionBridge.js +0 -1
- package/dist/register.js +0 -1
- package/dist/render.js +0 -1
- package/dist/surgicalOps.js +0 -1
- package/dist/test/setup.js +12 -1
- 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
package/dist/MentionProvider.js
CHANGED
package/dist/PlainTextEditor.js
CHANGED
package/dist/RichTextField.js
CHANGED
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.
|
|
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.
|
|
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";
|
package/dist/markdownStorage.js
CHANGED
package/dist/plugin.js
CHANGED
|
@@ -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
|
|
@@ -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 —
|
|
97
|
-
//
|
|
98
|
-
//
|
|
99
|
-
//
|
|
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
|
|
129
|
-
//
|
|
130
|
-
//
|
|
131
|
-
//
|
|
132
|
-
//
|
|
133
|
-
//
|
|
134
|
-
//
|
|
135
|
-
|
|
136
|
-
|
|
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
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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
|
-
|
|
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
|
package/dist/react/Palette.js
CHANGED
|
@@ -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
|
package/dist/react/SlashMenu.js
CHANGED
package/dist/react/Toolbar.js
CHANGED
package/dist/register.js
CHANGED
package/dist/render.js
CHANGED
package/dist/surgicalOps.js
CHANGED
package/dist/test/setup.js
CHANGED
|
@@ -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.
|
|
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.
|
|
94
|
+
"@pilotiq/pilotiq": "^0.37.0"
|
|
95
95
|
},
|
|
96
96
|
"author": "Suleiman Shahbari",
|
|
97
97
|
"scripts": {
|