pageflow 15.6.1 → 15.7.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of pageflow might be problematic. Click here for more details.

Files changed (267) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +236 -11
  3. data/README.md +1 -2
  4. data/admins/pageflow/entry.rb +28 -57
  5. data/admins/pageflow/user.rb +1 -3
  6. data/app/assets/images/pageflow/admin/icons/buttons/editor.svg +2 -0
  7. data/app/assets/images/pageflow/admin/icons/buttons/preview.svg +2 -0
  8. data/app/assets/images/pageflow/admin/icons/buttons/show_public.svg +2 -0
  9. data/app/assets/images/pageflow/admin/icons/delete.svg +9 -0
  10. data/app/assets/images/pageflow/admin/icons/done.svg +6 -0
  11. data/app/assets/images/pageflow/admin/icons/edit.svg +7 -0
  12. data/app/assets/images/pageflow/admin/icons/editor.svg +2 -0
  13. data/app/assets/images/pageflow/admin/icons/folder.svg +8 -0
  14. data/app/assets/images/pageflow/admin/icons/folder_active.svg +8 -0
  15. data/app/assets/images/pageflow/admin/icons/info.svg +3 -0
  16. data/app/assets/images/pageflow/admin/icons/new.svg +5 -0
  17. data/app/assets/images/pageflow/admin/icons/preview.svg +2 -0
  18. data/app/assets/images/pageflow/admin/icons/published.svg +2 -0
  19. data/app/assets/images/pageflow/admin/icons/published_with_password.svg +2 -0
  20. data/app/assets/images/pageflow/admin/icons/show_public.svg +2 -0
  21. data/app/assets/images/pageflow/editor/blank_entry/logo.png +0 -0
  22. data/app/assets/images/pageflow/themes/default/embed_opt_in.svg +3 -0
  23. data/app/assets/images/pageflow/themes/default/embed_opt_out_info.svg +16 -0
  24. data/app/assets/javascripts/pageflow/admin/entries.js +9 -57
  25. data/app/assets/javascripts/pageflow/dist/ui.js +127 -10
  26. data/app/assets/stylesheets/pageflow/admin/active_admin_patches.scss +18 -16
  27. data/app/assets/stylesheets/pageflow/admin/badge_list.scss +25 -35
  28. data/app/assets/stylesheets/pageflow/admin/columns.scss +13 -11
  29. data/app/assets/stylesheets/pageflow/admin/embed_code.scss +1 -4
  30. data/app/assets/stylesheets/pageflow/admin/entries/folders.scss +44 -19
  31. data/app/assets/stylesheets/pageflow/admin/entries.scss +15 -31
  32. data/app/assets/stylesheets/pageflow/admin/features.scss +3 -1
  33. data/app/assets/stylesheets/pageflow/admin/forms.scss +14 -12
  34. data/app/assets/stylesheets/pageflow/admin/hint.scss +8 -14
  35. data/app/assets/stylesheets/pageflow/admin/icon_button.scss +25 -14
  36. data/app/assets/stylesheets/pageflow/admin/icon_link.scss +31 -15
  37. data/app/assets/stylesheets/pageflow/admin/publication_state_indicator.scss +14 -7
  38. data/app/assets/stylesheets/pageflow/admin/status_tags.scss +5 -4
  39. data/app/assets/stylesheets/pageflow/admin/tabs_view.scss +36 -34
  40. data/app/assets/stylesheets/pageflow/admin/tooltip_bubble.scss +15 -11
  41. data/app/assets/stylesheets/pageflow/admin.scss +12 -0
  42. data/app/assets/stylesheets/pageflow/editor/background_positioning.scss +15 -61
  43. data/app/assets/stylesheets/pageflow/editor/base.scss +28 -13
  44. data/app/assets/stylesheets/pageflow/editor/blank_entry.scss +6 -6
  45. data/app/assets/stylesheets/pageflow/editor/change_theme.scss +28 -71
  46. data/app/assets/stylesheets/pageflow/editor/composables.scss +2 -2
  47. data/app/assets/stylesheets/pageflow/editor/confirm_encoding.scss +18 -36
  48. data/app/assets/stylesheets/pageflow/editor/confirm_upload.scss +12 -39
  49. data/app/assets/stylesheets/pageflow/editor/dialogs.scss +39 -12
  50. data/app/assets/stylesheets/pageflow/editor/disabled_atmo_indicator.scss +3 -3
  51. data/app/assets/stylesheets/pageflow/editor/drop_down_button.scss +7 -10
  52. data/app/assets/stylesheets/pageflow/editor/emulation_mode_button.scss +3 -8
  53. data/app/assets/stylesheets/pageflow/editor/failures.scss +3 -3
  54. data/app/assets/stylesheets/pageflow/editor/file_import.scss +22 -38
  55. data/app/assets/stylesheets/pageflow/editor/file_meta_data.scss +3 -7
  56. data/app/assets/stylesheets/pageflow/editor/file_settings_dialog.scss +4 -24
  57. data/app/assets/stylesheets/pageflow/editor/file_stages.scss +10 -11
  58. data/app/assets/stylesheets/pageflow/editor/file_thumbnails.scss +4 -8
  59. data/app/assets/stylesheets/pageflow/editor/files.scss +7 -6
  60. data/app/assets/stylesheets/pageflow/editor/files_explorer.scss +13 -30
  61. data/app/assets/stylesheets/pageflow/editor/files_gallery.scss +15 -11
  62. data/app/assets/stylesheets/pageflow/editor/filtered_files.scss +6 -7
  63. data/app/assets/stylesheets/pageflow/editor/help.scss +19 -14
  64. data/app/assets/stylesheets/pageflow/editor/help_image.scss +1 -1
  65. data/app/assets/stylesheets/pageflow/editor/info_box.scss +19 -0
  66. data/app/assets/stylesheets/pageflow/editor/inputs/file_input.scss +7 -11
  67. data/app/assets/stylesheets/pageflow/editor/inputs/file_processing_state_display.scss +0 -2
  68. data/app/assets/stylesheets/pageflow/editor/inputs/reference.scss +7 -11
  69. data/app/assets/stylesheets/pageflow/editor/list.scss +13 -10
  70. data/app/assets/stylesheets/pageflow/editor/loading.scss +1 -1
  71. data/app/assets/stylesheets/pageflow/editor/locked.scss +9 -5
  72. data/app/assets/stylesheets/pageflow/editor/menu.scss +5 -5
  73. data/app/assets/stylesheets/pageflow/editor/notifications.scss +15 -14
  74. data/app/assets/stylesheets/pageflow/editor/other_entry_item.scss +7 -3
  75. data/app/assets/stylesheets/pageflow/editor/outline.scss +57 -19
  76. data/app/assets/stylesheets/pageflow/editor/page_links.scss +10 -8
  77. data/app/assets/stylesheets/pageflow/editor/page_selection.scss +2 -29
  78. data/app/assets/stylesheets/pageflow/editor/publish_entry.scss +5 -6
  79. data/app/assets/stylesheets/pageflow/editor/quotas.scss +2 -3
  80. data/app/assets/stylesheets/pageflow/editor/select_button.scss +12 -6
  81. data/app/assets/stylesheets/pageflow/editor/sidebar_footer.scss +1 -5
  82. data/app/assets/stylesheets/pageflow/editor/storyline_picker.scss +6 -2
  83. data/app/assets/stylesheets/pageflow/editor/text_tracks.scss +6 -22
  84. data/app/assets/stylesheets/pageflow/editor/widgets.scss +2 -2
  85. data/app/assets/stylesheets/pageflow/editor/wysihtml5.scss +35 -29
  86. data/app/assets/stylesheets/pageflow/mixins/background_icons.scss +3 -3
  87. data/app/assets/stylesheets/pageflow/mixins/buttons.scss +50 -68
  88. data/app/assets/stylesheets/pageflow/themes/default/base.scss +2 -0
  89. data/app/assets/stylesheets/pageflow/themes/default/consent/bar.scss +156 -0
  90. data/app/assets/stylesheets/pageflow/themes/default/consent/vendor_list.scss +62 -0
  91. data/app/assets/stylesheets/pageflow/themes/default/consent.scss +2 -0
  92. data/app/assets/stylesheets/pageflow/themes/default/logo/alignment.scss +7 -0
  93. data/app/assets/stylesheets/pageflow/themes/default/page/shadow.scss +44 -0
  94. data/app/assets/stylesheets/pageflow/themes/default/third_party_embed_consent.scss +103 -0
  95. data/app/assets/stylesheets/pageflow/ui/forms.scss +79 -84
  96. data/app/assets/stylesheets/pageflow/ui/functions.scss +56 -0
  97. data/app/assets/stylesheets/pageflow/ui/input/check_box_group_input.scss +2 -3
  98. data/app/assets/stylesheets/pageflow/ui/input/color_input.scss +6 -6
  99. data/app/assets/stylesheets/pageflow/ui/input/extended_select_input.scss +63 -50
  100. data/app/assets/stylesheets/pageflow/ui/normalize/forms.scss +153 -0
  101. data/app/assets/stylesheets/pageflow/ui/normalize.scss +278 -0
  102. data/app/assets/stylesheets/pageflow/ui/properties.scss +44 -0
  103. data/app/assets/stylesheets/pageflow/ui/table_cells/delete_row_table_cell.scss +1 -1
  104. data/app/assets/stylesheets/pageflow/ui/table_view.scss +14 -18
  105. data/app/assets/stylesheets/pageflow/ui/tabs_view.scss +8 -11
  106. data/app/assets/stylesheets/pageflow/ui/tooltip.scss +6 -8
  107. data/app/assets/stylesheets/pageflow/ui/validation_error_messages.scss +6 -0
  108. data/app/assets/stylesheets/pageflow/ui.scss +4 -0
  109. data/app/controllers/pageflow/edit_locks_controller.rb +3 -1
  110. data/app/helpers/pageflow/admin/entries_helper.rb +2 -12
  111. data/app/helpers/pageflow/embed_code_helper.rb +1 -1
  112. data/app/helpers/pageflow/entries_helper.rb +41 -2
  113. data/app/helpers/pageflow/file_background_images_helper.rb +1 -1
  114. data/app/helpers/pageflow/page_types_helper.rb +1 -1
  115. data/app/helpers/pageflow/themes_helper.rb +1 -1
  116. data/app/jobs/pageflow/poll_meta_data_from_zencoder_job.rb +1 -1
  117. data/app/jobs/pageflow/poll_zencoder_job.rb +1 -9
  118. data/app/models/pageflow/audio_file.rb +17 -0
  119. data/app/models/pageflow/audio_file_url_templates.rb +4 -1
  120. data/app/models/pageflow/customized_theme.rb +37 -0
  121. data/app/models/pageflow/draft_entry.rb +6 -59
  122. data/app/models/pageflow/entry_at_revision.rb +68 -0
  123. data/app/models/pageflow/entry_role_query.rb +44 -24
  124. data/app/models/pageflow/image_file_css_background_image_urls.rb +8 -2
  125. data/app/models/pageflow/published_entry.rb +9 -56
  126. data/app/models/pageflow/theme_customization.rb +46 -0
  127. data/app/models/pageflow/theme_customization_file.rb +58 -0
  128. data/app/models/pageflow/video_file.rb +11 -1
  129. data/app/models/pageflow/video_file_url_templates.rb +1 -0
  130. data/app/policies/pageflow/entry_policy.rb +4 -0
  131. data/app/state_machines/pageflow/media_encoding_state_machine.rb +23 -4
  132. data/app/views/admin/entries/_form.html.erb +50 -0
  133. data/app/views/admin/entries/entry_type_name_input.html.erb +5 -0
  134. data/app/views/admin/features/_form.html.erb +1 -1
  135. data/app/views/admin/memberships/_form.html.erb +2 -3
  136. data/app/views/admin/users/_form.html.erb +1 -1
  137. data/app/views/admin/users/invitation.html.erb +2 -2
  138. data/app/views/components/pageflow/admin/entry_user_badge_list.rb +10 -9
  139. data/app/views/components/pageflow/admin/members_tab.rb +5 -1
  140. data/app/views/components/pageflow/admin/revisions_tab.rb +13 -3
  141. data/app/views/components/pageflow/admin/timestamp.rb +20 -0
  142. data/app/views/components/pageflow/admin/user_account_badge_list.rb +5 -6
  143. data/app/views/pageflow/admin/entries/_cannot_add_user.html.erb +9 -5
  144. data/app/views/pageflow/admin/entries/_entry_type_name_input.html.erb +7 -0
  145. data/app/views/pageflow/audio_files/_audio_file.json.jbuilder +13 -0
  146. data/app/views/pageflow/editor/encoding_confirmations/_intro.html.erb +0 -0
  147. data/app/views/pageflow/editor/encoding_confirmations/check.json.jbuilder +14 -2
  148. data/config/initializers/paperclip.rb +16 -1
  149. data/config/locales/de.yml +24 -28
  150. data/config/locales/en.yml +19 -10
  151. data/db/migrate/20210528073122_create_pageflow_theme_customizations.rb +11 -0
  152. data/db/migrate/20210531090654_create_pageflow_theme_customization_files.rb +15 -0
  153. data/db/migrate/20210531102228_add_selected_file_ids_to_theme_customizations.rb +5 -0
  154. data/db/migrate/20211020085902_add_canonical_entry_url_prefix_to_themings.rb +5 -0
  155. data/db/migrate/20220503150010_add_peak_data_to_audio_files.rb +5 -0
  156. data/db/migrate/20220705084830_add_trailing_slash_in_canonical_urls_to_themings.rb +5 -0
  157. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/editor.js +256 -124
  158. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/frontend.js +566 -167
  159. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-client.js +5 -5
  160. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-server.js +4 -4
  161. data/entry_types/paged/app/helpers/pageflow_paged/third_party_embed_consent_helper.rb +38 -0
  162. data/entry_types/paged/app/views/pageflow_paged/third_party_embed_consent/_opt_in.html.erb +12 -0
  163. data/entry_types/paged/app/views/pageflow_paged/third_party_embed_consent/_opt_out_info.html.erb +10 -0
  164. data/entry_types/paged/config/initializers/features.rb +2 -0
  165. data/entry_types/paged/config/locales/new/video_contain.de.yml +7 -0
  166. data/entry_types/paged/config/locales/new/video_contain.en.yml +7 -0
  167. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/seed_html_helper.rb +3 -0
  168. data/entry_types/scrolled/app/helpers/pageflow_scrolled/entry_json_seed_helper.rb +1 -0
  169. data/entry_types/scrolled/app/helpers/pageflow_scrolled/packs_helper.rb +58 -0
  170. data/entry_types/scrolled/app/helpers/pageflow_scrolled/react_server_side_rendering_helper.rb +37 -3
  171. data/entry_types/scrolled/app/helpers/pageflow_scrolled/themes_helper.rb +92 -6
  172. data/entry_types/scrolled/app/helpers/pageflow_scrolled/webpack_public_path_helper.rb +20 -0
  173. data/entry_types/scrolled/app/models/pageflow_scrolled/content_element.rb +7 -0
  174. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_head.html.erb +5 -2
  175. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_seed.json.jbuilder +5 -1
  176. data/entry_types/scrolled/app/views/pageflow_scrolled/entries/show.html.erb +5 -4
  177. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry.json.jbuilder +16 -0
  178. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_theme.json.jbuilder +13 -2
  179. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_widget.json.jbuilder +2 -0
  180. data/entry_types/scrolled/config/locales/de.yml +1 -8
  181. data/entry_types/scrolled/config/locales/en.yml +1 -9
  182. data/entry_types/scrolled/config/locales/new/before_after_slider.de.yml +8 -0
  183. data/entry_types/scrolled/config/locales/new/before_after_slider.en.yml +8 -0
  184. data/entry_types/scrolled/config/locales/new/center_ragged.de.yml +8 -0
  185. data/entry_types/scrolled/config/locales/new/center_ragged.en.yml +9 -0
  186. data/entry_types/scrolled/config/locales/new/consent.de.yml +25 -0
  187. data/entry_types/scrolled/config/locales/new/consent.en.yml +24 -0
  188. data/entry_types/scrolled/config/locales/new/content_element_categories.de.yml +39 -0
  189. data/entry_types/scrolled/config/locales/new/content_element_categories.en.yml +39 -0
  190. data/entry_types/scrolled/config/locales/new/default_transition.de.yml +14 -0
  191. data/entry_types/scrolled/config/locales/new/default_transition.en.yml +14 -0
  192. data/entry_types/scrolled/config/locales/new/header_line_breaks.de.yml +28 -0
  193. data/entry_types/scrolled/config/locales/new/header_line_breaks.en.yml +27 -0
  194. data/entry_types/scrolled/config/locales/new/header_size.de.yml +17 -0
  195. data/entry_types/scrolled/config/locales/new/header_size.en.yml +17 -0
  196. data/entry_types/scrolled/config/locales/new/iframe_embed.de.yml +39 -0
  197. data/entry_types/scrolled/config/locales/new/iframe_embed.en.yml +39 -0
  198. data/entry_types/scrolled/config/locales/new/inline_loops.de.yml +26 -0
  199. data/entry_types/scrolled/config/locales/new/inline_loops.en.yml +26 -0
  200. data/entry_types/scrolled/config/locales/new/portrait_inline_image.de.yml +9 -0
  201. data/entry_types/scrolled/config/locales/new/portrait_inline_image.en.yml +9 -0
  202. data/entry_types/scrolled/config/locales/new/section_width.de.yml +10 -0
  203. data/entry_types/scrolled/config/locales/new/section_width.en.yml +10 -0
  204. data/entry_types/scrolled/config/locales/new/typography_variants.de.yml +7 -0
  205. data/entry_types/scrolled/config/locales/new/typography_variants.en.yml +7 -0
  206. data/entry_types/scrolled/config/locales/new/video_embed_poster.de.yml +8 -0
  207. data/entry_types/scrolled/config/locales/new/video_embed_poster.en.yml +8 -0
  208. data/entry_types/scrolled/config/locales/new/waveform_styles.de.yml +11 -0
  209. data/entry_types/scrolled/config/locales/new/waveform_styles.en.yml +12 -0
  210. data/entry_types/scrolled/config/locales/new/widgets.de.yml +6 -0
  211. data/entry_types/scrolled/config/locales/new/widgets.en.yml +6 -0
  212. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/install_generator.rb +29 -5
  213. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/themes_plugin.rb.tt +8 -6
  214. data/entry_types/scrolled/lib/pageflow_scrolled/additional_packs.rb +37 -0
  215. data/entry_types/scrolled/lib/pageflow_scrolled/additional_seed_data.rb +57 -0
  216. data/entry_types/scrolled/lib/pageflow_scrolled/configuration.rb +49 -0
  217. data/entry_types/scrolled/lib/pageflow_scrolled/plugin.rb +8 -0
  218. data/entry_types/scrolled/lib/pageflow_scrolled/react_widget_type.rb +42 -0
  219. data/entry_types/scrolled/lib/pageflow_scrolled.rb +17 -1
  220. data/entry_types/scrolled/package/contentElements-editor.js +323 -89
  221. data/entry_types/scrolled/package/contentElements-frontend.css +1 -1
  222. data/entry_types/scrolled/package/contentElements-frontend.js +719 -529
  223. data/entry_types/scrolled/package/editor.js +459 -261
  224. data/entry_types/scrolled/package/frontend/{EditableText-7093fd0e.js → EditableInlineText.module-b9923660.js} +284 -362
  225. data/entry_types/scrolled/package/frontend/{i18n-4dc6c377.js → PhonePlatformContext-9fb97827.js} +199 -106
  226. data/entry_types/scrolled/package/frontend/{Viewer-e49e7807.js → Viewer-e2290ea0.js} +196 -79
  227. data/entry_types/scrolled/package/frontend/{Wavesurfer-0adf5667.js → Wavesurfer-7d9cf1b7.js} +16 -58
  228. data/entry_types/scrolled/package/frontend/{components-6a6793ca.js → components-6ab26015.js} +664 -671
  229. data/entry_types/scrolled/package/frontend/{getPrototypeOf-63c7c8e8.js → createSuper-d0f30da3.js} +34 -5
  230. data/entry_types/scrolled/package/frontend/index.css +1 -9
  231. data/entry_types/scrolled/package/frontend/index.js +1919 -2386
  232. data/entry_types/scrolled/package/frontend/{useBrowserFeature-91a4c29d.js → usePhonePlatform-2857c22b.js} +9 -8
  233. data/entry_types/scrolled/package/frontend-server.js +3 -6
  234. data/entry_types/scrolled/package/package.json +16 -8
  235. data/entry_types/scrolled/package/testHelpers.js +456 -0
  236. data/entry_types/scrolled/package/values/breakpoints.module.css +9 -0
  237. data/entry_types/scrolled/package/values/colors.module.css +5 -0
  238. data/entry_types/scrolled/package/widgets/defaultNavigation.css +9 -0
  239. data/entry_types/scrolled/package/widgets/defaultNavigation.js +612 -0
  240. data/entry_types/scrolled/spec/fixtures/image.svg +1 -0
  241. data/lib/pageflow/ability_mixin.rb +4 -0
  242. data/lib/pageflow/built_in_widget_type.rb +4 -0
  243. data/lib/pageflow/built_in_widget_types_plugin.rb +7 -0
  244. data/lib/pageflow/configuration.rb +34 -1
  245. data/lib/pageflow/entry_type.rb +11 -2
  246. data/lib/pageflow/entry_type_configuration.rb +2 -0
  247. data/lib/pageflow/file_type.rb +24 -0
  248. data/lib/pageflow/paperclip_processors/audio_waveform.rb +42 -0
  249. data/lib/pageflow/paperclip_processors/noop.rb +10 -0
  250. data/lib/pageflow/theme_customizations.rb +61 -0
  251. data/lib/pageflow/version.rb +1 -1
  252. data/lib/pageflow.rb +9 -0
  253. data/package/config/jest/index.js +2 -1
  254. data/package/config/postcss/scaleFunctions.js +71 -0
  255. data/package/editor.js +95 -85
  256. data/package/frontend.js +521 -161
  257. data/package/package.json +5 -3
  258. data/package/testHelpers.js +26 -5
  259. data/package/ui.js +124 -11
  260. data/spec/factories/draft_entries.rb +19 -1
  261. data/spec/factories/entries.rb +4 -0
  262. data/spec/factories/published_entries.rb +6 -0
  263. data/spec/fixtures/audio.ogg +0 -0
  264. metadata +118 -14
  265. data/app/views/admin/entries/_not_allowed_to_see_entry_types.json.jbuilder +0 -2
  266. data/app/views/admin/entries/entry_types.json.jbuilder +0 -4
  267. data/package/config/jest/transformers/upwardBabel.js +0 -5
