@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,224 +0,0 @@
1
- import React from 'react';
2
- import { renderToStaticMarkup } from 'react-dom/server';
3
- import { useLocation } from 'react-router-dom';
4
- import { toast } from 'react-toastify';
5
- import { useIntl } from 'react-intl';
6
- import { useSelector } from 'react-redux';
7
- import { Node, Text } from 'slate';
8
- import cx from 'classnames';
9
- import { isEmpty, omit } from 'lodash';
10
- import { UniversalLink, Toast } from '@plone/volto/components';
11
- import { messages, addAppURL } from '@plone/volto/helpers';
12
- import useClipboard from '@plone/volto/hooks/clipboard/useClipboard';
13
- import config from '@plone/volto/registry';
14
- import linkSVG from '@plone/volto/icons/link.svg';
15
-
16
- import './less/slate.less';
17
-
18
- const OMITTED = ['editor', 'path'];
19
-
20
- // TODO: read, see if relevant
21
- // https://reactjs.org/docs/higher-order-components.html#dont-use-hocs-inside-the-render-method
22
- export const Element = ({ element, attributes = {}, extras, ...rest }) => {
23
- const { slate } = config.settings;
24
- const { elements } = slate;
25
- const El = elements[element.type] || elements['default'];
26
-
27
- const attrs = Object.assign(
28
- element.styleName ? { className: element.styleName } : {},
29
- ...Object.keys(attributes || {}).map((k) =>
30
- !isEmpty(attributes[k]) ? { [k]: attributes[k] } : {},
31
- ),
32
- );
33
- attrs.ref = attributes?.ref; // never remove the ref
34
-
35
- return (
36
- <El
37
- element={element}
38
- {...omit(rest, OMITTED)}
39
- attributes={attrs}
40
- extras={extras}
41
- />
42
- );
43
- };
44
-
45
- export const Leaf = ({ children, ...rest }) => {
46
- const { attributes, leaf, mode } = rest;
47
- let { leafs } = config.settings.slate;
48
-
49
- children = Object.keys(leafs).reduce((acc, name) => {
50
- return Object.keys(leaf).includes(name)
51
- ? leafs[name]({ children: acc })
52
- : acc;
53
- }, children);
54
-
55
- const classNames = {
56
- [`highlight-${leaf.highlightType}`]: mode !== 'view' && leaf.highlightType,
57
- 'highlight-selection': mode !== 'view' && leaf.isSelection,
58
- };
59
-
60
- // stylemenu support
61
- for (const prop in leaf) {
62
- if (prop.startsWith('style-')) {
63
- classNames[prop.substring(6)] = true;
64
- }
65
- }
66
-
67
- const klass = cx(classNames);
68
-
69
- return mode === 'view' ? (
70
- typeof children === 'string' ? (
71
- children.split('\n').map((t, i) => {
72
- // Softbreak support. Should do a plugin?
73
- return (
74
- <React.Fragment key={`${i}`}>
75
- {children.indexOf('\n') > -1 &&
76
- children.split('\n').length - 1 > i ? (
77
- <>
78
- {klass ? <span className={klass}>{t}</span> : t}
79
- <br />
80
- </>
81
- ) : klass ? (
82
- <span className={klass}>{t}</span>
83
- ) : (
84
- t
85
- )}
86
- </React.Fragment>
87
- );
88
- })
89
- ) : (
90
- <span className={klass}>{children}</span>
91
- )
92
- ) : (
93
- <span {...attributes} className={klass}>
94
- {children}
95
- </span>
96
- );
97
- };
98
-
99
- const serializeData = (node) => {
100
- return JSON.stringify({ type: node.type, data: node.data });
101
- };
102
-
103
- export const serializeNodes = (nodes, getAttributes, extras = {}) => {
104
- const editor = { children: nodes || [] };
105
-
106
- const _serializeNodes = (nodes) => {
107
- return (nodes || []).map(([node, path], i) => {
108
- return Text.isText(node) ? (
109
- <Leaf path={path} leaf={node} text={node} mode="view" key={path}>
110
- {node.text}
111
- </Leaf>
112
- ) : (
113
- <Element
114
- path={path}
115
- element={node}
116
- mode="view"
117
- key={path}
118
- data-slate-data={node.data ? serializeData(node) : null}
119
- attributes={getAttributes ? getAttributes(node, path) : null}
120
- extras={extras}
121
- >
122
- {_serializeNodes(Array.from(Node.children(editor, path)))}
123
- </Element>
124
- );
125
- });
126
- };
127
-
128
- return _serializeNodes(Array.from(Node.children(editor, [])));
129
- };
130
-
131
- /**
132
- * Get the concatenated text string of a node's content.
133
- *
134
- * Note that this WILL include spaces between block node leafs in contrary to
135
- * the original slate method. This function joins text of nodes with
136
- * separating spaces to produce a string for indexing purposes.
137
- *
138
- */
139
- const ConcatenatedString = (node) => {
140
- if (Text.isText(node)) {
141
- return node.text.trim();
142
- } else {
143
- return node.children.map(ConcatenatedString).join(' ');
144
- }
145
- };
146
-
147
- /**
148
- * @function serializeNodesToText
149
- *
150
- * @param {Array[Node]} nodes
151
- *
152
- * @returns {string}
153
- */
154
- export const serializeNodesToText = (nodes) => {
155
- return nodes.map(ConcatenatedString).join('\n');
156
- };
157
-
158
- export const serializeNodesToHtml = (nodes) =>
159
- renderToStaticMarkup(serializeNodes(nodes));
160
-
161
- export const renderLinkElement = (tagName) => {
162
- function LinkElement({
163
- attributes,
164
- children,
165
- mode = 'edit',
166
- className = null,
167
- }) {
168
- const { slate = {} } = config.settings;
169
- const Tag = tagName;
170
- const slug = attributes.id || '';
171
- const location = useLocation();
172
- const token = useSelector((state) => state.userSession.token);
173
- const appPathname = addAppURL(location.pathname);
174
- // eslint-disable-next-line no-unused-vars
175
- const [copied, copy, setCopied] = useClipboard(
176
- appPathname.concat(`#${slug}`),
177
- );
178
- const intl = useIntl();
179
- return !token || slate.useLinkedHeadings === false ? (
180
- <Tag {...attributes} className={className} tabIndex={0}>
181
- {children}
182
- </Tag>
183
- ) : (
184
- <Tag {...attributes} className={className} tabIndex={0}>
185
- {children}
186
- {mode === 'view' && slug && (
187
- <UniversalLink
188
- className="anchor"
189
- aria-hidden="true"
190
- tabIndex={-1}
191
- href={`#${slug}`}
192
- >
193
- <style>
194
- {/* Prettify the unstyled flash of the link icon on development */}
195
- {`
196
- a.anchor svg {
197
- height: var(--anchor-svg-height, 24px);
198
- }
199
- `}
200
- </style>
201
- <svg
202
- {...linkSVG.attributes}
203
- dangerouslySetInnerHTML={{ __html: linkSVG.content }}
204
- height={null}
205
- onClick={() => {
206
- copy();
207
-
208
- toast.info(
209
- <Toast
210
- info
211
- title={intl.formatMessage(messages.success)}
212
- content={intl.formatMessage(messages.urlClipboardCopy)}
213
- />,
214
- );
215
- }}
216
- ></svg>
217
- </UniversalLink>
218
- )}
219
- </Tag>
220
- );
221
- }
222
- LinkElement.displayName = `${tagName}LinkElement`;
223
- return LinkElement;
224
- };
@@ -1,11 +0,0 @@
1
- import cx from 'classnames';
2
- import React from 'react';
3
- import Menu from './Menu';
4
-
5
- const BasicToolbar = React.forwardRef(({ className, ...props }, ref) => {
6
- return (
7
- <Menu {...props} ref={ref} className={cx(className, 'slate-toolbar')} />
8
- );
9
- });
10
-
11
- export default BasicToolbar;
@@ -1,31 +0,0 @@
1
- import React from 'react';
2
- import { useSlate } from 'slate-react';
3
- import { isBlockActive, toggleBlock } from '@plone/volto-slate/utils';
4
-
5
- import ToolbarButton from './ToolbarButton';
6
-
7
- const BlockButton = ({ format, icon, allowedChildren, ...props }) => {
8
- const editor = useSlate();
9
-
10
- const isActive = isBlockActive(editor, format);
11
-
12
- const handleMouseDown = React.useCallback(
13
- (event) => {
14
- event.preventDefault();
15
- toggleBlock(editor, format, allowedChildren);
16
- // console.log('toggled', format, editor);
17
- },
18
- [editor, format, allowedChildren], // , isActive
19
- );
20
-
21
- return (
22
- <ToolbarButton
23
- {...props}
24
- active={isActive}
25
- onMouseDown={handleMouseDown}
26
- icon={icon}
27
- />
28
- );
29
- };
30
-
31
- export default BlockButton;
@@ -1,21 +0,0 @@
1
- import React from 'react';
2
- import { useSlate } from 'slate-react';
3
- import { clearFormatting } from '@plone/volto-slate/utils';
4
-
5
- import ToolbarButton from './ToolbarButton';
6
-
7
- const ClearFormattingButton = ({ icon, ...props }) => {
8
- const editor = useSlate();
9
-
10
- const handleMouseDown = React.useCallback(
11
- (event) => {
12
- event.preventDefault();
13
- clearFormatting(editor);
14
- },
15
- [editor],
16
- );
17
-
18
- return <ToolbarButton {...props} onMouseDown={handleMouseDown} icon={icon} />;
19
- };
20
-
21
- export default ClearFormattingButton;
@@ -1,18 +0,0 @@
1
- import React from 'react';
2
-
3
- import BasicToolbar from './BasicToolbar';
4
- import Expando from './Expando';
5
-
6
- const ExpandedToolbar = React.forwardRef(
7
- ({ className, toggleButton, children, ...props }, ref) => {
8
- return (
9
- <BasicToolbar {...props} className={className} ref={ref}>
10
- {children}
11
- <Expando />
12
- {toggleButton}
13
- </BasicToolbar>
14
- );
15
- },
16
- );
17
-
18
- export default ExpandedToolbar;
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
-
3
- const Expando = (props) => <div className="expando"> </div>;
4
-
5
- export default Expando;
@@ -1,73 +0,0 @@
1
- import React from 'react'; // , useState
2
- import SlateToolbar from './SlateToolbar';
3
- import SlateContextToolbar from './SlateContextToolbar';
4
- import config from '@plone/volto/registry';
5
- import { hasRangeSelection } from '@plone/volto-slate/utils';
6
- import { ReactEditor } from 'slate-react';
7
- import cx from 'classnames';
8
-
9
- /**
10
- * The main Slate toolbar. All the others are just wrappers, UI or used here
11
- */
12
- const InlineToolbar = (props) => {
13
- const {
14
- editor,
15
- className,
16
- showExpandedToolbar,
17
- setShowExpandedToolbar,
18
- } = props;
19
-
20
- const slate = props.slateSettings || config.settings.slate;
21
-
22
- const [showMainToolbar, setShowMainToolbar] = React.useState(
23
- !!(editor.selection && hasRangeSelection(editor)),
24
- );
25
-
26
- React.useEffect(() => {
27
- let el;
28
- try {
29
- el = ReactEditor.toDOMNode(editor, editor);
30
- } catch {
31
- return;
32
- }
33
- const toggleToolbar = () => {
34
- const selection = window.getSelection();
35
- const { activeElement } = window.document;
36
- if (activeElement !== el) return;
37
- if (!selection.isCollapsed && !showMainToolbar) {
38
- setShowMainToolbar(true);
39
- } else if (selection.isCollapsed && showMainToolbar) {
40
- setShowMainToolbar(false);
41
- }
42
- };
43
- window.document.addEventListener('selectionchange', toggleToolbar);
44
- return () => document.removeEventListener('selectionchange', toggleToolbar);
45
- }, [editor, showMainToolbar]);
46
-
47
- const showContextToolbar =
48
- slate.contextToolbarButtons.map((plug) => plug(editor)).filter((c) => !!c)
49
- .length > 0;
50
-
51
- return (
52
- <>
53
- <SlateToolbar
54
- className={cx(className, {
55
- upper: showContextToolbar,
56
- })}
57
- selected={true}
58
- enableExpando={slate.enableExpandedToolbar}
59
- showExpandedToolbar={showExpandedToolbar}
60
- setShowExpandedToolbar={setShowExpandedToolbar}
61
- show={showMainToolbar}
62
- slateSettings={slate}
63
- />
64
- <SlateContextToolbar
65
- editor={editor}
66
- plugins={slate.contextToolbarButtons}
67
- show={showContextToolbar}
68
- />
69
- </>
70
- );
71
- };
72
-
73
- export default InlineToolbar;
@@ -1,23 +0,0 @@
1
- import React from 'react';
2
- import { useSlate } from 'slate-react';
3
-
4
- import { isMarkActive, toggleMark } from '@plone/volto-slate/utils';
5
- import ToolbarButton from './ToolbarButton';
6
-
7
- const MarkButton = ({ format, icon, ...props }) => {
8
- const editor = useSlate();
9
-
10
- return (
11
- <ToolbarButton
12
- {...props}
13
- active={isMarkActive(editor, format)}
14
- onMouseDown={(event) => {
15
- event.preventDefault();
16
- toggleMark(editor, format);
17
- }}
18
- icon={icon}
19
- />
20
- );
21
- };
22
-
23
- export default MarkButton;
@@ -1,30 +0,0 @@
1
- import React from 'react';
2
- import { useSlate } from 'slate-react';
3
- import { isBlockActive, toggleInlineFormat } from '@plone/volto-slate/utils';
4
-
5
- import ToolbarButton from './ToolbarButton';
6
-
7
- const MarkElementButton = ({ format, icon, ...props }) => {
8
- const editor = useSlate();
9
-
10
- const isActive = isBlockActive(editor, format);
11
-
12
- const handleMouseDown = React.useCallback(
13
- (event) => {
14
- event.preventDefault();
15
- toggleInlineFormat(editor, format);
16
- },
17
- [editor, format], // , isActive
18
- );
19
-
20
- return (
21
- <ToolbarButton
22
- {...props}
23
- active={isActive}
24
- onMouseDown={handleMouseDown}
25
- icon={icon}
26
- />
27
- );
28
- };
29
-
30
- export default MarkElementButton;
@@ -1,13 +0,0 @@
1
- import cx from 'classnames';
2
- import React from 'react';
3
- import { Button } from 'semantic-ui-react';
4
-
5
- const Menu = React.forwardRef(({ className, ...props }, ref) => {
6
- return (
7
- <div className={cx(className, 'slate-menu')} ref={ref}>
8
- <Button.Group {...props} />
9
- </div>
10
- );
11
- });
12
-
13
- export default Menu;
@@ -1,32 +0,0 @@
1
- import React from 'react';
2
- import { Portal } from 'react-portal';
3
-
4
- import BasicToolbar from './BasicToolbar';
5
-
6
- const PositionedToolbar = ({ toggleButton, className, children, position }) => {
7
- // TODO: "position" is actually an object like `{ style: {} }`
8
- // To be renamed as "attributes" or "attrs"
9
- const ref = React.useRef();
10
-
11
- React.useEffect(() => {
12
- const el = ref.current;
13
-
14
- const { style } = position || {};
15
- const left = `${Math.max(style.left - el.offsetWidth / 2, 0)}px`;
16
- const top = `${style.top - el.offsetHeight}px`;
17
-
18
- el.style.opacity = style.opacity;
19
- el.style.top = top;
20
- el.style.left = left;
21
- });
22
-
23
- return (
24
- <Portal>
25
- <BasicToolbar className={`slate-inline-toolbar ${className}`} ref={ref}>
26
- {children}
27
- </BasicToolbar>
28
- </Portal>
29
- );
30
- };
31
-
32
- export default PositionedToolbar;
@@ -1,7 +0,0 @@
1
- import React from 'react';
2
-
3
- const Separator = () => {
4
- return <div className="toolbar-separator" />;
5
- };
6
-
7
- export default Separator;
@@ -1,13 +0,0 @@
1
- import React from 'react';
2
- import Toolbar from './Toolbar';
3
-
4
- // A toolbar that conditionally renders itself based on the presense of
5
- // children
6
- export default function SlateContextToolbar({ editor, plugins, show }) {
7
- if (!show) {
8
- return null;
9
- }
10
-
11
- const components = plugins.map((plug) => plug(editor)).filter((c) => !!c);
12
- return components.length ? <Toolbar>{components}</Toolbar> : '';
13
- }
@@ -1,96 +0,0 @@
1
- /**
2
- * This is the main toolbar, which:
3
- *
4
- * - appears only when a range selection exists
5
- * - can be toggled between expanded and hovering state
6
- *
7
- */
8
-
9
- import React from 'react';
10
- import cx from 'classnames';
11
-
12
- import toggleIcon from '@plone/volto/icons/more.svg';
13
-
14
- import Toolbar from './Toolbar';
15
- import ExpandedToolbar from './ExpandedToolbar';
16
- import ToolbarButton from './ToolbarButton';
17
-
18
- import config from '@plone/volto/registry';
19
-
20
- const SlateToolbar = (props) => {
21
- const {
22
- selected,
23
- showExpandedToolbar,
24
- setShowExpandedToolbar,
25
- className,
26
- enableExpando = false,
27
- show,
28
- } = props;
29
-
30
- const slate = props.slateSettings || config.settings.slate;
31
-
32
- const { toolbarButtons, expandedToolbarButtons, buttons } = slate;
33
-
34
- function renderButton(name, index) {
35
- const Btn = buttons[name];
36
- if (!Btn) {
37
- // eslint-disable-next-line
38
- console.warn('Button not found:', name);
39
- return null;
40
- }
41
- // using also name because some buttons can be like "Separator"
42
- return <Btn key={`${name}-${index}`} />;
43
- }
44
-
45
- return (
46
- <>
47
- {!showExpandedToolbar && (
48
- <Toolbar
49
- show={show}
50
- toggleButton={
51
- enableExpando && (
52
- <ToolbarButton
53
- title="More..."
54
- onMouseDown={(event) => {
55
- setShowExpandedToolbar(!showExpandedToolbar);
56
- event.preventDefault();
57
- }}
58
- icon={toggleIcon}
59
- active={showExpandedToolbar}
60
- />
61
- )
62
- }
63
- className={className}
64
- >
65
- {toolbarButtons?.map(renderButton)}
66
- </Toolbar>
67
- )}
68
- <div
69
- className={cx('toolbar-wrapper', {
70
- active: showExpandedToolbar && selected,
71
- })}
72
- >
73
- {selected && showExpandedToolbar && (
74
- <ExpandedToolbar
75
- show={show}
76
- toggleButton={
77
- <ToolbarButton
78
- title="Less..."
79
- onMouseDown={(event) => {
80
- setShowExpandedToolbar(!showExpandedToolbar);
81
- event.preventDefault();
82
- }}
83
- icon={toggleIcon}
84
- active={showExpandedToolbar}
85
- />
86
- }
87
- >
88
- {expandedToolbarButtons?.map(renderButton)}
89
- </ExpandedToolbar>
90
- )}
91
- </div>
92
- </>
93
- );
94
- };
95
-
96
- export default SlateToolbar;