@plone/volto 18.0.0-alpha.2 → 18.0.0-alpha.4

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 (293) hide show
  1. package/.eslintrc +3 -3
  2. package/.prettierignore +8 -0
  3. package/.prettierrc +12 -0
  4. package/{packages/registry/.release-it.json → .release-it.json} +11 -6
  5. package/CHANGELOG.md +44 -4
  6. package/locales/ca/LC_MESSAGES/volto.po +1 -0
  7. package/locales/de/LC_MESSAGES/volto.po +1 -0
  8. package/locales/en/LC_MESSAGES/volto.po +1 -0
  9. package/locales/es/LC_MESSAGES/volto.po +1 -0
  10. package/locales/eu/LC_MESSAGES/volto.po +1 -0
  11. package/locales/fi/LC_MESSAGES/volto.po +1 -0
  12. package/locales/fr/LC_MESSAGES/volto.po +1 -0
  13. package/locales/it/LC_MESSAGES/volto.po +1 -0
  14. package/locales/ja/LC_MESSAGES/volto.po +1 -0
  15. package/locales/nl/LC_MESSAGES/volto.po +1 -0
  16. package/locales/pt/LC_MESSAGES/volto.po +1 -0
  17. package/locales/pt_BR/LC_MESSAGES/volto.po +1 -0
  18. package/locales/ro/LC_MESSAGES/volto.po +1 -0
  19. package/locales/volto.pot +2 -1
  20. package/locales/zh_CN/LC_MESSAGES/volto.po +1 -0
  21. package/package.json +57 -127
  22. package/razzle.config.js +4 -7
  23. package/src/components/manage/Blocks/Video/Body.jsx +52 -22
  24. package/src/components/manage/Blocks/Video/Body.test.jsx +167 -0
  25. package/src/components/manage/Controlpanels/Users/UserGroupMembershipControlPanel.jsx +2 -2
  26. package/src/components/manage/Form/Form.jsx +5 -2
  27. package/src/components/theme/Breadcrumbs/Breadcrumbs.jsx +19 -2
  28. package/src/components/theme/ContentMetadataTags/ContentMetadataTags.jsx +46 -39
  29. package/src/config/index.js +0 -4
  30. package/src/icons/divide-horizontal.svg +0 -0
  31. package/src/icons/divide-vertical.svg +0 -0
  32. package/src/icons/hero.svg +0 -0
  33. package/src/icons/slider.svg +0 -0
  34. package/src/icons/summary.svg +0 -0
  35. package/src/middleware/api.js +1 -1
  36. package/theme/themes/default/elements/icon.overrides +0 -0
  37. package/theme/themes/default/globals/reset.overrides +0 -0
  38. package/theme/themes/default/globals/site.variables +0 -0
  39. package/theme/themes/default/modules/dropdown.overrides +0 -0
  40. package/theme/themes/default/modules/dropdown.variables +0 -0
  41. package/theme/themes/default/modules/modal.variables +0 -0
  42. package/theme/themes/default/modules/video.overrides +0 -0
  43. package/theme/themes/default/modules/video.variables +0 -0
  44. package/theme/themes/pastanaga/assets/fonts/icons.eot +0 -0
  45. package/theme/themes/pastanaga/assets/fonts/icons.svg +0 -0
  46. package/theme/themes/pastanaga/assets/fonts/icons.ttf +0 -0
  47. package/theme/themes/pastanaga/assets/fonts/icons.woff +0 -0
  48. package/theme/themes/pastanaga/globals/reset.overrides +0 -0
  49. package/theme/themes/pastanaga/globals/site.variables +0 -0
  50. package/theme/themes/pastanaga/modules/dropdown.variables +0 -0
  51. package/theme/themes/pastanaga/modules/modal.variables +0 -0
  52. package/theme/themes/pastanaga/modules/video.overrides +0 -0
  53. package/theme/themes/pastanaga/modules/video.variables +0 -0
  54. package/tsconfig.json +1 -4
  55. package/types/components/manage/Blocks/Video/Body.d.ts +5 -0
  56. package/types/config/RichTextEditor/index.d.ts +5 -8
  57. package/types/helpers/AsyncConnect/index.d.ts +2 -2
  58. package/types/helpers/Url/Url.d.ts +3 -3
  59. package/types/icons/load-icons.d.ts +1 -1
  60. package/webpack-plugins/webpack-less-plugin.js +1 -0
  61. package/CODE_OF_CONDUCT.md +0 -13
  62. package/CONTRIBUTING.md +0 -7
  63. package/README.md +0 -154
  64. package/RELEASING.md +0 -73
  65. package/ROADMAP.md +0 -30
  66. package/SECURITY.md +0 -14
  67. package/logos/Logo.png +0 -0
  68. package/logos/VoltoLogoEra2-dark-mode.png +0 -0
  69. package/logos/VoltoLogoEra2.png +0 -0
  70. package/logos/volto-colorful.png +0 -0
  71. package/logos/volto-colorful.svg +0 -35
  72. package/logos/volto-guide.png +0 -0
  73. package/logos/volto-h-transparent.svg +0 -6
  74. package/logos/volto-transparent.png +0 -0
  75. package/logos/volto-transparent.svg +0 -19
  76. package/logos/volto-transparent2.svg +0 -5
  77. package/logos/volto-yellow.svg +0 -29
  78. package/logos/volto.sketch +0 -0
  79. package/packages/README.md +0 -7
  80. package/packages/registry/.towncrier/towncrier_template.jinja +0 -10
  81. package/packages/registry/CHANGELOG.md +0 -16
  82. package/packages/registry/README.md +0 -207
  83. package/packages/registry/addon-registry.js +0 -603
  84. package/packages/registry/create-addons-loader.js +0 -116
  85. package/packages/registry/create-theme-addons-loader.js +0 -78
  86. package/packages/registry/news/.gitkeep +0 -0
  87. package/packages/registry/package.json +0 -76
  88. package/packages/registry/src/index.ts +0 -174
  89. package/packages/registry/src/registry.test.js +0 -111
  90. package/packages/registry/tsconfig.json +0 -32
  91. package/packages/scripts/CHANGELOG.md +0 -173
  92. package/packages/scripts/README.md +0 -128
  93. package/packages/scripts/addon/consolidate.js +0 -28
  94. package/packages/scripts/addon/generators.js +0 -213
  95. package/packages/scripts/addon/getAddonInfo.js +0 -65
  96. package/packages/scripts/addon/index.js +0 -88
  97. package/packages/scripts/addon/utils.js +0 -44
  98. package/packages/scripts/backportpr.js +0 -75
  99. package/packages/scripts/changelogupdater.cjs +0 -94
  100. package/packages/scripts/corepackagebump.js +0 -20
  101. package/packages/scripts/i18n.cjs +0 -310
  102. package/packages/scripts/package.json +0 -76
  103. package/packages/scripts/templates/towncrier_template.jinja +0 -10
  104. package/packages/types/Blocks/View.ts +0 -11
  105. package/packages/types/actions.ts +0 -15
  106. package/packages/types/breadcrumbs.ts +0 -10
  107. package/packages/types/config/Blocks.ts +0 -153
  108. package/packages/types/config/Content.ts +0 -62
  109. package/packages/types/config/Settings.ts +0 -86
  110. package/packages/types/config/Views.ts +0 -15
  111. package/packages/types/config/Widgets.ts +0 -7
  112. package/packages/types/config/index.ts +0 -21
  113. package/packages/types/content/common.ts +0 -60
  114. package/packages/types/content/get.ts +0 -66
  115. package/packages/types/index.ts +0 -0
  116. package/packages/types/navigation.ts +0 -12
  117. package/packages/types/package.json +0 -64
  118. package/packages/types/types.ts +0 -61
  119. package/packages/volto-slate/.i18n.babel.config.js +0 -1
  120. package/packages/volto-slate/README.md +0 -4
  121. package/packages/volto-slate/build/messages/src/blocks/Table/TableBlockEdit.json +0 -90
  122. package/packages/volto-slate/build/messages/src/blocks/Text/DefaultTextBlockEditor.json +0 -6
  123. package/packages/volto-slate/build/messages/src/blocks/Text/DetachedTextBlockEditor.json +0 -6
  124. package/packages/volto-slate/build/messages/src/blocks/Text/SlashMenu.json +0 -6
  125. package/packages/volto-slate/build/messages/src/editor/plugins/AdvancedLink/index.json +0 -10
  126. package/packages/volto-slate/build/messages/src/editor/plugins/Link/index.json +0 -10
  127. package/packages/volto-slate/build/messages/src/editor/plugins/Table/index.json +0 -30
  128. package/packages/volto-slate/build/messages/src/elementEditor/messages.json +0 -10
  129. package/packages/volto-slate/build/messages/src/widgets/HtmlSlateWidget.json +0 -6
  130. package/packages/volto-slate/build/messages/src/widgets/RichTextWidgetView.json +0 -6
  131. package/packages/volto-slate/locales/de/LC_MESSAGES/volto.po +0 -148
  132. package/packages/volto-slate/locales/en/LC_MESSAGES/volto.po +0 -148
  133. package/packages/volto-slate/locales/volto.pot +0 -182
  134. package/packages/volto-slate/package.json +0 -43
  135. package/packages/volto-slate/src/actions/content.js +0 -30
  136. package/packages/volto-slate/src/actions/index.js +0 -3
  137. package/packages/volto-slate/src/actions/plugins.js +0 -9
  138. package/packages/volto-slate/src/actions/selection.js +0 -22
  139. package/packages/volto-slate/src/blocks/Table/Cell.jsx +0 -87
  140. package/packages/volto-slate/src/blocks/Table/Cell.test.js +0 -54
  141. package/packages/volto-slate/src/blocks/Table/TableBlockEdit.jsx +0 -694
  142. package/packages/volto-slate/src/blocks/Table/TableBlockEdit.test.js +0 -40
  143. package/packages/volto-slate/src/blocks/Table/TableBlockView.jsx +0 -150
  144. package/packages/volto-slate/src/blocks/Table/TableBlockView.test.js +0 -49
  145. package/packages/volto-slate/src/blocks/Table/deconstruct.js +0 -113
  146. package/packages/volto-slate/src/blocks/Table/extensions/normalizeTable.js +0 -5
  147. package/packages/volto-slate/src/blocks/Table/index.js +0 -60
  148. package/packages/volto-slate/src/blocks/Table/schema.js +0 -122
  149. package/packages/volto-slate/src/blocks/Text/DefaultTextBlockEditor.jsx +0 -304
  150. package/packages/volto-slate/src/blocks/Text/DetachedTextBlockEditor.jsx +0 -77
  151. package/packages/volto-slate/src/blocks/Text/MarkdownIntroduction.jsx +0 -59
  152. package/packages/volto-slate/src/blocks/Text/PluginSidebar.jsx +0 -18
  153. package/packages/volto-slate/src/blocks/Text/ShortcutListing.jsx +0 -28
  154. package/packages/volto-slate/src/blocks/Text/SlashMenu.jsx +0 -203
  155. package/packages/volto-slate/src/blocks/Text/TextBlockEdit.jsx +0 -38
  156. package/packages/volto-slate/src/blocks/Text/TextBlockEdit.test.js +0 -107
  157. package/packages/volto-slate/src/blocks/Text/TextBlockSchema.js +0 -54
  158. package/packages/volto-slate/src/blocks/Text/TextBlockView.jsx +0 -31
  159. package/packages/volto-slate/src/blocks/Text/css/editor.css +0 -18
  160. package/packages/volto-slate/src/blocks/Text/extensions/Readme.md +0 -49
  161. package/packages/volto-slate/src/blocks/Text/extensions/breakList.js +0 -100
  162. package/packages/volto-slate/src/blocks/Text/extensions/index.js +0 -6
  163. package/packages/volto-slate/src/blocks/Text/extensions/insertBreak.js +0 -57
  164. package/packages/volto-slate/src/blocks/Text/extensions/isSelected.js +0 -7
  165. package/packages/volto-slate/src/blocks/Text/extensions/normalizeExternalData.js +0 -7
  166. package/packages/volto-slate/src/blocks/Text/extensions/withDeserializers.js +0 -87
  167. package/packages/volto-slate/src/blocks/Text/extensions/withLists.js +0 -5
  168. package/packages/volto-slate/src/blocks/Text/index.js +0 -171
  169. package/packages/volto-slate/src/blocks/Text/keyboard/backspaceInList.js +0 -58
  170. package/packages/volto-slate/src/blocks/Text/keyboard/breakBlocks.js +0 -3
  171. package/packages/volto-slate/src/blocks/Text/keyboard/cancelEsc.js +0 -7
  172. package/packages/volto-slate/src/blocks/Text/keyboard/indentListItems.js +0 -240
  173. package/packages/volto-slate/src/blocks/Text/keyboard/index.js +0 -52
  174. package/packages/volto-slate/src/blocks/Text/keyboard/joinBlocks.js +0 -180
  175. package/packages/volto-slate/src/blocks/Text/keyboard/moveListItems.js +0 -124
  176. package/packages/volto-slate/src/blocks/Text/keyboard/slashMenu.js +0 -19
  177. package/packages/volto-slate/src/blocks/Text/keyboard/softBreak.js +0 -7
  178. package/packages/volto-slate/src/blocks/Text/keyboard/traverseBlocks.js +0 -81
  179. package/packages/volto-slate/src/blocks/Text/keyboard/unwrapEmptyString.js +0 -26
  180. package/packages/volto-slate/src/blocks/Text/schema.js +0 -39
  181. package/packages/volto-slate/src/constants.js +0 -123
  182. package/packages/volto-slate/src/editor/EditorContext.jsx +0 -5
  183. package/packages/volto-slate/src/editor/EditorReference.jsx +0 -22
  184. package/packages/volto-slate/src/editor/SlateEditor.jsx +0 -375
  185. package/packages/volto-slate/src/editor/config.jsx +0 -344
  186. package/packages/volto-slate/src/editor/decorate.js +0 -68
  187. package/packages/volto-slate/src/editor/deserialize.js +0 -185
  188. package/packages/volto-slate/src/editor/extensions/index.js +0 -6
  189. package/packages/volto-slate/src/editor/extensions/insertBreak.js +0 -15
  190. package/packages/volto-slate/src/editor/extensions/insertData.js +0 -159
  191. package/packages/volto-slate/src/editor/extensions/isInline.js +0 -14
  192. package/packages/volto-slate/src/editor/extensions/normalizeExternalData.js +0 -8
  193. package/packages/volto-slate/src/editor/extensions/normalizeNode.js +0 -48
  194. package/packages/volto-slate/src/editor/extensions/withDeserializers.js +0 -15
  195. package/packages/volto-slate/src/editor/extensions/withTestingFeatures.jsx +0 -84
  196. package/packages/volto-slate/src/editor/index.js +0 -14
  197. package/packages/volto-slate/src/editor/less/editor.less +0 -173
  198. package/packages/volto-slate/src/editor/less/globals.less +0 -18
  199. package/packages/volto-slate/src/editor/less/slate.less +0 -28
  200. package/packages/volto-slate/src/editor/plugins/AdvancedLink/deserialize.js +0 -90
  201. package/packages/volto-slate/src/editor/plugins/AdvancedLink/extensions.js +0 -32
  202. package/packages/volto-slate/src/editor/plugins/AdvancedLink/index.js +0 -50
  203. package/packages/volto-slate/src/editor/plugins/AdvancedLink/render.jsx +0 -37
  204. package/packages/volto-slate/src/editor/plugins/AdvancedLink/schema.js +0 -114
  205. package/packages/volto-slate/src/editor/plugins/AdvancedLink/styles.less +0 -8
  206. package/packages/volto-slate/src/editor/plugins/Blockquote/index.js +0 -30
  207. package/packages/volto-slate/src/editor/plugins/Callout/index.js +0 -34
  208. package/packages/volto-slate/src/editor/plugins/Image/deconstruct.js +0 -30
  209. package/packages/volto-slate/src/editor/plugins/Image/extensions.js +0 -51
  210. package/packages/volto-slate/src/editor/plugins/Image/index.js +0 -11
  211. package/packages/volto-slate/src/editor/plugins/Image/render.jsx +0 -22
  212. package/packages/volto-slate/src/editor/plugins/Link/extensions.js +0 -58
  213. package/packages/volto-slate/src/editor/plugins/Link/index.js +0 -164
  214. package/packages/volto-slate/src/editor/plugins/Link/render.jsx +0 -54
  215. package/packages/volto-slate/src/editor/plugins/Markdown/constants.js +0 -81
  216. package/packages/volto-slate/src/editor/plugins/Markdown/extensions.js +0 -334
  217. package/packages/volto-slate/src/editor/plugins/Markdown/index.js +0 -28
  218. package/packages/volto-slate/src/editor/plugins/Markdown/utils.js +0 -198
  219. package/packages/volto-slate/src/editor/plugins/StyleMenu/StyleMenu.jsx +0 -153
  220. package/packages/volto-slate/src/editor/plugins/StyleMenu/index.js +0 -19
  221. package/packages/volto-slate/src/editor/plugins/StyleMenu/style.less +0 -29
  222. package/packages/volto-slate/src/editor/plugins/StyleMenu/utils.js +0 -168
  223. package/packages/volto-slate/src/editor/plugins/Table/TableButton.jsx +0 -142
  224. package/packages/volto-slate/src/editor/plugins/Table/TableCell.jsx +0 -44
  225. package/packages/volto-slate/src/editor/plugins/Table/TableContainer.jsx +0 -37
  226. package/packages/volto-slate/src/editor/plugins/Table/TableSizePicker.jsx +0 -83
  227. package/packages/volto-slate/src/editor/plugins/Table/extensions.js +0 -87
  228. package/packages/volto-slate/src/editor/plugins/Table/index.js +0 -390
  229. package/packages/volto-slate/src/editor/plugins/Table/less/public.less +0 -29
  230. package/packages/volto-slate/src/editor/plugins/Table/less/table.less +0 -28
  231. package/packages/volto-slate/src/editor/plugins/Table/render.jsx +0 -30
  232. package/packages/volto-slate/src/editor/plugins/index.js +0 -19
  233. package/packages/volto-slate/src/editor/render.jsx +0 -224
  234. package/packages/volto-slate/src/editor/ui/BasicToolbar.jsx +0 -11
  235. package/packages/volto-slate/src/editor/ui/BlockButton.jsx +0 -31
  236. package/packages/volto-slate/src/editor/ui/ClearFormattingButton.jsx +0 -21
  237. package/packages/volto-slate/src/editor/ui/ExpandedToolbar.jsx +0 -18
  238. package/packages/volto-slate/src/editor/ui/Expando.jsx +0 -5
  239. package/packages/volto-slate/src/editor/ui/InlineToolbar.jsx +0 -73
  240. package/packages/volto-slate/src/editor/ui/MarkButton.jsx +0 -23
  241. package/packages/volto-slate/src/editor/ui/MarkElementButton.jsx +0 -30
  242. package/packages/volto-slate/src/editor/ui/Menu.jsx +0 -13
  243. package/packages/volto-slate/src/editor/ui/PositionedToolbar.jsx +0 -32
  244. package/packages/volto-slate/src/editor/ui/Separator.jsx +0 -7
  245. package/packages/volto-slate/src/editor/ui/SlateContextToolbar.jsx +0 -13
  246. package/packages/volto-slate/src/editor/ui/SlateToolbar.jsx +0 -96
  247. package/packages/volto-slate/src/editor/ui/Toolbar.jsx +0 -103
  248. package/packages/volto-slate/src/editor/ui/ToolbarButton.jsx +0 -33
  249. package/packages/volto-slate/src/editor/ui/ToolbarButton.test.js +0 -25
  250. package/packages/volto-slate/src/editor/ui/index.js +0 -15
  251. package/packages/volto-slate/src/editor/utils.js +0 -248
  252. package/packages/volto-slate/src/elementEditor/ContextButtons.jsx +0 -56
  253. package/packages/volto-slate/src/elementEditor/PluginEditor.jsx +0 -124
  254. package/packages/volto-slate/src/elementEditor/Readme.md +0 -6
  255. package/packages/volto-slate/src/elementEditor/SchemaProvider.jsx +0 -3
  256. package/packages/volto-slate/src/elementEditor/SidebarEditor.jsx +0 -46
  257. package/packages/volto-slate/src/elementEditor/ToolbarButton.jsx +0 -44
  258. package/packages/volto-slate/src/elementEditor/index.js +0 -5
  259. package/packages/volto-slate/src/elementEditor/makeInlineElementPlugin.js +0 -100
  260. package/packages/volto-slate/src/elementEditor/messages.js +0 -14
  261. package/packages/volto-slate/src/elementEditor/utils.js +0 -226
  262. package/packages/volto-slate/src/hooks/index.js +0 -3
  263. package/packages/volto-slate/src/hooks/useEditorContext.js +0 -6
  264. package/packages/volto-slate/src/hooks/useIsomorphicLayoutEffect.js +0 -7
  265. package/packages/volto-slate/src/hooks/useSelectionPosition.js +0 -25
  266. package/packages/volto-slate/src/i18n.js +0 -180
  267. package/packages/volto-slate/src/icons/hashlink.svg +0 -57
  268. package/packages/volto-slate/src/index.js +0 -61
  269. package/packages/volto-slate/src/reducers/content.js +0 -74
  270. package/packages/volto-slate/src/reducers/index.js +0 -3
  271. package/packages/volto-slate/src/reducers/plugins.js +0 -17
  272. package/packages/volto-slate/src/reducers/selection.js +0 -16
  273. package/packages/volto-slate/src/utils/blocks.js +0 -375
  274. package/packages/volto-slate/src/utils/blocks.test.js +0 -138
  275. package/packages/volto-slate/src/utils/editor.js +0 -31
  276. package/packages/volto-slate/src/utils/image.js +0 -25
  277. package/packages/volto-slate/src/utils/index.js +0 -11
  278. package/packages/volto-slate/src/utils/internals.js +0 -46
  279. package/packages/volto-slate/src/utils/lists.js +0 -92
  280. package/packages/volto-slate/src/utils/marks.js +0 -104
  281. package/packages/volto-slate/src/utils/mime-types.js +0 -24
  282. package/packages/volto-slate/src/utils/nodes.js +0 -4
  283. package/packages/volto-slate/src/utils/ops.js +0 -20
  284. package/packages/volto-slate/src/utils/random.js +0 -17
  285. package/packages/volto-slate/src/utils/selection.js +0 -236
  286. package/packages/volto-slate/src/utils/slate-string-utils.js +0 -408
  287. package/packages/volto-slate/src/utils/volto-blocks.js +0 -314
  288. package/packages/volto-slate/src/widgets/ErrorBoundary.jsx +0 -27
  289. package/packages/volto-slate/src/widgets/HtmlSlateWidget.jsx +0 -139
  290. package/packages/volto-slate/src/widgets/ObjectByTypeWidget.jsx +0 -49
  291. package/packages/volto-slate/src/widgets/RichTextWidget.jsx +0 -72
  292. package/packages/volto-slate/src/widgets/RichTextWidgetView.jsx +0 -37
  293. package/packages/volto-slate/src/widgets/style.css +0 -21