@@ -1,12 +1,12 @@
1
1
  import React, { useMemo, useState, useCallback, useContext, useRef, useEffect, createContext, useLayoutEffect, memo } from 'react';
2
- import { _ as _slicedToArray, r as useEntryStateDispatch, a as _defineProperty, b as _objectWithoutProperties, u as useI18n, w as updateContentElementConfiguration, k as _objectSpread2, p as _toConsumableArray } from './i18n-4dc6c377.js';
3
- import classNames from 'classnames';
2
+ import { c as _slicedToArray, q as useEntryStateDispatch, b as _defineProperty, _ as _objectWithoutProperties, u as useI18n, A as updateContentElementConfiguration, a as _objectSpread2, o as _toConsumableArray, P as PhonePlatformContext } from './PhonePlatformContext-9fb97827.js';
3
+ import 'i18n-js';
4
4
  import 'use-context-selector';
5
5
  import 'reselect';
6
- import 'i18n-js';
7
6
  import 'slugify';
8
- import { C as ContentElementEditorCommandEmitterContext, d as usePostMessageListener, m as MotifAreaVisibilityProvider, n as ForcePaddingContext, o as ContentElementConfigurationUpdateContext, p as ContentElementEditorStateContext, f as api, i as useContentElementEditorState, q as LayoutWithoutInlineEditing, r as renderElement, s as renderLeaf, h as useContentElementEditorCommandSubscription, T as Text$1, P as PhonePlatformContext } from './EditableText-7093fd0e.js';
9
- import './getPrototypeOf-63c7c8e8.js';
7
+ import classNames from 'classnames';
8
+ import { C as ContentElementEditorCommandEmitterContext, e as usePostMessageListener, n as MotifAreaVisibilityProvider, o as ForcePaddingContext, p as ContentElementConfigurationUpdateContext, q as ContentElementEditorStateContext, f as api, u as useContentElementEditorState, r as LayoutWithoutInlineEditing, s as renderElement, t as renderLeaf$1, j as useContentElementEditorCommandSubscription, T as Text$1, h as frontendStyles } from './EditableInlineText.module-b9923660.js';
9
+ import './createSuper-d0f30da3.js';
10
10
  import BackboneEvents from 'backbone-events-standalone';
11
11
  import { DndProvider, useDrop, useDrag } from 'react-dnd';
12
12
  import { HTML5Backend } from 'react-dnd-html5-backend';
@@ -37,12 +37,9 @@ function EditorStateProvider(props) {
37
37
  setSelection: setSelection
38
38
  };
39
39
  }, [setSelection, selection]);
40
- return (
41
- /*#__PURE__*/
42
- React.createElement(Context.Provider, {
43
- value: value
44
- }, props.children)
45
- );
40
+ return /*#__PURE__*/React.createElement(Context.Provider, {
41
+ value: value
42
+ }, props.children);
46
43
  }
47
44
  function useEditorSelection(options) {
48
45
  var _useContext = useContext(Context),
@@ -57,6 +54,7 @@ function useEditorSelection(options) {
57
54
  }, [setSelection, options]);
