@portabletext/editor 1.35.0 → 1.35.1
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/{plugin.event-listener.cjs → editor-provider.cjs} +48 -20
- package/lib/_chunks-cjs/editor-provider.cjs.map +1 -0
- package/lib/_chunks-es/{plugin.event-listener.js → editor-provider.js} +49 -21
- package/lib/_chunks-es/editor-provider.js.map +1 -0
- package/lib/behaviors/index.d.cts +19377 -210
- package/lib/behaviors/index.d.ts +19377 -210
- package/lib/index.cjs +81 -51
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +318 -47
- package/lib/index.d.ts +318 -47
- package/lib/index.js +35 -4
- package/lib/index.js.map +1 -1
- package/lib/plugins/index.cjs +22 -7
- package/lib/plugins/index.cjs.map +1 -1
- package/lib/plugins/index.d.cts +313 -2
- package/lib/plugins/index.d.ts +313 -2
- package/lib/plugins/index.js +18 -3
- package/lib/plugins/index.js.map +1 -1
- package/lib/selectors/index.d.cts +19504 -1
- package/lib/selectors/index.d.ts +19504 -1
- package/lib/utils/index.d.cts +19506 -2
- package/lib/utils/index.d.ts +19506 -2
- package/package.json +1 -1
- package/src/behavior-actions/behavior.action.decorator.add.ts +1 -0
- package/src/behavior-actions/behavior.action.delete.text.ts +1 -0
- package/src/behaviors/behavior.decorator-pair.ts +1 -0
- package/src/converters/converter.portable-text.deserialize.test.ts +3 -7
- package/src/converters/converter.portable-text.ts +7 -1
- package/src/converters/converter.text-html.deserialize.test.ts +3 -7
- package/src/converters/converter.text-html.serialize.test.ts +5 -10
- package/src/converters/converter.text-plain.test.ts +4 -6
- package/src/editor/Editable.tsx +26 -0
- package/src/editor/editor-machine.ts +170 -147
- package/src/editor/editor-selector.ts +3 -0
- package/src/editor/editor-snapshot.ts +13 -0
- package/src/editor-event-listener.tsx +30 -0
- package/src/index.ts +1 -1
- package/src/internal-utils/create-test-snapshot.ts +23 -0
- package/src/plugins/plugin.one-line.tsx +1 -1
- package/src/selectors/selector.get-active-annotations.test.ts +4 -13
- package/src/selectors/selector.get-caret-word-selection.test.ts +3 -7
- package/src/selectors/selector.get-selected-spans.test.ts +5 -9
- package/src/selectors/selector.get-selection-text.test.ts +5 -7
- package/src/selectors/selector.get-trimmed-selection.test.ts +3 -5
- package/src/selectors/selector.is-active-decorator.test.ts +5 -9
- package/lib/_chunks-cjs/plugin.event-listener.cjs.map +0 -1
- package/lib/_chunks-es/plugin.event-listener.js.map +0 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import {useEffect} from 'react'
|
|
2
|
+
import {useEffectEvent} from 'use-effect-event'
|
|
3
|
+
import type {EditorEmittedEvent} from './editor/editor-machine'
|
|
4
|
+
import {useEditor} from './editor/editor-provider'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @public
|
|
8
|
+
* @deprecated
|
|
9
|
+
* This component has been renamed. Use `EventListenerPlugin` instead.
|
|
10
|
+
*
|
|
11
|
+
* ```
|
|
12
|
+
* import {EventListenerPlugin} from '@portabletext/editor/plugins'
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export function EditorEventListener(props: {
|
|
16
|
+
on: (event: EditorEmittedEvent) => void
|
|
17
|
+
}) {
|
|
18
|
+
const editor = useEditor()
|
|
19
|
+
const on = useEffectEvent(props.on)
|
|
20
|
+
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
const subscription = editor.on('*', on)
|
|
23
|
+
|
|
24
|
+
return () => {
|
|
25
|
+
subscription.unsubscribe()
|
|
26
|
+
}
|
|
27
|
+
}, [editor])
|
|
28
|
+
|
|
29
|
+
return null
|
|
30
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -41,7 +41,7 @@ export {defaultKeyGenerator as keyGenerator} from './editor/key-generator'
|
|
|
41
41
|
export type {AddedAnnotationPaths} from './editor/plugins/createWithEditableAPI'
|
|
42
42
|
export {PortableTextEditor} from './editor/PortableTextEditor'
|
|
43
43
|
export type {PortableTextEditorProps} from './editor/PortableTextEditor'
|
|
44
|
-
export {
|
|
44
|
+
export {EditorEventListener} from './editor-event-listener'
|
|
45
45
|
export type {BlockOffset} from './types/block-offset'
|
|
46
46
|
export * from './types/editor'
|
|
47
47
|
export type {PortableTextMemberSchemaTypes} from './types/editor'
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import {compileSchemaDefinition, defineSchema} from '../editor/define-schema'
|
|
2
|
+
import type {EditorSnapshot} from '../selectors'
|
|
3
|
+
import {createTestKeyGenerator} from './test-key-generator'
|
|
4
|
+
|
|
5
|
+
export function createTestSnapshot(snapshot: {
|
|
6
|
+
context?: Partial<EditorSnapshot['context']>
|
|
7
|
+
beta?: Partial<EditorSnapshot['beta']>
|
|
8
|
+
}): EditorSnapshot {
|
|
9
|
+
return {
|
|
10
|
+
context: {
|
|
11
|
+
converters: snapshot.context?.converters ?? [],
|
|
12
|
+
schema:
|
|
13
|
+
snapshot.context?.schema ?? compileSchemaDefinition(defineSchema({})),
|
|
14
|
+
keyGenerator: snapshot.context?.keyGenerator ?? createTestKeyGenerator(),
|
|
15
|
+
activeDecorators: snapshot.context?.activeDecorators ?? [],
|
|
16
|
+
value: snapshot.context?.value ?? [],
|
|
17
|
+
selection: snapshot.context?.selection ?? null,
|
|
18
|
+
},
|
|
19
|
+
beta: {
|
|
20
|
+
hasTag: snapshot.beta?.hasTag ?? (() => false),
|
|
21
|
+
},
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -1,25 +1,16 @@
|
|
|
1
1
|
import type {PortableTextBlock} from '@sanity/types'
|
|
2
2
|
import {expect, test} from 'vitest'
|
|
3
|
-
import
|
|
4
|
-
import type {EditorSnapshot} from '../editor/editor-snapshot'
|
|
5
|
-
import {createTestKeyGenerator} from '../internal-utils/test-key-generator'
|
|
3
|
+
import {createTestSnapshot} from '../internal-utils/create-test-snapshot'
|
|
6
4
|
import type {EditorSelection} from '../utils'
|
|
7
5
|
import {getActiveAnnotations} from './selector.get-active-annotations'
|
|
8
6
|
|
|
9
|
-
function snapshot(
|
|
10
|
-
|
|
11
|
-
selection: EditorSelection,
|
|
12
|
-
): EditorSnapshot {
|
|
13
|
-
return {
|
|
7
|
+
function snapshot(value: Array<PortableTextBlock>, selection: EditorSelection) {
|
|
8
|
+
return createTestSnapshot({
|
|
14
9
|
context: {
|
|
15
|
-
converters: [],
|
|
16
|
-
schema: {} as EditorSchema,
|
|
17
|
-
keyGenerator: createTestKeyGenerator(),
|
|
18
|
-
activeDecorators: [],
|
|
19
10
|
value,
|
|
20
11
|
selection,
|
|
21
12
|
},
|
|
22
|
-
}
|
|
13
|
+
})
|
|
23
14
|
}
|
|
24
15
|
|
|
25
16
|
const link = {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type {PortableTextBlock} from '@sanity/types'
|
|
2
2
|
import {describe, expect, test} from 'vitest'
|
|
3
|
-
import {
|
|
4
|
-
import type {EditorSnapshot} from '../editor/editor-snapshot'
|
|
3
|
+
import {createTestSnapshot} from '../internal-utils/create-test-snapshot'
|
|
5
4
|
import {createTestKeyGenerator} from '../internal-utils/test-key-generator'
|
|
6
5
|
import type {EditorSelection} from '../utils'
|
|
7
6
|
import {getCaretWordSelection} from './selector.get-caret-word-selection'
|
|
@@ -9,16 +8,13 @@ import {getCaretWordSelection} from './selector.get-caret-word-selection'
|
|
|
9
8
|
const keyGenerator = createTestKeyGenerator()
|
|
10
9
|
|
|
11
10
|
function snapshot(value: Array<PortableTextBlock>, selection: EditorSelection) {
|
|
12
|
-
return {
|
|
11
|
+
return createTestSnapshot({
|
|
13
12
|
context: {
|
|
14
13
|
value,
|
|
15
14
|
selection,
|
|
16
15
|
keyGenerator,
|
|
17
|
-
activeDecorators: [],
|
|
18
|
-
converters: [],
|
|
19
|
-
schema: compileSchemaDefinition(defineSchema({})),
|
|
20
16
|
},
|
|
21
|
-
}
|
|
17
|
+
})
|
|
22
18
|
}
|
|
23
19
|
|
|
24
20
|
describe(getCaretWordSelection.name, () => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type {PortableTextBlock} from '@sanity/types'
|
|
2
2
|
import {describe, expect, test} from 'vitest'
|
|
3
|
-
import {getSelectedSpans, type
|
|
4
|
-
import
|
|
3
|
+
import {getSelectedSpans, type EditorSelection} from '.'
|
|
4
|
+
import {createTestSnapshot} from '../internal-utils/create-test-snapshot'
|
|
5
5
|
|
|
6
6
|
const fooBar = {
|
|
7
7
|
_type: 'block',
|
|
@@ -40,17 +40,13 @@ describe(getSelectedSpans.name, () => {
|
|
|
40
40
|
function snapshot(
|
|
41
41
|
value: Array<PortableTextBlock>,
|
|
42
42
|
selection: EditorSelection,
|
|
43
|
-
)
|
|
44
|
-
return {
|
|
43
|
+
) {
|
|
44
|
+
return createTestSnapshot({
|
|
45
45
|
context: {
|
|
46
|
-
converters: [],
|
|
47
|
-
schema: {} as EditorSchema,
|
|
48
|
-
keyGenerator: () => '',
|
|
49
|
-
activeDecorators: [],
|
|
50
46
|
value,
|
|
51
47
|
selection,
|
|
52
48
|
},
|
|
53
|
-
}
|
|
49
|
+
})
|
|
54
50
|
}
|
|
55
51
|
|
|
56
52
|
test('selecting a single span', () => {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type {PortableTextBlock} from '@sanity/types'
|
|
2
2
|
import {expect, test} from 'vitest'
|
|
3
|
-
import type {EditorSelection
|
|
3
|
+
import type {EditorSelection} from '.'
|
|
4
4
|
import {compileSchemaDefinition, defineSchema} from '../editor/define-schema'
|
|
5
|
+
import {createTestSnapshot} from '../internal-utils/create-test-snapshot'
|
|
5
6
|
import {getSelectionText} from './selector.get-selection-text'
|
|
6
7
|
|
|
7
8
|
const brokenBlock = {
|
|
@@ -67,21 +68,18 @@ test(getSelectionText.name, () => {
|
|
|
67
68
|
function snapshot(
|
|
68
69
|
value: Array<PortableTextBlock>,
|
|
69
70
|
selection: EditorSelection,
|
|
70
|
-
)
|
|
71
|
-
return {
|
|
71
|
+
) {
|
|
72
|
+
return createTestSnapshot({
|
|
72
73
|
context: {
|
|
73
|
-
converters: [],
|
|
74
74
|
schema: compileSchemaDefinition(
|
|
75
75
|
defineSchema({
|
|
76
76
|
inlineObjects: [{name: 'stock-ticker'}],
|
|
77
77
|
}),
|
|
78
78
|
),
|
|
79
|
-
keyGenerator: () => '',
|
|
80
|
-
activeDecorators: [],
|
|
81
79
|
value,
|
|
82
80
|
selection,
|
|
83
81
|
},
|
|
84
|
-
}
|
|
82
|
+
})
|
|
85
83
|
}
|
|
86
84
|
|
|
87
85
|
expect(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type {PortableTextBlock} from '@sanity/types'
|
|
2
2
|
import {describe, expect, test} from 'vitest'
|
|
3
3
|
import {compileSchemaDefinition, defineSchema} from '../editor/define-schema'
|
|
4
|
-
import
|
|
4
|
+
import {createTestSnapshot} from '../internal-utils/create-test-snapshot'
|
|
5
5
|
import {parseBlock} from '../internal-utils/parse-blocks'
|
|
6
6
|
import {createTestKeyGenerator} from '../internal-utils/test-key-generator'
|
|
7
7
|
import type {EditorSelection} from '../types/editor'
|
|
@@ -20,10 +20,8 @@ function snapshot(
|
|
|
20
20
|
}),
|
|
21
21
|
)
|
|
22
22
|
|
|
23
|
-
return {
|
|
23
|
+
return createTestSnapshot({
|
|
24
24
|
context: {
|
|
25
|
-
activeDecorators: [],
|
|
26
|
-
converters: [],
|
|
27
25
|
keyGenerator,
|
|
28
26
|
schema,
|
|
29
27
|
selection,
|
|
@@ -42,7 +40,7 @@ function snapshot(
|
|
|
42
40
|
return parsedBlock ? [parsedBlock] : []
|
|
43
41
|
}),
|
|
44
42
|
},
|
|
45
|
-
}
|
|
43
|
+
})
|
|
46
44
|
}
|
|
47
45
|
|
|
48
46
|
function createSpan(text: string, marks: Array<string> = []) {
|
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
import {expect, test} from 'vitest'
|
|
2
|
-
import type {
|
|
3
|
-
import
|
|
2
|
+
import type {EditorSelection} from '.'
|
|
3
|
+
import {createTestSnapshot} from '../internal-utils/create-test-snapshot'
|
|
4
4
|
import {isActiveDecorator} from './selector.is-active-decorator'
|
|
5
5
|
|
|
6
6
|
test(isActiveDecorator.name, () => {
|
|
7
|
-
function snapshot(selection: EditorSelection)
|
|
8
|
-
return {
|
|
7
|
+
function snapshot(selection: EditorSelection) {
|
|
8
|
+
return createTestSnapshot({
|
|
9
9
|
context: {
|
|
10
|
-
converters: [],
|
|
11
|
-
schema: {} as EditorSchema,
|
|
12
|
-
keyGenerator: () => '',
|
|
13
|
-
activeDecorators: [],
|
|
14
10
|
value: [
|
|
15
11
|
{
|
|
16
12
|
_type: '_block',
|
|
@@ -32,7 +28,7 @@ test(isActiveDecorator.name, () => {
|
|
|
32
28
|
],
|
|
33
29
|
selection,
|
|
34
30
|
},
|
|
35
|
-
}
|
|
31
|
+
})
|
|
36
32
|
}
|
|
37
33
|
|
|
38
34
|
expect(
|