design-comuni-plone-theme 12.0.0-alpha.1 → 12.1.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 (439) hide show
  1. package/.github/workflows/main.yml +17 -17
  2. package/.github/workflows/{themes.yml → npm.yml} +22 -3
  3. package/.github/workflows/prs.yml +1 -1
  4. package/.github/workflows/release.yml +1 -1
  5. package/.github/workflows/{performance.yml → withnewsletter.yml} +12 -12
  6. package/.release-it.json +2 -1
  7. package/.yarn/cache/@formatjs-ecma402-abstract-npm-1.18.2-281c9afdd0-c664056cca.zip +0 -0
  8. package/.yarn/cache/@formatjs-fast-memoize-npm-2.2.0-4a46a61b8b-8697fe72a7.zip +0 -0
  9. package/.yarn/cache/@formatjs-icu-messageformat-parser-npm-2.7.6-59cd895220-d537253cbf.zip +0 -0
  10. package/.yarn/cache/@formatjs-icu-skeleton-parser-npm-1.8.0-0f1fd4bf3f-85ca45148a.zip +0 -0
  11. package/.yarn/cache/@formatjs-intl-localematcher-npm-0.5.4-e30cfcd8fd-a0af57874f.zip +0 -0
  12. package/.yarn/cache/@internationalized-date-npm-3.5.3-435a424ba4-e3b011b587.zip +0 -0
  13. package/.yarn/cache/@internationalized-message-npm-3.1.3-ed0b43d16d-76b7aadad0.zip +0 -0
  14. package/.yarn/cache/@internationalized-number-npm-3.5.2-0f0b803d0d-b622849a6c.zip +0 -0
  15. package/.yarn/cache/@internationalized-string-npm-3.2.2-dc233d6c2e-32d5944f0a.zip +0 -0
  16. package/.yarn/cache/{@plone-collective-volto-sentry-npm-0.3.0-238a1b397a-99e5493e46.zip → @plone-collective-volto-sentry-npm-0.3.1-ffea0b0844-cf3a192860.zip} +0 -0
  17. package/.yarn/cache/@plone-components-npm-2.0.0-alpha.7-ae15679e71-6eb35f5ef6.zip +0 -0
  18. package/.yarn/cache/@react-aria-breadcrumbs-npm-3.5.12-4df37e0505-19c473c624.zip +0 -0
  19. package/.yarn/cache/@react-aria-button-npm-3.9.4-bcfdfa6d77-3644f5b504.zip +0 -0
  20. package/.yarn/cache/@react-aria-calendar-npm-3.5.7-4a24a3018a-08088c27ad.zip +0 -0
  21. package/.yarn/cache/@react-aria-checkbox-npm-3.14.2-ec0875b197-33c280dbaa.zip +0 -0
  22. package/.yarn/cache/@react-aria-color-npm-3.0.0-beta.32-b69a571afd-fcaa145f2d.zip +0 -0
  23. package/.yarn/cache/@react-aria-combobox-npm-3.9.0-9d01e3bcc8-ebc3aa2523.zip +0 -0
  24. package/.yarn/cache/@react-aria-datepicker-npm-3.10.0-b44d40522c-b5b3226e0e.zip +0 -0
  25. package/.yarn/cache/@react-aria-dialog-npm-3.5.13-fd75d2058e-b03586c90b.zip +0 -0
  26. package/.yarn/cache/@react-aria-dnd-npm-3.6.0-085417ff5c-da39c859dc.zip +0 -0
  27. package/.yarn/cache/@react-aria-focus-npm-3.17.0-a0d6fd01c9-bac778f7f9.zip +0 -0
  28. package/.yarn/cache/@react-aria-form-npm-3.0.4-1f761ca8f4-97a8f25e7b.zip +0 -0
  29. package/.yarn/cache/@react-aria-grid-npm-3.9.0-cdd984835d-c3841b238b.zip +0 -0
  30. package/.yarn/cache/@react-aria-gridlist-npm-3.8.0-40b98ff740-04ab1cccee.zip +0 -0
  31. package/.yarn/cache/@react-aria-i18n-npm-3.11.0-3bd97ed4c6-c4c7c7bd16.zip +0 -0
  32. package/.yarn/cache/@react-aria-interactions-npm-3.21.2-c6fe2e70fd-df7ca376b1.zip +0 -0
  33. package/.yarn/cache/@react-aria-label-npm-3.7.7-39b24fbd65-bfa2ec757c.zip +0 -0
  34. package/.yarn/cache/@react-aria-link-npm-3.7.0-cf388c071e-0af089b4b6.zip +0 -0
  35. package/.yarn/cache/@react-aria-listbox-npm-3.12.0-c9a3fcfdc1-2591d78997.zip +0 -0
  36. package/.yarn/cache/@react-aria-live-announcer-npm-3.3.3-46433149f6-501e772dba.zip +0 -0
  37. package/.yarn/cache/@react-aria-menu-npm-3.14.0-6fa31f531d-7f716c6ef9.zip +0 -0
  38. package/.yarn/cache/@react-aria-meter-npm-3.4.12-2821308fcd-a344cbb3df.zip +0 -0
  39. package/.yarn/cache/@react-aria-numberfield-npm-3.11.2-09acd47715-4e86800c8a.zip +0 -0
  40. package/.yarn/cache/@react-aria-overlays-npm-3.22.0-90340dac2d-bc2a4ed89d.zip +0 -0
  41. package/.yarn/cache/@react-aria-progress-npm-3.4.12-dfcbd6cd8f-3ca779f189.zip +0 -0
  42. package/.yarn/cache/@react-aria-radio-npm-3.10.3-94cedc9974-62cc213b68.zip +0 -0
  43. package/.yarn/cache/@react-aria-searchfield-npm-3.7.4-aaf2343364-ca4bc43633.zip +0 -0
  44. package/.yarn/cache/@react-aria-select-npm-3.14.4-36c0aabf5a-7b091a7a9c.zip +0 -0
  45. package/.yarn/cache/@react-aria-selection-npm-3.18.0-ac9a672791-58d96d02cd.zip +0 -0
  46. package/.yarn/cache/@react-aria-separator-npm-3.3.12-cba989b17a-972f038c36.zip +0 -0
  47. package/.yarn/cache/@react-aria-slider-npm-3.7.7-ed4b28f711-3d4b8c88cc.zip +0 -0
  48. package/.yarn/cache/@react-aria-spinbutton-npm-3.6.4-1361ae7900-d3df661c3b.zip +0 -0
  49. package/.yarn/cache/@react-aria-ssr-npm-3.9.3-83f9d6a628-9bbc8fea4a.zip +0 -0
  50. package/.yarn/cache/@react-aria-switch-npm-3.6.3-491c39fd33-754bdd8fe0.zip +0 -0
  51. package/.yarn/cache/@react-aria-table-npm-3.14.0-28948a50ad-8ce75e4b03.zip +0 -0
  52. package/.yarn/cache/@react-aria-tabs-npm-3.9.0-06e5f74497-1460c136f1.zip +0 -0
  53. package/.yarn/cache/@react-aria-tag-npm-3.4.0-1910b576b8-1fcd4068af.zip +0 -0
  54. package/.yarn/cache/@react-aria-textfield-npm-3.14.4-1c110be229-b9ba98a86e.zip +0 -0
  55. package/.yarn/cache/@react-aria-toggle-npm-3.10.3-93811531bc-a54c83da54.zip +0 -0
  56. package/.yarn/cache/@react-aria-toolbar-npm-3.0.0-beta.4-8a6d41e05d-ae6fc5f49a.zip +0 -0
  57. package/.yarn/cache/@react-aria-tooltip-npm-3.7.3-e2a6890301-57743f4bbd.zip +0 -0
  58. package/.yarn/cache/@react-aria-tree-npm-3.0.0-alpha.0-48c591e08d-2829e3a0ef.zip +0 -0
  59. package/.yarn/cache/@react-aria-utils-npm-3.24.0-b754bf323d-0f0b530f06.zip +0 -0
  60. package/.yarn/cache/@react-aria-visually-hidden-npm-3.8.11-437e8b0708-5b0e770a9c.zip +0 -0
  61. package/.yarn/cache/@react-spectrum-utils-npm-3.11.6-38e10974c6-6089e7b70b.zip +0 -0
  62. package/.yarn/cache/@react-stately-calendar-npm-3.5.0-269efd3343-8395aaf34d.zip +0 -0
  63. package/.yarn/cache/@react-stately-checkbox-npm-3.6.4-a5dc7cc18a-89c38c8698.zip +0 -0
  64. package/.yarn/cache/@react-stately-collections-npm-3.10.6-669dc2c16b-bc81d37b45.zip +0 -0
  65. package/.yarn/cache/@react-stately-color-npm-3.6.0-aee6f5f342-2cf47e66f0.zip +0 -0
  66. package/.yarn/cache/@react-stately-combobox-npm-3.8.3-15ca98aa5c-dad97a15fb.zip +0 -0
  67. package/.yarn/cache/@react-stately-data-npm-3.11.3-cce895778d-dfc8d1ac9a.zip +0 -0
  68. package/.yarn/cache/@react-stately-datepicker-npm-3.9.3-fe9d43086a-c2fee2a75e.zip +0 -0
  69. package/.yarn/cache/@react-stately-dnd-npm-3.3.0-12dd68769d-afc0565ac1.zip +0 -0
  70. package/.yarn/cache/@react-stately-flags-npm-3.0.2-1ec044f94e-c2c19b6043.zip +0 -0
  71. package/.yarn/cache/@react-stately-form-npm-3.0.2-4bc729a2ea-9dfae19354.zip +0 -0
  72. package/.yarn/cache/@react-stately-grid-npm-3.8.6-907965ec36-313e63ff3b.zip +0 -0
  73. package/.yarn/cache/@react-stately-list-npm-3.10.4-77dd54c792-19325e9ab4.zip +0 -0
  74. package/.yarn/cache/@react-stately-menu-npm-3.7.0-90a0db1055-a108e379e4.zip +0 -0
  75. package/.yarn/cache/@react-stately-numberfield-npm-3.9.2-3a89f1bc42-96956b46c5.zip +0 -0
  76. package/.yarn/cache/@react-stately-overlays-npm-3.6.6-f8aa64654d-bc910b54b2.zip +0 -0
  77. package/.yarn/cache/@react-stately-radio-npm-3.10.3-071befd78c-f8d356f86a.zip +0 -0
  78. package/.yarn/cache/@react-stately-searchfield-npm-3.5.2-2f3fb6c209-43558cfff5.zip +0 -0
  79. package/.yarn/cache/@react-stately-select-npm-3.6.3-be5e642bfa-34fbe8501b.zip +0 -0
  80. package/.yarn/cache/@react-stately-selection-npm-3.15.0-8b7bc0694b-9edcb36fed.zip +0 -0
  81. package/.yarn/cache/@react-stately-slider-npm-3.5.3-562ef6c5cb-06d0a53b7c.zip +0 -0
  82. package/.yarn/cache/@react-stately-table-npm-3.11.7-5c9e0fd96a-58d51f98d6.zip +0 -0
  83. package/.yarn/cache/@react-stately-tabs-npm-3.6.5-146716fcbd-d1968d1417.zip +0 -0
  84. package/.yarn/cache/@react-stately-toggle-npm-3.7.3-37e71d088a-5c5e7b52fa.zip +0 -0
  85. package/.yarn/cache/@react-stately-tooltip-npm-3.4.8-fd6ef872a2-25cc3e3c24.zip +0 -0
  86. package/.yarn/cache/@react-stately-tree-npm-3.8.0-500b430bb7-19c17a7406.zip +0 -0
  87. package/.yarn/cache/@react-stately-utils-npm-3.10.0-066f48a98e-780dab3581.zip +0 -0
  88. package/.yarn/cache/@react-stately-virtualizer-npm-3.7.0-2e4e9a8821-c04424dfff.zip +0 -0
  89. package/.yarn/cache/@react-types-breadcrumbs-npm-3.7.4-0e067c6509-132d9d1b0a.zip +0 -0
  90. package/.yarn/cache/@react-types-button-npm-3.9.3-491d887431-a9da87eb7e.zip +0 -0
  91. package/.yarn/cache/@react-types-calendar-npm-3.4.5-9491b2662c-6e3b6e44df.zip +0 -0
  92. package/.yarn/cache/@react-types-checkbox-npm-3.8.0-fa41e40b34-9786fd8224.zip +0 -0
  93. package/.yarn/cache/@react-types-color-npm-3.0.0-beta.24-a1c15bc97a-894371276c.zip +0 -0
  94. package/.yarn/cache/@react-types-combobox-npm-3.11.0-e0a5e09d36-3bf3ad11d0.zip +0 -0
  95. package/.yarn/cache/@react-types-datepicker-npm-3.7.3-1c968964c9-1053453aee.zip +0 -0
  96. package/.yarn/cache/@react-types-dialog-npm-3.5.9-037d2817d8-efeb8dc70e.zip +0 -0
  97. package/.yarn/cache/@react-types-form-npm-3.7.3-faea9d8969-e88a1a4097.zip +0 -0
  98. package/.yarn/cache/@react-types-grid-npm-3.2.5-47670b811f-e3588328cf.zip +0 -0
  99. package/.yarn/cache/@react-types-link-npm-3.5.4-44b62607b6-5d7555e036.zip +0 -0
  100. package/.yarn/cache/@react-types-listbox-npm-3.4.8-2e0a7f4dea-31e7b4c8b1.zip +0 -0
  101. package/.yarn/cache/@react-types-menu-npm-3.9.8-a4a0f57423-d5fb6d99bc.zip +0 -0
  102. package/.yarn/cache/@react-types-meter-npm-3.4.0-768a873170-cc30fd4745.zip +0 -0
  103. package/.yarn/cache/@react-types-numberfield-npm-3.8.2-a842f6619d-e8ed43b08f.zip +0 -0
  104. package/.yarn/cache/@react-types-overlays-npm-3.8.6-78e91b1a37-8efb3c2569.zip +0 -0
  105. package/.yarn/cache/@react-types-progress-npm-3.5.3-27066d6e69-d13f2db5c3.zip +0 -0
  106. package/.yarn/cache/@react-types-radio-npm-3.8.0-5d03b4b24f-f868f13ff2.zip +0 -0
  107. package/.yarn/cache/@react-types-searchfield-npm-3.5.4-9a6cb6c41b-806f97f5d6.zip +0 -0
  108. package/.yarn/cache/@react-types-select-npm-3.9.3-436aaa190f-b3db4acb66.zip +0 -0
  109. package/.yarn/cache/@react-types-shared-npm-3.23.0-1952004986-aa3507ef30.zip +0 -0
  110. package/.yarn/cache/@react-types-slider-npm-3.7.2-369a50984c-fcdafa3511.zip +0 -0
  111. package/.yarn/cache/@react-types-switch-npm-3.5.2-19ff24a621-e8caae2da6.zip +0 -0
  112. package/.yarn/cache/@react-types-table-npm-3.9.4-0afc8754dd-80dae2adfe.zip +0 -0
  113. package/.yarn/cache/@react-types-tabs-npm-3.3.6-047a1fd9c3-69d89f3c5c.zip +0 -0
  114. package/.yarn/cache/@react-types-textfield-npm-3.9.2-2bd9f93005-9102b983c5.zip +0 -0
  115. package/.yarn/cache/@react-types-tooltip-npm-3.4.8-8d81ea0e23-a3122729eb.zip +0 -0
  116. package/.yarn/cache/@swc-helpers-npm-0.4.14-f806c3fb16-273fd3f3fc.zip +0 -0
  117. package/.yarn/cache/@swc-helpers-npm-0.4.36-507abd5d2a-20b9f021a9.zip +0 -0
  118. package/.yarn/cache/@swc-helpers-npm-0.5.11-94bd1e1b3e-5d85e641d9.zip +0 -0
  119. package/.yarn/cache/braces-npm-3.0.3-582c14023c-b95aa0b3bd.zip +0 -0
  120. package/.yarn/cache/client-only-npm-0.0.1-07d3e9505c-0c16bf660d.zip +0 -0
  121. package/.yarn/cache/clsx-npm-2.1.1-96125b98be-acd3e1ab9d.zip +0 -0
  122. package/.yarn/cache/cross-spawn-npm-7.0.6-264bddf921-8d306efaca.zip +0 -0
  123. package/.yarn/cache/fill-range-npm-7.1.1-bf491486db-b4abfbca38.zip +0 -0
  124. package/.yarn/cache/intl-messageformat-npm-10.5.11-1feb0e2115-b5574447a0.zip +0 -0
  125. package/.yarn/cache/micromatch-npm-4.0.8-c9570e4aca-79920eb634.zip +0 -0
  126. package/.yarn/cache/nanoid-npm-3.3.8-d22226208b-dfe0adbc0c.zip +0 -0
  127. package/.yarn/cache/react-aria-components-npm-1.2.0-30040153be-43319158c8.zip +0 -0
  128. package/.yarn/cache/react-aria-npm-3.33.0-688afc3857-980f9da630.zip +0 -0
  129. package/.yarn/cache/react-stately-npm-3.31.0-9465d26d77-d59440e0a7.zip +0 -0
  130. package/.yarn/cache/use-sync-external-store-npm-1.2.2-7923c915e1-fe07c071c4.zip +0 -0
  131. package/.yarn/cache/volto-blocks-widget-npm-3.4.1-c4d451e2c2-4f5c183698.zip +0 -0
  132. package/.yarn/cache/{volto-dropdownmenu-npm-4.1.1-8db37e6495-81edb60075.zip → volto-dropdownmenu-npm-4.1.3-b44ee1c98b-5dc76c2ee7.zip} +0 -0
  133. package/.yarn/cache/volto-editablefooter-npm-5.1.7-483b4be25b-ad5642959b.zip +0 -0
  134. package/.yarn/cache/{volto-feedback-npm-0.3.0-6f555b6437-5d4fe03279.zip → volto-feedback-npm-0.6.1-0de05761ad-127b69de40.zip} +0 -0
  135. package/.yarn/cache/{volto-form-block-npm-3.8.2-e49cbe07d5-5b72a06a5e.zip → volto-form-block-npm-3.10.0-8cd1c7a976-8ddce2c624.zip} +0 -0
  136. package/.yarn/cache/volto-gdpr-privacy-npm-2.2.12-fbc24c3b6f-ba1b9c0127.zip +0 -0
  137. package/.yarn/cache/volto-multilingual-widget-npm-3.2.1-6fcb25c017-c24fd5379c.zip +0 -0
  138. package/.yarn/cache/{volto-secondarymenu-npm-4.0.0-9684028dd3-cec2705740.zip → volto-secondarymenu-npm-4.1.1-f516c1891c-94eeac0bc4.zip} +0 -0
  139. package/.yarn/cache/volto-site-settings-npm-0.4.4-11da224a90-ef0c504b64.zip +0 -0
  140. package/.yarn/cache/{volto-slimheader-npm-0.1.1-6c4a32fae4-94bafa197c.zip → volto-slimheader-npm-0.1.2-8495cb2187-fb657c3274.zip} +0 -0
  141. package/.yarn/cache/{volto-subblocks-npm-2.0.0-5a53bcc26a-7e4774cd63.zip → volto-subblocks-npm-2.1.0-2f162a4b19-a1cc02ca26.zip} +0 -0
  142. package/.yarn/cache/{volto-subfooter-npm-3.0.0-bc1ad5b16c-c7619ac55e.zip → volto-subfooter-npm-3.1.1-57dfb2cf48-d03848013d.zip} +0 -0
  143. package/.yarn/cache/volto-subsites-npm-4.0.2-715672140c-77408b4ea1.zip +0 -0
  144. package/.yarn/cache/{volto-venue-npm-4.0.2-0c5b2ce94f-d6ebdb2e3d.zip → volto-venue-npm-4.1.1-d5be247928-f796d519ad.zip} +0 -0
  145. package/.yarn/install-state.gz +0 -0
  146. package/CHANGELOG.md +1619 -488
  147. package/Makefile +1 -1
  148. package/RELEASE.md +418 -9
  149. package/locales/de/LC_MESSAGES/volto.po +265 -16
  150. package/locales/en/LC_MESSAGES/volto.po +327 -78
  151. package/locales/es/LC_MESSAGES/volto.po +265 -16
  152. package/locales/fr/LC_MESSAGES/volto.po +265 -16
  153. package/locales/it/LC_MESSAGES/volto.po +268 -19
  154. package/locales/volto.pot +266 -17
  155. package/package.json +23 -17
  156. package/publiccode.yml +3 -3
  157. package/src/components/ImageWithErrors/ImageWithErrors.jsx +30 -0
  158. package/src/components/ItaliaTheme/AppExtras/GenericAppExtras.jsx +2 -8
  159. package/src/components/ItaliaTheme/AppExtras/SiteSettingsExtras.jsx +35 -0
  160. package/src/components/ItaliaTheme/Blocks/Accordion/Block/ViewBlock.jsx +2 -1
  161. package/src/components/ItaliaTheme/Blocks/Accordion/Edit.jsx +59 -0
  162. package/src/components/ItaliaTheme/Blocks/Accordion/View.jsx +9 -0
  163. package/src/components/ItaliaTheme/Blocks/Alert/Edit.jsx +1 -1
  164. package/src/components/ItaliaTheme/Blocks/ArgumentsInEvidence/BottomBody.jsx +2 -2
  165. package/src/components/ItaliaTheme/Blocks/BandiSearch/Body.jsx +4 -0
  166. package/src/components/ItaliaTheme/Blocks/CTABlock/Block.jsx +2 -2
  167. package/src/components/ItaliaTheme/Blocks/Calendar/Body.jsx +1 -0
  168. package/src/components/ItaliaTheme/Blocks/Callout/Edit.jsx +2 -2
  169. package/src/components/ItaliaTheme/Blocks/Common/SearchFilters/DateFilter.jsx +3 -2
  170. package/src/components/ItaliaTheme/Blocks/Common/SearchFilters/SelectFilter.jsx +11 -3
  171. package/src/components/ItaliaTheme/Blocks/Common/SearchFilters/TextFilter.jsx +7 -1
  172. package/src/components/ItaliaTheme/Blocks/ContactsBlock/Block/EditBlock.jsx +17 -15
  173. package/src/components/ItaliaTheme/Blocks/ContactsBlock/Edit.jsx +12 -6
  174. package/src/components/ItaliaTheme/Blocks/CountDown/Edit.jsx +2 -2
  175. package/src/components/ItaliaTheme/Blocks/EventSearch/Body.jsx +17 -2
  176. package/src/components/ItaliaTheme/Blocks/EventSearch/DefaultFilters.js +8 -15
  177. package/src/components/ItaliaTheme/Blocks/EventSearch/Sidebar.jsx +16 -5
  178. package/src/components/ItaliaTheme/Blocks/IconBlocks/Block/EditBlock.jsx +12 -7
  179. package/src/components/ItaliaTheme/Blocks/IconBlocks/Block/ViewBlock.jsx +8 -14
  180. package/src/components/ItaliaTheme/Blocks/IconBlocks/Edit.jsx +17 -3
  181. package/src/components/ItaliaTheme/Blocks/IconBlocks/View.jsx +6 -1
  182. package/src/components/ItaliaTheme/Blocks/Listing/AttachmentCardTemplate.jsx +9 -5
  183. package/src/components/ItaliaTheme/Blocks/Listing/CardWithImage/CardWithImageDefault.jsx +17 -7
  184. package/src/components/ItaliaTheme/Blocks/Listing/CardWithSlideUpTextTemplate.jsx +24 -13
  185. package/src/components/ItaliaTheme/Blocks/Listing/Commons/CardCalendar.jsx +1 -1
  186. package/src/components/ItaliaTheme/Blocks/Listing/Commons/ListingImage.jsx +58 -13
  187. package/src/components/ItaliaTheme/Blocks/Listing/Commons/RassegnaInfo.jsx +28 -0
  188. package/src/components/ItaliaTheme/Blocks/Listing/CompleteBlockLinksTemplate.jsx +15 -10
  189. package/src/components/ItaliaTheme/Blocks/Listing/ContentInEvidenceTemplate.jsx +24 -10
  190. package/src/components/ItaliaTheme/Blocks/Listing/GridGalleryTemplate.jsx +4 -3
  191. package/src/components/ItaliaTheme/Blocks/Listing/InEvidenceTemplate.jsx +22 -9
  192. package/src/components/ItaliaTheme/Blocks/Listing/PhotogalleryTemplate.jsx +10 -8
  193. package/src/components/ItaliaTheme/Blocks/Listing/RibbonCardTemplate.jsx +15 -1
  194. package/src/components/ItaliaTheme/Blocks/Listing/SimpleCard/Card/SimpleCardDefault.jsx +16 -2
  195. package/src/components/ItaliaTheme/Blocks/Listing/SliderTemplate.jsx +12 -8
  196. package/src/components/ItaliaTheme/Blocks/Listing/SmallBlockLinksTemplate.jsx +19 -21
  197. package/src/components/ItaliaTheme/Blocks/NumbersBlock/Block/EditBlock.jsx +5 -6
  198. package/src/components/ItaliaTheme/Blocks/NumbersBlock/Edit.jsx +17 -3
  199. package/src/components/ItaliaTheme/Blocks/NumbersBlock/View.jsx +5 -1
  200. package/src/components/ItaliaTheme/Blocks/SearchSections/Body.jsx +1 -0
  201. package/src/components/ItaliaTheme/Blocks/Teaser/ItaliaTeaserBody.jsx +190 -0
  202. package/src/components/ItaliaTheme/Blocks/Teaser/schema.js +179 -0
  203. package/src/components/ItaliaTheme/Blocks/TextCard/CardWithImage/Block.jsx +4 -2
  204. package/src/components/ItaliaTheme/Blocks/TextCard/SimpleCard/Edit.jsx +2 -2
  205. package/src/components/ItaliaTheme/Blocks/UOSearch/Body.jsx +10 -2
  206. package/src/components/ItaliaTheme/Blocks/UOSearch/Sidebar.jsx +16 -0
  207. package/src/components/ItaliaTheme/Blocks/__tests__/Accordion.test.jsx +0 -3
  208. package/src/components/ItaliaTheme/BrandText/BrandText.jsx +39 -7
  209. package/src/components/ItaliaTheme/BrandTextFooter/BrandTextFooter.jsx +31 -2
  210. package/src/components/ItaliaTheme/Breadcrumbs/Breadcrumbs.jsx +16 -8
  211. package/src/components/ItaliaTheme/Cards/CardCategory.jsx +2 -3
  212. package/src/components/ItaliaTheme/Cards/CardPersona.jsx +5 -8
  213. package/src/components/ItaliaTheme/CustomerSatisfaction/FeedbackForm.jsx +27 -23
  214. package/src/components/ItaliaTheme/CustomerSatisfaction/Steps/AnswersStep.jsx +1 -0
  215. package/src/components/ItaliaTheme/CustomerSatisfaction/Steps/CommentsStep.jsx +1 -0
  216. package/src/components/ItaliaTheme/Footer/FooterInfos.jsx +5 -4
  217. package/src/components/ItaliaTheme/Footer/FooterMain.jsx +4 -4
  218. package/src/components/ItaliaTheme/Footer/FooterSmall.jsx +10 -5
  219. package/src/components/ItaliaTheme/Header/HeaderCenter.jsx +5 -6
  220. package/src/components/ItaliaTheme/Header/HeaderSearch/HeaderSearch.jsx +9 -1
  221. package/src/components/ItaliaTheme/Header/HeaderSearch/SearchModal.jsx +21 -4
  222. package/src/components/ItaliaTheme/Header/HeaderSlim/HeaderSlim.jsx +32 -9
  223. package/src/components/ItaliaTheme/Header/HeaderSlim/LoginButton.jsx +1 -1
  224. package/src/components/ItaliaTheme/Header/HeaderSlim/TertiaryMenu.jsx +2 -2
  225. package/src/components/ItaliaTheme/Header/ParentSiteMenu.jsx +17 -2
  226. package/src/components/ItaliaTheme/Icons/DesignIcon.jsx +80 -29
  227. package/src/components/ItaliaTheme/Icons/FontAwesomeIcon.jsx +2 -0
  228. package/src/components/ItaliaTheme/Icons/common/common.js +9 -8
  229. package/src/components/ItaliaTheme/LoginAgid/LoginAgid.jsx +2 -5
  230. package/src/components/ItaliaTheme/Logo/Logo.jsx +15 -7
  231. package/src/components/ItaliaTheme/LogoFooter/LogoFooter.jsx +11 -3
  232. package/src/components/ItaliaTheme/MegaMenu/MegaMenu.jsx +5 -1
  233. package/src/components/ItaliaTheme/Pagination/Pagination.jsx +5 -1
  234. package/src/components/ItaliaTheme/Pagination/PaginationItem.jsx +15 -1
  235. package/src/components/ItaliaTheme/ScrollToTop/ScrollToTop.jsx +0 -1
  236. package/src/components/ItaliaTheme/Search/Search.jsx +2 -3
  237. package/src/components/ItaliaTheme/SkipLinks/SkipLinks.jsx +21 -11
  238. package/src/components/ItaliaTheme/Slider/NextArrow.jsx +1 -1
  239. package/src/components/ItaliaTheme/Slider/PrevArrow.jsx +1 -1
  240. package/src/components/ItaliaTheme/Slider/SingleSlideWrapper.jsx +5 -2
  241. package/src/components/ItaliaTheme/Unauthorized/Unauthorized.jsx +2 -5
  242. package/src/components/ItaliaTheme/View/BandoView/BandoApprofondimenti.jsx +1 -1
  243. package/src/components/ItaliaTheme/View/BandoView/BandoView.jsx +19 -1
  244. package/src/components/ItaliaTheme/View/Commons/Actions.jsx +2 -2
  245. package/src/components/ItaliaTheme/View/Commons/Argument/ArgumentIcon.jsx +1 -1
  246. package/src/components/ItaliaTheme/View/Commons/Attachment.jsx +1 -1
  247. package/src/components/ItaliaTheme/View/Commons/BandoDates.jsx +27 -47
  248. package/src/components/ItaliaTheme/View/Commons/ContactsCard.jsx +2 -31
  249. package/src/components/ItaliaTheme/View/Commons/Dates.jsx +62 -28
  250. package/src/components/ItaliaTheme/View/Commons/Events.jsx +28 -27
  251. package/src/components/ItaliaTheme/View/Commons/Gallery.jsx +36 -28
  252. package/src/components/ItaliaTheme/View/Commons/GenericCard.jsx +14 -13
  253. package/src/components/ItaliaTheme/View/Commons/HelpBox.jsx +1 -1
  254. package/src/components/ItaliaTheme/View/Commons/LocationItem.jsx +15 -9
  255. package/src/components/ItaliaTheme/View/Commons/LocationsMap.jsx +4 -18
  256. package/src/components/ItaliaTheme/View/Commons/Module.jsx +22 -31
  257. package/src/components/ItaliaTheme/View/Commons/Modules.jsx +3 -1
  258. package/src/components/ItaliaTheme/View/Commons/OfficeCard.jsx +7 -3
  259. package/src/components/ItaliaTheme/View/Commons/PageHeader/PageHeader.jsx +3 -4
  260. package/src/components/ItaliaTheme/View/Commons/PageHeader/PageHeaderBando.jsx +3 -0
  261. package/src/components/ItaliaTheme/View/Commons/PageHeader/PageHeaderDates.jsx +0 -10
  262. package/src/components/ItaliaTheme/View/Commons/PageHeader/PageHeaderEventDates.jsx +62 -14
  263. package/src/components/ItaliaTheme/View/Commons/PageHeader/PageHeaderTassonomiaArgomenti.jsx +4 -5
  264. package/src/components/ItaliaTheme/View/Commons/RelatedArticles.jsx +12 -1
  265. package/src/components/ItaliaTheme/View/Commons/RelatedItemInEvidence/RelatedItemInEvidence.jsx +14 -1
  266. package/src/components/ItaliaTheme/View/Commons/RelatedItems.jsx +11 -3
  267. package/src/components/ItaliaTheme/View/Commons/RenderBlocks.jsx +5 -2
  268. package/src/components/ItaliaTheme/View/Commons/Sharing.jsx +1 -1
  269. package/src/components/ItaliaTheme/View/Commons/SideMenu.jsx +11 -7
  270. package/src/components/ItaliaTheme/View/Commons/Sponsors.jsx +14 -10
  271. package/src/components/ItaliaTheme/View/Commons/VenuesSmall.jsx +13 -6
  272. package/src/components/ItaliaTheme/View/Commons/__tests__/Dates.test.jsx +1 -1
  273. package/src/components/ItaliaTheme/View/DocumentoView/DocumentoAccedereServizio.jsx +5 -8
  274. package/src/components/ItaliaTheme/View/DocumentoView/DocumentoView.jsx +20 -1
  275. package/src/components/ItaliaTheme/View/EventoView/EventoContatti.jsx +8 -7
  276. package/src/components/ItaliaTheme/View/EventoView/EventoContattiOrganizzatoreEsterno.jsx +1 -12
  277. package/src/components/ItaliaTheme/View/EventoView/EventoContattiOrganizzatoreInterno.jsx +1 -12
  278. package/src/components/ItaliaTheme/View/EventoView/EventoCosE.jsx +17 -2
  279. package/src/components/ItaliaTheme/View/EventoView/EventoOrganizzatoDa.jsx +38 -0
  280. package/src/components/ItaliaTheme/View/EventoView/EventoPatrocinatoDa.jsx +38 -0
  281. package/src/components/ItaliaTheme/View/EventoView/EventoUlterioriInformazioni.jsx +0 -22
  282. package/src/components/ItaliaTheme/View/EventoView/EventoView.jsx +20 -1
  283. package/src/components/ItaliaTheme/View/FAQ/FaqFolder/SearchBar.jsx +7 -0
  284. package/src/components/ItaliaTheme/View/IncaricoView/IncaricoView.jsx +47 -8
  285. package/src/components/ItaliaTheme/View/NewsItemView/NewsItemText.jsx +33 -10
  286. package/src/components/ItaliaTheme/View/NewsItemView/NewsItemView.jsx +19 -1
  287. package/src/components/ItaliaTheme/View/PageView/PageView.jsx +3 -0
  288. package/src/components/ItaliaTheme/View/PageView/Placeholder/HeaderEnd.jsx +6 -0
  289. package/src/components/ItaliaTheme/View/PaginaArgomentoView/PaginaArgomentoView.jsx +15 -36
  290. package/src/components/ItaliaTheme/View/PaginaArgomentoView/PaginaArgomentoViewNoBlocks.jsx +14 -1
  291. package/src/components/ItaliaTheme/View/PersonaView/PersonaDocumenti.jsx +106 -0
  292. package/src/components/ItaliaTheme/View/PersonaView/PersonaRuolo.jsx +85 -60
  293. package/src/components/ItaliaTheme/View/PersonaView/PersonaView.jsx +20 -1
  294. package/src/components/ItaliaTheme/View/PuntoDiContattoView/PuntoDiContattoView.jsx +2 -2
  295. package/src/components/ItaliaTheme/View/ServizioView/ServizioAccedi.jsx +5 -1
  296. package/src/components/ItaliaTheme/View/ServizioView/ServizioCondizioni.jsx +5 -1
  297. package/src/components/ItaliaTheme/View/ServizioView/ServizioMetatag.jsx +9 -1
  298. package/src/components/ItaliaTheme/View/ServizioView/ServizioView.jsx +19 -2
  299. package/src/components/ItaliaTheme/View/UOView/UOMetadati.jsx +12 -0
  300. package/src/components/ItaliaTheme/View/UOView/UOServices.jsx +20 -2
  301. package/src/components/ItaliaTheme/View/UOView/UOView.jsx +23 -1
  302. package/src/components/ItaliaTheme/View/VenueView/VenueView.jsx +24 -11
  303. package/src/components/ItaliaTheme/View/VenueView/VenueWhere.jsx +1 -1
  304. package/src/components/ItaliaTheme/View/ViewUtils.jsx +1 -2
  305. package/src/components/ItaliaTheme/View/__tests__/ServizioTempiScadenze.test.jsx +0 -1
  306. package/src/components/ItaliaTheme/View/index.js +2 -0
  307. package/src/components/ItaliaTheme/index.js +1 -1
  308. package/src/components/ItaliaTheme/manage/Widgets/HtmlSlateWidget.jsx +4 -2
  309. package/src/components/ItaliaTheme/manage/Widgets/SearchSectionsConfigurationWidget/SearchSectionsConfigurationForm.jsx +2 -2
  310. package/src/components/SelectInput/SelectInput.jsx +10 -4
  311. package/src/components/TextInput.jsx +1 -0
  312. package/src/components/__tests__/FormValidation.test.js +142 -0
  313. package/src/config/Blocks/ListingOptions/attachmentCardTemplate.js +1 -1
  314. package/src/config/Blocks/blocks.js +4 -3
  315. package/src/config/Slate/Blockquote/index.js +7 -0
  316. package/src/config/Views/views.js +1 -0
  317. package/src/config/italiaConfig.js +81 -20
  318. package/src/customizations/volto/actions/vocabularies/vocabularies.js +102 -0
  319. package/src/customizations/volto/components/manage/AnchorPlugin/components/LinkButton/AddLinkForm.jsx +1 -0
  320. package/src/customizations/volto/components/manage/Blocks/Listing/ListingBody.jsx +5 -0
  321. package/src/customizations/volto/components/manage/Blocks/Search/SearchBlockView.jsx +50 -11
  322. package/src/customizations/volto/components/manage/Blocks/Search/components/DateRangeFacet.jsx +16 -2
  323. package/src/customizations/volto/components/manage/Blocks/Search/components/SearchDetails.jsx +2 -3
  324. package/src/customizations/volto/components/manage/Blocks/Search/hocs/withSearch.jsx +6 -4
  325. package/src/customizations/volto/components/manage/Blocks/Search/layout/LeftColumnFacets.jsx +21 -17
  326. package/src/customizations/volto/components/manage/Blocks/Search/layout/RightColumnFacets.jsx +21 -17
  327. package/src/customizations/volto/components/manage/Blocks/Search/schema.js +16 -0
  328. package/src/customizations/volto/components/manage/Blocks/Teaser/Body.jsx +30 -0
  329. package/src/customizations/volto/components/manage/Blocks/Video/Body.jsx +6 -5
  330. package/src/customizations/volto/components/manage/Contents/ContentsUploadModal.jsx +375 -0
  331. package/src/customizations/volto/components/manage/Controlpanels/Groups/GroupsControlpanel.jsx +709 -0
  332. package/src/customizations/volto/components/manage/Controlpanels/Groups/RenderGroups.jsx +122 -0
  333. package/src/customizations/volto/components/manage/Diff/DiffField.jsx +2 -3
  334. package/src/customizations/volto/components/manage/UniversalLink/UniversalLink.jsx +34 -23
  335. package/src/customizations/volto/components/manage/Widgets/ObjectBrowserWidget.jsx +1 -1
  336. package/src/customizations/volto/components/manage/Widgets/RecurrenceWidget/EndField.jsx +18 -11
  337. package/src/customizations/volto/components/manage/Widgets/RecurrenceWidget/RecurrenceWidget.jsx +240 -117
  338. package/src/customizations/volto/components/theme/Error/Error.jsx +86 -0
  339. package/src/customizations/volto/components/theme/Footer/Footer.jsx +17 -16
  340. package/src/customizations/volto/components/theme/Navigation/Navigation.jsx +22 -7
  341. package/src/customizations/volto/components/theme/View/LinkView.jsx +81 -0
  342. package/src/customizations/volto/components/theme/View/ListingView.jsx +3 -3
  343. package/src/{components/ItaliaTheme/RemoveBodyClass/RemoveBodyClass.jsx → customizations/volto/helpers/BodyClass/BodyClass.jsx} +19 -25
  344. package/src/customizations/volto/helpers/FormValidation/FormValidation.js +11 -8
  345. package/src/customizations/volto/helpers/Html/Html.jsx +2 -2
  346. package/src/customizations/volto-form-block/components/Field.jsx +7 -0
  347. package/src/customizations/volto-form-block/components/FormResult.jsx +43 -9
  348. package/src/customizations/volto-form-block/components/FormView.jsx +45 -41
  349. package/src/customizations/volto-form-block/components/Sidebar.jsx +328 -0
  350. package/src/customizations/volto-form-block/components/View.jsx +398 -0
  351. package/src/customizations/volto-form-block/fieldSchema.js +519 -0
  352. package/src/customizations/volto-form-block/formSchema.js +255 -0
  353. package/src/helpers/EnhanceLink.js +7 -2
  354. package/src/helpers/ListingHelper.js +1 -1
  355. package/src/helpers/blocks.js +0 -6
  356. package/src/helpers/dates.js +30 -2
  357. package/src/helpers/files.js +11 -4
  358. package/src/helpers/files.test.js +90 -0
  359. package/src/helpers/getItemsByPath.js +23 -1
  360. package/src/helpers/images.js +77 -0
  361. package/src/helpers/index.js +11 -0
  362. package/src/helpers/url.js +22 -0
  363. package/src/helpers/usePaginatedItemsSection.hook.ts +63 -0
  364. package/src/overrideTranslations.jsx +73 -0
  365. package/src/theme/ItaliaTheme/Addons/volto-gdpr-privacy.scss +0 -18
  366. package/src/theme/ItaliaTheme/Blocks/_accordion.scss +5 -4
  367. package/src/theme/ItaliaTheme/Blocks/_alert.scss +6 -11
  368. package/src/theme/ItaliaTheme/Blocks/_cardWithImage.scss +7 -2
  369. package/src/theme/ItaliaTheme/Blocks/_cardWithSlideUpTextTemplate.scss +19 -1
  370. package/src/theme/ItaliaTheme/Blocks/_contacts.scss +10 -34
  371. package/src/theme/ItaliaTheme/Blocks/_countdown.scss +10 -1
  372. package/src/theme/ItaliaTheme/Blocks/_ctaBlock.scss +8 -10
  373. package/src/theme/ItaliaTheme/Blocks/_form.scss +38 -32
  374. package/src/theme/ItaliaTheme/Blocks/_gridBlock.scss +39 -23
  375. package/src/theme/ItaliaTheme/Blocks/_iconBlocks.scss +10 -51
  376. package/src/theme/ItaliaTheme/Blocks/_inEvidenceTemplate.scss +1 -1
  377. package/src/theme/ItaliaTheme/Blocks/_listing.scss +0 -3
  378. package/src/theme/ItaliaTheme/Blocks/_numbers.scss +5 -15
  379. package/src/theme/ItaliaTheme/Blocks/_photogallerytemplate.scss +2 -2
  380. package/src/theme/ItaliaTheme/Blocks/_search.scss +20 -2
  381. package/src/theme/ItaliaTheme/Blocks/_sliderTemplate.scss +4 -4
  382. package/src/theme/ItaliaTheme/Blocks/_subblocks-edit.scss +3 -1
  383. package/src/theme/ItaliaTheme/Blocks/common/_searchBlockFilters.scss +10 -2
  384. package/src/theme/ItaliaTheme/Components/_card.scss +27 -7
  385. package/src/theme/ItaliaTheme/Components/_cardLocationItem.scss +12 -0
  386. package/src/theme/ItaliaTheme/Components/_cardPersona.scss +21 -1
  387. package/src/theme/ItaliaTheme/Components/_metadata.scss +1 -0
  388. package/src/theme/ItaliaTheme/Components/_mobileMenu.scss +12 -16
  389. package/src/theme/ItaliaTheme/Components/_pager.scss +10 -0
  390. package/src/theme/ItaliaTheme/Print/_all_pages.scss +98 -15
  391. package/src/theme/ItaliaTheme/Print/_blocks.scss +915 -8
  392. package/src/theme/ItaliaTheme/Print/_page.scss +1 -7
  393. package/src/theme/ItaliaTheme/Subsites/ItaliaTheme/Blocks/_contacts.scss +3 -0
  394. package/src/theme/ItaliaTheme/Views/_common.scss +27 -0
  395. package/src/theme/ItaliaTheme/Views/_servizio.scss +6 -0
  396. package/src/theme/ItaliaTheme/Views/_slider.scss +4 -0
  397. package/src/theme/ItaliaTheme/Widgets/_blocksWidget.scss +37 -0
  398. package/src/theme/ItaliaTheme/Widgets/_reactSelect.scss +5 -1
  399. package/src/theme/ItaliaTheme/_ar.scss +3 -2
  400. package/src/theme/ItaliaTheme/_common.scss +11 -6
  401. package/src/theme/ItaliaTheme/_home.scss +4 -6
  402. package/src/theme/ItaliaTheme/_main.scss +51 -1
  403. package/src/theme/ItaliaTheme/_white-header.scss +1 -1
  404. package/src/theme/_cms-ui.scss +150 -31
  405. package/src/theme/_mixins.scss +13 -0
  406. package/src/theme/_site-variables.scss +5 -6
  407. package/src/theme/bootstrap-override/_bootstrap-italia-site.scss +3 -0
  408. package/src/theme/bootstrap-override/bootstrap/_print.scss +1 -0
  409. package/src/theme/bootstrap-override/bootstrap-italia/_avatar.scss +28 -0
  410. package/src/theme/bootstrap-override/bootstrap-italia/_buttons.scss +18 -0
  411. package/src/theme/bootstrap-override/bootstrap-italia/_card.scss +12 -2
  412. package/src/theme/bootstrap-override/bootstrap-italia/_focus.scss +23 -0
  413. package/src/theme/bootstrap-override/bootstrap-italia/_footer.scss +1 -1
  414. package/src/theme/bootstrap-override/bootstrap-italia/_form-select.scss +17 -0
  415. package/src/theme/bootstrap-override/bootstrap-italia/_forms.scss +7 -0
  416. package/src/theme/bootstrap-override/bootstrap-italia/_headercenter.scss +19 -5
  417. package/src/theme/extras/_modals.scss +13 -0
  418. package/src/theme/extras/_search.scss +5 -0
  419. package/src/theme/extras/_tables.scss +12 -13
  420. package/src/theme/site.scss +0 -3
  421. package/.github/workflows/slate.yml +0 -47
  422. package/.yarn/cache/braces-npm-3.0.2-782240b28a-e2a8e769a8.zip +0 -0
  423. package/.yarn/cache/cross-spawn-npm-7.0.3-e4ff3e65b3-671cc7c728.zip +0 -0
  424. package/.yarn/cache/fill-range-npm-7.0.1-b8b1817caa-cc283f4e65.zip +0 -0
  425. package/.yarn/cache/fsevents-patch-3340e2eb10-8.zip +0 -0
  426. package/.yarn/cache/micromatch-npm-4.0.5-cfab5d7669-02a17b671c.zip +0 -0
  427. package/.yarn/cache/nanoid-npm-3.3.6-e6d6ae7e71-7d0eda6570.zip +0 -0
  428. package/.yarn/cache/volto-blocks-widget-npm-3.4.0-a61b810f4f-355675359c.zip +0 -0
  429. package/.yarn/cache/volto-editablefooter-npm-5.1.1-a6579f67d9-c9a2e1f96f.zip +0 -0
  430. package/.yarn/cache/volto-gdpr-privacy-npm-2.2.0-6be0f74d53-8a93254251.zip +0 -0
  431. package/.yarn/cache/volto-multilingual-widget-npm-3.0.0-58c1ce4fb7-3fa0611e79.zip +0 -0
  432. package/.yarn/cache/volto-subsites-npm-4.0.0-17412b8f3b-9f943abc00.zip +0 -0
  433. package/src/customizations/volto/components/manage/BlockChooser/BlockChooserButton.jsx +0 -157
  434. package/src/customizations/volto/components/theme/View/disabled_View.jsx +0 -308
  435. package/src/customizations/volto/helpers/Api/disabled_Api.js +0 -131
  436. package/src/theme/ItaliaTheme/Components/_logo.scss +0 -10
  437. package/src/theme/ItaliaTheme/Print/_bandi.scss +0 -9
  438. package/src/theme/ItaliaTheme/Print/_news_items.scss +0 -19
  439. /package/src/components/ItaliaTheme/View/{__tests__/IncaricoView.test.jsx → __disabled_tests__/IncaricoView.test__disabled.jsx} +0 -0
