@plone/volto 19.0.0-alpha.0 → 19.0.0-alpha.10

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 (367) hide show
  1. package/.eslintignore +2 -0
  2. package/.eslintrc +37 -0
  3. package/CHANGELOG.md +274 -2
  4. package/README.md +3 -6
  5. package/cypress/docker/prefixed-rules.yml +26 -0
  6. package/cypress/docker/prefixed.yml +24 -0
  7. package/cypress/support/commands.js +12 -6
  8. package/cypress/support/guillotina.js +1 -0
  9. package/cypress.config.js +1 -0
  10. package/locales/af.json +1 -0
  11. package/locales/ar.json +1 -0
  12. package/locales/bg.json +1 -0
  13. package/locales/bn.json +1 -0
  14. package/locales/ca/LC_MESSAGES/volto.po +96 -17
  15. package/locales/ca.json +1 -1
  16. package/locales/cs.json +1 -0
  17. package/locales/cy.json +1 -0
  18. package/locales/da.json +1 -0
  19. package/locales/de/LC_MESSAGES/volto.po +104 -25
  20. package/locales/de.json +1 -1
  21. package/locales/el.json +1 -0
  22. package/locales/en/LC_MESSAGES/volto.po +97 -18
  23. package/locales/en.json +1 -1
  24. package/locales/en_AU.json +1 -0
  25. package/locales/en_GB.json +1 -0
  26. package/locales/eo.json +1 -0
  27. package/locales/es/LC_MESSAGES/volto.po +97 -18
  28. package/locales/es.json +1 -1
  29. package/locales/et.json +1 -0
  30. package/locales/eu/LC_MESSAGES/volto.po +96 -17
  31. package/locales/eu.json +1 -1
  32. package/locales/fa.json +1 -0
  33. package/locales/fi/LC_MESSAGES/volto.po +96 -17
  34. package/locales/fi.json +1 -1
  35. package/locales/fr/LC_MESSAGES/volto.po +97 -18
  36. package/locales/fr.json +1 -1
  37. package/locales/fu.json +1 -0
  38. package/locales/gl.json +1 -0
  39. package/locales/he.json +1 -0
  40. package/locales/hi/LC_MESSAGES/volto.po +100 -21
  41. package/locales/hi.json +1 -1
  42. package/locales/hr.json +1 -0
  43. package/locales/hu.json +1 -0
  44. package/locales/hy.json +1 -0
  45. package/locales/id.json +1 -0
  46. package/locales/it/LC_MESSAGES/volto.po +101 -22
  47. package/locales/it.json +1 -1
  48. package/locales/ja/LC_MESSAGES/volto.po +96 -17
  49. package/locales/ja.json +1 -1
  50. package/locales/ka.json +1 -0
  51. package/locales/kn.json +1 -0
  52. package/locales/ko.json +1 -0
  53. package/locales/lt.json +1 -0
  54. package/locales/lv.json +1 -0
  55. package/locales/mi.json +1 -0
  56. package/locales/mk.json +1 -0
  57. package/locales/my.json +1 -0
  58. package/locales/nb_NO.json +1 -0
  59. package/locales/nl/LC_MESSAGES/volto.po +100 -21
  60. package/locales/nl.json +1 -1
  61. package/locales/nn.json +1 -0
  62. package/locales/pl.json +1 -0
  63. package/locales/pt/LC_MESSAGES/volto.po +96 -17
  64. package/locales/pt.json +1 -1
  65. package/locales/pt_BR/LC_MESSAGES/volto.po +116 -37
  66. package/locales/pt_BR.json +1 -1
  67. package/locales/rm.json +1 -0
  68. package/locales/ro/LC_MESSAGES/volto.po +100 -21
  69. package/locales/ro.json +1 -1
  70. package/locales/ru/LC_MESSAGES/volto.po +100 -21
  71. package/locales/ru.json +1 -1
  72. package/locales/sk.json +1 -0
  73. package/locales/sl.json +1 -0
  74. package/locales/sm.json +1 -0
  75. package/locales/sq.json +1 -0
  76. package/locales/sr.json +1 -0
  77. package/locales/sr@cyrl.json +1 -0
  78. package/locales/sr@latn.json +1 -0
  79. package/locales/sv.json +1 -1
  80. package/locales/ta.json +1 -0
  81. package/locales/te.json +1 -0
  82. package/locales/th.json +1 -0
  83. package/locales/to.json +1 -0
  84. package/locales/tr.json +1 -0
  85. package/locales/uk.json +1 -0
  86. package/locales/vi.json +1 -0
  87. package/locales/volto.pot +97 -18
  88. package/locales/zh_CN/LC_MESSAGES/volto.po +96 -17
  89. package/locales/zh_CN.json +1 -1
  90. package/locales/zh_Hant.json +1 -0
  91. package/locales/zh_Hant_HK.json +1 -0
  92. package/package.json +36 -27
  93. package/razzle.config.js +16 -0
  94. package/src/actions/actions/actions.test.js +3 -3
  95. package/src/actions/addons/addons.test.js +15 -12
  96. package/src/actions/aliases/aliases.test.js +1 -1
  97. package/src/actions/content/content.js +0 -1
  98. package/src/actions/controlpanels/controlpanels.js +13 -7
  99. package/src/actions/controlpanels/controlpanels.test.js +11 -5
  100. package/src/actions/querystring/querystring.test.js +2 -2
  101. package/src/actions/types/types.test.js +1 -1
  102. package/src/actions/users/users.js +2 -2
  103. package/src/components/manage/Actions/Actions.test.jsx +5 -1
  104. package/src/components/manage/Add/Add.jsx +27 -26
  105. package/src/components/manage/Add/Add.test.jsx +6 -3
  106. package/src/components/manage/Aliases/Aliases.test.jsx +7 -7
  107. package/src/components/manage/Blocks/Block/BlocksForm.jsx +1 -0
  108. package/src/components/manage/Blocks/Block/BlocksForm.test.jsx +48 -16
  109. package/src/components/manage/Blocks/Block/Edit.jsx +3 -1
  110. package/src/components/manage/Blocks/Block/EditBlockWrapper.jsx +9 -4
  111. package/src/components/manage/Blocks/Block/Settings.test.jsx +5 -1
  112. package/src/components/manage/Blocks/Block/StyleWrapper.jsx +11 -3
  113. package/src/components/manage/Blocks/Description/View.test.jsx +1 -1
  114. package/src/components/manage/Blocks/HTML/Edit.test.jsx +12 -5
  115. package/src/components/manage/Blocks/HTML/View.test.jsx +1 -1
  116. package/src/components/manage/Blocks/Image/Edit.jsx +5 -1
  117. package/src/components/manage/Blocks/Image/ImageSidebar.test.jsx +6 -2
  118. package/src/components/manage/Blocks/LeadImage/Edit.jsx +2 -2
  119. package/src/components/manage/Blocks/LeadImage/LeadImageSidebar.jsx +1 -1
  120. package/src/components/manage/Blocks/LeadImage/LeadImageSidebar.test.jsx +8 -1
  121. package/src/components/manage/Blocks/Listing/ImageGallery.jsx +6 -4
  122. package/src/components/manage/Blocks/Listing/View.test.jsx +3 -1
  123. package/src/components/manage/Blocks/Maps/Edit.jsx +2 -1
  124. package/src/components/manage/Blocks/Maps/MapsSidebar.test.jsx +5 -1
  125. package/src/components/manage/Blocks/Search/SearchBlockView.jsx +21 -4
  126. package/src/components/manage/Blocks/Search/components/DateRangeFacet.test.jsx +13 -7
  127. package/src/components/manage/Blocks/Search/components/SelectFacet.test.jsx +12 -6
  128. package/src/components/manage/Blocks/Teaser/Data.jsx +21 -7
  129. package/src/components/manage/Blocks/Teaser/DefaultBody.jsx +1 -1
  130. package/src/components/manage/Blocks/Teaser/schema.js +8 -3
  131. package/src/components/manage/Blocks/Title/Edit.jsx +8 -2
  132. package/src/components/manage/Blocks/ToC/variations/DefaultTocRenderer.test.jsx +11 -1
  133. package/src/components/manage/Blocks/Video/Edit.jsx +2 -1
  134. package/src/components/manage/Blocks/Video/VideoSidebar.test.jsx +5 -1
  135. package/src/components/manage/ConditionalLink/ConditionalLink.test.tsx +109 -0
  136. package/src/components/manage/ConditionalLink/ConditionalLink.tsx +36 -0
  137. package/src/components/manage/Contents/Contents.jsx +23 -2
  138. package/src/components/manage/Contents/Contents.test.jsx +36 -13
  139. package/src/components/manage/Contents/ContentsBreadcrumbs.Multilingual.test.jsx +18 -5
  140. package/src/components/manage/Contents/ContentsBreadcrumbs.jsx +20 -26
  141. package/src/components/manage/Contents/ContentsBreadcrumbs.test.jsx +14 -0
  142. package/src/components/manage/Contents/ContentsDeleteModal.jsx +258 -206
  143. package/src/components/manage/Contents/ContentsDeleteModal.stories.jsx +26 -8
  144. package/src/components/manage/Contents/ContentsItem.jsx +10 -2
  145. package/src/components/manage/Contents/ContentsPropertiesModal.test.jsx +5 -1
  146. package/src/components/manage/Contents/ContentsRenameModal.test.jsx +5 -1
  147. package/src/components/manage/Contents/ContentsTagsModal.test.jsx +5 -1
  148. package/src/components/manage/Contents/ContentsUploadModal.test.jsx +13 -22
  149. package/src/components/manage/Contents/ContentsWorkflowModal.test.jsx +5 -1
  150. package/src/components/manage/Contents/__mocks__/index.tsx +16 -0
  151. package/src/components/manage/Contents/__mocks__/index.vitest.tsx +5 -0
  152. package/src/components/manage/Controlpanels/AddonsControlpanel.test.jsx +28 -3
  153. package/src/components/manage/Controlpanels/Aliases.test.jsx +35 -3
  154. package/src/components/manage/Controlpanels/ContentType.jsx +1 -1
  155. package/src/components/manage/Controlpanels/ContentType.test.jsx +29 -3
  156. package/src/components/manage/Controlpanels/ContentTypeLayout.test.jsx +4 -2
  157. package/src/components/manage/Controlpanels/ContentTypes.test.jsx +25 -2
  158. package/src/components/manage/Controlpanels/Controlpanel.test.jsx +37 -6
  159. package/src/components/manage/Controlpanels/Controlpanels.test.jsx +47 -3
  160. package/src/components/manage/Controlpanels/Groups/GroupsControlpanel.jsx +3 -2
  161. package/src/components/manage/Controlpanels/Groups/GroupsControlpanel.test.jsx +15 -9
  162. package/src/components/manage/Controlpanels/ModerateComments.test.jsx +31 -5
  163. package/src/components/manage/Controlpanels/Rules/AddRule.test.jsx +13 -4
  164. package/src/components/manage/Controlpanels/Rules/ConfigureRule.test.jsx +9 -5
  165. package/src/components/manage/Controlpanels/Rules/EditRule.test.jsx +12 -4
  166. package/src/components/manage/Controlpanels/Rules/Rules.test.jsx +7 -3
  167. package/src/components/manage/Controlpanels/UndoControlpanel.test.jsx +33 -4
  168. package/src/components/manage/Controlpanels/Users/RenderUsers.jsx +156 -175
  169. package/src/components/manage/Controlpanels/Users/UserGroupMembershipControlPanel.test.jsx +3 -1
  170. package/src/components/manage/Controlpanels/Users/UsersControlpanel.jsx +575 -630
  171. package/src/components/manage/Controlpanels/Users/UsersControlpanel.test.jsx +16 -9
  172. package/src/components/manage/Delete/Delete.test.jsx +45 -4
  173. package/src/components/manage/Diff/Diff.test.jsx +15 -6
  174. package/src/components/manage/Diff/DiffField.test.jsx +12 -6
  175. package/src/components/manage/Display/Display.test.jsx +17 -6
  176. package/src/components/manage/Edit/Edit.jsx +2 -3
  177. package/src/components/manage/Edit/Edit.test.jsx +11 -3
  178. package/src/components/manage/Form/BlockDataForm.test.jsx +5 -1
  179. package/src/components/manage/Form/Form.jsx +32 -0
  180. package/src/components/manage/Form/Form.test.jsx +27 -19
  181. package/src/components/manage/Form/InlineForm.jsx +2 -2
  182. package/src/components/manage/Form/InlineForm.test.jsx +5 -1
  183. package/src/components/manage/Form/ModalForm.test.jsx +5 -1
  184. package/src/components/manage/Form/__mocks__/index.tsx +17 -0
  185. package/src/components/manage/Form/__mocks__/index.vitest.tsx +73 -0
  186. package/src/components/manage/History/History.test.jsx +3 -1
  187. package/src/components/manage/LinksToItem/LinksToItem.test.jsx +6 -4
  188. package/src/components/manage/MaybeWrap/MaybeWrap.tsx +15 -0
  189. package/src/components/manage/Multilingual/CompareLanguages.jsx +2 -5
  190. package/src/components/manage/Multilingual/CreateTranslation.jsx +8 -8
  191. package/src/components/manage/Multilingual/ManageTranslations.jsx +4 -2
  192. package/src/components/manage/Multilingual/ManageTranslations.test.jsx +8 -3
  193. package/src/components/manage/Multilingual/TranslationObject.jsx +1 -1
  194. package/src/components/manage/Preferences/ChangePassword.test.jsx +9 -2
  195. package/src/components/manage/Preferences/PersonalInformation.test.jsx +3 -1
  196. package/src/components/manage/Preferences/PersonalPreferences.test.jsx +20 -7
  197. package/src/components/manage/Rules/Rules.test.jsx +6 -3
  198. package/src/components/manage/Sharing/Sharing.test.jsx +3 -1
  199. package/src/components/manage/Sidebar/ObjectBrowserNav.jsx +2 -1
  200. package/src/components/manage/Sidebar/ObjectBrowserNav.test.jsx +3 -3
  201. package/src/components/manage/Sidebar/SidebarPortal.test.tsx +42 -0
  202. package/src/components/manage/Sidebar/SidebarPortal.tsx +48 -0
  203. package/src/components/manage/TemplateChooser/TemplateChooser.jsx +2 -1
  204. package/src/components/manage/Toolbar/More.jsx +4 -1
  205. package/src/components/manage/Toolbar/More.test.jsx +9 -7
  206. package/src/components/manage/Toolbar/PersonalTools.jsx +2 -1
  207. package/src/components/manage/Toolbar/Toolbar.jsx +3 -4
  208. package/src/components/manage/Toolbar/Types.jsx +7 -7
  209. package/src/components/manage/UniversalLink/UniversalLink.test.jsx +196 -14
  210. package/src/components/manage/UniversalLink/UniversalLink.tsx +215 -0
  211. package/src/components/manage/Widgets/ArrayWidget.test.jsx +22 -5
  212. package/src/components/manage/Widgets/CheckboxGroupWidget.test.jsx +12 -5
  213. package/src/components/manage/Widgets/DatetimeWidget.jsx +5 -0
  214. package/src/components/manage/Widgets/DatetimeWidget.test.jsx +21 -6
  215. package/src/components/manage/Widgets/FileWidget.jsx +14 -8
  216. package/src/components/manage/Widgets/ImageWidget.jsx +176 -40
  217. package/src/components/manage/Widgets/InternalUrlWidget.jsx +2 -0
  218. package/src/components/manage/Widgets/NumberWidget.test.jsx +8 -7
  219. package/src/components/manage/Widgets/ObjectBrowserWidget.jsx +3 -0
  220. package/src/components/manage/Widgets/ObjectListWidget.jsx +11 -1
  221. package/src/components/manage/Widgets/ObjectListWidget.test.jsx +18 -8
  222. package/src/components/manage/Widgets/ObjectWidget.test.jsx +5 -1
  223. package/src/components/manage/Widgets/RadioGroupWidget.test.jsx +12 -5
  224. package/src/components/manage/Widgets/RecurrenceWidget/RecurrenceWidget.test.jsx +12 -6
  225. package/src/components/manage/Widgets/RegistryImageWidget.test.jsx +44 -41
  226. package/src/components/manage/Widgets/SchemaWidget.test.jsx +12 -5
  227. package/src/components/manage/Widgets/SchemaWidgetFieldset.test.jsx +12 -5
  228. package/src/components/manage/Widgets/SelectAutoComplete.jsx +29 -12
  229. package/src/components/manage/Widgets/SelectAutoComplete.test.jsx +12 -6
  230. package/src/components/manage/Widgets/SelectWidget.jsx +3 -1
  231. package/src/components/manage/Widgets/SelectWidget.test.jsx +12 -6
  232. package/src/components/manage/Widgets/TimeWidget.test.jsx +13 -5
  233. package/src/components/manage/Widgets/TokenWidget.test.jsx +12 -6
  234. package/src/components/manage/Widgets/UrlWidget.jsx +2 -0
  235. package/src/components/manage/Widgets/VocabularyTermsWidget.test.jsx +18 -9
  236. package/src/components/manage/Widgets/__mocks__/index.tsx +16 -0
  237. package/src/components/manage/Widgets/__mocks__/index.vitest.tsx +41 -0
  238. package/src/components/manage/Workflow/Workflow.test.jsx +17 -7
  239. package/src/components/theme/AlternateHrefLangs/AlternateHrefLangs.jsx +1 -3
  240. package/src/components/theme/AlternateHrefLangs/AlternateHrefLangs.test.jsx +0 -4
  241. package/src/components/theme/App/App.jsx +3 -1
  242. package/src/components/theme/App/App.test.jsx +22 -17
  243. package/src/components/theme/AppExtras/AppExtras.test.jsx +6 -6
  244. package/src/components/theme/Avatar/Avatar.jsx +2 -1
  245. package/src/components/theme/Comments/CommentEditModal.test.jsx +5 -1
  246. package/src/components/theme/Comments/Comments.test.jsx +29 -12
  247. package/src/components/theme/ContactForm/ContactForm.test.jsx +8 -4
  248. package/src/components/theme/FormattedDate/FormattedDate.stories.jsx +20 -2
  249. package/src/components/theme/Header/Header.test.jsx +19 -13
  250. package/src/components/theme/Image/Image.jsx +11 -8
  251. package/src/components/theme/LanguageSelector/{LanguageSelector.test.jsx → LanguageSelector.test.tsx} +6 -6
  252. package/src/components/theme/LanguageSelector/LanguageSelector.tsx +89 -0
  253. package/src/components/theme/Logo/Logo.Multilingual.test.jsx +0 -5
  254. package/src/components/theme/Logout/Logout.test.jsx +1 -1
  255. package/src/components/theme/MultilingualRedirector/MultilingualRedirector.jsx +8 -12
  256. package/src/components/theme/MultilingualRedirector/MultilingualRedirector.test.jsx +3 -5
  257. package/src/components/theme/Navigation/NavItem.jsx +1 -5
  258. package/src/components/theme/Navigation/Navigation.Multilingual.test.jsx +0 -5
  259. package/src/components/theme/NotFound/NotFound.jsx +5 -2
  260. package/src/components/theme/NotFound/NotFound.test.jsx +3 -0
  261. package/src/components/theme/PasswordReset/PasswordReset.test.jsx +10 -1
  262. package/src/components/theme/PasswordReset/RequestPasswordReset.test.jsx +5 -1
  263. package/src/components/theme/PreviewImage/PreviewImage.jsx +1 -1
  264. package/src/components/theme/Register/Register.test.jsx +5 -1
  265. package/src/components/theme/RequestTimeout/RequestTimeout.jsx +1 -1
  266. package/src/components/theme/Search/Search.test.jsx +6 -4
  267. package/src/components/theme/Sitemap/Sitemap.jsx +6 -5
  268. package/src/components/theme/Sitemap/Sitemap.test.jsx +0 -1
  269. package/src/components/theme/TsTest/TsTest.test.tsx +0 -1
  270. package/src/components/theme/View/EventDatesInfo.test.jsx +12 -5
  271. package/src/components/theme/View/EventView.test.jsx +12 -5
  272. package/src/components/theme/View/FileView.jsx +9 -1
  273. package/src/components/theme/View/ListingView.test.jsx +2 -0
  274. package/src/components/theme/View/SummaryView.test.jsx +10 -0
  275. package/src/components/theme/View/TabularView.test.jsx +1 -0
  276. package/src/components/theme/View/View.jsx +1 -1
  277. package/src/components/theme/View/View.test.jsx +42 -23
  278. package/src/components/theme/Widgets/ImageWidget.jsx +2 -1
  279. package/src/config/ControlPanels.js +1 -0
  280. package/src/config/index.js +18 -25
  281. package/src/config/server.js +0 -2
  282. package/src/express-middleware/devproxy.js +20 -5
  283. package/src/helpers/Api/APIResourceWithAuth.js +8 -3
  284. package/src/helpers/Api/Api.js +7 -4
  285. package/src/helpers/Api/Api.plone.rest.test.js +11 -9
  286. package/src/helpers/Api/Api.test.js +11 -14
  287. package/src/helpers/AsyncConnect/AsyncConnect.test.jsx +145 -189
  288. package/src/helpers/AsyncConnect/ssr.js +4 -1
  289. package/src/helpers/AuthToken/AuthToken.test.js +60 -22
  290. package/src/helpers/Blocks/Blocks.test.js +1 -1
  291. package/src/helpers/Content/Content.js +23 -0
  292. package/src/helpers/Content/Content.test.js +39 -0
  293. package/src/helpers/Content/withClientSideContent.jsx +35 -0
  294. package/src/helpers/Extensions/withBlockSchemaEnhancer.jsx +4 -1
  295. package/src/helpers/Html/Html.jsx +13 -7
  296. package/src/helpers/Html/Html.test.jsx +32 -28
  297. package/src/helpers/LanguageMap/LanguageMap.js +115 -8
  298. package/src/helpers/Loadable/__mocks__/Loadable.jsx +16 -1
  299. package/src/helpers/Loadable/__mocks__/Loadable.vitest.jsx +39 -0
  300. package/src/helpers/MessageLabels/MessageLabels.js +5 -0
  301. package/src/helpers/Sitemap/Sitemap.js +4 -4
  302. package/src/helpers/Url/Url.js +32 -2
  303. package/src/helpers/Url/Url.test.js +62 -0
  304. package/src/helpers/Utils/withSaveAsDraft.jsx +241 -0
  305. package/src/hooks/user/useUser.js +1 -1
  306. package/src/middleware/Api.test.js +51 -0
  307. package/src/middleware/api.js +78 -29
  308. package/src/middleware/storeProtectLoadUtils.test.js +93 -81
  309. package/src/reducers/content/content.js +3 -18
  310. package/src/reducers/diff/diff.js +5 -1
  311. package/src/reducers/diff/diff.test.js +60 -4
  312. package/src/routes.js +4 -2
  313. package/src/server.jsx +45 -14
  314. package/src/start-client.jsx +9 -6
  315. package/src/start-server.js +9 -3
  316. package/test-setup-config.jsx +0 -2
  317. package/test-setup-globals-vitest.js +46 -0
  318. package/theme/themes/pastanaga/collections/table.overrides +9 -0
  319. package/theme/themes/pastanaga/extras/blocks.less +26 -0
  320. package/theme/themes/pastanaga/extras/contents.less +17 -5
  321. package/theme/themes/pastanaga/extras/main.less +32 -2
  322. package/tsconfig.declarations.json +12 -1
  323. package/tsconfig.json +5 -5
  324. package/types/components/manage/Blocks/Teaser/schema.d.ts +1 -0
  325. package/types/components/manage/ConditionalLink/ConditionalLink.d.ts +11 -15
  326. package/types/components/manage/Contents/__mocks__/index.vitest.d.ts +2 -0
  327. package/types/components/manage/Controlpanels/Users/RenderUsers.d.ts +18 -2
  328. package/types/components/manage/Controlpanels/Users/UsersControlpanel.d.ts +6 -2
  329. package/types/components/manage/Controlpanels/index.d.ts +2 -2
  330. package/types/components/manage/Form/__mocks__/index.vitest.d.ts +8 -0
  331. package/types/components/manage/MaybeWrap/MaybeWrap.d.ts +7 -5
  332. package/types/components/manage/Sidebar/SidebarPortal.d.ts +7 -15
  333. package/types/components/manage/UniversalLink/UniversalLink.d.ts +54 -20
  334. package/types/components/manage/Widgets/ImageWidget.d.ts +41 -1
  335. package/types/components/manage/Widgets/RecurrenceWidget/Utils.d.ts +12 -18
  336. package/types/components/manage/Widgets/__mocks__/index.vitest.d.ts +33 -0
  337. package/types/components/theme/FormattedDate/FormattedDate.stories.d.ts +1 -1
  338. package/types/components/theme/LanguageSelector/LanguageSelector.d.ts +3 -10
  339. package/types/helpers/Content/Content.d.ts +7 -0
  340. package/types/helpers/Content/withClientSideContent.d.ts +1 -0
  341. package/types/helpers/Extensions/withBlockSchemaEnhancer.d.ts +4 -5
  342. package/types/helpers/Helmet/Helmet.d.ts +1 -1
  343. package/types/helpers/LanguageMap/LanguageMap.d.ts +428 -4
  344. package/types/helpers/Loadable/__mocks__/Loadable.vitest.d.ts +3 -0
  345. package/types/helpers/MessageLabels/MessageLabels.d.ts +68 -62
  346. package/types/helpers/Url/Url.d.ts +14 -0
  347. package/types/helpers/Url/bulkFlattenToAppURL.d.ts +5 -0
  348. package/types/helpers/Utils/withSaveAsDraft.d.ts +1 -0
  349. package/types/middleware/api.d.ts +6 -9
  350. package/types/react-router-hash-link.d.ts +12 -0
  351. package/types/reducers/index.d.ts +1 -0
  352. package/types/routes.d.ts +4 -0
  353. package/types/server.d.ts +1 -1
  354. package/types/start-client.d.ts +0 -1
  355. package/vite-plugins/svg.mjs +81 -0
  356. package/vitest.config.mjs +77 -0
  357. package/package-why.json +0 -34
  358. package/src/actions/content/content.multilingual.test.js +0 -17
  359. package/src/components/manage/ConditionalLink/ConditionalLink.jsx +0 -27
  360. package/src/components/manage/ConditionalLink/ConditionalLink.test.jsx +0 -30
  361. package/src/components/manage/MaybeWrap/MaybeWrap.jsx +0 -9
  362. package/src/components/manage/Sidebar/SidebarPortal.jsx +0 -47
  363. package/src/components/manage/Sidebar/SidebarPortal.test.jsx +0 -26
  364. package/src/components/manage/UniversalLink/UniversalLink.jsx +0 -154
  365. package/src/components/manage/Widgets/FileWidget.test.jsx +0 -91
  366. package/src/components/theme/LanguageSelector/LanguageSelector.jsx +0 -77
  367. package/theme/themes/pastanaga/extras/utils.less +0 -63
