@plone/volto 17.0.0-alpha.8 → 17.0.0

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 (365) hide show
  1. package/.eslintrc +26 -3
  2. package/CHANGELOG.md +488 -5
  3. package/CONTRIBUTING.md +5 -1
  4. package/README.md +12 -9
  5. package/addon-registry.js +10 -1
  6. package/create-addons-loader.js +1 -1
  7. package/cypress/support/commands.js +70 -14
  8. package/cypress/support/e2e.js +1 -2
  9. package/cypress/support/volto-slate.js +4 -5
  10. package/cypress.config.js +1 -0
  11. package/docker-compose.yml +1 -1
  12. package/locales/ca/LC_MESSAGES/volto.po +276 -53
  13. package/locales/ca.json +1 -1
  14. package/locales/de/LC_MESSAGES/volto.po +284 -61
  15. package/locales/de.json +1 -1
  16. package/locales/en/LC_MESSAGES/volto.po +274 -51
  17. package/locales/en.json +1 -1
  18. package/locales/es/LC_MESSAGES/volto.po +313 -90
  19. package/locales/es.json +1 -1
  20. package/locales/eu/LC_MESSAGES/volto.po +275 -52
  21. package/locales/eu.json +1 -1
  22. package/locales/fi/LC_MESSAGES/volto.po +275 -52
  23. package/locales/fi.json +1 -1
  24. package/locales/fr/LC_MESSAGES/volto.po +276 -53
  25. package/locales/fr.json +1 -1
  26. package/locales/it/LC_MESSAGES/volto.po +469 -246
  27. package/locales/it.json +1 -1
  28. package/locales/ja/LC_MESSAGES/volto.po +275 -52
  29. package/locales/ja.json +1 -1
  30. package/locales/nl/LC_MESSAGES/volto.po +276 -53
  31. package/locales/nl.json +1 -1
  32. package/locales/pt/LC_MESSAGES/volto.po +276 -53
  33. package/locales/pt.json +1 -1
  34. package/locales/pt_BR/LC_MESSAGES/volto.po +309 -86
  35. package/locales/pt_BR.json +1 -1
  36. package/locales/ro/LC_MESSAGES/volto.po +276 -53
  37. package/locales/ro.json +1 -1
  38. package/locales/volto.pot +279 -52
  39. package/locales/zh_CN/LC_MESSAGES/volto.po +276 -53
  40. package/locales/zh_CN.json +1 -1
  41. package/package.json +44 -34
  42. package/packages/volto-slate/package.json +1 -1
  43. package/packages/volto-slate/src/actions/index.js +1 -1
  44. package/packages/volto-slate/src/blocks/Table/TableBlockEdit.jsx +21 -212
  45. package/packages/volto-slate/src/blocks/Table/schema.js +122 -0
  46. package/packages/volto-slate/src/blocks/Text/DefaultTextBlockEditor.jsx +8 -3
  47. package/packages/volto-slate/src/blocks/Text/TextBlockView.jsx +21 -16
  48. package/packages/volto-slate/src/blocks/Text/extensions/withDeserializers.js +3 -1
  49. package/packages/volto-slate/src/blocks/Text/index.js +10 -7
  50. package/packages/volto-slate/src/editor/config.jsx +5 -4
  51. package/packages/volto-slate/src/editor/index.js +4 -4
  52. package/packages/volto-slate/src/editor/less/slate.less +28 -0
  53. package/packages/volto-slate/src/editor/plugins/Link/render.jsx +5 -6
  54. package/packages/volto-slate/src/editor/plugins/StyleMenu/StyleMenu.jsx +14 -4
  55. package/packages/volto-slate/src/editor/plugins/StyleMenu/utils.js +14 -5
  56. package/packages/volto-slate/src/editor/render.jsx +77 -8
  57. package/packages/volto-slate/src/editor/ui/SlateContextToolbar.jsx +2 -2
  58. package/packages/volto-slate/src/editor/ui/index.js +15 -15
  59. package/packages/volto-slate/src/index.js +2 -2
  60. package/packages/volto-slate/src/utils/blocks.js +7 -0
  61. package/packages/volto-slate/src/widgets/RichTextWidget.jsx +15 -8
  62. package/razzle.config.js +4 -6
  63. package/src/actions/index.js +4 -0
  64. package/src/actions/navroot/navroot.js +16 -0
  65. package/src/actions/navroot/navroot.test.js +15 -0
  66. package/src/actions/relations/rebuild.js +7 -7
  67. package/src/actions/relations/relations.js +17 -0
  68. package/src/actions/site/site.js +16 -0
  69. package/src/actions/site/site.test.js +15 -0
  70. package/src/actions/userSession/userSession.js +17 -1
  71. package/src/components/index.js +194 -192
  72. package/src/components/manage/Actions/Actions.jsx +133 -243
  73. package/src/components/manage/Add/Add.jsx +7 -8
  74. package/src/components/manage/AnchorPlugin/index.jsx +2 -2
  75. package/src/components/manage/AnchorPlugin/utils/EditorUtils.js +3 -1
  76. package/src/components/manage/Blocks/Block/BlocksForm.jsx +19 -2
  77. package/src/components/manage/Blocks/Block/Edit.jsx +1 -1
  78. package/src/components/manage/Blocks/Block/Settings.jsx +2 -0
  79. package/src/components/manage/Blocks/Block/Settings.test.jsx +92 -0
  80. package/src/components/manage/Blocks/Block/Style.jsx +2 -2
  81. package/src/components/manage/Blocks/Container/Data.jsx +32 -0
  82. package/src/components/manage/Blocks/Container/Edit.jsx +177 -0
  83. package/src/components/manage/Blocks/Container/EditBlockWrapper.jsx +121 -0
  84. package/src/components/manage/Blocks/Container/NewBlockAddButton.jsx +84 -0
  85. package/src/components/manage/Blocks/Container/SimpleContainerToolbar.jsx +54 -0
  86. package/src/components/manage/Blocks/Grid/Edit.jsx +47 -0
  87. package/src/components/manage/Blocks/Grid/View.jsx +43 -0
  88. package/src/components/manage/Blocks/Grid/adapter.js +14 -0
  89. package/src/components/manage/Blocks/Grid/grid-1.svg +6 -0
  90. package/src/components/manage/Blocks/Grid/grid-2.svg +9 -0
  91. package/src/components/manage/Blocks/Grid/grid-3.svg +10 -0
  92. package/src/components/manage/Blocks/Grid/grid-4.svg +11 -0
  93. package/src/components/manage/Blocks/Grid/schema.js +35 -0
  94. package/src/components/manage/Blocks/Grid/templates.js +47 -0
  95. package/src/components/manage/Blocks/HTML/Edit.jsx +8 -8
  96. package/src/components/manage/Blocks/HeroImageLeft/Edit.jsx +36 -26
  97. package/src/components/manage/Blocks/Image/Edit.jsx +51 -12
  98. package/src/components/manage/Blocks/Image/Edit.test.jsx +2 -0
  99. package/src/components/manage/Blocks/Image/ImageSidebar.jsx +66 -16
  100. package/src/components/manage/Blocks/Image/View.jsx +26 -5
  101. package/src/components/manage/Blocks/Image/View.test.jsx +20 -0
  102. package/src/components/manage/Blocks/Image/schema.js +17 -10
  103. package/src/components/manage/Blocks/Image/utils.js +14 -0
  104. package/src/components/manage/Blocks/LeadImage/Edit.jsx +32 -10
  105. package/src/components/manage/Blocks/LeadImage/Edit.test.jsx +11 -1
  106. package/src/components/manage/Blocks/LeadImage/LeadImageSidebar.jsx +28 -9
  107. package/src/components/manage/Blocks/LeadImage/LeadImageSidebar.test.jsx +8 -2
  108. package/src/components/manage/Blocks/LeadImage/View.jsx +50 -38
  109. package/src/components/manage/Blocks/LeadImage/View.test.jsx +11 -1
  110. package/src/components/manage/Blocks/Listing/DefaultTemplate.jsx +18 -3
  111. package/src/components/manage/Blocks/Listing/ListingBody.jsx +32 -8
  112. package/src/components/manage/Blocks/Listing/ListingBody.test.jsx +20 -0
  113. package/src/components/manage/Blocks/Listing/SummaryTemplate.jsx +1 -1
  114. package/src/components/manage/Blocks/Listing/getAsyncData.js +3 -5
  115. package/src/components/manage/Blocks/Listing/withQuerystringResults.jsx +27 -17
  116. package/src/components/manage/Blocks/Maps/Edit.jsx +135 -209
  117. package/src/components/manage/Blocks/Maps/Edit.test.jsx +1 -2
  118. package/src/components/manage/Blocks/Maps/View.test.jsx +1 -2
  119. package/src/components/manage/Blocks/Search/SearchBlockView.jsx +3 -2
  120. package/src/components/manage/Blocks/Search/components/Facets.jsx +66 -7
  121. package/src/components/manage/Blocks/Search/components/FilterList.jsx +4 -6
  122. package/src/components/manage/Blocks/Search/components/SearchInput.jsx +9 -2
  123. package/src/components/manage/Blocks/Search/components/SelectFacet.jsx +2 -9
  124. package/src/components/manage/Blocks/Search/components/index.js +13 -13
  125. package/src/components/manage/Blocks/Search/hocs/index.js +2 -2
  126. package/src/components/manage/Blocks/Search/hocs/withQueryString.jsx +5 -2
  127. package/src/components/manage/Blocks/Search/hocs/withSearch.jsx +70 -36
  128. package/src/components/manage/Blocks/Search/layout/LeftColumnFacets.jsx +17 -5
  129. package/src/components/manage/Blocks/Search/layout/RightColumnFacets.jsx +17 -5
  130. package/src/components/manage/Blocks/Search/layout/TopSideFacets.jsx +21 -5
  131. package/src/components/manage/Blocks/Search/schema.js +29 -14
  132. package/src/components/manage/Blocks/Table/Cell.jsx +2 -3
  133. package/src/components/manage/Blocks/Teaser/Body.jsx +0 -1
  134. package/src/components/manage/Blocks/Teaser/DefaultBody.jsx +5 -10
  135. package/src/components/manage/Blocks/Teaser/schema.js +5 -0
  136. package/src/components/manage/Blocks/Text/Edit.jsx +2 -3
  137. package/src/components/manage/Blocks/Title/View.jsx +0 -23
  138. package/src/components/manage/Blocks/Title/View.test.jsx +16 -1
  139. package/src/components/manage/Blocks/ToC/Schema.jsx +40 -7
  140. package/src/components/manage/Blocks/ToC/View.jsx +84 -14
  141. package/src/components/manage/Blocks/ToC/variations/DefaultTocRenderer.jsx +8 -3
  142. package/src/components/manage/Blocks/ToC/variations/DefaultTocRenderer.test.jsx +44 -0
  143. package/src/components/manage/Blocks/ToC/variations/HorizontalMenu.jsx +149 -10
  144. package/src/components/manage/Blocks/ToC/variations/index.js +3 -1
  145. package/src/components/manage/Contents/Contents.jsx +285 -114
  146. package/src/components/manage/Contents/ContentsPropertiesModal.jsx +90 -166
  147. package/src/components/manage/Contents/ContentsRenameModal.jsx +88 -139
  148. package/src/components/manage/Contents/ContentsRenameModal.stories.jsx +61 -0
  149. package/src/components/manage/Contents/ContentsTagsModal.jsx +83 -130
  150. package/src/components/manage/Contents/ContentsTagsModal.stories.jsx +68 -0
  151. package/src/components/manage/Contents/ContentsUploadModal.jsx +11 -7
  152. package/src/components/manage/Contents/ContentsWorkflowModal.jsx +87 -154
  153. package/src/components/manage/Controlpanels/Aliases.jsx +4 -12
  154. package/src/components/manage/Controlpanels/Groups/GroupsControlpanel.jsx +65 -38
  155. package/src/components/manage/Controlpanels/Groups/RenderGroups.jsx +2 -2
  156. package/src/components/manage/Controlpanels/Relations/BrokenRelations.jsx +38 -13
  157. package/src/components/manage/Controlpanels/Relations/Relations.jsx +5 -5
  158. package/src/components/manage/Controlpanels/Relations/RelationsListing.jsx +8 -7
  159. package/src/components/manage/Controlpanels/Relations/RelationsMatrix.jsx +68 -68
  160. package/src/components/manage/Controlpanels/Rules/AddRule.jsx +3 -10
  161. package/src/components/manage/Controlpanels/Rules/EditRule.jsx +1 -1
  162. package/src/components/manage/Controlpanels/UndoControlpanel.jsx +6 -9
  163. package/src/components/manage/Controlpanels/Users/RenderUsers.jsx +97 -7
  164. package/src/components/manage/Controlpanels/Users/UsersControlpanel.jsx +127 -99
  165. package/src/components/manage/Delete/Delete.jsx +96 -171
  166. package/src/components/manage/Diff/DiffField.jsx +25 -1
  167. package/src/components/manage/DragDropList/DragDropList.jsx +18 -13
  168. package/src/components/manage/Form/BlockDataForm.jsx +3 -2
  169. package/src/components/manage/Form/BlockDataForm.test.jsx +51 -17
  170. package/src/components/manage/Form/Form.jsx +7 -6
  171. package/src/components/manage/Form/InlineForm.test.jsx +16 -14
  172. package/src/components/manage/History/History.jsx +11 -1
  173. package/src/components/manage/LinksToItem/LinksToItem.jsx +209 -0
  174. package/src/components/manage/LinksToItem/LinksToItem.test.jsx +100 -0
  175. package/src/components/manage/LockingToastsFactory/LockingToastsFactory.jsx +1 -2
  176. package/src/components/manage/Messages/Messages.jsx +32 -99
  177. package/src/components/manage/Messages/Messages.test.jsx +0 -1
  178. package/src/components/manage/Preferences/ChangePassword.jsx +2 -2
  179. package/src/components/manage/Sharing/Sharing.jsx +62 -22
  180. package/src/components/manage/Sidebar/AlignBlock.jsx +1 -1
  181. package/src/components/manage/Sidebar/Sidebar.jsx +139 -220
  182. package/src/components/manage/TemplateChooser/TemplateChooser.jsx +38 -0
  183. package/src/components/manage/TemplateChooser/TemplateChooser.test.jsx +34 -0
  184. package/src/components/manage/TemplateChooser/template.svg +10 -0
  185. package/src/components/manage/Toast/Toast.jsx +1 -1
  186. package/src/components/manage/Toolbar/More.jsx +17 -2
  187. package/src/components/manage/Toolbar/PersonalTools.jsx +97 -155
  188. package/src/components/manage/Toolbar/Toolbar.jsx +2 -2
  189. package/src/components/manage/UniversalLink/UniversalLink.jsx +6 -12
  190. package/src/components/manage/UniversalLink/UniversalLink.test.jsx +37 -0
  191. package/src/components/manage/Widgets/AlignWidget.jsx +2 -4
  192. package/src/components/manage/Widgets/ArrayWidget.jsx +3 -1
  193. package/src/components/manage/Widgets/ArrayWidget.test.jsx +45 -1
  194. package/src/components/manage/Widgets/ColorPickerWidget.jsx +6 -1
  195. package/src/components/manage/Widgets/ColorPickerWidget.test.jsx +9 -7
  196. package/src/components/manage/Widgets/DatetimeWidget.jsx +2 -8
  197. package/src/components/manage/Widgets/FileWidget.jsx +2 -1
  198. package/src/components/manage/Widgets/FormFieldWrapper.jsx +1 -1
  199. package/src/components/manage/Widgets/IdWidget.jsx +1 -2
  200. package/src/components/manage/Widgets/ObjectBrowserWidget.jsx +2 -9
  201. package/src/components/manage/Widgets/RecurrenceWidget/RecurrenceWidget.jsx +3 -10
  202. package/src/components/manage/Widgets/RecurrenceWidget/WeekdayOfTheMonthIndexField.jsx +4 -4
  203. package/src/components/manage/Widgets/RegistryImageWidget.jsx +210 -0
  204. package/src/components/manage/Widgets/RegistryImageWidget.test.jsx +91 -0
  205. package/src/components/manage/Widgets/SchemaWidget.jsx +6 -9
  206. package/src/components/manage/Widgets/SelectUtils.js +1 -1
  207. package/src/components/manage/Widgets/SelectWidget.jsx +15 -1
  208. package/src/components/manage/Widgets/SelectWidget.test.jsx +45 -1
  209. package/src/components/manage/Widgets/WysiwygWidget.jsx +2 -9
  210. package/src/components/manage/Workflow/Workflow.jsx +75 -184
  211. package/src/components/theme/Anontools/Anontools.jsx +44 -72
  212. package/src/components/theme/Anontools/Anontools.stories.jsx +16 -6
  213. package/src/components/theme/Anontools/Anontools.test.jsx +16 -2
  214. package/src/components/theme/Breadcrumbs/Breadcrumbs.jsx +52 -99
  215. package/src/components/theme/Breadcrumbs/Breadcrumbs.stories.jsx +14 -13
  216. package/src/components/theme/Comments/Comment.stories.jsx +84 -0
  217. package/src/components/theme/Comments/CommentEditModal.jsx +63 -115
  218. package/src/components/theme/Comments/Comments.jsx +268 -380
  219. package/src/components/theme/Component/Component.jsx +1 -1
  220. package/src/components/theme/ContactForm/ContactForm.jsx +108 -192
  221. package/src/components/theme/ContactForm/ContactForm.stories.jsx +1 -1
  222. package/src/components/theme/ContactForm/ContactForm.test.jsx +2 -3
  223. package/src/components/theme/ContentMetadataTags/ContentMetadataTags.jsx +41 -3
  224. package/src/components/theme/Error/ServerError.jsx +29 -0
  225. package/src/components/theme/Header/Header.jsx +37 -63
  226. package/src/components/theme/Header/Header.test.jsx +18 -0
  227. package/src/components/theme/Image/Image.jsx +96 -0
  228. package/src/components/theme/Image/Image.test.jsx +125 -0
  229. package/src/components/theme/Login/Login.jsx +160 -243
  230. package/src/components/theme/Logo/Logo.Multilingual.test.jsx +131 -1
  231. package/src/components/theme/Logo/Logo.jsx +35 -27
  232. package/src/components/theme/Logo/Logo.test.jsx +135 -1
  233. package/src/components/theme/Logout/Logout.jsx +36 -83
  234. package/src/components/theme/Navigation/Navigation.jsx +86 -171
  235. package/src/components/theme/NotFound/NotFound.jsx +55 -41
  236. package/src/components/theme/PasswordReset/PasswordReset.jsx +7 -5
  237. package/src/components/theme/PasswordReset/RequestPasswordReset.jsx +95 -170
  238. package/src/components/theme/PreviewImage/PreviewImage.jsx +31 -15
  239. package/src/components/theme/PreviewImage/PreviewImage.test.js +53 -13
  240. package/src/components/theme/Register/Register.jsx +2 -4
  241. package/src/components/theme/Search/SearchTags.jsx +30 -60
  242. package/src/components/theme/SearchWidget/SearchWidget.jsx +49 -97
  243. package/src/components/theme/SearchWidget/SearchWidget.test.jsx +8 -0
  244. package/src/components/theme/Sitemap/Sitemap.jsx +24 -13
  245. package/src/components/theme/Sitemap/Sitemap.test.jsx +23 -2
  246. package/src/components/theme/TsTest/TsTest.test.tsx +11 -0
  247. package/src/components/theme/TsTest/TsTest.tsx +15 -0
  248. package/src/components/theme/View/AlbumView.jsx +21 -16
  249. package/src/components/theme/View/EventView.jsx +36 -25
  250. package/src/components/theme/View/FileView.jsx +23 -18
  251. package/src/components/theme/View/ImageView.jsx +40 -32
  252. package/src/components/theme/View/ImageView.test.jsx +4 -0
  253. package/src/components/theme/View/LinkView.jsx +53 -78
  254. package/src/components/theme/View/ListingView.jsx +36 -28
  255. package/src/components/theme/View/NewsItemView.jsx +16 -17
  256. package/src/components/theme/View/RenderBlocks.jsx +56 -21
  257. package/src/components/theme/View/RenderEmptyBlock.jsx +5 -0
  258. package/src/components/theme/View/SummaryView.jsx +49 -39
  259. package/src/components/theme/View/TabularView.jsx +59 -53
  260. package/src/components/theme/View/View.jsx +2 -0
  261. package/src/components/theme/Widgets/ImageWidget.stories.jsx +1 -2
  262. package/src/config/Blocks.jsx +46 -0
  263. package/src/config/Components.jsx +3 -1
  264. package/src/config/ControlPanels.js +0 -1
  265. package/src/config/Loadables.jsx +1 -1
  266. package/src/config/NonContentRoutes.jsx +1 -0
  267. package/src/config/RichTextEditor/Blocks.jsx +4 -5
  268. package/src/config/RichTextEditor/FromHTML.jsx +2 -2
  269. package/src/config/RichTextEditor/Plugins.jsx +2 -3
  270. package/src/config/RichTextEditor/Styles.jsx +1 -1
  271. package/src/config/RichTextEditor/ToHTML.jsx +12 -10
  272. package/src/config/RichTextEditor/index.js +2 -3
  273. package/src/config/Views.jsx +6 -4
  274. package/src/config/Widgets.jsx +3 -0
  275. package/src/config/index.js +36 -2
  276. package/src/config/server.js +2 -0
  277. package/src/constants/ActionTypes.js +4 -0
  278. package/src/constants/Indexes.js +3 -1
  279. package/src/express-middleware/devproxy.js +1 -1
  280. package/src/express-middleware/files.js +11 -9
  281. package/src/express-middleware/images.js +12 -5
  282. package/src/express-middleware/ok.js +16 -0
  283. package/src/express-middleware/robotstxt.js +1 -1
  284. package/src/express-middleware/sitemap.js +1 -1
  285. package/src/express-middleware/static.js +3 -3
  286. package/src/helpers/Api/Api.js +1 -1
  287. package/src/helpers/Blocks/Blocks.js +52 -6
  288. package/src/helpers/Blocks/Blocks.test.js +92 -13
  289. package/src/helpers/Extensions/index.js +2 -1
  290. package/src/helpers/Extensions/withBlockSchemaEnhancer.js +63 -61
  291. package/src/helpers/Extensions/withBlockSchemaEnhancer.test.js +145 -0
  292. package/src/helpers/FormValidation/FormValidation.js +37 -7
  293. package/src/helpers/FormValidation/FormValidation.test.js +32 -0
  294. package/src/helpers/Html/Html.jsx +2 -8
  295. package/src/helpers/Loadable/__mocks__/Loadable.js +18 -18
  296. package/src/helpers/MessageLabels/MessageLabels.js +39 -4
  297. package/src/helpers/ScrollToTop/ScrollToTop.jsx +5 -3
  298. package/src/helpers/Site/index.js +21 -0
  299. package/src/helpers/Url/Url.js +22 -1
  300. package/src/helpers/Url/Url.test.js +41 -0
  301. package/src/helpers/Utils/UseDetectClickOutside.stories.jsx +190 -0
  302. package/src/helpers/Utils/Utils.js +35 -0
  303. package/src/helpers/Utils/Utils.test.js +13 -0
  304. package/src/helpers/Utils/usePagination.js +67 -14
  305. package/src/helpers/Utils/usePagination.test.js +115 -0
  306. package/src/helpers/index.js +15 -8
  307. package/src/hooks/client/useClient.js +11 -0
  308. package/src/hooks/clipboard/useClipboard.js +26 -0
  309. package/src/hooks/index.js +2 -0
  310. package/src/icons/grid-block.svg +11 -0
  311. package/src/middleware/api.js +203 -173
  312. package/src/middleware/blacklistRoutes.js +25 -22
  313. package/src/middleware/index.js +2 -2
  314. package/src/middleware/storeProtectLoadUtils.js +61 -62
  315. package/src/middleware/storeProtectLoadUtils.test.js +47 -43
  316. package/src/reducers/actions/actions.js +7 -5
  317. package/src/reducers/actions/actions.test.js +70 -0
  318. package/src/reducers/content/content.test.js +4 -4
  319. package/src/reducers/index.js +4 -0
  320. package/src/reducers/navigation/navigation.js +5 -5
  321. package/src/reducers/navigation/navigation.test.js +30 -0
  322. package/src/reducers/navroot/navroot.js +79 -0
  323. package/src/reducers/navroot/navroot.test.js +110 -0
  324. package/src/reducers/relations/relations.js +74 -46
  325. package/src/reducers/site/site.js +51 -0
  326. package/src/reducers/site/site.test.js +67 -0
  327. package/src/reducers/userSession/userSession.js +15 -1
  328. package/src/registry.js +2 -2
  329. package/src/routes.js +9 -0
  330. package/src/server.jsx +9 -0
  331. package/src/start-server.js +2 -2
  332. package/src/storybook.jsx +24 -38
  333. package/test-setup-config.js +11 -1
  334. package/theme/themes/pastanaga/collections/form.overrides +46 -0
  335. package/theme/themes/pastanaga/collections/menu.overrides +3 -2
  336. package/theme/themes/pastanaga/elements/container.overrides +5 -2
  337. package/theme/themes/pastanaga/elements/input.overrides +11 -1
  338. package/theme/themes/pastanaga/elements/label.overrides +10 -0
  339. package/theme/themes/pastanaga/elements/step.overrides +2 -1
  340. package/theme/themes/pastanaga/extras/blocks.less +25 -15
  341. package/theme/themes/pastanaga/extras/color-picker-widget.less +1 -1
  342. package/theme/themes/pastanaga/extras/contents.less +6 -1
  343. package/theme/themes/pastanaga/extras/draftjs.less +4 -4
  344. package/theme/themes/pastanaga/extras/grid.less +427 -0
  345. package/theme/themes/pastanaga/extras/login.less +3 -0
  346. package/theme/themes/pastanaga/extras/main.less +14 -7
  347. package/theme/themes/pastanaga/extras/react-dates-overrides.less +4 -2
  348. package/theme/themes/pastanaga/extras/search.less +7 -1
  349. package/theme/themes/pastanaga/extras/sidebar.less +5 -4
  350. package/theme/themes/pastanaga/extras/time-picker-overrides.less +5 -3
  351. package/theme/themes/pastanaga/extras/toc.less +29 -0
  352. package/theme/themes/pastanaga/extras/toolbar.less +6 -2
  353. package/theme/themes/pastanaga/extras/userscontrolpanel.less +17 -9
  354. package/theme/themes/pastanaga/extras/widgets.less +1 -1
  355. package/theme/themes/pastanaga/modules/rating.overrides +2 -1
  356. package/theme/themes/pastanaga-cms-ui/elements/container.overrides +2 -1
  357. package/theme/themes/pastanaga-cms-ui/extras/cms-ui.elements.container.less +6 -2
  358. package/theme/themes/pastanaga-cms-ui/extras/cms-ui.site.less +2 -2
  359. package/tsconfig.json +33 -0
  360. package/webpack-plugins/webpack-less-plugin.js +19 -0
  361. package/.yarn/install-state.gz +0 -0
  362. package/.yarn/releases/yarn-3.2.3.cjs +0 -783
  363. package/src/components/manage/Blocks/Teaser/utils.js +0 -44
  364. package/src/components/manage/Blocks/Teaser/utils.test.jsx +0 -229
  365. package/src/components/theme/Header/Header.md +0 -27