@@ -1,19 +1,30 @@
1
1
  /**
2
2
  * RecurrenceWidget component.
3
3
  * @module components/manage/Widgets/RecurrenceWidget
4
- * CUSTOMIZATIONS:
5
- * - add date field open calendar on top
6
- * - fix all imports and rrulei18n use
7
- * - added customization to have this changes https://github.com/plone/volto/pull/5555/files
4
+ * See https://github.com/RedTurtle/design-comuni-plone-theme/pull/741 for notable changes and reasons
8
5
  */
9
6
 
10
7
  import React, { Component } from 'react';
8
+ import { compose } from 'redux';
9
+ import { connect } from 'react-redux';
11
10
  import PropTypes from 'prop-types';
12
- import moment from 'moment';
13
- import { RRule, RRuleSet, rrulestr } from 'rrule';
14
11
 
15
12
  import cx from 'classnames';
16
- import { isEqual, map, find, concat, remove } from 'lodash';
13
+ import {
14
+ isEqual,
15
+ map,
16
+ find,
17
+ concat,
18
+ remove,
19
+ isNil,
20
+ isBoolean,
21
+ isArray,
22
+ isString,
23
+ isObject,
24
+ isEmpty,
25
+ isNumber,
26
+ omitBy,
27
+ } from 'lodash';
17
28
  import { defineMessages, injectIntl } from 'react-intl';