package/src/server.jsx CHANGED
@@ -18,8 +18,9 @@ import { CookiesProvider } from 'react-cookie';
18
18
  import cookiesMiddleware from 'universal-cookie-express';
19
19
  import debug from 'debug';
20
20
 
21
- import routes from '@root/routes';
21
+ import routes from '@plone/volto/routes';
22
22
  import config from '@plone/volto/registry';
23
+ import okMiddleware from '@plone/volto/express-middleware/ok';
23
24
 
24
25
  import { flattenToAppURL } from '@plone/volto/helpers/Url/Url';
25
26
  import Html from '@plone/volto/helpers/Html/Html';
@@ -39,10 +40,14 @@ import ErrorPage from '@plone/volto/error';
39
40
  import languages from '@plone/volto/constants/Languages.cjs';
40
41
 
41
42
  import configureStore from '@plone/volto/store';
42
- import { ReduxAsyncConnect, loadOnServer } from './helpers/AsyncConnect';
43
+ import {
44
+ ReduxAsyncConnect,
45
+ loadOnServer,
46
+ } from '@plone/volto/helpers/AsyncConnect';
43
47
 
44
48
  let locales = {};
45
49
 
50
+ // Load locales listed in supportedLanguages setting
46
51
  if (config.settings) {
47
52
  config.settings.supportedLanguages.forEach((lang) => {
48
53
  const langFileName = toGettextLang(lang);
@@ -68,10 +73,30 @@ const server = express()
68
73
  })
69
74
  .use(cookiesMiddleware());
70
75
 
76
+ // If Volto is being served under a subpath,
77
+ // make sure the static files are available there too.
78
+ // (The static middleware loads too early to access the config.)
79
+ if (config.settings.subpathPrefix) {
80
+ server.use(
81
+ config.settings.subpathPrefix,
82
+ express.static(
83
+ process.env.BUILD_DIR
84
+ ? path.join(process.env.BUILD_DIR, 'public')
85
+ : process.env.RAZZLE_PUBLIC_DIR,
86
+ {
87
+ redirect: false, // Avoid /my-prefix from being redirected to /my-prefix/
88
+ },
89
+ ),
90
+ );
91
+ }
92
+
71
93
  const middleware = (config.settings.expressMiddleware || []).filter((m) => m);
72
94
 
73
95
  server.all('*', setupServer);
74
- if (middleware.length) server.use('/', middleware);
96
+ if (middleware.length) {
97
+ server.use(config.settings.subpathPrefix || '/', middleware);
98
+ }
99
+ server.use('/', okMiddleware());
75
100
 
76
101
  server.use(function (err, req, res, next) {
77
102
  if (err) {
@@ -107,7 +132,6 @@ function setupServer(req, res, next) {
107
132
  const lang = toReactIntlLang(
108
133
  new locale.Locales(
109
134
  req.universalCookies.get('I18N_LANGUAGE') ||
110
- config.settings.defaultLanguage ||
111
135
  req.headers['accept-language'],
112
136
  )
113
137
  .best(supported)
@@ -160,8 +184,10 @@ function setupServer(req, res, next) {
160
184
  res.locals.detectedHost = `${
161
185
  req.headers['x-forwarded-proto'] || req.protocol
162
186
  }://${req.headers.host}`;
163
- config.settings.apiPath = res.locals.detectedHost;
164
- config.settings.publicURL = res.locals.detectedHost;
187
+ config.settings.apiPath =
188
+ res.locals.detectedHost + config.settings.subpathPrefix;
189
+ config.settings.publicURL =
190
+ res.locals.detectedHost + config.settings.subpathPrefix;
165
191
  }
166
192
 
167
193
  res.locals = {
@@ -184,7 +210,6 @@ server.get('/*', (req, res) => {
184
210
  const lang = toReactIntlLang(
185
211
  new locale.Locales(
186
212
  req.universalCookies.get('I18N_LANGUAGE') ||
187
- config.settings.defaultLanguage ||
188
213
  req.headers['accept-language'],
189
214
  )
190
215
  .best(supported)
@@ -224,9 +249,10 @@ server.get('/*', (req, res) => {
224
249
 
225
250
  loadOnServer({ store, location, routes, api })
226
251
  .then(() => {
252
+ const state = store.getState();
227
253
  const initialLang =
228
254
  req.universalCookies.get('I18N_LANGUAGE') ||
229
- config.settings.defaultLanguage ||
255
+ state.site.data['plone.default_language'] ||
230
256
  req.headers['accept-language'];
231
257
 
232
258
  // The content info is in the store at this point thanks to the asynconnect
@@ -236,10 +262,9 @@ server.get('/*', (req, res) => {
236
262
  // TODO: there is a bug here with content that, for any reason, doesn't
237
263
  // present the language token field, for some reason. In this case, we
238
264
  // should follow the cookie rather then switching the language
239
- const contentLang = store.getState().content.get?.error
265
+ const contentLang = state.content.get?.error
240
266
  ? initialLang
241
- : store.getState().content.data?.language?.token ||
242
- config.settings.defaultLanguage;
267
+ : state.content.data?.language?.token || initialLang;
243
268
 
244
269
  if (toBackendLang(initialLang) !== contentLang && url !== '/') {
245
270
  const newLang = toReactIntlLang(
@@ -254,7 +279,11 @@ server.get('/*', (req, res) => {
254
279
  <ChunkExtractorManager extractor={extractor}>
255
280
  <CookiesProvider cookies={req.universalCookies}>
256
281
  <Provider store={store} onError={reactIntlErrorHandler}>
257
- <StaticRouter context={context} location={req.url}>
282
+ <StaticRouter
283
+ context={context}
284
+ location={req.url}
285
+ basename={config.settings.subpathPrefix}
286
+ >
258
287
  <ReduxAsyncConnect routes={routes} helpers={api} />
259
288
  </StaticRouter>
260
289
  </Provider>
@@ -291,8 +320,8 @@ server.get('/*', (req, res) => {
291
320
  markup={markup}
292
321
  store={store}
293
322
  criticalCss={readCriticalCss(req)}
294
- apiPath={res.locals.detectedHost || config.settings.apiPath}
295
- publicURL={res.locals.detectedHost || config.settings.publicURL}
323
+ apiPath={config.settings.apiPath}
324
+ publicURL={config.settings.publicURL}
296
325
  />,
297
326
  )}
298
327
  `,
@@ -335,6 +364,8 @@ export const defaultReadCriticalCss = () => {
335
364
 
336
365
  // Exposed for the console bootstrap info messages
337
366
  server.apiPath = config.settings.apiPath;
367
+ server.internalApiPath = config.settings.internalApiPath;
368
+ server.subpathPrefix = config.settings.subpathPrefix;
338
369
  server.devProxyToApiPath = config.settings.devProxyToApiPath;
339
370
  server.proxyRewriteTarget = config.settings.proxyRewriteTarget;
340
371
  server.publicURL = config.settings.publicURL;
@@ -18,8 +18,6 @@ import Api from '@plone/volto/helpers/Api/Api';
18
18
  import { persistAuthToken } from '@plone/volto/helpers/AuthToken/AuthToken';
19
19
  import ScrollToTop from '@plone/volto/helpers/ScrollToTop/ScrollToTop';
20
20
 
21
- export const history = createBrowserHistory();
22
-
23
21
  function reactIntlErrorHandler(error) {
24
22
  debug('i18n')(error);
25
23
  }
@@ -27,6 +25,15 @@ function reactIntlErrorHandler(error) {
27
25
  export default function client() {
28
26
  const api = new Api();
29
27
 
28
+ if (window.env.RAZZLE_SUBPATH_PREFIX) {
29
+ config.settings.subpathPrefix = window.env.RAZZLE_SUBPATH_PREFIX;
30
+ }
31
+ const history = createBrowserHistory({
32
+ basename: config.settings.subpathPrefix
33
+ ? config.settings.subpathPrefix
34
+ : '/',
35
+ });
36
+
30
37
  const store = configureStore(window.__data, history, api);
31
38
  persistAuthToken(store);
32
39
 
@@ -58,10 +65,6 @@ export default function client() {
58
65
  if (window.env.RAZZLE_LEGACY_TRAVERSE) {
59
66
  config.settings.legacyTraverse = true;
60
67
  }
61
- // Support for setting the default language from a server environment variable
62
- if (window.env.defaultLanguage) {
63
- config.settings.defaultLanguage = window.env.defaultLanguage;
64
- }
65
68
 
66
69
  loadableReady(() => {
67
70
  hydrateRoot(
@@ -18,14 +18,20 @@ export default function server() {
18
18
 
19
19
  server
20
20
  .listen(port, bind_address, () => {
21
- console.log(`API server (API_PATH) is set to: ${app.apiPath}`);
22
-
23
- if (app.devProxyToApiPath)
21
+ console.log(
22
+ `The Volto server will make API requests to: ${app.internalApiPath || app.apiPath}/++api++`,
23
+ );
24
+ console.log(
25
+ `The Volto client will make API requests to: ${app.apiPath}/++api++`,
26
+ );
27
+
28
+ if (app.devProxyToApiPath) {
24
29
  console.log(
25
30
  `Proxying API requests from ${app.publicURL}/++api++ to ${
26
31
  app.devProxyToApiPath
27
32
  }${app.proxyRewriteTarget || ''}`,
28
33
  );
34
+ }
29
35
  console.log(`🎭 Volto started at ${bind_address}:${port} 🚀`);
30
36
 
31
37
  if (!process.env.RAZZLE_PUBLIC_URL)
@@ -30,12 +30,10 @@ import { registerValidators } from '@plone/volto/config/validation';
30
30
  config.set('settings', {
31
31
  apiPath: 'http://localhost:8080/Plone',
32
32
  publicURL: 'http://localhost:3000',
33
- defaultLanguage: 'en',
34
33
  supportedLanguages: ['en'],
35
34
  defaultPageSize: 25,
36
35
  showTags: true,
37
36
  showRelatedItems: true,
38
- isMultilingual: false,
39
37
  nonContentRoutes,
40
38
  nonContentRoutesPublic,
41
39
  contentIcons: contentIcons,
@@ -0,0 +1,46 @@
1
+ import '@testing-library/jest-dom';
2
+ import { expect, describe, it, vi } from 'vitest';
3
+
4
+ global.describe = describe;
5
+ global.it = it;
6
+ global.expect = expect;
7
+ global.vi = vi;
8
+
9
+ global.__CLIENT__ = true;
10
+ global.__DEVELOPMENT__ = false;
11
+ global.__SERVER__ = false;
12
+ global.__TEST__ = true;
13
+
14
+ window.matchMedia =
15
+ window.matchMedia ||
16
+ function (query) {
17
+ return {
18
+ matches: query === '(min-width: 1024px)',
19
+ addListener: function () {},
20
+ removeListener: function () {},
21
+ };
22
+ };
23
+
24
+ vi.stubGlobal(
25
+ 'fetch',
26
+ vi.fn(() =>
27
+ Promise.resolve({
28
+ json: () => Promise.resolve({}),
29
+ text: () => Promise.resolve(''),
30
+ }),
31
+ ),
32
+ );
33
+
34
+ vi.stubGlobal('localStorage', {
35
+ getItem: vi.fn(),
36
+ setItem: vi.fn(),
37
+ removeItem: vi.fn(),
38
+ clear: vi.fn(),
39
+ });
40
+
41
+ vi.stubGlobal('sessionStorage', {
42
+ getItem: vi.fn(),
43
+ setItem: vi.fn(),
44
+ removeItem: vi.fn(),
45
+ clear: vi.fn(),
46
+ });
@@ -19,6 +19,15 @@
19
19
  vertical-align: @headerVerticalAlign;
20
20
  }
21
21
 
22
+ // use sorting icons from icons.woff instead of assuming it's font awesome
23
+ .ui.sortable.table thead th.ascending::after {
24
+ content: '\E9EC';
25
+ }
26
+
27
+ .ui.sortable.table thead th.descending::after {
28
+ content: '\E9EB';
29
+ }
30
+
22
31
  .ui.table tr > th:first-child {
23
32
  border-left: none;
24
33
  }
@@ -56,6 +56,13 @@
56
56
  background-color: rgba(120, 192, 215, 0.375);
57
57
  }
58
58
 
59
+ .block.selected.error::before,
60
+ .block.selected.error:hover::before,
61
+ .block.error:hover::before,
62
+ .block.error::before {
63
+ border-color: #ff0000 !important;
64
+ }
65
+
59
66
  #toolbar .toolbar-actions .blockCount {
60
67
  position: absolute;
61
68
  margin-top: 18px;
@@ -427,10 +434,18 @@ body.has-toolbar.has-sidebar-collapsed .ui.wrapper > .ui.inner.block.full {
427
434
  top: 1em;
428
435
  right: 1em;
429
436
 
437
+ .sidebar-container & .ui.icon.button:hover {
438
+ background: transparent !important;
439
+ }
440
+
430
441
  .icon.circled {
431
442
  border: 1px solid #e4e8ec;
432
443
  background: #f3f5f7;
433
444
  box-shadow: inset 0 0 0 0.14285714rem transparent !important;
445
+
446
+ &:hover {
447
+ background-color: #e4e8ec;
448
+ }
434
449
  }
435
450
  }
436
451
 
@@ -983,6 +998,17 @@ div.image-upload-widget-image {
983
998
  }
984
999
  }
985
1000
 
1001
+ // In the sidebar, the height is forced on all .ui.input T_T
1002
+ .ui.form .ui.input.input-anchorlink-theme,
1003
+ .ui.form
1004
+ .inline.field
1005
+ .link-form-container
1006
+ .wrapper
1007
+ .ui.input.input-anchorlink-theme
1008
+ input {
1009
+ height: 34px;
1010
+ }
1011
+
986
1012
  .block.image.align.left,
987
1013
  .block.image.align.right {
988
1014
  img {
@@ -107,6 +107,18 @@
107
107
  top: auto;
108
108
  bottom: 100%;
109
109
  }
110
+
111
+ .search-feedback {
112
+ position: absolute;
113
+ overflow: hidden;
114
+ width: 1px;
115
+ height: 1px;
116
+ padding: 0;
117
+ border: 0;
118
+ margin: -1px;
119
+ clip: rect(0, 0, 0, 0);
120
+ white-space: nowrap;
121
+ }
110
122
  }
111
123
 
112
124
  .ui.table .icon-align,
@@ -149,8 +161,12 @@
149
161
  .ui.table .button-margin {
150
162
  padding: 4px;
151
163
  margin-right: 1em;
152
- background-color: rgb(228, 1, 102);
164
+ background-color: #007eb1;
153
165
  color: white;
166
+
167
+ &.expired-past {
168
+ background-color: rgb(228, 1, 102);
169
+ }
154
170
  }
155
171
  }
156
172
 
@@ -185,10 +201,6 @@
185
201
  white-space: normal;
186
202
  word-break: break-all;
187
203
  }
188
-
189
- .broken-links-list {
190
- margin-top: 30px;
191
- }
192
204
  }
193
205
 
194
206
  .contenttype-event {
@@ -443,6 +443,10 @@ fieldset.invisible {
443
443
  padding: 0;
444
444
  border: none;
445
445
  margin: 0;
446
+ // Reset visibility, this 'invisible' is not meant to hide the fieldset
447
+ // This prevents issues when used along other CSS framworks that might
448
+ // have this utility class defined (e.g. TailwindCSS)
449
+ visibility: initial;
446
450
  }
447
451
 
448
452
  .vertical-form {
@@ -659,8 +663,34 @@ img.responsive {
659
663
  margin-top: 20px;
660
664
  }
661
665
 
662
- // Deprecated as per https://github.com/plone/volto/issues/1265
663
- // @import 'utils';
666
+ .toast-box-center {
667
+ display: flex;
668
+ align-items: center;
669
+ justify-content: center;
670
+
671
+ .save.toast-box {
672
+ background: transparent;
673
+ color: #007eb1;
674
+
675
+ .circled.toast-box-blue-icon {
676
+ color: #007eb1;
677
+ }
678
+ }
679
+ }
680
+
681
+ .visually-hidden {
682
+ position: absolute;
683
+ overflow: hidden;
684
+ width: 1px;
685
+ height: 1px;
686
+ padding: 0;
687
+ border: 0;
688
+ margin: -1px;
689
+ clip: rect(1px, 1px, 1px, 1px); /* IE-style CSS for compatibility */
690
+ white-space: nowrap;
691
+ word-wrap: normal;
692
+ }
693
+
664
694
  @import (multiple) '../extras/fonts';
665
695
  @import 'toolbar';
666
696
  @import 'draftjs';
@@ -10,11 +10,22 @@
10
10
  "jsx": "react-jsx",
11
11
  "preserveSymlinks": true,
12
12
  "downlevelIteration": true,
13
+ "types": ["vitest/globals", "jest"],
13
14
  "paths": {
14
15
  "@plone/volto/*": ["./src/*"],
15
16
  "react": ["./node_modules/@types/react"],
16
17
  "react-dom": ["./node_modules/@types/react-dom"]
17
18
  }
18
19
  },
19
- "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.tsx"]
20
+ "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.tsx"],
21
+ "exclude": [
22
+ "node_modules",
23
+ "build",
24
+ "coverage",
25
+ "dist",
26
+ "types",
27
+ "**/*.test.js",
28
+ "**/*.test.tsx",
29
+ "**/*.test.ts"
30
+ ]
20
31
  }
package/tsconfig.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "target": "ESNext",
4
- "lib": ["DOM", "DOM.Iterable", "ESNext"],
5
- "module": "commonjs",
3
+ "target": "es2022",
4
+ "lib": ["es2022", "dom", "dom.iterable"],
5
+ "types": ["vitest/globals", "jest"],
6
+ "module": "preserve",
6
7
  "allowJs": true,
7
8
  "skipLibCheck": true,
8
9
  "esModuleInterop": true,
@@ -10,7 +11,6 @@
10
11
  "strict": true,
11
12
  "forceConsistentCasingInFileNames": true,
12
13
  "strictPropertyInitialization": false,
13
- "moduleResolution": "Node",
14
14
  "resolveJsonModule": true,
15
15
  "isolatedModules": true,
16
16
  "noEmit": true,
@@ -21,7 +21,7 @@
21
21
  "@root/*": ["./src/*"]
22
22
  }
23
23
  },
24
- "include": ["src", "packages"],
24
+ "include": ["src", "packages", "types", "vitest.config.ts"],
25
25
  "exclude": [
26
26
  "node_modules",
27
27
  "build",
@@ -27,6 +27,7 @@ export function TeaserSchema({ data, intl }: {
27
27
  };
28
28
  head_title: {
29
29
  title: any;
30
+ description: any;
30
31
  };
31
32
  description: {
32
33
  title: any;
@@ -1,15 +1,11 @@
1
- export default ConditionalLink;
2
- declare function ConditionalLink({ condition, to, item, ...props }: {
3
- [x: string]: any;
4
- condition: any;
5
- to: any;
6
- item: any;
7
- }): import("react/jsx-runtime").JSX.Element;
8
- declare namespace ConditionalLink {
9
- namespace propTypes {
10
- let condition: any;
11
- let to: any;
12
- let item: any;
13
- let children: any;
14
- }
15
- }
1
+ import React from 'react';
2
+ import type { UniversalLinkProps } from '@plone/volto/components/manage/UniversalLink/UniversalLink';
3
+ declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponent<{
4
+ condition?: boolean;
5
+ to?: string;
6
+ children: React.ReactNode;
7
+ } & Omit<UniversalLinkProps, "href" | "item"> & {
8
+ href?: string;
9
+ item?: UniversalLinkProps["item"];
10
+ } & React.RefAttributes<HTMLAnchorElement | HTMLDivElement>>>;
11
+ export default _default;
@@ -0,0 +1,2 @@
1
+ export declare const Contents: any;
2
+ export declare const ContentsRenameModal: any;
@@ -1,2 +1,18 @@
1
- declare const _default: any;
2
- export default _default;
1
+ export default RenderUsers;
2
+ /**
3
+ * RenderUsers functional component.
4
+ * @function RenderUsers
5
+ */
6
+ declare function RenderUsers(props: any): import("react/jsx-runtime").JSX.Element;
7
+ declare namespace RenderUsers {
8
+ namespace propTypes {
9
+ let user: any;
10
+ let roles: any;
11
+ let onDelete: any;
12
+ let isUserManager: any;
13
+ let listUsers: any;
14
+ let updateUser: any;
15
+ let inheritedRole: any;
16
+ let userschema: any;
17
+ }
18
+ }
@@ -1,2 +1,6 @@
1
- declare const _default: any;
2
- export default _default;
1
+ export default UsersControlpanel;
2
+ /**
3
+ * UsersControlpanel functional component.
4
+ * @function UsersControlpanel
5
+ */
6
+ declare function UsersControlpanel(): import("react/jsx-runtime").JSX.Element;
@@ -4,8 +4,8 @@ export declare const RulesControlpanel: import("@loadable/component").LoadableCl
4
4
  export declare const AddRuleControlpanel: import("@loadable/component").LoadableClassComponent<any>;
5
5
  export declare const EditRuleControlpanel: import("@loadable/component").LoadableClassComponent<any>;
6
6
  export declare const ConfigureRuleControlpanel: import("@loadable/component").LoadableClassComponent<any>;
7
- export declare const UsersControlpanel: import("@loadable/component").LoadableClassComponent<any>;
8
- export declare const RenderUsers: import("@loadable/component").LoadableClassComponent<any>;
7
+ export declare const UsersControlpanel: import("@loadable/component").LoadableComponent<unknown>;
8
+ export declare const RenderUsers: import("@loadable/component").LoadableComponent<any>;
9
9
  export declare const UserGroupMembershipControlPanel: import("@loadable/component").LoadableComponent<unknown>;
10
10
  export declare const GroupsControlpanel: import("@loadable/component").LoadableClassComponent<any>;
11
11
  export declare const RenderGroups: import("@loadable/component").LoadableComponent<any>;
@@ -0,0 +1,8 @@
1
+ export declare const Field: any;
2
+ export declare const InlineForm: any;
3
+ export declare const ModalForm: any;
4
+ export declare const UndoToolbar: any;
5
+ export declare const BlocksToolbar: any;
6
+ export declare const BlockDataForm: any;
7
+ export declare const BlocksForm: any;
8
+ export declare const Form: any;
@@ -1,5 +1,7 @@
1
- export default function MaybeWrap({ condition, as: Component, ...props }: {
2
- [x: string]: any;
3
- condition: any;
4
- as?: string;
5
- }): any;
1
+ import React, { ComponentPropsWithoutRef } from 'react';
2
+ type MaybeWrapProps<T extends React.ElementType> = {
3
+ condition: boolean;
4
+ as: T;
5
+ } & ComponentPropsWithoutRef<React.ElementType extends T ? 'div' : T>;
6
+ declare function MaybeWrap<T extends React.ElementType = 'div'>(props: MaybeWrapProps<T>): any;
7
+ export default MaybeWrap;
@@ -1,16 +1,8 @@
1
- export default SidebarPortal;
2
- /**
3
- * Portal that wraps Sidebar components
4
- * @param {React.ReactNode} children Sidebar content
5
- * @param {bool} selected Sidebar needs to know when the related block is selected
6
- * @param {string} tab Element id where to insert sidebar content, default: sidebar-properties
7
- * @returns {string} Rendered sidebar
8
- */
9
- declare function SidebarPortal({ children, selected, tab }: React.ReactNode): string;
10
- declare namespace SidebarPortal {
11
- namespace propTypes {
12
- let children: any;
13
- let selected: any;
14
- }
15
- }
16
1
  import React from 'react';
2
+ type SidebarPortalProps = {
3
+ children?: React.ReactNode;
4
+ selected: boolean;
5
+ tab?: string;
6
+ };
7
+ declare const SidebarPortal: ({ children, selected, tab, }: SidebarPortalProps) => React.ReactPortal;
8
+ export default SidebarPortal;