@@ -12,7 +12,7 @@ import { Link } from 'react-router-dom';
12
12
  import {
13
13
  Button,
14
14
  Confirm,
15
- Container,
15
+ Container as SemanticContainer,
16
16
  Divider,
17
17
  Dropdown,
18
18
  Menu,
@@ -35,6 +35,7 @@ import {
35
35
  import move from 'lodash-move';
36
36
  import { FormattedMessage, defineMessages, injectIntl } from 'react-intl';
37
37
  import { asyncConnect } from '@plone/volto/helpers';
38
+ import { flattenToAppURL } from '@plone/volto/helpers';
38
39
 
39
40
  import {
40
41
  searchContent,
@@ -70,6 +71,7 @@ import {
70
71
 
71
72
  import { Helmet, getBaseUrl } from '@plone/volto/helpers';
72
73
  import { injectLazyLibs } from '@plone/volto/helpers/Loadable/Loadable';
74
+ import config from '@plone/volto/registry';
73
75
 
74
76
  import backSVG from '@plone/volto/icons/back.svg';
75
77
  import cutSVG from '@plone/volto/icons/cut.svg';
@@ -117,9 +119,13 @@ const messages = defineMessages({
117
119
  id: 'Delete',
118
120
  defaultMessage: 'Delete',
119
121
  },
120
- deleteConfirm: {
121
- id: 'Do you really want to delete the following items?',
122
- defaultMessage: 'Do you really want to delete the following items?',
122
+ deleteConfirmSingleItem: {
123
+ id: 'Delete this item?',
124
+ defaultMessage: 'Delete this item?',
125
+ },
126
+ deleteConfirmMultipleItems: {
127
+ id: 'Delete selected items?',
128
+ defaultMessage: 'Delete selected items?',
123
129
  },
124
130
  deleteError: {
125
131
  id: 'The item could not be deleted.',
@@ -269,35 +275,6 @@ const messages = defineMessages({
269
275
  id: 'All',
270
276
  defaultMessage: 'All',
271
277
  },
272
- linkIntegrityMessageHeader: {
273
- id: 'Potential link breakage',
274
- defaultMessage: 'Potential link breakage',
275
- },
276
- linkIntegrityMessageBody: {
277
- id:
278
- 'By deleting this item, you will break ' +
279
- 'links that exist in the items listed below. ' +
280
- 'If this is indeed what you want to do, ' +
281
- 'we recommend that remove these references first.',
282
- defaultMessage:
283
- 'By deleting this item, ' +
284
- 'you will break links that exist in the items ' +
285
- 'listed below. If this is indeed what you ' +
286
- 'want to do, we recommend that remove ' +
287
- 'these references first.',
288
- },
289
- linkIntegrityMessageExtra: {
290
- id: 'This Page is referenced by the following items:',
291
- defaultMessage: 'This Page is referenced by the following items:',
292
- },
293
- deleteItemCountMessage: {
294
- id: 'Total items to be deleted:',
295
- defaultMessage: 'Total items to be deleted:',
296
- },
297
- deleteItemMessage: {
298
- id: 'Items to be deleted:',
299
- defaultMessage: 'Items to be deleted:',
300
- },
301
278
  });
302
279
 
303
280
  /**
@@ -433,6 +410,8 @@ class Contents extends Component {
433
410
  showProperties: false,
434
411
  showWorkflow: false,
435
412
  itemsToDelete: [],
413
+ containedItemsToDelete: [],
414
+ brokenReferences: [],
436
415
  showAllItemsToDelete: true,
437
416
  items: this.props.items,
438
417
  filter: '',
@@ -449,7 +428,7 @@ class Contents extends Component {
449
428
  sort_on: this.props.sort?.on || 'getObjPositionInParent',
450
429
  sort_order: this.props.sort?.order || 'ascending',
451
430
  isClient: false,
452
- linkIntegrityBreakages: '',
431
+ linkIntegrityBreakages: [],
453
432
  };
454
433
  this.filterTimeout = null;
455
434
  }
@@ -468,12 +447,23 @@ class Contents extends Component {
468
447
  this.state.itemsToDelete !== prevState.itemsToDelete &&
469
448
  this.state.itemsToDelete.length > 0
470
449
  ) {
450
+ const linkintegrityInfo = await this.props.linkIntegrityCheck(
451
+ map(this.state.itemsToDelete, (item) => this.getFieldById(item, 'UID')),
452
+ );
453
+ let containedItems = 0;
454
+ let brokenReferencesCount = 0;
455
+
456
+ linkintegrityInfo.forEach((item) => {
457
+ containedItems += item.items_total ?? 0;
458
+ brokenReferencesCount += item.breaches.length;
459
+ });
471
460
  this.setState({
472
- linkIntegrityBreakages: await this.props.linkIntegrityCheck(
473
- map(this.state.itemsToDelete, (item) =>
474
- this.getFieldById(item, 'UID'),
475
- ),
476
- ),
461
+ containedItemsToDelete: containedItems,
462
+ brokenReferences: brokenReferencesCount,
463
+ brokenLinksList:
464
+ linkintegrityInfo.length === 1
465
+ ? linkintegrityInfo[0]['@id'] + '/links-to-item'
466
+ : null,
477
467
  showAllItemsToDelete:
478
468
  this.state.itemsToDelete.length < this.deleteItemsToShowThreshold,
479
469
  });
@@ -1177,6 +1167,9 @@ class Contents extends Component {
1177
1167
  (this.props.orderRequest?.loading && !this.props.orderRequest?.error) ||
1178
1168
  (this.props.searchRequest?.loading && !this.props.searchRequest?.error);
1179
1169
 
1170
+ const Container =
1171
+ config.getComponent({ name: 'Container' }).component || SemanticContainer;
1172
+
1180
1173
  return this.props.token && this.props.objectActions?.length > 0 ? (
1181
1174
  <>
1182
1175
  {folderContentsAction ? (
@@ -1196,82 +1189,234 @@ class Contents extends Component {
1196
1189
  <Confirm
1197
1190
  open={this.state.showDelete}
1198
1191
  confirmButton="Delete"
1199
- header={this.props.intl.formatMessage(
1200
- messages.deleteConfirm,
1201
- )}
1192
+ header={
1193
+ this.state.itemsToDelete.length === 1
1194
+ ? this.props.intl.formatMessage(
1195
+ messages.deleteConfirmSingleItem,
1196
+ )
1197
+ : this.props.intl.formatMessage(
1198
+ messages.deleteConfirmMultipleItems,
1199
+ )
1200
+ }
1202
1201
  content={
1203
1202
  <div className="content">
1204
- <h3>
1205
- {this.props.intl.formatMessage(
1206
- messages.deleteItemCountMessage,
1207
- ) + ` ${this.state.itemsToDelete.length}`}
1208
- </h3>
1209
- <ul className="content">
1210
- {map(
1211
- this.state.showAllItemsToDelete
1212
- ? this.state.itemsToDelete
1213
- : this.state.itemsToDelete.slice(
1214
- 0,
1215
- this.deleteItemsToShowThreshold,
1216
- ),
1217
- (item) => (
1218
- <li key={item}>
1219
- {this.getFieldById(item, 'title')}
1220
- </li>
1221
- ),
1222
- )}
1223
- </ul>
1224
- {!this.state.showAllItemsToDelete && (
1225
- <Button
1226
- onClick={() =>
1227
- this.setState({
1228
- showAllItemsToDelete: true,
1229
- })
1230
- }
1231
- >
1232
- Show all items
1233
- </Button>
1234
- )}
1235
- {this.state.linkIntegrityBreakages.length > 0 ? (
1236
- <div>
1237
- <h3>
1238
- {this.props.intl.formatMessage(
1239
- messages.linkIntegrityMessageHeader,
1240
- )}
1241
- </h3>
1242
- <p>
1243
- {this.props.intl.formatMessage(
1244
- messages.linkIntegrityMessageBody,
1245
- )}
1246
- </p>
1247
- <ul className="content">
1248
- {map(
1249
- this.state.linkIntegrityBreakages,
1250
- (item) => (
1251
- <li key={item['@id']}>
1252
- <a href={item['@id']}>{item.title}</a>
1253
- <p>
1254
- {this.props.intl.formatMessage(
1255
- messages.linkIntegrityMessageExtra,
1203
+ <p>
1204
+ {this.state.itemsToDelete.length > 1 ? (
1205
+ this.state.containedItemsToDelete > 0 ? (
1206
+ <>
1207
+ <FormattedMessage
1208
+ id="Some items are also a folder.
1209
+ By deleting them you will delete {containedItemsToDelete} {variation} inside the folders."
1210
+ defaultMessage="Some items are also a folder.
1211
+ By deleting them you will delete {containedItemsToDelete} {variation} inside the folders."
1212
+ values={{
1213
+ containedItemsToDelete: (
1214
+ <span>
1215
+ {this.state.containedItemsToDelete}
1216
+ </span>
1217
+ ),
1218
+ variation: (
1219
+ <span>
1220
+ {this.state.containedItemsToDelete ===
1221
+ 1 ? (
1222
+ <FormattedMessage
1223
+ id="item"
1224
+ defaultMessage="item"
1225
+ />
1226
+ ) : (
1227
+ <FormattedMessage
1228
+ id="items"
1229
+ defaultMessage="items"
1230
+ />
1231
+ )}
1232
+ </span>
1233
+ ),
1234
+ }}
1235
+ />
1236
+ {this.state.brokenReferences > 0 && (
1237
+ <>
1238
+ <br />
1239
+ <FormattedMessage
1240
+ id="Some items are referenced by other contents. By deleting them {brokenReferences} {variation} will be broken."
1241
+ defaultMessage="Some items are referenced by other contents. By deleting them {brokenReferences} {variation} will be broken."
1242
+ values={{
1243
+ brokenReferences: (
1244
+ <span>
1245
+ {this.state.brokenReferences}
1246
+ </span>
1247
+ ),
1248
+ variation: (
1249
+ <span>
1250
+ {this.state.brokenReferences ===
1251
+ 1 ? (
1252
+ <FormattedMessage
1253
+ id="reference"
1254
+ defaultMessage="reference"
1255
+ />
1256
+ ) : (
1257
+ <FormattedMessage
1258
+ id="references"
1259
+ defaultMessage="references"
1260
+ />
1261
+ )}
1262
+ </span>
1263
+ ),
1264
+ }}
1265
+ />
1266
+ </>
1267
+ )}
1268
+ </>
1269
+ ) : (
1270
+ <>
1271
+ {this.state.brokenReferences > 0 && (
1272
+ <>
1273
+ <FormattedMessage
1274
+ id="Some items are referenced by other contents. By deleting them {brokenReferences} {variation} will be broken."
1275
+ defaultMessage="Some items are referenced by other contents. By deleting them {brokenReferences} {variation} will be broken."
1276
+ values={{
1277
+ brokenReferences: (
1278
+ <span>
1279
+ {this.state.brokenReferences}
1280
+ </span>
1281
+ ),
1282
+ variation: (
1283
+ <span>
1284
+ {this.state.brokenReferences ===
1285
+ 1 ? (
1286
+ <FormattedMessage
1287
+ id="reference"
1288
+ defaultMessage="reference"
1289
+ />
1290
+ ) : (
1291
+ <FormattedMessage
1292
+ id="references"
1293
+ defaultMessage="references"
1294
+ />
1295
+ )}
1296
+ </span>
1297
+ ),
1298
+ }}
1299
+ />
1300
+ </>
1301
+ )}
1302
+ </>
1303
+ )
1304
+ ) : this.state.containedItemsToDelete > 0 ? (
1305
+ <>
1306
+ <FormattedMessage
1307
+ id="This item is also a folder.
1308
+ By deleting it you will delete {containedItemsToDelete} {variation} inside the folder."
1309
+ defaultMessage="This item is also a folder.
1310
+ By deleting it you will delete {containedItemsToDelete} {variation} inside the folder."
1311
+ values={{
1312
+ containedItemsToDelete: (
1313
+ <span>
1314
+ {this.state.containedItemsToDelete}
1315
+ </span>
1316
+ ),
1317
+ variation: (
1318
+ <span>
1319
+ {this.state.containedItemsToDelete ===
1320
+ 1 ? (
1321
+ <FormattedMessage
1322
+ id="item"
1323
+ defaultMessage="item"
1324
+ />
1325
+ ) : (
1326
+ <FormattedMessage
1327
+ id="items"
1328
+ defaultMessage="items"
1329
+ />
1256
1330
  )}
1257
- </p>
1258
- <ul className="content">
1259
- {map(item.breaches, (breach) => (
1260
- <li key={breach['@id']}>
1261
- <a href={breach['@id']}>
1262
- {breach.title}
1263
- </a>
1264
- </li>
1265
- ))}
1266
- </ul>
1267
- </li>
1268
- ),
1331
+ </span>
1332
+ ),
1333
+ }}
1334
+ />
1335
+ {this.state.brokenReferences > 0 && (
1336
+ <>
1337
+ <br />
1338
+ <FormattedMessage
1339
+ id="This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken."
1340
+ defaultMessage="This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken."
1341
+ values={{
1342
+ brokenReferences: (
1343
+ <span>
1344
+ {this.state.brokenReferences}
1345
+ </span>
1346
+ ),
1347
+ variation: (
1348
+ <span>
1349
+ {this.state.brokenReferences === 1 ? (
1350
+ <FormattedMessage
1351
+ id="reference"
1352
+ defaultMessage="reference"
1353
+ />
1354
+ ) : (
1355
+ <FormattedMessage
1356
+ id="references"
1357
+ defaultMessage="references"
1358
+ />
1359
+ )}
1360
+ </span>
1361
+ ),
1362
+ }}
1363
+ />
1364
+ <div className="broken-links-list-link-wrapper">
1365
+ <Link
1366
+ to={flattenToAppURL(
1367
+ this.state.brokenLinksList,
1368
+ )}
1369
+ >
1370
+ <FormattedMessage
1371
+ id="View broken links list"
1372
+ defaultMessage="View broken links list"
1373
+ />
1374
+ </Link>
1375
+ </div>
1376
+ </>
1269
1377
  )}
1270
- </ul>
1271
- </div>
1272
- ) : (
1273
- <div></div>
1274
- )}
1378
+ </>
1379
+ ) : this.state.brokenReferences > 0 ? (
1380
+ <>
1381
+ <FormattedMessage
1382
+ id="This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken."
1383
+ defaultMessage="This item is referenced by other items. By deleting it {brokenReferences} {variation} will be broken."
1384
+ values={{
1385
+ brokenReferences: (
1386
+ <span>{this.state.brokenReferences}</span>
1387
+ ),
1388
+ variation: (
1389
+ <span>
1390
+ {this.state.brokenReferences === 1 ? (
1391
+ <FormattedMessage
1392
+ id="reference"
1393
+ defaultMessage="reference"
1394
+ />
1395
+ ) : (
1396
+ <FormattedMessage
1397
+ id="references"
1398
+ defaultMessage="references"
1399
+ />
1400
+ )}
1401
+ </span>
1402
+ ),
1403
+ }}
1404
+ />
1405
+ <div className="broken-links-list-link-wrapper">
1406
+ <Link
1407
+ to={flattenToAppURL(
1408
+ this.state.brokenLinksList,
1409
+ )}
1410
+ >
1411
+ <FormattedMessage
1412
+ id="View broken links list"
1413
+ defaultMessage="View broken links list"
1414
+ />
1415
+ </Link>
1416
+ </div>
1417
+ </>
1418
+ ) : null}
1419
+ </p>
1275
1420
  </div>
1276
1421
  }
1277
1422
  onCancel={this.onDeleteCancel}
@@ -1328,6 +1473,9 @@ class Contents extends Component {
1328
1473
  as={Button}
1329
1474
  onClick={this.upload}
1330
1475
  className="upload"
1476
+ aria-label={this.props.intl.formatMessage(
1477
+ messages.upload,
1478
+ )}
1331
1479
  >
1332
1480
  <Icon
1333
1481
  name={uploadSVG}
@@ -1352,6 +1500,9 @@ class Contents extends Component {
1352
1500
  as={Button}
1353
1501
  onClick={this.rename}
1354
1502
  disabled={!selected}
1503
+ aria-label={this.props.intl.formatMessage(
1504
+ messages.rename,
1505
+ )}
1355
1506
  >
1356
1507
  <Icon
1357
1508
  name={renameSVG}
@@ -1374,6 +1525,9 @@ class Contents extends Component {
1374
1525
  as={Button}
1375
1526
  onClick={this.workflow}
1376
1527
  disabled={!selected}
1528
+ aria-label={this.props.intl.formatMessage(
1529
+ messages.state,
1530
+ )}
1377
1531
  >
1378
1532
  <Icon
1379
1533
  name={semaphoreSVG}
@@ -1396,6 +1550,9 @@ class Contents extends Component {
1396
1550
  as={Button}
1397
1551
  onClick={this.tags}
1398
1552
  disabled={!selected}
1553
+ aria-label={this.props.intl.formatMessage(
1554
+ messages.tags,
1555
+ )}
1399
1556
  >
1400
1557
  <Icon
1401
1558
  name={tagSVG}
@@ -1419,6 +1576,9 @@ class Contents extends Component {
1419
1576
  as={Button}
1420
1577
  onClick={this.properties}
1421
1578
  disabled={!selected}
1579
+ aria-label={this.props.intl.formatMessage(
1580
+ messages.properties,
1581
+ )}
1422
1582
  >
1423
1583
  <Icon
1424
1584
  name={propertiesSVG}
@@ -1443,6 +1603,9 @@ class Contents extends Component {
1443
1603
  as={Button}
1444
1604
  onClick={this.cut}
1445
1605
  disabled={!selected}
1606
+ aria-label={this.props.intl.formatMessage(
1607
+ messages.cut,
1608
+ )}
1446
1609
  >
1447
1610
  <Icon
1448
1611
  name={cutSVG}
@@ -1465,6 +1628,9 @@ class Contents extends Component {
1465
1628
  as={Button}
1466
1629
  onClick={this.copy}
1467
1630
  disabled={!selected}
1631
+ aria-label={this.props.intl.formatMessage(
1632
+ messages.copy,
1633
+ )}
1468
1634
  >
1469
1635
  <Icon
1470
1636
  name={copySVG}
@@ -1488,6 +1654,9 @@ class Contents extends Component {
1488
1654
  as={Button}
1489
1655
  onClick={this.paste}
1490
1656
  disabled={!this.props.action}
1657
+ aria-label={this.props.intl.formatMessage(
1658
+ messages.paste,
1659
+ )}
1491
1660
  >
1492
1661
  <Icon
1493
1662
  name={pasteSVG}
@@ -1511,6 +1680,9 @@ class Contents extends Component {
1511
1680
  as={Button}
1512
1681
  onClick={this.delete}
1513
1682
  disabled={!selected}
1683
+ aria-label={this.props.intl.formatMessage(
1684
+ messages.delete,
1685
+ )}
1514
1686
  >
1515
1687
  <Icon
1516
1688
  name={deleteSVG}
@@ -1623,9 +1795,8 @@ class Contents extends Component {
1623
1795
  {this.props.intl.formatMessage({
1624
1796
  id: this.state.index.values[index]
1625
1797
  .label,
1626
- defaultMessage: this.state.index.values[
1627
- index
1628
- ].label,
1798
+ defaultMessage:
1799
+ this.state.index.values[index].label,
1629
1800
  })}
1630
1801
  </span>
1631
1802
  </Dropdown.Item>