@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
@@ -307,9 +307,11 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
307
307
  left: 50%;
308
308
  display: flex;
309
309
  padding: 4px;
310
- background-color: rgba(255, 255, 255, 0.975);
311
310
  border-radius: 2px;
312
- box-shadow: 0 0 8px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.05);
311
+ background-color: rgba(255, 255, 255, 0.975);
312
+ box-shadow:
313
+ 0 0 8px rgba(0, 0, 0, 0.1),
314
+ 0 2px 4px rgba(0, 0, 0, 0.05);
313
315
  transform: translate(-50%, 0);
314
316
 
315
317
  form {
@@ -331,8 +333,8 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
331
333
 
332
334
  .ui.icon.button {
333
335
  padding: 4px;
334
- margin-left: 4px;
335
336
  border-radius: 1px;
337
+ margin-left: 4px;
336
338
  color: @brown !important;
337
339
 
338
340
  &:hover {
@@ -352,9 +354,11 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
352
354
  width: ~'min(100%, 450px)';
353
355
  height: 40px;
354
356
  padding: 4px;
355
- background-color: rgba(255, 255, 255, 0.975);
356
357
  border-radius: 2px;
357
- box-shadow: 0 0 8px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.05);
358
+ background-color: rgba(255, 255, 255, 0.975);
359
+ box-shadow:
360
+ 0 0 8px rgba(0, 0, 0, 0.1),
361
+ 0 2px 4px rgba(0, 0, 0, 0.05);
358
362
 
359
363
  form {
360
364
  display: flex;
@@ -380,8 +384,8 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
380
384
 
381
385
  .ui.icon.button {
382
386
  padding: 4px;
383
- margin-left: 4px;
384
387
  border-radius: 1px;
388
+ margin-left: 4px;
385
389
  color: @brown !important;
386
390
 
387
391
  &:hover {
@@ -477,11 +481,13 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
477
481
 
478
482
  &.new-add-block {
479
483
  bottom: -26px;
480
- left: 50%;
484
+ left: calc(
485
+ 50% - 12px
486
+ ); // This is to compensate the width of the icon and center it correctly
481
487
  padding: 0 !important;
482
488
  border: none !important;
483
- background: white !important;
484
489
  border-radius: 50% !important;
490
+ background: white !important;
485
491
  }
486
492
 
487
493
  &:not(.new-add-block) {
@@ -550,8 +556,8 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
550
556
  color: #b8c6c8;
551
557
 
552
558
  .icon {
553
- background: rgba(255, 255, 255, 0.2);
554
559
  border-radius: 2px;
560
+ background: rgba(255, 255, 255, 0.2);
555
561
  }
556
562
 
557
563
  &:hover {
@@ -577,8 +583,8 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
577
583
  .callout {
578
584
  padding: 1em;
579
585
  border: 1px solid rgba(34, 36, 38, 0.15);
580
- margin: 1rem 0;
581
586
  border-radius: 0.28571429rem;
587
+ margin: 1rem 0;
582
588
  box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15);
583
589
  }
584
590
 
@@ -602,8 +608,8 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
602
608
  // HTML block
603
609
  .html-editor {
604
610
  z-index: 1;
605
- background-color: #f3f6f7;
606
611
  border-radius: 4px;
612
+ background-color: #f3f6f7;
607
613
  font-family: monospace;
608
614
  font-size: @16px;
609
615
  word-break: break-all !important;
@@ -713,9 +719,11 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
713
719
  .blocks-chooser {
714
720
  width: 310px;
715
721
  padding: 4px;
716
- background-color: rgba(255, 255, 255, 0.975);
717
722
  border-radius: 2px;
718
- box-shadow: 0 0 8px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.05);
723
+ background-color: rgba(255, 255, 255, 0.975);
724
+ box-shadow:
725
+ 0 0 8px rgba(0, 0, 0, 0.1),
726
+ 0 2px 4px rgba(0, 0, 0, 0.05);
719
727
 
720
728
  &:not(.new-add-block) {
721
729
  top: -12px;
@@ -729,9 +737,9 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
729
737
  align-items: center;
730
738
  justify-content: center;
731
739
  padding: 20px 0;
740
+ border-radius: 3px;
732
741
  margin-top: 5px;
733
742
  margin-bottom: 5px;
734
- border-radius: 3px;
735
743
  color: @brown !important;
736
744
  hyphens: auto;
737
745
  text-align: center;
@@ -809,6 +817,7 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
809
817
  .listing-item a {
810
818
  display: flex;
811
819
  width: 100%;
820
+ align-items: flex-start;
812
821
 
813
822
  @media only screen and (max-width: (@largestMobileScreen)) {
814
823
  flex-direction: column;
@@ -820,6 +829,7 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
820
829
 
821
830
  img {
822
831
  width: 15%;
832
+ height: auto;
823
833
  margin-right: 20px;
824
834
 
825
835
  @media only screen and (max-width: (@largestMobileScreen)) {
@@ -991,8 +1001,8 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
991
1001
  display: flex;
992
1002
  justify-content: space-between;
993
1003
  padding: 0.5rem;
994
- background-color: #faf8f8;
995
1004
  border-radius: 0.3rem;
1005
+ background-color: #faf8f8;
996
1006
  }
997
1007
 
998
1008
  .active.title .filter-list-title svg {
@@ -27,8 +27,8 @@
27
27
  right: -0.25rem;
28
28
  width: 0.5rem;
29
29
  height: 0.5rem;
30
- background-color: @red;
31
30
  border-radius: 100%;
31
+ background-color: @red;
32
32
  content: '';
33
33
  }
34
34
  }
@@ -46,8 +46,8 @@
46
46
 
47
47
  .ui.icon.button {
48
48
  padding: 10px;
49
- margin-left: 4px;
50
49
  border-radius: 1px;
50
+ margin-left: 4px;
51
51
  color: @brown !important;
52
52
 
53
53
  &:hover {
@@ -94,6 +94,7 @@
94
94
 
95
95
  .contents-table-wrapper {
96
96
  width: 100%;
97
+ overflow-x: auto;
97
98
 
98
99
  .ui.attached.table {
99
100
  width: 100%;
@@ -191,6 +192,10 @@
191
192
  white-space: normal;
192
193
  word-break: break-all;
193
194
  }
195
+
196
+ .broken-links-list-link-wrapper {
197
+ margin-top: 30px;
198
+ }
194
199
  }
195
200
 
196
201
  .contenttype-event {
@@ -45,8 +45,8 @@
45
45
  left: 50%;
46
46
  box-sizing: border-box;
47
47
  border: 1px solid #ddd;
48
- background: #fff;
49
48
  border-radius: 2px;
49
+ background: #fff;
50
50
  box-shadow: 0 1px 3px 0 rgba(220, 220, 220, 1);
51
51
  -webkit-transform: translate(-50%) scale(0);
52
52
  transform: translate(-50%) scale(0);
@@ -84,9 +84,9 @@
84
84
  box-sizing: border-box;
85
85
  padding: 5px;
86
86
  border: 1px solid #ddd;
87
+ border-radius: 18px;
87
88
  margin: 0;
88
89
  background: #fff;
89
- border-radius: 18px;
90
90
  cursor: pointer;
91
91
  line-height: 36px;
92
92
  text-align: center;
@@ -112,10 +112,10 @@
112
112
  width: 74px;
113
113
  box-sizing: border-box;
114
114
  border: 1px solid #ddd;
115
+ border-radius: 2px;
115
116
  margin-top: 8px;
116
117
  background: #efefef;
117
118
  background: #fff;
118
- border-radius: 2px;
119
119
  box-shadow: 0 1px 3px 0 rgba(220, 220, 220, 1);
120
120
  -webkit-transform: translate(-50%);
121
121
  transform: translate(-50%);
@@ -252,8 +252,8 @@
252
252
  height: 32px;
253
253
  padding: 0;
254
254
  padding: 4px !important;
255
- background: rgba(255, 255, 255, 0.975);
256
255
  border-radius: 1px;
256
+ background: rgba(255, 255, 255, 0.975);
257
257
  color: @brown;
258
258
  }
259
259
 
@@ -0,0 +1,427 @@
1
+ // Row block
2
+ @blueArctic: #e2f1fd;
3
+ @greySnow: #f3f5f7;
4
+ @greySmoke: #e4e8ec;
5
+ @grid-images-aspect-ratio: var(--grid-images-aspect-ratio, 16/9);
6
+ @grid-images-object-position: var(--grid-images-object-position, top left);
7
+
8
+ .block-editor-gridBlock {
9
+ position: relative;
10
+ // Removed because it broke the z-index of the blockChooser, making it fall behind
11
+ // z-index: 10;
12
+
13
+ .block {
14
+ height: 100%;
15
+
16
+ .image {
17
+ & > div {
18
+ height: 100%;
19
+ }
20
+
21
+ & > div > div {
22
+ height: 100%;
23
+ }
24
+ }
25
+ }
26
+ }
27
+
28
+ [class^='block-editor-'].contained {
29
+ .block {
30
+ height: 100%;
31
+ }
32
+
33
+ .block-editor-image.contained {
34
+ .image {
35
+ & > div {
36
+ height: 100%;
37
+ }
38
+
39
+ & > div > div {
40
+ height: 100%;
41
+ }
42
+ }
43
+ }
44
+
45
+ .ui.message {
46
+ height: 100%;
47
+ border-radius: 6px;
48
+ margin: 0;
49
+ }
50
+ }
51
+
52
+ // Override handler TODO: do it better (when using QuantaToolbar, only for grids)
53
+ body.has-toolbar.has-sidebar .drag.gridBlock.handle.wrapper {
54
+ // TODO: review
55
+ margin-top: 5px;
56
+ margin-left: 0px !important;
57
+ }
58
+
59
+ // Inner Remove block button
60
+ .ui.basic.button.remove-block-button {
61
+ position: absolute;
62
+ z-index: 3;
63
+ top: 6px;
64
+ right: 2px;
65
+ display: none;
66
+
67
+ .icon {
68
+ height: 18px !important;
69
+ }
70
+
71
+ .circled {
72
+ padding: 8px;
73
+ border: 1px solid @greySmoke;
74
+ background: @greySnow;
75
+
76
+ &:hover {
77
+ background-color: @greySmoke;
78
+ }
79
+ }
80
+
81
+ &:hover {
82
+ background-color: transparent !important;
83
+ }
84
+ }
85
+
86
+ .block.gridBlock {
87
+ [class^='block-editor-'].selected .ui.basic.button.remove-block-button,
88
+ [class^='block-editor-']:hover .ui.basic.button.remove-block-button {
89
+ display: block;
90
+ }
91
+ }
92
+
93
+ // The Empty block cell (yet to be added)
94
+ .gridBlock-empty-placeholder {
95
+ position: relative;
96
+ display: flex;
97
+ height: 100%;
98
+ min-height: 200px;
99
+ flex-direction: column;
100
+ align-items: center;
101
+ justify-content: center;
102
+
103
+ background: @blueArctic;
104
+
105
+ &.selected::before {
106
+ position: absolute;
107
+ // otherwise, this layer is above the object, then it does not allow clicking inside
108
+ z-index: -1;
109
+ top: -5px;
110
+ left: -5px;
111
+ width: calc(100% + 10px);
112
+ height: calc(100% + 10px);
113
+ border: 1px solid rgba(120, 192, 215, 0.5);
114
+ border-radius: 3px;
115
+ content: '';
116
+ }
117
+
118
+ .ui.basic.button.add-block-button {
119
+ box-shadow: 0px 0px 0px @2px transparent inset !important;
120
+
121
+ .icon {
122
+ height: 32px !important;
123
+ }
124
+
125
+ .circled {
126
+ padding: 10px;
127
+ border: none;
128
+ background: @greySnow;
129
+
130
+ &:hover {
131
+ background-color: @greySmoke;
132
+ }
133
+ }
134
+
135
+ &:hover {
136
+ background-color: transparent !important;
137
+ }
138
+ }
139
+
140
+ .blocks-chooser {
141
+ top: 0;
142
+ left: 50%;
143
+ transform: translate(-50%, 0);
144
+ }
145
+ }
146
+
147
+ // Required to overcome the droppable from b-d&d at the bottom
148
+ // !! Required for ALL blocks that have b-d&d and a grid
149
+ .block.gridBlock {
150
+ .ui.grid {
151
+ margin-top: 0;
152
+ margin-bottom: 0;
153
+ }
154
+
155
+ .column {
156
+ // Removed because it broke the z-index of the blockChooser, making it fall behind
157
+ // z-index: 2;
158
+ }
159
+ }
160
+
161
+ // Toolbar position
162
+ .block-editor-gridBlock .block .toolbar {
163
+ top: -50px;
164
+ left: -10px;
165
+ border-radius: 6px;
166
+ box-shadow:
167
+ 0px 9px 18px rgba(2, 19, 34, 0.18),
168
+ 0px 6px 12px rgba(2, 19, 34, 0.06);
169
+ transform: initial;
170
+ }
171
+
172
+ .block.gridBlock {
173
+ h2,
174
+ h3 {
175
+ &:not(.headline) {
176
+ margin: 0 !important;
177
+ }
178
+ }
179
+
180
+ .grid-teaser-item {
181
+ h2,
182
+ h3 {
183
+ margin-bottom: 1rem !important;
184
+ }
185
+
186
+ .content {
187
+ h2 {
188
+ padding-bottom: 7px;
189
+ margin-bottom: 0px !important;
190
+ font-size: 14px;
191
+ font-weight: 300;
192
+ }
193
+ }
194
+ }
195
+
196
+ .grid-image-wrapper {
197
+ display: flex;
198
+ // This one is because Safari has a bug with flexed items, the default is
199
+ // align-items `stretched`, so it's required to reset it.
200
+ align-items: flex-start;
201
+ }
202
+
203
+ .grid-image-wrapper::before {
204
+ padding-top: 60%;
205
+ content: '';
206
+ float: left;
207
+ }
208
+
209
+ .grid-image-wrapper::after {
210
+ display: block;
211
+ clear: both;
212
+ content: '';
213
+ }
214
+
215
+ .grid-image-wrapper {
216
+ position: relative;
217
+
218
+ img {
219
+ position: absolute;
220
+ top: 0;
221
+ right: 0;
222
+ bottom: 0;
223
+ left: 0;
224
+ width: 100%;
225
+ height: 100%;
226
+ object-fit: cover;
227
+ }
228
+ }
229
+
230
+ .ui.message {
231
+ height: 100%;
232
+ border-radius: 6px;
233
+ margin: 0;
234
+ }
235
+ }
236
+
237
+ .grid-teaser-item {
238
+ display: flex;
239
+ flex-direction: column;
240
+
241
+ a,
242
+ a:hover {
243
+ color: rgba(0, 0, 0, 0.87);
244
+ }
245
+
246
+ p {
247
+ // Defaults are always standard, on theme with customizations
248
+ margin-bottom: 0;
249
+ text-align: left;
250
+ }
251
+
252
+ &.default {
253
+ display: flex;
254
+ flex-direction: column;
255
+ align-items: center;
256
+
257
+ img {
258
+ max-width: 300px;
259
+ align-self: center;
260
+ }
261
+ }
262
+
263
+ &.top .grid-image-wrapper {
264
+ margin-bottom: 25px;
265
+ }
266
+
267
+ &.top a {
268
+ display: flex;
269
+ flex-direction: column;
270
+ }
271
+ }
272
+
273
+ // Template chooser
274
+ .ui.button.template-chooser-item {
275
+ display: flex;
276
+ flex-direction: column;
277
+ align-items: center;
278
+ justify-content: center;
279
+ padding: 20px 20px 0 20px;
280
+ border-radius: 3px;
281
+ background: #fff;
282
+ box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.15);
283
+
284
+ .template-chooser-title {
285
+ padding-top: 20px;
286
+ padding-bottom: 20px;
287
+ text-align: center;
288
+ }
289
+ }
290
+
291
+ // Agnostic flexbox behavior for the Blocks Editor
292
+ // Reasoning: SemanticUI Grid does not support detached (as non consecutive)
293
+ // Grid > Grid.Columns support, so we have to build our own because of the
294
+ // Blocks Editor wrappers
295
+ .block.gridBlock .grid-items [data-rbd-droppable-id] {
296
+ display: flex;
297
+ }
298
+
299
+ // general spacing in the Row block wrapper
300
+ .block.gridBlock [class^='block-editor-'],
301
+ [class^='block-editor-'].contained {
302
+ padding-right: 1rem;
303
+ padding-left: 1rem;
304
+ margin-top: 1rem;
305
+ margin-bottom: 1rem;
306
+ }
307
+
308
+ .block.gridBlock .one.grid-items [class^='block-editor-'] {
309
+ width: 100%;
310
+ }
311
+
312
+ .block.gridBlock .two.grid-items [class^='block-editor-'] {
313
+ width: 50%;
314
+ }
315
+
316
+ .block.gridBlock .three.grid-items [class^='block-editor-'] {
317
+ width: 33.33333333%;
318
+ }
319
+
320
+ .block.gridBlock .four.grid-items [class^='block-editor-'] {
321
+ width: 25%;
322
+ }
323
+
324
+ // Outter cell item flexbox behavior so all have the same height
325
+ .block.gridBlock [class^='block-editor-'],
326
+ [class^='block-editor-'].contained {
327
+ display: inline-flex !important;
328
+ flex-direction: column;
329
+ align-self: stretch;
330
+ }
331
+
332
+ // (Inner) cell wrapper flexbox behavior so all have the same height
333
+ .cell-wrapper {
334
+ position: relative;
335
+ flex-grow: 1;
336
+ }
337
+
338
+ // Add our own block selected marker different than the normal one so we can full control over it
339
+ .block.gridBlock {
340
+ [class^='block-editor-'].selected .cell-wrapper::before {
341
+ position: absolute;
342
+ // otherwise, this layer is above the object, then it does not allow clicking inside
343
+ z-index: -1;
344
+ top: -5px;
345
+ left: -5px;
346
+ display: block;
347
+ width: calc(100% + 10px);
348
+ height: calc(100% + 10px);
349
+ border: 1px solid rgba(120, 192, 215, 0.5);
350
+ border-radius: 3px;
351
+ content: '';
352
+ }
353
+ }
354
+
355
+ // Remove default bottom image block margin
356
+ .block.gridBlock [class^='block-editor-'] .block.image,
357
+ [class^='block-editor-'].contained .block.image {
358
+ margin: 0;
359
+ }
360
+
361
+ // Remove the text block "add block" button TODO: remove when we move to Quanta Toolbar
362
+ .block.gridBlock [class^='block-editor-'] .block-add-button {
363
+ display: none;
364
+ }
365
+
366
+ // Remove completely the default inner selection marker, so we are using our own
367
+ .block.gridBlock {
368
+ [class^='block-editor-'] .block.selected::before {
369
+ content: unset;
370
+ }
371
+ }
372
+
373
+ // Disable hover blue border on inner blocks
374
+ .block.gridBlock [class^='block-editor-'] {
375
+ .block:not(.inner):not(.selected)::before {
376
+ content: unset;
377
+ }
378
+ }
379
+
380
+ // Remove block selection blue outline on hover for view only
381
+ .block.gridBlock {
382
+ :not([class^='block-editor-']) .block:hover::before {
383
+ border: none;
384
+ }
385
+ }
386
+
387
+ .block.gridBlock {
388
+ .block.inner.slate {
389
+ cursor: text;
390
+ }
391
+
392
+ body.cms-ui .ui.basic.segment.content-area & {
393
+ cursor: grab;
394
+ }
395
+ }
396
+
397
+ // Aspect ratio on all images
398
+ .grid-image-wrapper img,
399
+ .gridBlock .block.image img,
400
+ .block-editor-gridBlock .block-editor-image img,
401
+ .block-editor-image.contained img {
402
+ width: 100%;
403
+ aspect-ratio: @grid-images-aspect-ratio;
404
+ object-fit: cover;
405
+ object-position: @grid-images-object-position;
406
+ }
407
+
408
+ // Prevents the above styling to leak to the unset image wrapper
409
+ .block-editor-gridBlock .block-editor-image .no-image-wrapper img,
410
+ .block-editor-image.contained .no-image-wrapper img {
411
+ width: unset;
412
+ }
413
+
414
+ .block.gridBlock .teaser-item,
415
+ .block-editor-teaser.contained .teaser-item {
416
+ flex-direction: column;
417
+
418
+ &.default .image-wrapper {
419
+ width: 100%;
420
+ margin-right: 0;
421
+ margin-bottom: 25px;
422
+ }
423
+ }
424
+
425
+ .container-chooser-wrapper {
426
+ z-index: 10;
427
+ }
@@ -1,4 +1,7 @@
1
1
  #page-login {
2
+ display: flex;
3
+ justify-content: center;
4
+
2
5
  .help {
3
6
  a {
4
7
  &:hover,