@@ -1,408 +0,0 @@
1
- // NOTE: file taken from Slate.js on 15th of October, 2021
2
-
3
- /**
4
- * Constants for string distance checking.
5
- */
6
-
7
- const SPACE = /\s/;
8
- const PUNCTUATION = /[\u0021-\u0023\u0025-\u002A\u002C-\u002F\u003A\u003B\u003F\u0040\u005B-\u005D\u005F\u007B\u007D\u00A1\u00A7\u00AB\u00B6\u00B7\u00BB\u00BF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E3B\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/;
9
- const CHAMELEON = /['\u2018\u2019]/;
10
-
11
- /**
12
- * Get the distance to the end of the first character in a string of text.
13
- */
14
-
15
- export const getCharacterDistance = (str, isRTL = false) => {
16
- const isLTR = !isRTL;
17
-
18
- let dist = 0;
19
- // prev types:
20
- // NSEQ: non sequenceable codepoint.
21
- // MOD: modifier
22
- // ZWJ: zero width joiner
23
- // VAR: variation selector
24
- // BMP: sequenceable codepoint from basic multilingual plane
25
- // RI: regional indicator
26
- // KC: keycap
27
- // TAG: tag
28
- let prev = null;
29
-
30
- const codepoints = isLTR ? str : codepointsIteratorRTL(str);
31
-
32
- for (const codepoint of codepoints) {
33
- const code = codepoint.codePointAt(0);
34
- if (!code) break;
35
-
36
- // Check if codepoint is part of a sequence.
37
- if (isZWJ(code)) {
38
- dist += codepoint.length;
39
- prev = 'ZWJ';
40
-
41
- continue;
42
- }
43
-
44
- const [isKeycapStart, isKeycapEnd] = isLTR
45
- ? [isKeycap, isCombiningEnclosingKeycap]
46
- : [isCombiningEnclosingKeycap, isKeycap];
47
- if (isKeycapStart(code)) {
48
- if (prev === 'KC') {
49
- break;
50
- }
51
-
52
- dist += codepoint.length;
53
- prev = 'KC';
54
- continue;
55
- }
56
- if (isKeycapEnd(code)) {
57
- dist += codepoint.length;
58
- break;
59
- }
60
-
61
- if (isVariationSelector(code)) {
62
- dist += codepoint.length;
63
-
64
- if (isLTR && prev === 'BMP') {
65
- break;
66
- }
67
-
68
- prev = 'VAR';
69
-
70
- continue;
71
- }
72
-
73
- if (isBMPEmoji(code)) {
74
- if (isLTR && prev && prev !== 'ZWJ' && prev !== 'VAR') {
75
- break;
76
- }
77
-
78
- dist += codepoint.length;
79
-
80
- if (isRTL && prev === 'VAR') {
81
- break;
82
- }
83
-
84
- prev = 'BMP';
85
- continue;
86
- }
87
-
88
- if (isModifier(code)) {
89
- dist += codepoint.length;
90
- prev = 'MOD';
91
-
92
- continue;
93
- }
94
-
95
- const [isTagStart, isTagEnd] = isLTR
96
- ? [isBlackFlag, isCancelTag]
97
- : [isCancelTag, isBlackFlag];
98
- if (isTagStart(code)) {
99
- if (prev === 'TAG') break;
100
-
101
- dist += codepoint.length;
102
- prev = 'TAG';
103
- continue;
104
- }
105
- if (isTagEnd(code)) {
106
- dist += codepoint.length;
107
- break;
108
- }
109
- if (prev === 'TAG' && isTag(code)) {
110
- dist += codepoint.length;
111
- continue;
112
- }
113
-
114
- if (isRegionalIndicator(code)) {
115
- dist += codepoint.length;
116
-
117
- if (prev === 'RI') {
118
- break;
119
- }
120
-
121
- prev = 'RI';
122
-
123
- continue;
124
- }
125
-
126
- if (!isBMP(code)) {
127
- // If previous code point is not sequenceable, it means we are not in a
128
- // sequence.
129
- if (prev === 'NSEQ') {
130
- break;
131
- }
132
-
133
- dist += codepoint.length;
134
- prev = 'NSEQ';
135
-
136
- continue;
137
- }
138
-
139
- // Modifier 'groups up' with what ever character is before that (even whitespace), need to
140
- // look ahead.
141
- if (isLTR && prev === 'MOD') {
142
- dist += codepoint.length;
143
- break;
144
- }
145
-
146
- // If while loop ever gets here, we're done (e.g latin chars).
147
- break;
148
- }
149
-
150
- return dist || 1;
151
- };
152
-
153
- /**
154
- * Get the distance to the end of the first word in a string of text.
155
- */
156
-
157
- export const getWordDistance = (text, isRTL = false) => {
158
- let dist = 0;
159
- let started = false;
160
-
161
- while (text.length > 0) {
162
- const charDist = getCharacterDistance(text, isRTL);
163
- const [char, remaining] = splitByCharacterDistance(text, charDist, isRTL);
164
-
165
- if (isWordCharacter(char, remaining, isRTL)) {
166
- started = true;
167
- dist += charDist;
168
- } else if (!started) {
169
- dist += charDist;
170
- } else {
171
- break;
172
- }
173
-
174
- text = remaining;
175
- }
176
-
177
- return dist;
178
- };
179
-
180
- /**
181
- * Split a string in two parts at a given distance starting from the end when
182
- * `isRTL` is set to `true`.
183
- */
184
-
185
- export const splitByCharacterDistance = (str, dist, isRTL) => {
186
- if (isRTL) {
187
- const at = str.length - dist;
188
- return [str.slice(at, str.length), str.slice(0, at)];
189
- }
190
-
191
- return [str.slice(0, dist), str.slice(dist)];
192
- };
193
-
194
- /**
195
- * Check if a character is a word character. The `remaining` argument is used
196
- * because sometimes you must read subsequent characters to truly determine it.
197
- */
198
-
199
- const isWordCharacter = (char, remaining, isRTL = false) => {
200
- if (SPACE.test(char)) {
201
- return false;
202
- }
203
-
204
- // Chameleons count as word characters as long as they're in a word, so
205
- // recurse to see if the next one is a word character or not.
206
- if (CHAMELEON.test(char)) {
207
- const charDist = getCharacterDistance(remaining, isRTL);
208
- const [nextChar, nextRemaining] = splitByCharacterDistance(
209
- remaining,
210
- charDist,
211
- isRTL,
212
- );
213
-
214
- if (isWordCharacter(nextChar, nextRemaining, isRTL)) {
215
- return true;
216
- }
217
- }
218
-
219
- if (PUNCTUATION.test(char)) {
220
- return false;
221
- }
222
-
223
- return true;
224
- };
225
-
226
- /**
227
- * Does `code` form Modifier with next one.
228
- *
229
- * https://emojipedia.org/modifiers/
230
- */
231
-
232
- const isModifier = (code) => {
233
- return code >= 0x1f3fb && code <= 0x1f3ff;
234
- };
235
-
236
- /**
237
- * Is `code` a Variation Selector.
238
- *
239
- * https://codepoints.net/variation_selectors
240
- */
241
-
242
- const isVariationSelector = (code) => {
243
- return code <= 0xfe0f && code >= 0xfe00;
244
- };
245
-
246
- /**
247
- * Is `code` a code point used in keycap sequence.
248
- *
249
- * https://emojipedia.org/emoji-keycap-sequence/
250
- */
251
-
252
- const isKeycap = (code) => {
253
- return (
254
- (code >= 0x30 && code <= 0x39) || // digits
255
- code === 0x23 || // number sign
256
- code === 0x2a
257
- );
258
- };
259
-
260
- /**
261
- * Is `code` a Combining Enclosing Keycap.
262
- *
263
- * https://emojipedia.org/combining-enclosing-keycap/
264
- */
265
-
266
- const isCombiningEnclosingKeycap = (code) => {
267
- return code === 0x20e3;
268
- };
269
-
270
- /**
271
- * Is `code` one of the BMP codes used in emoji sequences.
272
- *
273
- * https://emojipedia.org/emoji-zwj-sequences/
274
- */
275
-
276
- const isBMPEmoji = (code) => {
277
- // This requires tiny bit of maintanance, better ideas?
278
- // Fortunately it only happens if new Unicode Standard
279
- // is released. Fails gracefully if upkeep lags behind,
280
- // same way Slate previously behaved with all emojis.
281
- return (
282
- code === 0x2764 || // heart (❤)
283
- code === 0x2642 || // male (♂)
284
- code === 0x2640 || // female (♀)
285
- code === 0x2620 || // scull (☠)
286
- code === 0x2695 || // medical (⚕)
287
- code === 0x2708 || // plane (✈️)
288
- code === 0x25ef || // large circle (◯)
289
- code === 0x2b06 || // up arrow (⬆)
290
- code === 0x2197 || // up-right arrow (↗)
291
- code === 0x27a1 || // right arrow (➡)
292
- code === 0x2198 || // down-right arrow (↘)
293
- code === 0x2b07 || // down arrow (⬇)
294
- code === 0x2199 || // down-left arrow (↙)
295
- code === 0x2b05 || // left arrow (⬅)
296
- code === 0x2196 || // up-left arrow (↖)
297
- code === 0x2195 || // up-down arrow (↕)
298
- code === 0x2194 || // left-right arrow (↔)
299
- code === 0x21a9 || // right arrow curving left (↩)
300
- code === 0x21aa || // left arrow curving right (↪)
301
- code === 0x2934 || // right arrow curving up (⤴)
302
- code === 0x2935 // right arrow curving down (⤵)
303
- );
304
- };
305
-
306
- /**
307
- * Is `code` a Regional Indicator.
308
- *
309
- * https://en.wikipedia.org/wiki/Regional_indicator_symbol
310
- */
311
-
312
- const isRegionalIndicator = (code) => {
313
- return code >= 0x1f1e6 && code <= 0x1f1ff;
314
- };
315
-
316
- /**
317
- * Is `code` from basic multilingual plane.
318
- *
319
- * https://codepoints.net/basic_multilingual_plane
320
- */
321
-
322
- const isBMP = (code) => {
323
- return code <= 0xffff;
324
- };
325
-
326
- /**
327
- * Is `code` a Zero Width Joiner.
328
- *
329
- * https://emojipedia.org/zero-width-joiner/
330
- */
331
-
332
- const isZWJ = (code) => {
333
- return code === 0x200d;
334
- };
335
-
336
- /**
337
- * Is `code` a Black Flag.
338
- *
339
- * https://emojipedia.org/black-flag/
340
- */
341
-
342
- const isBlackFlag = (code) => {
343
- return code === 0x1f3f4;
344
- };
345
-
346
- /**
347
- * Is `code` a Tag.
348
- *
349
- * https://emojipedia.org/emoji-tag-sequence/
350
- */
351
-
352
- const isTag = (code) => {
353
- return code >= 0xe0000 && code <= 0xe007f;
354
- };
355
-
356
- /**
357
- * Is `code` a Cancel Tag.
358
- *
359
- * https://emojipedia.org/cancel-tag/
360
- */
361
-
362
- const isCancelTag = (code) => {
363
- return code === 0xe007f;
364
- };
365
-
366
- /**
367
- * Iterate on codepoints from right to left.
368
- */
369
-
370
- export const codepointsIteratorRTL = function* (str) {
371
- const end = str.length - 1;
372
-
373
- for (let i = 0; i < str.length; i++) {
374
- const char1 = str.charAt(end - i);
375
-
376
- if (isLowSurrogate(char1.charCodeAt(0))) {
377
- const char2 = str.charAt(end - i - 1);
378
- if (isHighSurrogate(char2.charCodeAt(0))) {
379
- yield char2 + char1;
380
-
381
- i++;
382
- continue;
383
- }
384
- }
385
-
386
- yield char1;
387
- }
388
- };
389
-
390
- /**
391
- * Is `charCode` a high surrogate.
392
- *
393
- * https://en.wikipedia.org/wiki/Universal_Character_Set_characters#Surrogates
394
- */
395
-
396
- const isHighSurrogate = (charCode) => {
397
- return charCode >= 0xd800 && charCode <= 0xdbff;
398
- };
399
-
400
- /**
401
- * Is `charCode` a low surrogate.
402
- *
403
- * https://en.wikipedia.org/wiki/Universal_Character_Set_characters#Surrogates
404
- */
405
-
406
- const isLowSurrogate = (charCode) => {
407
- return charCode >= 0xdc00 && charCode <= 0xdfff;
408
- };
@@ -1,314 +0,0 @@
1
- import ReactDOM from 'react-dom';
2
- import { v4 as uuid } from 'uuid';
3
- import {
4
- addBlock,
5
- changeBlock,
6
- getBlocksFieldname,
7
- getBlocksLayoutFieldname,
8
- } from '@plone/volto/helpers';
9
- import { Transforms, Editor, Node, Text, Path } from 'slate';
10
- import { serializeNodesToText } from '@plone/volto-slate/editor/render';
11
- import { omit } from 'lodash';
12
- import config from '@plone/volto/registry';
13
-
14
- function fromEntries(pairs) {
15
- const res = {};
16
- pairs.forEach((p) => {
17
- res[p[0]] = p[1];
18
- });
19
- return res;
20
- }
21
-
22
- // TODO: should be made generic, no need for "prevBlock.value"
23
- export function mergeSlateWithBlockBackward(editor, prevBlock, event) {
24
- // To work around current architecture limitations, read the value from
25
- // previous block. Replace it in the current editor (over which we have
26
- // control), join with current block value, then use this result for previous
27
- // block, delete current block
28
-
29
- const prev = prevBlock.value;
30
-
31
- // collapse the selection to its start point
32
- Transforms.collapse(editor, { edge: 'start' });
33
-
34
- let rangeRef;
35
- let end;
36
-
37
- Editor.withoutNormalizing(editor, () => {
38
- // insert block #0 contents in block #1 contents, at the beginning
39
- Transforms.insertNodes(editor, prev, {
40
- at: Editor.start(editor, []),
41
- });
42
-
43
- // the contents that should be moved into the `ul`, as the last `li`
44
- rangeRef = Editor.rangeRef(editor, {
45
- anchor: Editor.start(editor, [1]),
46
- focus: Editor.end(editor, [1]),
47
- });
48
-
49
- const source = rangeRef.current;
50
-
51
- end = Editor.end(editor, [0]);
52
-
53
- let endPoint;
54
-
55
- Transforms.insertNodes(editor, { text: '' }, { at: end });
56
-
57
- end = Editor.end(editor, [0]);
58
-
59
- Transforms.splitNodes(editor, {
60
- at: end,
61
- always: true,
62
- height: 1,
63
- mode: 'highest',
64
- match: (n) => n.type === 'li' || Text.isText(n),
65
- });
66
-
67
- endPoint = Editor.end(editor, [0]);
68
-
69
- Transforms.moveNodes(editor, {
70
- at: source,
71
- to: endPoint.path,
72
- mode: 'all',
73
- match: (n, p) => p.length === 2,
74
- });
75
- });
76
-
77
- const [n] = Editor.node(editor, [1]);
78
-
79
- if (Editor.isEmpty(editor, n)) {
80
- Transforms.removeNodes(editor, { at: [1] });
81
- }
82
-
83
- rangeRef.unref();
84
-
85
- const [, lastPath] = Editor.last(editor, [0]);
86
-
87
- end = Editor.start(editor, Path.parent(lastPath));
88
-
89
- return end;
90
- }
91
-
92
- export function mergeSlateWithBlockForward(editor, nextBlock, event) {
93
- // To work around current architecture limitations, read the value from next
94
- // block. Replace it in the current editor (over which we have control), join
95
- // with current block value, then use this result for next block, delete
96
- // current block
97
-
98
- const next = nextBlock.value;
99
-
100
- // collapse the selection to its start point
101
- Transforms.collapse(editor, { edge: 'end' });
102
- Transforms.insertNodes(editor, next, {
103
- at: Editor.end(editor, []),
104
- });
105
-
106
- Editor.deleteForward(editor, { unit: 'character' });
107
- }
108
-
109
- export function syncCreateSlateBlock(value) {
110
- const id = uuid();
111
- const block = {
112
- '@type': 'slate',
113
- value: JSON.parse(JSON.stringify(value)),
114
- plaintext: serializeNodesToText(value),
115
- };
116
- return [id, block];
117
- }
118
-
119
- export function createImageBlock(url, index, props) {
120
- const { properties, onChangeField, onSelectBlock } = props;
121
- const blocksFieldname = getBlocksFieldname(properties);
122
- const blocksLayoutFieldname = getBlocksLayoutFieldname(properties);
123
-
124
- const [id, formData] = addBlock(properties, 'image', index + 1);
125
- const newFormData = changeBlock(formData, id, { '@type': 'image', url });
126
-
127
- ReactDOM.unstable_batchedUpdates(() => {
128
- onChangeField(blocksFieldname, newFormData[blocksFieldname]);
129
- onChangeField(blocksLayoutFieldname, newFormData[blocksLayoutFieldname]);
130
- onSelectBlock(id);
131
- });
132
- }
133
-
134
- export const createAndSelectNewBlockAfter = (editor, blockValue) => {
135
- const blockProps = editor.getBlockProps();
136
-
137
- const { onSelectBlock, properties, index, onChangeField } = blockProps;
138
-
139
- const [blockId, formData] = addBlock(properties, 'slate', index + 1);
140
-
141
- const options = {
142
- '@type': 'slate',
143
- value: JSON.parse(JSON.stringify(blockValue)),
144
- plaintext: serializeNodesToText(blockValue),
145
- };
146
-
147
- const newFormData = changeBlock(formData, blockId, options);
148
-
149
- const blocksFieldname = getBlocksFieldname(properties);
150
- const blocksLayoutFieldname = getBlocksLayoutFieldname(properties);
151
- // console.log('layout', blocksLayoutFieldname, newFormData);
152
-
153
- ReactDOM.unstable_batchedUpdates(() => {
154
- blockProps.saveSlateBlockSelection(blockId, 'start');
155
- onChangeField(blocksFieldname, newFormData[blocksFieldname]);
156
- onChangeField(blocksLayoutFieldname, newFormData[blocksLayoutFieldname]);
157
- onSelectBlock(blockId);
158
- });
159
- };
160
-
161
- export function getNextVoltoBlock(index, properties) {
162
- // TODO: look for any next slate block
163
- // join this block with previous block, if previous block is slate
164
- const blocksFieldname = getBlocksFieldname(properties);
165
- const blocksLayoutFieldname = getBlocksLayoutFieldname(properties);
166
-
167
- const blocks_layout = properties[blocksLayoutFieldname];
168
-
169
- if (index === blocks_layout.items.length) return;
170
-
171
- const nextBlockId = blocks_layout.items[index + 1];
172
- const nextBlock = properties[blocksFieldname][nextBlockId];
173
-
174
- return [nextBlock, nextBlockId];
175
- }
176
-
177
- export function getPreviousVoltoBlock(index, properties) {
178
- // TODO: look for any prev slate block
179
- if (index === 0) return;
180
-
181
- const blocksFieldname = getBlocksFieldname(properties);
182
- const blocksLayoutFieldname = getBlocksLayoutFieldname(properties);
183
-
184
- const blocks_layout = properties[blocksLayoutFieldname];
185
- const prevBlockId = blocks_layout.items[index - 1];
186
- const prevBlock = properties[blocksFieldname][prevBlockId];
187
-
188
- return [prevBlock, prevBlockId];
189
- }
190
-
191
- // //check for existing img children
192
- // const checkContainImg = (elements) => {
193
- // var check = false;
194
- // elements.forEach((e) =>
195
- // e.children.forEach((c) => {
196
- // if (c && c.type && c.type === 'img') {
197
- // check = true;
198
- // }
199
- // }),
200
- // );
201
- // return check;
202
- // };
203
-
204
- // //check for existing table children
205
- // const checkContainTable = (elements) => {
206
- // var check = false;
207
- // elements.forEach((e) => {
208
- // if (e && e.type && e.type === 'table') {
209
- // check = true;
210
- // }
211
- // });
212
- // return check;
213
- // };
214
-
215
- /**
216
- * The editor has the properties `dataTransferHandlers` (object) and
217
- * `dataTransferFormatsOrder` and in `dataTransferHandlers` are functions which
218
- * sometimes must call this function. Some types of data storeable in Slate
219
- * documents can be and should be put into separate Volto blocks. The
220
- * `deconstructToVoltoBlocks` function scans the contents of the Slate document
221
- * and, through configured Volto block emitters, it outputs separate Volto
222
- * blocks into the same Volto page form. The `deconstructToVoltoBlocks` function
223
- * should be called only in key places where it is necessary.
224
- *
225
- * @example See the `src/editor/extensions/insertData.js` file.
226
- *
227
- * @param {Editor} editor The Slate editor object which should be deconstructed
228
- * if possible.
229
- *
230
- * @returns {Promise}
231
- */
232
- export function deconstructToVoltoBlocks(editor) {
233
- // Explodes editor content into separate blocks
234
- // If the editor has multiple top-level children, split the current block
235
- // into multiple slate blocks. This will delete and replace the current
236
- // block.
237
- //
238
- // It returns a promise that, when resolved, will pass a list of Volto block
239
- // ids that were affected
240
- //
241
- // For the Volto blocks manipulation we do low-level changes to the context
242
- // form state, as that ensures a better performance (no un-needed UI updates)
243
-
244
- if (!editor.getBlockProps) return;
245
-
246
- const blockProps = editor.getBlockProps();
247
- const { slate } = config.settings;
248
- const { voltoBlockEmiters } = slate;
249
-
250
- return new Promise((resolve, reject) => {
251
- if (!editor?.children) return;
252
-
253
- if (editor.children.length === 1) {
254
- return resolve([blockProps.block]);
255
- }
256
- const { properties, onChangeField, onSelectBlock } = editor.getBlockProps();
257
- const blocksFieldname = getBlocksFieldname(properties);
258
- const blocksLayoutFieldname = getBlocksLayoutFieldname(properties);
259
-
260
- const { index } = blockProps;
261
- let blocks = [];
262
-
263
- // TODO: should use Editor.levels() instead of Node.children
264
- const pathRefs = Array.from(Node.children(editor, [])).map(([, path]) =>
265
- Editor.pathRef(editor, path),
266
- );
267
-
268
- for (const pathRef of pathRefs) {
269
- // extra nodes are always extracted after the text node
270
- let extras = voltoBlockEmiters
271
- .map((emit) => emit(editor, pathRef))
272
- .flat(1);
273
-
274
- // The node might have been replaced with a Volto block
275
- if (pathRef.current) {
276
- const [childNode] = Editor.node(editor, pathRef.current);
277
- if (childNode && !Editor.isEmpty(editor, childNode))
278
- blocks.push(syncCreateSlateBlock([childNode]));
279
- }
280
- blocks = [...blocks, ...extras];
281
- }
282
-
283
- const blockids = blocks.map((b) => b[0]);
284
-
285
- // TODO: add the placeholder block, because we remove it
286
- // (when we remove the current block)
287
-
288
- const blocksData = omit(
289
- {
290
- ...properties[blocksFieldname],
291
- ...fromEntries(blocks),
292
- },
293
- blockProps.block,
294
- );
295
- const layoutData = {
296
- ...properties[blocksLayoutFieldname],
297
- items: [
298
- ...properties[blocksLayoutFieldname].items.slice(0, index),
299
- ...blockids,
300
- ...properties[blocksLayoutFieldname].items.slice(index),
301
- ].filter((id) => id !== blockProps.block),
302
- };
303
-
304
- // TODO: use onChangeFormData instead of this API style
305
- ReactDOM.unstable_batchedUpdates(() => {
306
- onChangeField(blocksFieldname, blocksData);
307
- onChangeField(blocksLayoutFieldname, layoutData);
308
- onSelectBlock(blockids[blockids.length - 1]);
309
- // resolve(blockids);
310
- // or rather this?
311
- Promise.resolve().then(resolve(blockids));
312
- });
313
- });
314
- }