@portabletext/editor 3.3.3 → 3.3.5

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 (309) hide show
  1. package/lib/_chunks-dts/index.d.ts +21 -1667
  2. package/lib/index.js +511 -9010
  3. package/lib/index.js.map +1 -1
  4. package/package.json +14 -15
  5. package/src/behaviors/_exports/index.ts +0 -1
  6. package/src/behaviors/behavior.abstract.annotation.ts +0 -77
  7. package/src/behaviors/behavior.abstract.decorator.ts +0 -39
  8. package/src/behaviors/behavior.abstract.delete.ts +0 -273
  9. package/src/behaviors/behavior.abstract.deserialize.ts +0 -232
  10. package/src/behaviors/behavior.abstract.insert.ts +0 -525
  11. package/src/behaviors/behavior.abstract.keyboard.ts +0 -189
  12. package/src/behaviors/behavior.abstract.list-item.ts +0 -70
  13. package/src/behaviors/behavior.abstract.move.ts +0 -79
  14. package/src/behaviors/behavior.abstract.select.ts +0 -118
  15. package/src/behaviors/behavior.abstract.serialize.ts +0 -96
  16. package/src/behaviors/behavior.abstract.split.ts +0 -170
  17. package/src/behaviors/behavior.abstract.style.ts +0 -55
  18. package/src/behaviors/behavior.abstract.ts +0 -139
  19. package/src/behaviors/behavior.config.ts +0 -7
  20. package/src/behaviors/behavior.core.annotations.ts +0 -62
  21. package/src/behaviors/behavior.core.block-element.ts +0 -116
  22. package/src/behaviors/behavior.core.block-objects.ts +0 -285
  23. package/src/behaviors/behavior.core.decorators.ts +0 -44
  24. package/src/behaviors/behavior.core.dnd.ts +0 -356
  25. package/src/behaviors/behavior.core.insert-break.ts +0 -266
  26. package/src/behaviors/behavior.core.insert.ts +0 -52
  27. package/src/behaviors/behavior.core.lists.ts +0 -691
  28. package/src/behaviors/behavior.core.ts +0 -44
  29. package/src/behaviors/behavior.perform-event.ts +0 -354
  30. package/src/behaviors/behavior.types.action.ts +0 -102
  31. package/src/behaviors/behavior.types.behavior.ts +0 -83
  32. package/src/behaviors/behavior.types.event.ts +0 -667
  33. package/src/behaviors/behavior.types.guard.ts +0 -11
  34. package/src/behaviors/index.ts +0 -17
  35. package/src/converters/converter.json.ts +0 -53
  36. package/src/converters/converter.portable-text.deserialize.test.ts +0 -680
  37. package/src/converters/converter.portable-text.ts +0 -75
  38. package/src/converters/converter.text-html.deserialize.test.ts +0 -406
  39. package/src/converters/converter.text-html.serialize.test.ts +0 -246
  40. package/src/converters/converter.text-html.ts +0 -87
  41. package/src/converters/converter.text-markdown.ts +0 -67
  42. package/src/converters/converter.text-plain.test.ts +0 -245
  43. package/src/converters/converter.text-plain.ts +0 -126
  44. package/src/converters/converter.types.ts +0 -72
  45. package/src/converters/converters.core.ts +0 -18
  46. package/src/editor/Editable.tsx +0 -1012
  47. package/src/editor/PortableTextEditor.tsx +0 -791
  48. package/src/editor/components/drop-indicator.tsx +0 -17
  49. package/src/editor/components/render-block-object.tsx +0 -121
  50. package/src/editor/components/render-default-object.tsx +0 -21
  51. package/src/editor/components/render-element.tsx +0 -88
  52. package/src/editor/components/render-inline-object.tsx +0 -129
  53. package/src/editor/components/render-leaf.tsx +0 -64
  54. package/src/editor/components/render-span.tsx +0 -303
  55. package/src/editor/components/render-text-block.tsx +0 -265
  56. package/src/editor/components/render-text.tsx +0 -18
  57. package/src/editor/components/use-core-block-element-behaviors.ts +0 -39
  58. package/src/editor/create-editor.ts +0 -323
  59. package/src/editor/create-slate-editor.tsx +0 -64
  60. package/src/editor/editor-actor-context.ts +0 -4
  61. package/src/editor/editor-context.tsx +0 -7
  62. package/src/editor/editor-dom.ts +0 -220
  63. package/src/editor/editor-machine.ts +0 -751
  64. package/src/editor/editor-provider.tsx +0 -111
  65. package/src/editor/editor-schema.ts +0 -6
  66. package/src/editor/editor-selector.ts +0 -89
  67. package/src/editor/editor-snapshot.ts +0 -68
  68. package/src/editor/event-to-change.tsx +0 -49
  69. package/src/editor/hooks/usePortableTextEditor.ts +0 -25
  70. package/src/editor/hooks/usePortableTextEditorSelection.tsx +0 -28
  71. package/src/editor/mutation-machine.ts +0 -322
  72. package/src/editor/plugins/create-with-event-listeners.ts +0 -271
  73. package/src/editor/plugins/createWithEditableAPI.ts +0 -529
  74. package/src/editor/plugins/createWithHotKeys.ts +0 -68
  75. package/src/editor/plugins/createWithObjectKeys.ts +0 -289
  76. package/src/editor/plugins/createWithPatches.ts +0 -272
  77. package/src/editor/plugins/createWithPortableTextMarkModel.ts +0 -559
  78. package/src/editor/plugins/createWithSchemaTypes.ts +0 -121
  79. package/src/editor/plugins/slate-plugin.update-selection.ts +0 -51
  80. package/src/editor/plugins/slate-plugin.update-value.ts +0 -46
  81. package/src/editor/plugins/with-plugins.ts +0 -69
  82. package/src/editor/range-decorations-machine.ts +0 -421
  83. package/src/editor/relay-actor-context.ts +0 -4
  84. package/src/editor/relay-machine.ts +0 -152
  85. package/src/editor/sync-machine.ts +0 -961
  86. package/src/editor/use-editor.ts +0 -27
  87. package/src/editor/validate-selection-machine.test.ts +0 -47
  88. package/src/editor/validate-selection-machine.ts +0 -149
  89. package/src/editor/weakMaps.ts +0 -15
  90. package/src/editor/with-normalizing-node.ts +0 -14
  91. package/src/editor/with-performing-behavior-operation.ts +0 -21
  92. package/src/editor/withChanges.ts +0 -13
  93. package/src/editor/without-normalizing-conditional.ts +0 -13
  94. package/src/editor/withoutPatching.ts +0 -14
  95. package/src/editor.ts +0 -59
  96. package/src/history/behavior.operation.history.redo.ts +0 -67
  97. package/src/history/behavior.operation.history.undo.ts +0 -71
  98. package/src/history/event.history.undo.test.tsx +0 -672
  99. package/src/history/history.preserving-keys.test.tsx +0 -112
  100. package/src/history/remote-patches.ts +0 -20
  101. package/src/history/slate-plugin.history.ts +0 -142
  102. package/src/history/slate-plugin.redoing.ts +0 -21
  103. package/src/history/slate-plugin.undoing.ts +0 -21
  104. package/src/history/slate-plugin.without-history.ts +0 -23
  105. package/src/history/transform-operation.ts +0 -245
  106. package/src/history/undo-redo-collaboration.test.tsx +0 -541
  107. package/src/history/undo-redo.feature +0 -125
  108. package/src/history/undo-redo.test.tsx +0 -195
  109. package/src/history/undo-step.ts +0 -148
  110. package/src/index.ts +0 -107
  111. package/src/internal-utils/__tests__/ranges.test.ts +0 -23
  112. package/src/internal-utils/__tests__/values.test.ts +0 -110
  113. package/src/internal-utils/apply-operation-to-portable-text.test.ts +0 -1861
  114. package/src/internal-utils/apply-operation-to-portable-text.ts +0 -615
  115. package/src/internal-utils/applyPatch.ts +0 -644
  116. package/src/internal-utils/block-keys.ts +0 -9
  117. package/src/internal-utils/build-index-maps.test.ts +0 -464
  118. package/src/internal-utils/build-index-maps.ts +0 -131
  119. package/src/internal-utils/collapse-selection.ts +0 -36
  120. package/src/internal-utils/compound-client-rect.ts +0 -28
  121. package/src/internal-utils/create-placeholder-block.ts +0 -21
  122. package/src/internal-utils/create-test-snapshot.ts +0 -28
  123. package/src/internal-utils/debug.ts +0 -12
  124. package/src/internal-utils/editor-selection.test.ts +0 -44
  125. package/src/internal-utils/editor-selection.ts +0 -56
  126. package/src/internal-utils/event-position.ts +0 -318
  127. package/src/internal-utils/global-scope.ts +0 -27
  128. package/src/internal-utils/globally-scoped-context.ts +0 -39
  129. package/src/internal-utils/is-hotkey.test.ts +0 -114
  130. package/src/internal-utils/is-hotkey.ts +0 -209
  131. package/src/internal-utils/mime-type.ts +0 -1
  132. package/src/internal-utils/move-range-by-operation.ts +0 -19
  133. package/src/internal-utils/operation-to-patches.test.ts +0 -522
  134. package/src/internal-utils/operation-to-patches.ts +0 -571
  135. package/src/internal-utils/portable-text-node.ts +0 -209
  136. package/src/internal-utils/schema.ts +0 -8
  137. package/src/internal-utils/selection-block-keys.ts +0 -20
  138. package/src/internal-utils/selection-focus-text.ts +0 -40
  139. package/src/internal-utils/selection-text.test.ts +0 -32
  140. package/src/internal-utils/selection-text.ts +0 -21
  141. package/src/internal-utils/selection.ts +0 -77
  142. package/src/internal-utils/sibling-utils.ts +0 -55
  143. package/src/internal-utils/slate-utils.test.tsx +0 -121
  144. package/src/internal-utils/slate-utils.ts +0 -417
  145. package/src/internal-utils/split-string.ts +0 -12
  146. package/src/internal-utils/stop-actor.ts +0 -43
  147. package/src/internal-utils/string-overlap.test.ts +0 -14
  148. package/src/internal-utils/string-overlap.ts +0 -28
  149. package/src/internal-utils/string-utils.ts +0 -7
  150. package/src/internal-utils/text-block-key.test.ts +0 -41
  151. package/src/internal-utils/text-block-key.ts +0 -26
  152. package/src/internal-utils/text-marks.test.ts +0 -41
  153. package/src/internal-utils/text-marks.ts +0 -22
  154. package/src/internal-utils/text-selection.test.ts +0 -211
  155. package/src/internal-utils/text-selection.ts +0 -121
  156. package/src/internal-utils/to-slate-range.test.ts +0 -278
  157. package/src/internal-utils/to-slate-range.ts +0 -171
  158. package/src/internal-utils/validateValue.ts +0 -443
  159. package/src/internal-utils/value-annotations.ts +0 -33
  160. package/src/internal-utils/values.test.ts +0 -282
  161. package/src/internal-utils/values.ts +0 -266
  162. package/src/keyboard-shortcuts/default-keyboard-shortcuts.ts +0 -146
  163. package/src/operations/behavior.operation.annotation.add.ts +0 -99
  164. package/src/operations/behavior.operation.annotation.remove.ts +0 -150
  165. package/src/operations/behavior.operation.block.set.ts +0 -104
  166. package/src/operations/behavior.operation.block.unset.ts +0 -54
  167. package/src/operations/behavior.operation.child.set.ts +0 -107
  168. package/src/operations/behavior.operation.child.unset.ts +0 -116
  169. package/src/operations/behavior.operation.decorator.add.ts +0 -131
  170. package/src/operations/behavior.operation.delete.ts +0 -294
  171. package/src/operations/behavior.operation.insert.block.ts +0 -495
  172. package/src/operations/behavior.operation.insert.child.ts +0 -129
  173. package/src/operations/behavior.operation.insert.text.ts +0 -8
  174. package/src/operations/behavior.operation.move.backward.ts +0 -12
  175. package/src/operations/behavior.operation.move.block.ts +0 -44
  176. package/src/operations/behavior.operation.move.forward.ts +0 -11
  177. package/src/operations/behavior.operation.select.ts +0 -27
  178. package/src/operations/behavior.operations.ts +0 -221
  179. package/src/plugins/_exports/index.ts +0 -1
  180. package/src/plugins/index.ts +0 -3
  181. package/src/plugins/plugin.behavior.tsx +0 -24
  182. package/src/plugins/plugin.editor-ref.tsx +0 -17
  183. package/src/plugins/plugin.event-listener.tsx +0 -68
  184. package/src/plugins/plugin.internal.auto-close-brackets.test.tsx +0 -71
  185. package/src/plugins/plugin.internal.auto-close-brackets.ts +0 -62
  186. package/src/plugins/plugin.internal.change-ref.tsx +0 -19
  187. package/src/plugins/plugin.internal.portable-text-editor-ref.tsx +0 -16
  188. package/src/plugins/plugin.internal.slate-editor-ref.tsx +0 -15
  189. package/src/priority/priority.core.ts +0 -3
  190. package/src/priority/priority.sort.test.ts +0 -319
  191. package/src/priority/priority.sort.ts +0 -123
  192. package/src/priority/priority.types.ts +0 -24
  193. package/src/selectors/_exports/index.ts +0 -1
  194. package/src/selectors/drag-selection.test.ts +0 -578
  195. package/src/selectors/drag-selection.ts +0 -118
  196. package/src/selectors/index.ts +0 -54
  197. package/src/selectors/selector.get-active-annotation-marks.ts +0 -12
  198. package/src/selectors/selector.get-active-annotations.ts +0 -36
  199. package/src/selectors/selector.get-active-decorators.ts +0 -29
  200. package/src/selectors/selector.get-active-list-item.ts +0 -38
  201. package/src/selectors/selector.get-active-style.ts +0 -38
  202. package/src/selectors/selector.get-anchor-block.ts +0 -22
  203. package/src/selectors/selector.get-anchor-child.ts +0 -36
  204. package/src/selectors/selector.get-anchor-span.ts +0 -17
  205. package/src/selectors/selector.get-anchor-text-block.ts +0 -18
  206. package/src/selectors/selector.get-block-offsets.ts +0 -34
  207. package/src/selectors/selector.get-caret-word-selection.test.ts +0 -284
  208. package/src/selectors/selector.get-caret-word-selection.ts +0 -134
  209. package/src/selectors/selector.get-first-block.ts +0 -14
  210. package/src/selectors/selector.get-focus-block-object.ts +0 -18
  211. package/src/selectors/selector.get-focus-block.ts +0 -23
  212. package/src/selectors/selector.get-focus-child.ts +0 -36
  213. package/src/selectors/selector.get-focus-inline-object.ts +0 -17
  214. package/src/selectors/selector.get-focus-list-block.ts +0 -18
  215. package/src/selectors/selector.get-focus-span.ts +0 -18
  216. package/src/selectors/selector.get-focus-text-block.ts +0 -18
  217. package/src/selectors/selector.get-last-block.ts +0 -16
  218. package/src/selectors/selector.get-mark-state.test.ts +0 -325
  219. package/src/selectors/selector.get-mark-state.ts +0 -263
  220. package/src/selectors/selector.get-next-block.ts +0 -29
  221. package/src/selectors/selector.get-next-inline-object.ts +0 -53
  222. package/src/selectors/selector.get-next-inline-objects.ts +0 -50
  223. package/src/selectors/selector.get-next-span.ts +0 -56
  224. package/src/selectors/selector.get-previous-block.ts +0 -29
  225. package/src/selectors/selector.get-previous-inline-object.ts +0 -50
  226. package/src/selectors/selector.get-previous-inline-objects.ts +0 -47
  227. package/src/selectors/selector.get-previous-span.ts +0 -53
  228. package/src/selectors/selector.get-selected-blocks.ts +0 -61
  229. package/src/selectors/selector.get-selected-spans.test.ts +0 -347
  230. package/src/selectors/selector.get-selected-spans.ts +0 -155
  231. package/src/selectors/selector.get-selected-text-blocks.ts +0 -73
  232. package/src/selectors/selector.get-selected-value.test.ts +0 -834
  233. package/src/selectors/selector.get-selected-value.ts +0 -66
  234. package/src/selectors/selector.get-selection-end-block.ts +0 -33
  235. package/src/selectors/selector.get-selection-end-child.ts +0 -33
  236. package/src/selectors/selector.get-selection-end-point.ts +0 -17
  237. package/src/selectors/selector.get-selection-start-block.ts +0 -33
  238. package/src/selectors/selector.get-selection-start-child.ts +0 -33
  239. package/src/selectors/selector.get-selection-start-point.ts +0 -17
  240. package/src/selectors/selector.get-selection-text.test.ts +0 -421
  241. package/src/selectors/selector.get-selection-text.ts +0 -27
  242. package/src/selectors/selector.get-selection.ts +0 -9
  243. package/src/selectors/selector.get-text-after.ts +0 -46
  244. package/src/selectors/selector.get-text-before.ts +0 -46
  245. package/src/selectors/selector.get-value.ts +0 -11
  246. package/src/selectors/selector.is-active-annotation.test.ts +0 -320
  247. package/src/selectors/selector.is-active-annotation.ts +0 -52
  248. package/src/selectors/selector.is-active-decorator.test.ts +0 -136
  249. package/src/selectors/selector.is-active-decorator.ts +0 -24
  250. package/src/selectors/selector.is-active-list-item.ts +0 -13
  251. package/src/selectors/selector.is-active-style.ts +0 -13
  252. package/src/selectors/selector.is-at-the-end-of-block.ts +0 -30
  253. package/src/selectors/selector.is-at-the-start-of-block.ts +0 -30
  254. package/src/selectors/selector.is-overlapping-selection.test.ts +0 -304
  255. package/src/selectors/selector.is-overlapping-selection.ts +0 -181
  256. package/src/selectors/selector.is-point-after-selection.ts +0 -97
  257. package/src/selectors/selector.is-point-before-selection.ts +0 -97
  258. package/src/selectors/selector.is-selecting-entire-blocks.ts +0 -43
  259. package/src/selectors/selector.is-selection-collapsed.ts +0 -17
  260. package/src/selectors/selector.is-selection-expanded.test.ts +0 -63
  261. package/src/selectors/selector.is-selection-expanded.ts +0 -9
  262. package/src/test/_exports/index.ts +0 -1
  263. package/src/test/gherkin-parameter-types.ts +0 -112
  264. package/src/test/index.ts +0 -1
  265. package/src/test/vitest/_exports/index.ts +0 -1
  266. package/src/test/vitest/index.ts +0 -3
  267. package/src/test/vitest/step-context.ts +0 -13
  268. package/src/test/vitest/step-definitions.tsx +0 -960
  269. package/src/test/vitest/test-editor.tsx +0 -198
  270. package/src/type-utils.ts +0 -29
  271. package/src/types/block-offset.ts +0 -9
  272. package/src/types/block-with-optional-key.ts +0 -25
  273. package/src/types/editor.ts +0 -509
  274. package/src/types/options.ts +0 -13
  275. package/src/types/paths.ts +0 -35
  276. package/src/types/slate-editor.ts +0 -50
  277. package/src/types/slate.ts +0 -27
  278. package/src/utils/_exports/index.ts +0 -1
  279. package/src/utils/asserters.ts +0 -9
  280. package/src/utils/index.ts +0 -24
  281. package/src/utils/key-generator.ts +0 -33
  282. package/src/utils/parse-blocks.test.ts +0 -836
  283. package/src/utils/parse-blocks.ts +0 -504
  284. package/src/utils/util.at-the-beginning-of-block.ts +0 -32
  285. package/src/utils/util.block-offset-to-block-selection-point.ts +0 -28
  286. package/src/utils/util.block-offset-to-selection-point.ts +0 -33
  287. package/src/utils/util.block-offset.test.ts +0 -375
  288. package/src/utils/util.block-offset.ts +0 -136
  289. package/src/utils/util.block-offsets-to-selection.ts +0 -38
  290. package/src/utils/util.child-selection-point-to-block-offset.ts +0 -51
  291. package/src/utils/util.get-block-end-point.ts +0 -35
  292. package/src/utils/util.get-block-start-point.ts +0 -31
  293. package/src/utils/util.get-selection-end-point.ts +0 -20
  294. package/src/utils/util.get-selection-start-point.ts +0 -20
  295. package/src/utils/util.get-text-block-text.ts +0 -8
  296. package/src/utils/util.is-empty-text-block.ts +0 -21
  297. package/src/utils/util.is-equal-selection-points.ts +0 -13
  298. package/src/utils/util.is-equal-selections.ts +0 -20
  299. package/src/utils/util.is-keyed-segment.ts +0 -8
  300. package/src/utils/util.is-selection-collapsed.ts +0 -16
  301. package/src/utils/util.is-selection-expanded.ts +0 -13
  302. package/src/utils/util.merge-text-blocks.ts +0 -40
  303. package/src/utils/util.reverse-selection.ts +0 -26
  304. package/src/utils/util.selection-point-to-block-offset.ts +0 -30
  305. package/src/utils/util.selection-point.ts +0 -22
  306. package/src/utils/util.slice-blocks.ts +0 -221
  307. package/src/utils/util.slice-text-block.test.ts +0 -190
  308. package/src/utils/util.slice-text-block.ts +0 -89
  309. package/src/utils/util.split-text-block.ts +0 -54
