decidim-core 0.29.2 → 0.30.0.rc2

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 (484) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/amendable/amend_button_card/show.erb +6 -4
  3. data/app/cells/decidim/amendable/amend_button_card_cell.rb +8 -0
  4. data/app/cells/decidim/amendable/amendments/show.erb +1 -1
  5. data/app/cells/decidim/amendable/promote_button_card/show.erb +2 -0
  6. data/app/cells/decidim/author_cell.rb +1 -1
  7. data/app/cells/decidim/card_l/extra_data.erb +1 -0
  8. data/app/cells/decidim/card_metadata_cell.rb +9 -16
  9. data/app/cells/decidim/comments_button_cell.rb +14 -2
  10. data/app/cells/decidim/content_blocks/highlighted_elements_cell.rb +2 -0
  11. data/app/cells/decidim/content_blocks/highlighted_elements_with_cell_for_list_cell.rb +1 -1
  12. data/app/cells/decidim/endorsement_block/show.erb +0 -1
  13. data/app/cells/decidim/endorsement_block_cell.rb +6 -0
  14. data/app/cells/decidim/endorsement_buttons/button_content.erb +1 -1
  15. data/app/cells/decidim/endorsement_buttons/select_identity_button.erb +1 -1
  16. data/app/cells/decidim/endorsement_buttons/show.erb +7 -7
  17. data/app/cells/decidim/endorsement_buttons/verification_modal.erb +4 -2
  18. data/app/cells/decidim/endorsers_list/empty.erb +3 -0
  19. data/app/cells/decidim/endorsers_list/full.erb +17 -5
  20. data/app/cells/decidim/endorsers_list/show.erb +19 -10
  21. data/app/cells/decidim/endorsers_list_cell.rb +19 -6
  22. data/app/cells/decidim/follow_button/show.erb +1 -2
  23. data/app/cells/decidim/follow_button_cell.rb +5 -0
  24. data/app/cells/decidim/map/show.erb +3 -0
  25. data/app/cells/decidim/map/template.erb +14 -0
  26. data/app/cells/decidim/map_cell.rb +39 -0
  27. data/app/cells/decidim/notification_actions/buttons_cell.rb +1 -1
  28. data/app/cells/decidim/onboarding_action_message/show.erb +15 -0
  29. data/app/cells/decidim/onboarding_action_message_cell.rb +81 -0
  30. data/app/cells/decidim/participatory_space_private_user/show.erb +23 -0
  31. data/app/cells/decidim/participatory_space_private_user_cell.rb +21 -0
  32. data/app/cells/decidim/progress_bar/show.erb +2 -2
  33. data/app/cells/decidim/report_button_cell.rb +1 -0
  34. data/app/cells/decidim/resource_history/show.erb +20 -0
  35. data/app/cells/decidim/resource_history_cell.rb +66 -0
  36. data/app/cells/decidim/share_button_cell.rb +0 -4
  37. data/app/cells/decidim/share_widget/modal.erb +26 -0
  38. data/app/cells/decidim/share_widget/show.erb +2 -0
  39. data/app/cells/decidim/share_widget_cell.rb +20 -0
  40. data/app/cells/decidim/tags/show.erb +7 -4
  41. data/app/cells/decidim/tags_cell.rb +11 -72
  42. data/app/commands/decidim/amendable/create_draft.rb +2 -2
  43. data/app/commands/decidim/create_ephemeral_user.rb +52 -0
  44. data/app/commands/decidim/create_omniauth_registration.rb +13 -3
  45. data/app/commands/decidim/create_report.rb +1 -5
  46. data/app/commands/decidim/create_user_group.rb +6 -2
  47. data/app/commands/decidim/destroy_ephemeral_user.rb +47 -0
  48. data/app/commands/decidim/update_account.rb +11 -3
  49. data/app/commands/decidim/update_notifications_settings.rb +1 -0
  50. data/app/commands/decidim/update_resources_taxonomies.rb +67 -0
  51. data/app/commands/decidim/update_user_group.rb +7 -1
  52. data/app/constraints/decidim/current_component.rb +1 -1
  53. data/app/controllers/concerns/decidim/ajax_permission_handler.rb +21 -0
  54. data/app/controllers/concerns/decidim/devise_authentication_methods.rb +3 -6
  55. data/app/controllers/concerns/decidim/devise_controllers.rb +2 -0
  56. data/app/controllers/concerns/decidim/disable_redirection_to_external_host.rb +1 -1
  57. data/app/controllers/concerns/decidim/ephemeral_session_checker.rb +87 -0
  58. data/app/controllers/concerns/decidim/filter_resource.rb +4 -2
  59. data/app/controllers/concerns/decidim/has_members_page.rb +25 -0
  60. data/app/controllers/concerns/decidim/headers/browser_feature_permissions.rb +50 -0
  61. data/app/controllers/concerns/decidim/locale_switcher.rb +2 -2
  62. data/app/controllers/concerns/decidim/needs_password_change.rb +0 -1
  63. data/app/controllers/concerns/decidim/needs_permission.rb +2 -1
  64. data/app/controllers/concerns/decidim/needs_tos_accepted.rb +4 -5
  65. data/app/controllers/concerns/decidim/onboarding_action_methods.rb +52 -0
  66. data/app/controllers/decidim/application_controller.rb +10 -0
  67. data/app/controllers/decidim/authorization_modals_controller.rb +8 -2
  68. data/app/controllers/decidim/components/base_controller.rb +3 -7
  69. data/app/controllers/decidim/devise/confirmations_controller.rb +4 -0
  70. data/app/controllers/decidim/devise/omniauth_registrations_controller.rb +8 -1
  71. data/app/controllers/decidim/devise/registrations_controller.rb +1 -1
  72. data/app/controllers/decidim/devise/sessions_controller.rb +2 -0
  73. data/app/controllers/decidim/download_your_data_controller.rb +33 -2
  74. data/app/controllers/decidim/editor_images_controller.rb +1 -11
  75. data/app/controllers/decidim/follows_controller.rb +1 -1
  76. data/app/controllers/decidim/geolocation_controller.rb +19 -0
  77. data/app/controllers/decidim/homepage_controller.rb +0 -1
  78. data/app/controllers/decidim/open_data_controller.rb +33 -8
  79. data/app/controllers/decidim/user_conversations_controller.rb +1 -11
  80. data/app/events/decidim/soft_delete_resource_event.rb +15 -0
  81. data/app/forms/decidim/amendable/form.rb +4 -2
  82. data/app/forms/decidim/ephemeral_user_form.rb +22 -0
  83. data/app/forms/decidim/notifications_settings_form.rb +1 -0
  84. data/app/forms/decidim/omniauth_registration_form.rb +14 -1
  85. data/app/helpers/concerns/decidim/flash_helper_extensions.rb +17 -2
  86. data/app/helpers/decidim/action_authorization_helper.rb +75 -14
  87. data/app/helpers/decidim/amendments_helper.rb +0 -9
  88. data/app/helpers/decidim/application_helper.rb +6 -2
  89. data/app/helpers/decidim/breadcrumb_helper.rb +6 -0
  90. data/app/helpers/decidim/cache_helper.rb +1 -1
  91. data/app/helpers/decidim/check_boxes_tree_helper.rb +25 -53
  92. data/app/helpers/decidim/decidim_form_helper.rb +0 -44
  93. data/app/helpers/decidim/endorsable_helper.rb +0 -10
  94. data/app/helpers/decidim/layout_helper.rb +6 -0
  95. data/app/helpers/decidim/messaging/conversation_helper.rb +2 -3
  96. data/app/helpers/decidim/meta_tags_helper.rb +32 -23
  97. data/app/helpers/decidim/modal_helper.rb +23 -0
  98. data/app/helpers/decidim/omniauth_helper.rb +5 -5
  99. data/app/helpers/decidim/onboarding_action_helper.rb +13 -0
  100. data/app/helpers/decidim/orders_helper.rb +2 -1
  101. data/app/helpers/decidim/participatory_space_helpers.rb +1 -1
  102. data/app/helpers/decidim/passwords_helper.rb +2 -2
  103. data/app/helpers/decidim/taxonomies_helper.rb +40 -0
  104. data/app/jobs/decidim/download_your_data_export_job.rb +2 -19
  105. data/app/jobs/decidim/event_publisher_job.rb +18 -9
  106. data/app/jobs/decidim/export_job.rb +5 -1
  107. data/app/jobs/decidim/export_participatory_space_job.rb +4 -1
  108. data/app/jobs/decidim/hide_child_resources_job.rb +24 -0
  109. data/app/jobs/decidim/open_data_job.rb +4 -4
  110. data/app/mailers/decidim/export_mailer.rb +7 -12
  111. data/app/models/decidim/action_log.rb +11 -0
  112. data/app/models/decidim/category.rb +4 -0
  113. data/app/models/decidim/component.rb +25 -3
  114. data/app/models/decidim/metric.rb +2 -1
  115. data/app/models/decidim/moderation.rb +16 -0
  116. data/app/models/decidim/newsletter.rb +12 -8
  117. data/app/models/decidim/organization.rb +7 -3
  118. data/app/models/decidim/participatory_space_private_user.rb +20 -0
  119. data/app/models/decidim/private_export.rb +24 -0
  120. data/app/models/decidim/push_notification_message.rb +1 -1
  121. data/app/models/decidim/report.rb +1 -1
  122. data/app/models/decidim/scope.rb +4 -0
  123. data/app/models/decidim/share_token.rb +36 -10
  124. data/app/models/decidim/taxonomization.rb +23 -0
  125. data/app/models/decidim/taxonomy.rb +139 -0
  126. data/app/models/decidim/taxonomy_filter.rb +130 -0
  127. data/app/models/decidim/taxonomy_filter_item.rb +33 -0
  128. data/app/models/decidim/user.rb +9 -23
  129. data/app/models/decidim/user_base_entity.rb +12 -0
  130. data/app/models/decidim/user_moderation.rb +9 -0
  131. data/app/models/decidim/user_report.rb +4 -0
  132. data/app/packs/entrypoints/decidim_core.js +1 -0
  133. data/app/packs/entrypoints/decidim_geocoding.js +2 -0
  134. data/app/packs/images/decidim/brands/facebook.svg +10 -0
  135. data/app/packs/images/decidim/brands/google.svg +7 -1
  136. data/app/packs/images/decidim/brands/twitter-x.svg +3 -0
  137. data/app/packs/src/decidim/check_boxes_tree.js +0 -1
  138. data/app/packs/src/decidim/clipboard.js +18 -9
  139. data/app/packs/src/decidim/confirm.js +79 -59
  140. data/app/packs/src/decidim/decidim_application.js +1 -0
  141. data/app/packs/src/decidim/form_remote.js +1 -1
  142. data/app/packs/src/decidim/geocoding/reverse_geocoding.js +60 -0
  143. data/app/packs/src/decidim/impersonation.js +1 -1
  144. data/app/packs/src/decidim/index.js +11 -1
  145. data/app/packs/src/decidim/map/provider/here.js +1 -1
  146. data/app/packs/src/decidim/onboarding_pending_action.js +24 -0
  147. data/app/packs/src/decidim/session_timeouter.js +1 -1
  148. data/app/packs/src/decidim/sticky_footer.js +29 -0
  149. data/app/packs/src/decidim/sticky_header.js +6 -31
  150. data/app/packs/src/decidim/user_registrations.js +13 -0
  151. data/app/packs/src/decidim/utilities/dom.js +148 -0
  152. data/app/packs/stylesheets/decidim/_accordion.scss +30 -0
  153. data/app/packs/stylesheets/decidim/_buttons.scss +19 -0
  154. data/app/packs/stylesheets/decidim/_dropdown.scss +1 -1
  155. data/app/packs/stylesheets/decidim/_endorsers_list.scss +26 -20
  156. data/app/packs/stylesheets/decidim/_forms.scss +2 -2
  157. data/app/packs/stylesheets/decidim/_hashtags.scss +5 -0
  158. data/app/packs/stylesheets/decidim/_header.scss +5 -3
  159. data/app/packs/stylesheets/decidim/_layout.scss +32 -2
  160. data/app/packs/stylesheets/decidim/_login.scss +53 -6
  161. data/app/packs/stylesheets/decidim/_modal.scss +42 -0
  162. data/app/packs/stylesheets/decidim/_modal_tos_refuse.scss +4 -0
  163. data/app/packs/stylesheets/decidim/_participatory_spaces.scss +46 -0
  164. data/app/packs/stylesheets/decidim/_profile.scss +1 -1
  165. data/app/packs/stylesheets/decidim/_success_image.scss +64 -0
  166. data/app/packs/stylesheets/decidim/_tribute.scss +36 -0
  167. data/app/packs/stylesheets/decidim/application.scss +2 -0
  168. data/app/packs/stylesheets/decidim/geocoding_addons.scss +5 -0
  169. data/app/packs/stylesheets/decidim/map.scss +7 -10
  170. data/app/packs/stylesheets/decidim/resource_history.scss +31 -0
  171. data/app/permissions/decidim/permissions.rb +8 -2
  172. data/app/presenters/decidim/admin_log/base_user_presenter.rb +67 -0
  173. data/app/presenters/decidim/admin_log/component_presenter.rb +32 -3
  174. data/app/presenters/decidim/admin_log/moderation_presenter.rb +30 -3
  175. data/app/presenters/decidim/admin_log/share_token_presenter.rb +39 -0
  176. data/app/presenters/decidim/admin_log/taxonomy_filter_presenter.rb +57 -0
  177. data/app/presenters/decidim/admin_log/taxonomy_presenter.rb +48 -0
  178. data/app/presenters/decidim/admin_log/user_group_presenter.rb +6 -6
  179. data/app/presenters/decidim/admin_log/user_presenter.rb +4 -18
  180. data/app/presenters/decidim/log/value_types/date_presenter.rb +1 -0
  181. data/app/presenters/decidim/log/value_types/taxonomy_presenter.rb +29 -0
  182. data/app/presenters/decidim/participatory_space_private_user_presenter.rb +50 -0
  183. data/app/presenters/decidim/taxonomy_filter_presenter.rb +19 -0
  184. data/app/presenters/decidim/taxonomy_presenter.rb +14 -0
  185. data/app/queries/decidim/metrics/blocked_users_metric_manage.rb +2 -2
  186. data/app/queries/decidim/metrics/users_metric_manage.rb +2 -2
  187. data/app/queries/decidim/public_activities.rb +1 -12
  188. data/app/queries/decidim/stats_users_count.rb +2 -2
  189. data/app/resolvers/decidim/meta_image_url_resolver.rb +128 -0
  190. data/app/serializers/decidim/exporters/open_data_blocked_user_serializer.rb +25 -0
  191. data/app/serializers/decidim/exporters/open_data_metric_serializer.rb +22 -0
  192. data/app/serializers/decidim/exporters/open_data_moderation_serializer.rb +30 -0
  193. data/app/serializers/decidim/exporters/open_data_taxonomy_serializer.rb +30 -0
  194. data/app/serializers/decidim/exporters/open_data_user_group_serializer.rb +38 -0
  195. data/app/serializers/decidim/exporters/open_data_user_serializer.rb +39 -0
  196. data/app/serializers/decidim/exporters/participatory_space_serializer.rb +104 -0
  197. data/app/serializers/decidim/exporters/serializer.rb +25 -0
  198. data/app/serializers/decidim/schema_org_breadcrumb_list_serializer.rb +52 -0
  199. data/app/services/decidim/action_authorizer.rb +32 -3
  200. data/app/services/decidim/base_diff_renderer.rb +1 -1
  201. data/app/services/decidim/download_your_data_exporter.rb +58 -24
  202. data/app/services/decidim/onboarding_manager.rb +272 -0
  203. data/app/services/decidim/open_data_exporter.rb +139 -13
  204. data/app/services/decidim/traceability.rb +13 -0
  205. data/app/uploaders/decidim/application_uploader.rb +1 -1
  206. data/app/validators/etiquette_validator.rb +9 -2
  207. data/app/validators/passthru_validator.rb +1 -1
  208. data/app/validators/translated_etiquette_validator.rb +32 -0
  209. data/app/views/decidim/account/_password_fields.html.erb +2 -2
  210. data/app/views/decidim/application/_accordion_section.html.erb +14 -0
  211. data/app/views/decidim/application/_collection.html.erb +30 -18
  212. data/app/views/decidim/devise/omniauth_registrations/new.html.erb +5 -1
  213. data/app/views/decidim/devise/omniauth_registrations/new_tos_fields.html.erb +29 -0
  214. data/app/views/decidim/devise/registrations/new.html.erb +10 -22
  215. data/app/views/decidim/devise/sessions/new.html.erb +24 -29
  216. data/app/views/decidim/devise/shared/_omniauth_buttons.html.erb +2 -4
  217. data/app/views/decidim/devise/shared/_tos_fields.html.erb +16 -0
  218. data/app/views/decidim/download_your_data/_export.html.erb +15 -0
  219. data/app/views/decidim/download_your_data/show.html.erb +51 -5
  220. data/app/views/decidim/endorsements/update_buttons_and_counters.js.erb +16 -19
  221. data/app/views/decidim/export_mailer/download_your_data_export.html.erb +2 -2
  222. data/app/views/decidim/export_mailer/export.html.erb +5 -1
  223. data/app/views/decidim/notifications_settings/show.html.erb +22 -0
  224. data/app/views/decidim/open_data/_how_to_open_accordion_section.html.erb +15 -0
  225. data/app/views/decidim/open_data/index.html.erb +108 -0
  226. data/app/views/decidim/pages/show.html.erb +2 -1
  227. data/app/views/decidim/participatory_space_private_users/_participatory_space_private_user.html.erb +1 -0
  228. data/app/views/decidim/shared/_login_modal.html.erb +26 -20
  229. data/app/views/decidim/shared/_orders.html.erb +2 -2
  230. data/app/views/decidim/shared/_resource_actions.html.erb +21 -0
  231. data/app/views/decidim/shared/filters/_check_boxes_tree.html.erb +1 -2
  232. data/app/views/decidim/shared/filters/_collection.html.erb +1 -1
  233. data/app/views/decidim/shared/filters/_dropdown_label.html.erb +7 -4
  234. data/app/views/layouts/decidim/_application.html.erb +0 -1
  235. data/app/views/layouts/decidim/_js_configuration.html.erb +1 -0
  236. data/app/views/layouts/decidim/_logo.html.erb +1 -1
  237. data/app/views/layouts/decidim/_logo_mobile.html.erb +1 -1
  238. data/app/views/layouts/decidim/_meta_tags_config.html.erb +6 -11
  239. data/app/views/layouts/decidim/_schema_org_breadcrumb_list.html.erb +3 -0
  240. data/app/views/layouts/decidim/_wrapper.html.erb +15 -9
  241. data/app/views/layouts/decidim/footer/_main_links.html.erb +1 -1
  242. data/app/views/layouts/decidim/header/_close_ephemeral_session.html.erb +25 -0
  243. data/app/views/layouts/decidim/header/_main.html.erb +14 -10
  244. data/app/views/layouts/decidim/header/_menu_breadcrumb_items.html.erb +2 -0
  245. data/app/views/layouts/decidim/shared/_layout_item.html.erb +1 -1
  246. data/config/assets.rb +2 -1
  247. data/config/locales/ar.yml +27 -59
  248. data/config/locales/bg.yml +3 -64
  249. data/config/locales/ca.yml +370 -61
  250. data/config/locales/cs.yml +371 -54
  251. data/config/locales/de.yml +365 -54
  252. data/config/locales/el.yml +1 -48
  253. data/config/locales/en.yml +363 -54
  254. data/config/locales/eo.yml +0 -2
  255. data/config/locales/es-MX.yml +363 -57
  256. data/config/locales/es-PY.yml +363 -57
  257. data/config/locales/es.yml +367 -58
  258. data/config/locales/eu.yml +373 -65
  259. data/config/locales/fi-plain.yml +365 -57
  260. data/config/locales/fi.yml +370 -59
  261. data/config/locales/fr-CA.yml +178 -54
  262. data/config/locales/fr.yml +179 -52
  263. data/config/locales/ga-IE.yml +0 -21
  264. data/config/locales/gl.yml +1 -34
  265. data/config/locales/hu.yml +1 -53
  266. data/config/locales/id-ID.yml +1 -34
  267. data/config/locales/is-IS.yml +0 -16
  268. data/config/locales/it.yml +5 -60
  269. data/config/locales/ja.yml +215 -56
  270. data/config/locales/lb.yml +1 -52
  271. data/config/locales/lt.yml +1 -59
  272. data/config/locales/lv.yml +1 -40
  273. data/config/locales/nl.yml +1 -53
  274. data/config/locales/no.yml +2 -52
  275. data/config/locales/pl.yml +4 -66
  276. data/config/locales/pt-BR.yml +11 -52
  277. data/config/locales/pt.yml +2 -52
  278. data/config/locales/ro-RO.yml +219 -117
  279. data/config/locales/ru.yml +0 -20
  280. data/config/locales/sk.yml +1 -41
  281. data/config/locales/sv.yml +138 -59
  282. data/config/locales/tr-TR.yml +1 -50
  283. data/config/locales/uk.yml +0 -18
  284. data/config/locales/zh-CN.yml +1 -50
  285. data/config/locales/zh-TW.yml +1 -54
  286. data/config/routes.rb +4 -10
  287. data/db/migrate/20181025082245_add_timestamps_to_components.rb +2 -0
  288. data/db/migrate/20240628111905_add_visible_to_components.rb +7 -0
  289. data/db/migrate/20240704115429_create_decidim_taxonomies.rb +23 -0
  290. data/db/migrate/20240717093514_add_registered_only_to_decidim_share_tokens.rb +7 -0
  291. data/db/migrate/20240722215500_change_object_changes_on_versions.rb +39 -0
  292. data/db/migrate/20240806065417_create_decidim_taxonomy_filters.rb +23 -0
  293. data/db/migrate/20240822161348_add_deleted_at_to_decidim_components.rb +8 -0
  294. data/db/migrate/20240906162524_add_part_of_to_taxonomies.rb +26 -0
  295. data/db/migrate/20241001135825_add_role_to_participatory_space_private_users.rb +7 -0
  296. data/db/migrate/20241001140408_add_published_to_participatory_space_private_users.rb +7 -0
  297. data/db/migrate/20241022002600_create_private_exports.rb +18 -0
  298. data/db/migrate/20241028114430_add_component_counter_to_taxonomy_filters.rb +7 -0
  299. data/db/migrate/20241111104357_add_names_and_space_boolean_to_taxonomy_filters.rb +9 -0
  300. data/db/migrate/20241127093708_add_taxonomy_to_metrics.rb +7 -0
  301. data/db/migrate/20241204121445_add_participatory_space_manifests_from_taxonomy_filters.rb +9 -0
  302. data/decidim-core.gemspec +14 -17
  303. data/lib/decidim/action_authorization.rb +3 -2
  304. data/lib/decidim/amendable.rb +1 -1
  305. data/lib/decidim/api/input_filters/category_input_filter.rb +5 -3
  306. data/lib/decidim/api/input_filters/component_input_filter.rb +33 -20
  307. data/lib/decidim/api/input_filters/user_entity_input_filter.rb +53 -44
  308. data/lib/decidim/api/input_sorts/component_input_sort.rb +15 -13
  309. data/lib/decidim/api/input_sorts/user_entity_input_sort.rb +4 -4
  310. data/lib/decidim/api/interfaces/author_interface.rb +3 -2
  311. data/lib/decidim/api/interfaces/coauthorable_interface.rb +5 -5
  312. data/lib/decidim/api/interfaces/endorsable_interface.rb +2 -2
  313. data/lib/decidim/api/interfaces/participatory_space_interface.rb +5 -10
  314. data/lib/decidim/api/interfaces/taxonomizable_interface.rb +13 -0
  315. data/lib/decidim/api/types/amendment_type.rb +5 -7
  316. data/lib/decidim/api/types/area_api_type.rb +3 -3
  317. data/lib/decidim/api/types/attachment_type.rb +3 -3
  318. data/lib/decidim/api/types/category_type.rb +2 -2
  319. data/lib/decidim/api/types/decidim_type.rb +5 -1
  320. data/lib/decidim/api/types/fingerprint_type.rb +1 -1
  321. data/lib/decidim/api/types/localized_string_type.rb +1 -1
  322. data/lib/decidim/api/types/metric_history_type.rb +2 -0
  323. data/lib/decidim/api/types/metric_type.rb +1 -1
  324. data/lib/decidim/api/types/organization_type.rb +5 -0
  325. data/lib/decidim/api/types/participatory_space_link_type.rb +2 -2
  326. data/lib/decidim/api/types/participatory_space_manifest_type.rb +1 -1
  327. data/lib/decidim/api/types/quantifiable_translated_field_type.rb +1 -1
  328. data/lib/decidim/api/types/scope_api_type.rb +2 -3
  329. data/lib/decidim/api/types/session_type.rb +1 -2
  330. data/lib/decidim/api/types/taxonomy_type.rb +15 -0
  331. data/lib/decidim/api/types/trace_version_type.rb +2 -2
  332. data/lib/decidim/api/types/translated_field_type.rb +3 -5
  333. data/lib/decidim/api/types/user_group_type.rb +7 -20
  334. data/lib/decidim/api/types/user_type.rb +7 -20
  335. data/lib/decidim/asset_router/storage.rb +4 -4
  336. data/lib/decidim/assets/tailwind/tailwind.config.js.erb +2 -1
  337. data/lib/decidim/attachment_attributes.rb +1 -1
  338. data/lib/decidim/attribute_encryptor.rb +1 -1
  339. data/lib/decidim/attribute_object/nested_validator.rb +1 -1
  340. data/lib/decidim/attributes/integer_with_units.rb +27 -0
  341. data/lib/decidim/attributes.rb +2 -0
  342. data/lib/decidim/authorization_form_builder.rb +0 -7
  343. data/lib/decidim/coauthorable.rb +1 -1
  344. data/lib/decidim/command.rb +3 -3
  345. data/lib/decidim/commands/destroy_resource.rb +5 -1
  346. data/lib/decidim/commands/resource_handler.rb +2 -2
  347. data/lib/decidim/commands/restore_resource.rb +45 -0
  348. data/lib/decidim/commands/soft_delete_resource.rb +63 -0
  349. data/lib/decidim/component_manifest.rb +7 -0
  350. data/lib/decidim/core/api.rb +2 -0
  351. data/lib/decidim/core/engine.rb +21 -7
  352. data/lib/decidim/core/menu.rb +0 -5
  353. data/lib/decidim/core/seeds.rb +42 -2
  354. data/lib/decidim/core/test/factories.rb +105 -2
  355. data/lib/decidim/core/test/shared_examples/admin_resource_gallery_examples.rb +85 -0
  356. data/lib/decidim/core/test/shared_examples/comments_examples.rb +393 -38
  357. data/lib/decidim/core/test/shared_examples/components_controller_hide_shared_examples.rb +11 -0
  358. data/lib/decidim/core/test/shared_examples/components_controller_reorder_shared_examples.rb +21 -0
  359. data/lib/decidim/core/test/shared_examples/download_open_data_shared_context.rb +36 -0
  360. data/lib/decidim/core/test/shared_examples/download_open_data_shared_examples.rb +45 -0
  361. data/lib/decidim/core/test/shared_examples/download_your_data_shared_examples.rb +17 -0
  362. data/lib/decidim/core/test/shared_examples/etiquette_validator_examples.rb +25 -0
  363. data/lib/decidim/core/test/shared_examples/follows_examples.rb +43 -0
  364. data/lib/decidim/core/test/shared_examples/has_taxonomies.rb +94 -0
  365. data/lib/decidim/core/test/shared_examples/manage_share_tokens_examples.rb +237 -0
  366. data/lib/decidim/core/test/shared_examples/map_examples.rb +2 -0
  367. data/lib/decidim/core/test/shared_examples/open_data_exporter_examples.rb +102 -0
  368. data/lib/decidim/core/test/shared_examples/participatory_space_members_page_examples.rb +46 -0
  369. data/lib/decidim/core/test/shared_examples/participatory_space_search_examples.rb +98 -0
  370. data/lib/decidim/core/test/shared_examples/permissions.rb +7 -7
  371. data/lib/decidim/core/test/shared_examples/preview_with_share_token_examples.rb +94 -0
  372. data/lib/decidim/core/test/shared_examples/reports_examples.rb +60 -5
  373. data/lib/decidim/core/test/shared_examples/resource_endorsed_event_examples.rb +2 -2
  374. data/lib/decidim/core/test/shared_examples/resource_search_examples.rb +75 -69
  375. data/lib/decidim/core/test/shared_examples/searchable_resources_shared_context.rb +1 -1
  376. data/lib/decidim/core/test/shared_examples/simple_event.rb +33 -19
  377. data/lib/decidim/core/test/shared_examples/social_share_examples.rb +46 -0
  378. data/lib/decidim/core/test/shared_examples/softdeleteable_components_examples.rb +173 -0
  379. data/lib/decidim/core/test/shared_examples/system_endorse_resource_examples.rb +54 -8
  380. data/lib/decidim/core/test/shared_examples/taxonomizable_interface_examples.rb +20 -0
  381. data/lib/decidim/core/test/shared_examples/taxonomizable_resource_examples.rb +37 -0
  382. data/lib/decidim/core/test/shared_examples/taxonomy_settings.rb +49 -0
  383. data/lib/decidim/core/test/shared_examples/translated_event_examples.rb +1 -1
  384. data/lib/decidim/core/test/shared_examples/versions_controller_examples.rb +2 -2
  385. data/lib/decidim/core/test/shared_examples/with_endorsable_permissions_examples.rb +1 -1
  386. data/lib/decidim/core/test.rb +9 -5
  387. data/lib/decidim/core/version.rb +1 -1
  388. data/lib/decidim/core.rb +58 -0
  389. data/lib/decidim/download_your_data_serializers/download_your_data_identity_serializer.rb +0 -4
  390. data/lib/decidim/download_your_data_serializers/download_your_data_participatory_space_private_user_serializer.rb +3 -1
  391. data/lib/decidim/download_your_data_serializers/download_your_data_report_serializer.rb +2 -1
  392. data/lib/decidim/download_your_data_serializers/download_your_data_user_serializer.rb +6 -7
  393. data/lib/decidim/download_your_data_serializers.rb +19 -0
  394. data/lib/decidim/exporters/csv.rb +6 -0
  395. data/lib/decidim/exporters/export_manifest.rb +14 -0
  396. data/lib/decidim/exporters/pdf.rb +26 -22
  397. data/lib/decidim/filter_form_builder.rb +12 -15
  398. data/lib/decidim/form_builder.rb +6 -129
  399. data/lib/decidim/has_category.rb +5 -1
  400. data/lib/decidim/has_private_users.rb +4 -0
  401. data/lib/decidim/has_taxonomy_settings.rb +47 -0
  402. data/lib/decidim/has_upload_validations.rb +1 -1
  403. data/lib/decidim/legacy_form_builder.rb +118 -0
  404. data/lib/decidim/maintenance/import_models/application_record.rb +93 -0
  405. data/lib/decidim/maintenance/import_models/area.rb +82 -0
  406. data/lib/decidim/maintenance/import_models/area_type.rb +12 -0
  407. data/lib/decidim/maintenance/import_models/assembly_type.rb +49 -0
  408. data/lib/decidim/maintenance/import_models/categorization.rb +14 -0
  409. data/lib/decidim/maintenance/import_models/category.rb +139 -0
  410. data/lib/decidim/maintenance/import_models/participatory_process_type.rb +21 -0
  411. data/lib/decidim/maintenance/import_models/scope.rb +163 -0
  412. data/lib/decidim/maintenance/import_models.rb +19 -0
  413. data/lib/decidim/maintenance/taxonomy_importer.rb +142 -0
  414. data/lib/decidim/maintenance/taxonomy_plan.rb +78 -0
  415. data/lib/decidim/maintenance.rb +12 -0
  416. data/lib/decidim/map/autocomplete.rb +52 -8
  417. data/lib/decidim/map/dynamic_map.rb +1 -1
  418. data/lib/decidim/map/provider/dynamic_map/here.rb +1 -40
  419. data/lib/decidim/map/provider/geocoding/here.rb +9 -3
  420. data/lib/decidim/map.rb +3 -6
  421. data/lib/decidim/moderation_tools.rb +29 -5
  422. data/lib/decidim/newsletter_encryptor.rb +1 -1
  423. data/lib/decidim/paddable.rb +1 -1
  424. data/lib/decidim/participable.rb +10 -10
  425. data/lib/decidim/participatory_space_user.rb +10 -0
  426. data/lib/decidim/private_download_helper.rb +15 -0
  427. data/lib/decidim/record_encryptor.rb +51 -46
  428. data/lib/decidim/resourceable.rb +16 -0
  429. data/lib/decidim/seeds.rb +18 -20
  430. data/lib/decidim/settings_manifest.rb +34 -1
  431. data/lib/decidim/soft_deletable.rb +17 -0
  432. data/lib/decidim/taxonomizable.rb +72 -0
  433. data/lib/decidim/view_model.rb +0 -1
  434. data/lib/tasks/decidim_download_your_data_tasks.rake +2 -4
  435. data/lib/tasks/decidim_procfile.rake +6 -0
  436. data/lib/tasks/decidim_tasks.rake +1 -0
  437. data/lib/tasks/decidim_taxonomies.rake +160 -0
  438. data/lib/tasks/upgrade/{decidim_fix_categorization.rake → clean.rake} +25 -18
  439. data/lib/tasks/upgrade/clean_hidden_resources.rake +33 -0
  440. data/lib/tasks/upgrade/decidim_active_storage_migration_tasks.rake +1 -1
  441. data/lib/tasks/upgrade/migrations.rake +94 -0
  442. metadata +198 -103
  443. data/app/cells/decidim/amendable/amenders_list/show.erb +0 -0
  444. data/app/cells/decidim/content_blocks/base/content.erb +0 -0
  445. data/app/cells/decidim/endorsers_list/full_endorsers_list.erb +0 -3
  446. data/app/cells/decidim/endorsers_list_button/content.erb +0 -1
  447. data/app/cells/decidim/endorsers_list_button_cell.rb +0 -15
  448. data/app/cells/decidim/scopes_picker/scope_picker_prompt.erb +0 -3
  449. data/app/cells/decidim/scopes_picker/scope_picker_values.erb +0 -5
  450. data/app/cells/decidim/scopes_picker/show.erb +0 -14
  451. data/app/cells/decidim/scopes_picker_cell.rb +0 -92
  452. data/app/commands/decidim/update_user_interests.rb +0 -41
  453. data/app/controllers/decidim/scopes_controller.rb +0 -84
  454. data/app/controllers/decidim/user_interests_controller.rb +0 -30
  455. data/app/forms/decidim/user_interest_scope_form.rb +0 -25
  456. data/app/forms/decidim/user_interests_form.rb +0 -17
  457. data/app/helpers/decidim/categories_helper.rb +0 -26
  458. data/app/helpers/decidim/scopes_helper.rb +0 -105
  459. data/app/packs/images/decidim/vendor/leaflet/layers-2x.png +0 -0
  460. data/app/packs/images/decidim/vendor/leaflet/layers.png +0 -0
  461. data/app/packs/images/decidim/vendor/leaflet/marker-icon-2x.png +0 -0
  462. data/app/packs/images/decidim/vendor/leaflet/marker-icon.png +0 -0
  463. data/app/packs/images/decidim/vendor/leaflet/marker-shadow.png +0 -0
  464. data/app/packs/src/decidim/vendor/leaflet-tilelayer-here.js +0 -212
  465. data/app/packs/stylesheets/decidim/legacy/MarkerCluster.Default.scss +0 -67
  466. data/app/packs/stylesheets/decidim/legacy/MarkerCluster.scss +0 -18
  467. data/app/packs/stylesheets/decidim/legacy/leaflet.scss +0 -705
  468. data/app/validators/scope_belongs_to_component_validator.rb +0 -16
  469. data/app/views/decidim/account/_user_groups.html.erb +0 -0
  470. data/app/views/decidim/scopes/_scopes_picker_input.html.erb +0 -19
  471. data/app/views/decidim/scopes/picker.html.erb +0 -53
  472. data/app/views/decidim/shared/_comments.html.erb +0 -0
  473. data/app/views/decidim/shared/_share_modal.html.erb +0 -26
  474. data/app/views/decidim/shared/_tags.html.erb +0 -1
  475. data/app/views/decidim/user_interests/_areas.html.erb +0 -14
  476. data/app/views/decidim/user_interests/_scopes.html.erb +0 -22
  477. data/app/views/decidim/user_interests/show.html.erb +0 -22
  478. data/config/initializers/foundation_rails_helper.rb +0 -4
  479. data/lib/decidim/core/test/shared_examples/has_category.rb +0 -38
  480. data/lib/decidim/core/test/shared_examples/has_scope.rb +0 -11
  481. data/lib/decidim/core/test/shared_examples/manage_component_share_tokens.rb +0 -83
  482. data/lib/decidim/core/test/shared_examples/preview_component_with_share_token_examples.rb +0 -49
  483. data/lib/decidim/core/test/shared_examples/scope_helper_examples.rb +0 -93
  484. data/lib/decidim/seven_zip_wrapper.rb +0 -29
