@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
@@ -1,15 +1,10 @@
1
- /**
2
- * Contents properties modal.
3
- * @module components/manage/Contents/ContentsPropertiesModal
4
- */
5
-
6
- import React, { Component } from 'react';
1
+ import React, { useEffect } from 'react';
7
2
  import PropTypes from 'prop-types';
8
- import { connect } from 'react-redux';
9
- import { compose } from 'redux';
3
+ import { useDispatch, useSelector } from 'react-redux';
10
4
  import { isEmpty, map } from 'lodash';
11
- import { defineMessages, injectIntl } from 'react-intl';
5
+ import { defineMessages, useIntl } from 'react-intl';
12
6
 
7
+ import { usePrevious } from '@plone/volto/helpers';
13
8
  import { updateContent } from '@plone/volto/actions';
14
9
  import { ModalForm } from '@plone/volto/components';
15
10
 
@@ -27,8 +22,7 @@ const messages = defineMessages({
27
22
  defaultMessage: 'Publishing Date',
28
23
  },
29
24
  effectiveDescription: {
30
- id:
31
- 'If this date is in the future, the content will not show up in listings and searches until this date.',
25
+ id: 'If this date is in the future, the content will not show up in listings and searches until this date.',
32
26
  defaultMessage:
33
27
  'If this date is in the future, the content will not show up in listings and searches until this date.',
34
28
  },
@@ -37,8 +31,7 @@ const messages = defineMessages({
37
31
  defaultMessage: 'Expiration Date',
38
32
  },
39
33
  expiresDescription: {
40
- id:
41
- 'When this date is reached, the content will nolonger be visible in listings and searches.',
34
+ id: 'When this date is reached, the content will nolonger be visible in listings and searches.',
42
35
  defaultMessage:
43
36
  'When this date is reached, the content will nolonger be visible in listings and searches.',
44
37
  },
@@ -56,8 +49,7 @@ const messages = defineMessages({
56
49
  defaultMessage: 'Creators',
57
50
  },
58
51
  creatorsDescription: {
59
- id:
60
- 'Persons responsible for creating the content of this item. Please enter a list of user names, one per line. The principal creator should come first.',
52
+ id: 'Persons responsible for creating the content of this item. Please enter a list of user names, one per line. The principal creator should come first.',
61
53
  defaultMessage:
62
54
  'Persons responsible for creating the content of this item. Please enter a list of user names, one per line. The principal creator should come first.',
63
55
  },
@@ -70,166 +62,98 @@ const messages = defineMessages({
70
62
  defaultMessage:
71
63
  'If selected, this item will not appear in the navigation tree',
72
64
  },
73
- yes: {
74
- id: 'Yes',
75
- defaultMessage: 'Yes',
76
- },
77
- no: {
78
- id: 'No',
79
- defaultMessage: 'No',
80
- },
81
65
  });
82
66
 
83
- /**
84
- * ContentsPropertiesModal class.
85
- * @class ContentsPropertiesModal
86
- * @extends Component
87
- */
88
- class ContentsPropertiesModal extends Component {
89
- /**
90
- * Property types.
91
- * @property {Object} propTypes Property types.
92
- * @static
93
- */
94
- static propTypes = {
95
- updateContent: PropTypes.func.isRequired,
96
- items: PropTypes.arrayOf(PropTypes.string).isRequired,
97
- request: PropTypes.shape({
98
- loading: PropTypes.bool,
99
- loaded: PropTypes.bool,
100
- }).isRequired,
101
- open: PropTypes.bool.isRequired,
102
- onOk: PropTypes.func.isRequired,
103
- onCancel: PropTypes.func.isRequired,
104
- };
105
-
106
- /**
107
- * Constructor
108
- * @method constructor
109
- * @param {Object} props Component properties
110
- * @constructs ContentsUploadModal
111
- */
112
- constructor(props) {
113
- super(props);
114
- this.onSubmit = this.onSubmit.bind(this);
115
- }
67
+ const ContentsPropertiesModal = (props) => {
68
+ const { onCancel, onOk, open, items } = props;
69
+ const intl = useIntl();
70
+ const dispatch = useDispatch();
71
+ const request = useSelector((state) => state.content.update);
72
+ const prevrequestloading = usePrevious(request.loading);
116
73
 
117
- /**
118
- * Component will receive props
119
- * @method componentWillReceiveProps
120
- * @param {Object} nextProps Next properties
121
- * @returns {undefined}
122
- */
123
- UNSAFE_componentWillReceiveProps(nextProps) {
124
- if (this.props.request.loading && nextProps.request.loaded) {
125
- this.props.onOk();
74
+ useEffect(() => {
75
+ if (prevrequestloading && request.loaded) {
76
+ onOk();
126
77
  }
127
- }
78
+ }, [onOk, prevrequestloading, request.loaded]);
128
79
 
129
- /**
130
- * Submit handler
131
- * @method onSubmit
132
- * @param {Object} data Form data
133
- * @returns {undefined}
134
- */
135
- onSubmit(data) {
80
+ const onSubmit = (data) => {
136
81
  if (isEmpty(data)) {
137
- this.props.onOk();
82
+ onOk();
138
83
  } else {
139
- this.props.updateContent(
140
- this.props.items,
141
- map(this.props.items, () => data),
84
+ dispatch(
85
+ updateContent(
86
+ items,
87
+ map(items, () => data),
88
+ ),
142
89
  );
143
90
  }
144
- }
91
+ };
145
92
 
146
- /**
147
- * Render method.
148
- * @method render
149
- * @returns {string} Markup for the component.
150
- */
151
- render() {
152
- return (
153
- this.props.open && (
154
- <ModalForm
155
- open={this.props.open}
156
- onSubmit={this.onSubmit}
157
- onCancel={this.props.onCancel}
158
- title={this.props.intl.formatMessage(messages.properties)}
159
- schema={{
160
- fieldsets: [
161
- {
162
- id: 'default',
163
- title: this.props.intl.formatMessage(messages.default),
164
- fields: [
165
- 'effective',
166
- 'expires',
167
- 'rights',
168
- 'creators',
169
- 'exclude_from_nav',
170
- ],
171
- },
172
- ],
173
- properties: {
174
- effective: {
175
- description: this.props.intl.formatMessage(
176
- messages.effectiveDescription,
177
- ),
178
- title: this.props.intl.formatMessage(messages.effectiveTitle),
179
- type: 'string',
180
- widget: 'datetime',
181
- },
182
- expires: {
183
- description: this.props.intl.formatMessage(
184
- messages.expiresDescription,
185
- ),
186
- title: this.props.intl.formatMessage(messages.expiresTitle),
187
- type: 'string',
188
- widget: 'datetime',
189
- },
190
- rights: {
191
- description: this.props.intl.formatMessage(
192
- messages.rightsDescription,
193
- ),
194
- title: this.props.intl.formatMessage(messages.rightsTitle),
195
- type: 'string',
196
- widget: 'textarea',
197
- },
198
- creators: {
199
- description: this.props.intl.formatMessage(
200
- messages.creatorsDescription,
201
- ),
202
- title: this.props.intl.formatMessage(messages.creatorsTitle),
203
- type: 'array',
204
- },
205
- exclude_from_nav: {
206
- description: this.props.intl.formatMessage(
207
- messages.excludeFromNavDescription,
208
- ),
209
- title: this.props.intl.formatMessage(
210
- messages.excludeFromNavTitle,
211
- ),
212
- type: 'array',
213
- choices: [
214
- [true, this.props.intl.formatMessage(messages.yes)],
215
- [false, this.props.intl.formatMessage(messages.no)],
216
- ],
217
- },
93
+ return (
94
+ open && (
95
+ <ModalForm
96
+ open={open}
97
+ onSubmit={onSubmit}
98
+ onCancel={onCancel}
99
+ title={intl.formatMessage(messages.properties)}
100
+ schema={{
101
+ fieldsets: [
102
+ {
103
+ id: 'default',
104
+ title: intl.formatMessage(messages.default),
105
+ fields: [
106
+ 'effective',
107
+ 'expires',
108
+ 'rights',
109
+ 'creators',
110
+ 'exclude_from_nav',
111
+ ],
112
+ },
113
+ ],
114
+ properties: {
115
+ effective: {
116
+ description: intl.formatMessage(messages.effectiveDescription),
117
+ title: intl.formatMessage(messages.effectiveTitle),
118
+ type: 'string',
119
+ widget: 'datetime',
120
+ },
121
+ expires: {
122
+ description: intl.formatMessage(messages.expiresDescription),
123
+ title: intl.formatMessage(messages.expiresTitle),
124
+ type: 'string',
125
+ widget: 'datetime',
126
+ },
127
+ rights: {
128
+ description: intl.formatMessage(messages.rightsDescription),
129
+ title: intl.formatMessage(messages.rightsTitle),
130
+ type: 'string',
131
+ widget: 'textarea',
132
+ },
133
+ creators: {
134
+ description: intl.formatMessage(messages.creatorsDescription),
135
+ title: intl.formatMessage(messages.creatorsTitle),
136
+ type: 'array',
137
+ },
138
+ exclude_from_nav: {
139
+ description: intl.formatMessage(
140
+ messages.excludeFromNavDescription,
141
+ ),
142
+ title: intl.formatMessage(messages.excludeFromNavTitle),
143
+ type: 'boolean',
218
144
  },
219
- required: [],
220
- }}
221
- />
222
- )
223
- );
224
- }
225
- }
145
+ },
146
+ required: [],
147
+ }}
148
+ />
149
+ )
150
+ );
151
+ };
226
152
 
227
- export default compose(
228
- injectIntl,
229
- connect(
230
- (state) => ({
231
- request: state.content.update,
232
- }),
233
- { updateContent },
234
- ),
235
- )(ContentsPropertiesModal);
153
+ ContentsPropertiesModal.propTypes = {
154
+ items: PropTypes.arrayOf(PropTypes.string).isRequired,
155
+ open: PropTypes.bool.isRequired,
156
+ onOk: PropTypes.func.isRequired,
157
+ onCancel: PropTypes.func.isRequired,
158
+ };
159
+ export default ContentsPropertiesModal;
@@ -1,15 +1,10 @@
1
- /**
2
- * Contents rename modal.
3
- * @module components/manage/Contents/ContentsRenameModal
4
- */
5
-
6
- import React, { Component } from 'react';
1
+ import React, { useCallback, useEffect } from 'react';
7
2
  import PropTypes from 'prop-types';
8
- import { connect } from 'react-redux';
9
- import { compose } from 'redux';
3
+ import { useDispatch, useSelector } from 'react-redux';
10
4
  import { concat, merge, map } from 'lodash';
11
- import { defineMessages, injectIntl } from 'react-intl';
5
+ import { defineMessages, useIntl } from 'react-intl';
12
6
 
7
+ import { usePrevious } from '@plone/volto/helpers';
13
8
  import { updateContent } from '@plone/volto/actions';
14
9
  import { ModalForm } from '@plone/volto/components';
15
10
 
@@ -40,140 +35,94 @@ const messages = defineMessages({
40
35
  },
41
36
  });
42
37
 
43
- /**
44
- * ContentsRenameModal class.
45
- * @class ContentsRenameModal
46
- * @extends Component
47
- */
48
- class ContentsRenameModal extends Component {
49
- /**
50
- * Property types.
51
- * @property {Object} propTypes Property types.
52
- * @static
53
- */
54
- static propTypes = {
55
- updateContent: PropTypes.func.isRequired,
56
- items: PropTypes.arrayOf(
57
- PropTypes.shape({
58
- id: PropTypes.string,
59
- title: PropTypes.string,
60
- url: PropTypes.string,
61
- }),
62
- ).isRequired,
63
- request: PropTypes.shape({
64
- loading: PropTypes.bool,
65
- loaded: PropTypes.bool,
66
- }).isRequired,
67
- open: PropTypes.bool.isRequired,
68
- onOk: PropTypes.func.isRequired,
69
- onCancel: PropTypes.func.isRequired,
70
- };
71
-
72
- /**
73
- * Constructor
74
- * @method constructor
75
- * @param {Object} props Component properties
76
- * @constructs ContentsUploadModal
77
- */
78
- constructor(props) {
79
- super(props);
80
- this.onSubmit = this.onSubmit.bind(this);
81
- }
38
+ const ContentsRenameModal = (props) => {
39
+ const { onOk, open, items, onCancel } = props;
40
+ const intl = useIntl();
41
+ const dispatch = useDispatch();
42
+ const request = useSelector((state) => state.content.update);
43
+ const prevrequestloading = usePrevious(request.loading);
82
44
 
83
- /**
84
- * Component will receive props
85
- * @method componentWillReceiveProps
86
- * @param {Object} nextProps Next properties
87
- * @returns {undefined}
88
- */
89
- UNSAFE_componentWillReceiveProps(nextProps) {
90
- if (this.props.request.loading && nextProps.request.loaded) {
91
- this.props.onOk();
45
+ useEffect(() => {
46
+ if (prevrequestloading && request.loaded) {
47
+ onOk();
92
48
  }
93
- }
49
+ }, [onOk, prevrequestloading, request.loaded]);
94
50
 
95
- /**
96
- * Submit handler
97
- * @method onSubmit
98
- * @param {Object} data Form data
99
- * @returns {undefined}
100
- */
101
- onSubmit(data) {
102
- this.props.updateContent(
103
- map(this.props.items, (item) => item.url),
104
- map(this.props.items, (item, index) => ({
105
- id: data[`${index}_id`],
106
- title: data[`${index}_title`],
107
- })),
108
- );
109
- }
51
+ const onSubmit = useCallback(
52
+ (data) => {
53
+ dispatch(
54
+ updateContent(
55
+ map(items, (item) => item.url),
56
+ map(items, (item, index) => ({
57
+ id: data[`${index}_id`],
58
+ title: data[`${index}_title`],
59
+ })),
60
+ ),
61
+ );
62
+ },
63
+ [items, dispatch],
64
+ );
110
65
 
111
- /**
112
- * Render method.
113
- * @method render
114
- * @returns {string} Markup for the component.
115
- */
116
- render() {
117
- return (
118
- this.props.open && (
119
- <ModalForm
120
- open={this.props.open}
121
- loading={this.props.request.loading}
122
- loadingMessage={this.props.intl.formatMessage(
123
- messages.loadingMessage,
124
- )}
125
- onSubmit={this.onSubmit}
126
- onCancel={this.props.onCancel}
127
- formData={merge(
128
- ...map(this.props.items, (item, index) => ({
129
- [`${index}_title`]: item.title,
130
- [`${index}_id`]: item.id,
131
- })),
132
- )}
133
- title={this.props.intl.formatMessage(messages.renameItems)}
134
- schema={{
135
- fieldsets: [
136
- {
137
- id: 'default',
138
- title: this.props.intl.formatMessage(messages.default),
139
- fields: concat(
140
- ...map(this.props.items, (item, index) => [
141
- `${index}_title`,
142
- `${index}_id`,
143
- ]),
144
- ),
66
+ return (
67
+ open && (
68
+ <ModalForm
69
+ open={open}
70
+ loading={request.loading}
71
+ loadingMessage={intl.formatMessage(messages.loadingMessage)}
72
+ onSubmit={onSubmit}
73
+ onCancel={onCancel}
74
+ formData={merge(
75
+ ...map(items, (item, index) => ({
76
+ [`${index}_title`]: item.title,
77
+ [`${index}_id`]: item.id,
78
+ })),
79
+ )}
80
+ title={intl.formatMessage(messages.renameItems)}
81
+ schema={{
82
+ fieldsets: [
83
+ {
84
+ id: 'default',
85
+ title: intl.formatMessage(messages.default),
86
+ fields: concat(
87
+ ...map(items, (item, index) => [
88
+ `${index}_title`,
89
+ `${index}_id`,
90
+ ]),
91
+ ),
92
+ },
93
+ ],
94
+ properties: merge(
95
+ ...map(items, (item, index) => ({
96
+ [`${index}_title`]: {
97
+ title: intl.formatMessage(messages.title),
98
+ type: 'string',
99
+ description: '',
145
100
  },
146
- ],
147
- properties: merge(
148
- ...map(this.props.items, (item, index) => ({
149
- [`${index}_title`]: {
150
- title: this.props.intl.formatMessage(messages.title),
151
- type: 'string',
152
- description: '',
153
- },
154
- [`${index}_id`]: {
155
- title: this.props.intl.formatMessage(messages.shortName),
156
- type: 'id',
157
- description: this.props.intl.formatMessage(
158
- messages.shortNameDescription,
159
- ),
160
- },
161
- })),
162
- ),
163
- required: [],
164
- }}
165
- />
166
- )
167
- );
168
- }
169
- }
101
+ [`${index}_id`]: {
102
+ title: intl.formatMessage(messages.shortName),
103
+ type: 'id',
104
+ description: intl.formatMessage(messages.shortNameDescription),
105
+ },
106
+ })),
107
+ ),
108
+ required: [],
109
+ }}
110
+ />
111
+ )
112
+ );
113
+ };
170
114
 
171
- export default compose(
172
- injectIntl,
173
- connect(
174
- (state) => ({
175
- request: state.content.update,
115
+ ContentsRenameModal.propTypes = {
116
+ items: PropTypes.arrayOf(
117
+ PropTypes.shape({
118
+ id: PropTypes.string,
119
+ title: PropTypes.string,
120
+ url: PropTypes.string,
176
121
  }),
177
- { updateContent },
178
- ),
179
- )(ContentsRenameModal);
122
+ ).isRequired,
123
+ open: PropTypes.bool.isRequired,
124
+ onOk: PropTypes.func.isRequired,
125
+ onCancel: PropTypes.func.isRequired,
126
+ };
127
+
128
+ export default ContentsRenameModal;
@@ -0,0 +1,61 @@
1
+ import { injectIntl } from 'react-intl';
2
+ import React from 'react';
3
+ import ContentsRenameModalComponent from './ContentsRenameModal';
4
+ import { RealStoreWrapper as Wrapper } from '@plone/volto/storybook';
5
+
6
+ const IntlContentRenameModalComponent = injectIntl(
7
+ ContentsRenameModalComponent,
8
+ );
9
+
10
+ function StoryComponent(args) {
11
+ return (
12
+ <Wrapper
13
+ customStore={{
14
+ content: {
15
+ update: {
16
+ loading: false,
17
+ loaded: true,
18
+ },
19
+ },
20
+ intl: {
21
+ locale: 'en',
22
+ messages: {},
23
+ },
24
+ }}
25
+ >
26
+ <div id="toolbar" style={{ display: 'none' }} />
27
+ <IntlContentRenameModalComponent
28
+ {...args}
29
+ onOk={() => {}}
30
+ onCancel={() => {}}
31
+ items={[
32
+ {
33
+ ...args,
34
+ url: '/blog',
35
+ },
36
+ ]}
37
+ />
38
+ </Wrapper>
39
+ );
40
+ }
41
+
42
+ export const ContentRenameModal = StoryComponent.bind({});
43
+
44
+ ContentRenameModal.args = {
45
+ open: true,
46
+ id: 'blogs',
47
+ title: 'Plone Blog',
48
+ };
49
+
50
+ export default {
51
+ title: 'Public components/Contents/Content Rename Modal',
52
+ component: ContentRenameModal,
53
+ decorators: [
54
+ (Story) => (
55
+ <div className="ui segment form attached" style={{ width: '400px' }}>
56
+ <Story />
57
+ </div>
58
+ ),
59
+ ],
60
+ argTypes: {},
61
+ };