@@ -1,303 +0,0 @@
1
- import {isTextBlock} from '@portabletext/schema'
2
- import {useSelector} from '@xstate/react'
3
- import {uniq} from 'lodash'
4
- import {useContext, useMemo, useRef, type ReactElement} from 'react'
5
- import {useSlateStatic, type RenderLeafProps} from 'slate-react'
6
- import {getFocusSpan} from '../../selectors/selector.get-focus-span'
7
- import {isOverlappingSelection} from '../../selectors/selector.is-overlapping-selection'
8
- import {isSelectionCollapsed} from '../../selectors/selector.is-selection-collapsed'
9
- import type {
10
- BlockAnnotationRenderProps,
11
- BlockChildRenderProps,
12
- BlockDecoratorRenderProps,
13
- EditorSelection,
14
- RenderAnnotationFunction,
15
- RenderChildFunction,
16
- RenderDecoratorFunction,
17
- } from '../../types/editor'
18
- import {EditorActorContext} from '../editor-actor-context'
19
- import {getEditorSnapshot} from '../editor-selector'
20
-
21
- export interface RenderSpanProps extends RenderLeafProps {
22
- children: ReactElement<any>
23
- renderAnnotation?: RenderAnnotationFunction
24
- renderChild?: RenderChildFunction
25
- renderDecorator?: RenderDecoratorFunction
26
- readOnly: boolean
27
- }
28
-
29
- export function RenderSpan(props: RenderSpanProps) {
30
- const slateEditor = useSlateStatic()
31
- const editorActor = useContext(EditorActorContext)
32
- const legacySchema = useSelector(editorActor, (s) =>
33
- s.context.getLegacySchema(),
34
- )
35
- const spanRef = useRef<HTMLElement>(null)
36
-
37
- /**
38
- * A span is considered focused if the selection is collapsed and the caret
39
- * is inside the span.
40
- */
41
- const focused = useSelector(editorActor, (editorActorSnapshot) => {
42
- const snapshot = getEditorSnapshot({
43
- editorActorSnapshot,
44
- slateEditorInstance: slateEditor,
45
- })
46
-
47
- if (!snapshot.context.selection) {
48
- return false
49
- }
50
-
51
- if (!isSelectionCollapsed(snapshot)) {
52
- return false
53
- }
54
-
55
- const focusedSpan = getFocusSpan(snapshot)
56
-
57
- if (!focusedSpan) {
58
- return false
59
- }
60
-
61
- return focusedSpan.node._key === props.leaf._key
62
- })
63
-
64
- /**
65
- * A span is considered selected if editor selection is overlapping with the
66
- * span selection points.
67
- */
68
- const selected = useSelector(editorActor, (editorActorSnapshot) => {
69
- const snapshot = getEditorSnapshot({
70
- editorActorSnapshot,
71
- slateEditorInstance: slateEditor,
72
- })
73
-
74
- if (!snapshot.context.selection) {
75
- return false
76
- }
77
-
78
- const parent = props.children.props.parent
79
- const block =
80
- parent && isTextBlock(snapshot.context, parent) ? parent : undefined
81
- const spanSelection: EditorSelection = block
82
- ? {
83
- anchor: {
84
- path: [{_key: block._key}, 'children', {_key: props.leaf._key}],
85
- offset: 0,
86
- },
87
- focus: {
88
- path: [{_key: block._key}, 'children', {_key: props.leaf._key}],
89
- offset: props.leaf.text.length,
90
- },
91
- }
92
- : null
93
-
94
- return isOverlappingSelection(spanSelection)(snapshot)
95
- })
96
-
97
- const parent = props.children.props.parent
98
- const block = parent && slateEditor.isTextBlock(parent) ? parent : undefined
99
-
100
- const path = useMemo(
101
- () =>
102
- block
103
- ? [{_key: block._key}, 'children', {_key: props.leaf._key}]
104
- : undefined,
105
- [block, props.leaf._key],
106
- )
107
-
108
- const decoratorSchemaTypes = editorActor
109
- .getSnapshot()
110
- .context.schema.decorators.map((decorator) => decorator.name)
111
-
112
- const decorators = uniq(
113
- (props.leaf.marks ?? []).filter((mark) =>
114
- decoratorSchemaTypes.includes(mark),
115
- ),
116
- )
117
-
118
- const annotationMarkDefs = (props.leaf.marks ?? []).flatMap((mark) => {
119
- if (decoratorSchemaTypes.includes(mark)) {
120
- return []
121
- }
122
-
123
- const markDef = block?.markDefs?.find((markDef) => markDef._key === mark)
124
-
125
- if (markDef) {
126
- return [markDef]
127
- }
128
-
129
- return []
130
- })
131
-
132
- let children = props.children
133
-
134
- /**
135
- * Support `renderDecorator` render function for each Decorator
136
- */
137
- for (const mark of decorators) {
138
- const legacyDecoratorSchemaType = legacySchema.decorators.find(
139
- (dec) => dec.value === mark,
140
- )
141
-
142
- if (path && legacyDecoratorSchemaType && props.renderDecorator) {
143
- children = (
144
- <RenderDecorator
145
- renderDecorator={props.renderDecorator}
146
- editorElementRef={spanRef}
147
- focused={focused}
148
- path={path}
149
- selected={selected}
150
- schemaType={legacyDecoratorSchemaType}
151
- value={mark}
152
- type={legacyDecoratorSchemaType}
153
- >
154
- {children}
155
- </RenderDecorator>
156
- )
157
- }
158
- }
159
-
160
- /**
161
- * Support `renderAnnotation` render function for each Annotation
162
- */
163
- for (const annotationMarkDef of annotationMarkDefs) {
164
- const legacyAnnotationSchemaType = legacySchema.annotations.find(
165
- (t) => t.name === annotationMarkDef._type,
166
- )
167
- if (legacyAnnotationSchemaType) {
168
- if (block && path && props.renderAnnotation) {
169
- children = (
170
- <span ref={spanRef}>
171
- <RenderAnnotation
172
- renderAnnotation={props.renderAnnotation}
173
- block={block}
174
- editorElementRef={spanRef}
175
- focused={focused}
176
- path={path}
177
- selected={selected}
178
- schemaType={legacyAnnotationSchemaType}
179
- value={annotationMarkDef}
180
- type={legacyAnnotationSchemaType}
181
- >
182
- {children}
183
- </RenderAnnotation>
184
- </span>
185
- )
186
- } else {
187
- children = <span ref={spanRef}>{children}</span>
188
- }
189
- }
190
- }
191
-
192
- /**
193
- * Support `renderChild` render function for the Span itself
194
- */
195
- if (block && path && props.renderChild) {
196
- const child = block.children.find(
197
- (_child) => _child._key === props.leaf._key,
198
- ) // Ensure object equality
199
-
200
- if (child) {
201
- children = (
202
- <RenderChild
203
- renderChild={props.renderChild}
204
- annotations={annotationMarkDefs}
205
- editorElementRef={spanRef}
206
- focused={focused}
207
- path={path}
208
- schemaType={legacySchema.span}
209
- selected={selected}
210
- value={child}
211
- type={legacySchema.span}
212
- >
213
- {children}
214
- </RenderChild>
215
- )
216
- }
217
- }
218
-
219
- return (
220
- <span {...props.attributes} ref={spanRef}>
221
- {children}
222
- </span>
223
- )
224
- }
225
-
226
- function RenderAnnotation({
227
- renderAnnotation,
228
- block,
229
- children,
230
- editorElementRef,
231
- focused,
232
- path,
233
- schemaType,
234
- selected,
235
- value,
236
- type,
237
- }: {
238
- renderAnnotation: RenderAnnotationFunction
239
- } & BlockAnnotationRenderProps) {
240
- return renderAnnotation({
241
- block,
242
- children,
243
- editorElementRef,
244
- focused,
245
- path,
246
- schemaType,
247
- selected,
248
- value,
249
- type,
250
- })
251
- }
252
-
253
- function RenderDecorator({
254
- renderDecorator,
255
- children,
256
- editorElementRef,
257
- focused,
258
- path,
259
- schemaType,
260
- selected,
261
- value,
262
- type,
263
- }: {
264
- renderDecorator: RenderDecoratorFunction
265
- } & BlockDecoratorRenderProps) {
266
- return renderDecorator({
267
- children,
268
- editorElementRef,
269
- focused,
270
- path,
271
- schemaType,
272
- selected,
273
- value,
274
- type,
275
- })
276
- }
277
-
278
- function RenderChild({
279
- renderChild,
280
- annotations,
281
- children,
282
- editorElementRef,
283
- focused,
284
- path,
285
- schemaType,
286
- selected,
287
- value,
288
- type,
289
- }: {
290
- renderChild: RenderChildFunction
291
- } & BlockChildRenderProps) {
292
- return renderChild({
293
- annotations,
294
- children,
295
- editorElementRef,
296
- focused,
297
- path,
298
- schemaType,
299
- selected,
300
- value,
301
- type,
302
- })
303
- }
@@ -1,265 +0,0 @@
1
- import type {PortableTextTextBlock} from '@sanity/types'
2
- import {useRef, useState, type ReactElement} from 'react'
3
- import {Range, type Element as SlateElement} from 'slate'
4
- import {
5
- useSelected,
6
- useSlateSelector,
7
- type RenderElementProps,
8
- } from 'slate-react'
9
- import type {EventPositionBlock} from '../../internal-utils/event-position'
10
- import type {
11
- BlockListItemRenderProps,
12
- BlockRenderProps,
13
- BlockStyleRenderProps,
14
- PortableTextMemberSchemaTypes,
15
- RenderBlockFunction,
16
- RenderListItemFunction,
17
- RenderStyleFunction,
18
- } from '../../types/editor'
19
- import {DropIndicator} from './drop-indicator'
20
- import {useCoreBlockElementBehaviors} from './use-core-block-element-behaviors'
21
-
22
- export function RenderTextBlock(props: {
23
- attributes: RenderElementProps['attributes']
24
- children: ReactElement
25
- element: SlateElement
26
- legacySchema: PortableTextMemberSchemaTypes
27
- readOnly: boolean
28
- renderBlock?: RenderBlockFunction
29
- renderListItem?: RenderListItemFunction
30
- renderStyle?: RenderStyleFunction
31
- spellCheck?: boolean
32
- textBlock: PortableTextTextBlock
33
- }) {
34
- const [dragPositionBlock, setDragPositionBlock] =
35
- useState<EventPositionBlock>()
36
- const blockRef = useRef<HTMLDivElement>(null)
37
-
38
- const selected = useSelected()
39
- const focused = useSlateSelector(
40
- (editor) =>
41
- selected &&
42
- editor.selection !== null &&
43
- Range.isCollapsed(editor.selection),
44
- )
45
-
46
- useCoreBlockElementBehaviors({
47
- key: props.element._key,
48
- onSetDragPositionBlock: setDragPositionBlock,
49
- })
50
-
51
- const listIndex = useSlateSelector((editor) =>
52
- editor.listIndexMap.get(props.textBlock._key),
53
- )
54
-
55
- let children = props.children
56
-
57
- if (props.renderStyle && props.textBlock.style) {
58
- const legacyStyleSchemaType =
59
- props.textBlock.style !== undefined
60
- ? props.legacySchema.styles.find(
61
- (style) => style.value === props.textBlock.style,
62
- )
63
- : undefined
64
-
65
- if (legacyStyleSchemaType) {
66
- children = (
67
- <RenderStyle
68
- renderStyle={props.renderStyle}
69
- block={props.textBlock}
70
- editorElementRef={blockRef}
71
- focused={focused}
72
- path={[{_key: props.textBlock._key}]}
73
- schemaType={legacyStyleSchemaType}
74
- selected={selected}
75
- value={props.textBlock.style}
76
- >
77
- {children}
78
- </RenderStyle>
79
- )
80
- } else {
81
- console.error(
82
- `Unable to find Schema type for text block style ${props.textBlock.style}`,
83
- )
84
- }
85
- }
86
-
87
- if (props.renderListItem && props.textBlock.listItem) {
88
- const legacyListItemSchemaType = props.legacySchema.lists.find(
89
- (list) => list.value === props.textBlock.listItem,
90
- )
91
-
92
- if (legacyListItemSchemaType) {
93
- children = (
94
- <RenderListItem
95
- renderListItem={props.renderListItem}
96
- block={props.textBlock}
97
- editorElementRef={blockRef}
98
- focused={focused}
99
- level={props.textBlock.level ?? 1}
100
- path={[{_key: props.textBlock._key}]}
101
- selected={selected}
102
- value={props.textBlock.listItem}
103
- schemaType={legacyListItemSchemaType}
104
- >
105
- {children}
106
- </RenderListItem>
107
- )
108
- } else {
109
- console.error(
110
- `Unable to find Schema type for text block list item ${props.textBlock.listItem}`,
111
- )
112
- }
113
- }
114
-
115
- return (
116
- <div
117
- {...props.attributes}
118
- className={[
119
- 'pt-block',
120
- 'pt-text-block',
121
- ...(props.textBlock.style
122
- ? [`pt-text-block-style-${props.textBlock.style}`]
123
- : []),
124
- ...(props.textBlock.listItem
125
- ? [
126
- 'pt-list-item',
127
- `pt-list-item-${props.textBlock.listItem}`,
128
- `pt-list-item-level-${props.textBlock.level ?? 1}`,
129
- ]
130
- : []),
131
- ].join(' ')}
132
- spellCheck={props.spellCheck}
133
- data-block-key={props.textBlock._key}
134
- data-block-name={props.textBlock._type}
135
- data-block-type="text"
136
- {...(props.textBlock.listItem !== undefined
137
- ? {
138
- 'data-list-item': props.textBlock.listItem,
139
- }
140
- : {})}
141
- {...(props.textBlock.level !== undefined
142
- ? {
143
- 'data-level': props.textBlock.level,
144
- }
145
- : {})}
146
- {...(props.textBlock.style !== undefined
147
- ? {
148
- 'data-style': props.textBlock.style,
149
- }
150
- : {})}
151
- {...(listIndex !== undefined
152
- ? {
153
- 'data-list-index': listIndex,
154
- }
155
- : {})}
156
- >
157
- {dragPositionBlock === 'start' ? <DropIndicator /> : null}
158
- <div ref={blockRef}>
159
- {props.renderBlock ? (
160
- <RenderBlock
161
- renderBlock={props.renderBlock}
162
- editorElementRef={blockRef}
163
- focused={focused}
164
- level={props.textBlock.level}
165
- listItem={props.textBlock.listItem}
166
- path={[{_key: props.textBlock._key}]}
167
- selected={selected}
168
- schemaType={props.legacySchema.block}
169
- style={props.textBlock.style}
170
- type={props.legacySchema.block}
171
- value={props.textBlock}
172
- >
173
- {children}
174
- </RenderBlock>
175
- ) : (
176
- children
177
- )}
178
- </div>
179
- {dragPositionBlock === 'end' ? <DropIndicator /> : null}
180
- </div>
181
- )
182
- }
183
-
184
- function RenderBlock({
185
- renderBlock,
186
- children,
187
- editorElementRef,
188
- focused,
189
- level,
190
- listItem,
191
- path,
192
- selected,
193
- style,
194
- schemaType,
195
- type,
196
- value,
197
- }: {
198
- renderBlock: RenderBlockFunction
199
- } & BlockRenderProps) {
200
- return renderBlock({
201
- children,
202
- editorElementRef,
203
- focused,
204
- level,
205
- listItem,
206
- path,
207
- selected,
208
- style,
209
- schemaType,
210
- type,
211
- value,
212
- })
213
- }
214
-
215
- function RenderListItem({
216
- renderListItem,
217
- block,
218
- children,
219
- editorElementRef,
220
- focused,
221
- level,
222
- path,
223
- schemaType,
224
- selected,
225
- value,
226
- }: {
227
- renderListItem: RenderListItemFunction
228
- } & BlockListItemRenderProps) {
229
- return renderListItem({
230
- block,
231
- children,
232
- editorElementRef,
233
- focused,
234
- level,
235
- path,
236
- schemaType,
237
- selected,
238
- value,
239
- })
240
- }
241
-
242
- function RenderStyle({
243
- renderStyle,
244
- block,
245
- children,
246
- editorElementRef,
247
- focused,
248
- path,
249
- schemaType,
250
- selected,
251
- value,
252
- }: {
253
- renderStyle: RenderStyleFunction
254
- } & BlockStyleRenderProps) {
255
- return renderStyle({
256
- block,
257
- children,
258
- editorElementRef,
259
- focused,
260
- path,
261
- schemaType,
262
- selected,
263
- value,
264
- })
265
- }
@@ -1,18 +0,0 @@
1
- import type {Editable} from 'slate-react'
2
-
3
- export type RenderTextProps = Parameters<
4
- NonNullable<React.ComponentProps<typeof Editable>['renderText']>
5
- >[0]
6
-
7
- export function RenderText(props: RenderTextProps) {
8
- return (
9
- <span
10
- {...props.attributes}
11
- data-child-key={props.text._key}
12
- data-child-name={props.text._type}
13
- data-child-type="span"
14
- >
15
- {props.children}
16
- </span>
17
- )
18
- }
@@ -1,39 +0,0 @@
1
- import {useContext, useEffect} from 'react'
2
- import {createCoreBlockElementBehaviorsConfig} from '../../behaviors/behavior.core.block-element'
3
- import type {EventPositionBlock} from '../../internal-utils/event-position'
4
- import {EditorActorContext} from '../editor-actor-context'
5
-
6
- export function useCoreBlockElementBehaviors({
7
- key,
8
- onSetDragPositionBlock,
9
- }: {
10
- key: string
11
- onSetDragPositionBlock: (
12
- eventPositionBlock: EventPositionBlock | undefined,
13
- ) => void
14
- }) {
15
- const editorActor = useContext(EditorActorContext)
16
-
17
- useEffect(() => {
18
- const behaviorConfigs = createCoreBlockElementBehaviorsConfig({
19
- key,
20
- onSetDragPositionBlock,
21
- })
22
-
23
- for (const behaviorConfig of behaviorConfigs) {
24
- editorActor.send({
25
- type: 'add behavior',
26
- behaviorConfig,
27
- })
28
- }
29
-
30
- return () => {
31
- for (const behaviorConfig of behaviorConfigs) {
32
- editorActor.send({
33
- type: 'remove behavior',
34
- behaviorConfig,
35
- })
36
- }
37
- }
38
- }, [editorActor, key, onSetDragPositionBlock])
39
- }