@@ -0,0 +1,148 @@
1
+ import confirmAction from "src/decidim/confirm"
2
+ import { getMessages } from "src/decidim/i18n"
3
+
4
+ const { Rails } = window;
5
+
6
+ const createUnloadPreventer = () => {
7
+ const preventUnloadConditions = [];
8
+
9
+ const confirmMessage = getMessages("confirmUnload") || "Are you sure you want to leave this page?";
10
+
11
+ const canUnload = (event) => !preventUnloadConditions.some((condition) => condition(event));
12
+
13
+ // TLDR:
14
+ // The beforeunload event does not work during tests due to the deprecation of
15
+ // the unload event and ChromeDriver automatically accepting these dialogs.
16
+ // ---
17
+ //
18
+ // Even when there are custom listeners on links and forms, the beforeunload
19
+ // event is to ensure that the user does not accidentally reload the page or
20
+ // close the browser or the tab. Note that this does not work during the tests
21
+ // with ChromeDriver due to the deprecation of the unload event and
22
+ // ChromeDriver automatically accepting these dialogs. For the time being,
23
+ // this should work when a real user interacts with the browser along with the
24
+ // "Permissions-Policy" header set by the backend. For more information about
25
+ // the header, see Decidim::Headers::BrowserFeaturePermissions).
26
+ const unloadListener = (event) => {
27
+ if (canUnload(event)) {
28
+ return;
29
+ }
30
+
31
+ // According to:
32
+ // https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
33
+ //
34
+ // > [...] best practice is to trigger the dialog by invoking
35
+ // > preventDefault() on the event object, while also setting returnValue to
36
+ // > support legacy cases.
37
+ event.preventDefault();
38
+ event.returnValue = true;
39
+ };
40
+
41
+ // The beforeunload event listener has to be registered AFTER a user
42
+ // interaction which is why it is wrapped around the next click event that
43
+ // happens after the first unload listener was registered. Otherwise it might
44
+ // not work due to the deprecation of the unload APIs in Chromium based
45
+ // browsers and possibly in the web standards in the future.
46
+ //
47
+ // According to:
48
+ // https://developer.chrome.com/docs/web-platform/page-lifecycle-api#the_beforeunload_event
49
+ //
50
+ // > Never add a beforeunload listener unconditionally or use it as an
51
+ // > end-of-session signal. Only add it when a user has unsaved work, and
52
+ // > remove it as soon as that work has been saved.
53
+ const registerBeforeUnload = () => {
54
+ window.removeEventListener("click", registerBeforeUnload);
55
+ window.addEventListener("beforeunload", unloadListener);
56
+ };
57
+
58
+ const disableBeforeUnload = () => {
59
+ window.removeEventListener("click", registerBeforeUnload);
60
+ window.removeEventListener("beforeunload", unloadListener);
61
+ };
62
+
63
+ const linkClickListener = (ev) => {
64
+ const link = ev.target?.closest("a");
65
+ if (!link) {
66
+ return;
67
+ }
68
+
69
+ if (canUnload(ev)) {
70
+ disableBeforeUnload();
71
+ document.removeEventListener("click", linkClickListener);
72
+ return;
73
+ }
74
+
75
+ window.exitUrl = link.href;
76
+
77
+ ev.preventDefault();
78
+ ev.stopPropagation();
79
+
80
+ confirmAction(confirmMessage, link).then((answer) => {
81
+ if (!answer) {
82
+ return;
83
+ }
84
+
85
+ disableBeforeUnload();
86
+ document.removeEventListener("click", linkClickListener);
87
+ link.click();
88
+ });
89
+ };
90
+
91
+ const formSubmitListener = (ev) => {
92
+ const source = ev.target?.closest("form");
93
+ if (!source) {
94
+ return;
95
+ }
96
+
97
+ if (canUnload(ev)) {
98
+ disableBeforeUnload();
99
+ document.removeEventListener("submit", formSubmitListener);
100
+ return;
101
+ }
102
+
103
+ const button = source.closest(Rails.formSubmitSelector);
104
+ if (!button) {
105
+ return;
106
+ }
107
+
108
+ ev.preventDefault();
109
+ ev.stopImmediatePropagation();
110
+ ev.stopPropagation();
111
+
112
+ confirmAction(confirmMessage, button).then((answer) => {
113
+ if (!answer) {
114
+ return;
115
+ }
116
+
117
+ disableBeforeUnload();
118
+ document.removeEventListener("submit", formSubmitListener);
119
+ source.submit();
120
+ });
121
+ };
122
+
123
+ const registerPreventUnloadListeners = () => {
124
+ window.addEventListener("click", registerBeforeUnload);
125
+ document.addEventListener("click", linkClickListener);
126
+ document.addEventListener("submit", formSubmitListener);
127
+ };
128
+
129
+ return {
130
+ addPreventCondition: (condition) => {
131
+ if (typeof condition !== "function") {
132
+ return;
133
+ }
134
+
135
+ if (preventUnloadConditions.length < 1) {
136
+ // The unload listeners are global, so only the first call to this
137
+ // function should result to registering these listeners.
138
+ registerPreventUnloadListeners();
139
+ }
140
+
141
+ preventUnloadConditions.push(condition);
142
+ }
143
+ };
144
+ };
145
+
146
+ const unloadPreventer = createUnloadPreventer();
147
+
148
+ export const preventUnload = (condition) => unloadPreventer.addPreventCondition(condition);
@@ -11,3 +11,33 @@
11
11
  [id*="comment"][class="comment-reply"][aria-hidden="false"] {
12
12
  display: block;
13
13
  }
