@pilotiq/tiptap 3.10.2 → 3.10.3
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CollabTextRenderer.d.ts","sourceRoot":"","sources":["../../src/react/CollabTextRenderer.tsx"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,uBAAuB,EAC7B,MAAM,wBAAwB,CAAA;AAK/B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,WAAW,EACX,SAAS,EACT,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,SAAS,EACT,gBAAgB,GACjB,EAAE,uBAAuB,GAAG,KAAK,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"CollabTextRenderer.d.ts","sourceRoot":"","sources":["../../src/react/CollabTextRenderer.tsx"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,uBAAuB,EAC7B,MAAM,wBAAwB,CAAA;AAK/B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,WAAW,EACX,SAAS,EACT,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,SAAS,EACT,gBAAgB,GACjB,EAAE,uBAAuB,GAAG,KAAK,CAAC,YAAY,CAqL9C"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect, useMemo } from 'react';
|
|
2
|
+
import { useEffect, useMemo, useRef } from 'react';
|
|
3
3
|
import { useEditor, EditorContent } from '@tiptap/react';
|
|
4
4
|
import { useCollabRoom, getCollabExtensions, useCollabSeed, } from '@pilotiq/pilotiq/react';
|
|
5
5
|
import { createPlainTextEditor, plainTextOf, plainTextToDoc } from '../PlainTextEditor.js';
|
|
@@ -32,6 +32,20 @@ export function CollabTextRenderer({ name, fragmentKey, multiline, defaultValue,
|
|
|
32
32
|
const room = useCollabRoom();
|
|
33
33
|
const factory = getCollabExtensions();
|
|
34
34
|
const collabActive = !!(room && factory);
|
|
35
|
+
// Capture the initial non-empty `defaultValue` on mount + keep it stable.
|
|
36
|
+
// The seedFn (below) needs to re-seed the empty fragment with the
|
|
37
|
+
// SSR-loaded value even if the host's `defaultValue` prop has been
|
|
38
|
+
// clobbered to '' by a sync-triggered empty `onChange` round-trip
|
|
39
|
+
// (handleChange → setText('') → setValue('') → ctx.values.title='' →
|
|
40
|
+
// FormBody re-renders the field with the new empty value). Closing
|
|
41
|
+
// over the live prop in seedFn means seed-on-resync silently fails;
|
|
42
|
+
// the ref preserves the seed source. Once the user types into the
|
|
43
|
+
// editor the seedFn will no longer fire — the fragment won't be
|
|
44
|
+
// empty — so this ref is read-only after the first non-empty seed.
|
|
45
|
+
const initialDefaultValueRef = useRef(defaultValue);
|
|
46
|
+
if (defaultValue && !initialDefaultValueRef.current) {
|
|
47
|
+
initialDefaultValueRef.current = defaultValue;
|
|
48
|
+
}
|
|
35
49
|
// Collab-stable identifier — `name` on top-level fields, but the
|
|
36
50
|
// row-id-anchored composite (`items.<rowId>.title`) on Repeater /
|
|
37
51
|
// Builder row leaves so the Y.XmlFragment survives reorders. Routes
|
|
@@ -156,8 +170,9 @@ export function CollabTextRenderer({ name, fragmentKey, multiline, defaultValue,
|
|
|
156
170
|
useCollabSeed(editor && collabActive ? room : null, collabName, (doc) => {
|
|
157
171
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
158
172
|
const fragment = doc.getXmlFragment(collabName);
|
|
159
|
-
|
|
160
|
-
|
|
173
|
+
const seedValue = initialDefaultValueRef.current;
|
|
174
|
+
if (fragment && fragment.length === 0 && seedValue && editor) {
|
|
175
|
+
editor.commands.setContent(plainTextToDoc(seedValue, multiline));
|
|
161
176
|
}
|
|
162
177
|
if (editor)
|
|
163
178
|
onChange(plainTextOf(editor));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CollabTextRenderer.js","sourceRoot":"","sources":["../../src/react/CollabTextRenderer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"CollabTextRenderer.js","sourceRoot":"","sources":["../../src/react/CollabTextRenderer.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pilotiq/tiptap",
|
|
3
|
-
"version": "3.10.
|
|
3
|
+
"version": "3.10.3",
|
|
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": {
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"react-dom": "^19",
|
|
88
88
|
"tiptap-markdown": "^0.9",
|
|
89
89
|
"typescript": "^5",
|
|
90
|
-
"@pilotiq/pilotiq": "^0.23.
|
|
90
|
+
"@pilotiq/pilotiq": "^0.23.1"
|
|
91
91
|
},
|
|
92
92
|
"author": "Suleiman Shahbari",
|
|
93
93
|
"scripts": {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useEffect, useMemo } from 'react'
|
|
1
|
+
import { useEffect, useMemo, useRef } from 'react'
|
|
2
2
|
import { useEditor, EditorContent, type Extension } from '@tiptap/react'
|
|
3
3
|
import type { AnyExtension } from '@tiptap/core'
|
|
4
4
|
import {
|
|
@@ -51,6 +51,21 @@ export function CollabTextRenderer({
|
|
|
51
51
|
const factory = getCollabExtensions()
|
|
52
52
|
const collabActive = !!(room && factory)
|
|
53
53
|
|
|
54
|
+
// Capture the initial non-empty `defaultValue` on mount + keep it stable.
|
|
55
|
+
// The seedFn (below) needs to re-seed the empty fragment with the
|
|
56
|
+
// SSR-loaded value even if the host's `defaultValue` prop has been
|
|
57
|
+
// clobbered to '' by a sync-triggered empty `onChange` round-trip
|
|
58
|
+
// (handleChange → setText('') → setValue('') → ctx.values.title='' →
|
|
59
|
+
// FormBody re-renders the field with the new empty value). Closing
|
|
60
|
+
// over the live prop in seedFn means seed-on-resync silently fails;
|
|
61
|
+
// the ref preserves the seed source. Once the user types into the
|
|
62
|
+
// editor the seedFn will no longer fire — the fragment won't be
|
|
63
|
+
// empty — so this ref is read-only after the first non-empty seed.
|
|
64
|
+
const initialDefaultValueRef = useRef<string>(defaultValue)
|
|
65
|
+
if (defaultValue && !initialDefaultValueRef.current) {
|
|
66
|
+
initialDefaultValueRef.current = defaultValue
|
|
67
|
+
}
|
|
68
|
+
|
|
54
69
|
// Collab-stable identifier — `name` on top-level fields, but the
|
|
55
70
|
// row-id-anchored composite (`items.<rowId>.title`) on Repeater /
|
|
56
71
|
// Builder row leaves so the Y.XmlFragment survives reorders. Routes
|
|
@@ -182,8 +197,9 @@ export function CollabTextRenderer({
|
|
|
182
197
|
(doc) => {
|
|
183
198
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
184
199
|
const fragment = (doc as any).getXmlFragment(collabName)
|
|
185
|
-
|
|
186
|
-
|
|
200
|
+
const seedValue = initialDefaultValueRef.current
|
|
201
|
+
if (fragment && fragment.length === 0 && seedValue && editor) {
|
|
202
|
+
editor.commands.setContent(plainTextToDoc(seedValue, multiline))
|
|
187
203
|
}
|
|
188
204
|
if (editor) onChange(plainTextOf(editor))
|
|
189
205
|
},
|