@plone/volto 18.0.0-alpha.3 → 18.0.0-alpha.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 (349) hide show
  1. package/.eslintignore +1 -0
  2. package/.eslintrc +3 -3
  3. package/.prettierignore +8 -0
  4. package/.prettierrc +12 -0
  5. package/{packages/registry/.release-it.json → .release-it.json} +12 -6
  6. package/CHANGELOG.md +50 -4
  7. package/package.json +60 -127
  8. package/razzle.config.js +4 -7
  9. package/src/components/manage/Add/Add.jsx +6 -0
  10. package/src/components/manage/BlockChooser/BlockChooser.jsx +3 -1
  11. package/src/components/manage/BlockChooser/BlockChooserButton.jsx +5 -0
  12. package/src/components/manage/Blocks/Block/BlocksForm.jsx +4 -0
  13. package/src/components/manage/Blocks/Block/DefaultEdit.jsx +3 -1
  14. package/src/components/manage/Blocks/Block/EditBlockWrapper.jsx +5 -0
  15. package/src/components/manage/Blocks/Block/Settings.jsx +10 -1
  16. package/src/components/manage/Blocks/Container/Data.jsx +4 -1
  17. package/src/components/manage/Blocks/HeroImageLeft/Data.jsx +3 -1
  18. package/src/components/manage/Blocks/Image/ImageSidebar.jsx +4 -1
  19. package/src/components/manage/Blocks/Listing/ListingData.jsx +4 -1
  20. package/src/components/manage/Blocks/Maps/MapsSidebar.jsx +3 -1
  21. package/src/components/manage/Blocks/Search/SearchBlockEdit.jsx +4 -0
  22. package/src/components/manage/Blocks/Teaser/Data.jsx +4 -1
  23. package/src/components/manage/Blocks/ToC/Edit.jsx +2 -0
  24. package/src/components/manage/Blocks/Video/VideoSidebar.jsx +3 -1
  25. package/src/components/manage/Controlpanels/Users/UserGroupMembershipControlPanel.jsx +2 -2
  26. package/src/components/manage/Edit/Edit.jsx +1 -0
  27. package/src/components/manage/Form/Form.jsx +14 -3
  28. package/src/components/theme/Image/Image.jsx +4 -2
  29. package/src/components/theme/Image/Image.test.jsx +32 -0
  30. package/src/config/index.js +0 -4
  31. package/src/helpers/Blocks/Blocks.js +11 -2
  32. package/src/helpers/Extensions/withBlockSchemaEnhancer.js +20 -9
  33. package/src/helpers/Url/Url.js +5 -4
  34. package/src/helpers/Url/Url.test.js +52 -0
  35. package/src/icons/divide-horizontal.svg +0 -0
  36. package/src/icons/divide-vertical.svg +0 -0
  37. package/src/icons/hero.svg +0 -0
  38. package/src/icons/slider.svg +0 -0
  39. package/src/icons/summary.svg +0 -0
  40. package/src/middleware/api.js +1 -1
  41. package/theme/themes/default/elements/icon.overrides +0 -0
  42. package/theme/themes/default/globals/reset.overrides +0 -0
  43. package/theme/themes/default/globals/site.variables +0 -0
  44. package/theme/themes/default/modules/dropdown.overrides +0 -0
  45. package/theme/themes/default/modules/dropdown.variables +0 -0
  46. package/theme/themes/default/modules/modal.variables +0 -0
  47. package/theme/themes/default/modules/video.overrides +0 -0
  48. package/theme/themes/default/modules/video.variables +0 -0
  49. package/theme/themes/pastanaga/assets/fonts/icons.eot +0 -0
  50. package/theme/themes/pastanaga/assets/fonts/icons.svg +0 -0
  51. package/theme/themes/pastanaga/assets/fonts/icons.ttf +0 -0
  52. package/theme/themes/pastanaga/assets/fonts/icons.woff +0 -0
  53. package/theme/themes/pastanaga/globals/reset.overrides +0 -0
  54. package/theme/themes/pastanaga/globals/site.variables +0 -0
  55. package/theme/themes/pastanaga/modules/dropdown.variables +0 -0
  56. package/theme/themes/pastanaga/modules/modal.variables +0 -0
  57. package/theme/themes/pastanaga/modules/video.overrides +0 -0
  58. package/theme/themes/pastanaga/modules/video.variables +0 -0
  59. package/tsconfig.json +1 -4
  60. package/types/config/RichTextEditor/index.d.ts +5 -8
  61. package/types/helpers/AsyncConnect/index.d.ts +2 -2
  62. package/types/helpers/Extensions/withBlockSchemaEnhancer.d.ts +3 -1
  63. package/types/helpers/Url/Url.d.ts +3 -3
  64. package/types/icons/load-icons.d.ts +1 -1
  65. package/webpack-plugins/webpack-less-plugin.js +1 -0
  66. package/CODE_OF_CONDUCT.md +0 -13
  67. package/CONTRIBUTING.md +0 -7
  68. package/README.md +0 -154
  69. package/RELEASING.md +0 -73
  70. package/ROADMAP.md +0 -30
  71. package/SECURITY.md +0 -14
  72. package/apps/plone/node_modules/.bin/acorn +0 -17
  73. package/apps/plone/node_modules/.bin/addon +0 -17
  74. package/apps/plone/node_modules/.bin/autoprefixer +0 -17
  75. package/apps/plone/node_modules/.bin/browserslist +0 -17
  76. package/apps/plone/node_modules/.bin/build-storybook +0 -17
  77. package/apps/plone/node_modules/.bin/changelogupdater +0 -17
  78. package/apps/plone/node_modules/.bin/eslint +0 -17
  79. package/apps/plone/node_modules/.bin/eslint-config-prettier +0 -17
  80. package/apps/plone/node_modules/.bin/i18n +0 -17
  81. package/apps/plone/node_modules/.bin/jest +0 -17
  82. package/apps/plone/node_modules/.bin/lessc +0 -17
  83. package/apps/plone/node_modules/.bin/missdev +0 -17
  84. package/apps/plone/node_modules/.bin/prettier +0 -17
  85. package/apps/plone/node_modules/.bin/razzle +0 -17
  86. package/apps/plone/node_modules/.bin/server-test +0 -17
  87. package/apps/plone/node_modules/.bin/start-server-and-test +0 -17
  88. package/apps/plone/node_modules/.bin/start-storybook +0 -17
  89. package/apps/plone/node_modules/.bin/start-test +0 -17
  90. package/apps/plone/node_modules/.bin/storybook-server +0 -17
  91. package/apps/plone/node_modules/.bin/stylelint +0 -17
  92. package/apps/plone/node_modules/.bin/tlds +0 -17
  93. package/apps/plone/node_modules/.bin/ts-jest +0 -17
  94. package/apps/plone/node_modules/.bin/tsc +0 -17
  95. package/apps/plone/node_modules/.bin/tsserver +0 -17
  96. package/apps/plone/node_modules/.bin/uuid +0 -17
  97. package/apps/plone/node_modules/.bin/webpack +0 -17
  98. package/apps/plone/node_modules/.bin/webpack-dev-server +0 -17
  99. package/apps/plone/src/addons/volto-volto-project/node_modules/.bin/acorn +0 -17
  100. package/apps/plone/src/addons/volto-volto-project/node_modules/.bin/addon +0 -17
  101. package/apps/plone/src/addons/volto-volto-project/node_modules/.bin/browserslist +0 -17
  102. package/apps/plone/src/addons/volto-volto-project/node_modules/.bin/changelogupdater +0 -17
  103. package/apps/plone/src/addons/volto-volto-project/node_modules/.bin/eslint +0 -17
  104. package/apps/plone/src/addons/volto-volto-project/node_modules/.bin/eslint-config-prettier +0 -17
  105. package/apps/plone/src/addons/volto-volto-project/node_modules/.bin/i18n +0 -17
  106. package/apps/plone/src/addons/volto-volto-project/node_modules/.bin/prettier +0 -17
  107. package/apps/plone/src/addons/volto-volto-project/node_modules/.bin/release-it +0 -17
  108. package/apps/plone/src/addons/volto-volto-project/node_modules/.bin/stylelint +0 -17
  109. package/apps/plone/src/addons/volto-volto-project/node_modules/.bin/tsc +0 -17
  110. package/apps/plone/src/addons/volto-volto-project/node_modules/.bin/tsserver +0 -17
  111. package/logos/Logo.png +0 -0
  112. package/logos/VoltoLogoEra2-dark-mode.png +0 -0
  113. package/logos/VoltoLogoEra2.png +0 -0
  114. package/logos/volto-colorful.png +0 -0
  115. package/logos/volto-colorful.svg +0 -35
  116. package/logos/volto-guide.png +0 -0
  117. package/logos/volto-h-transparent.svg +0 -6
  118. package/logos/volto-transparent.png +0 -0
  119. package/logos/volto-transparent.svg +0 -19
  120. package/logos/volto-transparent2.svg +0 -5
  121. package/logos/volto-yellow.svg +0 -29
  122. package/logos/volto.sketch +0 -0
  123. package/packages/README.md +0 -7
  124. package/packages/registry/.towncrier/towncrier_template.jinja +0 -10
  125. package/packages/registry/CHANGELOG.md +0 -16
  126. package/packages/registry/README.md +0 -207
  127. package/packages/registry/addon-registry.js +0 -603
  128. package/packages/registry/create-addons-loader.js +0 -116
  129. package/packages/registry/create-theme-addons-loader.js +0 -78
  130. package/packages/registry/news/.gitkeep +0 -0
  131. package/packages/registry/node_modules/.bin/browserslist +0 -17
  132. package/packages/registry/node_modules/.bin/parcel +0 -17
  133. package/packages/registry/node_modules/.bin/release-it +0 -17
  134. package/packages/registry/node_modules/.bin/tsc +0 -17
  135. package/packages/registry/node_modules/.bin/tsserver +0 -17
  136. package/packages/registry/node_modules/.bin/vitest +0 -17
  137. package/packages/registry/package.json +0 -76
  138. package/packages/registry/src/index.ts +0 -174
  139. package/packages/registry/src/registry.test.js +0 -111
  140. package/packages/registry/tsconfig.json +0 -32
  141. package/packages/scripts/CHANGELOG.md +0 -173
  142. package/packages/scripts/README.md +0 -128
  143. package/packages/scripts/addon/consolidate.js +0 -28
  144. package/packages/scripts/addon/generators.js +0 -213
  145. package/packages/scripts/addon/getAddonInfo.js +0 -65
  146. package/packages/scripts/addon/index.js +0 -88
  147. package/packages/scripts/addon/utils.js +0 -44
  148. package/packages/scripts/backportpr.js +0 -75
  149. package/packages/scripts/changelogupdater.cjs +0 -94
  150. package/packages/scripts/corepackagebump.js +0 -20
  151. package/packages/scripts/i18n.cjs +0 -310
  152. package/packages/scripts/package.json +0 -76
  153. package/packages/scripts/templates/towncrier_template.jinja +0 -10
  154. package/packages/types/Blocks/View.ts +0 -11
  155. package/packages/types/actions.ts +0 -15
  156. package/packages/types/breadcrumbs.ts +0 -10
  157. package/packages/types/config/Blocks.ts +0 -153
  158. package/packages/types/config/Content.ts +0 -62
  159. package/packages/types/config/Settings.ts +0 -86
  160. package/packages/types/config/Views.ts +0 -15
  161. package/packages/types/config/Widgets.ts +0 -7
  162. package/packages/types/config/index.ts +0 -21
  163. package/packages/types/content/common.ts +0 -60
  164. package/packages/types/content/get.ts +0 -66
  165. package/packages/types/index.ts +0 -0
  166. package/packages/types/navigation.ts +0 -12
  167. package/packages/types/node_modules/.bin/browserslist +0 -17
  168. package/packages/types/node_modules/.bin/parcel +0 -17
  169. package/packages/types/node_modules/.bin/release-it +0 -17
  170. package/packages/types/node_modules/.bin/tsc +0 -17
  171. package/packages/types/node_modules/.bin/tsserver +0 -17
  172. package/packages/types/package.json +0 -64
  173. package/packages/types/types.ts +0 -61
  174. package/packages/volto-slate/.i18n.babel.config.js +0 -1
  175. package/packages/volto-slate/README.md +0 -4
  176. package/packages/volto-slate/build/messages/src/blocks/Table/TableBlockEdit.json +0 -90
  177. package/packages/volto-slate/build/messages/src/blocks/Text/DefaultTextBlockEditor.json +0 -6
  178. package/packages/volto-slate/build/messages/src/blocks/Text/DetachedTextBlockEditor.json +0 -6
  179. package/packages/volto-slate/build/messages/src/blocks/Text/SlashMenu.json +0 -6
  180. package/packages/volto-slate/build/messages/src/editor/plugins/AdvancedLink/index.json +0 -10
  181. package/packages/volto-slate/build/messages/src/editor/plugins/Link/index.json +0 -10
  182. package/packages/volto-slate/build/messages/src/editor/plugins/Table/index.json +0 -30
  183. package/packages/volto-slate/build/messages/src/elementEditor/messages.json +0 -10
  184. package/packages/volto-slate/build/messages/src/widgets/HtmlSlateWidget.json +0 -6
  185. package/packages/volto-slate/build/messages/src/widgets/RichTextWidgetView.json +0 -6
  186. package/packages/volto-slate/locales/de/LC_MESSAGES/volto.po +0 -148
  187. package/packages/volto-slate/locales/en/LC_MESSAGES/volto.po +0 -148
  188. package/packages/volto-slate/locales/volto.pot +0 -182
  189. package/packages/volto-slate/package.json +0 -43
  190. package/packages/volto-slate/src/actions/content.js +0 -30
  191. package/packages/volto-slate/src/actions/index.js +0 -3
  192. package/packages/volto-slate/src/actions/plugins.js +0 -9
  193. package/packages/volto-slate/src/actions/selection.js +0 -22
  194. package/packages/volto-slate/src/blocks/Table/Cell.jsx +0 -87
  195. package/packages/volto-slate/src/blocks/Table/Cell.test.js +0 -54
  196. package/packages/volto-slate/src/blocks/Table/TableBlockEdit.jsx +0 -694
  197. package/packages/volto-slate/src/blocks/Table/TableBlockEdit.test.js +0 -40
  198. package/packages/volto-slate/src/blocks/Table/TableBlockView.jsx +0 -150
  199. package/packages/volto-slate/src/blocks/Table/TableBlockView.test.js +0 -49
  200. package/packages/volto-slate/src/blocks/Table/deconstruct.js +0 -113
  201. package/packages/volto-slate/src/blocks/Table/extensions/normalizeTable.js +0 -5
  202. package/packages/volto-slate/src/blocks/Table/index.js +0 -60
  203. package/packages/volto-slate/src/blocks/Table/schema.js +0 -122
  204. package/packages/volto-slate/src/blocks/Text/DefaultTextBlockEditor.jsx +0 -304
  205. package/packages/volto-slate/src/blocks/Text/DetachedTextBlockEditor.jsx +0 -77
  206. package/packages/volto-slate/src/blocks/Text/MarkdownIntroduction.jsx +0 -59
  207. package/packages/volto-slate/src/blocks/Text/PluginSidebar.jsx +0 -18
  208. package/packages/volto-slate/src/blocks/Text/ShortcutListing.jsx +0 -28
  209. package/packages/volto-slate/src/blocks/Text/SlashMenu.jsx +0 -203
  210. package/packages/volto-slate/src/blocks/Text/TextBlockEdit.jsx +0 -38
  211. package/packages/volto-slate/src/blocks/Text/TextBlockEdit.test.js +0 -107
  212. package/packages/volto-slate/src/blocks/Text/TextBlockSchema.js +0 -54
  213. package/packages/volto-slate/src/blocks/Text/TextBlockView.jsx +0 -31
  214. package/packages/volto-slate/src/blocks/Text/css/editor.css +0 -18
  215. package/packages/volto-slate/src/blocks/Text/extensions/Readme.md +0 -49
  216. package/packages/volto-slate/src/blocks/Text/extensions/breakList.js +0 -100
  217. package/packages/volto-slate/src/blocks/Text/extensions/index.js +0 -6
  218. package/packages/volto-slate/src/blocks/Text/extensions/insertBreak.js +0 -57
  219. package/packages/volto-slate/src/blocks/Text/extensions/isSelected.js +0 -7
  220. package/packages/volto-slate/src/blocks/Text/extensions/normalizeExternalData.js +0 -7
  221. package/packages/volto-slate/src/blocks/Text/extensions/withDeserializers.js +0 -87
  222. package/packages/volto-slate/src/blocks/Text/extensions/withLists.js +0 -5
  223. package/packages/volto-slate/src/blocks/Text/index.js +0 -171
  224. package/packages/volto-slate/src/blocks/Text/keyboard/backspaceInList.js +0 -58
  225. package/packages/volto-slate/src/blocks/Text/keyboard/breakBlocks.js +0 -3
  226. package/packages/volto-slate/src/blocks/Text/keyboard/cancelEsc.js +0 -7
  227. package/packages/volto-slate/src/blocks/Text/keyboard/indentListItems.js +0 -240
  228. package/packages/volto-slate/src/blocks/Text/keyboard/index.js +0 -52
  229. package/packages/volto-slate/src/blocks/Text/keyboard/joinBlocks.js +0 -180
  230. package/packages/volto-slate/src/blocks/Text/keyboard/moveListItems.js +0 -124
  231. package/packages/volto-slate/src/blocks/Text/keyboard/slashMenu.js +0 -19
  232. package/packages/volto-slate/src/blocks/Text/keyboard/softBreak.js +0 -7
  233. package/packages/volto-slate/src/blocks/Text/keyboard/traverseBlocks.js +0 -81
  234. package/packages/volto-slate/src/blocks/Text/keyboard/unwrapEmptyString.js +0 -26
  235. package/packages/volto-slate/src/blocks/Text/schema.js +0 -39
  236. package/packages/volto-slate/src/constants.js +0 -123
  237. package/packages/volto-slate/src/editor/EditorContext.jsx +0 -5
  238. package/packages/volto-slate/src/editor/EditorReference.jsx +0 -22
  239. package/packages/volto-slate/src/editor/SlateEditor.jsx +0 -375
  240. package/packages/volto-slate/src/editor/config.jsx +0 -344
  241. package/packages/volto-slate/src/editor/decorate.js +0 -68
  242. package/packages/volto-slate/src/editor/deserialize.js +0 -185
  243. package/packages/volto-slate/src/editor/extensions/index.js +0 -6
  244. package/packages/volto-slate/src/editor/extensions/insertBreak.js +0 -15
  245. package/packages/volto-slate/src/editor/extensions/insertData.js +0 -159
  246. package/packages/volto-slate/src/editor/extensions/isInline.js +0 -14
  247. package/packages/volto-slate/src/editor/extensions/normalizeExternalData.js +0 -8
  248. package/packages/volto-slate/src/editor/extensions/normalizeNode.js +0 -48
  249. package/packages/volto-slate/src/editor/extensions/withDeserializers.js +0 -15
  250. package/packages/volto-slate/src/editor/extensions/withTestingFeatures.jsx +0 -84
  251. package/packages/volto-slate/src/editor/index.js +0 -14
  252. package/packages/volto-slate/src/editor/less/editor.less +0 -173
  253. package/packages/volto-slate/src/editor/less/globals.less +0 -18
  254. package/packages/volto-slate/src/editor/less/slate.less +0 -28
  255. package/packages/volto-slate/src/editor/plugins/AdvancedLink/deserialize.js +0 -90
  256. package/packages/volto-slate/src/editor/plugins/AdvancedLink/extensions.js +0 -32
  257. package/packages/volto-slate/src/editor/plugins/AdvancedLink/index.js +0 -50
  258. package/packages/volto-slate/src/editor/plugins/AdvancedLink/render.jsx +0 -37
  259. package/packages/volto-slate/src/editor/plugins/AdvancedLink/schema.js +0 -114
  260. package/packages/volto-slate/src/editor/plugins/AdvancedLink/styles.less +0 -8
  261. package/packages/volto-slate/src/editor/plugins/Blockquote/index.js +0 -30
  262. package/packages/volto-slate/src/editor/plugins/Callout/index.js +0 -34
  263. package/packages/volto-slate/src/editor/plugins/Image/deconstruct.js +0 -30
  264. package/packages/volto-slate/src/editor/plugins/Image/extensions.js +0 -51
  265. package/packages/volto-slate/src/editor/plugins/Image/index.js +0 -11
  266. package/packages/volto-slate/src/editor/plugins/Image/render.jsx +0 -22
  267. package/packages/volto-slate/src/editor/plugins/Link/extensions.js +0 -58
  268. package/packages/volto-slate/src/editor/plugins/Link/index.js +0 -164
  269. package/packages/volto-slate/src/editor/plugins/Link/render.jsx +0 -54
  270. package/packages/volto-slate/src/editor/plugins/Markdown/constants.js +0 -81
  271. package/packages/volto-slate/src/editor/plugins/Markdown/extensions.js +0 -334
  272. package/packages/volto-slate/src/editor/plugins/Markdown/index.js +0 -28
  273. package/packages/volto-slate/src/editor/plugins/Markdown/utils.js +0 -198
  274. package/packages/volto-slate/src/editor/plugins/StyleMenu/StyleMenu.jsx +0 -153
  275. package/packages/volto-slate/src/editor/plugins/StyleMenu/index.js +0 -19
  276. package/packages/volto-slate/src/editor/plugins/StyleMenu/style.less +0 -29
  277. package/packages/volto-slate/src/editor/plugins/StyleMenu/utils.js +0 -168
  278. package/packages/volto-slate/src/editor/plugins/Table/TableButton.jsx +0 -142
  279. package/packages/volto-slate/src/editor/plugins/Table/TableCell.jsx +0 -44
  280. package/packages/volto-slate/src/editor/plugins/Table/TableContainer.jsx +0 -37
  281. package/packages/volto-slate/src/editor/plugins/Table/TableSizePicker.jsx +0 -83
  282. package/packages/volto-slate/src/editor/plugins/Table/extensions.js +0 -87
  283. package/packages/volto-slate/src/editor/plugins/Table/index.js +0 -390
  284. package/packages/volto-slate/src/editor/plugins/Table/less/public.less +0 -29
  285. package/packages/volto-slate/src/editor/plugins/Table/less/table.less +0 -28
  286. package/packages/volto-slate/src/editor/plugins/Table/render.jsx +0 -30
  287. package/packages/volto-slate/src/editor/plugins/index.js +0 -19
  288. package/packages/volto-slate/src/editor/render.jsx +0 -224
  289. package/packages/volto-slate/src/editor/ui/BasicToolbar.jsx +0 -11
  290. package/packages/volto-slate/src/editor/ui/BlockButton.jsx +0 -31
  291. package/packages/volto-slate/src/editor/ui/ClearFormattingButton.jsx +0 -21
  292. package/packages/volto-slate/src/editor/ui/ExpandedToolbar.jsx +0 -18
  293. package/packages/volto-slate/src/editor/ui/Expando.jsx +0 -5
  294. package/packages/volto-slate/src/editor/ui/InlineToolbar.jsx +0 -73
  295. package/packages/volto-slate/src/editor/ui/MarkButton.jsx +0 -23
  296. package/packages/volto-slate/src/editor/ui/MarkElementButton.jsx +0 -30
  297. package/packages/volto-slate/src/editor/ui/Menu.jsx +0 -13
  298. package/packages/volto-slate/src/editor/ui/PositionedToolbar.jsx +0 -32
  299. package/packages/volto-slate/src/editor/ui/Separator.jsx +0 -7
  300. package/packages/volto-slate/src/editor/ui/SlateContextToolbar.jsx +0 -13
  301. package/packages/volto-slate/src/editor/ui/SlateToolbar.jsx +0 -96
  302. package/packages/volto-slate/src/editor/ui/Toolbar.jsx +0 -103
  303. package/packages/volto-slate/src/editor/ui/ToolbarButton.jsx +0 -33
  304. package/packages/volto-slate/src/editor/ui/ToolbarButton.test.js +0 -25
  305. package/packages/volto-slate/src/editor/ui/index.js +0 -15
  306. package/packages/volto-slate/src/editor/utils.js +0 -248
  307. package/packages/volto-slate/src/elementEditor/ContextButtons.jsx +0 -56
  308. package/packages/volto-slate/src/elementEditor/PluginEditor.jsx +0 -124
  309. package/packages/volto-slate/src/elementEditor/Readme.md +0 -6
  310. package/packages/volto-slate/src/elementEditor/SchemaProvider.jsx +0 -3
  311. package/packages/volto-slate/src/elementEditor/SidebarEditor.jsx +0 -46
  312. package/packages/volto-slate/src/elementEditor/ToolbarButton.jsx +0 -44
  313. package/packages/volto-slate/src/elementEditor/index.js +0 -5
  314. package/packages/volto-slate/src/elementEditor/makeInlineElementPlugin.js +0 -100
  315. package/packages/volto-slate/src/elementEditor/messages.js +0 -14
  316. package/packages/volto-slate/src/elementEditor/utils.js +0 -226
  317. package/packages/volto-slate/src/hooks/index.js +0 -3
  318. package/packages/volto-slate/src/hooks/useEditorContext.js +0 -6
  319. package/packages/volto-slate/src/hooks/useIsomorphicLayoutEffect.js +0 -7
  320. package/packages/volto-slate/src/hooks/useSelectionPosition.js +0 -25
  321. package/packages/volto-slate/src/i18n.js +0 -180
  322. package/packages/volto-slate/src/icons/hashlink.svg +0 -57
  323. package/packages/volto-slate/src/index.js +0 -61
  324. package/packages/volto-slate/src/reducers/content.js +0 -74
  325. package/packages/volto-slate/src/reducers/index.js +0 -3
  326. package/packages/volto-slate/src/reducers/plugins.js +0 -17
  327. package/packages/volto-slate/src/reducers/selection.js +0 -16
  328. package/packages/volto-slate/src/utils/blocks.js +0 -375
  329. package/packages/volto-slate/src/utils/blocks.test.js +0 -138
  330. package/packages/volto-slate/src/utils/editor.js +0 -31
  331. package/packages/volto-slate/src/utils/image.js +0 -25
  332. package/packages/volto-slate/src/utils/index.js +0 -11
  333. package/packages/volto-slate/src/utils/internals.js +0 -46
  334. package/packages/volto-slate/src/utils/lists.js +0 -92
  335. package/packages/volto-slate/src/utils/marks.js +0 -104
  336. package/packages/volto-slate/src/utils/mime-types.js +0 -24
  337. package/packages/volto-slate/src/utils/nodes.js +0 -4
  338. package/packages/volto-slate/src/utils/ops.js +0 -20
  339. package/packages/volto-slate/src/utils/random.js +0 -17
  340. package/packages/volto-slate/src/utils/selection.js +0 -236
  341. package/packages/volto-slate/src/utils/slate-string-utils.js +0 -408
  342. package/packages/volto-slate/src/utils/volto-blocks.js +0 -314
  343. package/packages/volto-slate/src/widgets/ErrorBoundary.jsx +0 -27
  344. package/packages/volto-slate/src/widgets/HtmlSlateWidget.jsx +0 -139
  345. package/packages/volto-slate/src/widgets/ObjectByTypeWidget.jsx +0 -49
  346. package/packages/volto-slate/src/widgets/RichTextWidget.jsx +0 -72
  347. package/packages/volto-slate/src/widgets/RichTextWidgetView.jsx +0 -37
  348. package/packages/volto-slate/src/widgets/style.css +0 -21
  349. package/types/components/manage/Blocks/Video/Body.test.d.ts +0 -1