14
+
15
+ .card-accordion {
16
+ @apply border-b border-gray-3 mt-6;
17
+
18
+ &-title {
19
+ @apply text-primary font-semibold text-xl inline-block;
20
+ }
21
+
22
+ &-divider-button {
23
+ @apply flex items-center justify-between items-end w-full;
24
+
25
+ svg {
26
+ @apply inline-block w-6 h-6 fill-primary;
27
+ }
28
+
29
+ &[aria-expanded="true"] {
30
+ svg {
31
+ @apply rotate-180 transition-transform;
32
+ }
33
+ }
34
+ }
35
+
36
+ &-section {
37
+ @apply pb-8;
38
+
39
+ ul {
40
+ @apply mb-0;
41
+ }
42
+ }
43
+ }
@@ -98,3 +98,22 @@
98
98
  @apply rounded-full bg-secondary text-white inline-grid place-items-center h-[18px] w-[18px] ml-2 text-xs;
99
99
  }
100
100
  }
101
+
102
+ .layout-main__buttons {
103
+ .button {
104
+ &__sm {
105
+ @apply text-2xl [&:not([class*="button\\_\\_text"])]:px-1.5 [&:not([class*="button\\_\\_text"])]:py-1.5 gap-1.5
106
+ lg:text-sm lg:[&:not([class*="button\\_\\_text"])]:px-4;
107
+
108
+ span {
109
+ @apply hidden lg:flex;
110
+ }
111
+ }
112
+
113
+ &__transparent {
114
+ &-secondary {
115
+ @apply p-0 border-0 lg:border lg:border-secondary;
116
+ }
117
+ }
118
+ }
119
+ }
@@ -19,7 +19,7 @@
19
19
  }
