@portabletext/editor 1.44.10 → 1.44.12
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/lib/_chunks-cjs/behavior.core.cjs +38 -8
- package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
- package/lib/_chunks-cjs/editor-provider.cjs +2 -2
- package/lib/_chunks-cjs/editor-provider.cjs.map +1 -1
- package/lib/_chunks-es/behavior.core.js +38 -8
- package/lib/_chunks-es/behavior.core.js.map +1 -1
- package/lib/_chunks-es/editor-provider.js +2 -2
- package/lib/_chunks-es/editor-provider.js.map +1 -1
- package/lib/index.cjs +20 -16
- package/lib/index.cjs.map +1 -1
- package/lib/index.js +20 -16
- package/lib/index.js.map +1 -1
- package/package.json +2 -2
- package/src/behaviors/behavior.core.block-objects.ts +56 -8
- package/src/editor/Editable.tsx +24 -21
- package/src/editor/__tests__/PortableTextEditor.test.tsx +10 -0
- package/src/editor/__tests__/PortableTextEditorTester.tsx +3 -17
- package/src/editor/__tests__/RangeDecorations.test.tsx +6 -0
- package/src/editor/__tests__/pteWarningsSelfSolving.test.tsx +12 -5
- package/src/editor/__tests__/sync-value.test.tsx +5 -0
- package/src/editor/editor-machine.ts +1 -0
- package/src/editor/plugins/__tests__/withEditableAPIDelete.test.tsx +8 -3
- package/src/editor/plugins/__tests__/withEditableAPIGetFragment.test.tsx +3 -0
- package/src/editor/plugins/__tests__/withEditableAPIInsert.test.tsx +20 -12
- package/src/editor/plugins/__tests__/withEditableAPISelectionsOverlapping.test.tsx +5 -0
- package/src/editor/plugins/__tests__/withPortableTextLists.test.tsx +2 -0
- package/src/editor/plugins/__tests__/withPortableTextMarkModel.test.tsx +10 -289
- package/src/editor/plugins/__tests__/withPortableTextSelections.test.tsx +2 -0
- package/src/editor/plugins/__tests__/withUndoRedo.test.tsx +3 -0
- package/src/editor/sync-machine.ts +8 -6
- package/src/internal-utils/__tests__/valueNormalization.test.tsx +2 -0
- package/src/internal-utils/event-position.ts +9 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@portabletext/editor",
|
|
3
|
-
"version": "1.44.
|
|
3
|
+
"version": "1.44.12",
|
|
4
4
|
"description": "Portable Text Editor made in React",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sanity",
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"@sanity/schema": "^3.82.0",
|
|
90
90
|
"@sanity/types": "^3.82.0",
|
|
91
91
|
"@testing-library/jest-dom": "^6.6.3",
|
|
92
|
-
"@testing-library/react": "^16.
|
|
92
|
+
"@testing-library/react": "^16.3.0",
|
|
93
93
|
"@types/debug": "^4.1.12",
|
|
94
94
|
"@types/lodash": "^4.17.13",
|
|
95
95
|
"@types/lodash.startcase": "^4.4.9",
|
|
@@ -95,12 +95,31 @@ const breakingBlockObject = defineBehavior({
|
|
|
95
95
|
const clickingAboveLonelyBlockObject = defineBehavior({
|
|
96
96
|
on: 'mouse.click',
|
|
97
97
|
guard: ({snapshot, event}) => {
|
|
98
|
-
if (
|
|
98
|
+
if (snapshot.context.readOnly) {
|
|
99
99
|
return false
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
-
|
|
103
|
-
|
|
102
|
+
if (
|
|
103
|
+
snapshot.context.selection &&
|
|
104
|
+
!selectors.isSelectionCollapsed(snapshot)
|
|
105
|
+
) {
|
|
106
|
+
return false
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const focusBlockObject = selectors.getFocusBlockObject({
|
|
110
|
+
...snapshot,
|
|
111
|
+
context: {
|
|
112
|
+
...snapshot.context,
|
|
113
|
+
selection: event.position.selection,
|
|
114
|
+
},
|
|
115
|
+
})
|
|
116
|
+
const previousBlock = selectors.getPreviousBlock({
|
|
117
|
+
...snapshot,
|
|
118
|
+
context: {
|
|
119
|
+
...snapshot.context,
|
|
120
|
+
selection: event.position.selection,
|
|
121
|
+
},
|
|
122
|
+
})
|
|
104
123
|
|
|
105
124
|
return (
|
|
106
125
|
event.position.isEditor &&
|
|
@@ -110,13 +129,18 @@ const clickingAboveLonelyBlockObject = defineBehavior({
|
|
|
110
129
|
)
|
|
111
130
|
},
|
|
112
131
|
actions: [
|
|
113
|
-
({snapshot}) => [
|
|
132
|
+
({snapshot, event}) => [
|
|
133
|
+
raise({
|
|
134
|
+
type: 'select',
|
|
135
|
+
selection: event.position.selection,
|
|
136
|
+
}),
|
|
114
137
|
raise({
|
|
115
138
|
type: 'insert.block',
|
|
116
139
|
block: {
|
|
117
140
|
_type: snapshot.context.schema.block.name,
|
|
118
141
|
},
|
|
119
142
|
placement: 'before',
|
|
143
|
+
select: 'start',
|
|
120
144
|
}),
|
|
121
145
|
],
|
|
122
146
|
],
|
|
@@ -125,12 +149,31 @@ const clickingAboveLonelyBlockObject = defineBehavior({
|
|
|
125
149
|
const clickingBelowLonelyBlockObject = defineBehavior({
|
|
126
150
|
on: 'mouse.click',
|
|
127
151
|
guard: ({snapshot, event}) => {
|
|
128
|
-
if (
|
|
152
|
+
if (snapshot.context.readOnly) {
|
|
129
153
|
return false
|
|
130
154
|
}
|
|
131
155
|
|
|
132
|
-
|
|
133
|
-
|
|
156
|
+
if (
|
|
157
|
+
snapshot.context.selection &&
|
|
158
|
+
!selectors.isSelectionCollapsed(snapshot)
|
|
159
|
+
) {
|
|
160
|
+
return false
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const focusBlockObject = selectors.getFocusBlockObject({
|
|
164
|
+
...snapshot,
|
|
165
|
+
context: {
|
|
166
|
+
...snapshot.context,
|
|
167
|
+
selection: event.position.selection,
|
|
168
|
+
},
|
|
169
|
+
})
|
|
170
|
+
const nextBlock = selectors.getNextBlock({
|
|
171
|
+
...snapshot,
|
|
172
|
+
context: {
|
|
173
|
+
...snapshot.context,
|
|
174
|
+
selection: event.position.selection,
|
|
175
|
+
},
|
|
176
|
+
})
|
|
134
177
|
|
|
135
178
|
return (
|
|
136
179
|
event.position.isEditor &&
|
|
@@ -140,13 +183,18 @@ const clickingBelowLonelyBlockObject = defineBehavior({
|
|
|
140
183
|
)
|
|
141
184
|
},
|
|
142
185
|
actions: [
|
|
143
|
-
({snapshot}) => [
|
|
186
|
+
({snapshot, event}) => [
|
|
187
|
+
raise({
|
|
188
|
+
type: 'select',
|
|
189
|
+
selection: event.position.selection,
|
|
190
|
+
}),
|
|
144
191
|
raise({
|
|
145
192
|
type: 'insert.block',
|
|
146
193
|
block: {
|
|
147
194
|
_type: snapshot.context.schema.block.name,
|
|
148
195
|
},
|
|
149
196
|
placement: 'after',
|
|
197
|
+
select: 'start',
|
|
150
198
|
}),
|
|
151
199
|
],
|
|
152
200
|
],
|
package/src/editor/Editable.tsx
CHANGED
|
@@ -372,7 +372,13 @@ export const PortableTextEditable = forwardRef<
|
|
|
372
372
|
event.stopPropagation()
|
|
373
373
|
event.preventDefault()
|
|
374
374
|
|
|
375
|
-
const selection =
|
|
375
|
+
const selection = slateEditor.selection
|
|
376
|
+
? slateRangeToSelection({
|
|
377
|
+
schema: editorActor.getSnapshot().context.schema,
|
|
378
|
+
editor: slateEditor,
|
|
379
|
+
range: slateEditor.selection,
|
|
380
|
+
})
|
|
381
|
+
: undefined
|
|
376
382
|
const position = selection ? {selection} : undefined
|
|
377
383
|
|
|
378
384
|
if (!position) {
|
|
@@ -586,25 +592,22 @@ export const PortableTextEditable = forwardRef<
|
|
|
586
592
|
}
|
|
587
593
|
|
|
588
594
|
const position = getEventPosition({
|
|
589
|
-
|
|
595
|
+
editorActor,
|
|
590
596
|
slateEditor,
|
|
591
597
|
event: event.nativeEvent,
|
|
592
598
|
})
|
|
593
599
|
|
|
594
|
-
if (
|
|
595
|
-
|
|
596
|
-
|
|
600
|
+
if (position) {
|
|
601
|
+
editorActor.send({
|
|
602
|
+
type: 'behavior event',
|
|
603
|
+
behaviorEvent: {
|
|
604
|
+
type: 'mouse.click',
|
|
605
|
+
position,
|
|
606
|
+
},
|
|
607
|
+
editor: slateEditor,
|
|
608
|
+
nativeEvent: event,
|
|
609
|
+
})
|
|
597
610
|
}
|
|
598
|
-
|
|
599
|
-
editorActor.send({
|
|
600
|
-
type: 'behavior event',
|
|
601
|
-
behaviorEvent: {
|
|
602
|
-
type: 'mouse.click',
|
|
603
|
-
position,
|
|
604
|
-
},
|
|
605
|
-
editor: slateEditor,
|
|
606
|
-
nativeEvent: event,
|
|
607
|
-
})
|
|
608
611
|
},
|
|
609
612
|
[onClick, editorActor, slateEditor],
|
|
610
613
|
)
|
|
@@ -819,7 +822,7 @@ export const PortableTextEditable = forwardRef<
|
|
|
819
822
|
}
|
|
820
823
|
|
|
821
824
|
const position = getEventPosition({
|
|
822
|
-
|
|
825
|
+
editorActor,
|
|
823
826
|
slateEditor,
|
|
824
827
|
event: event.nativeEvent,
|
|
825
828
|
})
|
|
@@ -985,7 +988,7 @@ export const PortableTextEditable = forwardRef<
|
|
|
985
988
|
}
|
|
986
989
|
|
|
987
990
|
const position = getEventPosition({
|
|
988
|
-
|
|
991
|
+
editorActor,
|
|
989
992
|
slateEditor,
|
|
990
993
|
event: event.nativeEvent,
|
|
991
994
|
})
|
|
@@ -1045,7 +1048,7 @@ export const PortableTextEditable = forwardRef<
|
|
|
1045
1048
|
}
|
|
1046
1049
|
|
|
1047
1050
|
const position = getEventPosition({
|
|
1048
|
-
|
|
1051
|
+
editorActor,
|
|
1049
1052
|
slateEditor,
|
|
1050
1053
|
event: event.nativeEvent,
|
|
1051
1054
|
})
|
|
@@ -1081,7 +1084,7 @@ export const PortableTextEditable = forwardRef<
|
|
|
1081
1084
|
}
|
|
1082
1085
|
|
|
1083
1086
|
const position = getEventPosition({
|
|
1084
|
-
|
|
1087
|
+
editorActor,
|
|
1085
1088
|
slateEditor,
|
|
1086
1089
|
event: event.nativeEvent,
|
|
1087
1090
|
})
|
|
@@ -1118,7 +1121,7 @@ export const PortableTextEditable = forwardRef<
|
|
|
1118
1121
|
}
|
|
1119
1122
|
|
|
1120
1123
|
const position = getEventPosition({
|
|
1121
|
-
|
|
1124
|
+
editorActor,
|
|
1122
1125
|
slateEditor,
|
|
1123
1126
|
event: event.nativeEvent,
|
|
1124
1127
|
})
|
|
@@ -1156,7 +1159,7 @@ export const PortableTextEditable = forwardRef<
|
|
|
1156
1159
|
}
|
|
1157
1160
|
|
|
1158
1161
|
const position = getEventPosition({
|
|
1159
|
-
|
|
1162
|
+
editorActor,
|
|
1160
1163
|
slateEditor,
|
|
1161
1164
|
event: event.nativeEvent,
|
|
1162
1165
|
})
|
|
@@ -3,6 +3,7 @@ import {render, waitFor} from '@testing-library/react'
|
|
|
3
3
|
import {createRef, type RefObject} from 'react'
|
|
4
4
|
import {describe, expect, it, vi} from 'vitest'
|
|
5
5
|
import type {EditorSelection} from '../..'
|
|
6
|
+
import {createTestKeyGenerator} from '../../internal-utils/test-key-generator'
|
|
6
7
|
import {PortableTextEditor} from '../PortableTextEditor'
|
|
7
8
|
import {PortableTextEditorTester, schemaType} from './PortableTextEditorTester'
|
|
8
9
|
|
|
@@ -21,6 +22,7 @@ describe('initialization', () => {
|
|
|
21
22
|
const onChange = vi.fn()
|
|
22
23
|
const {container} = render(
|
|
23
24
|
<PortableTextEditorTester
|
|
25
|
+
keyGenerator={createTestKeyGenerator()}
|
|
24
26
|
onChange={onChange}
|
|
25
27
|
renderPlaceholder={renderPlaceholder}
|
|
26
28
|
ref={editorRef}
|
|
@@ -87,6 +89,7 @@ describe('initialization', () => {
|
|
|
87
89
|
const editorRef = createRef<PortableTextEditor>()
|
|
88
90
|
render(
|
|
89
91
|
<PortableTextEditorTester
|
|
92
|
+
keyGenerator={createTestKeyGenerator()}
|
|
90
93
|
ref={editorRef}
|
|
91
94
|
onChange={onChange}
|
|
92
95
|
schemaType={schemaType}
|
|
@@ -118,6 +121,7 @@ describe('initialization', () => {
|
|
|
118
121
|
const onChange = vi.fn()
|
|
119
122
|
render(
|
|
120
123
|
<PortableTextEditorTester
|
|
124
|
+
keyGenerator={createTestKeyGenerator()}
|
|
121
125
|
onChange={onChange}
|
|
122
126
|
ref={editorRef}
|
|
123
127
|
selection={initialSelection}
|
|
@@ -162,6 +166,7 @@ describe('initialization', () => {
|
|
|
162
166
|
const onChange = vi.fn()
|
|
163
167
|
const {rerender} = render(
|
|
164
168
|
<PortableTextEditorTester
|
|
169
|
+
keyGenerator={createTestKeyGenerator()}
|
|
165
170
|
onChange={onChange}
|
|
166
171
|
ref={editorRef}
|
|
167
172
|
selection={initialSelection}
|
|
@@ -195,6 +200,7 @@ describe('initialization', () => {
|
|
|
195
200
|
})
|
|
196
201
|
rerender(
|
|
197
202
|
<PortableTextEditorTester
|
|
203
|
+
keyGenerator={createTestKeyGenerator()}
|
|
198
204
|
onChange={onChange}
|
|
199
205
|
ref={editorRef}
|
|
200
206
|
selection={newSelection}
|
|
@@ -221,6 +227,7 @@ describe('initialization', () => {
|
|
|
221
227
|
const onChange = vi.fn()
|
|
222
228
|
render(
|
|
223
229
|
<PortableTextEditorTester
|
|
230
|
+
keyGenerator={createTestKeyGenerator()}
|
|
224
231
|
onChange={onChange}
|
|
225
232
|
ref={editorRef}
|
|
226
233
|
selection={initialSelection}
|
|
@@ -266,6 +273,7 @@ describe('initialization', () => {
|
|
|
266
273
|
await waitFor(() => {
|
|
267
274
|
render(
|
|
268
275
|
<PortableTextEditorTester
|
|
276
|
+
keyGenerator={createTestKeyGenerator()}
|
|
269
277
|
onChange={onChange}
|
|
270
278
|
ref={editorRef}
|
|
271
279
|
selection={initialSelection}
|
|
@@ -298,6 +306,7 @@ describe('initialization', () => {
|
|
|
298
306
|
const newOnChange = vi.fn()
|
|
299
307
|
_rerender(
|
|
300
308
|
<PortableTextEditorTester
|
|
309
|
+
keyGenerator={createTestKeyGenerator()}
|
|
301
310
|
onChange={newOnChange}
|
|
302
311
|
ref={editorRef}
|
|
303
312
|
selection={initialSelection}
|
|
@@ -350,6 +359,7 @@ describe('initialization', () => {
|
|
|
350
359
|
const onChange = vi.fn()
|
|
351
360
|
render(
|
|
352
361
|
<PortableTextEditorTester
|
|
362
|
+
keyGenerator={createTestKeyGenerator()}
|
|
353
363
|
onChange={onChange}
|
|
354
364
|
ref={editorRef}
|
|
355
365
|
selection={initialSelection}
|
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
import {Schema} from '@sanity/schema'
|
|
2
2
|
import {defineArrayMember, defineField} from '@sanity/types'
|
|
3
|
-
import {
|
|
4
|
-
forwardRef,
|
|
5
|
-
useCallback,
|
|
6
|
-
useEffect,
|
|
7
|
-
useMemo,
|
|
8
|
-
type ForwardedRef,
|
|
9
|
-
} from 'react'
|
|
3
|
+
import {forwardRef, useMemo, type ForwardedRef} from 'react'
|
|
10
4
|
import {vi} from 'vitest'
|
|
11
5
|
import {
|
|
12
6
|
PortableTextEditable,
|
|
@@ -77,8 +71,6 @@ const schema = Schema.compile({
|
|
|
77
71
|
types: [portableTextType, colorAndLink],
|
|
78
72
|
})
|
|
79
73
|
|
|
80
|
-
let key = 0
|
|
81
|
-
|
|
82
74
|
export const PortableTextEditorTester = forwardRef(
|
|
83
75
|
function PortableTextEditorTester(
|
|
84
76
|
props: Partial<
|
|
@@ -90,23 +82,17 @@ export const PortableTextEditorTester = forwardRef(
|
|
|
90
82
|
schemaType: PortableTextEditorProps['schemaType']
|
|
91
83
|
selection?: PortableTextEditableProps['selection']
|
|
92
84
|
value?: PortableTextEditorProps['value']
|
|
85
|
+
keyGenerator: PortableTextEditorProps['keyGenerator']
|
|
93
86
|
},
|
|
94
87
|
ref: ForwardedRef<PortableTextEditor>,
|
|
95
88
|
) {
|
|
96
|
-
useEffect(() => {
|
|
97
|
-
key = 0
|
|
98
|
-
}, [])
|
|
99
|
-
const _keyGenerator = useCallback(() => {
|
|
100
|
-
key++
|
|
101
|
-
return `${key}`
|
|
102
|
-
}, [])
|
|
103
89
|
const onChange = useMemo(() => props.onChange || vi.fn(), [props.onChange])
|
|
104
90
|
return (
|
|
105
91
|
<PortableTextEditor
|
|
106
92
|
schemaType={props.schemaType}
|
|
107
93
|
onChange={onChange}
|
|
108
94
|
value={props.value || undefined}
|
|
109
|
-
keyGenerator={
|
|
95
|
+
keyGenerator={props.keyGenerator}
|
|
110
96
|
ref={ref}
|
|
111
97
|
>
|
|
112
98
|
<PortableTextEditable
|
|
@@ -3,6 +3,7 @@ import {render, waitFor} from '@testing-library/react'
|
|
|
3
3
|
import {createRef, type ReactNode, type RefObject} from 'react'
|
|
4
4
|
import {describe, expect, it, vi} from 'vitest'
|
|
5
5
|
import type {RangeDecoration} from '../..'
|
|
6
|
+
import {createTestKeyGenerator} from '../../internal-utils/test-key-generator'
|
|
6
7
|
import type {PortableTextEditor} from '../PortableTextEditor'
|
|
7
8
|
import {PortableTextEditorTester, schemaType} from './PortableTextEditorTester'
|
|
8
9
|
|
|
@@ -38,6 +39,7 @@ describe('RangeDecorations', () => {
|
|
|
38
39
|
const {rerender} = await waitFor(() =>
|
|
39
40
|
render(
|
|
40
41
|
<PortableTextEditorTester
|
|
42
|
+
keyGenerator={createTestKeyGenerator()}
|
|
41
43
|
onChange={onChange}
|
|
42
44
|
rangeDecorations={rangeDecorations}
|
|
43
45
|
ref={editorRef}
|
|
@@ -64,6 +66,7 @@ describe('RangeDecorations', () => {
|
|
|
64
66
|
// Re-render with the same range decorations
|
|
65
67
|
rerender(
|
|
66
68
|
<PortableTextEditorTester
|
|
69
|
+
keyGenerator={createTestKeyGenerator()}
|
|
67
70
|
onChange={onChange}
|
|
68
71
|
rangeDecorations={rangeDecorations}
|
|
69
72
|
ref={editorRef}
|
|
@@ -86,6 +89,7 @@ describe('RangeDecorations', () => {
|
|
|
86
89
|
]
|
|
87
90
|
rerender(
|
|
88
91
|
<PortableTextEditorTester
|
|
92
|
+
keyGenerator={createTestKeyGenerator()}
|
|
89
93
|
onChange={onChange}
|
|
90
94
|
rangeDecorations={rangeDecorations}
|
|
91
95
|
ref={editorRef}
|
|
@@ -111,6 +115,7 @@ describe('RangeDecorations', () => {
|
|
|
111
115
|
]
|
|
112
116
|
rerender(
|
|
113
117
|
<PortableTextEditorTester
|
|
118
|
+
keyGenerator={createTestKeyGenerator()}
|
|
114
119
|
onChange={onChange}
|
|
115
120
|
rangeDecorations={rangeDecorations}
|
|
116
121
|
ref={editorRef}
|
|
@@ -137,6 +142,7 @@ describe('RangeDecorations', () => {
|
|
|
137
142
|
]
|
|
138
143
|
rerender(
|
|
139
144
|
<PortableTextEditorTester
|
|
145
|
+
keyGenerator={createTestKeyGenerator()}
|
|
140
146
|
onChange={onChange}
|
|
141
147
|
rangeDecorations={rangeDecorations}
|
|
142
148
|
ref={editorRef}
|
|
@@ -2,6 +2,7 @@ import type {PortableTextBlock} from '@sanity/types'
|
|
|
2
2
|
import {render, waitFor} from '@testing-library/react'
|
|
3
3
|
import {createRef, type RefObject} from 'react'
|
|
4
4
|
import {describe, expect, it, vi} from 'vitest'
|
|
5
|
+
import {createTestKeyGenerator} from '../../internal-utils/test-key-generator'
|
|
5
6
|
import {PortableTextEditor} from '../PortableTextEditor'
|
|
6
7
|
import {PortableTextEditorTester, schemaType} from './PortableTextEditorTester'
|
|
7
8
|
|
|
@@ -27,6 +28,7 @@ describe('when PTE would display warnings, instead it self solves', () => {
|
|
|
27
28
|
const onChange = vi.fn()
|
|
28
29
|
render(
|
|
29
30
|
<PortableTextEditorTester
|
|
31
|
+
keyGenerator={createTestKeyGenerator()}
|
|
30
32
|
onChange={onChange}
|
|
31
33
|
ref={editorRef}
|
|
32
34
|
schemaType={schemaType}
|
|
@@ -48,7 +50,7 @@ describe('when PTE would display warnings, instead it self solves', () => {
|
|
|
48
50
|
_type: 'myTestBlockType',
|
|
49
51
|
children: [
|
|
50
52
|
{
|
|
51
|
-
_key: '
|
|
53
|
+
_key: 'k3',
|
|
52
54
|
_type: 'span',
|
|
53
55
|
text: 'Hello with a new key',
|
|
54
56
|
marks: [],
|
|
@@ -83,6 +85,7 @@ describe('when PTE would display warnings, instead it self solves', () => {
|
|
|
83
85
|
const onChange = vi.fn()
|
|
84
86
|
render(
|
|
85
87
|
<PortableTextEditorTester
|
|
88
|
+
keyGenerator={createTestKeyGenerator()}
|
|
86
89
|
onChange={onChange}
|
|
87
90
|
ref={editorRef}
|
|
88
91
|
schemaType={schemaType}
|
|
@@ -140,6 +143,7 @@ describe('when PTE would display warnings, instead it self solves', () => {
|
|
|
140
143
|
const onChange = vi.fn()
|
|
141
144
|
render(
|
|
142
145
|
<PortableTextEditorTester
|
|
146
|
+
keyGenerator={createTestKeyGenerator()}
|
|
143
147
|
onChange={onChange}
|
|
144
148
|
ref={editorRef}
|
|
145
149
|
schemaType={schemaType}
|
|
@@ -162,7 +166,7 @@ describe('when PTE would display warnings, instead it self solves', () => {
|
|
|
162
166
|
_type: 'myTestBlockType',
|
|
163
167
|
children: [
|
|
164
168
|
{
|
|
165
|
-
_key: '
|
|
169
|
+
_key: 'k3',
|
|
166
170
|
_type: 'span',
|
|
167
171
|
text: '',
|
|
168
172
|
marks: [],
|
|
@@ -176,7 +180,7 @@ describe('when PTE would display warnings, instead it self solves', () => {
|
|
|
176
180
|
_type: 'myTestBlockType',
|
|
177
181
|
children: [
|
|
178
182
|
{
|
|
179
|
-
_key: '
|
|
183
|
+
_key: 'k5',
|
|
180
184
|
_type: 'span',
|
|
181
185
|
text: '',
|
|
182
186
|
marks: [],
|
|
@@ -212,6 +216,7 @@ describe('when PTE would display warnings, instead it self solves', () => {
|
|
|
212
216
|
const onChange = vi.fn()
|
|
213
217
|
render(
|
|
214
218
|
<PortableTextEditorTester
|
|
219
|
+
keyGenerator={createTestKeyGenerator()}
|
|
215
220
|
onChange={onChange}
|
|
216
221
|
ref={editorRef}
|
|
217
222
|
schemaType={schemaType}
|
|
@@ -276,6 +281,7 @@ describe('when PTE would display warnings, instead it self solves', () => {
|
|
|
276
281
|
const onChange = vi.fn()
|
|
277
282
|
render(
|
|
278
283
|
<PortableTextEditorTester
|
|
284
|
+
keyGenerator={createTestKeyGenerator()}
|
|
279
285
|
onChange={onChange}
|
|
280
286
|
ref={editorRef}
|
|
281
287
|
schemaType={schemaType}
|
|
@@ -319,6 +325,7 @@ describe('when PTE would display warnings, instead it self solves', () => {
|
|
|
319
325
|
const onChange = vi.fn()
|
|
320
326
|
render(
|
|
321
327
|
<PortableTextEditorTester
|
|
328
|
+
keyGenerator={createTestKeyGenerator()}
|
|
322
329
|
onChange={onChange}
|
|
323
330
|
ref={editorRef}
|
|
324
331
|
schemaType={schemaType}
|
|
@@ -337,9 +344,9 @@ describe('when PTE would display warnings, instead it self solves', () => {
|
|
|
337
344
|
PortableTextEditor.focus(editorRef.current)
|
|
338
345
|
expect(PortableTextEditor.getValue(editorRef.current)).toEqual([
|
|
339
346
|
{
|
|
340
|
-
_key: '
|
|
347
|
+
_key: 'k2',
|
|
341
348
|
_type: 'myTestBlockType',
|
|
342
|
-
children: [{_key: '
|
|
349
|
+
children: [{_key: 'k3', _type: 'span', marks: [], text: ''}],
|
|
343
350
|
markDefs: [],
|
|
344
351
|
style: 'normal',
|
|
345
352
|
},
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {render, waitFor} from '@testing-library/react'
|
|
2
2
|
import {createRef, type RefObject} from 'react'
|
|
3
3
|
import {describe, expect, it, vi} from 'vitest'
|
|
4
|
+
import {createTestKeyGenerator} from '../../internal-utils/test-key-generator'
|
|
4
5
|
import {PortableTextEditor} from '../PortableTextEditor'
|
|
5
6
|
import {PortableTextEditorTester, schemaType} from './PortableTextEditorTester'
|
|
6
7
|
|
|
@@ -43,6 +44,7 @@ describe('useSyncValue', () => {
|
|
|
43
44
|
]
|
|
44
45
|
const {rerender} = render(
|
|
45
46
|
<PortableTextEditorTester
|
|
47
|
+
keyGenerator={createTestKeyGenerator()}
|
|
46
48
|
onChange={onChange}
|
|
47
49
|
ref={editorRef}
|
|
48
50
|
schemaType={schemaType}
|
|
@@ -62,6 +64,7 @@ describe('useSyncValue', () => {
|
|
|
62
64
|
|
|
63
65
|
rerender(
|
|
64
66
|
<PortableTextEditorTester
|
|
67
|
+
keyGenerator={createTestKeyGenerator()}
|
|
65
68
|
onChange={onChange}
|
|
66
69
|
ref={editorRef}
|
|
67
70
|
schemaType={schemaType}
|
|
@@ -99,6 +102,7 @@ describe('useSyncValue', () => {
|
|
|
99
102
|
]
|
|
100
103
|
const {rerender} = render(
|
|
101
104
|
<PortableTextEditorTester
|
|
105
|
+
keyGenerator={createTestKeyGenerator()}
|
|
102
106
|
onChange={onChange}
|
|
103
107
|
ref={editorRef}
|
|
104
108
|
schemaType={schemaType}
|
|
@@ -118,6 +122,7 @@ describe('useSyncValue', () => {
|
|
|
118
122
|
|
|
119
123
|
rerender(
|
|
120
124
|
<PortableTextEditorTester
|
|
125
|
+
keyGenerator={createTestKeyGenerator()}
|
|
121
126
|
onChange={onChange}
|
|
122
127
|
ref={editorRef}
|
|
123
128
|
schemaType={schemaType}
|
|
@@ -382,6 +382,7 @@ export const editorMachine = setup({
|
|
|
382
382
|
actions: 'handle behavior event',
|
|
383
383
|
guard: ({event}) =>
|
|
384
384
|
event.behaviorEvent.type === 'clipboard.copy' ||
|
|
385
|
+
event.behaviorEvent.type === 'mouse.click' ||
|
|
385
386
|
event.behaviorEvent.type === 'serialize' ||
|
|
386
387
|
event.behaviorEvent.type === 'serialization.failure' ||
|
|
387
388
|
event.behaviorEvent.type === 'serialization.success' ||
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
PortableTextEditorTester,
|
|
6
6
|
schemaType,
|
|
7
7
|
} from '../../__tests__/PortableTextEditorTester'
|
|
8
|
+
import {createTestKeyGenerator} from '../../../internal-utils/test-key-generator'
|
|
8
9
|
import {PortableTextEditor} from '../../PortableTextEditor'
|
|
9
10
|
|
|
10
11
|
const initialValue = [
|
|
@@ -53,6 +54,7 @@ describe('plugin:withEditableAPI: .delete()', () => {
|
|
|
53
54
|
ref={editorRef}
|
|
54
55
|
schemaType={schemaType}
|
|
55
56
|
value={initialValue}
|
|
57
|
+
keyGenerator={createTestKeyGenerator()}
|
|
56
58
|
/>,
|
|
57
59
|
)
|
|
58
60
|
|
|
@@ -103,6 +105,7 @@ describe('plugin:withEditableAPI: .delete()', () => {
|
|
|
103
105
|
const onChange = vi.fn()
|
|
104
106
|
render(
|
|
105
107
|
<PortableTextEditorTester
|
|
108
|
+
keyGenerator={createTestKeyGenerator()}
|
|
106
109
|
onChange={onChange}
|
|
107
110
|
ref={editorRef}
|
|
108
111
|
schemaType={schemaType}
|
|
@@ -137,11 +140,11 @@ describe('plugin:withEditableAPI: .delete()', () => {
|
|
|
137
140
|
.toMatchInlineSnapshot(`
|
|
138
141
|
[
|
|
139
142
|
{
|
|
140
|
-
"_key": "
|
|
143
|
+
"_key": "k2",
|
|
141
144
|
"_type": "myTestBlockType",
|
|
142
145
|
"children": [
|
|
143
146
|
{
|
|
144
|
-
"_key": "
|
|
147
|
+
"_key": "k3",
|
|
145
148
|
"_type": "span",
|
|
146
149
|
"marks": [],
|
|
147
150
|
"text": "",
|
|
@@ -162,6 +165,7 @@ describe('plugin:withEditableAPI: .delete()', () => {
|
|
|
162
165
|
|
|
163
166
|
render(
|
|
164
167
|
<PortableTextEditorTester
|
|
168
|
+
keyGenerator={createTestKeyGenerator()}
|
|
165
169
|
onChange={onChange}
|
|
166
170
|
ref={editorRef}
|
|
167
171
|
schemaType={schemaType}
|
|
@@ -222,7 +226,7 @@ describe('plugin:withEditableAPI: .delete()', () => {
|
|
|
222
226
|
"_type": "myTestBlockType",
|
|
223
227
|
"children": [
|
|
224
228
|
{
|
|
225
|
-
"_key": "
|
|
229
|
+
"_key": "k2",
|
|
226
230
|
"_type": "span",
|
|
227
231
|
"marks": [],
|
|
228
232
|
"text": "",
|
|
@@ -247,6 +251,7 @@ describe('plugin:withEditableAPI: .delete()', () => {
|
|
|
247
251
|
ref={editorRef}
|
|
248
252
|
schemaType={schemaType}
|
|
249
253
|
value={initialValue}
|
|
254
|
+
keyGenerator={createTestKeyGenerator()}
|
|
250
255
|
/>,
|
|
251
256
|
)
|
|
252
257
|
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
PortableTextEditorTester,
|
|
7
7
|
schemaType,
|
|
8
8
|
} from '../../__tests__/PortableTextEditorTester'
|
|
9
|
+
import {createTestKeyGenerator} from '../../../internal-utils/test-key-generator'
|
|
9
10
|
import {PortableTextEditor} from '../../PortableTextEditor'
|
|
10
11
|
|
|
11
12
|
const initialValue = [
|
|
@@ -56,6 +57,7 @@ describe('plugin:withEditableAPI: .getFragment()', () => {
|
|
|
56
57
|
|
|
57
58
|
render(
|
|
58
59
|
<PortableTextEditorTester
|
|
60
|
+
keyGenerator={createTestKeyGenerator()}
|
|
59
61
|
onChange={onChange}
|
|
60
62
|
ref={editorRef}
|
|
61
63
|
schemaType={schemaType}
|
|
@@ -97,6 +99,7 @@ describe('plugin:withEditableAPI: .getFragment()', () => {
|
|
|
97
99
|
|
|
98
100
|
render(
|
|
99
101
|
<PortableTextEditorTester
|
|
102
|
+
keyGenerator={createTestKeyGenerator()}
|
|
100
103
|
onChange={onChange}
|
|
101
104
|
ref={editorRef}
|
|
102
105
|
schemaType={schemaType}
|