@@ -1,180 +0,0 @@
1
- import ReactDOM from 'react-dom';
2
- import { cloneDeep } from 'lodash';
3
- import { serializeNodesToText } from '@plone/volto-slate/editor/render';
4
- import { Editor } from 'slate';
5
- import {
6
- getPreviousVoltoBlock,
7
- getNextVoltoBlock,
8
- isCursorAtBlockStart,
9
- isCursorAtBlockEnd,
10
- mergeSlateWithBlockBackward,
11
- mergeSlateWithBlockForward,
12
- makeEditor,
13
- } from '@plone/volto-slate/utils';
14
- import {
15
- changeBlock,
16
- deleteBlock,
17
- getBlocksFieldname,
18
- getBlocksLayoutFieldname,
19
- } from '@plone/volto/helpers';
20
- /**
21
- * Joins the current block (which has an active Slate Editor)
22
- * with the previous block, to make a single block.
23
- *
24
- * @param {Editor} editor
25
- * @param {KeyboardEvent} event
26
- */
27
- export function joinWithPreviousBlock({ editor, event }) {
28
- if (!isCursorAtBlockStart(editor)) return;
29
-
30
- const blockProps = editor.getBlockProps();
31
- const {
32
- block,
33
- index,
34
- saveSlateBlockSelection,
35
- onSelectBlock,
36
- data,
37
- properties,
38
- onChangeField,
39
- } = blockProps;
40
-
41
- const blocksFieldname = getBlocksFieldname(properties);
42
- const blocksLayoutFieldname = getBlocksLayoutFieldname(properties);
43
-
44
- const prev = getPreviousVoltoBlock(index, properties);
45
- if (!prev) return;
46
- const [otherBlock = {}, otherBlockId] = prev;
47
-
48
- // Don't join with required blocks
49
- if (data?.required || otherBlock?.required || otherBlock['@type'] !== 'slate')
50
- return;
51
-
52
- event.stopPropagation();
53
- event.preventDefault();
54
-
55
- // If the Editor contains no characters TODO: clarify if this special case
56
- // really needs to be handled or not. In `joinWithNextBlock` it is not
57
- // handled.
58
- const text = Editor.string(editor, []);
59
- if (!text) {
60
- const cursor = getBlockEndAsRange(otherBlock);
61
- const newFormData = deleteBlock(properties, block);
62
-
63
- ReactDOM.unstable_batchedUpdates(() => {
64
- saveSlateBlockSelection(otherBlockId, cursor);
65
-
66
- onChangeField(blocksFieldname, newFormData[blocksFieldname]);
67
- onChangeField(blocksLayoutFieldname, newFormData[blocksLayoutFieldname]);
68
-
69
- onSelectBlock(otherBlockId);
70
- });
71
-
72
- return true;
73
- }
74
-
75
- // Else the editor contains characters, so we merge the current block's
76
- // `editor` with the block before, `otherBlock`.
77
- const cursor = mergeSlateWithBlockBackward(editor, otherBlock);
78
-
79
- const combined = JSON.parse(JSON.stringify(editor.children));
80
-
81
- // // TODO: don't remove undo history, etc Should probably save both undo
82
- // // histories, so that the blocks are split, the undos can be restored??
83
-
84
- // const cursor = getBlockEndAsRange(otherBlock);
85
- const formData = changeBlock(properties, otherBlockId, {
86
- '@type': 'slate', // TODO: use a constant specified in src/constants.js instead of 'slate'
87
- value: combined,
88
- plaintext: serializeNodesToText(combined || []),
89
- });
90
- const newFormData = deleteBlock(formData, block);
91
-
92
- ReactDOM.unstable_batchedUpdates(() => {
93
- saveSlateBlockSelection(otherBlockId, cursor);
94
- onChangeField(blocksFieldname, newFormData[blocksFieldname]);
95
- onChangeField(blocksLayoutFieldname, newFormData[blocksLayoutFieldname]);
96
- onSelectBlock(otherBlockId);
97
- });
98
-
99
- return true;
100
- }
101
-
102
- /**
103
- * Joins the current block (which has the cursor) with the next block to make a
104
- * single block.
105
- * @param {Editor} editor
106
- * @param {KeyboardEvent} event
107
- */
108
- export function joinWithNextBlock({ editor, event }) {
109
- if (!isCursorAtBlockEnd(editor)) return;
110
-
111
- const blockProps = editor.getBlockProps();
112
- const {
113
- block,
114
- index,
115
- // saveSlateBlockSelection,
116
- onSelectBlock,
117
- data,
118
- } = blockProps;
119
-
120
- const { properties, onChangeField } = editor.getBlockProps();
121
- const [otherBlock = {}, otherBlockId] = getNextVoltoBlock(index, properties);
122
-
123
- // Don't join with required blocks
124
- if (data?.required || otherBlock?.required || otherBlock['@type'] !== 'slate')
125
- return;
126
-
127
- event.stopPropagation();
128
- event.preventDefault();
129
-
130
- mergeSlateWithBlockForward(editor, otherBlock);
131
-
132
- // const cursor = JSON.parse(JSON.stringify(editor.selection));
133
- const combined = JSON.parse(JSON.stringify(editor.children));
134
-
135
- // TODO: don't remove undo history, etc Should probably save both undo
136
- // histories, so that the blocks are split, the undos can be restored??
137
-
138
- const blocksFieldname = getBlocksFieldname(properties);
139
- const blocksLayoutFieldname = getBlocksLayoutFieldname(properties);
140
-
141
- const formData = changeBlock(properties, otherBlockId, {
142
- // TODO: use a constant specified in src/constants.js instead of 'slate'
143
- '@type': 'slate',
144
- value: combined,
145
- plaintext: serializeNodesToText(combined || []),
146
- });
147
- const newFormData = deleteBlock(formData, block);
148
-
149
- ReactDOM.unstable_batchedUpdates(() => {
150
- // saveSlateBlockSelection(otherBlockId, cursor);
151
- onChangeField(blocksFieldname, newFormData[blocksFieldname]);
152
- onChangeField(blocksLayoutFieldname, newFormData[blocksLayoutFieldname]);
153
- onSelectBlock(otherBlockId);
154
- });
155
- return true;
156
- }
157
-
158
- /**
159
- * @param {object} block The Volto object representing the configuration and
160
- * contents of a Volto Block of type Slate Text.
161
- * @returns {Range} The collapsed Slate Range that represents the last position
162
- * the text cursor can take inside the given block.
163
- */
164
- function getBlockEndAsRange(block) {
165
- const { value } = block;
166
- const location = [value.length - 1]; // adress of root node
167
- const editor = { children: value };
168
- const newEditor = makeEditor();
169
- newEditor.children = cloneDeep(editor.children);
170
- const path = Editor.last(newEditor, location)[1]; // last Node in the block
171
- // The last Text node (leaf node) entry inside the path computed just above.
172
- const [leaf, leafpath] = Editor.leaf(newEditor, path);
173
- // The offset of the Points in the collapsed Range computed below:
174
- const offset = (leaf.text || '').length;
175
-
176
- return {
177
- anchor: { path: leafpath, offset },
178
- focus: { path: leafpath, offset },
179
- };
180
- }
@@ -1,124 +0,0 @@
1
- import { Editor, Path, Transforms, Node } from 'slate';
2
- import { isCursorInList, getCurrentListItem } from '@plone/volto-slate/utils';
3
- import config from '@plone/volto/registry';
4
-
5
- /**
6
- * Move up a list with with `Ctrl+Up`. (The Up key is supposed here to be
7
- * pressed.)
8
- * @param {Editor} Editor
9
- * @param {KeyboardEvent} event
10
- */
11
- export function moveListItemUp({ editor, event }) {
12
- // If Ctrl is not pressed or the cursor is not in a list, do nothing.
13
- if (!(event.ctrlKey && isCursorInList(editor))) return;
14
-
15
- // Else prevent the default behavior of Slate, React and DOM and stop the
16
- // propagation of this event.
17
- const { anchor } = editor.selection;
18
- const { slate } = config.settings;
19
-
20
- event.preventDefault();
21
- event.stopPropagation();
22
-
23
- // Store the current list item's path.
24
- const [, listItemPath] = getCurrentListItem(editor);
25
-
26
- // Don't allow in first line list item Check if the current list item is first
27
- // in its parent
28
- if (
29
- // If the selection starts at the beginning of a root-level block node
30
- anchor.path.slice(1).reduce((acc, n) => acc + n, 0) === 0 ||
31
- // or the current list item is the first in the list that contains it
32
- listItemPath[listItemPath.length - 1] === 0
33
- ) {
34
- // Mark the event as handled and do nothing.
35
- return true;
36
- }
37
-
38
- // Take the Node in the selection that is LI and is farthest-from-root.
39
- const [match] = Editor.nodes(editor, {
40
- match: (n) => n.type === slate.listItemType,
41
- // Explanation of the three modes:
42
- // * 'all' - take all the nodes from the root Editor node to the selected
43
- // leaf Text node
44
- // * 'highest' - take the root Editor node (if there is a selection, in case
45
- // no `at` option is given)
46
- // * 'lowest' - take the farthest-from-root selected leaf Text node
47
- // (Replace the "leaf Text node" expressions in the above list with
48
- // whatever matching function you use.)
49
- mode: 'lowest',
50
- });
51
-
52
- // Get the Path of the above-found Node.
53
- const [, at] = match;
54
-
55
- // Get the Path that represents the previous sibling node of the Path above.
56
- // TODO: handle the exception that this can throw, when `at` has the last
57
- // number in it a `0`. This case is possible because the condition above that
58
- // uses the Array.prototype.reduce method checks only the sum but the last 2
59
- // items can be [2, 0], their sum is 2 but the last item is 0, so the
60
- // exception is thrown.
61
- const to = Path.previous(at);
62
-
63
- // If the Path does not exist, mark the event as handled and do nothing.
64
- if (!Node.has(editor, to)) return true;
65
-
66
- // Move the Node in the selection that is LI and is farthest-from-root to the
67
- // existing Path just before its current location.
68
- Transforms.moveNodes(editor, { at, to });
69
-
70
- // Mark the event as handled.
71
- return true;
72
- }
73
-
74
- /**
75
- * Move down a list with with `Ctrl+Down`. (The Down key is supposed here to be
76
- * pressed.)
77
- * @param {Editor} Editor
78
- * @param {KeyboardEvent} event
79
- */
80
- export function moveListItemDown({ editor, event }) {
81
- // If Ctrl is not pressed or the cursor is not in a list, do nothing.
82
- if (!event.ctrlKey) return;
83
- if (!isCursorInList(editor)) return false;
84
-
85
- // Else
86
- const { slate } = config.settings;
87
-
88
- // Take the Node in the selection that is LI and is farthest-from-root.
89
- const [match] = Editor.nodes(editor, {
90
- // Explanation of the three modes:
91
- // * 'all' - take all the nodes from the root Editor node to the selected
92
- // leaf Text node
93
- // * 'highest' - take the root Editor node (if there is a selection, in case
94
- // no `at` option is given)
95
- // * 'lowest' - take the farthest-from-root selected leaf Text node
96
- // (Replace the "leaf Text node" expressions in the above list with
97
- // whatever matching function you use.)
98
- match: (n) => n.type === slate.listItemType,
99
- reverse: true,
100
- mode: 'lowest',
101
- });
102
-
103
- // Get the Path of the above-found Node.
104
- const [, at] = match;
105
-
106
- // Get the Path that represents the next sibling node of the Path above.
107
- const to = Path.next(at);
108
-
109
- // Prevent the default behavior of Slate, React and DOM and stop the
110
- // propagation of this event.
111
- event.preventDefault();
112
- event.stopPropagation();
113
-
114
- // If the Path does not exist, mark the event as handled and do nothing.
115
- if (!Node.has(editor, to)) return true;
116
-
117
- // Move the Node in the selection that is LI and is farthest-from-root to the
118
- // existing Path just after its current location, if there is a place for it
119
- // at the same depth.
120
- Transforms.moveNodes(editor, { at, to });
121
-
122
- // Mark the event as handled.
123
- return true;
124
- }
@@ -1,19 +0,0 @@
1
- export const slashMenu = ({ editor, event }) => {
2
- if (!editor.showSlashMenu) return;
3
-
4
- const { slashArrowUp, slashArrowDown, slashEnter } = editor;
5
-
6
- const handlers = {
7
- ArrowUp: slashArrowUp,
8
- ArrowDown: slashArrowDown,
9
- Enter: slashEnter,
10
- };
11
-
12
- const handler = handlers[event.key];
13
- if (handler) {
14
- event.preventDefault();
15
- handler();
16
- }
17
-
18
- return true;
19
- };
@@ -1,7 +0,0 @@
1
- export const softBreak = ({ editor, event }) => {
2
- if (event.key === 'Enter' && event.shiftKey) {
3
- event.preventDefault();
4
- editor.insertText('\n');
5
- return true;
6
- }
7
- };
@@ -1,81 +0,0 @@
1
- import { Node } from 'slate';
2
- import {
3
- isCursorAtBlockStart,
4
- isCursorAtBlockEnd,
5
- getNextVoltoBlock,
6
- getPreviousVoltoBlock,
7
- createDefaultBlock,
8
- } from '@plone/volto-slate/utils';
9
-
10
- /**
11
- * goUp.
12
- *
13
- * @param {}
14
- */
15
- export function goUp({ editor, event }) {
16
- if (isCursorAtBlockStart(editor)) {
17
- const props = editor.getBlockProps();
18
- const { onFocusPreviousBlock, block, blockNode } = props;
19
-
20
- // const { formContext } = editor;
21
- // const properties = formContext.contextData.formData;
22
- const { properties } = editor.getBlockProps();
23
-
24
- const prev = getPreviousVoltoBlock(props.index, properties);
25
- if (!prev || prev[0]?.['@type'] !== 'slate')
26
- return onFocusPreviousBlock(block, blockNode.current);
27
-
28
- const [slateBlock, id] = prev;
29
- const pseudoEditor = {
30
- children: slateBlock.value || [createDefaultBlock()],
31
- };
32
- const match = Node.last(pseudoEditor, []);
33
- if (!match) return onFocusPreviousBlock(block, blockNode.current);
34
-
35
- const [node, path] = match;
36
- const point = { path, offset: (node?.text || '').length };
37
- const selection = { anchor: point, focus: point };
38
- props.saveSlateBlockSelection(id, selection);
39
- return onFocusPreviousBlock(block, blockNode.current);
40
- }
41
- }
42
-
43
- /**
44
- * goDown.
45
- *
46
- * @param {}
47
- */
48
- export function goDown({ editor, event }) {
49
- if (isCursorAtBlockEnd(editor)) {
50
- const props = editor.getBlockProps();
51
- const { onFocusNextBlock, block, blockNode } = props;
52
-
53
- // const { formContext } = editor;
54
- // const properties = formContext.contextData.formData;
55
- const { properties } = editor.getBlockProps();
56
-
57
- const next = getNextVoltoBlock(props.index, properties);
58
- if (!next || next[0]?.['@type'] !== 'slate')
59
- return onFocusNextBlock(block, blockNode.current);
60
-
61
- const [slateBlock, id] = next;
62
- const pseudoEditor = {
63
- children: slateBlock.value || [createDefaultBlock()],
64
- };
65
- const match = Node.first(pseudoEditor, []);
66
- if (!match) return onFocusNextBlock(block, blockNode.current);
67
-
68
- const path = match[1];
69
- const point = { path, offset: 0 };
70
- const selection = { anchor: point, focus: point };
71
- props.saveSlateBlockSelection(id, selection);
72
- return onFocusNextBlock(block, blockNode.current);
73
- }
74
- }
75
-
76
- export function traverseBlocks(opts) {
77
- const { event } = opts;
78
- event.preventDefault();
79
- // return event.shiftKey ? goUp(opts) : goDown(opts);
80
- return true;
81
- }
@@ -1,26 +0,0 @@
1
- import { Node } from 'slate';
2
- import {
3
- _unwrapElement,
4
- _getActiveElement,
5
- } from '@plone/volto-slate/elementEditor/utils';
6
- import config from '@plone/volto/registry';
7
-
8
- /**
9
- * Handles empty string cases in the given `editor`.
10
- * It will unwrap empty strings for any major type (ex: a, mentions, footnote, zotero).
11
- * @param {Editor} editor
12
- * @param {Event} event
13
- */
14
- export function unwrapEmptyString(props) {
15
- const { nodeTypesToHighlight } = config.settings.slate;
16
- const uniqueNodeTypesToHighligh = [...new Set(nodeTypesToHighlight)];
17
- const getActiveElement = _getActiveElement(uniqueNodeTypesToHighligh);
18
- const unwrapElement = _unwrapElement(uniqueNodeTypesToHighligh);
19
-
20
- const { editor } = props;
21
- const actEl = getActiveElement(editor);
22
-
23
- if (actEl && Node.string(actEl[0]).length === 1) {
24
- unwrapElement(editor);
25
- }
26
- }
@@ -1,39 +0,0 @@
1
- const TextBlockSchema = (data) => {
2
- const { override_toc } = data;
3
- return {
4
- title: 'Advanced settings',
5
- fieldsets: [
6
- {
7
- id: 'default',
8
- title: 'Default',
9
- fields: [
10
- 'override_toc',
11
- ...(override_toc ? ['level', 'entry_text'] : []),
12
- ],
13
- },
14
- ],
15
- properties: {
16
- override_toc: {
17
- title: 'Override TOC entry',
18
- type: 'boolean',
19
- },
20
- level: {
21
- title: 'TOC entry level',
22
- choices: [
23
- ['h1', 'h1'],
24
- ['h2', 'h2'],
25
- ['h3', 'h3'],
26
- ['h4', 'h4'],
27
- ['h5', 'h5'],
28
- ['h6', 'h6'],
29
- ],
30
- },
31
- entry_text: {
32
- title: 'Entry text for TOC',
33
- },
34
- },
35
- required: [],
36
- };
37
- };
38
-
39
- export default TextBlockSchema;
@@ -1,123 +0,0 @@
1
- // action types
2
- export const SAVE_SLATE_BLOCK_SELECTION = 'SAVE_SLATE_BLOCK_SELECTION';
3
- export const SLATE_PLUGINS = 'SLATE_PLUGINS';
4
- export const UPLOAD_CONTENT = 'UPLOAD_CONTENT';
5
-
6
- // element 'types'. Useful to identify element types across codebase
7
- export const IMAGE = 'img';
8
- // export const FOOTNOTE = 'footnote';
9
- export const LINK = 'a';
10
- export const SIMPLELINK = 'link';
11
-
12
- export const TABLE = 'table';
13
- export const THEAD = 'thead';
14
- export const TBODY = 'tbody';
15
- export const TFOOT = 'tbody';
16
- export const TR = 'tr';
17
- export const TH = 'th';
18
- export const TD = 'td';
19
-
20
- export const P = 'p';
21
-
22
- export const LI = 'li';
23
- export const UL = 'ul';
24
- export const OL = 'ol';
25
-
26
- // dom parsing node information
27
- export const TEXT_NODE = 3;
28
- export const ELEMENT_NODE = 1;
29
- export const COMMENT = 8;
30
-
31
- export const INLINE_ELEMENTS = [
32
- 'A',
33
- 'ABBR',
34
- 'ACRONYM',
35
- 'AUDIO',
36
- 'B',
37
- 'BDI',
38
- 'BDO',
39
- 'BIG',
40
- 'BR',
41
- 'BUTTON',
42
- 'CANVAS',
43
- 'CITE',
44
- 'CODE',
45
- 'DATA',
46
- 'DATALIST',
47
- 'DEL',
48
- 'DFN',
49
- 'EM',
50
- 'EMBED',
51
- 'I',
52
- 'IFRAME',
53
- 'IMG',
54
- 'INPUT',
55
- 'INS',
56
- 'KBD',
57
- 'LABEL',
58
- 'MAP',
59
- 'MARK',
60
- 'METER',
61
- 'NOSCRIPT',
62
- 'OBJECT',
63
- 'OUTPUT',
64
- 'PICTURE',
65
- 'PROGRESS',
66
- 'Q',
67
- 'RUBY',
68
- 'S',
69
- 'SAMP',
70
- 'SCRIPT',
71
- 'SELECT',
72
- 'SLOT',
73
- 'SMALL',
74
- 'SPAN',
75
- 'STRONG',
76
- 'SUB',
77
- 'SUP',
78
- 'SVG',
79
- 'TEMPLATE',
80
- 'TEXTAREA',
81
- 'TIME',
82
- 'U',
83
- 'TT',
84
- 'VAR',
85
- 'VIDEO',
86
- 'WBR',
87
- ];
88
-
89
- export const BLOCK_ELEMENTS = [
90
- 'ADDRESS',
91
- 'ARTICLE',
92
- 'ASIDE',
93
- 'BLOCKQUOTE',
94
- 'DETAILS',
95
- 'DIALOG',
96
- 'DD',
97
- 'DIV',
98
- 'DL',
99
- 'DT',
100
- 'FIELDSET',
101
- 'FIGCAPTION',
102
- 'FIGURE',
103
- 'FOOTER',
104
- 'FORM',
105
- 'H1',
106
- 'H2',
107
- 'H3',
108
- 'H4',
109
- 'H5',
110
- 'H6',
111
- 'HEADER',
112
- 'HGROUP',
113
- 'HR',
114
- 'LI',
115
- 'MAIN',
116
- 'NAV',
117
- 'OL',
118
- 'P',
119
- 'PRE',
120
- 'SECTION',
121
- 'TABLE',
122
- 'UL',
123
- ];
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
-
3
- const EditorContext = React.createContext();
4
-
5
- export default EditorContext;
@@ -1,22 +0,0 @@
1
- import React from 'react'; // , useState
2
- import { useSlate } from 'slate-react';
3
-
4
- /**
5
- * A component that can lift the editor to higher level
6
- *
7
- * Use like:
8
- * <SlateEditor ...><EditorReference onHasEditor=((editor) =>
9
- * this.setState({editor}) /></SlateEditor>
10
- *
11
- * With this you have access to the Slate editor "out of tree".
12
- */
13
-
14
- const EditorReference = ({ onHasEditor }) => {
15
- const editor = useSlate();
16
- React.useEffect(() => {
17
- onHasEditor(editor);
18
- }, [onHasEditor, editor]);
19
- return null;
20
- };
21
-
22
- export default EditorReference;