20
20
 
21
21
  > svg {
22
- @apply w-8 h-8 flex-none text-secondary fill-current;
22
+ @apply w-6 h-6 flex-none text-secondary fill-current;
23
23
  }
24
24
 
25
25
  &[aria-expanded="false"] > svg:last-of-type,
@@ -2,44 +2,50 @@
2
2
  @apply space-y-3 opacity-0 -translate-y-full invisible transition-all absolute;
3
3
 
4
4
  &__text {
5
- @apply text-sm text-gray-2;
5
+ @apply text-md text-gray-2 ml-4 leading-normal;
6
+
7
+ a {
8
+ @apply text-md;
9
+ }
6
10
  }
7
11
 
8
12
  &__grid {
9
13
  @apply flex flex-wrap gap-y-3;
10
14
  }
11
15
 
12
- &__avatar,
13
- &__counter {
16
+ &__avatar {
14
17
  @apply rounded-full overflow-hidden border border-white inline-grid w-6 h-6;
15
18
  }
16
19
 
17
- &__counter {
18
- @apply bg-background place-items-center text-secondary text-xs font-semibold transition;
19
- }
20
-
21
20
  &__button {
22
21
  @apply block ml-auto text-right text-xs text-secondary cursor-pointer;
23
22
  }
24
23
 
25
- &__trigger {
26
- @apply flex justify-start -space-x-4;
27
- }
28
-
29
- &__trigger:hover &__counter,
30
- &__trigger[aria-expanded="true"] &__counter {
31
- @apply text-white bg-secondary border-secondary;
32
- }
33
-
34
- &__trigger[data-target*="dropdown"] {
35
- @apply p-0 w-auto;
24
+ &__container {
25
+ @apply w-full flex justify-start -space-x-4 p-0 gap-2;
36
26
 
37
27
  > span {
38
28
  @apply inline-grid;
39
29
  }
40
30
  }
41
31
 
42
- &[id*="dropdown-menu"][aria-hidden="false"] {
43
- @apply opacity-100 visible translate-y-0 transition-all relative;
32
+ &__modal {
33
+ .list-item__author {
34
+ @apply flex w-full justify-between;
35
+
36
+ .author__avatar-container {
37
+ @apply w-8 h-8;
38
+ }
39
+
40
+ .button {
41
+ @apply [&>svg]:hidden;
42
+ }
43
+ }
44
+
45
+ .list-item__author + .list-item__author {
46
+ --vertical-spacing: 1rem;
47
+
48
+ @apply mt-[var(--vertical-spacing)];
49
+ }
44
50
  }
45
51
  }
@@ -79,10 +79,10 @@
79
79
  }
80
80
 
81
81
  .form__wrapper {
82
- @apply flex flex-col py-10 gap-10 last:pb-0;
82
+ @apply flex flex-col pt-10 pb-4 gap-10 last:pb-0;
83
83
 
84
84
  &-block {
85
- @apply py-10 last:pb-0 border-t-2 border-background flex flex-col gap-4 only:[&_*]:ml-auto [&_p]:text-gray-2;
85
+ @apply py-10 last:pb-0 border-background flex flex-col gap-4 [&_p]:text-gray-2;
86
86
  }
87
87
 
88
88
  &-checkbox-label {
@@ -0,0 +1,5 @@
1
+ .hashtags {
2
+ > label {
3
+ @apply ml-4;
4
+ }
5
+ }
@@ -115,7 +115,7 @@ header {
115
115
  @apply fixed bottom-0 left-0 z-40 bg-white w-full px-4 py-3 flex justify-between text-secondary shadow-[0_-4px_6px_rgba(198,198,198,0.25)];
116
116
 
117
117
  &__trigger {
118
- @apply flex flex-col items-center text-secondary cursor-pointer pl-4 border-l border-gray-3;
118
+ @apply flex flex-col items-center text-secondary cursor-pointer md:pl-4 md:border-l border-gray-3;
119
119
 
120
120
  svg {
121
121
  @apply w-6 h-6 fill-current;
@@ -175,14 +175,16 @@ header {
175
175
  }
176
176
 
177
177
  &__login {
178
- @apply w-20 h-full flex flex-row items-center relative text-secondary gap-1;
178
+ @apply w-auto h-full flex flex-row items-center relative text-secondary gap-1 pl-2 pr-2;
179
179
 
180
180
  svg {
181
181
  @apply w-8 h-6 fill-current;
182
182
  }
183
183
 
184
184
  svg + span {
185
- @apply text-sm first-letter:uppercase pr-4 w-16;
185
+ @apply text-sm first-letter:uppercase w-auto;
186
+
187
+ flex-shrink: 0;
186
188
  }
187
189
  }
188
190
  }
@@ -51,7 +51,7 @@
51
51
  }
52
52
 
53
53
  .layout-item {
54
- @apply container grid grid-cols-1 lg:grid-cols-12 py-4 lg:py-24 gap-12 lg:gap-x-0;
54
+ @apply container grid grid-cols-1 lg:grid-cols-12 py-4 lg:py-24 gap-12 lg:gap-x-0 pt-12;
55
55
 
56
56
  &__main {
57
57
  @apply xl:col-start-2 lg:col-span-8 xl:col-span-7 relative;
@@ -59,6 +59,10 @@
59
59
 
60
60
  &__aside {
61
61
  @apply lg:col-start-10 xl:col-start-10 lg:col-span-3 xl:col-span-2;
62
+
63
+ &--footer {
64
+ @apply order-last;
65
+ }
62
66
  }
63
67
 
64
68
  &__back {
@@ -92,10 +96,36 @@
92
96
 
93
97
  .layout-main__heading {
94
98
  @apply space-y-8;
99
+
100
+ .layout-author.has_status {
101
+ @apply mt-6;
102
+
103
+ &:last-of-type {
104
+ @apply mt-2;
105
+ }
106
+ }
95
107
  }
96
108
 
97
109
  .layout-author {
98
110
  @apply flex items-center gap-4;
111
+
112
+ /* overwrite default dropdown styles */
113
+ [data-target*="dropdown"] {
114
+ @apply w-auto cursor-pointer text-secondary text-2xl flex;
115
+ }
116
+
117
+ /* overwrite default dropdown styles */
118
+ [id*="dropdown-menu"][aria-hidden="true"] {
119
+ @apply md:hidden;
120
+ }
121
+
122
+ .dropdown__bottom {
123
+ @apply [&>li]:pl-0;
124
+
125
+ .button {
126
+ @apply [&>svg]:order-1 [&>span]:order-2;
127
+ }
128
+ }
99
129
  }
100
130
 
101
131
  .layout-aside__buttons {
@@ -103,7 +133,7 @@
103
133
  }
104
134
 
105
135
  .layout-main__buttons {
106
- @apply flex gap-x-1 items-center;
136
+ @apply flex gap-x-4 items-center;
107
137
  }
108
138
 
109
139
  .layout-aside__ctas-buttons {
@@ -1,6 +1,11 @@
1
+ $facebook_background: #0866ff;
2
+ $facebook_background_hover: #155cba; // 30% opacity
3
+ $google_background: #f2f2f2;
4
+ $google_background_hover: #dcdcdc; // 30% opacity
5
+
1
6
  .login {
2
7
  &__info {
3
- @apply text-gray-2 text-lg space-y-4 mb-10 prose-a:text-secondary prose-a:underline;
8
+ @apply text-gray-2 text-lg space-y-4 mt-10 prose-a:text-secondary prose-a:underline;
4
9
  }
5
10
 
6
11
  &__info-required {
@@ -12,18 +17,50 @@
12
17
  }
13
18
 
14
19
  &__omniauth {
15
- @apply flex flex-col items-center gap-8 text-gray-2 font-semibold w-fit mx-auto mt-10;
20
+ @apply flex flex-row items-center gap-8 text-gray-2 font-semibold w-fit mx-auto mt-10 [&>a]:w-auto;
16
21
 
17
22
  &-button {
18
- @apply button button__xl border border-gray shadow-[0_4px_6px_rgba(211,211,211,0.25)] justify-start gap-8 text-lg w-full;
23
+ @apply button__lg border border-gray shadow-[0_4px_6px_rgba(211,211,211,0.25)] justify-start gap-8 text-lg w-full rounded;
19
24
 
20
25
  svg {
21
- @apply w-6 h-6 fill-current flex-none;
26
+ @apply w-6 h-6 flex-none fill-white;
27
+ }
28
+
29
+ span {
30
+ @apply hidden 2xl:inline;
31
+ }
32
+
33
+ &--developer {
34
+ @apply flex;
35
+ }
36
+
37
+ &--facebook {
38
+ @apply flex flex-row text-white border border-background;
39
+
40
+ background-color: $facebook_background;
41
+ }
42
+
43
+ &--facebook:hover {
44
+ background-color: $facebook_background_hover;
45
+ }
46
+
47
+ &--x {
48
+ @apply flex flex-row text-white bg-black;
49
+ }
50
+
51
+ &--google {
52
+ @apply flex flex-row text-black border border-background;
53
+
54
+ background-color: $google_background;
55
+ }
56
+
57
+ &--google:hover {
58
+ background-color: $google_background_hover;
22
59
  }
23
60
  }
24
61
 
25
62
  &-separator {
26
- @apply mt-10 flex items-center justify-center gap-12 after:content-[''] before:content-[''] after:h-px before:h-px after:bg-background before:bg-background after:grow before:grow;
63
+ @apply mt-10 flex items-center justify-center gap-8 after:content-[''] before:content-[''] after:h-0.5 before:h-0.5 after:bg-background before:bg-background after:grow before:grow;
27
64
  }
28
65
 
29
66
  &__horizontal {
@@ -32,7 +69,7 @@
32
69
  }
33
70
 
34
71
  &__links {
35
- @apply flex flex-col gap-4 py-10 border-t-2 border-background;
72
+ @apply flex flex-col gap-4 pb-10 border-background items-center;
36
73
 
37
74
  a {
38
75
  @apply w-fit text-secondary hover:underline;
@@ -40,10 +77,20 @@
40
77
  }
41
78
 
42
79
  &__modal {
80
+ @apply p-8;
81
+
43
82
  &-links {
44
83
  @apply flex flex-col md:flex-row gap-4 justify-between items-start md:items-center [&>a]:text-secondary;
45
84
  }
46
85
 
86
+ &-remember {
87
+ @apply flex flex-row justify-between;
88
+
89
+ a {
90
+ @apply underline;
91
+ }
92
+ }
93
+
47
94
  [data-announcement] {
48
95
  @apply mt-4;
49
96
  }
@@ -42,4 +42,46 @@
42
42
  @apply w-full md:w-auto;
43
43
  }
44
44
  }
45
+
46
+ &[data-drawer] {
47
+ & > * {
48
+ @apply h-full max-h-full w-0 inset-0 translate-x-0 translate-y-0 right-0 left-auto max-w-[90%] lg:max-w-[900px] transition-none transition-[width] duration-500 overflow-visible;
49
+ }
50
+
51
+ &[aria-hidden="false"] {
52
+ > * {
53
+ @apply w-[60%];
54
+ }
55
+ }
56
+
57
+ [data-dialog-container] {
58
+ @apply grid-cols-none;
59
+
60
+ &.layout-content {
61
+ @apply bg-white;
62
+
63
+ > .spinner-container {
64
+ @apply sticky h-screen;
65
+ }
66
+ }
67
+ }
68
+
69
+ [data-dialog-closable] {
70
+ @apply absolute top-0 right-auto -left-10 p-4 py-2 bg-white rounded-bl;
71
+ }
72
+
73
+ .form-defaults {
74
+ h1 {
75
+ @apply text-2xl font-semibold text-black my-10 mx-4 border-b border-gray border-b-[1px] pb-8;
76
+
77
+ > .button {
78
+ @apply text-sm float-right;
79
+ }
80
+ }
81
+ }
82
+
83
+ .card {
84
+ @apply p-4 my-4 bg-background-2;
85
+ }
86
+ }
45
87
  }
@@ -3,4 +3,8 @@
3
3
  [data-dialog-actions] {
4
4
  @apply flex-nowrap;
5
5
  }
6
+
7
+ a {
8
+ @apply underline text-secondary;
9
+ }
6
10
  }
@@ -19,6 +19,52 @@
19
19
  > [id^="html-block"] {
20
20
  @apply w-full prose max-w-none [&+*]:border-t-0;
21
21
  }
22
+
23
+ .content-block {
24
+ @apply gap-0;
25
+
26
+ &__title {
27
+ @apply pb-8;
28
+ }
29
+
30
+ .documents {
31
+ &__container > div {
32
+ @apply border-b border-[#D3D5D9] border-t-0 pb-4 pt-6;
33
+ }
34
+
35
+ &__dropdown-container {
36
+ @apply border-b border-[#D3D5D9];
37
+ }
38
+
39
+ &__collection-trigger {
40
+ @apply bg-transparent max-w-full mt-0 pb-4 pt-6 px-0 rounded-none;
41
+
42
+ .documents-details {
43
+ @apply flex flex-col gap-2.5;
44
+
45
+ span {
46
+ @apply flex items-center text-lg leading-6 text-[var(--secondary)] font-semibold gap-1.5;
47
+ }
48
+ }
49
+ }
50
+
51
+ &__collection-content {
52
+ @apply w-auto ml-6 my-4 pl-4 lg:pl-8 border-l border-[#D3D5D9];
53
+
54
+ p {
55
+ @apply pt-4;
56
+ }
57
+
58
+ & > .documents__container {
59
+ @apply border-t-0 pt-0 mt-0;
60
+
61
+ & > :last-child {
62
+ @apply border-b-0;
63
+ }
64
+ }
65
+ }
66
+ }
67
+ }
22
68
  }
23
69
 
24
70
  &__content-block {
@@ -166,7 +166,7 @@
166
166
  }
167
167
 
168
168
  &-container {
169
- @apply w-12 h-12 relative flex-none;
169
+ @apply w-20 h-20 relative flex-none mr-4;
170
170
  }
171
171
 
172
172
  &-badge {
@@ -0,0 +1,64 @@
1
+ .success-image {
2
+ --success: #28a745;
3
+
4
+ width: 100px;
5
+ height: 100px;
6
+ margin: auto;
7
+
8
+ .animation-success__checkmark {
9
+ width: 100%;
10
+ height: 100%;
11
+ border-radius: 50%;
12
+ display: block;
13
+ stroke-width: 5;
14
+ stroke: var(--success);
15
+ stroke-miterlimit: 10;
16
+ box-shadow: inset 0 0 0 #4bb71b;
17
+ animation: fill 0.4s ease-in-out 0.4s forwards,
18
+ scale 0.3s ease-in-out 0.09s both;
19
+ position: relative;
20
+ top: 5px;
21
+ right: 5px;
22
+ margin: 0 auto;
23
+ }
24
+
25
+ .animation-success__checkmark__circle {
26
+ stroke-dasharray: 166;
27
+ stroke-dashoffset: 166;
28
+ stroke-width: 5;
29
+ stroke-miterlimit: 10;
30
+ stroke: var(--success);
31
+ fill: #fff;
32
+ animation: stroke 0.6s cubic-bezier(0.65, 0, 0.45, 1) forwards;
33
+ }
34
+
35
+ .animation-success__checkmark__check {
36
+ transform-origin: 50% 50%;
37
+ stroke-dasharray: 48;
38
+ stroke-dashoffset: 48;
39
+ animation: stroke 0.3s cubic-bezier(0.65, 0, 0.45, 1) 0.8s forwards;
40
+ }
41
+
42
+ @keyframes stroke {
43
+ 100% {
44
+ stroke-dashoffset: 0;
45
+ }
46
+ }
47
+
48
+ @keyframes scale {
49
+ 0%,
50
+ 100% {
51
+ transform: none;
52
+ }
53
+
54
+ 50% {
55
+ transform: scale3d(1.1, 1.1, 1);
56
+ }
57
+ }
58
+
59
+ @keyframes fill {
60
+ 100% {
61
+ box-shadow: inset 0 0 0 30 var(--success);
62
+ }
63
+ }
64
+ }