18
29
  import {
19
30
  Form,
@@ -24,8 +35,9 @@ import {
24
35
  Modal,
25
36
  Header,
26
37
  } from 'semantic-ui-react';
27
-
28
38
  import { SelectWidget, Icon, DatetimeWidget } from '@plone/volto/components';
39
+ import { toBackendLang } from '@plone/volto/helpers';
40
+ import { injectLazyLibs } from '@plone/volto/helpers/Loadable/Loadable';
29
41
 
30
42
  import saveSVG from '@plone/volto/icons/save.svg';
31
43
  import editingSVG from '@plone/volto/icons/editing.svg';
@@ -181,8 +193,10 @@ class RecurrenceWidget extends Component {
181
193
  */
182
194
  constructor(props, intl) {
183
195
  super(props);
196
+ const { RRuleSet, rrulestr } = props.rrule;
184
197
 
185
- moment.locale(this.props.intl.locale);
198
+ this.moment = this.props.moment.default;
199
+ this.moment.locale(toBackendLang(this.props.lang));
186
200
 
187
201
  let rruleSet = this.props.value
188
202
  ? rrulestr(props.value, {
@@ -199,11 +213,12 @@ class RecurrenceWidget extends Component {
199
213
  this.state = {
200
214
  open: false,
201
215
  rruleSet: rruleSet,
216
+ editRruleSet: rruleSet,
202
217
  formValues: this.getFormValues(rruleSet),
203
218
  RRULE_LANGUAGE: rrulei18n(
204
219
  this.props.intl,
205
- moment,
206
- this.props.intl.locale,
220
+ this.moment,
221
+ toBackendLang(this.props.lang),
207
222
  ),
208
223
  };
209
224
  }
@@ -222,7 +237,6 @@ class RecurrenceWidget extends Component {
222
237
 
223
238
  if (changedStart || changedEnd) {
224
239
  let start = this.getUTCDate(this.props.formData?.start).toDate();
225
- // let end = this.getUTCDate(this.props.formData?.end).toDate();
226
240
 
227
241
  let changeFormValues = {};
228
242
  if (changedEnd) {
@@ -240,7 +254,6 @@ class RecurrenceWidget extends Component {
240
254
  'dtstart',
241
255
  start,
242
256
  );
243
-
244
257
  return {
245
258
  ...prevState,
246
259
  rruleSet,
@@ -255,6 +268,29 @@ class RecurrenceWidget extends Component {
255
268
  }
256
269
  }
257
270
 
271
+ cleanRRuleObject(rruleObj) {
272
+ // Recursive function for rrule options object cleanup
273
+ function cleanObject(obj) {
274
+ // Use _.omitBy to remove all objectlike falsish and falsish values, preserve dates/string dates/strings/booleans
275
+ return omitBy(obj, (value) => {
276
+ if (
277
+ (isString(value) && !isNaN(Date.parse(value))) ||
278
+ (value instanceof Date && !isNaN(value.getTime()))
279
+ )
280
+ return false;
281
+ if (isString(value) || isBoolean(value) || isNumber(value))
282
+ return false;
283
+ // Everything else goes
284
+ return (
285
+ isNil(value) ||
286
+ (isArray(value) && isEmpty(value)) ||
287
+ (isObject(value) && isEmpty(value))
288
+ );
289
+ });
290
+ }
291
+ return cleanObject(rruleObj);
292
+ }
293
+
258
294
  editRecurrence = () => {
259
295
  this.setRecurrenceStartEnd();
260
296
  };
@@ -262,25 +298,31 @@ class RecurrenceWidget extends Component {
262
298
  setRecurrenceStartEnd = () => {
263
299
  const start = this.props.formData?.start;
264
300
 
265
- const _start = new Date(start); //The date is already in utc from plone, so this is not necessary: this.getUTCDate(start).startOf('day').toDate();
301
+ // The `start` date from Plone is in UTC
302
+ const _start = new Date(start);
266
303
 
267
304
  this.setState((prevState) => {
268
- let rruleSet = prevState.rruleSet;
269
- const formValues = this.getFormValues(rruleSet); //to set default values, included end
305
+ let editRruleSet = prevState.rruleSet;
306
+ const formValues = this.getFormValues(editRruleSet); //to set default values, included end
270
307
 
271
- rruleSet = this.updateRruleSet(rruleSet, formValues, 'dtstart', _start);
308
+ editRruleSet = this.updateRruleSet(
309
+ editRruleSet,
310
+ formValues,
311
+ 'dtstart',
312
+ _start,
313
+ );
272
314
  return {
273
315
  ...prevState,
274
- rruleSet,
316
+ editRruleSet,
275
317
  formValues,
276
318
  };
277
319
  });
278
320
  };
279
321
 
280
322
  getUTCDate = (date) => {
281
- return date.match(/T(.)*(-|\+|Z)/g)
282
- ? moment(date).utc()
283
- : moment(`${date}Z`).utc();
323
+ return date?.match(/T(.)*(-|\+|Z)/g)
324
+ ? this.moment(date).utc()
325
+ : this.moment(`${date}Z`).utc();
284
326
  };
285
327
 
286
328
  show = (dimmer) => () => {
@@ -320,24 +362,23 @@ class RecurrenceWidget extends Component {
320
362
  * */
321
363
  getFormValues = (rruleSet) => {
322
364
  //default
323
- let formValues = {
324
- freq: FREQUENCES.DAILY,
325
- interval: 1,
326
- };
327
-
328
- formValues = this.changeField(
329
- formValues,
330
- 'recurrenceEnds',
331
- this.props.formData?.end ? 'until' : 'count',
332
- );
365
+ let formValues = {};
366
+ if (!formValues.recurrenceEnds)
367
+ formValues = this.changeField(
368
+ formValues,
369
+ 'recurrenceEnds',
370
+ this.props.formData?.end && !this.props?.formData?.open_end
371
+ ? 'until'
372
+ : 'count',
373
+ );
333
374
 
334
375
  const rrule = rruleSet.rrules()[0];
335
376
 
336
- if (rrule) {
337
- var freq = this.getFreq(rrule.options.freq, rrule.options.byweekday);
338
-
377
+ if (rrule?.options) {
378
+ const rruleOptions = this.cleanRRuleObject(rrule.options);
379
+ var freq = this.getFreq(rruleOptions?.freq, rruleOptions?.byweekday);
339
380
  //init with rruleOptions
340
- Object.entries(rrule.options).forEach(([option, value]) => {
381
+ Object.entries(rruleOptions).forEach(([option, value]) => {
341
382
  switch (option) {
342
383
  case 'freq':
343
384
  formValues[option] = freq;
@@ -346,28 +387,31 @@ class RecurrenceWidget extends Component {
346
387
  if (value != null) {
347
388
  formValues['recurrenceEnds'] = option;
348
389
  formValues[option] = value;
390
+ formValues['until'] = null;
349
391
  }
350
392
  break;
351
393
  case 'until':
352
- if (value != null) {
353
- formValues['recurrenceEnds'] = option;
394
+ // Handle open ended events
395
+ if (
396
+ (value !== null && this.props.formData.end) ||
397
+ this.props.formData.open_end
398
+ ) {
399
+ if (value !== null) formValues['recurrenceEnds'] = option;
354
400
  formValues[option] = value;
355
401
  }
356
402
  break;
357
403
  case 'byweekday':
404
+ // Correct handling of freq
358
405
  if (value && value.length > 0) {
359
406
  if (isEqual(value, WEEKLY_DAYS)) {
360
407
  formValues['freq'] = FREQUENCES.WEEKDAYS;
361
- }
362
- if (isEqual(value, MONDAYFRIDAY_DAYS)) {
408
+ } else if (isEqual(value, MONDAYFRIDAY_DAYS)) {
363
409
  formValues['freq'] = FREQUENCES.MONDAYFRIDAY;
364
- }
365
- }
366
- formValues[option] = value
367
- ? value.map((d) => {
410
+ } else
411
+ formValues[option] = value.map((d) => {
368
412
  return this.getWeekday(d);
369
- })
370
- : [];
413
+ });
414
+ }
371
415
  break;
372
416
  case 'bymonthday':
373
417
  if (value && value.length > 0) {
@@ -391,14 +435,17 @@ class RecurrenceWidget extends Component {
391
435
  if (value && value.length > 0) {
392
436
  //[weekDayNumber,orinal_number] -> translated is for example: [sunday, third] -> the third sunday of the month
393
437
 
394
- if (freq === FREQUENCES.SMONTHLY) {
438
+ if (freq === FREQUENCES.MONTHLY) {
395
439
  formValues['monthly'] = 'byweekday';
396
440
  }
397
441
  if (freq === FREQUENCES.YEARLY) {
398
442
  formValues['yearly'] = 'byday';
399
443
  }
444
+ const weekday = this.getWeekday(value[0][0]);
445
+ weekday.n = value[0][1];
400
446
  formValues['weekdayOfTheMonth'] = value[0][0];
401
447
  formValues['weekdayOfTheMonthIndex'] = value[0][1];
448
+ formValues['byweekday'] = weekday;
402
449
  }
403
450
  break;
404
451
  case 'bymonth':
@@ -406,13 +453,19 @@ class RecurrenceWidget extends Component {
406
453
  formValues['yearly'] = 'byday';
407
454
  }
408
455
  formValues['monthOfTheYear'] = value ? value[0] : null;
456
+ // Fix bymonth handling
457
+ formValues[option] = value ? value : null;
409
458
  break;
410
-
411
459
  default:
412
460
  formValues[option] = value;
413
461
  }
414
462
  });
415
- }
463
+ } else
464
+ formValues = {
465
+ ...formValues,
466
+ freq: FREQUENCES.DAILY,
467
+ interval: 1,
468
+ };
416
469
  return formValues;
417
470
  };
418
471
 
@@ -423,7 +476,6 @@ class RecurrenceWidget extends Component {
423
476
  NoRRuleOptions.forEach((opt) => {
424
477
  delete values[opt];
425
478
  });
426
-
427
479
  //transform values for rrule
428
480
  Object.keys(values).forEach((field) => {
429
481
  var value = values[field];
@@ -436,17 +488,17 @@ class RecurrenceWidget extends Component {
436
488
  case 'until':
437
489
  let mDate = null;
438
490
  if (value) {
439
- mDate = moment(new Date(value));
491
+ mDate = this.moment(new Date(value));
440
492
  if (typeof value === 'string') {
441
- mDate = moment(new Date(value));
493
+ mDate = this.moment(new Date(value));
442
494
  } else {
443
495
  //object-->Date()
444
- mDate = moment(value);
496
+ mDate = this.moment(value);
445
497
  }
446
498
 
447
499
  if (this.props.formData.end) {
448
500
  //set time from formData.end
449
- const mEnd = moment(new Date(this.props.formData.end));
501
+ const mEnd = this.moment(new Date(this.props.formData.end));
450
502
  mDate.set('hour', mEnd.get('hour'));
451
503
  mDate.set('minute', mEnd.get('minute'));
452
504
  }
@@ -456,8 +508,7 @@ class RecurrenceWidget extends Component {
456
508
  default:
457
509
  break;
458
510
  }
459
-
460
- if (value) {
511
+ if (value === 0 || value) {
461
512
  //set value
462
513
  values[field] = value;
463
514
  } else {
@@ -470,41 +521,67 @@ class RecurrenceWidget extends Component {
470
521
  };
471
522
 
472
523
  updateRruleSet = (rruleSet, formValues, field, value) => {
473
- var rruleOptions = this.formValuesToRRuleOptions(formValues);
474
- var dstart =
475
- field === 'dtstart'
476
- ? value
477
- : rruleSet.dtstart()
478
- ? rruleSet.dtstart()
479
- : new Date();
480
- var exdates =
481
- field === 'exdates' ? value : Object.assign([], rruleSet.exdates());
482
-
483
- var rdates =
484
- field === 'rdates' ? value : Object.assign([], rruleSet.rdates());
524
+ let rruleOptions = this.formValuesToRRuleOptions(formValues);
525
+ let dstart = undefined;
526
+ if (rruleSet.dtstart()) {
527
+ // Se hai una ricorrenza usala
528
+ dstart = rruleSet.dtstart();
529
+ } else {
530
+ if (this.props.formData.start) {
531
+ // Verifica chi tra start e end vuoi usare in base al contronto tra le date e al flag fine aperta
532
+ const mstart = this.moment(new Date(this.props.formData.start));
533
+ const mend = this.moment(new Date(this.props.formData.end));
534
+ if (mstart.isSame(mend, 'day')) {
535
+ dstart = mstart.toDate();
536
+ } else {
537
+ if (this.props.formData.open_end) dstart = mstart.toDate();
538
+ else dstart = mend.toDate();
539
+ }
540
+ }
541
+ }
542
+ let exdates = Object.assign([], rruleSet.exdates());
543
+ let rdates = Object.assign([], rruleSet.rdates());
544
+ if (field === 'dtstart') dstart = value;
545
+ else if (field === 'exdates') exdates = value;
546
+ else if (field === 'rdates') rdates = value;
547
+ else if (field === 'freq') {
548
+ // reset ex and rdates
549
+ exdates = [];
550
+ rdates = [];
551
+ }
485
552
 
486
553
  rruleOptions.dtstart = dstart;
554
+ let sanitizedRruleOptions = this.cleanRRuleObject(rruleOptions);
555
+
556
+ const { RRule, RRuleSet } = this.props.rrule;
487
557
 
488
558
  let set = new RRuleSet();
489
559
  //set.dtstart(dstart);
490
- set.rrule(new RRule(rruleOptions));
491
-
492
- exdates.map((ex) => set.exdate(ex));
493
- rdates.map((r) => set.rdate(r));
494
-
560
+ if (!sanitizedRruleOptions.count && !sanitizedRruleOptions.until) {
561
+ // Limit to 100, otherwise you can get up tp 500k recurrences, blocking browser
562
+ // 100 is an arbitrary value
563
+ sanitizedRruleOptions = { ...sanitizedRruleOptions, count: 100 };
564
+ }
565
+ set.rrule(new RRule(sanitizedRruleOptions));
566
+ for (const ex of exdates) set.exdate(ex);
567
+ for (const r of rdates) set.rdate(r);
495
568
  return set;
496
569
  };
497
570
 
498
571
  getDefaultUntil = (freq) => {
499
- var end = this.props.formData?.end
500
- ? moment(new Date(this.props.formData.end))
501
- : null;
572
+ // No clue why this opinionated set of rules
573
+ // Let's handle open end events
574
+ const moment = this.moment;
575
+ let end =
576
+ this.props.formData?.end && !this.props.formData?.open_end
577
+ ? moment(new Date(this.props.formData.end))
578
+ : null;
502
579
  var tomorrow = moment().add(1, 'days');
503
580
  var nextWeek = moment().add(7, 'days');
504
581
  var nextMonth = moment().add(1, 'months');
505
582
  var nextYear = moment().add(1, 'years');
506
583
 
507
- var until = end;
584
+ let until = end;
508
585
  switch (freq) {
509
586
  case FREQUENCES.DAILY:
510
587
  until = end ? end : tomorrow;
@@ -527,38 +604,41 @@ class RecurrenceWidget extends Component {
527
604
  default:
528
605
  break;
529
606
  }
530
- if (this.props.formData.end) {
531
- //set default end time
532
- until.set('hour', end.get('hour'));
533
- until.set('minute', end.get('minute'));
534
- }
535
607
 
536
- until = new Date(
537
- until.get('year'),
538
- until.get('month'),
539
- until.get('date'),
540
- until.get('hour'),
541
- until.get('minute'),
542
- );
608
+ // if (this.props.formData.end) {
609
+ // //set default end time
610
+ // until.set('hour', end.get('hour'));
611
+ // until.set('minute', end.get('minute'));
612
+ // }
613
+ if (until)
614
+ until = new Date(
615
+ until.get('year'),
616
+ until.get('month'),
617
+ until.get('date'),
618
+ until.get('hour'),
619
+ until.get('minute'),
620
+ );
543
621
 
544
622
  return until;
545
623
  };
546
624
 
547
625
  changeField = (formValues, field, value) => {
548
- // git p.log('field', field, 'value', value);
549
626
  //get weekday from state.
550
- var byweekday =
627
+ const moment = this.moment;
628
+ const byweekday =
551
629
  this.state?.rruleSet?.rrules().length > 0
552
630
  ? this.state.rruleSet.rrules()[0].origOptions.byweekday
553
- : null;
554
- var currWeekday = this.getWeekday(moment().day() - 1);
555
- var currMonth = moment().month() + 1;
631
+ : formValues.byweekday
632
+ ? formValues.byweekday
633
+ : null;
634
+ const currWeekday = this.getWeekday(moment().day() - 1);
635
+ const currMonth = moment().month() + 1;
556
636
 
557
- var startMonth = this.props.formData?.start
637
+ const startMonth = this.props.formData?.start
558
638
  ? moment(this.props.formData.start).month() + 1
559
639
  : currMonth;
560
640
 
561
- var startWeekday = this.props.formData?.start
641
+ const startWeekday = this.props.formData?.start
562
642
  ? this.getWeekday(moment(this.props.formData.start).day() - 1)
563
643
  : currWeekday;
564
644
  formValues[field] = value;
@@ -583,7 +663,11 @@ class RecurrenceWidget extends Component {
583
663
  formValues = this.changeField(formValues, 'byweekday', null);
584
664
  formValues = this.changeField(formValues, 'monthOfTheYear', null);
585
665
 
586
- if (!formValues.until) {
666
+ if (
667
+ !formValues.count &&
668
+ !formValues.until &&
669
+ !this.props.formData.open_end
670
+ ) {
587
671
  formValues.until = this.getDefaultUntil(value);
588
672
  }
589
673
 
@@ -656,7 +740,8 @@ class RecurrenceWidget extends Component {
656
740
  break;
657
741
 
658
742
  case 'monthOfTheYear':
659
- if (value === null || value === undefined) {
743
+ // Fix check, null and undefined are falsish
744
+ if (!value) {
660
745
  delete formValues.bymonth;
661
746
  } else {
662
747
  formValues.bymonth = [value];
@@ -706,6 +791,10 @@ class RecurrenceWidget extends Component {
706
791
  default:
707
792
  break;
708
793
  }
794
+ // Somehow it goes missing sometimes, no clue where anymore, force add it
795
+ if (formValues?.weekdayOfTheMonth && !formValues.monthly) {
796
+ formValues = { ...formValues, monthly: 'byweekday' };
797
+ }
709
798
  return formValues;
710
799
  };
711
800
 
@@ -714,24 +803,41 @@ class RecurrenceWidget extends Component {
714
803
  formValues = this.changeField(formValues, field, value);
715
804
 
716
805
  this.setState((prevState) => {
717
- var rruleSet = prevState.rruleSet;
718
- rruleSet = this.updateRruleSet(rruleSet, formValues, field, value);
719
- return {
720
- ...prevState,
721
- rruleSet,
806
+ var editRruleSet = prevState.editRruleSet;
807
+ editRruleSet = this.updateRruleSet(
808
+ editRruleSet,
722
809
  formValues,
723
- };
810
+ field,
811
+ value,
812
+ );
813
+ return editRruleSet
814
+ ? {
815
+ ...prevState,
816
+ editRruleSet,
817
+ formValues,
818
+ }
819
+ : { ...prevState, formValues };
724
820
  });
725
821
  };
726
822
 
823
+ // Handle rdates too, they were left behind :(
727
824
  exclude = (date) => {
728
- let list = this.state.rruleSet.exdates().slice(0);
729
- list.push(date);
730
- this.onChangeRule('exdates', list);
825
+ let additionalDates = this.state.editRruleSet.rdates();
826
+ let exDates = this.state.editRruleSet.exdates();
827
+
828
+ if (additionalDates.some((ad) => ad.getTime() === date.getTime())) {
829
+ remove(additionalDates, (ad) => {
830
+ return ad.getTime() === date.getTime();
831
+ });
832
+ this.onChangeRule('rdates', additionalDates);
833
+ } else {
834
+ exDates.push(date);
835
+ this.onChangeRule('exdates', exDates);
836
+ }
731
837
  };
732
838
 
733
839
  undoExclude = (date) => {
734
- let list = this.state.rruleSet.exdates().slice(0);
840
+ let list = this.state.editRruleSet.exdates().slice(0);
735
841
  remove(list, (e) => {
736
842
  return e.getTime() === date.getTime();
737
843
  });
@@ -739,7 +845,11 @@ class RecurrenceWidget extends Component {
739
845
  };
740
846
 
741
847
  addDate = (date) => {
742
- let all = concat(this.state.rruleSet.all(), this.state.rruleSet.exdates());
848
+ const moment = this.moment;
849
+ let all = concat(
850
+ this.state.editRruleSet.all(),
851
+ this.state.editRruleSet.exdates(),
852
+ );
743
853
 
744
854
  var simpleDate = moment(new Date(date)).startOf('day').toDate().getTime();
745
855
  var exists = find(all, (e) => {
@@ -747,14 +857,18 @@ class RecurrenceWidget extends Component {
747
857
  return d === simpleDate;
748
858
  });
749
859
  if (!exists) {
750
- let list = this.state.rruleSet.rdates().slice(0);
860
+ let list = this.state.editRruleSet.rdates().slice(0);
751
861
  list.push(new Date(date));
752
862
  this.onChangeRule('rdates', list);
753
863
  }
754
864
  };
755
865
 
756
866
  saveRrule = () => {
757
- var value = this.state.rruleSet.toString();
867
+ var value = this.state.editRruleSet.toString();
868
+ this.setState((prev) => ({
869
+ ...prev,
870
+ rruleSet: prev.editRruleSet,
871
+ }));
758
872
  this.props.onChange(this.props.id, value);
759
873
  };
760
874
 
@@ -764,17 +878,19 @@ class RecurrenceWidget extends Component {
764
878
  };
765
879
 
766
880
  remove = () => {
881
+ const { RRuleSet } = this.props.rrule;
767
882
  this.props.onChange(this.props.id, null);
768
883
  let rruleSet = new RRuleSet();
769
884
  this.setState({
885
+ editRruleSet: rruleSet,
770
886
  rruleSet: rruleSet,
771
887
  formValues: this.getFormValues(rruleSet),
772
888
  });
773
889
  };
774
890
 
775
891
  render() {
776
- const { open, dimmer, rruleSet, formValues, RRULE_LANGUAGE } = this.state;
777
-
892
+ const { open, dimmer, rruleSet, editRruleSet, formValues, RRULE_LANGUAGE } =
893
+ this.state;
778
894
  const { id, title, required, description, error, fieldSet, intl } =
779
895
  this.props;
780
896
 
@@ -787,7 +903,7 @@ class RecurrenceWidget extends Component {
787
903
  id={`${fieldSet || 'field'}-${id}`}
788
904
  >
789
905
  <Grid>
790
- <Grid.Row stretched>
906
+ <Grid.Row stretched verticalAlign="middle">
791
907
  <Grid.Column width="4">
792
908
  <div className="wrapper">
793
909
  <label htmlFor={`field-${id}`}>{title}</label>
@@ -797,7 +913,7 @@ class RecurrenceWidget extends Component {
797
913
  {rruleSet.rrules()[0] && (
798
914
  <>
799
915
  <Label>
800
- {rruleSet.rrules()[0]?.toText(
916
+ {rruleSet.rrules()?.[0]?.toText(
801
917
  (t) => {
802
918
  return RRULE_LANGUAGE.strings[t];
803
919
  },
@@ -863,7 +979,7 @@ class RecurrenceWidget extends Component {
863
979
  {intl.formatMessage(messages.editRecurrence)}{' '}
864
980
  </Modal.Header>
865
981
  <Modal.Content scrolling>
866
- {rruleSet.rrules().length > 0 && (
982
+ {editRruleSet?.rrules()?.length > 0 && (
867
983
  <Modal.Description>
868
984
  <Segment>
869
985
  <Form>
@@ -879,6 +995,7 @@ class RecurrenceWidget extends Component {
879
995
  )}
880
996
  value={formValues.freq}
881
997
  onChange={this.onChangeRule}
998
+ noValueOption={false}
882
999
  />
883
1000
  {OPTIONS.frequences[formValues.freq].interval && (
884
1001
  <IntervalField
@@ -943,7 +1060,7 @@ class RecurrenceWidget extends Component {
943
1060
  </Segment>
944
1061
  <Segment>
945
1062
  <Occurences
946
- rruleSet={rruleSet}
1063
+ rruleSet={editRruleSet}
947
1064
  exclude={this.exclude}
948
1065
  undoExclude={this.undoExclude}
949
1066
  />
@@ -1007,4 +1124,10 @@ class RecurrenceWidget extends Component {
1007
1124
  }
1008
1125
  }
1009
1126
 
1010
- export default injectIntl(RecurrenceWidget);
1127
+ export default compose(
1128
+ injectLazyLibs(['moment', 'rrule']),
1129
+ connect((state) => ({
1130
+ lang: state.intl.locale,
1131
+ })),
1132
+ injectIntl,
1133
+ )(RecurrenceWidget);