58
55
  return useMemo(function () {
59
56
  return setSelection ? {
57
+ range: selection === null || selection === void 0 ? void 0 : selection.range,
60
58
  isSelected: selection && options && selection.id === options.id && selection.type === options.type,
61
59
  select: select,
62
60
  resetSelection: resetSelection
@@ -72,12 +70,9 @@ function useContentElementEditorCommandEmitter() {
72
70
  function ContentElementEditorCommandSubscriptionProvider(_ref) {
73
71
  var emitter = _ref.emitter,
74
72
  children = _ref.children;
75
- return (
76
- /*#__PURE__*/
77
- React.createElement(ContentElementEditorCommandEmitterContext.Provider, {
78
- value: emitter
79
- }, children)
80
- );
73
+ return /*#__PURE__*/React.createElement(ContentElementEditorCommandEmitterContext.Provider, {
74
+ value: emitter
75
+ }, children);
81
76
  }
82
77
 
83
78
  // the editor phone preview. Each ContentElementDecorator renders a
@@ -157,26 +152,15 @@ function restoreScrollPoint(name) {
157
152
  }
158
153
  }
159
154
 
160
- function EntryDecorator(props) {
155
+ function ContentDecorator(props) {
161
156
  var contentElementEditorCommandEmitter = useContentElementEditorCommandEmitter();
162
- return (
163
- /*#__PURE__*/
164
- React.createElement(EditorStateProvider, null,
165
- /*#__PURE__*/
166
- React.createElement(MessageHandler, {
167
- contentElementEditorCommandEmitter: contentElementEditorCommandEmitter
168
- }),
169
- /*#__PURE__*/
170
- React.createElement(ScrollPointMessageHandler, null),
171
- /*#__PURE__*/
172
- React.createElement(ContentElementEditorCommandSubscriptionProvider, {
173
- emitter: contentElementEditorCommandEmitter
174
- },
175
- /*#__PURE__*/
176
- React.createElement(DndProvider, {
177
- backend: HTML5Backend
178
- }, props.children)))
179
- );
157
+ return /*#__PURE__*/React.createElement(EditorStateProvider, null, /*#__PURE__*/React.createElement(MessageHandler, {
158
+ contentElementEditorCommandEmitter: contentElementEditorCommandEmitter
159
+ }), /*#__PURE__*/React.createElement(ScrollPointMessageHandler, null), /*#__PURE__*/React.createElement(ContentElementEditorCommandSubscriptionProvider, {
160
+ emitter: contentElementEditorCommandEmitter
161
+ }, /*#__PURE__*/React.createElement(DndProvider, {
162
+ backend: HTML5Backend
163
+ }, props.children)));
180
164
  }
181
165
 
182
166
  function MessageHandler(_ref) {
@@ -217,33 +201,25 @@ function Toolbar(_ref) {
217
201
  onButtonClick = _ref.onButtonClick,
218
202
  iconSize = _ref.iconSize,
219
203
  collapsible = _ref.collapsible;
220
- return (
221
- /*#__PURE__*/
222
- React.createElement("div", {
223
- className: classNames(styles$2.Toolbar, _defineProperty({}, styles$2.collapsible, collapsible)),
224
- contentEditable: false
225
- }, buttons.map(function (button) {
226
- var Icon = button.icon;
227
- return (
228
- /*#__PURE__*/
229
- React.createElement("button", {
230
- key: button.name,
231
- title: button.text,
232
- className: classNames(styles$2.button, _defineProperty({}, styles$2.activeButton, button.active)),
233
- onMouseDown: function onMouseDown(event) {
234
- event.preventDefault();
235
- event.stopPropagation();
236
- onButtonClick(button.name);
237
- }
238
- },
239
- /*#__PURE__*/
240
- React.createElement(Icon, {
241
- width: iconSize,
242
- height: iconSize
243
- }))
244
- );
245
- }))
246
- );
204
+ return /*#__PURE__*/React.createElement("div", {
205
+ className: classNames(styles$2.Toolbar, _defineProperty({}, styles$2.collapsible, collapsible)),
206
+ contentEditable: false
207
+ }, buttons.map(function (button) {
208
+ var Icon = button.icon;
209
+ return /*#__PURE__*/React.createElement("button", {
210
+ key: button.name,
211
+ title: button.text,
212
+ className: classNames(styles$2.button, _defineProperty({}, styles$2.activeButton, button.active)),
213
+ onMouseDown: function onMouseDown(event) {
214
+ event.preventDefault();
215
+ event.stopPropagation();
216
+ onButtonClick(button.name);
217
+ }
218
+ }, /*#__PURE__*/React.createElement(Icon, {
219
+ width: iconSize,
220
+ height: iconSize
221
+ }));
222
+ }));
247
223
  }
248
224
  Toolbar.defaultProps = {
249
225
  iconSize: 15
@@ -271,27 +247,31 @@ var transitionIcon = (function (_ref) {
271
247
  styles = _ref$styles === void 0 ? {} : _ref$styles,
272
248
  props = _objectWithoutProperties(_ref, ["styles"]);
273
249
 
274
- return React.createElement("svg", _extends({
250
+ return /*#__PURE__*/React.createElement("svg", _extends({
275
251
  "aria-hidden": "true",
276
252
  "data-prefix": "fas",
277
253
  "data-icon": "random",
278
254
  className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-random"] || "fa-random") + " " + (styles["fa-w-16"] || "fa-w-16"),
279
255
  xmlns: "http://www.w3.org/2000/svg",
280
256
  viewBox: "0 0 512 512"
281
- }, props), React.createElement("path", {
257
+ }, props), /*#__PURE__*/React.createElement("path", {
282
258
  fill: "currentColor",
283
259
  d: "M504.971 359.029c9.373 9.373 9.373 24.569 0 33.941l-80 79.984c-15.01 15.01-40.971 4.49-40.971-16.971V416h-58.785a12.004 12.004 0 01-8.773-3.812l-70.556-75.596 53.333-57.143L352 336h32v-39.981c0-21.438 25.943-31.998 40.971-16.971l80 79.981zM12 176h84l52.781 56.551 53.333-57.143-70.556-75.596A11.999 11.999 0 00122.785 96H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12zm372 0v39.984c0 21.46 25.961 31.98 40.971 16.971l80-79.984c9.373-9.373 9.373-24.569 0-33.941l-80-79.981C409.943 24.021 384 34.582 384 56.019V96h-58.785a12.004 12.004 0 00-8.773 3.812L96 336H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h110.785c3.326 0 6.503-1.381 8.773-3.812L352 176h32z"
284
260
  }));
285
261
  });
286
262
 
287
- function SectionDecorator(props) {
263
+ function SectionDecorator(_ref) {
264
+ var section = _ref.section,
265
+ contentElements = _ref.contentElements,
266
+ children = _ref.children;
267
+
288
268
  var _useI18n = useI18n({
289
269
  locale: 'ui'
290
270
  }),
291
271
  t = _useI18n.t;
292
272
 
293
273
  var _useEditorSelection = useEditorSelection({
294
- id: props.id,
274
+ id: section.id,
295
275
  type: 'sectionSettings'
296
276
  }),
297
277
  isSelected = _useEditorSelection.isSelected,
@@ -299,14 +279,14 @@ function SectionDecorator(props) {
299
279
  resetSelection = _useEditorSelection.resetSelection;
300
280
 
301
281
  var transitionSelection = useEditorSelection({
302
- id: props.id,
282
+ id: section.id,
303
283
  type: 'sectionTransition'
304
284
  });
305
285
  var nextTransitionSelection = useEditorSelection({
306
- id: props.nextSection && props.nextSection.id,
286
+ id: section.nextSection && section.nextSection.id,
307
287
  type: 'sectionTransition'
308
288
  });
309
- var lastContentElement = props.contentElements[props.contentElements.length - 1];
289
+ var lastContentElement = contentElements[contentElements.length - 1];
310
290
 
311
291
  var _useEditorSelection2 = useEditorSelection({
312
292
  id: lastContentElement && lastContentElement.id,
@@ -320,34 +300,25 @@ function SectionDecorator(props) {
320
300
  }
321
301
  }
322
302
 
323
- return (
324
- /*#__PURE__*/
325
- React.createElement("div", {
326
- "aria-label": t('pageflow_scrolled.inline_editing.select_section'),
327
- className: className(isSelected, transitionSelection),
328
- onMouseDown: selectIfOutsideContentItem
329
- },
330
- /*#__PURE__*/
331
- React.createElement("div", {
332
- className: styles.controls
333
- }, renderEditTransitionButton({
334
- id: props.previousSection && props.id,
335
- selection: transitionSelection,
336
- position: 'before'
337
- }), renderEditTransitionButton({
338
- id: props.nextSection && props.nextSection.id,
339
- selection: nextTransitionSelection,
340
- position: 'after'
341
- })),
342
- /*#__PURE__*/
343
- React.createElement(MotifAreaVisibilityProvider, {
344
- visible: isSelected
345
- },
346
- /*#__PURE__*/
347
- React.createElement(ForcePaddingContext.Provider, {
348
- value: isLastContentElementSelected || isSelected
349
- }, props.children)))
350
- );
303
+ return /*#__PURE__*/React.createElement("div", {
304
+ "aria-label": t('pageflow_scrolled.inline_editing.select_section'),
305
+ className: className(isSelected, transitionSelection),
306
+ onMouseDown: selectIfOutsideContentItem
307
+ }, /*#__PURE__*/React.createElement("div", {
308
+ className: styles.controls
309
+ }, renderEditTransitionButton({
310
+ id: section.previousSection && section.id,
311
+ selection: transitionSelection,
312
+ position: 'before'
313
+ }), renderEditTransitionButton({
314
+ id: section.nextSection && section.nextSection.id,
315
+ selection: nextTransitionSelection,
316
+ position: 'after'
317
+ })), /*#__PURE__*/React.createElement(MotifAreaVisibilityProvider, {
318
+ visible: isSelected
319
+ }, /*#__PURE__*/React.createElement(ForcePaddingContext.Provider, {
320
+ value: isLastContentElementSelected || isSelected
321
+ }, children)));
351
322
  }
352
323
 
353
324
  function className(isSectionSelected, transitionSelection) {
@@ -356,70 +327,59 @@ function className(isSectionSelected, transitionSelection) {
356
327
  return classNames(styles.wrapper, (_classNames = {}, _defineProperty(_classNames, styles.selected, isSectionSelected), _defineProperty(_classNames, styles.transitionSelected, transitionSelection.isSelected), _classNames));
357
328
  }
358
329
 
359
- function renderEditTransitionButton(_ref) {
360
- var id = _ref.id,
361
- position = _ref.position,
362
- selection = _ref.selection;
330
+ function renderEditTransitionButton(_ref2) {
331
+ var id = _ref2.id,
332
+ position = _ref2.position,
333
+ selection = _ref2.selection;
363
334
 
364
335
  if (!id) {
365
336
  return null;
366
337
  }
367
338
 
368
- return (
369
- /*#__PURE__*/
370
- React.createElement("div", {
371
- className: styles["transitionToolbar-".concat(position)]
372
- },
373
- /*#__PURE__*/
374
- React.createElement(EditTransitionButton, {
375
- id: id,
376
- selection: selection,
377
- position: position
378
- }))
379
- );
339
+ return /*#__PURE__*/React.createElement("div", {
340
+ className: styles["transitionToolbar-".concat(position)]
341
+ }, /*#__PURE__*/React.createElement(EditTransitionButton, {
342
+ id: id,
343
+ selection: selection,
344
+ position: position
345
+ }));
380
346
  }
381
347
 
382
- function EditTransitionButton(_ref2) {
383
- var id = _ref2.id,
384
- position = _ref2.position,
385
- selection = _ref2.selection;
348
+ function EditTransitionButton(_ref3) {
349
+ var id = _ref3.id,
350
+ position = _ref3.position,
351
+ selection = _ref3.selection;
386
352
 
387
353
  var _useI18n2 = useI18n({
388
354
  locale: 'ui'
389
355
  }),
390
356
  t = _useI18n2.t;
391
357
 
392
- return (
393
- /*#__PURE__*/
394
- React.createElement(EditSectionButton, {
395
- id: id,
396
- selection: selection,
397
- text: t("pageflow_scrolled.inline_editing.edit_section_transition_".concat(position)),
398
- icon: transitionIcon
399
- })
400
- );
358
+ return /*#__PURE__*/React.createElement(EditSectionButton, {
359
+ id: id,
360
+ selection: selection,
361
+ text: t("pageflow_scrolled.inline_editing.edit_section_transition_".concat(position)),
362
+ icon: transitionIcon
363
+ });
401
364
  }
402
365
 
403
- function EditSectionButton(_ref3) {
404
- var id = _ref3.id,
405
- selection = _ref3.selection,
406
- icon = _ref3.icon,
407
- text = _ref3.text;
408
- return (
409
- /*#__PURE__*/
410
- React.createElement(Toolbar, {
411
- buttons: [{
412
- name: 'button',
413
- active: selection.isSelected,
414
- icon: icon,
415
- text: text
416
- }],
417
- iconSize: 20,
418
- onButtonClick: function onButtonClick() {
419
- return selection.select();
420
- }
421
- })
422
- );
366
+ function EditSectionButton(_ref4) {
367
+ var id = _ref4.id,
368
+ selection = _ref4.selection,
369
+ icon = _ref4.icon,
370
+ text = _ref4.text;
371
+ return /*#__PURE__*/React.createElement(Toolbar, {
372
+ buttons: [{
373
+ name: 'button',
374
+ active: selection.isSelected,
375
+ icon: icon,
376
+ text: text
377
+ }],
378
+ iconSize: 20,
379
+ onButtonClick: function onButtonClick() {
380
+ return selection.select();
381
+ }
382
+ });
423
383
  }
424
384
 
425
385
  var styles$3 = {"selectionWidth":"1px","selectionPadding":"-6px","selectionPadding2":"-0.5em","main":"SelectionRect-module_main__3AOhG","draggable":"SelectionRect-module_draggable__3Qp53","full":"SelectionRect-module_full__3tsQF","selected":"SelectionRect-module_selected__1PhM6","toolbar":"SelectionRect-module_toolbar__3nPrd","insert":"SelectionRect-module_insert__w0Tl0","insertHovered":"SelectionRect-module_insertHovered__VTsDD","start":"SelectionRect-module_start__3_nAf","insert-before":"SelectionRect-module_insert-before__2Tyq5 SelectionRect-module_insert__w0Tl0","end":"SelectionRect-module_end__3qOoK","insert-after":"SelectionRect-module_insert-after__3FJ4R SelectionRect-module_insert__w0Tl0","insertButton":"SelectionRect-module_insertButton__1g-ZG","dragHandle":"SelectionRect-module_dragHandle__2vVhP"};
@@ -445,10 +405,10 @@ var PlusIcon = (function (_ref) {
445
405
  var _ref$styles = _ref.styles,
446
406
  props = _objectWithoutProperties(_ref, ["styles"]);
447
407
 
448
- return React.createElement("svg", _extends$1({
408
+ return /*#__PURE__*/React.createElement("svg", _extends$1({
449
409
  xmlns: "http://www.w3.org/2000/svg",
450
410
  viewBox: "0 0 512 512"
451
- }, props), React.createElement("path", {
411
+ }, props), /*#__PURE__*/React.createElement("path", {
452
412
  d: "M256 0C114.844 0 0 114.839 0 256s114.844 256 256 256 256-114.839 256-256S397.156 0 256 0zm133.594 272.699H272.699v116.895c0 9.225-7.48 16.699-16.699 16.699-9.219 0-16.699-7.475-16.699-16.699V272.699H122.406c-9.219 0-16.699-7.475-16.699-16.699 0-9.225 7.48-16.699 16.699-16.699h116.895V122.406c0-9.225 7.48-16.699 16.699-16.699 9.219 0 16.699 7.475 16.699 16.699v116.895h116.895c9.219 0 16.699 7.475 16.699 16.699.001 9.225-7.48 16.699-16.699 16.699z"
453
413
  }));
454
414
  });
@@ -475,14 +435,14 @@ var MoveIcon = (function (_ref) {
475
435
  styles = _ref$styles === void 0 ? {} : _ref$styles,
476
436
  props = _objectWithoutProperties(_ref, ["styles"]);
477
437
 
478
- return React.createElement("svg", _extends$2({
438
+ return /*#__PURE__*/React.createElement("svg", _extends$2({
479
439
  "aria-hidden": "true",
480
440
  "data-prefix": "fas",
481
441
  "data-icon": "arrows-alt",
482
442
  className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-arrows-alt"] || "fa-arrows-alt") + " " + (styles["fa-w-16"] || "fa-w-16"),
483
443
  xmlns: "http://www.w3.org/2000/svg",
484
444
  viewBox: "0 0 512 512"
485
- }, props), React.createElement("path", {
445
+ }, props), /*#__PURE__*/React.createElement("path", {
486
446
  fill: "currentColor",
487
447
  d: "M352.201 425.775l-79.196 79.196c-9.373 9.373-24.568 9.373-33.941 0l-79.196-79.196c-15.119-15.119-4.411-40.971 16.971-40.97h51.162L228 284H127.196v51.162c0 21.382-25.851 32.09-40.971 16.971L7.029 272.937c-9.373-9.373-9.373-24.569 0-33.941L86.225 159.8c15.119-15.119 40.971-4.411 40.971 16.971V228H228V127.196h-51.23c-21.382 0-32.09-25.851-16.971-40.971l79.196-79.196c9.373-9.373 24.568-9.373 33.941 0l79.196 79.196c15.119 15.119 4.411 40.971-16.971 40.971h-51.162V228h100.804v-51.162c0-21.382 25.851-32.09 40.97-16.971l79.196 79.196c9.373 9.373 9.373 24.569 0 33.941L425.773 352.2c-15.119 15.119-40.971 4.411-40.97-16.971V284H284v100.804h51.23c21.382 0 32.09 25.851 16.971 40.971z"
488
448
  }));
@@ -491,23 +451,16 @@ var MoveIcon = (function (_ref) {
491
451
  function SelectionRect(props) {
492
452
  var _classNames;
493
453
 
494
- return (
495
- /*#__PURE__*/
496
- React.createElement("div", {
497
- className: classNames(styles$3.main, (_classNames = {}, _defineProperty(_classNames, styles$3.full, props.full), _defineProperty(_classNames, styles$3.selected, props.selected), _defineProperty(_classNames, styles$3.draggable, props.drag), _defineProperty(_classNames, styles$3.start, props.selected && props.start), _defineProperty(_classNames, styles$3.end, props.selected && props.end), _classNames)),
498
- "aria-label": props.ariaLabel,
499
- "data-scrollpoint": props.scrollPoint ? 'selection' : undefined,
500
- onClick: props.onClick
501
- }, renderDragHandle(props), renderToolbar(props),
502
- /*#__PURE__*/
503
- React.createElement(InsertButton, Object.assign({}, props, {
504
- at: "before"
505
- })), props.children,
506
- /*#__PURE__*/
507
- React.createElement(InsertButton, Object.assign({}, props, {
508
- at: "after"
509
- })))
510
- );
454
+ return /*#__PURE__*/React.createElement("div", {
455
+ className: classNames(styles$3.main, (_classNames = {}, _defineProperty(_classNames, styles$3.full, props.full), _defineProperty(_classNames, styles$3.selected, props.selected), _defineProperty(_classNames, styles$3.draggable, props.drag), _defineProperty(_classNames, styles$3.start, props.selected && props.start), _defineProperty(_classNames, styles$3.end, props.selected && props.end), _classNames)),
456
+ "aria-label": props.ariaLabel,
457
+ "data-scrollpoint": props.scrollPoint ? 'selection' : undefined,
458
+ onClick: props.onClick
459
+ }, renderDragHandle(props), renderToolbar(props), /*#__PURE__*/React.createElement(InsertButton, Object.assign({}, props, {
460
+ at: "before"
461
+ })), props.children, /*#__PURE__*/React.createElement(InsertButton, Object.assign({}, props, {
462
+ at: "after"
463
+ })));
511
464
  }
512
465
 
513
466
  function InsertButton(props) {
@@ -516,33 +469,26 @@ function InsertButton(props) {
516
469
  insertHovered = _useState2[0],
517
470
  setInsertHovered = _useState2[1];
518
471
 
519
- return (
520
- /*#__PURE__*/
521
- React.createElement("div", {
522
- className: classNames(styles$3["insert-".concat(props.at)], _defineProperty({}, styles$3.insertHovered, insertHovered)),
523
- contentEditable: false
472
+ return /*#__PURE__*/React.createElement("div", {
473
+ className: classNames(styles$3["insert-".concat(props.at)], _defineProperty({}, styles$3.insertHovered, insertHovered)),
474
+ contentEditable: false
475
+ }, /*#__PURE__*/React.createElement("button", {
476
+ className: styles$3.insertButton,
477
+ title: props.insertButtonTitles && props.insertButtonTitles[props.at],
478
+ onClick: function onClick() {
479
+ return props.onInsertButtonClick(props.at);
524
480
  },
525
- /*#__PURE__*/
526
- React.createElement("button", {
527
- className: styles$3.insertButton,
528
- title: props.insertButtonTitles && props.insertButtonTitles[props.at],
529
- onClick: function onClick() {
530
- return props.onInsertButtonClick(props.at);
531
- },
532
- onMouseEnter: function onMouseEnter() {
533
- return setInsertHovered(true);
534
- },
535
- onMouseLeave: function onMouseLeave() {
536
- return setInsertHovered(false);
537
- }
481
+ onMouseEnter: function onMouseEnter() {
482
+ return setInsertHovered(true);
538
483
  },
539
- /*#__PURE__*/
540
- React.createElement(PlusIcon, {
541
- width: 15,
542
- height: 15,
543
- fill: "currentColor"
544
- })))
545
- );
484
+ onMouseLeave: function onMouseLeave() {
485
+ return setInsertHovered(false);
486
+ }
487
+ }, /*#__PURE__*/React.createElement(PlusIcon, {
488
+ width: 15,
489
+ height: 15,
490
+ fill: "currentColor"
491
+ })));
546
492
  }
547
493
 
548
494
  function renderDragHandle(_ref) {
@@ -553,16 +499,11 @@ function renderDragHandle(_ref) {
553
499
  return null;
554
500
  }
555
501
 
556
- return (
557
- /*#__PURE__*/
558
- React.createElement("div", {
559
- ref: drag,
560
- className: styles$3.dragHandle,
561
- title: dragHandleTitle
562
- },
563
- /*#__PURE__*/
564
- React.createElement(MoveIcon, null))
565
- );
502
+ return /*#__PURE__*/React.createElement("div", {
503
+ ref: drag,
504
+ className: styles$3.dragHandle,
505
+ title: dragHandleTitle
506
+ }, /*#__PURE__*/React.createElement(MoveIcon, null));
566
507
  }
567
508
 
568
509
  function renderToolbar(_ref2) {
@@ -571,18 +512,13 @@ function renderToolbar(_ref2) {
571
512
  start = _ref2.start;
572
513
 
573
514
  if (toolbarButtons && start) {
574
- return (
575
- /*#__PURE__*/
576
- React.createElement("div", {
577
- className: styles$3.toolbar
578
- },
579
- /*#__PURE__*/
580
- React.createElement(Toolbar, {
581
- buttons: toolbarButtons,
582
- collapsible: true,
583
- onButtonClick: onToolbarButtonClick
584
- }))
585
- );
515
+ return /*#__PURE__*/React.createElement("div", {
516
+ className: styles$3.toolbar
517
+ }, /*#__PURE__*/React.createElement(Toolbar, {
518
+ buttons: toolbarButtons,
519
+ collapsible: true,
520
+ onButtonClick: onToolbarButtonClick
521
+ }));
586
522
  }
587
523
  }
588
524
 
@@ -615,7 +551,8 @@ function DropTargets(_ref) {
615
551
  drop: function drop(item) {
616
552
  return onDrop({
617
553
  at: 'before',
618
- id: item.id
554
+ id: item.id,
555
+ range: item.range
619
556
  });
620
557
  }
621
558
  }),
@@ -642,7 +579,8 @@ function DropTargets(_ref) {
642
579
  drop: function drop(item) {
643
580
  return onDrop({
644
581
  at: 'after',
645
- id: item.id
582
+ id: item.id,
583
+ range: item.range
646
584
  });
647
585
  }
648
586
  }),
@@ -652,23 +590,16 @@ function DropTargets(_ref) {
652
590
  isAfter = _useDrop4$.isAfter,
653
591
  dropAfter = _useDrop4[1];
654
592
 
655
- return (
656
- /*#__PURE__*/
657
- React.createElement(React.Fragment, null, canDropBefore &&
658
- /*#__PURE__*/
659
- React.createElement("div", {
660
- ref: dropBefore,
661
- "data-testid": "drop-before",
662
- className: classNames(styles$4.before, _defineProperty({}, styles$4.isOver, isBefore))
663
- }), canDropAfter &&
664
- /*#__PURE__*/
665
- React.createElement("div", {
666
- ref: dropAfter,
667
- "data-testid": "drop-after",
668
- title: "bar",
669
- className: classNames(styles$4.after, _defineProperty({}, styles$4.isOver, isAfter))
670
- }))
671
- );
593
+ return /*#__PURE__*/React.createElement(React.Fragment, null, canDropBefore && /*#__PURE__*/React.createElement("div", {
594
+ ref: dropBefore,
595
+ "data-testid": "drop-before",
596
+ className: classNames(styles$4.before, _defineProperty({}, styles$4.isOver, isBefore))
597
+ }), canDropAfter && /*#__PURE__*/React.createElement("div", {
598
+ ref: dropAfter,
599
+ "data-testid": "drop-after",
600
+ title: "bar",
601
+ className: classNames(styles$4.after, _defineProperty({}, styles$4.isOver, isAfter))
602
+ }));
672
603
  }
673
604
 
674
605
  function postInsertContentElementMessage(_ref) {
@@ -686,11 +617,13 @@ function postInsertContentElementMessage(_ref) {
686
617
  }
687
618
  function postMoveContentElementMessage(_ref2) {
688
619
  var id = _ref2.id,
620
+ range = _ref2.range,
689
621
  to = _ref2.to;
690
622
  window.parent.postMessage({
691
623
  type: 'MOVE_CONTENT_ELEMENT',
692
624
  payload: {
693
625
  id: id,
626
+ range: range,
694
627
  to: to
695
628
  }
696
629
  }, window.location.origin);
@@ -734,12 +667,9 @@ function ContentElementConfigurationUpdateProvider(_ref) {
734
667
  configuration: configuration
735
668
  });
736
669
  }, [dispatch, permaId, id]);
737
- return (
738
- /*#__PURE__*/
739
- React.createElement(ContentElementConfigurationUpdateContext.Provider, {
740
- value: update
741
- }, children)
742
- );
670
+ return /*#__PURE__*/React.createElement(ContentElementConfigurationUpdateContext.Provider, {
671
+ value: update
672
+ }, children);
743
673
  }
744
674
 
745
675
  function ContentElementEditorStateProvider(_ref) {
@@ -751,7 +681,8 @@ function ContentElementEditorStateProvider(_ref) {
751
681
  type: 'contentElement'
752
682
  }),
753
683
  isSelected = _useEditorSelection.isSelected,
754
- select = _useEditorSelection.select;
684
+ select = _useEditorSelection.select,
685
+ range = _useEditorSelection.range;
755
686
 
756
687
  var previousTransientState = useRef({});
757
688
  var setTransientState = useCallback(function (state) {
@@ -768,15 +699,13 @@ function ContentElementEditorStateProvider(_ref) {
768
699
  isEditable: true,
769
700
  select: select,
770
701
  isSelected: isSelected,
702
+ range: range,
771
703
  setTransientState: setTransientState
772
704
  };
773
- }, [select, isSelected, setTransientState]);
774
- return (
775
- /*#__PURE__*/
776
- React.createElement(ContentElementEditorStateContext.Provider, {
777
- value: value
778
- }, children)
779
- );
705
+ }, [select, isSelected, range, setTransientState]);
706
+ return /*#__PURE__*/React.createElement(ContentElementEditorStateContext.Provider, {
707
+ value: value
708
+ }, children);
780
709
  }
781
710
 
782
711
  function shallowEqual(obj1, obj2) {
@@ -786,24 +715,15 @@ function shallowEqual(obj1, obj2) {
786
715
  }
787
716
 
788
717
  function ContentElementDecorator(props) {
789
- return (
790
- /*#__PURE__*/
791
- React.createElement("div", {
792
- className: styles$1.wrapper,
793
- "data-scrollpoint": props.id
794
- },
795
- /*#__PURE__*/
796
- React.createElement(ContentElementEditorStateProvider, {
797
- id: props.id
798
- },
799
- /*#__PURE__*/
800
- React.createElement(OptionalSelectionRect, props,
801
- /*#__PURE__*/
802
- React.createElement(ContentElementConfigurationUpdateProvider, {
803
- id: props.id,
804
- permaId: props.permaId
805
- }, props.children))))
806
- );
718
+ return /*#__PURE__*/React.createElement("div", {
719
+ className: styles$1.wrapper,
720
+ "data-scrollpoint": props.id
721
+ }, /*#__PURE__*/React.createElement(ContentElementEditorStateProvider, {
722
+ id: props.id
723
+ }, /*#__PURE__*/React.createElement(OptionalSelectionRect, props, /*#__PURE__*/React.createElement(ContentElementConfigurationUpdateProvider, {
724
+ id: props.id,
725
+ permaId: props.permaId
726
+ }, props.children))));
807
727
  }
808
728
 
809
729
  function OptionalSelectionRect(props) {
@@ -813,10 +733,7 @@ function OptionalSelectionRect(props) {
813
733
  if (customSelectionRect) {
814
734
  return props.children;
815
735
  } else {
816
- return (
817
- /*#__PURE__*/
818
- React.createElement(DefaultSelectionRect, props, props.children)
819
- );
736
+ return /*#__PURE__*/React.createElement(DefaultSelectionRect, props, props.children);
820
737
  }
821
738
  }
822
739
 
@@ -840,50 +757,45 @@ function DefaultSelectionRect(props) {
840
757
  drag = _useDrag2[1],
841
758
  preview = _useDrag2[2];
842
759
 
843
- return (
844
- /*#__PURE__*/
845
- React.createElement(SelectionRect, {
846
- selected: isSelected,
847
- scrollPoint: isSelected,
848
- drag: drag,
849
- dragHandleTitle: t('pageflow_scrolled.inline_editing.drag_content_element'),
850
- full: props.position === 'full',
851
- ariaLabel: t('pageflow_scrolled.inline_editing.select_content_element'),
852
- insertButtonTitles: t('pageflow_scrolled.inline_editing.insert_content_element'),
853
- onClick: function onClick() {
854
- return select();
855
- },
856
- onInsertButtonClick: function onInsertButtonClick(at) {
857
- return postInsertContentElementMessage({
760
+ return /*#__PURE__*/React.createElement(SelectionRect, {
761
+ selected: isSelected,
762
+ scrollPoint: isSelected,
763
+ drag: drag,
764
+ dragHandleTitle: t('pageflow_scrolled.inline_editing.drag_content_element'),
765
+ full: props.position === 'full',
766
+ ariaLabel: t('pageflow_scrolled.inline_editing.select_content_element'),
767
+ insertButtonTitles: t('pageflow_scrolled.inline_editing.insert_content_element'),
768
+ onClick: function onClick() {
769
+ return select();
770
+ },
771
+ onInsertButtonClick: function onInsertButtonClick(at) {
772
+ return postInsertContentElementMessage({
773
+ id: props.id,
774
+ at: at
775
+ });
776
+ }
777
+ }, /*#__PURE__*/React.createElement("div", {
778
+ ref: preview
779
+ }, props.children), /*#__PURE__*/React.createElement(DropTargets, {
780
+ accept: "contentElement",
781
+ canDrop: function canDrop(_ref2) {
782
+ var id = _ref2.id;
783
+ return id !== props.id;
784
+ },
785
+ onDrop: function onDrop(_ref3) {
786
+ var id = _ref3.id,
787
+ range = _ref3.range,
788
+ at = _ref3.at;
789
+ return postMoveContentElementMessage({
790
+ id: id,
791
+ range: range,
792
+ to: {
858
793
  id: props.id,
859
794
  at: at
860
- });
861
- }
862
- },
863
- /*#__PURE__*/
864
- React.createElement("div", {
865
- ref: preview
866
- }, props.children),
867
- /*#__PURE__*/
868
- React.createElement(DropTargets, {
869
- accept: "contentElement",
870
- canDrop: function canDrop(_ref2) {
871
- var id = _ref2.id;
872
- return id !== props.id;
873
- },
874
- onDrop: function onDrop(_ref3) {
875
- var id = _ref3.id,
876
- at = _ref3.at;
877
- return postMoveContentElementMessage({
878
- id: id,
879
- to: {
880
- id: props.id,
881
- at: at
882
- }
883
- });
884
- }
885
- }))
886
- );
795
+ }
796
+ });
797
+ }
798
+ }));
887
799
  }
888
800
 
889
801
  var styles$5 = {"container":"ContentElementInsertButton-module_container__3dvUS","hovered":"ContentElementInsertButton-module_hovered__3Pggi","button":"ContentElementInsertButton-module_button__2-eE2"};
@@ -901,33 +813,26 @@ function ContentElementInsertButton(_ref) {
901
813
  }),
902
814
  t = _useI18n.t;
903
815
 
904
- return (
905
- /*#__PURE__*/
906
- React.createElement("div", {
907
- className: classNames(styles$5.container, _defineProperty({}, styles$5.hovered, hovered))
816
+ return /*#__PURE__*/React.createElement("div", {
817
+ className: classNames(styles$5.container, _defineProperty({}, styles$5.hovered, hovered))
818
+ }, /*#__PURE__*/React.createElement("button", {
819
+ className: styles$5.button,
820
+ title: t('pageflow_scrolled.inline_editing.add_content_element'),
821
+ onClick: onClick,
822
+ onMouseDown: function onMouseDown(event) {
823
+ return event.stopPropagation();
908
824
  },
909
- /*#__PURE__*/
910
- React.createElement("button", {
911
- className: styles$5.button,
912
- title: t('pageflow_scrolled.inline_editing.add_content_element'),
913
- onClick: onClick,
914
- onMouseDown: function onMouseDown(event) {
915
- return event.stopPropagation();
916
- },
917
- onMouseEnter: function onMouseEnter() {
918
- return setHovered(true);
919
- },
920
- onMouseLeave: function onMouseLeave() {
921
- return setHovered(false);
922
- }
825
+ onMouseEnter: function onMouseEnter() {
826
+ return setHovered(true);
923
827
  },
924
- /*#__PURE__*/
925
- React.createElement(PlusIcon, {
926
- width: 15,
927
- height: 15,
928
- fill: "currentColor"
929
- })))
930
- );
828
+ onMouseLeave: function onMouseLeave() {
829
+ return setHovered(false);
830
+ }
831
+ }, /*#__PURE__*/React.createElement(PlusIcon, {
832
+ width: 15,
833
+ height: 15,
834
+ fill: "currentColor"
835
+ })));
931
836
  }
932
837
 
933
838
  function LayoutWithPlaceholder(props) {
@@ -943,9 +848,7 @@ function LayoutWithPlaceholder(props) {
943
848
  }),
944
849
  settingsSelected = _useEditorSelection2.isSelected;
945
850
 
946
- var placeholder = isSelected || settingsSelected ?
947
- /*#__PURE__*/
948
- React.createElement(ContentElementInsertButton, {
851
+ var placeholder = isSelected || settingsSelected ? /*#__PURE__*/React.createElement(ContentElementInsertButton, {
949
852
  onClick: function onClick() {
950
853
  return postInsertContentElementMessage({
951
854
  at: 'endOfSection',
@@ -953,12 +856,9 @@ function LayoutWithPlaceholder(props) {
953
856
  });
954
857
  }
955
858
  }) : null;
956
- return (
957
- /*#__PURE__*/
958
- React.createElement(LayoutWithoutInlineEditing, Object.assign({}, props, {
959
- placeholder: placeholder
960
- }))
961
- );
859
+ return /*#__PURE__*/React.createElement(LayoutWithoutInlineEditing, Object.assign({}, props, {
860
+ placeholder: placeholder
861
+ }));
962
862
  }
963
863
 
964
864
  function useCachedValue(value) {
@@ -1028,14 +928,9 @@ function TextPlaceholder(_ref) {
1028
928
  return null;
1029
929
  }
1030
930
 
1031
- return (
1032
- /*#__PURE__*/
1033
- React.createElement("div", {
1034
- className: styles$6.placeholder
1035
- },
1036
- /*#__PURE__*/
1037
- React.createElement("div", null, text))
1038
- );
931
+ return /*#__PURE__*/React.createElement("div", {
932
+ className: styles$6.placeholder
933
+ }, /*#__PURE__*/React.createElement("div", null, text));
1039
934
  }
1040
935
 
1041
936
  function withCustomInsertBreak(editor) {
@@ -1098,14 +993,14 @@ var ExternalLinkIcon = (function (_ref) {
1098
993
  styles = _ref$styles === void 0 ? {} : _ref$styles,
1099
994
  props = _objectWithoutProperties(_ref, ["styles"]);
1100
995
 
1101
- return React.createElement("svg", _extends$3({
996
+ return /*#__PURE__*/React.createElement("svg", _extends$3({
1102
997
  "aria-hidden": "true",
1103
998
  "data-prefix": "fas",
1104
999
  "data-icon": "external-link-alt",
1105
1000
  className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-external-link-alt"] || "fa-external-link-alt") + " " + (styles["fa-w-16"] || "fa-w-16"),
1106
1001
  xmlns: "http://www.w3.org/2000/svg",
1107
1002
  viewBox: "0 0 512 512"
1108
- }, props), React.createElement("path", {
1003
+ }, props), /*#__PURE__*/React.createElement("path", {
1109
1004
  fill: "currentColor",
1110
1005
  d: "M432 320h-32a16 16 0 00-16 16v112H64V128h144a16 16 0 0016-16V80a16 16 0 00-16-16H48a48 48 0 00-48 48v352a48 48 0 0048 48h352a48 48 0 0048-48V336a16 16 0 00-16-16zM488 0H360c-21.37 0-32.05 25.91-17 41l35.73 35.73L135 320.37a24 24 0 000 34L157.67 377a24 24 0 0034 0l243.61-243.68L471 169c15 15 41 4.5 41-17V24a24 24 0 00-24-24z"
1111
1006
  }));
@@ -1152,26 +1047,15 @@ function LinkTooltipProvider(_ref) {
1152
1047
  }
1153
1048
  };
1154
1049
  }, []);
1155
- return (
1156
- /*#__PURE__*/
1157
- React.createElement(DisabledContext.Provider, {
1158
- value: disabled
1159
- },
1160
- /*#__PURE__*/
1161
- React.createElement(StateContext.Provider, {
1162
- value: state
1163
- },
1164
- /*#__PURE__*/
1165
- React.createElement(UpdateContext.Provider, {
1166
- value: update
1167
- },
1168
- /*#__PURE__*/
1169
- React.createElement("div", {
1170
- ref: outerRef
1171
- },
1172
- /*#__PURE__*/
1173
- React.createElement(LinkTooltip, null), children))))
1174
- );
1050
+ return /*#__PURE__*/React.createElement(DisabledContext.Provider, {
1051
+ value: disabled
1052
+ }, /*#__PURE__*/React.createElement(StateContext.Provider, {
1053
+ value: state
1054
+ }, /*#__PURE__*/React.createElement(UpdateContext.Provider, {
1055
+ value: update
1056
+ }, /*#__PURE__*/React.createElement("div", {
1057
+ ref: outerRef
1058
+ }, /*#__PURE__*/React.createElement(LinkTooltip, null), children))));
1175
1059
  }
1176
1060
  function LinkPreview(_ref2) {
1177
1061
  var href = _ref2.href,
@@ -1182,17 +1066,14 @@ function LinkPreview(_ref2) {
1182
1066
  deactivate = _useContext.deactivate;
1183
1067
 
1184
1068
  var ref = useRef();
1185
- return (
1186
- /*#__PURE__*/
1187
- React.createElement("span", {
1188
- ref: ref,
1189
- onMouseEnter: function onMouseEnter() {
1190
- return activate(href, ref);
1191
- },
1192
- onMouseLeave: deactivate,
1193
- onMouseDown: deactivate
1194
- }, children)
1195
- );
1069
+ return /*#__PURE__*/React.createElement("span", {
1070
+ ref: ref,
1071
+ onMouseEnter: function onMouseEnter() {
1072
+ return activate(href, ref);
1073
+ },
1074
+ onMouseLeave: deactivate,
1075
+ onMouseDown: deactivate
1076
+ }, children);
1196
1077
  }
1197
1078
  function LinkTooltip() {
1198
1079
  var disabled = useContext(DisabledContext);
@@ -1208,30 +1089,23 @@ function LinkTooltip() {
1208
1089
  return null;
1209
1090
  }
1210
1091
 
1211
- return (
1212
- /*#__PURE__*/
1213
- React.createElement("div", {
1214
- className: classNames(styles$7.linkTooltip, styles$7.hoveringToolbar),
1215
- onMouseEnter: keep,
1216
- onMouseLeave: deactivate,
1217
- style: {
1218
- top: state.top,
1219
- left: state.left,
1220
- opacity: 1
1221
- }
1222
- },
1223
- /*#__PURE__*/
1224
- React.createElement("a", {
1225
- href: state.href,
1226
- target: "_blank",
1227
- rel: "noopener noreferrer"
1228
- }, state.href,
1229
- /*#__PURE__*/
1230
- React.createElement(ExternalLinkIcon, {
1231
- width: 10,
1232
- height: 10
1233
- })))
1234
- );
1092
+ return /*#__PURE__*/React.createElement("div", {
1093
+ className: classNames(styles$7.linkTooltip, styles$7.hoveringToolbar),
1094
+ onMouseEnter: keep,
1095
+ onMouseLeave: deactivate,
1096
+ style: {
1097
+ top: state.top,
1098
+ left: state.left,
1099
+ opacity: 1
1100
+ }
1101
+ }, /*#__PURE__*/React.createElement("a", {
1102
+ href: state.href,
1103
+ target: "_blank",
1104
+ rel: "noopener noreferrer"
1105
+ }, state.href, /*#__PURE__*/React.createElement(ExternalLinkIcon, {
1106
+ width: 10,
1107
+ height: 10
1108
+ })));
1235
1109
  }
1236
1110
 
1237
1111
  function withLinks(editor) {
@@ -1245,29 +1119,23 @@ function withLinks(editor) {
1245
1119
  }
1246
1120
  function renderElementWithLinkPreview(options) {
1247
1121
  if (options.element.type === 'link') {
1248
- return (
1249
- /*#__PURE__*/
1250
- React.createElement(LinkPreview, {
1251
- href: options.element.href
1252
- }, renderElement(options))
1253
- );
1122
+ return /*#__PURE__*/React.createElement(LinkPreview, {
1123
+ href: options.element.href
1124
+ }, renderElement(options));
1254
1125
  } else {
1255
1126
  return renderElement(options);
1256
1127
  }
1257
1128
  }
1258
1129
  function renderLeafWithLinkSelection(options) {
1259
1130
  if (options.leaf.linkSelection) {
1260
- return (
1261
- /*#__PURE__*/
1262
- React.createElement("span", Object.assign({}, options.attributes, {
1263
- style: {
1264
- backgroundColor: '#aaa'
1265
- }
1266
- }), renderLeaf(options))
1267
- );
1131
+ return /*#__PURE__*/React.createElement("span", Object.assign({}, options.attributes, {
1132
+ style: {
1133
+ backgroundColor: '#aaa'
1134
+ }
1135
+ }), renderLeaf$1(options));
1268
1136
  }
1269
1137
 
1270
- return renderLeaf(options);
1138
+ return renderLeaf$1(options);
1271
1139
  }
1272
1140
  function decorateLinkSelection(_ref, linkSelection) {
1273
1141
  var _ref2 = _slicedToArray(_ref, 2),
@@ -1360,14 +1228,14 @@ var CancelIcon = (function (_ref) {
1360
1228
  styles = _ref$styles === void 0 ? {} : _ref$styles,
1361
1229
  props = _objectWithoutProperties(_ref, ["styles"]);
1362
1230
 
1363
- return React.createElement("svg", _extends$4({
1231
+ return /*#__PURE__*/React.createElement("svg", _extends$4({
1364
1232
  "aria-hidden": "true",
1365
1233
  "data-prefix": "fas",
1366
1234
  "data-icon": "times",
1367
1235
  className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-times"] || "fa-times") + " " + (styles["fa-w-11"] || "fa-w-11"),
1368
1236
  xmlns: "http://www.w3.org/2000/svg",
1369
1237
  viewBox: "0 0 352 512"
1370
- }, props), React.createElement("path", {
1238
+ }, props), /*#__PURE__*/React.createElement("path", {
1371
1239
  fill: "currentColor",
1372
1240
  d: "M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"
1373
1241
  }));
@@ -1411,37 +1279,28 @@ function LinkInput(_ref) {
1411
1279
  }
1412
1280
  }
1413
1281
 
1414
- return (
1415
- /*#__PURE__*/
1416
- React.createElement("div", {
1417
- className: styles$7.linkTooltip
1282
+ return /*#__PURE__*/React.createElement("div", {
1283
+ className: styles$7.linkTooltip
1284
+ }, /*#__PURE__*/React.createElement("input", {
1285
+ ref: ref,
1286
+ type: "text",
1287
+ value: href,
1288
+ placeholder: t('pageflow_scrolled.inline_editing.url_placeholder'),
1289
+ onBlur: submit,
1290
+ onChange: function onChange(e) {
1291
+ return setHref(e.target.value);
1418
1292
  },
1419
- /*#__PURE__*/
1420
- React.createElement("input", {
1421
- ref: ref,
1422
- type: "text",
1423
- value: href,
1424
- placeholder: t('pageflow_scrolled.inline_editing.url_placeholder'),
1425
- onBlur: submit,
1426
- onChange: function onChange(e) {
1427
- return setHref(e.target.value);
1428
- },
1429
- onKeyDown: handleKey
1430
- }),
1431
- /*#__PURE__*/
1432
- React.createElement("button", {
1433
- onMouseDown: function onMouseDown(e) {
1434
- return e.preventDefault();
1435
- },
1436
- onClick: onCancel,
1437
- title: t('pageflow_scrolled.inline_editing.cancel')
1293
+ onKeyDown: handleKey
1294
+ }), /*#__PURE__*/React.createElement("button", {
1295
+ onMouseDown: function onMouseDown(e) {
1296
+ return e.preventDefault();
1438
1297
  },
1439
- /*#__PURE__*/
1440
- React.createElement(CancelIcon, {
1441
- width: 10,
1442
- height: 10
1443
- })))
1444
- );
1298
+ onClick: onCancel,
1299
+ title: t('pageflow_scrolled.inline_editing.cancel')
1300
+ }, /*#__PURE__*/React.createElement(CancelIcon, {
1301
+ width: 10,
1302
+ height: 10
1303
+ })));
1445
1304
  }
1446
1305
 
1447
1306
  function _extends$5() {
@@ -1466,14 +1325,14 @@ var BoldIcon = (function (_ref) {
1466
1325
  styles = _ref$styles === void 0 ? {} : _ref$styles,
1467
1326
  props = _objectWithoutProperties(_ref, ["styles"]);
1468
1327
 
1469
- return React.createElement("svg", _extends$5({
1328
+ return /*#__PURE__*/React.createElement("svg", _extends$5({
1470
1329
  "aria-hidden": "true",
1471
1330
  "data-prefix": "fas",
1472
1331
  "data-icon": "bold",
1473
1332
  className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-bold"] || "fa-bold") + " " + (styles["fa-w-12"] || "fa-w-12"),
1474
1333
  xmlns: "http://www.w3.org/2000/svg",
1475
1334
  viewBox: "0 0 384 512"
1476
- }, props), React.createElement("path", {
1335
+ }, props), /*#__PURE__*/React.createElement("path", {
1477
1336
  fill: "currentColor",
1478
1337
  d: "M333.49 238a122 122 0 0027-65.21C367.87 96.49 308 32 233.42 32H34a16 16 0 00-16 16v48a16 16 0 0016 16h31.87v288H34a16 16 0 00-16 16v48a16 16 0 0016 16h209.32c70.8 0 134.14-51.75 141-122.4 4.74-48.45-16.39-92.06-50.83-119.6zM145.66 112h87.76a48 48 0 010 96h-87.76zm87.76 288h-87.76V288h87.76a56 56 0 010 112z"
1479
1338
  }));
@@ -1501,14 +1360,14 @@ var UnderlineIcon = (function (_ref) {
1501
1360
  styles = _ref$styles === void 0 ? {} : _ref$styles,
1502
1361
  props = _objectWithoutProperties(_ref, ["styles"]);
1503
1362
 
1504
- return React.createElement("svg", _extends$6({
1363
+ return /*#__PURE__*/React.createElement("svg", _extends$6({
1505
1364
  "aria-hidden": "true",
1506
1365
  "data-prefix": "fas",
1507
1366
  "data-icon": "underline",
1508
1367
  className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-underline"] || "fa-underline") + " " + (styles["fa-w-14"] || "fa-w-14"),
1509
1368
  xmlns: "http://www.w3.org/2000/svg",
1510
1369
  viewBox: "0 0 448 512"
1511
- }, props), React.createElement("path", {
1370
+ }, props), /*#__PURE__*/React.createElement("path", {
1512
1371
  fill: "currentColor",
1513
1372
  d: "M32 64h32v160c0 88.22 71.78 160 160 160s160-71.78 160-160V64h32a16 16 0 0016-16V16a16 16 0 00-16-16H272a16 16 0 00-16 16v32a16 16 0 0016 16h32v160a80 80 0 01-160 0V64h32a16 16 0 0016-16V16a16 16 0 00-16-16H32a16 16 0 00-16 16v32a16 16 0 0016 16zm400 384H16a16 16 0 00-16 16v32a16 16 0 0016 16h416a16 16 0 0016-16v-32a16 16 0 00-16-16z"
1514
1373
  }));
@@ -1536,14 +1395,14 @@ var ItalicIcon = (function (_ref) {
1536
1395
  styles = _ref$styles === void 0 ? {} : _ref$styles,
1537
1396
  props = _objectWithoutProperties(_ref, ["styles"]);
1538
1397
 
1539
- return React.createElement("svg", _extends$7({
1398
+ return /*#__PURE__*/React.createElement("svg", _extends$7({
1540
1399
  "aria-hidden": "true",
1541
1400
  "data-prefix": "fas",
1542
1401
  "data-icon": "italic",
1543
1402
  className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-italic"] || "fa-italic") + " " + (styles["fa-w-10"] || "fa-w-10"),
1544
1403
  xmlns: "http://www.w3.org/2000/svg",
1545
1404
  viewBox: "0 0 320 512"
1546
- }, props), React.createElement("path", {
1405
+ }, props), /*#__PURE__*/React.createElement("path", {
1547
1406
  fill: "currentColor",
1548
1407
  d: "M320 48v32a16 16 0 01-16 16h-62.76l-80 320H208a16 16 0 0116 16v32a16 16 0 01-16 16H16a16 16 0 01-16-16v-32a16 16 0 0116-16h62.76l80-320H112a16 16 0 01-16-16V48a16 16 0 0116-16h192a16 16 0 0116 16z"
1549
1408
  }));
@@ -1571,14 +1430,14 @@ var StrikethroughIcon = (function (_ref) {
1571
1430
  styles = _ref$styles === void 0 ? {} : _ref$styles,
1572
1431
  props = _objectWithoutProperties(_ref, ["styles"]);
1573
1432
 
1574
- return React.createElement("svg", _extends$8({
1433
+ return /*#__PURE__*/React.createElement("svg", _extends$8({
1575
1434
  "aria-hidden": "true",
1576
1435
  "data-prefix": "fas",
1577
1436
  "data-icon": "strikethrough",
1578
1437
  className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-strikethrough"] || "fa-strikethrough") + " " + (styles["fa-w-16"] || "fa-w-16"),
1579
1438
  xmlns: "http://www.w3.org/2000/svg",
1580
1439
  viewBox: "0 0 512 512"
1581
- }, props), React.createElement("path", {
1440
+ }, props), /*#__PURE__*/React.createElement("path", {
1582
1441
  fill: "currentColor",
1583
1442
  d: "M496 224H293.9l-87.17-26.83A43.55 43.55 0 01219.55 112h66.79A49.89 49.89 0 01331 139.58a16 16 0 0021.46 7.15l42.94-21.47a16 16 0 007.16-21.46l-.53-1A128 128 0 00287.51 32h-68a123.68 123.68 0 00-123 135.64c2 20.89 10.1 39.83 21.78 56.36H16a16 16 0 00-16 16v32a16 16 0 0016 16h480a16 16 0 0016-16v-32a16 16 0 00-16-16zm-180.24 96A43 43 0 01336 356.45 43.59 43.59 0 01292.45 400h-66.79A49.89 49.89 0 01181 372.42a16 16 0 00-21.46-7.15l-42.94 21.47a16 16 0 00-7.16 21.46l.53 1A128 128 0 00224.49 480h68a123.68 123.68 0 00123-135.64 114.25 114.25 0 00-5.34-24.36z"
1584
1443
  }));
@@ -1606,14 +1465,14 @@ var LinkIcon = (function (_ref) {
1606
1465
  styles = _ref$styles === void 0 ? {} : _ref$styles,
1607
1466
  props = _objectWithoutProperties(_ref, ["styles"]);
1608
1467
 
1609
- return React.createElement("svg", _extends$9({
1468
+ return /*#__PURE__*/React.createElement("svg", _extends$9({
1610
1469
  "aria-hidden": "true",
1611
1470
  "data-prefix": "fas",
1612
1471
  "data-icon": "link",
1613
1472
  className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-link"] || "fa-link") + " " + (styles["fa-w-16"] || "fa-w-16"),
1614
1473
  xmlns: "http://www.w3.org/2000/svg",
1615
1474
  viewBox: "0 0 512 512"
1616
- }, props), React.createElement("path", {
1475
+ }, props), /*#__PURE__*/React.createElement("path", {
1617
1476
  fill: "currentColor",
1618
1477
  d: "M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 01-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0120.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0020.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 00-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z"
1619
1478
  }));
@@ -1651,17 +1510,12 @@ function HoveringToolbar(_ref) {
1651
1510
  el.style.top = "".concat(rect.bottom - outerRect.top + 10, "px");
1652
1511
  el.style.left = "".concat(rect.left - outerRect.left, "px");
1653
1512
  });
1654
- return (
1655
- /*#__PURE__*/
1656
- React.createElement("div", {
1657
- ref: outerRef
1658
- },
1659
- /*#__PURE__*/
1660
- React.createElement("div", {
1661
- ref: ref,
1662
- className: styles$7.hoveringToolbar
1663
- }, !linkSelection && renderToolbar$1(editor, setLinkSelection, t), linkSelection && renderLinkInput(editor, linkSelection, setLinkSelection)))
1664
- );
1513
+ return /*#__PURE__*/React.createElement("div", {
1514
+ ref: outerRef
1515
+ }, /*#__PURE__*/React.createElement("div", {
1516
+ ref: ref,
1517
+ className: styles$7.hoveringToolbar
1518
+ }, !linkSelection && renderToolbar$1(editor, setLinkSelection, t), linkSelection && renderLinkInput(editor, linkSelection, setLinkSelection)));
1665
1519
  }
1666
1520
 
1667
1521
  function renderToolbar$1(editor, setLinkSelection, t) {
@@ -1690,15 +1544,12 @@ function renderToolbar$1(editor, setLinkSelection, t) {
1690
1544
  active: isButtonActive(editor, button.name)
1691
1545
  });
1692
1546
  });
1693
- return (
1694
- /*#__PURE__*/
1695
- React.createElement(Toolbar, {
1696
- buttons: buttons,
1697
- onButtonClick: function onButtonClick(name) {
1698
- return handleButtonClick(editor, name, setLinkSelection);
1699
- }
1700
- })
1701
- );
1547
+ return /*#__PURE__*/React.createElement(Toolbar, {
1548
+ buttons: buttons,
1549
+ onButtonClick: function onButtonClick(name) {
1550
+ return handleButtonClick(editor, name, setLinkSelection);
1551
+ }
1552
+ });
1702
1553
  }
1703
1554
 
1704
1555
  function handleButtonClick(editor, format, setLinkSelection) {
@@ -1739,13 +1590,10 @@ function renderLinkInput(editor, linkSelection, setLinkSelection) {
1739
1590
  ReactEditor.focus(editor);
1740
1591
  }
1741
1592
 
1742
- return (
1743
- /*#__PURE__*/
1744
- React.createElement(LinkInput, {
1745
- onSubmit: handleSubmit,
1746
- onCancel: handleCancel
1747
- })
1748
- );
1593
+ return /*#__PURE__*/React.createElement(LinkInput, {
1594
+ onSubmit: handleSubmit,
1595
+ onCancel: handleCancel
1596
+ });
1749
1597
  }
1750
1598
 
1751
1599
  function unwrapLink(editor) {
@@ -1797,6 +1645,25 @@ function isMarkActive(editor, format) {
1797
1645
  return marks ? marks[format] === true : false;
1798
1646
  }
1799
1647
 
1648
+ function getUniformSelectedNodeProperty(editor, propertyName) {
1649
+ var currentNodeEntries = _toConsumableArray(Editor.nodes(editor, {
1650
+ match: function match(n) {
1651
+ return !!n.type;
1652
+ },
1653
+ mode: 'highest'
1654
+ }));
1655
+
1656
+ var values = _toConsumableArray(new Set(currentNodeEntries.map(function (_ref) {
1657
+ var _ref2 = _slicedToArray(_ref, 2),
1658
+ node = _ref2[0],
1659
+ path = _ref2[1];
1660
+
1661
+ return node[propertyName];
1662
+ })));
1663
+
1664
+ return values.length === 1 ? values[0] : null;
1665
+ }
1666
+
1800
1667
  function _extends$a() {
1801
1668
  _extends$a = Object.assign || function (target) {
1802
1669
  for (var i = 1; i < arguments.length; i++) {
@@ -1819,14 +1686,14 @@ var TextIcon = (function (_ref) {
1819
1686
  styles = _ref$styles === void 0 ? {} : _ref$styles,
1820
1687
  props = _objectWithoutProperties(_ref, ["styles"]);
1821
1688
 
1822
- return React.createElement("svg", _extends$a({
1689
+ return /*#__PURE__*/React.createElement("svg", _extends$a({
1823
1690
  "aria-hidden": "true",
1824
1691
  "data-prefix": "fas",
1825
1692
  "data-icon": "align-justify",
1826
1693
  className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-align-justify"] || "fa-align-justify") + " " + (styles["fa-w-14"] || "fa-w-14"),
1827
1694
  xmlns: "http://www.w3.org/2000/svg",
1828
1695
  viewBox: "0 0 448 512"
1829
- }, props), React.createElement("path", {
1696
+ }, props), /*#__PURE__*/React.createElement("path", {
1830
1697
  fill: "currentColor",
1831
1698
  d: "M432 416H16a16 16 0 00-16 16v32a16 16 0 0016 16h416a16 16 0 0016-16v-32a16 16 0 00-16-16zm0-128H16a16 16 0 00-16 16v32a16 16 0 0016 16h416a16 16 0 0016-16v-32a16 16 0 00-16-16zm0-128H16a16 16 0 00-16 16v32a16 16 0 0016 16h416a16 16 0 0016-16v-32a16 16 0 00-16-16zm0-128H16A16 16 0 000 48v32a16 16 0 0016 16h416a16 16 0 0016-16V48a16 16 0 00-16-16z"
1832
1699
  }));
@@ -1854,14 +1721,14 @@ var HeadingIcon = (function (_ref) {
1854
1721
  styles = _ref$styles === void 0 ? {} : _ref$styles,
1855
1722
  props = _objectWithoutProperties(_ref, ["styles"]);
1856
1723
 
1857
- return React.createElement("svg", _extends$b({
1724
+ return /*#__PURE__*/React.createElement("svg", _extends$b({
1858
1725
  "aria-hidden": "true",
1859
1726
  "data-prefix": "fas",
1860
1727
  "data-icon": "heading",
1861
1728
  className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-heading"] || "fa-heading") + " " + (styles["fa-w-16"] || "fa-w-16"),
1862
1729
  xmlns: "http://www.w3.org/2000/svg",
1863
1730
  viewBox: "0 0 512 512"
1864
- }, props), React.createElement("path", {
1731
+ }, props), /*#__PURE__*/React.createElement("path", {
1865
1732
  fill: "currentColor",
1866
1733
  d: "M448 96v320h32a16 16 0 0116 16v32a16 16 0 01-16 16H320a16 16 0 01-16-16v-32a16 16 0 0116-16h32V288H160v128h32a16 16 0 0116 16v32a16 16 0 01-16 16H32a16 16 0 01-16-16v-32a16 16 0 0116-16h32V96H32a16 16 0 01-16-16V48a16 16 0 0116-16h160a16 16 0 0116 16v32a16 16 0 01-16 16h-32v128h192V96h-32a16 16 0 01-16-16V48a16 16 0 0116-16h160a16 16 0 0116 16v32a16 16 0 01-16 16z"
1867
1734
  }));
@@ -1889,14 +1756,14 @@ var OlIcon = (function (_ref) {
1889
1756
  styles = _ref$styles === void 0 ? {} : _ref$styles,
1890
1757
  props = _objectWithoutProperties(_ref, ["styles"]);
1891
1758
 
1892
- return React.createElement("svg", _extends$c({
1759
+ return /*#__PURE__*/React.createElement("svg", _extends$c({
1893
1760
  "aria-hidden": "true",
1894
1761
  "data-prefix": "fas",
1895
1762
  "data-icon": "list-ol",
1896
1763
  className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-list-ol"] || "fa-list-ol") + " " + (styles["fa-w-16"] || "fa-w-16"),
1897
1764
  xmlns: "http://www.w3.org/2000/svg",
1898
1765
  viewBox: "0 0 512 512"
1899
- }, props), React.createElement("path", {
1766
+ }, props), /*#__PURE__*/React.createElement("path", {
1900
1767
  fill: "currentColor",
1901
1768
  d: "M61.77 401l17.5-20.15a19.92 19.92 0 005.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 00-8 8v16a8 8 0 008 8h22.83a157.41 157.41 0 00-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 01-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 00-16 16v32a16 16 0 0016 16h320a16 16 0 0016-16v-32a16 16 0 00-16-16zm0-160H176a16 16 0 00-16 16v32a16 16 0 0016 16h320a16 16 0 0016-16V80a16 16 0 00-16-16zm0 320H176a16 16 0 00-16 16v32a16 16 0 0016 16h320a16 16 0 0016-16v-32a16 16 0 00-16-16zM16 160h64a8 8 0 008-8v-16a8 8 0 00-8-8H64V40a8 8 0 00-8-8H32a8 8 0 00-7.14 4.42l-8 16A8 8 0 0024 64h8v64H16a8 8 0 00-8 8v16a8 8 0 008 8zm-3.91 160H80a8 8 0 008-8v-16a8 8 0 00-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 019.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"
1902
1769
  }));
@@ -1924,14 +1791,14 @@ var UlIcon = (function (_ref) {
1924
1791
  styles = _ref$styles === void 0 ? {} : _ref$styles,
1925
1792
  props = _objectWithoutProperties(_ref, ["styles"]);
1926
1793
 
1927
- return React.createElement("svg", _extends$d({
1794
+ return /*#__PURE__*/React.createElement("svg", _extends$d({
1928
1795
  "aria-hidden": "true",
1929
1796
  "data-prefix": "fas",
1930
1797
  "data-icon": "list-ul",
1931
1798
  className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-list-ul"] || "fa-list-ul") + " " + (styles["fa-w-16"] || "fa-w-16"),
1932
1799
  xmlns: "http://www.w3.org/2000/svg",
1933
1800
  viewBox: "0 0 512 512"
1934
- }, props), React.createElement("path", {
1801
+ }, props), /*#__PURE__*/React.createElement("path", {
1935
1802
  fill: "currentColor",
1936
1803
  d: "M48 48a48 48 0 1048 48 48 48 0 00-48-48zm0 160a48 48 0 1048 48 48 48 0 00-48-48zm0 160a48 48 0 1048 48 48 48 0 00-48-48zm448 16H176a16 16 0 00-16 16v32a16 16 0 0016 16h320a16 16 0 0016-16v-32a16 16 0 00-16-16zm0-320H176a16 16 0 00-16 16v32a16 16 0 0016 16h320a16 16 0 0016-16V80a16 16 0 00-16-16zm0 160H176a16 16 0 00-16 16v32a16 16 0 0016 16h320a16 16 0 0016-16v-32a16 16 0 00-16-16z"
1937
1804
  }));
@@ -1959,14 +1826,14 @@ var QuoteIcon = (function (_ref) {
1959
1826
  styles = _ref$styles === void 0 ? {} : _ref$styles,
1960
1827
  props = _objectWithoutProperties(_ref, ["styles"]);
1961
1828
 
1962
- return React.createElement("svg", _extends$e({
1829
+ return /*#__PURE__*/React.createElement("svg", _extends$e({
1963
1830
  "aria-hidden": "true",
1964
1831
  "data-prefix": "fas",
1965
1832
  "data-icon": "quote-right",
1966
1833
  className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-quote-right"] || "fa-quote-right") + " " + (styles["fa-w-16"] || "fa-w-16"),
1967
1834
  xmlns: "http://www.w3.org/2000/svg",
1968
1835
  viewBox: "0 0 512 512"
1969
- }, props), React.createElement("path", {
1836
+ }, props), /*#__PURE__*/React.createElement("path", {
1970
1837
  fill: "currentColor",
1971
1838
  d: "M464 32H336c-26.5 0-48 21.5-48 48v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48zm-288 0H48C21.5 32 0 53.5 0 80v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48z"
1972
1839
  }));
@@ -1984,11 +1851,13 @@ function Selection(props) {
1984
1851
  var outerRef = useRef();
1985
1852
  var innerRef = useRef();
1986
1853
  var boundsRef = useRef();
1854
+ var lastRangeRef = useRef();
1987
1855
 
1988
1856
  var _useContentElementEdi = useContentElementEditorState(),
1989
1857
  setTransientState = _useContentElementEdi.setTransientState,
1990
1858
  select = _useContentElementEdi.select,
1991
- isContentElementSelected = _useContentElementEdi.isSelected;
1859
+ isContentElementSelected = _useContentElementEdi.isSelected,
1860
+ range = _useContentElementEdi.range;
1992
1861
 
1993
1862
  useEffect(function () {
1994
1863
  var selection = editor.selection;
@@ -1997,6 +1866,27 @@ function Selection(props) {
1997
1866
  return;
1998
1867
  }
1999
1868
 
1869
+ if (isContentElementSelected && range && lastRangeRef.current !== range) {
1870
+ lastRangeRef.current = range;
1871
+
1872
+ if (range[1] === range[0] + 1) {
1873
+ Transforms.select(editor, Editor.point(editor, [range[0]], {
1874
+ edge: 'start'
1875
+ }));
1876
+ } else {
1877
+ Transforms.select(editor, {
1878
+ anchor: Editor.point(editor, [range[0]], {
1879
+ edge: 'start'
1880
+ }),
1881
+ focus: Editor.point(editor, [range[1] - 1], {
1882
+ edge: 'end'
1883
+ })
1884
+ });
1885
+ }
1886
+
1887
+ ReactEditor.focus(editor);
1888
+ }
1889
+
2000
1890
  if (!selection) {
2001
1891
  if (boundsRef.current) {
2002
1892
  hideRect(ref.current);
@@ -2008,6 +1898,8 @@ function Selection(props) {
2008
1898
 
2009
1899
  if (!isContentElementSelected && boundsRef.current) {
2010
1900
  hideRect(ref.current);
1901
+ boundsRef.current = null;
1902
+ window.getSelection().removeAllRanges();
2011
1903
  return;
2012
1904
  }
2013
1905
 
@@ -2021,7 +1913,9 @@ function Selection(props) {
2021
1913
  end = _computeBounds2[1];
2022
1914
 
2023
1915
  setTransientState({
2024
- editableTextIsSingleBlock: editor.children.length <= 1
1916
+ editableTextIsSingleBlock: editor.children.length <= 1,
1917
+ currentNodeType: getUniformSelectedNodeProperty(editor, 'type'),
1918
+ typographyVariant: getUniformSelectedNodeProperty(editor, 'variant')
2025
1919
  });
2026
1920
  boundsRef.current = {
2027
1921
  start: start,
@@ -2029,49 +1923,58 @@ function Selection(props) {
2029
1923
  };
2030
1924
  updateRect(editor, start, end, outerRef.current, ref.current, innerRef.current);
2031
1925
  });
2032
- return (
2033
- /*#__PURE__*/
2034
- React.createElement("div", {
2035
- ref: outerRef
2036
- },
2037
- /*#__PURE__*/
2038
- React.createElement("div", {
2039
- ref: ref,
2040
- className: styles$7.selection
1926
+
1927
+ var _useDrag = useDrag({
1928
+ item: {
1929
+ type: 'contentElement',
1930
+ id: props.contentElementId
2041
1931
  },
2042
- /*#__PURE__*/
2043
- React.createElement(SelectionRect, {
2044
- selected: true,
2045
- scrollPoint: isContentElementSelected,
2046
- insertButtonTitles: t('pageflow_scrolled.inline_editing.insert_content_element'),
2047
- onInsertButtonClick: function onInsertButtonClick(at) {
2048
- if (at === 'before' && boundsRef.current.start === 0 || at === 'after' && !Node.has(editor, [boundsRef.current.end + 1])) {
2049
- postInsertContentElementMessage({
2050
- id: props.contentElementId,
2051
- at: at
2052
- });
2053
- } else {
2054
- postInsertContentElementMessage({
2055
- id: props.contentElementId,
2056
- at: 'split',
2057
- splitPoint: at === 'before' ? boundsRef.current.start : boundsRef.current.end + 1
2058
- });
2059
- }
2060
- },
2061
- toolbarButtons: toolbarButtons(t).map(function (button) {
2062
- return _objectSpread2(_objectSpread2({}, button), {}, {
2063
- active: isBlockActive(editor, button.name)
1932
+ begin: function begin() {
1933
+ return {
1934
+ type: 'contentElement',
1935
+ id: props.contentElementId,
1936
+ range: [boundsRef.current.start, boundsRef.current.end + 1]
1937
+ };
1938
+ }
1939
+ }),
1940
+ _useDrag2 = _slicedToArray(_useDrag, 2),
1941
+ drag = _useDrag2[1];
1942
+
1943
+ return /*#__PURE__*/React.createElement("div", {
1944
+ ref: outerRef
1945
+ }, /*#__PURE__*/React.createElement("div", {
1946
+ ref: ref,
1947
+ className: styles$7.selection
1948
+ }, /*#__PURE__*/React.createElement(SelectionRect, {
1949
+ selected: true,
1950
+ drag: drag,
1951
+ scrollPoint: isContentElementSelected,
1952
+ insertButtonTitles: t('pageflow_scrolled.inline_editing.insert_content_element'),
1953
+ onInsertButtonClick: function onInsertButtonClick(at) {
1954
+ if (at === 'before' && boundsRef.current.start === 0 || at === 'after' && !Node.has(editor, [boundsRef.current.end + 1])) {
1955
+ postInsertContentElementMessage({
1956
+ id: props.contentElementId,
1957
+ at: at
1958
+ });
1959
+ } else {
1960
+ postInsertContentElementMessage({
1961
+ id: props.contentElementId,
1962
+ at: 'split',
1963
+ splitPoint: at === 'before' ? boundsRef.current.start : boundsRef.current.end + 1
2064
1964
  });
2065
- }),
2066
- onToolbarButtonClick: function onToolbarButtonClick(name) {
2067
- return toggleBlock(editor, name);
2068
1965
  }
2069
1966
  },
2070
- /*#__PURE__*/
2071
- React.createElement("div", {
2072
- ref: innerRef
2073
- }))))
2074
- );
1967
+ toolbarButtons: toolbarButtons(t).map(function (button) {
1968
+ return _objectSpread2(_objectSpread2({}, button), {}, {
1969
+ active: isBlockActive(editor, button.name)
1970
+ });
1971
+ }),
1972
+ onToolbarButtonClick: function onToolbarButtonClick(name) {
1973
+ return toggleBlock(editor, name);
1974
+ }
1975
+ }, /*#__PURE__*/React.createElement("div", {
1976
+ ref: innerRef
1977
+ }))));
2075
1978
  }
2076
1979
 
2077
1980
  function computeBounds(editor) {
@@ -2197,20 +2100,18 @@ function DropTargets$1(_ref) {
2197
2100
  setTargets(measureHeights(editor, containerRef.current));
2198
2101
  }
2199
2102
  }, [targets, editor]);
2200
- return (
2201
- /*#__PURE__*/
2202
- React.createElement("div", {
2203
- ref: containerRef,
2204
- className: styles$8.container
2205
- }, renderDropTargets(targets || [], contentElementId))
2206
- );
2103
+ return /*#__PURE__*/React.createElement("div", {
2104
+ ref: containerRef,
2105
+ className: styles$8.container
2106
+ }, renderDropTargets(targets || [], contentElementId));
2207
2107
  }
2208
2108
 
2209
2109
  function renderDropTargets(targets, contentElementId) {
2210
- function handleDrop(itemId, index) {
2110
+ function handleDrop(item, index) {
2211
2111
  if (index === 0) {
2212
2112
  postMoveContentElementMessage({
2213
- id: itemId,
2113
+ id: item.id,
2114
+ range: item.range,
2214
2115
  to: {
2215
2116
  at: 'before',
2216
2117
  id: contentElementId
@@ -2218,7 +2119,8 @@ function renderDropTargets(targets, contentElementId) {
2218
2119
  });
2219
2120
  } else if (index === targets.length - 1) {
2220
2121
  postMoveContentElementMessage({
2221
- id: itemId,
2122
+ id: item.id,
2123
+ range: item.range,
2222
2124
  to: {
2223
2125
  at: 'after',
2224
2126
  id: contentElementId
@@ -2226,7 +2128,8 @@ function renderDropTargets(targets, contentElementId) {
2226
2128
  });
2227
2129
  } else {
2228
2130
  postMoveContentElementMessage({
2229
- id: itemId,
2131
+ id: item.id,
2132
+ range: item.range,
2230
2133
  to: {
2231
2134
  at: 'split',
2232
2135
  id: contentElementId,
@@ -2237,20 +2140,18 @@ function renderDropTargets(targets, contentElementId) {
2237
2140
  }
2238
2141
 
2239
2142
  return targets.map(function (target, index) {
2240
- return (
2241
- /*#__PURE__*/
2242
- React.createElement(DropTarget, Object.assign({}, target, {
2243
- key: index,
2244
- onDrop: function onDrop(itemId) {
2245
- return handleDrop(itemId, index);
2246
- }
2247
- }))
2248
- );
2143
+ return /*#__PURE__*/React.createElement(DropTarget, Object.assign({}, target, {
2144
+ key: index,
2145
+ onDrop: function onDrop(item) {
2146
+ return handleDrop(item, index);
2147
+ }
2148
+ }));
2249
2149
  });
2250
2150
  }
2251
2151
 
2252
2152
  function DropTarget(_ref2) {
2253
- var top = _ref2.top,
2153
+ var display = _ref2.display,
2154
+ top = _ref2.top,
2254
2155
  height = _ref2.height,
2255
2156
  indicatorTop = _ref2.indicatorTop,
2256
2157
  onDrop = _ref2.onDrop;
@@ -2263,31 +2164,27 @@ function DropTarget(_ref2) {
2263
2164
  };
2264
2165
  },
2265
2166
  drop: function drop(item) {
2266
- return onDrop(item.id);
2167
+ return onDrop(item);
2267
2168
  }
2268
2169
  }),
2269
2170
  _useDrop2 = _slicedToArray(_useDrop, 2),
2270
2171
  isOver = _useDrop2[0].isOver,
2271
2172
  drop = _useDrop2[1];
2272
2173
 
2273
- return (
2274
- /*#__PURE__*/
2275
- React.createElement("div", {
2276
- ref: drop,
2277
- className: classNames(styles$8.dropTarget, _defineProperty({}, styles$8.isOver, isOver)),
2278
- style: {
2279
- top: top,
2280
- height: height
2281
- }
2282
- },
2283
- /*#__PURE__*/
2284
- React.createElement("div", {
2285
- className: styles$8.dropIndicator,
2286
- style: {
2287
- top: indicatorTop
2288
- }
2289
- }))
2290
- );
2174
+ return /*#__PURE__*/React.createElement("div", {
2175
+ ref: drop,
2176
+ className: classNames(styles$8.dropTarget, _defineProperty({}, styles$8.isOver, isOver)),
2177
+ style: {
2178
+ display: display,
2179
+ top: top,
2180
+ height: height
2181
+ }
2182
+ }, /*#__PURE__*/React.createElement("div", {
2183
+ className: styles$8.dropIndicator,
2184
+ style: {
2185
+ top: indicatorTop
2186
+ }
2187
+ }));
2291
2188
  }
2292
2189
 
2293
2190
  function measureHeights(editor, container) {
@@ -2306,6 +2203,7 @@ function measureHeights(editor, container) {
2306
2203
  var targetDimensions = {
2307
2204
  top: top,
2308
2205
  height: bottom - top,
2206
+ display: editor.selection && Range.includes(editor.selection, [index]) ? 'none' : undefined,
2309
2207
  indicatorTop: index > 0 ? lastRectBottom + (rect.top - lastRectBottom) / 2 - containerRect.top - top : 0
2310
2208
  };
2311
2209
  lastRectBottom = rect.bottom;
@@ -2354,6 +2252,10 @@ var EditableText = React.memo(function EditableText(_ref) {
2354
2252
  Transforms.removeNodes(editor, {
2355
2253
  mode: 'highest'
2356
2254
  });
2255
+ } else if (command.type === 'TRANSIENT_STATE_UPDATE' && 'typographyVariant' in command.payload) {
2256
+ Transforms.setNodes(editor, {
2257
+ variant: command.payload.typographyVariant
2258
+ });
2357
2259
  }
2358
2260
  });
2359
2261
 
@@ -2371,51 +2273,32 @@ var EditableText = React.memo(function EditableText(_ref) {
2371
2273
  return renderLeafWithLinkSelection(options);
2372
2274
  }, [linkSelection]); // eslint-disable-line react-hooks/exhaustive-deps
2373
2275
 
2374
- return (
2375
- /*#__PURE__*/
2376
- React.createElement(Text$1, {
2377
- scaleCategory: "body"
2378
- },
2379
- /*#__PURE__*/
2380
- React.createElement("div", {
2381
- className: styles$7.container,
2382
- ref: ref
2383
- },
2384
- /*#__PURE__*/
2385
- React.createElement(Slate, {
2386
- editor: editor,
2387
- value: cachedValue,
2388
- onChange: setCachedValue
2389
- },
2390
- /*#__PURE__*/
2391
- React.createElement(LinkTooltipProvider, {
2392
- disabled: !!linkSelection
2393
- },
2394
- /*#__PURE__*/
2395
- React.createElement(Selection, {
2396
- contentElementId: contentElementId
2397
- }), dropTargetsActive &&
2398
- /*#__PURE__*/
2399
- React.createElement(DropTargets$1, {
2400
- contentElementId: contentElementId
2401
- }),
2402
- /*#__PURE__*/
2403
- React.createElement(HoveringToolbar, {
2404
- linkSelection: linkSelection,
2405
- setLinkSelection: setLinkSelection
2406
- }),
2407
- /*#__PURE__*/
2408
- React.createElement(Editable, {
2409
- decorate: decorate,
2410
- renderElement: renderElementWithLinkPreview,
2411
- renderLeaf: renderLeaf
2412
- }))),
2413
- /*#__PURE__*/
2414
- React.createElement(TextPlaceholder, {
2415
- text: placeholder,
2416
- visible: isBlank(cachedValue)
2417
- })))
2418
- );
2276
+ return /*#__PURE__*/React.createElement(Text$1, {
2277
+ scaleCategory: "body"
2278
+ }, /*#__PURE__*/React.createElement("div", {
2279
+ className: styles$7.container,
2280
+ ref: ref
2281
+ }, /*#__PURE__*/React.createElement(Slate, {
2282
+ editor: editor,
2283
+ value: cachedValue,
2284
+ onChange: setCachedValue
2285
+ }, /*#__PURE__*/React.createElement(LinkTooltipProvider, {
2286
+ disabled: !!linkSelection
2287
+ }, /*#__PURE__*/React.createElement(Selection, {
2288
+ contentElementId: contentElementId
2289
+ }), dropTargetsActive && /*#__PURE__*/React.createElement(DropTargets$1, {
2290
+ contentElementId: contentElementId
2291
+ }), /*#__PURE__*/React.createElement(HoveringToolbar, {
2292
+ linkSelection: linkSelection,
2293
+ setLinkSelection: setLinkSelection
2294
+ }), /*#__PURE__*/React.createElement(Editable, {
2295
+ decorate: decorate,
2296
+ renderElement: renderElementWithLinkPreview,
2297
+ renderLeaf: renderLeaf
2298
+ }))), /*#__PURE__*/React.createElement(TextPlaceholder, {
2299
+ text: placeholder,
2300
+ visible: isBlank(cachedValue)
2301
+ })));
2419
2302
  });
2420
2303
 
2421
2304
  function isBlank(value) {
@@ -2429,22 +2312,134 @@ function resetSelectionIfOutsideNextValue(editor, nextValue) {
2429
2312
  children: nextValue
2430
2313
  };
2431
2314
 
2432
- if (editor.selection && (!Node.has(nextEditor, editor.selection.anchor.path) || !Node.has(nextEditor, editor.selection.focus.path))) {
2315
+ if (editor.selection && (!hasTextAtPoint(nextEditor, editor.selection.anchor) || !hasTextAtPoint(nextEditor, editor.selection.focus))) {
2433
2316
  Transforms.deselect(editor);
2434
2317
  }
2435
2318
  }
2436
2319
 
2320
+ function hasTextAtPoint(editor, point) {
2321
+ if (!Node.has(editor, point.path)) {
2322
+ return false;
2323
+ }
2324
+
2325
+ var node = Node.get(editor, point.path);
2326
+ return Text.isText(node) && point.offset <= node.text.length;
2327
+ }
2328
+
2329
+ var shy = "\xAD";
2330
+ function useLineBreakHandler(editor) {
2331
+ return useCallback(function (event) {
2332
+ if (event.key !== 'Enter') {
2333
+ return true;
2334
+ }
2335
+
2336
+ if (event.shiftKey === true) {
2337
+ editor.insertText(shy);
2338
+ } else {
2339
+ editor.insertText('\n');
2340
+ }
2341
+
2342
+ return false;
2343
+ }, [editor]);
2344
+ }
2345
+ function decorateLineBreaks(nodeEntry) {
2346
+ return [].concat(_toConsumableArray(decorateCharacter(nodeEntry, shy, {
2347
+ shy: true
2348
+ }, {
2349
+ length: 1
2350
+ })), _toConsumableArray(decorateCharacter(nodeEntry, "\n", {
2351
+ newLine: true
2352
+ }, {
2353
+ length: 0
2354
+ })));
2355
+ }
2356
+
2357
+ function decorateCharacter(_ref, character, attributes, _ref2) {
2358
+ var _ref3 = _slicedToArray(_ref, 2),
2359
+ node = _ref3[0],
2360
+ path = _ref3[1];
2361
+
2362
+ var length = _ref2.length;
2363
+
2364
+ if (Text.isText(node)) {
2365
+ var parts = node.text.split(character);
2366
+ parts.pop();
2367
+ var i = 0;
2368
+ return parts.map(function (part) {
2369
+ i += part.length + 1;
2370
+ return _objectSpread2({
2371
+ anchor: {
2372
+ path: path,
2373
+ offset: i - 1
2374
+ },
2375
+ focus: {
2376
+ path: path,
2377
+ offset: i - 1 + length
2378
+ }
2379
+ }, attributes);
2380
+ });
2381
+ }
2382
+
2383
+ return [];
2384
+ }
2385
+
2386
+ function withLineBreakNormalization(editor) {
2387
+ var normalizeNode = editor.normalizeNode;
2388
+
2389
+ editor.normalizeNode = function (_ref4) {
2390
+ var _ref5 = _slicedToArray(_ref4, 2),
2391
+ node = _ref5[0],
2392
+ path = _ref5[1];
2393
+
2394
+ if (path.length === 0 && editor.children.length > 1) {
2395
+ Transforms.mergeNodes(editor);
2396
+ return;
2397
+ } else if (node.text) {
2398
+ if (deleteCharacter(editor, node, path, /\n\n/) || deleteCharacter(editor, node, path, new RegExp("^\n")) || deleteCharacter(editor, node, path, new RegExp("".concat(shy, "\\s"))) || deleteCharacter(editor, node, path, new RegExp("^".concat(shy))) || deleteCharacter(editor, node, path, new RegExp("\\s".concat(shy)), 1) || deleteCharacter(editor, node, path, new RegExp("".concat(shy).concat(shy)))) {
2399
+ return;
2400
+ }
2401
+ }
2402
+
2403
+ return normalizeNode([node, path]);
2404
+ };
2405
+
2406
+ return editor;
2407
+ }
2408
+
2409
+ function deleteCharacter(editor, node, path, regExp) {
2410
+ var offset = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
2411
+ var match = regExp.exec(node.text);
2412
+
2413
+ if (match) {
2414
+ Transforms["delete"](editor, {
2415
+ at: {
2416
+ path: path,
2417
+ offset: match.index + offset
2418
+ },
2419
+ distance: 1,
2420
+ unit: 'character'
2421
+ });
2422
+ return true;
2423
+ }
2424
+
2425
+ return false;
2426
+ }
2427
+
2428
+ var styles$9 = {"shy":"index-module_shy__1E2-J","newLine":"index-module_newLine__1QnIs","selected":"index-module_selected__1U9ro","manualHyphens":"index-module_manualHyphens__16b2t"};
2429
+
2437
2430
  var EditableInlineText = memo(function EditableInlineText(_ref) {
2438
2431
  var _cachedValue$, _cachedValue$$childre;
2439
2432
 
2440
2433
  var value = _ref.value,
2441
2434
  _ref$defaultValue = _ref.defaultValue,
2442
2435
  defaultValue = _ref$defaultValue === void 0 ? '' : _ref$defaultValue,
2436
+ hyphens = _ref.hyphens,
2443
2437
  placeholder = _ref.placeholder,
2444
2438
  onChange = _ref.onChange;
2445
2439
  var editor = useMemo(function () {
2446
- return withSingleLine(withReact(createEditor()));
2440
+ return withLineBreakNormalization(withReact(createEditor()));
2447
2441
  }, []);
2442
+ var handleLineBreaks = useLineBreakHandler(editor);
2448
2443
 
2449
2444
  var _useCachedValue = useCachedValue(value, {
2450
2445
  defaultValue: [{
@@ -2459,43 +2454,44 @@ var EditableInlineText = memo(function EditableInlineText(_ref) {
2459
2454
  cachedValue = _useCachedValue2[0],
2460
2455
  setCachedValue = _useCachedValue2[1];
2461
2456
 
2462
- return (
2463
- /*#__PURE__*/
2464
- React.createElement(React.Fragment, null,
2465
- /*#__PURE__*/
2466
- React.createElement(Slate, {
2467
- editor: editor,
2468
- value: cachedValue,
2469
- onChange: setCachedValue
2470
- },
2471
- /*#__PURE__*/
2472
- React.createElement(Editable, null)),
2473
- /*#__PURE__*/
2474
- React.createElement(TextPlaceholder, {
2475
- text: placeholder,
2476
- visible: !((_cachedValue$ = cachedValue[0]) === null || _cachedValue$ === void 0 ? void 0 : (_cachedValue$$childre = _cachedValue$.children[0]) === null || _cachedValue$$childre === void 0 ? void 0 : _cachedValue$$childre.text)
2477
- }))
2478
- );
2457
+ var _useContentElementEdi = useContentElementEditorState(),
2458
+ isSelected = _useContentElementEdi.isSelected;
2459
+
2460
+ return /*#__PURE__*/React.createElement("div", {
2461
+ className: classNames(frontendStyles.root, _defineProperty({}, styles$9.manualHyphens, hyphens === 'manual'), _defineProperty({}, frontendStyles.manualHyphens, hyphens === 'manual'), _defineProperty({}, styles$9.selected, isSelected)),
2462
+ spellCheck: "false"
2463
+ }, /*#__PURE__*/React.createElement(Slate, {
2464
+ editor: editor,
2465
+ value: cachedValue,
2466
+ onChange: setCachedValue
2467
+ }, /*#__PURE__*/React.createElement(Editable, {
2468
+ decorate: decorateLineBreaks,
2469
+ onKeyDown: handleLineBreaks,
2470
+ renderLeaf: renderLeaf
2471
+ })), /*#__PURE__*/React.createElement(TextPlaceholder, {
2472
+ text: placeholder,
2473
+ visible: !((_cachedValue$ = cachedValue[0]) === null || _cachedValue$ === void 0 ? void 0 : (_cachedValue$$childre = _cachedValue$.children[0]) === null || _cachedValue$$childre === void 0 ? void 0 : _cachedValue$$childre.text)
2474
+ }));
2479
2475
  });
2480
2476
 
2481
- function withSingleLine(editor) {
2482
- var normalizeNode = editor.normalizeNode;
2483
-
2484
- editor.normalizeNode = function (_ref2) {
2485
- var _ref3 = _slicedToArray(_ref2, 2),
2486
- node = _ref3[0],
2487
- path = _ref3[1];
2477
+ function renderLeaf(_ref2) {
2478
+ var attributes = _ref2.attributes,
2479
+ children = _ref2.children,
2480
+ leaf = _ref2.leaf;
2488
2481
 
2489
- if (path.length === 0) {
2490
- if (editor.children.length > 1) {
2491
- Transforms.mergeNodes(editor);
2492
- }
2493
- }
2482
+ if (leaf.shy) {
2483
+ children = /*#__PURE__*/React.createElement("span", {
2484
+ className: styles$9.shy
2485
+ }, children);
2486
+ }
2494
2487
 
2495
- return normalizeNode([node, path]);
2496
- };
2488
+ if (leaf.newLine) {
2489
+ children = /*#__PURE__*/React.createElement("span", {
2490
+ className: styles$9.newLine
2491
+ }, children);
2492
+ }
2497
2493
 
2498
- return editor;
2494
+ return /*#__PURE__*/React.createElement("span", attributes, children);
2499
2495
  }
2500
2496
 
2501
2497
  function PhonePlatformProvider(_ref) {
@@ -2523,12 +2519,9 @@ function PhonePlatformProvider(_ref) {
2523
2519
  return window.removeEventListener('message', receive);
2524
2520
  };
2525
2521
  });
2526
- return (
2527
- /*#__PURE__*/
2528
- React.createElement(PhonePlatformContext.Provider, {
2529
- value: phoneEmulationMode
2530
- }, children)
2531
- );
2522
+ return /*#__PURE__*/React.createElement(PhonePlatformContext.Provider, {
2523
+ value: phoneEmulationMode
2524
+ }, children);
2532
2525
  }
2533
2526
 
2534
- export { ContentElementDecorator, EditableInlineText, EditableText, EntryDecorator, LayoutWithPlaceholder, PhonePlatformProvider, SectionDecorator };
2527
+ export { ContentDecorator, ContentElementDecorator, EditableInlineText, EditableText, LayoutWithPlaceholder, PhonePlatformProvider, SectionDecorator };