pageflow 17.1.0 → 17.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +319 -345
  3. data/README.md +3 -4
  4. data/admins/pageflow/accounts.rb +6 -6
  5. data/admins/pageflow/entry.rb +10 -8
  6. data/admins/pageflow/membership.rb +11 -11
  7. data/admins/pageflow/translations.rb +5 -5
  8. data/app/assets/images/pageflow/admin/icons/comment.svg +1 -0
  9. data/app/assets/javascripts/pageflow/dist/ui.js +1350 -630
  10. data/app/assets/javascripts/pageflow/editor/vendor.js +0 -1
  11. data/app/assets/javascripts/pageflow/ui.js +0 -1
  12. data/app/assets/stylesheets/pageflow/admin/entry_comments_indicator.scss +45 -0
  13. data/app/assets/stylesheets/pageflow/admin/permalink_input.scss +8 -1
  14. data/app/assets/stylesheets/pageflow/admin.scss +1 -0
  15. data/app/assets/stylesheets/pageflow/animations/spin.scss +9 -0
  16. data/app/assets/stylesheets/pageflow/animations.scss +1 -0
  17. data/app/assets/stylesheets/pageflow/editor/background_positioning.scss +21 -5
  18. data/app/assets/stylesheets/pageflow/editor/base.scss +9 -1
  19. data/app/assets/stylesheets/pageflow/editor/drop_down_button.scss +13 -1
  20. data/app/assets/stylesheets/pageflow/editor/edit_configuration_view.scss +5 -0
  21. data/app/assets/stylesheets/pageflow/editor/file_folders.scss +127 -0
  22. data/app/assets/stylesheets/pageflow/editor/file_meta_data.scss +0 -1
  23. data/app/assets/stylesheets/pageflow/editor/file_meta_data_overlay.scss +45 -0
  24. data/app/assets/stylesheets/pageflow/editor/file_preview.scss +138 -0
  25. data/app/assets/stylesheets/pageflow/editor/file_references.scss +68 -0
  26. data/app/assets/stylesheets/pageflow/editor/file_settings_dialog.scss +1 -1
  27. data/app/assets/stylesheets/pageflow/editor/file_stage_icons.scss +17 -0
  28. data/app/assets/stylesheets/pageflow/editor/file_stages.scss +25 -32
  29. data/app/assets/stylesheets/pageflow/editor/file_thumbnails.scss +31 -48
  30. data/app/assets/stylesheets/pageflow/editor/file_type_pills.scss +73 -0
  31. data/app/assets/stylesheets/pageflow/editor/files.scss +230 -50
  32. data/app/assets/stylesheets/pageflow/editor/filtered_files.scss +142 -14
  33. data/app/assets/stylesheets/pageflow/editor/folder_breadcrumb.scss +40 -0
  34. data/app/assets/stylesheets/pageflow/editor/info_box.scss +12 -0
  35. data/app/assets/stylesheets/pageflow/editor/inputs/edit_defaults_button.scss +15 -0
  36. data/app/assets/stylesheets/pageflow/editor/inputs.scss +1 -0
  37. data/app/assets/stylesheets/pageflow/editor/list.scss +88 -38
  38. data/app/assets/stylesheets/pageflow/editor/manage_files.scss +9 -0
  39. data/app/assets/stylesheets/pageflow/editor/menu.scss +14 -0
  40. data/app/assets/stylesheets/pageflow/editor/move_to_folder_dialog.scss +83 -0
  41. data/app/assets/stylesheets/pageflow/mixins/pageflow.scss +9 -5
  42. data/app/assets/stylesheets/pageflow/ui/color_picker.scss +230 -0
  43. data/app/assets/stylesheets/pageflow/ui/forms.scss +34 -4
  44. data/app/assets/stylesheets/pageflow/ui/functions.scss +12 -2
  45. data/app/assets/stylesheets/pageflow/ui/input/color_input.scss +9 -16
  46. data/app/assets/stylesheets/pageflow/ui/input/text_area_input.scss +15 -0
  47. data/app/assets/stylesheets/pageflow/ui/overrides.scss +8 -0
  48. data/app/assets/stylesheets/pageflow/ui/properties.scss +29 -0
  49. data/app/assets/stylesheets/pageflow/ui/tabs_view.scss +8 -3
  50. data/app/assets/stylesheets/pageflow/ui.scss +4 -2
  51. data/app/controllers/pageflow/editor/entries_controller.rb +1 -0
  52. data/app/controllers/pageflow/editor/file_folders_controller.rb +80 -0
  53. data/app/controllers/pageflow/editor/file_import_controller.rb +1 -0
  54. data/app/controllers/pageflow/editor/files_controller.rb +15 -6
  55. data/app/controllers/pageflow/editor/oembeds_controller.rb +21 -0
  56. data/app/controllers/pageflow/entries_controller.rb +17 -13
  57. data/app/controllers/pageflow/review/comment_thread_reads_controller.rb +30 -0
  58. data/app/controllers/pageflow/review/comment_threads_controller.rb +60 -0
  59. data/app/controllers/pageflow/review/comments_controller.rb +53 -0
  60. data/app/controllers/pageflow/revisions_controller.rb +4 -1
  61. data/app/helpers/pageflow/admin/entries_helper.rb +40 -0
  62. data/app/helpers/pageflow/admin/widgets_helper.rb +2 -2
  63. data/app/helpers/pageflow/common_entry_seed_helper.rb +5 -3
  64. data/app/helpers/pageflow/editor/config_helper.rb +3 -1
  65. data/app/helpers/pageflow/entries_helper.rb +24 -42
  66. data/app/helpers/pageflow/entry_json_seed_helper.rb +4 -4
  67. data/app/helpers/pageflow/public_i18n_helper.rb +9 -8
  68. data/app/helpers/pageflow/structured_data_helper.rb +4 -1
  69. data/app/helpers/pageflow/themes_helper.rb +1 -3
  70. data/app/helpers/pageflow/widgets_helper.rb +2 -1
  71. data/app/inputs/pageflow_permalink_input.rb +6 -2
  72. data/app/models/concerns/pageflow/auto_generated_perma_id.rb +11 -4
  73. data/app/models/concerns/pageflow/reusable_file.rb +1 -1
  74. data/app/models/concerns/pageflow/serialization_blacklist.rb +2 -4
  75. data/app/models/concerns/pageflow/translated_attributes.rb +101 -0
  76. data/app/models/concerns/pageflow/uploadable_file.rb +1 -1
  77. data/app/models/pageflow/comment.rb +30 -0
  78. data/app/models/pageflow/comment_thread.rb +65 -0
  79. data/app/models/pageflow/comment_thread_read.rb +22 -0
  80. data/app/models/pageflow/customized_theme.rb +3 -2
  81. data/app/models/pageflow/draft_entry.rb +20 -8
  82. data/app/models/pageflow/entry.rb +2 -0
  83. data/app/models/pageflow/entry_at_revision.rb +9 -1
  84. data/app/models/pageflow/entry_comment_summary.rb +114 -0
  85. data/app/models/pageflow/file_folder.rb +74 -0
  86. data/app/models/pageflow/file_reuse.rb +3 -2
  87. data/app/models/pageflow/file_usage.rb +8 -0
  88. data/app/models/pageflow/image_file.rb +24 -20
  89. data/app/models/pageflow/image_file_url_templates.rb +3 -3
  90. data/app/models/pageflow/legal_info.rb +38 -0
  91. data/app/models/pageflow/nested_revision_component_copy.rb +1 -1
  92. data/app/models/pageflow/permalink.rb +1 -0
  93. data/app/models/pageflow/revision.rb +6 -2
  94. data/app/models/pageflow/site.rb +10 -0
  95. data/app/models/pageflow/used_file.rb +8 -2
  96. data/app/models/pageflow/widget.rb +2 -2
  97. data/app/views/pageflow/audio_files/_audio_file.json.jbuilder +0 -1
  98. data/app/views/pageflow/editor/config/_seeds.json.jbuilder +4 -2
  99. data/app/views/pageflow/editor/entries/_entry.json.jbuilder +2 -1
  100. data/app/views/pageflow/editor/entries/seed.json.erb +1 -0
  101. data/app/views/pageflow/editor/file_folders/_file_folder.json.jbuilder +5 -0
  102. data/app/views/pageflow/editor/file_folders/create.json.jbuilder +1 -0
  103. data/app/views/pageflow/editor/file_folders/index.json.jbuilder +3 -0
  104. data/app/views/pageflow/editor/files/_file.json.jbuilder +2 -1
  105. data/app/views/pageflow/editor/image_files/_image_file.json.jbuilder +3 -0
  106. data/app/views/pageflow/editor/video_files/_video_file.json.jbuilder +3 -0
  107. data/app/views/pageflow/files/_file.json.jbuilder +2 -0
  108. data/app/views/pageflow/image_files/_image_file.json.jbuilder +0 -1
  109. data/app/views/pageflow/review/comment_threads/_comment_thread.json.jbuilder +20 -0
  110. data/app/views/pageflow/review/comment_threads/create.json.jbuilder +2 -0
  111. data/app/views/pageflow/review/comment_threads/index.json.jbuilder +13 -0
  112. data/app/views/pageflow/review/comments/_comment.json.jbuilder +13 -0
  113. data/app/views/pageflow/review/comments/create.json.jbuilder +1 -0
  114. data/app/views/pageflow/structured_data/_entry.json.jbuilder +2 -3
  115. data/app/views/pageflow/video_files/_video_file.json.jbuilder +0 -1
  116. data/config/locales/de.yml +152 -14
  117. data/config/locales/en.yml +150 -14
  118. data/config/routes.rb +14 -0
  119. data/db/migrate/20140418225525_setup_schema.rb +2 -2
  120. data/db/migrate/20251015000000_add_structured_data_type_name_to_revisions.rb +5 -0
  121. data/db/migrate/20251029142849_convert_legacy_social_embeds_to_unified_social_embed.rb +38 -0
  122. data/db/migrate/20251119083347_fix_main_storyline_positions.rb +16 -0
  123. data/db/migrate/20251119083348_ensure_scrolled_entries_have_excursion_storyline.rb +15 -0
  124. data/db/migrate/20260303000000_add_layout_version_to_revisions.rb +6 -0
  125. data/db/migrate/20260323000000_create_comment_threads_and_comments.rb +30 -0
  126. data/db/migrate/20260414000000_add_subject_range_to_comment_threads.rb +5 -0
  127. data/db/migrate/20260415000000_add_section_perma_id_to_comment_threads.rb +5 -0
  128. data/db/migrate/20260727000000_add_quote_to_comments.rb +5 -0
  129. data/db/migrate/20260728000000_create_file_folders.rb +17 -0
  130. data/db/migrate/20260805000000_add_attribute_translations_to_sites.rb +5 -0
  131. data/db/migrate/20260806000000_add_edited_at_to_comments.rb +5 -0
  132. data/db/migrate/20260810000000_create_pageflow_scrolled_lottie_files.rb +24 -0
  133. data/db/migrate/20260817000000_create_comment_thread_reads.rb +16 -0
  134. data/db/migrate/20260819000000_add_unread_comments_since_at_to_users.rb +18 -0
  135. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/editor.js +8665 -3890
  136. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/frontend.js +979 -3571
  137. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-client.js +20199 -28120
  138. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-server.js +18652 -26584
  139. data/entry_types/scrolled/app/assets/stylesheets/pageflow_scrolled/ui.scss +2 -0
  140. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/content_elements_controller.rb +33 -3
  141. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/sections_controller.rb +2 -3
  142. data/entry_types/scrolled/app/controllers/pageflow_scrolled/entries_controller.rb +21 -1
  143. data/entry_types/scrolled/app/helpers/pageflow_scrolled/cache_helper.rb +3 -3
  144. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/entry_json_seed_helper.rb +7 -5
  145. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/seed_html_helper.rb +5 -2
  146. data/entry_types/scrolled/app/helpers/pageflow_scrolled/entry_json_seed_helper.rb +13 -5
  147. data/entry_types/scrolled/app/helpers/pageflow_scrolled/i18n_helper.rb +28 -13
  148. data/entry_types/scrolled/app/helpers/pageflow_scrolled/packs_helper.rb +26 -11
  149. data/entry_types/scrolled/app/helpers/pageflow_scrolled/react_server_side_rendering_helper.rb +2 -2
  150. data/entry_types/scrolled/app/helpers/pageflow_scrolled/sprockets_helper.rb +16 -0
  151. data/entry_types/scrolled/app/helpers/pageflow_scrolled/themes_helper.rb +174 -3
  152. data/entry_types/scrolled/app/models/pageflow_scrolled/content_element.rb +49 -7
  153. data/entry_types/scrolled/app/models/pageflow_scrolled/lottie_file.rb +6 -0
  154. data/entry_types/scrolled/app/models/pageflow_scrolled/lottie_file_url_templates.rb +16 -0
  155. data/entry_types/scrolled/app/models/pageflow_scrolled/storyline.rb +1 -0
  156. data/entry_types/scrolled/app/views/pageflow_scrolled/entries/show.html.erb +13 -12
  157. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry.json.jbuilder +30 -10
  158. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_theme.json.jbuilder +9 -0
  159. data/entry_types/scrolled/app/views/pageflow_scrolled/favicons/_entry.html.erb +1 -1
  160. data/entry_types/scrolled/config/configuration_schemas/pageflow-scrolled.json +414 -0
  161. data/entry_types/scrolled/config/locales/de.yml +512 -65
  162. data/entry_types/scrolled/config/locales/en.yml +518 -52
  163. data/entry_types/scrolled/lib/pageflow_scrolled/additional_seed_data.rb +2 -2
  164. data/entry_types/scrolled/lib/pageflow_scrolled/configuration.rb +51 -6
  165. data/entry_types/scrolled/lib/pageflow_scrolled/configuration_schemas.rb +91 -0
  166. data/entry_types/scrolled/lib/pageflow_scrolled/engine.rb +2 -1
  167. data/entry_types/scrolled/lib/pageflow_scrolled/entry_file_reference_locations.rb +71 -0
  168. data/entry_types/scrolled/lib/pageflow_scrolled/entry_structured_data_types/faq_page.rb +58 -0
  169. data/entry_types/scrolled/lib/pageflow_scrolled/file_reference_locations.rb +69 -0
  170. data/entry_types/scrolled/lib/pageflow_scrolled/plugin.rb +205 -22
  171. data/entry_types/scrolled/lib/pageflow_scrolled/react_widget_type.rb +2 -4
  172. data/entry_types/scrolled/lib/pageflow_scrolled/seeds.rb +56 -36
  173. data/entry_types/scrolled/lib/pageflow_scrolled/theme_options_default_scale.rb +35 -0
  174. data/entry_types/scrolled/lib/pageflow_scrolled.rb +13 -0
  175. data/entry_types/scrolled/lib/tasks/pageflow_scrolled/storybook.rake +19 -1
  176. data/entry_types/scrolled/package/config/configurationSchemas.js +70 -0
  177. data/entry_types/scrolled/package/config/rollup/configurationSchemas.js +19 -0
  178. data/entry_types/scrolled/package/config/webpack.js +72 -0
  179. data/entry_types/scrolled/package/contentElements/hotspots-frontend.css +1 -1
  180. data/entry_types/scrolled/package/contentElements/hotspots-frontend.js +1181 -915
  181. data/entry_types/scrolled/package/contentElements/inlineBeforeAfter-frontend.css +1 -0
  182. data/entry_types/scrolled/package/contentElements/inlineBeforeAfter-frontend.js +219 -0
  183. data/entry_types/scrolled/package/contentElements/lottieAnimation-frontend.css +1 -0
  184. data/entry_types/scrolled/package/contentElements/lottieAnimation-frontend.js +244 -0
  185. data/entry_types/scrolled/package/contentElements/socialEmbed-frontend.css +1 -0
  186. data/entry_types/scrolled/package/contentElements/socialEmbed-frontend.js +823 -0
  187. data/entry_types/scrolled/package/contentElements/tikTokEmbed-frontend.js +71 -21
  188. data/entry_types/scrolled/package/contentElements/twitterEmbed-frontend.css +1 -0
  189. data/entry_types/scrolled/package/contentElements/twitterEmbed-frontend.js +277 -0
  190. data/entry_types/scrolled/package/contentElements/videoEmbed-frontend.css +1 -0
  191. data/entry_types/scrolled/package/contentElements/videoEmbed-frontend.js +244 -0
  192. data/entry_types/scrolled/package/contentElements-editor.js +1915 -1097
  193. data/entry_types/scrolled/package/contentElements-frontend.css +1 -1
  194. data/entry_types/scrolled/package/contentElements-frontend.js +3093 -1679
  195. data/entry_types/scrolled/package/editor.css +1 -0
  196. data/entry_types/scrolled/package/editor.js +8667 -4077
  197. data/entry_types/scrolled/package/entryState.js +1600 -0
  198. data/entry_types/scrolled/package/frontend/FloatingPortalRootProvider-20c600de.js +1979 -0
  199. data/entry_types/scrolled/package/frontend/FloatingPortalRootProvider-58189220.js +2538 -0
  200. data/entry_types/scrolled/package/frontend/{PhonePlatformContext-9f76033e.js → PhonePlatformContext-035a99fa.js} +7 -12
  201. data/entry_types/scrolled/package/frontend/PhonePlatformContext-9da43797.js +33 -0
  202. data/entry_types/scrolled/package/frontend/Placeholder.module-bf0966b4.js +5267 -0
  203. data/entry_types/scrolled/package/frontend/Placeholder.module-d22a9335.js +4180 -0
  204. data/entry_types/scrolled/package/frontend/ThemeIcon-ab834849.js +754 -0
  205. data/entry_types/scrolled/package/frontend/ThemeIcon-f6cb3a8f.js +773 -0
  206. data/entry_types/scrolled/package/frontend/{ToggleFullscreenCornerButton-788e9cdb.js → ToggleFullscreenCornerButton-30fd1124.js} +6 -6
  207. data/entry_types/scrolled/package/frontend/ToggleFullscreenCornerButton-61c25224.js +72 -0
  208. data/entry_types/scrolled/package/frontend/Viewer-1074fd59.js +147 -0
  209. data/entry_types/scrolled/package/frontend/Viewer-1482ca34.js +480 -0
  210. data/entry_types/scrolled/package/frontend/Viewer-70504231.js +210 -0
  211. data/entry_types/scrolled/package/frontend/{Viewer-0345ce57.js → Viewer-cc8d4072.js} +84 -92
  212. data/entry_types/scrolled/package/frontend/Wavesurfer-656e3c36.js +302 -0
  213. data/entry_types/scrolled/package/frontend/Wavesurfer-b753b838.js +385 -0
  214. data/entry_types/scrolled/package/frontend/commenting.css +1 -0
  215. data/entry_types/scrolled/package/frontend/extensions-167ae143.js +1455 -0
  216. data/entry_types/scrolled/package/frontend/extensions-2318f92b.js +5918 -0
  217. data/entry_types/scrolled/package/frontend/extensions-a461fd13.js +4890 -0
  218. data/entry_types/scrolled/package/frontend/extensions-c98269fd.js +1982 -0
  219. data/entry_types/scrolled/package/frontend/i18n-493cd2a6.js +93 -0
  220. data/entry_types/scrolled/package/frontend/i18n-e06cac14.js +100 -0
  221. data/entry_types/scrolled/package/frontend/{index-eb670c2f.js → index-2e5546f7.js} +36 -44
  222. data/entry_types/scrolled/package/frontend/index-de2b418d.js +130 -0
  223. data/entry_types/scrolled/package/frontend/index.css +1 -1
  224. data/entry_types/scrolled/package/frontend/index.js +1870 -875
  225. data/entry_types/scrolled/package/frontend/inlineEditing.css +1 -0
  226. data/entry_types/scrolled/package/frontend/useContentElementEditorState-a084912e.js +25 -0
  227. data/entry_types/scrolled/package/frontend/useDelayedBoolean-a387d85b.js +24 -0
  228. data/entry_types/scrolled/package/frontend/{usePhonePlatform-c2ba875d.js → usePhonePlatform-4ecb96d4.js} +1 -1
  229. data/entry_types/scrolled/package/frontend/usePhonePlatform-ce9ff08d.js +8 -0
  230. data/entry_types/scrolled/package/frontend-server.js +20 -209
  231. data/entry_types/scrolled/package/package.json +5 -3
  232. data/entry_types/scrolled/package/review.css +1 -0
  233. data/entry_types/scrolled/package/review.js +3306 -0
  234. data/entry_types/scrolled/package/testHelpers.js +836 -359
  235. data/entry_types/scrolled/package/widgets/consentBar.css +1 -1
  236. data/entry_types/scrolled/package/widgets/consentBar.js +269 -290
  237. data/entry_types/scrolled/package/widgets/defaultNavigation.css +2 -2
  238. data/entry_types/scrolled/package/widgets/defaultNavigation.js +911 -352
  239. data/entry_types/scrolled/package/widgets/excursionSheet.css +1 -1
  240. data/entry_types/scrolled/package/widgets/excursionSheet.js +87 -124
  241. data/entry_types/scrolled/package/widgets/iconInlineFileRights.css +1 -1
  242. data/entry_types/scrolled/package/widgets/iconInlineFileRights.js +62 -29
  243. data/entry_types/scrolled/package/widgets/iconScrollIndicator.js +32 -13
  244. data/entry_types/scrolled/package/widgets/mainStorylineSheet.css +1 -1
  245. data/entry_types/scrolled/package/widgets/mainStorylineSheet.js +56 -100
  246. data/entry_types/scrolled/package/widgets/textInlineFileRights.css +1 -1
  247. data/entry_types/scrolled/package/widgets/textInlineFileRights.js +33 -28
  248. data/entry_types/scrolled/package/widgets-server.js +1 -0
  249. data/entry_types/scrolled/spec/factories/lottie_files.rb +29 -0
  250. data/entry_types/scrolled/spec/fixtures/animation.lottie +0 -0
  251. data/entry_types/scrolled/spec/fixtures/font.woff +0 -0
  252. data/entry_types/scrolled/spec/fixtures/font.woff2 +0 -0
  253. data/lib/generators/pageflow/resque/resque_generator.rb +0 -2
  254. data/lib/pageflow/configuration.rb +49 -7
  255. data/lib/pageflow/deprecation.rb +19 -0
  256. data/lib/pageflow/engine.rb +1 -1
  257. data/lib/pageflow/entries_controller_env_helper.rb +32 -2
  258. data/lib/pageflow/entry_export_import/entry_serialization.rb +4 -4
  259. data/lib/pageflow/entry_export_import/page_type_versions.rb +2 -2
  260. data/lib/pageflow/entry_export_import/revision_serialization/import.rb +10 -0
  261. data/lib/pageflow/entry_export_import/revision_serialization.rb +3 -0
  262. data/lib/pageflow/entry_structured_data_types.rb +43 -0
  263. data/lib/pageflow/entry_type_configuration.rb +1 -0
  264. data/lib/pageflow/file_type.rb +2 -2
  265. data/lib/pageflow/file_types.rb +1 -1
  266. data/lib/pageflow/oembed_providers.rb +42 -0
  267. data/lib/pageflow/primary_domain_entry_redirect.rb +6 -0
  268. data/lib/pageflow/rails_version.rb +13 -2
  269. data/lib/pageflow/themes.rb +41 -0
  270. data/lib/pageflow/user_mixin.rb +12 -0
  271. data/lib/pageflow/version.rb +1 -1
  272. data/lib/pageflow.rb +1 -0
  273. data/package/config/eslint-rules/documented-in-toc.js +125 -0
  274. data/package/config/jest/index.js +0 -1
  275. data/package/config/webpack.js +0 -1
  276. data/package/config/webpack5.js +0 -1
  277. data/package/editor.js +4378 -1897
  278. data/package/frontend.js +647 -886
  279. data/package/package.json +2 -1
  280. data/package/review.js +384 -0
  281. data/package/testHelpers.js +248 -188
  282. data/package/ui.js +1346 -630
  283. data/package/vendor/stubs/wysihtml5.js +2 -0
  284. data/spec/factories/comment_thread_reads.rb +10 -0
  285. data/spec/factories/comment_threads.rb +10 -0
  286. data/spec/factories/comments.rb +9 -0
  287. data/spec/factories/file_folders.rb +8 -0
  288. data/spec/factories/published_entries.rb +2 -0
  289. metadata +188 -67
  290. data/app/assets/stylesheets/pageflow/editor/select_button.scss +0 -51
  291. data/entry_types/scrolled/app/helpers/pageflow_scrolled/generated_media_queries_helper.rb +0 -55
  292. data/entry_types/scrolled/package/frontend/FloatingPortalRootProvider-51914be7.js +0 -5439
  293. data/entry_types/scrolled/package/frontend/ThemeIcon-81f2f066.js +0 -1932
  294. data/entry_types/scrolled/package/frontend/Viewer-cdc549cc.js +0 -147
  295. data/entry_types/scrolled/package/frontend/Wavesurfer-1cdc3925.js +0 -313
  296. data/entry_types/scrolled/package/frontend/components-96660ffd.js +0 -3803
  297. data/entry_types/scrolled/package/frontend/inherits-539844a6.js +0 -99
  298. data/entry_types/scrolled/package/frontend/useContentElementEditorState-77fe6c79.js +0 -51
  299. data/entry_types/scrolled/package/widgets/excursionDialog.css +0 -1
  300. data/entry_types/scrolled/package/widgets/excursionDialog.js +0 -109
  301. data/lib/generators/pageflow/resque/templates/resque_enqueue_after_commit_patch.rb +0 -25
  302. data/package/vendor/jquery.minicolors.js +0 -1108
@@ -1,100 +1,31 @@
1
- import { E as EventContextDataProvider, C as ConnectedSection, u as usePrevious, g as getEventObject, w as withInlineEditingDecorator, a as useCurrentSectionIndexState, b as useScrollToTarget, c as usePostMessageListener, d as contentStyles, A as AtmoProvider, W as Widget, S as SelectableWidget, _ as _asyncToGenerator, e as withInlineEditingAlternative, f as useDarkBackground, i as isBlankEditableTextValue, h as EditableText, j as useContentElementAttributes, k as widths, l as useContentElementConfigurationUpdate, I as InlineFileRights, m as useTextTracks, n as useMediaMuted, o as useFocusOutlineVisible, p as useVideoQualitySetting, q as useIsomorphicLayoutEffect, r as frontendStyles, L as Link, F as Fullscreen, T as Text, s as utils, t as styles$d, R as RootProviders, v as registerVendors, x as api, y as loadInlineEditingComponents } from './FloatingPortalRootProvider-51914be7.js';
2
- export { ac as Atmo, ad as AtmoContext, A as AtmoProvider, aa as AudioPlayer, D as ContentElementAttributesProvider, H as ContentElementEditorCommandEmitterContext, K as ContentElementLifecycleContext, U as EditableTable, h as EditableText, $ as FloatingPortalRootProvider, a4 as Image, I as InlineFileRights, a5 as MediaPlayer, af as OnScreenObserverRootProvider, P as PlayerEventContextDataProvider, R as RootProviders, ai as SectionThumbnail, S as SelectableWidget, ah as StandaloneSectionThumbnail, T as Text, V as ThirdPartyOptIn, X as ThirdPartyOptOutInfo, a9 as VideoPlayer, W as Widget, a3 as contentElementWidthName, k as contentElementWidths, x as frontend, a1 as getAvailableTransitionNames, a6 as getInitialPlayerState, a0 as getTransitionNames, a2 as paletteColor, a7 as playerStateReducer, ab as processSources, v as registerConsentVendors, ae as useAtmo, z as useAudioFocus, B as useBackgroundFile, Y as useConsentRequested, l as useContentElementConfigurationUpdate, G as useContentElementEditorCommandSubscription, J as useContentElementLifecycle, M as useCurrentChapter, f as useDarkBackground, Z as useFloatingPortalRoot, N as useIsStaticPreview, q as useIsomorphicLayoutEffect, n as useMediaMuted, ag as useOnScreen, O as useOnUnmuteMedia, a8 as usePlayerState, Q as usePortraitOrientation, s as utils } from './FloatingPortalRootProvider-51914be7.js';
3
- import 'core-js/modules/es.symbol';
4
- import 'core-js/modules/es.symbol.description';
5
- import 'core-js/modules/es.symbol.async-iterator';
6
- import 'core-js/modules/es.symbol.has-instance';
7
- import 'core-js/modules/es.symbol.is-concat-spreadable';
8
- import 'core-js/modules/es.symbol.iterator';
9
- import 'core-js/modules/es.symbol.match';
10
- import 'core-js/modules/es.symbol.replace';
11
- import 'core-js/modules/es.symbol.search';
12
- import 'core-js/modules/es.symbol.species';
13
- import 'core-js/modules/es.symbol.split';
14
- import 'core-js/modules/es.symbol.to-primitive';
15
- import 'core-js/modules/es.symbol.to-string-tag';
16
- import 'core-js/modules/es.symbol.unscopables';
17
- import 'core-js/modules/es.array.concat';
18
- import 'core-js/modules/es.array.fill';
19
- import 'core-js/modules/es.array.find';
20
- import 'core-js/modules/es.array.from';
21
- import 'core-js/modules/es.array.iterator';
22
- import 'core-js/modules/es.json.to-string-tag';
23
- import 'core-js/modules/es.map';
24
- import 'core-js/modules/es.math.to-string-tag';
25
- import 'core-js/modules/es.object.assign';
26
- import 'core-js/modules/es.object.to-string';
27
- import 'core-js/modules/es.promise';
28
- import 'core-js/modules/es.promise.finally';
29
- import 'core-js/modules/es.set';
30
- import 'core-js/modules/es.string.iterator';
31
- import 'core-js/modules/es.string.starts-with';
32
- import 'core-js/modules/esnext.aggregate-error';
33
- import 'core-js/modules/esnext.map.delete-all';
34
- import 'core-js/modules/esnext.map.every';
35
- import 'core-js/modules/esnext.map.filter';
36
- import 'core-js/modules/esnext.map.find';
37
- import 'core-js/modules/esnext.map.find-key';
38
- import 'core-js/modules/esnext.map.from';
39
- import 'core-js/modules/esnext.map.group-by';
40
- import 'core-js/modules/esnext.map.includes';
41
- import 'core-js/modules/esnext.map.key-by';
42
- import 'core-js/modules/esnext.map.key-of';
43
- import 'core-js/modules/esnext.map.map-keys';
44
- import 'core-js/modules/esnext.map.map-values';
45
- import 'core-js/modules/esnext.map.merge';
46
- import 'core-js/modules/esnext.map.of';
47
- import 'core-js/modules/esnext.map.reduce';
48
- import 'core-js/modules/esnext.map.some';
49
- import 'core-js/modules/esnext.map.update';
50
- import 'core-js/modules/esnext.promise.all-settled';
51
- import 'core-js/modules/esnext.promise.any';
52
- import 'core-js/modules/esnext.promise.try';
53
- import 'core-js/modules/esnext.set.add-all';
54
- import 'core-js/modules/esnext.set.delete-all';
55
- import 'core-js/modules/esnext.set.difference';
56
- import 'core-js/modules/esnext.set.every';
57
- import 'core-js/modules/esnext.set.filter';
58
- import 'core-js/modules/esnext.set.find';
59
- import 'core-js/modules/esnext.set.from';
60
- import 'core-js/modules/esnext.set.intersection';
61
- import 'core-js/modules/esnext.set.is-disjoint-from';
62
- import 'core-js/modules/esnext.set.is-subset-of';
63
- import 'core-js/modules/esnext.set.is-superset-of';
64
- import 'core-js/modules/esnext.set.join';
65
- import 'core-js/modules/esnext.set.map';
66
- import 'core-js/modules/esnext.set.of';
67
- import 'core-js/modules/esnext.set.reduce';
68
- import 'core-js/modules/esnext.set.some';
69
- import 'core-js/modules/esnext.set.symmetric-difference';
70
- import 'core-js/modules/esnext.set.union';
71
- import 'core-js/modules/esnext.symbol.dispose';
72
- import 'core-js/modules/esnext.symbol.observable';
73
- import 'core-js/modules/esnext.symbol.pattern-match';
74
- import 'core-js/modules/web.dom-collections.iterator';
75
- import 'regenerator-runtime/runtime.js';
76
- import { browser, events, consent, features } from 'pageflow/frontend';
1
+ import { browser, events, features, consent } from 'pageflow/frontend';
77
2
  import React, { useRef, useState, useEffect, useCallback, useMemo, Suspense, useContext } from 'react';
78
3
  import ReactDOM from 'react-dom';
79
- import { _ as _slicedToArray, m as useSectionsWithChapter, t as useEntryStructure, v as getFileUrlTemplateHost, u as useI18n, g as useTheme, b as _defineProperty, a as _objectSpread2, T as ThemeIcon, o as _toConsumableArray, e as _objectWithoutProperties, w as useAvailableQualities, x as setupI18n } from './ThemeIcon-81f2f066.js';
80
- export { L as LocaleProvider, T as ThemeIcon, x as setupI18n, l as useAdditionalSeedData, y as useChapters, z as useCredits, A as useCutOff, B as useDarkWidgets, c as useEntryMetadata, r as useEntryStateDispatch, C as useEntryTranslations, j as useFile, D as useFileRights, i as useFileWithInlineRights, u as useI18n, F as useLegalInfo, J as useLocale, G as useMainChapters, H as useShareProviders, I as useShareUrl, g as useTheme } from './ThemeIcon-81f2f066.js';
81
4
  import classNames from 'classnames';
82
- import { a as useContentElementEditorState } from './useContentElementEditorState-77fe6c79.js';
83
- export { C as ContentElementEditorStateContext, a as useContentElementEditorState } from './useContentElementEditorState-77fe6c79.js';
84
- import './inherits-539844a6.js';
5
+ import { e as extensible, u as useScrollToTarget, a as useActiveExcursion, M as MainStorylineCoverageProvider, b as MainStorylineActivity, c as useMainStorylineCoverage, d as api, p as provideExtensions, f as useDarkBackground, E as EditableText, g as useContentElementAttributes, w as widths, L as Link, T as Text } from './FloatingPortalRootProvider-58189220.js';
6
+ export { C as ContentElementAttributesProvider, i as ContentElementLifecycleContext, k as ContentElementViewTimelineContext, E as EditableText, F as FloatingPortalRootProvider, L as Link, b as MainStorylineActivity, O as OnScreenObserverRootProvider, T as Text, r as contentElementWidthName, w as contentElementWidths, d as frontend, l as getViewTimelineProgress, q as paletteColor, h as useContentElementLifecycle, j as useContentElementViewTimelineProgress, f as useDarkBackground, o as useFloatingPortalRoot, m as useIsStaticPreview, s as useOnScreen, n as useStorylineActivity } from './FloatingPortalRootProvider-58189220.js';
7
+ export { u as useDelayedBoolean } from './useDelayedBoolean-a387d85b.js';
8
+ import { E as EventContextDataProvider, C as ConnectedSection, g as getEventObject, u as useCurrentSectionIndexState, a as usePostMessageListener, c as contentStyles, A as AtmoProvider, W as Widget, S as SelectableWidget, i as isBlankEditableTextValue, b as useContentElementConfigurationUpdate, d as usePrevious, I as InlineFileRights, e as useFocusOutlineVisible, f as useTextTracks, h as useMediaMuted, j as useVideoQualitySetting, k as useIsomorphicLayoutEffect, l as frontendStyles, s as styles$e, F as Fullscreen, m as utils, n as styles$f, r as registerVendors, R as RootProviders } from './Placeholder.module-bf0966b4.js';
9
+ export { G as AiIndicatorIcon, $ as Atmo, a0 as AtmoContext, A as AtmoProvider, Z as AudioPlayer, v as ContentElementEditorCommandEmitterContext, z as EditableTable, Q as Image, I as InlineFileRights, T as MediaPlayer, P as PlayerEventContextDataProvider, R as RootProviders, J as SectionIntersectionObserver, a3 as SectionThumbnail, S as SelectableWidget, a2 as StandaloneSectionThumbnail, O as ThirdPartyOptIn, B as ThirdPartyOptOutInfo, Y as VideoPlayer, W as Widget, N as getAppearanceSectionScopeName, M as getAvailableTransitionNames, U as getInitialPlayerState, L as getTransitionNames, V as playerStateReducer, _ as processSources, r as registerConsentVendors, H as useAiIndicatorLabel, a1 as useAtmo, o as useAudioFocus, p as useBackgroundFile, D as useConsentRequested, b as useContentElementConfigurationUpdate, t as useContentElementEditorCommandSubscription, w as useCurrentChapter, k as useIsomorphicLayoutEffect, h as useMediaMuted, x as useOnUnmuteMedia, X as usePlayerState, y as usePortraitOrientation, K as usePrivacyLink, q as useWidgetConfigurationUpdate, m as utils } from './Placeholder.module-bf0966b4.js';
85
10
  import 'backbone-events-standalone';
86
- import 'use-context-selector';
87
- import 'reselect';
88
- import 'slugify';
11
+ import { useEntryStructure, useActiveWidgets, getFileUrlTemplateHost, useTheme, useAvailableQualities } from 'pageflow-scrolled/entryState';
12
+ export { useAdditionalSeedData, useChapters, useCredits, useCutOff, useDarkWidgets, useEntryMetadata, useEntryStateDispatch, useEntryTranslations, useFile, useFileRights, useFileWithInlineRights, useLegalInfo, useMainChapters, useShareProviders, useShareUrl, useTheme } from 'pageflow-scrolled/entryState';
89
13
  import 'i18n-js';
14
+ import { u as useI18n, s as setupI18n } from './i18n-e06cac14.js';
15
+ export { L as LocaleProvider, s as setupI18n, u as useI18n, a as useLocale } from './i18n-e06cac14.js';
90
16
  import 'striptags';
91
17
  import Measure from 'react-measure';
92
- export { P as PhonePlatformContext } from './PhonePlatformContext-9f76033e.js';
18
+ export { P as PhonePlatformContext } from './PhonePlatformContext-9da43797.js';
19
+ import { u as useContentElementEditorState } from './useContentElementEditorState-a084912e.js';
20
+ export { C as ContentElementEditorStateContext, u as useContentElementEditorState } from './useContentElementEditorState-a084912e.js';
21
+ import { T as ThemeIcon } from './ThemeIcon-f6cb3a8f.js';
22
+ export { T as ThemeIcon } from './ThemeIcon-f6cb3a8f.js';
23
+ import PropTypes from 'prop-types';
93
24
  import { DraggableCore } from 'react-draggable';
94
- export { T as ToggleFullscreenCornerButton } from './ToggleFullscreenCornerButton-788e9cdb.js';
95
- export { F as FullscreenViewer } from './index-eb670c2f.js';
25
+ export { T as ToggleFullscreenCornerButton } from './ToggleFullscreenCornerButton-61c25224.js';
26
+ export { F as FullscreenViewer } from './index-de2b418d.js';
96
27
  import { useI18n as useI18n$1, useTheme as useTheme$1 } from 'pageflow-scrolled/frontend';
97
- export { u as usePhonePlatform } from './usePhonePlatform-c2ba875d.js';
28
+ export { u as usePhonePlatform } from './usePhonePlatform-4ecb96d4.js';
98
29
  import invert from 'invert-color';
99
30
 
100
31
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
@@ -115,37 +46,59 @@ if (browser.agent.matchesSafari() && window.parent !== window) {
115
46
  }
116
47
  require('intersection-observer');
117
48
 
118
- // Make sure we're in a Browser-like environment before importing polyfills
119
- // This prevents `fetch()` from being imported in a Node test environment
49
+ // Make sure we're in a Browser-like environment before importing the
50
+ // polyfill. This prevents it from being imported in a Node test
51
+ // environment.
120
52
  if (typeof window !== 'undefined') {
121
- require('whatwg-fetch');
122
53
  require('scroll-timeline');
123
54
  }
124
55
 
56
+ var styles = {"wrapper":"Chapter-module_wrapper__3Pdly"};
57
+
58
+ var _jsxFileName = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/Chapter.js";
125
59
  function Chapter(props) {
126
60
  return /*#__PURE__*/React.createElement("div", {
127
- id: props.chapterSlug
61
+ id: props.chapterSlug,
62
+ className: styles.wrapper,
63
+ __self: this,
64
+ __source: {
65
+ fileName: _jsxFileName,
66
+ lineNumber: 10,
67
+ columnNumber: 5
68
+ }
128
69
  }, renderSections(props.sections, props.currentSectionIndex, props.setCurrentSection));
129
70
  }
130
71
  function renderSections(sections, currentSectionIndex, setCurrentSection) {
131
- function _onActivate(section) {
72
+ function onActivate(section) {
132
73
  setCurrentSection(section);
133
74
  }
134
- return sections.map(function (section) {
75
+ return sections.map(section => {
135
76
  return /*#__PURE__*/React.createElement(EventContextDataProvider, {
136
77
  key: section.permaId,
137
78
  section: section,
138
- sectionsCount: sections.length
79
+ sectionsCount: sections.length,
80
+ __self: this,
81
+ __source: {
82
+ fileName: _jsxFileName,
83
+ lineNumber: 27,
84
+ columnNumber: 7
85
+ }
139
86
  }, /*#__PURE__*/React.createElement(ConnectedSection, {
140
87
  state: section.sectionIndex > currentSectionIndex ? 'below' : section.sectionIndex < currentSectionIndex ? 'above' : 'active',
141
- onActivate: function onActivate() {
142
- return _onActivate(section);
143
- },
144
- section: section
88
+ onActivate: () => onActivate(section),
89
+ section: section,
90
+ __self: this,
91
+ __source: {
92
+ fileName: _jsxFileName,
93
+ lineNumber: 28,
94
+ columnNumber: 9
95
+ }
145
96
  }));
146
97
  });
147
98
  }
148
99
 
100
+ var _jsxFileName$1 = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/VhFix.js";
101
+
149
102
  // InApp browsers on iOS (e.g. Twitter) report the height of the
150
103
  // initial viewport as 100vh. Once the page is scrolled, browser
151
104
  // toolbars are hidden, the viewport becomes larger and elements with
@@ -164,47 +117,54 @@ function renderSections(sections, currentSectionIndex, setCurrentSection) {
164
117
  // On orientation change, we do want to update `--vh`, though. We
165
118
  // therefore do update it when the inner height of the window
166
119
  // decreases by more than 30%.
167
- function VhFix(_ref) {
168
- var children = _ref.children;
169
- var probeRef = useRef();
170
- var _useState = useState(),
171
- _useState2 = _slicedToArray(_useState, 2),
172
- height = _useState2[0],
173
- setHeight = _useState2[1];
174
- useEffect(function () {
120
+ function VhFix({
121
+ children
122
+ }) {
123
+ const probeRef = useRef();
124
+ const [height, setHeight] = useState();
125
+ useEffect(() => {
175
126
  if (!browser.has('ios platform')) {
176
127
  return;
177
128
  }
178
129
  window.addEventListener('resize', update);
179
- return function () {
180
- return window.removeEventListener('resize', update);
181
- };
130
+ return () => window.removeEventListener('resize', update);
182
131
  function update() {
183
- setHeight(function (previousHeight) {
184
- return getHeight({
185
- windowHeight: window.innerHeight,
186
- probeHeight: probeRef.current.clientHeight,
187
- previousHeight: previousHeight
188
- });
189
- });
132
+ setHeight(previousHeight => getHeight({
133
+ windowHeight: window.innerHeight,
134
+ probeHeight: probeRef.current.clientHeight,
135
+ previousHeight
136
+ }));
190
137
  }
191
138
  }, []);
192
139
  return /*#__PURE__*/React.createElement("div", {
193
140
  style: height && {
194
- '--vh': "".concat(height / 100, "px")
141
+ '--vh': `${height / 100}px`
142
+ },
143
+ __self: this,
144
+ __source: {
145
+ fileName: _jsxFileName$1,
146
+ lineNumber: 44,
147
+ columnNumber: 5
195
148
  }
196
149
  }, /*#__PURE__*/React.createElement("div", {
197
150
  style: {
198
151
  height: '100vh',
199
152
  position: 'absolute'
200
153
  },
201
- ref: probeRef
154
+ ref: probeRef,
155
+ __self: this,
156
+ __source: {
157
+ fileName: _jsxFileName$1,
158
+ lineNumber: 45,
159
+ columnNumber: 7
160
+ }
202
161
  }), children);
203
162
  }
204
- function getHeight(_ref2) {
205
- var windowHeight = _ref2.windowHeight,
206
- probeHeight = _ref2.probeHeight,
207
- previousHeight = _ref2.previousHeight;
163
+ function getHeight({
164
+ windowHeight,
165
+ probeHeight,
166
+ previousHeight
167
+ }) {
208
168
  if (probeHeight < windowHeight || previousHeight) {
209
169
  if (!previousHeight || windowHeight > previousHeight || windowHeight < previousHeight * 0.7) {
210
170
  return windowHeight;
@@ -214,211 +174,369 @@ function getHeight(_ref2) {
214
174
  }
215
175
  }
216
176
 
217
- function useActiveExcursion(entryStructure) {
218
- var _useState = useState(),
219
- _useState2 = _slicedToArray(_useState, 2),
220
- activeExcursionId = _useState2[0],
221
- setActiveExcursionId = _useState2[1];
222
- useEffect(function () {
223
- function handleHashChange(event) {
224
- var _window$history$state;
225
- var slug = window.location.hash.slice(1);
226
- var excursion = entryStructure.excursions.find(function (chapter) {
227
- return chapter.chapterSlug === slug;
228
- });
229
- if (excursion && !((_window$history$state = window.history.state) === null || _window$history$state === void 0 ? void 0 : _window$history$state.excursionReturnHash)) {
230
- window.history.replaceState({
231
- excursionReturnHash: '#' + event.oldURL.split('#')[1]
232
- }, null);
233
- }
234
- setActiveExcursionId(excursion === null || excursion === void 0 ? void 0 : excursion.id);
235
- }
236
- window.addEventListener('hashchange', handleHashChange);
237
- return function () {
238
- return window.removeEventListener('hashchange', handleHashChange);
239
- };
240
- }, [entryStructure]);
241
- var activateExcursionOfSection = useCallback(function (_ref) {
242
- var id = _ref.id;
243
- var excursion = entryStructure.excursions.find(function (chapter) {
244
- return chapter.sections.find(function (section) {
245
- return section.id === id;
246
- });
247
- });
248
- if (excursion) {
249
- var _window$history$state2;
250
- window.history.replaceState({
251
- excursionReturnHash: ((_window$history$state2 = window.history.state) === null || _window$history$state2 === void 0 ? void 0 : _window$history$state2.excursionReturnHash) || window.location.hash
252
- }, null, '#' + excursion.chapterSlug);
253
- }
254
- setActiveExcursionId(excursion === null || excursion === void 0 ? void 0 : excursion.id);
255
- }, [entryStructure]);
256
- var returnFromExcursion = useCallback(function () {
257
- var _window$history$state3;
258
- setActiveExcursionId(undefined);
259
- if ((_window$history$state3 = window.history.state) === null || _window$history$state3 === void 0 ? void 0 : _window$history$state3.excursionReturnHash) {
260
- var _window$history$state4;
261
- window.history.replaceState(null, null, (_window$history$state4 = window.history.state) === null || _window$history$state4 === void 0 ? void 0 : _window$history$state4.excursionReturnHash);
262
- }
263
- }, []);
264
- var activeExcursion = useMemo(function () {
265
- return entryStructure.excursions.find(function (excursion) {
266
- return excursion.id === activeExcursionId;
267
- });
268
- }, [entryStructure, activeExcursionId]);
269
- return {
270
- activeExcursion: activeExcursion,
271
- activateExcursionOfSection: activateExcursionOfSection,
272
- returnFromExcursion: returnFromExcursion
273
- };
274
- }
275
-
276
- function useSectionChangeEvents(currentSectionIndex) {
277
- var previousSectionIndex = usePrevious(currentSectionIndex);
278
- var sections = useSectionsWithChapter();
279
- useEffect(function () {
280
- if (previousSectionIndex !== currentSectionIndex) {
177
+ function useSectionChangeEvents(events) {
178
+ const previousSectionPermaIdRef = useRef();
179
+ return useCallback((section, sectionsCount) => {
180
+ if (previousSectionPermaIdRef.current !== (section === null || section === void 0 ? void 0 : section.permaId)) {
281
181
  events.trigger('page:change', getEventObject({
282
- section: sections[currentSectionIndex],
283
- sectionsCount: sections.length
182
+ section,
183
+ sectionsCount
284
184
  }));
185
+ previousSectionPermaIdRef.current = section === null || section === void 0 ? void 0 : section.permaId;
285
186
  }
286
- });
187
+ }, [events]);
287
188
  }
288
189
 
289
- var sectionChangeMessagePoster = function sectionChangeMessagePoster(index) {
190
+ const sectionChangeMessagePoster = (sectionIndex, excursionId) => {
290
191
  if (window.parent !== window) {
291
192
  window.parent.postMessage({
292
193
  type: 'CHANGE_SECTION',
293
194
  payload: {
294
- index: index
195
+ sectionIndex,
196
+ excursionId
295
197
  }
296
198
  }, window.location.origin);
297
199
  }
298
200
  };
299
201
 
300
- var Content = withInlineEditingDecorator('ContentDecorator', function Content(props) {
301
- var entryStructure = useEntryStructure();
302
- var _useActiveExcursion = useActiveExcursion(entryStructure),
303
- activeExcursion = _useActiveExcursion.activeExcursion,
304
- activateExcursionOfSection = _useActiveExcursion.activateExcursionOfSection,
305
- returnFromExcursion = _useActiveExcursion.returnFromExcursion;
306
- var _useCurrentSectionInd = useCurrentSectionIndexState(),
307
- _useCurrentSectionInd2 = _slicedToArray(_useCurrentSectionInd, 2),
308
- currentSectionIndex = _useCurrentSectionInd2[0],
309
- setCurrentSectionIndexState = _useCurrentSectionInd2[1];
310
- useSectionChangeEvents(currentSectionIndex);
311
- var updateChapterSlug = function updateChapterSlug(section) {
312
- if (window.history && window.history.replaceState) {
313
- if (section.sectionIndex > 0) {
314
- window.history.replaceState(null, null, '#' + section.chapter.chapterSlug);
315
- } else {
316
- window.history.replaceState(null, null, window.location.href.split('#')[0]);
317
- }
202
+ function useChapterSlugUpdater() {
203
+ const windowLoadedRef = useRef(false);
204
+ useWindowLoadTracking(windowLoadedRef);
205
+ const updateChapterSlug = useCallback(section => {
206
+ if (!windowLoadedRef.current) {
207
+ return;
208
+ }
209
+ if (section.sectionIndex > 0) {
210
+ window.history.replaceState(null, null, '#' + section.chapter.chapterSlug);
211
+ } else {
212
+ window.history.replaceState(null, null, window.location.href.split('#')[0]);
213
+ }
214
+ }, []);
215
+ const updateExcursionChapterSlug = useCallback(section => {
216
+ if (!windowLoadedRef.current) {
217
+ return;
318
218
  }
219
+ window.history.replaceState(null, null, '#' + section.chapter.chapterSlug);
220
+ }, []);
221
+ return {
222
+ updateChapterSlug,
223
+ updateExcursionChapterSlug
319
224
  };
320
- var setCurrentSection = useCallback(function (section) {
225
+ }
226
+ function useWindowLoadTracking(windowLoadedRef) {
227
+ useEffect(() => {
228
+ if (document.readyState === 'complete') {
229
+ windowLoadedRef.current = true;
230
+ return;
231
+ }
232
+ const handleLoad = () => {
233
+ windowLoadedRef.current = true;
234
+ };
235
+ window.addEventListener('load', handleLoad);
236
+ return () => window.removeEventListener('load', handleLoad);
237
+ }, [windowLoadedRef]);
238
+ }
239
+
240
+ var _jsxFileName$2 = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/Content.js";
241
+ const Content = extensible('Content', function Content(props) {
242
+ const entryStructure = useEntryStructure();
243
+ const scrollToTarget = useScrollToTarget();
244
+ const {
245
+ activeExcursion,
246
+ activateExcursionOfSection,
247
+ returnFromExcursion
248
+ } = useActiveExcursion();
249
+ const [currentSectionIndex, setCurrentSectionIndexState] = useCurrentSectionIndexState();
250
+ const [currentExcursionSectionIndex, setCurrentExcursionSectionIndex] = useState(0);
251
+ const {
252
+ updateChapterSlug,
253
+ updateExcursionChapterSlug
254
+ } = useChapterSlugUpdater();
255
+ const triggerSectionChange = useSectionChangeEvents(events);
256
+ const setCurrentSection = useCallback(section => {
321
257
  sectionChangeMessagePoster(section.sectionIndex);
322
258
  setCurrentSectionIndexState(section.sectionIndex);
323
259
  updateChapterSlug(section);
324
- }, [setCurrentSectionIndexState]);
325
- var scrollToTarget = useScrollToTarget();
326
- var receiveMessage = useCallback(function (data) {
260
+ triggerSectionChange(section, entryStructure.mainSectionsCount);
261
+ }, [setCurrentSectionIndexState, updateChapterSlug, triggerSectionChange, entryStructure.mainSectionsCount]);
262
+ const setCurrentExcursionSection = useCallback(section => {
263
+ sectionChangeMessagePoster(section.sectionIndex, section.chapter.id);
264
+ setCurrentExcursionSectionIndex(section.sectionIndex);
265
+ updateExcursionChapterSlug(section);
266
+ triggerSectionChange(section, activeExcursion.sections.length);
267
+ }, [updateExcursionChapterSlug, triggerSectionChange, activeExcursion]);
268
+ const receiveMessage = useCallback(data => {
327
269
  if (data.type === 'SCROLL_TO_SECTION') {
328
270
  activateExcursionOfSection({
329
271
  id: data.payload.id
330
272
  });
331
273
  scrollToTarget({
332
274
  id: data.payload.id,
333
- align: data.payload.align
275
+ align: data.payload.align,
276
+ ifNeeded: data.payload.ifNeeded,
277
+ behavior: data.payload.behavior
334
278
  });
335
279
  }
336
280
  }, [scrollToTarget, activateExcursionOfSection]);
337
281
  usePostMessageListener(receiveMessage);
338
282
  return /*#__PURE__*/React.createElement("div", {
339
283
  className: contentStyles.Content,
340
- id: "goToContent"
341
- }, /*#__PURE__*/React.createElement(VhFix, null, /*#__PURE__*/React.createElement(AtmoProvider, null, renderChapters(entryStructure.main, currentSectionIndex, setCurrentSection), renderExcursion(activeExcursion, {
342
- onClose: function onClose() {
343
- return returnFromExcursion();
284
+ id: "goToContent",
285
+ __self: this,
286
+ __source: {
287
+ fileName: _jsxFileName$2,
288
+ lineNumber: 67,
289
+ columnNumber: 5
290
+ }
291
+ }, /*#__PURE__*/React.createElement(VhFix, {
292
+ __self: this,
293
+ __source: {
294
+ fileName: _jsxFileName$2,
295
+ lineNumber: 68,
296
+ columnNumber: 7
297
+ }
298
+ }, /*#__PURE__*/React.createElement(MainStorylineCoverageProvider, {
299
+ __self: this,
300
+ __source: {
301
+ fileName: _jsxFileName$2,
302
+ lineNumber: 69,
303
+ columnNumber: 9
344
304
  }
345
- }))));
305
+ }, /*#__PURE__*/React.createElement(AtmoProvider, {
306
+ __self: this,
307
+ __source: {
308
+ fileName: _jsxFileName$2,
309
+ lineNumber: 70,
310
+ columnNumber: 11
311
+ }
312
+ }, renderMainStoryline(entryStructure.main, activeExcursion, currentSectionIndex, setCurrentSection), /*#__PURE__*/React.createElement(ActiveExcursion, {
313
+ excursion: activeExcursion,
314
+ currentExcursionSectionIndex: currentExcursionSectionIndex,
315
+ setCurrentExcursionSection: setCurrentExcursionSection,
316
+ onClose: () => {
317
+ returnFromExcursion();
318
+ sectionChangeMessagePoster(currentSectionIndex);
319
+ },
320
+ __self: this,
321
+ __source: {
322
+ fileName: _jsxFileName$2,
323
+ lineNumber: 75,
324
+ columnNumber: 13
325
+ }
326
+ })))));
346
327
  });
347
- function renderExcursion(excursion, _ref) {
348
- var onClose = _ref.onClose;
349
- if (excursion) {
350
- return /*#__PURE__*/React.createElement(Widget, {
351
- role: "excursion",
352
- props: {
353
- excursion: excursion,
354
- onClose: onClose
355
- }
356
- }, renderChapters([excursion], 0, function () {}));
328
+ function renderMainStoryline(chapters, activeExcursion, currentSectionIndex, setCurrentSection) {
329
+ return /*#__PURE__*/React.createElement(Widget, {
330
+ role: "mainStoryline",
331
+ props: {
332
+ activeExcursion
333
+ },
334
+ renderFallback: ({
335
+ children
336
+ }) => children,
337
+ __self: this,
338
+ __source: {
339
+ fileName: _jsxFileName$2,
340
+ lineNumber: 93,
341
+ columnNumber: 5
342
+ }
343
+ }, /*#__PURE__*/React.createElement(MainStorylineActivity, {
344
+ activeExcursion: activeExcursion,
345
+ __self: this,
346
+ __source: {
347
+ fileName: _jsxFileName$2,
348
+ lineNumber: 96,
349
+ columnNumber: 7
350
+ }
351
+ }, renderChapters(chapters, currentSectionIndex, setCurrentSection)), /*#__PURE__*/React.createElement(Widget, {
352
+ role: "footer",
353
+ __self: this,
354
+ __source: {
355
+ fileName: _jsxFileName$2,
356
+ lineNumber: 99,
357
+ columnNumber: 7
358
+ }
359
+ }));
360
+ }
361
+ function ActiveExcursion({
362
+ excursion,
363
+ currentExcursionSectionIndex,
364
+ setCurrentExcursionSection,
365
+ onClose
366
+ }) {
367
+ const {
368
+ setMainStorylineCovered
369
+ } = useMainStorylineCoverage();
370
+ if (!excursion) {
371
+ return null;
357
372
  }
373
+ return /*#__PURE__*/React.createElement(Widget, {
374
+ role: "excursion",
375
+ props: {
376
+ excursion,
377
+ onClose: () => {
378
+ onClose();
379
+ setMainStorylineCovered(false);
380
+ },
381
+ setIsCoveringBackground: setMainStorylineCovered
382
+ },
383
+ __self: this,
384
+ __source: {
385
+ fileName: _jsxFileName$2,
386
+ lineNumber: 117,
387
+ columnNumber: 5
388
+ }
389
+ }, renderChapters([excursion], currentExcursionSectionIndex, setCurrentExcursionSection));
358
390
  }
359
391
  function renderChapters(chapters, currentSectionIndex, setCurrentSection) {
360
- return chapters.map(function (chapter, index) {
392
+ return chapters.map((chapter, index) => {
361
393
  return /*#__PURE__*/React.createElement(Chapter, {
362
394
  key: index,
363
395
  chapterSlug: chapter.chapterSlug,
364
396
  permaId: chapter.permaId,
365
397
  sections: chapter.sections,
366
398
  currentSectionIndex: currentSectionIndex,
367
- setCurrentSection: setCurrentSection
399
+ setCurrentSection: setCurrentSection,
400
+ __self: this,
401
+ __source: {
402
+ fileName: _jsxFileName$2,
403
+ lineNumber: 138,
404
+ columnNumber: 7
405
+ }
368
406
  });
369
407
  });
370
408
  }
371
409
 
372
- var Entry = withInlineEditingDecorator('EntryDecorator', function Entry() {
373
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Widget, {
374
- role: "consent"
410
+ var _jsxFileName$3 = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/WidgetPresenceWrapper.js";
411
+ function WidgetPresenceWrapper({
412
+ children
413
+ }) {
414
+ const widgets = useActiveWidgets();
415
+ return /*#__PURE__*/React.createElement(PresenceProviders, {
416
+ widgets: widgets,
417
+ __self: this,
418
+ __source: {
419
+ fileName: _jsxFileName$3,
420
+ lineNumber: 9,
421
+ columnNumber: 5
422
+ }
423
+ }, children);
424
+ }
425
+ function PresenceProviders({
426
+ widgets,
427
+ children
428
+ }) {
429
+ if (widgets.length === 0) {
430
+ return children;
431
+ }
432
+ const [first, ...rest] = widgets;
433
+ const Provider = api.widgetTypes.getPresenceProvider(first.typeName);
434
+ if (Provider) {
435
+ return /*#__PURE__*/React.createElement(Provider, {
436
+ configuration: first.configuration,
437
+ __self: this,
438
+ __source: {
439
+ fileName: _jsxFileName$3,
440
+ lineNumber: 25,
441
+ columnNumber: 7
442
+ }
443
+ }, /*#__PURE__*/React.createElement(PresenceProviders, {
444
+ widgets: rest,
445
+ __self: this,
446
+ __source: {
447
+ fileName: _jsxFileName$3,
448
+ lineNumber: 26,
449
+ columnNumber: 9
450
+ }
451
+ }, children));
452
+ }
453
+ return /*#__PURE__*/React.createElement(PresenceProviders, {
454
+ widgets: rest,
455
+ __self: this,
456
+ __source: {
457
+ fileName: _jsxFileName$3,
458
+ lineNumber: 34,
459
+ columnNumber: 5
460
+ }
461
+ }, children);
462
+ }
463
+
464
+ var _jsxFileName$4 = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/Entry.js";
465
+ const Entry = extensible('Entry', function Entry() {
466
+ return /*#__PURE__*/React.createElement(WidgetPresenceWrapper, {
467
+ __self: this,
468
+ __source: {
469
+ fileName: _jsxFileName$4,
470
+ lineNumber: 12,
471
+ columnNumber: 5
472
+ }
473
+ }, /*#__PURE__*/React.createElement(Widget, {
474
+ role: "consent",
475
+ __self: this,
476
+ __source: {
477
+ fileName: _jsxFileName$4,
478
+ lineNumber: 13,
479
+ columnNumber: 7
480
+ }
375
481
  }), /*#__PURE__*/React.createElement(SelectableWidget, {
376
- role: "header"
377
- }), /*#__PURE__*/React.createElement(Content, null), /*#__PURE__*/React.createElement(Widget, {
378
- role: "footer"
482
+ role: "header",
483
+ __self: this,
484
+ __source: {
485
+ fileName: _jsxFileName$4,
486
+ lineNumber: 14,
487
+ columnNumber: 7
488
+ }
489
+ }), /*#__PURE__*/React.createElement(Content, {
490
+ __self: this,
491
+ __source: {
492
+ fileName: _jsxFileName$4,
493
+ lineNumber: 15,
494
+ columnNumber: 7
495
+ }
379
496
  }));
380
497
  });
381
498
 
382
- function _regeneratorRuntime() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == typeof h && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(typeof e + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
383
- function loadDashUnlessHlsSupported(_x) {
384
- return _loadDashUnlessHlsSupported.apply(this, arguments);
385
- }
386
- function _loadDashUnlessHlsSupported() {
387
- _loadDashUnlessHlsSupported = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(seed) {
388
- return _regeneratorRuntime().wrap(function _callee$(_context) {
389
- while (1) switch (_context.prev = _context.next) {
390
- case 0:
391
- if (hasHlsSupport({
392
- seed: seed,
393
- agent: browser.agent
394
- })) {
395
- _context.next = 3;
396
- break;
397
- }
398
- _context.next = 3;
399
- return import('@videojs/http-streaming');
400
- case 3:
401
- case "end":
402
- return _context.stop();
403
- }
404
- }, _callee);
405
- }));
406
- return _loadDashUnlessHlsSupported.apply(this, arguments);
499
+ function loadInlineEditingExtensions() {
500
+ return import('./extensions-2318f92b.js').then(({
501
+ extensions
502
+ }) => {
503
+ provideExtensions(extensions);
504
+ });
505
+ }
506
+
507
+ function loadCommentingExtensions() {
508
+ return import( /* webpackPreload: true */'./extensions-c98269fd.js').then(({
509
+ extensions
510
+ }) => {
511
+ provideExtensions(extensions);
512
+ });
407
513
  }
408
- function hasHlsSupport(_ref) {
409
- var agent = _ref.agent,
410
- seed = _ref.seed;
514
+
515
+ async function loadDashUnlessHlsSupported(seed) {
516
+ if (!hasHlsSupport({
517
+ seed,
518
+ agent: browser.agent
519
+ })) {
520
+ await import('@videojs/http-streaming');
521
+ }
522
+ }
523
+ function hasHlsSupport({
524
+ agent,
525
+ seed
526
+ }) {
411
527
  return agent.matchesSafari() || agent.matchesMobilePlatform() && (!agent.matchesAndroid() || hlsHostSupportedByAndroid(seed));
412
528
  }
413
529
  function hlsHostSupportedByAndroid(seed) {
414
530
  return getFileUrlTemplateHost(seed, 'videoFiles', 'hls-playlist').indexOf('_') < 0;
415
531
  }
416
532
 
417
- var ActionButton = withInlineEditingAlternative('ActionButton', function ActionButton() {
533
+ const ActionButton = extensible('ActionButton', function ActionButton() {
418
534
  return null;
419
535
  });
420
536
 
421
- var styles = {"darkContentSurfaceColor":"var(--theme-dark-content-surface-color, #101010)","lightContentSurfaceColor":"var(--theme-light-content-surface-color, #fff)","darkContentTextColor":"var(--theme-dark-content-text-color, #222)","lightContentTextColor":"var(--theme-light-content-text-color, #fff)","contentColorScope":"colors-module_contentColorScope__2Zizr","root":"Figure-module_root__3FC-x colors-module_contentColorScope__2Zizr","invert":"Figure-module_invert___0BJP"};
537
+ var styles$1 = {"darkContentSurfaceColor":"var(--theme-dark-content-surface-color, #101010)","lightContentSurfaceColor":"var(--theme-light-content-surface-color, #fff)","darkContentTextColor":"var(--theme-dark-content-text-color, #222)","lightContentTextColor":"var(--theme-light-content-text-color, #fff)","contentColorScope":"colors-module_contentColorScope__2Zizr","root":"Figure-module_root__3FC-x colors-module_contentColorScope__2Zizr","invert":"Figure-module_invert___0BJP"};
538
+
539
+ var _jsxFileName$5 = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/Figure.js";
422
540
 
423
541
  /**
424
542
  * Render a figure with a caption text attached.
@@ -431,52 +549,64 @@ var styles = {"darkContentSurfaceColor":"var(--theme-dark-content-surface-color,
431
549
  * @param {boolean} [props.addCaptionButtonVisible=true] - Control visiblility of action button.
432
550
  * @param {string} [props.captionButtonPosition='outside'] - Position of action button.
433
551
  */
434
- function Figure(_ref) {
435
- var children = _ref.children,
436
- variant = _ref.variant,
437
- caption = _ref.caption,
438
- onCaptionChange = _ref.onCaptionChange,
439
- _ref$addCaptionButton = _ref.addCaptionButtonVisible,
440
- addCaptionButtonVisible = _ref$addCaptionButton === void 0 ? true : _ref$addCaptionButton,
441
- _ref$addCaptionButton2 = _ref.addCaptionButtonPosition,
442
- addCaptionButtonPosition = _ref$addCaptionButton2 === void 0 ? 'outside' : _ref$addCaptionButton2,
443
- renderInsideCaption = _ref.renderInsideCaption;
444
- var darkBackground = useDarkBackground();
445
- var _useContentElementEdi = useContentElementEditorState(),
446
- isSelected = _useContentElementEdi.isSelected,
447
- isEditable = _useContentElementEdi.isEditable;
448
- var _useState = useState(false),
449
- _useState2 = _slicedToArray(_useState, 2),
450
- isEditingCaption = _useState2[0],
451
- setIsEditingCaption = _useState2[1];
452
- var _useI18n = useI18n({
453
- locale: 'ui'
454
- }),
455
- t = _useI18n.t;
456
- var theme = useTheme();
457
- var captionAbove = theme.options.figureCaptionPosition === 'above';
458
- caption = useMemo(function () {
459
- return typeof caption === 'string' ? [{
460
- type: 'paragraph',
461
- children: [{
462
- text: caption
463
- }]
464
- }] : caption;
465
- }, [caption]);
552
+ function Figure({
553
+ children,
554
+ variant,
555
+ caption,
556
+ onCaptionChange,
557
+ addCaptionButtonVisible = true,
558
+ addCaptionButtonPosition = 'outside',
559
+ renderInsideCaption
560
+ }) {
561
+ const darkBackground = useDarkBackground();
562
+ const {
563
+ isSelected,
564
+ isEditable
565
+ } = useContentElementEditorState();
566
+ const [isEditingCaption, setIsEditingCaption] = useState(false);
567
+ const {
568
+ t
569
+ } = useI18n({
570
+ locale: 'ui'
571
+ });
572
+ const theme = useTheme();
573
+ const captionAbove = theme.options.figureCaptionPosition === 'above';
574
+ caption = useMemo(() => typeof caption === 'string' ? [{
575
+ type: 'paragraph',
576
+ children: [{
577
+ text: caption
578
+ }]
579
+ }] : caption, [caption]);
466
580
  if (!isBlankEditableTextValue(caption) || isEditable) {
467
581
  return /*#__PURE__*/React.createElement("figure", {
468
- className: classNames(styles.root, _defineProperty({}, styles.invert, !darkBackground))
582
+ className: classNames(styles$1.root, {
583
+ [styles$1.invert]: !darkBackground
584
+ }),
585
+ __self: this,
586
+ __source: {
587
+ fileName: _jsxFileName$5,
588
+ lineNumber: 49,
589
+ columnNumber: 7
590
+ }
469
591
  }, !captionAbove && children, isBlankEditableTextValue(caption) && isSelected && !isEditingCaption && addCaptionButtonVisible && /*#__PURE__*/React.createElement(ActionButton, {
470
592
  position: addCaptionButtonPosition,
471
593
  icon: "pencil",
472
594
  text: t('pageflow_scrolled.inline_editing.add_caption'),
473
- onClick: function onClick() {
474
- return setIsEditingCaption(true);
595
+ onClick: () => setIsEditingCaption(true),
596
+ __self: this,
597
+ __source: {
598
+ fileName: _jsxFileName$5,
599
+ lineNumber: 53,
600
+ columnNumber: 10
475
601
  }
476
602
  }), (!isBlankEditableTextValue(caption) || isEditingCaption) && /*#__PURE__*/React.createElement("figcaption", {
477
- className: classNames(variant && "scope-figureCaption-".concat(variant)),
478
- onBlur: function onBlur() {
479
- return setIsEditingCaption(false);
603
+ className: classNames(variant && `scope-figureCaption-${variant}`),
604
+ onBlur: () => setIsEditingCaption(false),
605
+ __self: this,
606
+ __source: {
607
+ fileName: _jsxFileName$5,
608
+ lineNumber: 59,
609
+ columnNumber: 10
480
610
  }
481
611
  }, renderInsideCaption === null || renderInsideCaption === void 0 ? void 0 : renderInsideCaption(), /*#__PURE__*/React.createElement(EditableText, {
482
612
  autoFocus: isEditingCaption,
@@ -485,14 +615,41 @@ function Figure(_ref) {
485
615
  onChange: onCaptionChange,
486
616
  onlyParagraphs: true,
487
617
  hyphens: "none",
488
- placeholder: t('pageflow_scrolled.inline_editing.type_text')
618
+ placeholder: t('pageflow_scrolled.inline_editing.type_text'),
619
+ __self: this,
620
+ __source: {
621
+ fileName: _jsxFileName$5,
622
+ lineNumber: 62,
623
+ columnNumber: 12
624
+ }
489
625
  })), captionAbove && children);
490
626
  } else {
491
627
  return children;
492
628
  }
493
629
  }
494
630
 
495
- var styles$1 = {"wrapper":"ContentElementBox-module_wrapper__3wZgP","full":"ContentElementBox-module_full__AfWPr","positioned":"ContentElementBox-module_positioned__3R1dq"};
631
+ var styles$2 = {"properties":"ContentElementBox-module_properties__1ljc9","wrapper":"ContentElementBox-module_wrapper__3wZgP","full":"ContentElementBox-module_full__AfWPr","positioned":"ContentElementBox-module_positioned__3R1dq"};
632
+
633
+ function contentElementBoxProps(configuration, {
634
+ borderRadius
635
+ } = {}) {
636
+ return {
637
+ className: styles$2.properties,
638
+ style: {
639
+ ...(borderRadius && borderRadius !== 'none' && {
640
+ '--content-element-box-border-radius': `var(--theme-content-element-box-border-radius-${borderRadius})`
641
+ }),
642
+ ...((configuration === null || configuration === void 0 ? void 0 : configuration.boxShadow) && {
643
+ '--content-element-box-shadow': `var(--theme-content-element-box-shadow-${configuration.boxShadow})`
644
+ }),
645
+ ...((configuration === null || configuration === void 0 ? void 0 : configuration.outlineColor) && {
646
+ '--content-element-box-outline-color': configuration.outlineColor
647
+ })
648
+ }
649
+ };
650
+ }
651
+
652
+ var _jsxFileName$6 = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/ContentElementBox.js";
496
653
 
497
654
  /**
498
655
  * Wrap content element that render a visible box in this component to
@@ -500,97 +657,148 @@ var styles$1 = {"wrapper":"ContentElementBox-module_wrapper__3wZgP","full":"Cont
500
657
  *
501
658
  * @param {Object} props
502
659
  * @param {string} props.children - Content of box.
503
- * @param {string} props.borderRadius - Border radius value from theme scale, or "none" to render no wrapper.
660
+ * @param {Object} [props.configuration] - Content element configuration. Used to read box shadow and outline styles.
661
+ * @param {string} [props.borderRadius] - Border radius value from theme scale, or "none" to render no wrapper.
504
662
  */
505
- function ContentElementBox(_ref) {
506
- var children = _ref.children,
507
- borderRadius = _ref.borderRadius,
508
- positioned = _ref.positioned;
509
- var _useContentElementAtt = useContentElementAttributes(),
510
- position = _useContentElementAtt.position,
511
- width = _useContentElementAtt.width;
512
- if (position === 'backdrop' || borderRadius === 'none') {
663
+ function ContentElementBox({
664
+ children,
665
+ configuration,
666
+ borderRadius,
667
+ positioned
668
+ }) {
669
+ const {
670
+ position,
671
+ width
672
+ } = useContentElementAttributes();
673
+ const {
674
+ style
675
+ } = contentElementBoxProps(configuration, {
676
+ borderRadius
677
+ });
678
+ if (position === 'backdrop') {
679
+ return children;
680
+ }
681
+ if (borderRadius === 'none' && !Object.keys(style).length) {
513
682
  return children;
514
683
  }
515
- var style = borderRadius ? {
516
- '--content-element-box-border-radius': "var(--theme-content-element-box-border-radius-".concat(borderRadius, ")")
517
- } : {};
518
684
  return /*#__PURE__*/React.createElement("div", {
519
- className: classNames(styles$1.wrapper, _defineProperty(_defineProperty({}, styles$1.full, width === widths.full), styles$1.positioned, positioned)),
520
- style: style
685
+ className: classNames(styles$2.properties, styles$2.wrapper, {
686
+ [styles$2.full]: width === widths.full,
687
+ [styles$2.positioned]: positioned
688
+ }),
689
+ style: style,
690
+ __self: this,
691
+ __source: {
692
+ fileName: _jsxFileName$6,
693
+ lineNumber: 33,
694
+ columnNumber: 5
695
+ }
521
696
  }, children);
522
697
  }
523
698
 
699
+ var _jsxFileName$7 = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/ContentElementFigure.js";
700
+
524
701
  /**
525
702
  * @param {Object} props
526
703
  * @param {Object} props.configuration - Configuration of the content element.
527
704
  * @param {string} props.children - Content of box.
528
705
  */
529
- function ContentElementFigure(_ref) {
530
- var configuration = _ref.configuration,
531
- children = _ref.children;
532
- var updateConfiguration = useContentElementConfigurationUpdate();
533
- var _useContentElementAtt = useContentElementAttributes(),
534
- width = _useContentElementAtt.width,
535
- position = _useContentElementAtt.position;
536
- var _useContentElementEdi = useContentElementEditorState(),
537
- isEditable = _useContentElementEdi.isEditable;
706
+ function ContentElementFigure({
707
+ configuration,
708
+ children
709
+ }) {
710
+ const updateConfiguration = useContentElementConfigurationUpdate();
711
+ const {
712
+ width,
713
+ position
714
+ } = useContentElementAttributes();
715
+ const {
716
+ isEditable
717
+ } = useContentElementEditorState();
538
718
  if (position === 'backdrop') {
539
719
  return children;
540
720
  }
541
721
  return /*#__PURE__*/React.createElement(Figure, {
542
722
  caption: configuration.caption,
543
723
  variant: configuration.captionVariant,
544
- renderInsideCaption: function renderInsideCaption() {
545
- return isEditable && /*#__PURE__*/React.createElement(HasCaptionTransientState, null);
546
- },
547
- onCaptionChange: function onCaptionChange(caption) {
548
- return updateConfiguration({
549
- caption: caption
550
- });
551
- },
552
- addCaptionButtonPosition: width === widths.full ? 'outsideIndented' : 'outside'
724
+ renderInsideCaption: () => isEditable && /*#__PURE__*/React.createElement(HasCaptionTransientState, {
725
+ __self: this,
726
+ __source: {
727
+ fileName: _jsxFileName$7,
728
+ lineNumber: 26,
729
+ columnNumber: 54
730
+ }
731
+ }),
732
+ onCaptionChange: caption => updateConfiguration({
733
+ caption
734
+ }),
735
+ addCaptionButtonPosition: width === widths.full ? 'outsideIndented' : 'outside',
736
+ __self: this,
737
+ __source: {
738
+ fileName: _jsxFileName$7,
739
+ lineNumber: 24,
740
+ columnNumber: 5
741
+ }
553
742
  }, children);
554
743
  }
555
744
  function HasCaptionTransientState() {
556
- var _useContentElementEdi2 = useContentElementEditorState(),
557
- setTransientState = _useContentElementEdi2.setTransientState;
558
- useEffect(function () {
745
+ const {
746
+ setTransientState
747
+ } = useContentElementEditorState();
748
+ useEffect(() => {
559
749
  setTransientState({
560
750
  hasCaption: true
561
751
  });
562
- return function () {
563
- return setTransientState({
564
- hasCaption: false
565
- });
566
- };
752
+ return () => setTransientState({
753
+ hasCaption: false
754
+ });
567
755
  }, [setTransientState]);
568
756
  return null;
569
757
  }
570
758
 
571
- function MediaInteractionTracking(_ref) {
572
- var playerState = _ref.playerState,
573
- playerActions = _ref.playerActions,
574
- idleDelay = _ref.idleDelay,
575
- children = _ref.children;
576
- var hideControlsTimeout = useRef();
577
- var wasPlaying = usePrevious(playerState.isPlaying);
578
- var focusWasInside = usePrevious(playerState.focusInsideControls);
579
- var setHideControlsTimeout = useCallback(function () {
759
+ function processImageModifiers(imageModifiers) {
760
+ const cropValue = getModifierValue(imageModifiers, 'crop');
761
+ const isCircleCrop = cropValue === 'circle';
762
+ return {
763
+ aspectRatio: isCircleCrop ? 'square' : cropValue,
764
+ rounded: isCircleCrop ? 'circle' : getModifierValue(imageModifiers, 'rounded')
765
+ };
766
+ }
767
+ function getModifierValue(imageModifiers, name) {
768
+ var _find;
769
+ return (_find = (imageModifiers || []).find(imageModifier => imageModifier.name === name)) === null || _find === void 0 ? void 0 : _find.value;
770
+ }
771
+
772
+ function useFileWithCropPosition(file, cropPosition) {
773
+ return file && {
774
+ ...file,
775
+ cropPosition
776
+ };
777
+ }
778
+
779
+ var _jsxFileName$8 = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/MediaInteractionTracking.js";
780
+ function MediaInteractionTracking({
781
+ playerState,
782
+ playerActions,
783
+ idleDelay,
784
+ children
785
+ }) {
786
+ const hideControlsTimeout = useRef();
787
+ const wasPlaying = usePrevious(playerState.isPlaying);
788
+ const focusWasInside = usePrevious(playerState.focusInsideControls);
789
+ const setHideControlsTimeout = useCallback(() => {
580
790
  clearTimeout(hideControlsTimeout.current);
581
791
  hideControlsTimeout.current = setTimeout(playerActions.userIdle, idleDelay);
582
792
  }, [playerActions.userIdle, idleDelay]);
583
- useEffect(function () {
793
+ useEffect(() => {
584
794
  if (!wasPlaying && playerState.isPlaying || focusWasInside !== playerState.focusInsideControls) {
585
795
  setHideControlsTimeout();
586
796
  }
587
797
  }, [wasPlaying, playerState.isPlaying, setHideControlsTimeout, playerState.focusInsideControls, focusWasInside]);
588
- useEffect(function () {
589
- return function () {
590
- return clearTimeout(hideControlsTimeout.current);
591
- };
798
+ useEffect(() => {
799
+ return () => clearTimeout(hideControlsTimeout.current);
592
800
  }, []);
593
- var handleInteraction = function handleInteraction() {
801
+ const handleInteraction = function () {
594
802
  playerActions.userInteraction();
595
803
  setHideControlsTimeout();
596
804
  };
@@ -598,29 +806,33 @@ function MediaInteractionTracking(_ref) {
598
806
  onClick: handleInteraction,
599
807
  onMouseMove: handleInteraction,
600
808
  onMouseEnter: playerActions.mouseEntered,
601
- onMouseLeave: playerActions.mouseLeft
809
+ onMouseLeave: playerActions.mouseLeft,
810
+ __self: this,
811
+ __source: {
812
+ fileName: _jsxFileName$8,
813
+ lineNumber: 32,
814
+ columnNumber: 5
815
+ }
602
816
  }, children);
603
817
  }
604
818
  MediaInteractionTracking.defaultProps = {
605
819
  idleDelay: 2000
606
820
  };
607
821
 
608
- function RemotePeakData(_ref) {
609
- var audioFile = _ref.audioFile,
610
- children = _ref.children;
611
- var peakDataUrl = audioFile === null || audioFile === void 0 ? void 0 : audioFile.urls.peakData;
612
- var _useState = useState('pending'),
613
- _useState2 = _slicedToArray(_useState, 2),
614
- peakData = _useState2[0],
615
- setPeakData = _useState2[1];
616
- useEffect(function () {
822
+ function RemotePeakData({
823
+ audioFile,
824
+ children
825
+ }) {
826
+ const peakDataUrl = audioFile === null || audioFile === void 0 ? void 0 : audioFile.urls.peakData;
827
+ const [peakData, setPeakData] = useState('pending');
828
+ useEffect(() => {
617
829
  if (peakDataUrl) {
618
- fetch(peakDataUrl).then(function (response) {
830
+ fetch(peakDataUrl).then(response => {
619
831
  if (!response.ok) {
620
- throw new Error("HTTP error ".concat(response.status, " while loading peaks."));
832
+ throw new Error(`HTTP error ${response.status} while loading peaks.`);
621
833
  }
622
834
  return response.json();
623
- }).then(function (peaks) {
835
+ }).then(peaks => {
624
836
  setPeakData(peaks.data);
625
837
  });
626
838
  } else {
@@ -634,16 +846,16 @@ function RemotePeakData(_ref) {
634
846
  }
635
847
  }
636
848
 
637
- var styles$2 = {"container":"Waveform-module_container__1Dxdv","clickMask":"Waveform-module_clickMask__3LYAT","menuBar":"Waveform-module_menuBar__342n-","menuBarInner":"Waveform-module_menuBarInner__3wjQs","timeDisplay":"Waveform-module_timeDisplay__1v4Tl","playControl":"Waveform-module_playControl__QWTsJ","waveWrapper":"Waveform-module_waveWrapper__3gamc"};
849
+ const defaultRemainingWaveformColor = '#828282ed';
850
+ const defaultRemainingWaveformColorInverted = 'rgba(0, 0, 0, 0.5)';
851
+ const defaultWaveformCursorColor = '#fff';
852
+ const defaultWaveformCursorColorInverted = '#888';
638
853
 
639
- var waveColor = '#828282ed';
640
- var waveColorInverted = 'rgba(0, 0, 0, 0.5)';
641
- var cursorColor = '#fff';
642
- var cursorColorInverted = '#888';
643
- var Wavesurfer = React.lazy(function () {
644
- return import('./Wavesurfer-1cdc3925.js');
645
- });
646
- var waveformStyles = {
854
+ var styles$3 = {"container":"Waveform-module_container__1Dxdv","clickMask":"Waveform-module_clickMask__3LYAT","menuBar":"Waveform-module_menuBar__342n-","menuBarInner":"Waveform-module_menuBarInner__3wjQs","timeDisplay":"Waveform-module_timeDisplay__1v4Tl","playControl":"Waveform-module_playControl__QWTsJ","invertPlayButton":"Waveform-module_invertPlayButton__kfCbL","waveWrapper":"Waveform-module_waveWrapper__3gamc"};
855
+
856
+ var _jsxFileName$9 = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/PlayerControls/WaveformPlayerControls/Waveform.js";
857
+ const Wavesurfer = React.lazy(() => import('./Wavesurfer-b753b838.js'));
858
+ const waveformStyles = {
647
859
  waveformLines: {
648
860
  barWidth: 1,
649
861
  barGap: 2
@@ -655,171 +867,282 @@ var waveformStyles = {
655
867
  }
656
868
  };
657
869
  function Waveform(props) {
658
- var _useState = useState(90),
659
- _useState2 = _slicedToArray(_useState, 2),
660
- height = _useState2[0],
661
- setHeight = _useState2[1];
870
+ const [height, setHeight] = useState(90);
662
871
  if (props.mediaElementId) {
663
872
  return /*#__PURE__*/React.createElement(Suspense, {
664
- fallback: /*#__PURE__*/React.createElement("div", null)
873
+ fallback: /*#__PURE__*/React.createElement("div", {
874
+ __self: this,
875
+ __source: {
876
+ fileName: _jsxFileName$9,
877
+ lineNumber: 34,
878
+ columnNumber: 27
879
+ }
880
+ }),
881
+ __self: this,
882
+ __source: {
883
+ fileName: _jsxFileName$9,
884
+ lineNumber: 34,
885
+ columnNumber: 7
886
+ }
665
887
  }, /*#__PURE__*/React.createElement(Measure, {
666
888
  client: true,
667
- onResize: function onResize(contentRect) {
668
- return setHeight(contentRect.client.height);
889
+ onResize: contentRect => setHeight(contentRect.client.height),
890
+ __self: this,
891
+ __source: {
892
+ fileName: _jsxFileName$9,
893
+ lineNumber: 35,
894
+ columnNumber: 9
669
895
  }
670
- }, function (_ref) {
671
- var measureRef = _ref.measureRef;
672
- return /*#__PURE__*/React.createElement("div", {
673
- ref: measureRef,
674
- className: styles$2.waveWrapper
675
- }, /*#__PURE__*/React.createElement(RemotePeakData, {
676
- audioFile: props.audioFile
677
- }, function (peakData) {
678
- return /*#__PURE__*/React.createElement(Wavesurfer, {
679
- key: props.variant,
680
- mediaElt: "#".concat(props.mediaElementId),
681
- audioPeaks: peakData,
682
- options: _objectSpread2(_objectSpread2({}, waveformStyles[props.variant]), {}, {
683
- normalize: true,
684
- removeMediaElementOnDestroy: false,
685
- hideScrollbar: true,
686
- progressColor: props.waveformColor || props.mainColor,
687
- waveColor: props.inverted ? waveColorInverted : waveColor,
688
- cursorColor: props.inverted ? cursorColorInverted : cursorColor,
689
- height: height
690
- })
691
- });
692
- }));
693
- }));
896
+ }, ({
897
+ measureRef
898
+ }) => /*#__PURE__*/React.createElement("div", {
899
+ ref: measureRef,
900
+ className: styles$3.waveWrapper,
901
+ __self: this,
902
+ __source: {
903
+ fileName: _jsxFileName$9,
904
+ lineNumber: 37,
905
+ columnNumber: 13
906
+ }
907
+ }, /*#__PURE__*/React.createElement(RemotePeakData, {
908
+ audioFile: props.audioFile,
909
+ __self: this,
910
+ __source: {
911
+ fileName: _jsxFileName$9,
912
+ lineNumber: 38,
913
+ columnNumber: 15
914
+ }
915
+ }, peakData => /*#__PURE__*/React.createElement(Wavesurfer, {
916
+ key: props.variant,
917
+ mediaElt: `#${props.mediaElementId}`,
918
+ audioPeaks: peakData,
919
+ options: {
920
+ ...waveformStyles[props.variant],
921
+ normalize: true,
922
+ removeMediaElementOnDestroy: false,
923
+ hideScrollbar: true,
924
+ progressColor: props.progressWaveformColor || props.mainColor,
925
+ waveColor: props.remainingWaveformColor || (props.inverted ? defaultRemainingWaveformColorInverted : defaultRemainingWaveformColor),
926
+ cursorColor: props.waveformCursorColor || (props.inverted ? defaultWaveformCursorColorInverted : defaultWaveformCursorColor),
927
+ height
928
+ },
929
+ __self: this,
930
+ __source: {
931
+ fileName: _jsxFileName$9,
932
+ lineNumber: 40,
933
+ columnNumber: 19
934
+ }
935
+ })))));
694
936
  } else {
695
937
  return null;
696
938
  }
697
939
  }
698
940
 
699
- var styles$3 = {"timeDisplay":"TimeDisplay-module_timeDisplay__2UwqM","time":"TimeDisplay-module_time__li1ZU"};
941
+ var styles$4 = {"timeDisplay":"TimeDisplay-module_timeDisplay__2UwqM","time":"TimeDisplay-module_time__li1ZU"};
700
942
 
701
- var unknownTimePlaceholder = '-:--';
943
+ const unknownTimePlaceholder = '-:--';
702
944
  function formatTime(value) {
703
945
  if (isNaN(value)) {
704
946
  return unknownTimePlaceholder;
705
947
  }
706
- var seconds = Math.floor(value) % 60;
707
- var minutes = Math.floor(value / 60) % 60;
708
- var hours = Math.floor(value / 60 / 60);
948
+ const seconds = Math.floor(value) % 60;
949
+ const minutes = Math.floor(value / 60) % 60;
950
+ const hours = Math.floor(value / 60 / 60);
709
951
  if (hours > 0) {
710
- return "".concat(hours, ":").concat(pad(minutes), ":").concat(pad(seconds));
952
+ return `${hours}:${pad(minutes)}:${pad(seconds)}`;
711
953
  } else {
712
- return "".concat(minutes, ":").concat(pad(seconds));
954
+ return `${minutes}:${pad(seconds)}`;
713
955
  }
714
956
  }
715
957
  function pad(value) {
716
958
  return value < 10 ? '0' + value : value;
717
959
  }
718
960
 
961
+ var _jsxFileName$a = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/PlayerControls/TimeDisplay.js";
719
962
  function TimeDisplay(props) {
720
963
  return /*#__PURE__*/React.createElement("div", {
721
964
  "data-testid": 'time-display',
722
- className: styles$3.timeDisplay
965
+ className: styles$4.timeDisplay,
966
+ __self: this,
967
+ __source: {
968
+ fileName: _jsxFileName$a,
969
+ lineNumber: 8,
970
+ columnNumber: 5
971
+ }
723
972
  }, /*#__PURE__*/React.createElement("span", {
724
- className: styles$3.time
973
+ className: styles$4.time,
974
+ __self: this,
975
+ __source: {
976
+ fileName: _jsxFileName$a,
977
+ lineNumber: 9,
978
+ columnNumber: 7
979
+ }
725
980
  }, formatTime(props.currentTime)), "/", /*#__PURE__*/React.createElement("span", {
726
- className: styles$3.time
981
+ className: styles$4.time,
982
+ __self: this,
983
+ __source: {
984
+ fileName: _jsxFileName$a,
985
+ lineNumber: 11,
986
+ columnNumber: 7
987
+ }
727
988
  }, formatTime(props.duration)));
728
989
  }
729
990
 
730
- var styles$4 = {"wrapper":"MenuBarButton-module_wrapper__2lFoI","button":"MenuBarButton-module_button__2sY0F ControlBar-module_button___4aXE utils-module_unstyledButton__3rgne","subMenuItemAnnotation":"MenuBarButton-module_subMenuItemAnnotation__32Quc","subMenu":"MenuBarButton-module_subMenu__f-E-X","subMenuExpanded":"MenuBarButton-module_subMenuExpanded__2UvkJ","subMenuItem":"MenuBarButton-module_subMenuItem__1pyn_","subMenuItemButton":"MenuBarButton-module_subMenuItemButton__2QnUz utils-module_unstyledButton__3rgne"};
991
+ var styles$5 = {"wrapper":"MenuBarButton-module_wrapper__2lFoI","button":"MenuBarButton-module_button__2sY0F ControlBar-module_button___4aXE utils-module_unstyledButton__3rgne","subMenuItemAnnotation":"MenuBarButton-module_subMenuItemAnnotation__32Quc","subMenu":"MenuBarButton-module_subMenu__f-E-X","subMenuExpanded":"MenuBarButton-module_subMenuExpanded__2UvkJ","subMenuItem":"MenuBarButton-module_subMenuItem__1pyn_","subMenuItemButton":"MenuBarButton-module_subMenuItemButton__2QnUz utils-module_unstyledButton__3rgne"};
731
992
 
993
+ var _jsxFileName$b = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/PlayerControls/MenuBarButton.js";
732
994
  function MenuBarButton(props) {
733
- var subMenuItems = props.subMenuItems,
734
- onClick = props.onClick;
735
- var _useState = useState(props.subMenuExpanded),
736
- _useState2 = _slicedToArray(_useState, 2),
737
- subMenuExpanded = _useState2[0],
738
- setSubMenuExpanded = _useState2[1];
739
- var closeMenuTimeout = useRef();
740
- var openMenu = useCallback(function () {
995
+ const {
996
+ subMenuItems,
997
+ onClick
998
+ } = props;
999
+ const [subMenuExpanded, setSubMenuExpanded] = useState(props.subMenuExpanded);
1000
+ const closeMenuTimeout = useRef();
1001
+ const openMenu = useCallback(() => {
741
1002
  if (subMenuItems.length > 0) {
742
1003
  setSubMenuExpanded(true);
743
1004
  }
744
1005
  }, [subMenuItems.length]);
745
- var closeMenu = useCallback(function () {
1006
+ const closeMenu = useCallback(() => {
746
1007
  setSubMenuExpanded(false);
747
1008
  }, []);
748
- var onButtonClick = useCallback(function (event) {
1009
+ const onButtonClick = useCallback(event => {
749
1010
  openMenu();
750
1011
  if (onClick) {
751
1012
  onClick();
752
1013
  }
753
1014
  }, [onClick, openMenu]);
754
- var onFocus = useCallback(function () {
1015
+ const onFocus = useCallback(() => {
755
1016
  clearTimeout(closeMenuTimeout.current);
756
1017
  }, []);
757
- var onBlur = useCallback(function () {
1018
+ const onBlur = useCallback(() => {
758
1019
  clearTimeout(closeMenuTimeout.current);
759
- closeMenuTimeout.current = setTimeout(function () {
1020
+ closeMenuTimeout.current = setTimeout(() => {
760
1021
  setSubMenuExpanded(false);
761
1022
  }, 100);
762
1023
  }, []);
763
- var onKeyDown = useCallback(function (event) {
1024
+ const onKeyDown = useCallback(event => {
764
1025
  if (event.key === 'Escape') {
765
1026
  setSubMenuExpanded(false);
766
1027
  }
767
1028
  }, []);
768
1029
  return /*#__PURE__*/React.createElement("div", {
769
- className: classNames(_defineProperty({}, styles$4.subMenuExpanded, subMenuExpanded), styles$4.wrapper),
1030
+ className: classNames({
1031
+ [styles$5.subMenuExpanded]: subMenuExpanded
1032
+ }, styles$5.wrapper),
770
1033
  onMouseEnter: openMenu,
771
1034
  onMouseLeave: closeMenu,
772
1035
  onFocus: onFocus,
773
1036
  onBlur: onBlur,
774
- onKeyDown: onKeyDown
1037
+ onKeyDown: onKeyDown,
1038
+ __self: this,
1039
+ __source: {
1040
+ fileName: _jsxFileName$b,
1041
+ lineNumber: 53,
1042
+ columnNumber: 5
1043
+ }
775
1044
  }, /*#__PURE__*/React.createElement("button", {
776
- className: styles$4.button,
1045
+ className: styles$5.button,
777
1046
  title: props.title,
778
- onClick: onButtonClick
1047
+ onClick: onButtonClick,
1048
+ __self: this,
1049
+ __source: {
1050
+ fileName: _jsxFileName$b,
1051
+ lineNumber: 59,
1052
+ columnNumber: 7
1053
+ }
779
1054
  }, /*#__PURE__*/React.createElement(ThemeIcon, {
780
- name: props.icon
1055
+ name: props.icon,
1056
+ __self: this,
1057
+ __source: {
1058
+ fileName: _jsxFileName$b,
1059
+ lineNumber: 62,
1060
+ columnNumber: 9
1061
+ }
781
1062
  })), renderSubMenu(props, closeMenu));
782
1063
  }
1064
+ MenuBarButton.propTypes = {
1065
+ title: PropTypes.string,
1066
+ icon: PropTypes.string,
1067
+ subMenuItems: PropTypes.arrayOf(PropTypes.shape({
1068
+ label: PropTypes.string.isRequired,
1069
+ value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
1070
+ annotation: PropTypes.string,
1071
+ active: PropTypes.bool
1072
+ })),
1073
+ onClick: PropTypes.func,
1074
+ onSubMenuItemClick: PropTypes.func
1075
+ };
783
1076
  MenuBarButton.defaultProps = {
784
1077
  subMenuItems: []
785
1078
  };
786
1079
  function renderSubMenu(props, closeMenu) {
787
1080
  if (props.subMenuItems.length > 0) {
788
1081
  return /*#__PURE__*/React.createElement("ul", {
789
- className: styles$4.subMenu,
790
- role: "menu"
1082
+ className: styles$5.subMenu,
1083
+ role: "menu",
1084
+ __self: this,
1085
+ __source: {
1086
+ fileName: _jsxFileName$b,
1087
+ lineNumber: 94,
1088
+ columnNumber: 7
1089
+ }
791
1090
  }, renderSubMenuItems(props, closeMenu));
792
1091
  }
793
1092
  }
794
1093
  function renderSubMenuItems(props, closeMenu) {
795
- return props.subMenuItems.map(function (item) {
1094
+ return props.subMenuItems.map(item => {
796
1095
  return /*#__PURE__*/React.createElement("li", {
797
- className: styles$4.subMenuItem,
798
- key: item.value
1096
+ className: styles$5.subMenuItem,
1097
+ key: item.value,
1098
+ __self: this,
1099
+ __source: {
1100
+ fileName: _jsxFileName$b,
1101
+ lineNumber: 104,
1102
+ columnNumber: 7
1103
+ }
799
1104
  }, /*#__PURE__*/React.createElement("button", {
800
- className: styles$4.subMenuItemButton,
1105
+ className: styles$5.subMenuItemButton,
801
1106
  role: "menuitemradio",
802
1107
  "aria-checked": item.active,
803
- onClick: subMenuItemClickHandler(props, item.value, closeMenu)
1108
+ onClick: subMenuItemClickHandler(props, item.value, closeMenu),
1109
+ __self: this,
1110
+ __source: {
1111
+ fileName: _jsxFileName$b,
1112
+ lineNumber: 105,
1113
+ columnNumber: 9
1114
+ }
804
1115
  }, renderSubMenuItemIcon(item), item.label, renderSubMenuItemAnnotation(props, item)));
805
1116
  });
806
1117
  }
807
1118
  function renderSubMenuItemIcon(item) {
808
1119
  if (item.active) {
809
1120
  return /*#__PURE__*/React.createElement(ThemeIcon, {
810
- name: "checked"
1121
+ name: "checked",
1122
+ __self: this,
1123
+ __source: {
1124
+ fileName: _jsxFileName$b,
1125
+ lineNumber: 122,
1126
+ columnNumber: 7
1127
+ }
811
1128
  });
812
1129
  }
813
1130
  }
814
1131
  function renderSubMenuItemAnnotation(props, item) {
815
1132
  if (item.annotation) {
816
1133
  return /*#__PURE__*/React.createElement("span", {
817
- className: styles$4.subMenuItemAnnotation
1134
+ className: styles$5.subMenuItemAnnotation,
1135
+ __self: this,
1136
+ __source: {
1137
+ fileName: _jsxFileName$b,
1138
+ lineNumber: 130,
1139
+ columnNumber: 7
1140
+ }
818
1141
  }, item.annotation);
819
1142
  }
820
1143
  }
821
1144
  function subMenuItemClickHandler(props, value, closeMenu) {
822
- return function (event) {
1145
+ return event => {
823
1146
  event.preventDefault();
824
1147
  closeMenu();
825
1148
  if (props.onSubMenuItemClick) {
@@ -828,9 +1151,11 @@ function subMenuItemClickHandler(props, value, closeMenu) {
828
1151
  };
829
1152
  }
830
1153
 
1154
+ var _jsxFileName$c = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/PlayerControls/TextTracksMenu.js";
831
1155
  function TextTracksMenu(props) {
832
- var _useI18n = useI18n(),
833
- t = _useI18n.t;
1156
+ const {
1157
+ t
1158
+ } = useI18n();
834
1159
  if (props.items.length < 2) {
835
1160
  return null;
836
1161
  }
@@ -838,149 +1163,336 @@ function TextTracksMenu(props) {
838
1163
  title: t('pageflow_scrolled.public.player_controls.text_tracks'),
839
1164
  icon: "textTracks",
840
1165
  subMenuItems: props.items,
841
- onSubMenuItemClick: props.onItemClick
1166
+ onSubMenuItemClick: props.onItemClick,
1167
+ __self: this,
1168
+ __source: {
1169
+ fileName: _jsxFileName$c,
1170
+ lineNumber: 15,
1171
+ columnNumber: 5
1172
+ }
842
1173
  });
843
1174
  }
1175
+ TextTracksMenu.propTypes = {
1176
+ items: MenuBarButton.propTypes.subMenuItems,
1177
+ onMenuItemClick: PropTypes.func
1178
+ };
844
1179
  TextTracksMenu.defaultProps = {
845
1180
  items: []
846
1181
  };
847
1182
 
848
- var styles$5 = {"container":"ControlBar-module_container__1GH64","sticky":"ControlBar-module_sticky__6qVoI","lightBackground":"ControlBar-module_lightBackground__3-tGf","darkBackground":"ControlBar-module_darkBackground__31Wv7","controlBarContainer":"ControlBar-module_controlBarContainer__1cxRO","inset":"ControlBar-module_inset__JvBh9","controlBarInner":"ControlBar-module_controlBarInner__39fE9","fadedOut":"ControlBar-module_fadedOut__2sP_3","button":"ControlBar-module_button___4aXE utils-module_unstyledButton__3rgne","playControl":"ControlBar-module_playControl__Vg5et ControlBar-module_button___4aXE utils-module_unstyledButton__3rgne"};
1183
+ var styles$6 = {"container":"ControlBar-module_container__1GH64","sticky":"ControlBar-module_sticky__6qVoI","lightBackground":"ControlBar-module_lightBackground__3-tGf","darkBackground":"ControlBar-module_darkBackground__31Wv7","controlBarContainer":"ControlBar-module_controlBarContainer__1cxRO","inset":"ControlBar-module_inset__JvBh9","controlBarInner":"ControlBar-module_controlBarInner__39fE9","fadedOut":"ControlBar-module_fadedOut__2sP_3","button":"ControlBar-module_button___4aXE utils-module_unstyledButton__3rgne","playControl":"ControlBar-module_playControl__Vg5et ControlBar-module_button___4aXE utils-module_unstyledButton__3rgne"};
849
1184
 
1185
+ var _jsxFileName$d = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/PlayerControls/PlayPauseButton.js";
850
1186
  function PlayPauseButton(props) {
851
- var _useI18n = useI18n(),
852
- t = _useI18n.t;
1187
+ const {
1188
+ t
1189
+ } = useI18n();
853
1190
  return /*#__PURE__*/React.createElement("button", {
854
- className: styles$5.playControl,
1191
+ className: styles$6.playControl,
855
1192
  "aria-label": t(props.isPlaying ? 'pause' : 'play', {
856
1193
  scope: 'pageflow_scrolled.public.player_controls'
857
1194
  }),
858
- onClick: function onClick() {
859
- return props.isPlaying ? props.pause({
860
- via: 'playPauseButton'
861
- }) : props.play({
862
- via: 'playPauseButton'
863
- });
1195
+ onClick: () => props.isPlaying ? props.pause({
1196
+ via: 'playPauseButton'
1197
+ }) : props.play({
1198
+ via: 'playPauseButton'
1199
+ }),
1200
+ __self: this,
1201
+ __source: {
1202
+ fileName: _jsxFileName$d,
1203
+ lineNumber: 10,
1204
+ columnNumber: 5
864
1205
  }
865
1206
  }, pausePlayIcon(props));
866
1207
  }
867
1208
  function pausePlayIcon(props) {
868
1209
  if (props.isPlaying) {
869
1210
  return /*#__PURE__*/React.createElement(ThemeIcon, {
870
- name: "pause"
1211
+ name: "pause",
1212
+ __self: this,
1213
+ __source: {
1214
+ fileName: _jsxFileName$d,
1215
+ lineNumber: 23,
1216
+ columnNumber: 12
1217
+ }
871
1218
  });
872
1219
  } else {
873
1220
  return /*#__PURE__*/React.createElement(ThemeIcon, {
874
- name: "play"
1221
+ name: "play",
1222
+ __self: this,
1223
+ __source: {
1224
+ fileName: _jsxFileName$d,
1225
+ lineNumber: 25,
1226
+ columnNumber: 12
1227
+ }
875
1228
  });
876
1229
  }
877
1230
  }
878
1231
 
1232
+ var _jsxFileName$e = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/PlayerControls/WaveformPlayerControls/index.js";
879
1233
  function WaveformPlayerControls(props) {
880
1234
  var _theme$options$proper, _theme$options$proper2, _theme$options$colors;
881
- var darkBackground = useDarkBackground();
882
- var theme = useTheme();
1235
+ const darkBackground = useDarkBackground();
1236
+ const theme = useTheme();
883
1237
  return /*#__PURE__*/React.createElement("div", {
884
1238
  onFocus: props.onFocus,
885
1239
  onBlur: props.onBlur,
886
1240
  onMouseEnter: props.onMouseEnter,
887
1241
  onMouseLeave: props.onMouseLeave,
888
1242
  "data-testid": "waveform-controls",
889
- className: classNames(styles$2.container)
1243
+ className: classNames(styles$3.container),
1244
+ __self: this,
1245
+ __source: {
1246
+ fileName: _jsxFileName$e,
1247
+ lineNumber: 20,
1248
+ columnNumber: 5
1249
+ }
890
1250
  }, props.children, /*#__PURE__*/React.createElement("div", {
891
- className: styles$2.clickMask,
892
- onClick: props.onPlayerClick
1251
+ className: styles$3.clickMask,
1252
+ onClick: props.onPlayerClick,
1253
+ __self: this,
1254
+ __source: {
1255
+ fileName: _jsxFileName$e,
1256
+ lineNumber: 27,
1257
+ columnNumber: 7
1258
+ }
893
1259
  }), /*#__PURE__*/React.createElement(Waveform, {
894
1260
  audioFile: props.file,
895
1261
  isPlaying: props.isPlaying,
896
1262
  inverted: !darkBackground,
897
1263
  variant: props.variant,
898
- waveformColor: props.waveformColor,
1264
+ progressWaveformColor: props.waveformColor,
1265
+ remainingWaveformColor: props.remainingWaveformColor,
1266
+ waveformCursorColor: props.waveformCursorColor,
899
1267
  mainColor: ((_theme$options$proper = theme.options.properties) === null || _theme$options$proper === void 0 ? void 0 : (_theme$options$proper2 = _theme$options$proper.root) === null || _theme$options$proper2 === void 0 ? void 0 : _theme$options$proper2.accentColor) || ((_theme$options$colors = theme.options.colors) === null || _theme$options$colors === void 0 ? void 0 : _theme$options$colors.accent),
900
1268
  play: props.play,
901
1269
  pause: props.pause,
902
- mediaElementId: props.mediaElementId
1270
+ mediaElementId: props.mediaElementId,
1271
+ __self: this,
1272
+ __source: {
1273
+ fileName: _jsxFileName$e,
1274
+ lineNumber: 28,
1275
+ columnNumber: 7
1276
+ }
903
1277
  }), /*#__PURE__*/React.createElement("div", {
904
- className: styles$2.playControl
1278
+ className: classNames(styles$3.playControl, {
1279
+ [styles$3.invertPlayButton]: props.invertPlayButton
1280
+ }),
1281
+ __self: this,
1282
+ __source: {
1283
+ fileName: _jsxFileName$e,
1284
+ lineNumber: 40,
1285
+ columnNumber: 7
1286
+ }
905
1287
  }, /*#__PURE__*/React.createElement(PlayPauseButton, {
906
1288
  isPlaying: props.isPlaying,
907
1289
  play: props.play,
908
- pause: props.pause
1290
+ pause: props.pause,
1291
+ __self: this,
1292
+ __source: {
1293
+ fileName: _jsxFileName$e,
1294
+ lineNumber: 42,
1295
+ columnNumber: 9
1296
+ }
909
1297
  })), /*#__PURE__*/React.createElement("div", {
910
- className: classNames(styles$2.menuBar, darkBackground ? styles$5.darkBackground : styles$5.lightBackground, _defineProperty({}, styles$5.inset, !props.standAlone))
1298
+ className: classNames(styles$3.menuBar, darkBackground ? styles$6.darkBackground : styles$6.lightBackground, {
1299
+ [styles$6.inset]: !props.standAlone
1300
+ }),
1301
+ __self: this,
1302
+ __source: {
1303
+ fileName: _jsxFileName$e,
1304
+ lineNumber: 46,
1305
+ columnNumber: 7
1306
+ }
911
1307
  }, /*#__PURE__*/React.createElement("div", {
912
- className: styles$2.menuBarInner
1308
+ className: styles$3.menuBarInner,
1309
+ __self: this,
1310
+ __source: {
1311
+ fileName: _jsxFileName$e,
1312
+ lineNumber: 49,
1313
+ columnNumber: 9
1314
+ }
913
1315
  }, /*#__PURE__*/React.createElement(TimeDisplay, {
914
1316
  currentTime: props.currentTime,
915
- duration: props.duration
1317
+ duration: props.duration,
1318
+ __self: this,
1319
+ __source: {
1320
+ fileName: _jsxFileName$e,
1321
+ lineNumber: 50,
1322
+ columnNumber: 11
1323
+ }
916
1324
  }), /*#__PURE__*/React.createElement(TextTracksMenu, {
917
1325
  items: props.textTracksMenuItems,
918
- onItemClick: props.onTextTracksMenuItemClick
1326
+ onItemClick: props.onTextTracksMenuItemClick,
1327
+ __self: this,
1328
+ __source: {
1329
+ fileName: _jsxFileName$e,
1330
+ lineNumber: 52,
1331
+ columnNumber: 11
1332
+ }
919
1333
  })), /*#__PURE__*/React.createElement(InlineFileRights, {
920
1334
  items: props.inlineFileRightsItems,
921
1335
  context: "playerControls",
922
1336
  playerControlsFadedOut: false,
923
- playerControlsStandAlone: props.standAlone
1337
+ playerControlsStandAlone: props.standAlone,
1338
+ __self: this,
1339
+ __source: {
1340
+ fileName: _jsxFileName$e,
1341
+ lineNumber: 55,
1342
+ columnNumber: 9
1343
+ }
924
1344
  })));
925
1345
  }
926
1346
 
927
- var styles$6 = {"container":"BigPlayPauseButton-module_container__19sKj","fadeOutDelay":"BigPlayPauseButton-module_fadeOutDelay__yoaW6","pointerCursor":"BigPlayPauseButton-module_pointerCursor__2A55P","hideCursor":"BigPlayPauseButton-module_hideCursor__2Hyys","button":"BigPlayPauseButton-module_button__10g4Q utils-module_unstyledButton__3rgne","hidden":"BigPlayPauseButton-module_hidden__1KUzr","animated":"BigPlayPauseButton-module_animated__1MMNq","fadeOut":"BigPlayPauseButton-module_fadeOut__2vcA_","fadeIn":"BigPlayPauseButton-module_fadeIn__1Ge1-"};
1347
+ var styles$7 = {"container":"BigPlayPauseButton-module_container__19sKj","fadeOutDelay":"BigPlayPauseButton-module_fadeOutDelay__yoaW6","pointerCursor":"BigPlayPauseButton-module_pointerCursor__2A55P","hideCursor":"BigPlayPauseButton-module_hideCursor__2Hyys","button":"BigPlayPauseButton-module_button__10g4Q utils-module_unstyledButton__3rgne","hidden":"BigPlayPauseButton-module_hidden__1KUzr","animated":"BigPlayPauseButton-module_animated__1MMNq","fadeOut":"BigPlayPauseButton-module_fadeOut__2vcA_","fadeIn":"BigPlayPauseButton-module_fadeIn__1Ge1-"};
1348
+
1349
+ function useFocusHandoff() {
1350
+ const ref1 = useRef();
1351
+ const ref2 = useRef();
1352
+ return [{
1353
+ sourceRef: ref1,
1354
+ targetRef: ref2,
1355
+ name: 'A'
1356
+ }, {
1357
+ sourceRef: ref2,
1358
+ targetRef: ref1,
1359
+ name: 'B'
1360
+ }];
1361
+ }
1362
+ function usePassFocus(inert, {
1363
+ name,
1364
+ sourceRef,
1365
+ targetRef
1366
+ }) {
1367
+ const hasFocusRef = useRef();
1368
+ const passFocusRef = useRef();
1369
+ const setSourceRef = useCallback(source => {
1370
+ if (sourceRef.current) {
1371
+ sourceRef.current.removeEventListener('focusin', updateHasFocus);
1372
+ sourceRef.current.removeEventListener('focusout', updateHasFocus);
1373
+ }
1374
+ sourceRef.current = source;
1375
+ if (sourceRef.current) {
1376
+ sourceRef.current.addEventListener('focusin', updateHasFocus);
1377
+ sourceRef.current.addEventListener('focusout', updateHasFocus);
1378
+ }
1379
+ function updateHasFocus(event) {
1380
+ hasFocusRef.current = event.type === 'focusin';
1381
+ }
1382
+ }, [sourceRef]);
1383
+ if (inert && hasFocusRef.current && !passFocusRef.current) {
1384
+ passFocusRef.current = true;
1385
+ }
1386
+ useEffect(() => {
1387
+ if (inert && passFocusRef.current && targetRef.current) {
1388
+ passFocusRef.current = false;
1389
+ if (targetRef.current.tagName === 'BUTTON') {
1390
+ targetRef.current.focus();
1391
+ } else {
1392
+ targetRef.current.querySelector('button').focus();
1393
+ }
1394
+ }
1395
+ }, [inert, targetRef, name]);
1396
+ return setSourceRef;
1397
+ }
928
1398
 
1399
+ var _jsxFileName$f = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/PlayerControls/ClassicPlayerControls/BigPlayPauseButton.js";
929
1400
  function BigPlayPauseButton(props) {
930
- var c = classNames(styles$6.button, _defineProperty(_defineProperty(_defineProperty({}, styles$6.hidden, props.hidden || props.lastControlledVia === 'playPauseButton'), styles$6.fadeIn, props.unplayed), styles$6.animated, !props.unplayed));
1401
+ const {
1402
+ t
1403
+ } = useI18n();
1404
+ const c = classNames(styles$7.button, {
1405
+ [styles$7.hidden]: props.hidden || props.lastControlledVia === 'playPauseButton',
1406
+ [styles$7.fadeIn]: props.unplayed,
1407
+ [styles$7.animated]: !props.unplayed
1408
+ });
1409
+ const inert = props.hidden || !props.unplayed;
1410
+ const ref = usePassFocus(inert, props.focusHandoff);
931
1411
  return /*#__PURE__*/React.createElement("div", {
932
- className: classNames(styles$6.container, _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, styles$6.hideCursor, props.hideCursor), styles$6.hidden, props.fadedOut), styles$6.fadeOutDelay, props.isPlaying), styles$6.pointerCursor, !!props.onClick)),
933
- onClick: props.onClick
934
- }, /*#__PURE__*/React.createElement("div", {
1412
+ className: classNames(styles$7.container, {
1413
+ [styles$7.hideCursor]: props.hideCursor,
1414
+ [styles$7.hidden]: props.fadedOut,
1415
+ [styles$7.fadeOutDelay]: props.isPlaying,
1416
+ [styles$7.pointerCursor]: !!props.onClick
1417
+ }),
1418
+ onClick: props.onClick,
1419
+ __self: this,
1420
+ __source: {
1421
+ fileName: _jsxFileName$f,
1422
+ lineNumber: 23,
1423
+ columnNumber: 5
1424
+ }
1425
+ }, /*#__PURE__*/React.createElement("button", {
935
1426
  key: props.isPlaying,
936
- className: c
1427
+ ref: ref,
1428
+ className: c,
1429
+ "aria-label": t('pageflow_scrolled.public.player_controls.play'),
1430
+ inert: inert ? 'true' : undefined,
1431
+ __self: this,
1432
+ __source: {
1433
+ fileName: _jsxFileName$f,
1434
+ lineNumber: 29,
1435
+ columnNumber: 7
1436
+ }
937
1437
  }, pausePlayIcon$1(props)));
938
1438
  }
939
1439
  function pausePlayIcon$1(props) {
940
1440
  if (props.unplayed || props.isPlaying) {
941
1441
  return /*#__PURE__*/React.createElement(ThemeIcon, {
942
- name: "play"
1442
+ name: "play",
1443
+ __self: this,
1444
+ __source: {
1445
+ fileName: _jsxFileName$f,
1446
+ lineNumber: 42,
1447
+ columnNumber: 12
1448
+ }
943
1449
  });
944
1450
  } else {
945
1451
  return /*#__PURE__*/React.createElement(ThemeIcon, {
946
- name: "pause"
1452
+ name: "pause",
1453
+ __self: this,
1454
+ __source: {
1455
+ fileName: _jsxFileName$f,
1456
+ lineNumber: 45,
1457
+ columnNumber: 12
1458
+ }
947
1459
  });
948
1460
  }
949
1461
  }
950
1462
 
951
- var styles$7 = {"container":"ProgressIndicators-module_container__1QiQJ","wrapper":"ProgressIndicators-module_wrapper__2PCVv","draggable":"ProgressIndicators-module_draggable__1iAE8","bars":"ProgressIndicators-module_bars__2-ddd","progressBar":"ProgressIndicators-module_progressBar__2PYn-","background":"ProgressIndicators-module_background__-x5f_ ProgressIndicators-module_progressBar__2PYn-","loadingProgressBar":"ProgressIndicators-module_loadingProgressBar__YD2GH ProgressIndicators-module_progressBar__2PYn-","playProgressBar":"ProgressIndicators-module_playProgressBar__3mCSX ProgressIndicators-module_progressBar__2PYn-","sliderHandle":"ProgressIndicators-module_sliderHandle__3ArIf","dragging":"ProgressIndicators-module_dragging__3yY3t"};
952
-
953
- function ProgressIndicators(_ref) {
954
- var currentTime = _ref.currentTime,
955
- duration = _ref.duration,
956
- bufferedEnd = _ref.bufferedEnd,
957
- scrubTo = _ref.scrubTo,
958
- seekTo = _ref.seekTo;
959
- var _useI18n = useI18n(),
960
- t = _useI18n.t;
961
- var _useState = useState(),
962
- _useState2 = _slicedToArray(_useState, 2),
963
- dragging = _useState2[0],
964
- setDragging = _useState2[1];
965
- var progressBarsContainerWidth = useRef();
966
- var positionToTime = useCallback(function (x) {
1463
+ var styles$8 = {"container":"ProgressIndicators-module_container__1QiQJ","wrapper":"ProgressIndicators-module_wrapper__2PCVv","draggable":"ProgressIndicators-module_draggable__1iAE8","bars":"ProgressIndicators-module_bars__2-ddd","progressBar":"ProgressIndicators-module_progressBar__2PYn-","background":"ProgressIndicators-module_background__-x5f_ ProgressIndicators-module_progressBar__2PYn-","loadingProgressBar":"ProgressIndicators-module_loadingProgressBar__YD2GH ProgressIndicators-module_progressBar__2PYn-","playProgressBar":"ProgressIndicators-module_playProgressBar__3mCSX ProgressIndicators-module_progressBar__2PYn-","sliderHandle":"ProgressIndicators-module_sliderHandle__3ArIf","dragging":"ProgressIndicators-module_dragging__3yY3t"};
1464
+
1465
+ var _jsxFileName$g = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/PlayerControls/ClassicPlayerControls/ProgressIndicators.js";
1466
+ function ProgressIndicators({
1467
+ currentTime,
1468
+ duration,
1469
+ bufferedEnd,
1470
+ scrubTo,
1471
+ seekTo
1472
+ }) {
1473
+ const {
1474
+ t
1475
+ } = useI18n();
1476
+ const [dragging, setDragging] = useState();
1477
+ const progressBarsContainerWidth = useRef();
1478
+ const positionToTime = useCallback(x => {
967
1479
  if (duration && progressBarsContainerWidth.current) {
968
- var fraction = Math.max(0, Math.min(1, x / progressBarsContainerWidth.current));
1480
+ const fraction = Math.max(0, Math.min(1, x / progressBarsContainerWidth.current));
969
1481
  return fraction * duration;
970
1482
  } else {
971
1483
  return 0;
972
1484
  }
973
1485
  }, [duration]);
974
- var handleStop = useCallback(function (mouseEvent, dragEvent) {
1486
+ const handleStop = useCallback((mouseEvent, dragEvent) => {
975
1487
  setDragging(false);
976
1488
  seekTo(positionToTime(dragEvent.x));
977
1489
  }, [seekTo, positionToTime]);
978
- var handleDrag = useCallback(function (mouseEvent, dragEvent) {
1490
+ const handleDrag = useCallback((mouseEvent, dragEvent) => {
979
1491
  setDragging(true);
980
1492
  scrubTo(positionToTime(dragEvent.x));
981
1493
  }, [scrubTo, positionToTime]);
982
- var handleKeyDown = useCallback(function (event) {
983
- var destination;
1494
+ const handleKeyDown = useCallback(event => {
1495
+ let destination;
984
1496
  if (event.key === 'ArrowLeft') {
985
1497
  destination = Math.max(0, currentTime - 1);
986
1498
  } else if (event.key === 'ArrowRight') {
@@ -988,64 +1500,125 @@ function ProgressIndicators(_ref) {
988
1500
  }
989
1501
  seekTo(destination);
990
1502
  }, [seekTo, currentTime, duration]);
991
- var loadProgress = duration > 0 ? Math.min(1, bufferedEnd / duration) : 0;
992
- var playProgress = duration > 0 ? Math.min(1, currentTime / duration) : 0;
1503
+ const loadProgress = duration > 0 ? Math.min(1, bufferedEnd / duration) : 0;
1504
+ const playProgress = duration > 0 ? Math.min(1, currentTime / duration) : 0;
993
1505
  return /*#__PURE__*/React.createElement("div", {
994
- className: classNames(styles$7.container, _defineProperty({}, styles$7.dragging, dragging)),
1506
+ className: classNames(styles$8.container, {
1507
+ [styles$8.dragging]: dragging
1508
+ }),
995
1509
  "aria-label": t('pageflow_scrolled.public.player_controls.progress', {
996
1510
  currentTime: formatTime(currentTime),
997
1511
  duration: formatTime(duration)
998
1512
  }),
999
1513
  onKeyDown: handleKeyDown,
1000
- tabIndex: "0"
1514
+ tabIndex: "0",
1515
+ __self: this,
1516
+ __source: {
1517
+ fileName: _jsxFileName$g,
1518
+ lineNumber: 52,
1519
+ columnNumber: 5
1520
+ }
1001
1521
  }, /*#__PURE__*/React.createElement("div", {
1002
- className: styles$7.wrapper
1522
+ className: styles$8.wrapper,
1523
+ __self: this,
1524
+ __source: {
1525
+ fileName: _jsxFileName$g,
1526
+ lineNumber: 59,
1527
+ columnNumber: 7
1528
+ }
1003
1529
  }, /*#__PURE__*/React.createElement(Measure, {
1004
1530
  client: true,
1005
- onResize: function onResize(contentRect) {
1006
- return progressBarsContainerWidth.current = contentRect.client.width;
1007
- }
1008
- }, function (_ref2) {
1009
- var measureRef = _ref2.measureRef;
1010
- return /*#__PURE__*/React.createElement(DraggableCore, {
1011
- onStart: handleDrag,
1012
- onDrag: handleDrag,
1013
- onStop: handleStop
1014
- }, /*#__PURE__*/React.createElement("div", {
1015
- className: classNames(styles$7.draggable)
1016
- }, /*#__PURE__*/React.createElement("div", {
1017
- ref: measureRef,
1018
- className: styles$7.bars
1019
- }, /*#__PURE__*/React.createElement("div", {
1020
- className: styles$7.background
1021
- }), /*#__PURE__*/React.createElement("div", {
1022
- className: styles$7.loadingProgressBar,
1023
- style: {
1024
- width: toPercent(loadProgress)
1025
- },
1026
- "data-testid": "loading-progress-bar"
1027
- }), /*#__PURE__*/React.createElement("div", {
1028
- className: styles$7.playProgressBar,
1029
- style: {
1030
- width: toPercent(playProgress)
1031
- },
1032
- "data-testid": "play-progress-bar"
1033
- }), /*#__PURE__*/React.createElement("div", {
1034
- className: styles$7.sliderHandle,
1035
- style: {
1036
- left: toPercent(playProgress)
1037
- },
1038
- "data-testid": "slider-handle"
1039
- }))));
1040
- })));
1531
+ onResize: contentRect => progressBarsContainerWidth.current = contentRect.client.width,
1532
+ __self: this,
1533
+ __source: {
1534
+ fileName: _jsxFileName$g,
1535
+ lineNumber: 60,
1536
+ columnNumber: 9
1537
+ }
1538
+ }, ({
1539
+ measureRef
1540
+ }) => /*#__PURE__*/React.createElement(DraggableCore, {
1541
+ onStart: handleDrag,
1542
+ onDrag: handleDrag,
1543
+ onStop: handleStop,
1544
+ __self: this,
1545
+ __source: {
1546
+ fileName: _jsxFileName$g,
1547
+ lineNumber: 63,
1548
+ columnNumber: 13
1549
+ }
1550
+ }, /*#__PURE__*/React.createElement("div", {
1551
+ className: classNames(styles$8.draggable),
1552
+ __self: this,
1553
+ __source: {
1554
+ fileName: _jsxFileName$g,
1555
+ lineNumber: 66,
1556
+ columnNumber: 15
1557
+ }
1558
+ }, /*#__PURE__*/React.createElement("div", {
1559
+ ref: measureRef,
1560
+ className: styles$8.bars,
1561
+ __self: this,
1562
+ __source: {
1563
+ fileName: _jsxFileName$g,
1564
+ lineNumber: 67,
1565
+ columnNumber: 17
1566
+ }
1567
+ }, /*#__PURE__*/React.createElement("div", {
1568
+ className: styles$8.background,
1569
+ __self: this,
1570
+ __source: {
1571
+ fileName: _jsxFileName$g,
1572
+ lineNumber: 68,
1573
+ columnNumber: 19
1574
+ }
1575
+ }), /*#__PURE__*/React.createElement("div", {
1576
+ className: styles$8.loadingProgressBar,
1577
+ style: {
1578
+ width: toPercent(loadProgress)
1579
+ },
1580
+ "data-testid": "loading-progress-bar",
1581
+ __self: this,
1582
+ __source: {
1583
+ fileName: _jsxFileName$g,
1584
+ lineNumber: 69,
1585
+ columnNumber: 19
1586
+ }
1587
+ }), /*#__PURE__*/React.createElement("div", {
1588
+ className: styles$8.playProgressBar,
1589
+ style: {
1590
+ width: toPercent(playProgress)
1591
+ },
1592
+ "data-testid": "play-progress-bar",
1593
+ __self: this,
1594
+ __source: {
1595
+ fileName: _jsxFileName$g,
1596
+ lineNumber: 72,
1597
+ columnNumber: 19
1598
+ }
1599
+ }), /*#__PURE__*/React.createElement("div", {
1600
+ className: styles$8.sliderHandle,
1601
+ style: {
1602
+ left: toPercent(playProgress)
1603
+ },
1604
+ "data-testid": "slider-handle",
1605
+ __self: this,
1606
+ __source: {
1607
+ fileName: _jsxFileName$g,
1608
+ lineNumber: 75,
1609
+ columnNumber: 19
1610
+ }
1611
+ })))))));
1041
1612
  }
1042
1613
  function toPercent(value) {
1043
1614
  return value > 0 ? value * 100 + '%' : 0;
1044
1615
  }
1045
1616
 
1617
+ var _jsxFileName$h = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/PlayerControls/ClassicPlayerControls/QualityMenu.js";
1046
1618
  function QualityMenu(props) {
1047
- var _useI18n = useI18n(),
1048
- t = _useI18n.t;
1619
+ const {
1620
+ t
1621
+ } = useI18n();
1049
1622
  if (props.items.length < 2) {
1050
1623
  return null;
1051
1624
  }
@@ -1055,97 +1628,215 @@ function QualityMenu(props) {
1055
1628
  subMenuItems: props.items,
1056
1629
  subMenuExpanded: props.subMenuExpanded,
1057
1630
  onSubMenuItemClick: props.onItemClick,
1058
- x: true
1631
+ x: true,
1632
+ __self: this,
1633
+ __source: {
1634
+ fileName: _jsxFileName$h,
1635
+ lineNumber: 15,
1636
+ columnNumber: 5
1637
+ }
1059
1638
  });
1060
1639
  }
1640
+ QualityMenu.propTypes = {
1641
+ items: MenuBarButton.propTypes.subMenuItems,
1642
+ onMenuItemClick: PropTypes.func
1643
+ };
1061
1644
  QualityMenu.defaultProps = {
1062
1645
  items: []
1063
1646
  };
1064
1647
 
1648
+ var _jsxFileName$i = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/PlayerControls/ClassicPlayerControls/index.js";
1065
1649
  function ClassicPlayerControls(props) {
1066
- var darkBackground = useDarkBackground();
1067
- var fadedOut = !props.standAlone && props.unplayed || props.isPlaying && props.inactive || props.fadedOut;
1650
+ const darkBackground = useDarkBackground();
1651
+ const [bigPlayButtonFocusHandoff, controlBarFocusHandoff] = useFocusHandoff();
1068
1652
  return /*#__PURE__*/React.createElement("div", {
1069
- className: classNames(styles$5.container, _defineProperty({}, styles$5.sticky, props.sticky))
1653
+ className: classNames(styles$6.container, {
1654
+ [styles$6.sticky]: props.sticky
1655
+ }),
1656
+ __self: this,
1657
+ __source: {
1658
+ fileName: _jsxFileName$i,
1659
+ lineNumber: 21,
1660
+ columnNumber: 5
1661
+ }
1070
1662
  }, props.children, !props.standAlone && /*#__PURE__*/React.createElement(BigPlayPauseButton, {
1663
+ focusHandoff: bigPlayButtonFocusHandoff,
1071
1664
  unplayed: props.unplayed,
1072
1665
  isPlaying: props.isPlaying,
1073
1666
  lastControlledVia: props.lastControlledVia,
1074
1667
  hidden: props.hideBigPlayButton,
1075
1668
  fadedOut: props.fadedOut,
1076
1669
  hideCursor: props.isPlaying && props.inactive,
1077
- onClick: props.onPlayerClick
1078
- }), !props.hideControlBar && renderControlBar(props, darkBackground, fadedOut));
1670
+ onClick: props.onPlayerClick,
1671
+ __self: this,
1672
+ __source: {
1673
+ fileName: _jsxFileName$i,
1674
+ lineNumber: 25,
1675
+ columnNumber: 8
1676
+ }
1677
+ }), !props.hideControlBar && /*#__PURE__*/React.createElement(ControlBar, Object.assign({}, props, {
1678
+ darkBackground: darkBackground,
1679
+ focusHandoff: controlBarFocusHandoff,
1680
+ __self: this,
1681
+ __source: {
1682
+ fileName: _jsxFileName$i,
1683
+ lineNumber: 34,
1684
+ columnNumber: 8
1685
+ }
1686
+ })));
1079
1687
  }
1080
- function renderControlBar(props, darkBackground, fadedOut) {
1688
+ function ControlBar({
1689
+ darkBackground,
1690
+ focusHandoff,
1691
+ ...props
1692
+ }) {
1693
+ const hidden = !props.standAlone && props.unplayed || props.fadedOut;
1694
+ const inactive = props.isPlaying && props.inactive;
1695
+ const fadedOut = hidden || inactive;
1696
+ const focusHandoffRef = usePassFocus(hidden, focusHandoff);
1081
1697
  return /*#__PURE__*/React.createElement("div", {
1082
1698
  onFocus: props.onFocus,
1083
1699
  onBlur: props.onBlur,
1084
1700
  onMouseEnter: props.onMouseEnter,
1085
1701
  onMouseLeave: props.onMouseLeave,
1086
- className: classNames(styles$5.controlBarContainer, darkBackground ? styles$5.darkBackground : styles$5.lightBackground, _defineProperty(_defineProperty({}, styles$5.inset, !props.standAlone), styles$5.fadedOut, fadedOut))
1702
+ className: classNames(styles$6.controlBarContainer, darkBackground ? styles$6.darkBackground : styles$6.lightBackground, {
1703
+ [styles$6.inset]: !props.standAlone,
1704
+ [styles$6.fadedOut]: fadedOut
1705
+ }),
1706
+ __self: this,
1707
+ __source: {
1708
+ fileName: _jsxFileName$i,
1709
+ lineNumber: 49,
1710
+ columnNumber: 5
1711
+ }
1087
1712
  }, /*#__PURE__*/React.createElement("div", {
1088
- className: styles$5.controlBarInner
1713
+ ref: focusHandoffRef,
1714
+ inert: hidden ? 'true' : undefined,
1715
+ className: styles$6.controlBarInner,
1716
+ __self: this,
1717
+ __source: {
1718
+ fileName: _jsxFileName$i,
1719
+ lineNumber: 59,
1720
+ columnNumber: 7
1721
+ }
1089
1722
  }, /*#__PURE__*/React.createElement(PlayPauseButton, {
1090
1723
  isPlaying: props.isPlaying,
1091
1724
  play: props.play,
1092
- pause: props.pause
1725
+ pause: props.pause,
1726
+ __self: this,
1727
+ __source: {
1728
+ fileName: _jsxFileName$i,
1729
+ lineNumber: 62,
1730
+ columnNumber: 9
1731
+ }
1093
1732
  }), /*#__PURE__*/React.createElement(ProgressIndicators, {
1094
1733
  currentTime: props.currentTime,
1095
1734
  duration: props.duration,
1096
1735
  bufferedEnd: props.bufferedEnd,
1097
1736
  scrubTo: props.scrubTo,
1098
- seekTo: props.seekTo
1737
+ seekTo: props.seekTo,
1738
+ __self: this,
1739
+ __source: {
1740
+ fileName: _jsxFileName$i,
1741
+ lineNumber: 65,
1742
+ columnNumber: 9
1743
+ }
1099
1744
  }), /*#__PURE__*/React.createElement(TimeDisplay, {
1100
1745
  currentTime: props.currentTime,
1101
- duration: props.duration
1746
+ duration: props.duration,
1747
+ __self: this,
1748
+ __source: {
1749
+ fileName: _jsxFileName$i,
1750
+ lineNumber: 70,
1751
+ columnNumber: 9
1752
+ }
1102
1753
  }), /*#__PURE__*/React.createElement(TextTracksMenu, {
1103
1754
  items: props.textTracksMenuItems,
1104
- onItemClick: props.onTextTracksMenuItemClick
1755
+ onItemClick: props.onTextTracksMenuItemClick,
1756
+ __self: this,
1757
+ __source: {
1758
+ fileName: _jsxFileName$i,
1759
+ lineNumber: 72,
1760
+ columnNumber: 9
1761
+ }
1105
1762
  }), /*#__PURE__*/React.createElement(QualityMenu, {
1106
1763
  items: props.qualityMenuItems,
1107
1764
  onItemClick: props.onQualityMenuItemClick,
1108
- subMenuExpanded: props.qualityMenuExpanded
1765
+ subMenuExpanded: props.qualityMenuExpanded,
1766
+ __self: this,
1767
+ __source: {
1768
+ fileName: _jsxFileName$i,
1769
+ lineNumber: 74,
1770
+ columnNumber: 9
1771
+ }
1109
1772
  })), /*#__PURE__*/React.createElement(InlineFileRights, {
1110
1773
  items: props.inlineFileRightsItems,
1111
1774
  context: "playerControls",
1112
1775
  playerControlsFadedOut: fadedOut,
1113
- playerControlsStandAlone: props.standAlone
1776
+ playerControlsStandAlone: props.standAlone,
1777
+ __self: this,
1778
+ __source: {
1779
+ fileName: _jsxFileName$i,
1780
+ lineNumber: 78,
1781
+ columnNumber: 7
1782
+ }
1114
1783
  }));
1115
1784
  }
1116
1785
 
1786
+ var _jsxFileName$j = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/PlayerControls/index.js";
1117
1787
  function PlayerControls(props) {
1118
1788
  var _props$variant;
1119
- var ControlComponent = ((_props$variant = props.variant) === null || _props$variant === void 0 ? void 0 : _props$variant.startsWith('waveform')) ? WaveformPlayerControls : ClassicPlayerControls;
1120
- return /*#__PURE__*/React.createElement(ControlComponent, props);
1789
+ const ControlComponent = ((_props$variant = props.variant) === null || _props$variant === void 0 ? void 0 : _props$variant.startsWith('waveform')) ? WaveformPlayerControls : ClassicPlayerControls;
1790
+ return /*#__PURE__*/React.createElement(ControlComponent, Object.assign({}, props, {
1791
+ __self: this,
1792
+ __source: {
1793
+ fileName: _jsxFileName$j,
1794
+ lineNumber: 13,
1795
+ columnNumber: 5
1796
+ }
1797
+ }));
1121
1798
  }
1122
1799
  PlayerControls.defaultProps = {
1123
1800
  currentTime: 200,
1124
1801
  duration: 600,
1125
1802
  bufferedEnd: 400,
1126
1803
  isPlaying: false,
1127
- play: function play() {},
1128
- pause: function pause() {},
1129
- scrubTo: function scrubTo() {},
1130
- seekTo: function seekTo() {},
1804
+ play: () => {},
1805
+ pause: () => {},
1806
+ scrubTo: () => {},
1807
+ seekTo: () => {},
1131
1808
  inset: false
1132
1809
  };
1133
1810
 
1811
+ // Whether the player controls should auto-hide because the user is
1812
+ // idle and not interacting with them. Shared by the control bar and by
1813
+ // chrome rendered alongside it (e.g. the fullscreen button) so they
1814
+ // fade in sync.
1815
+ function usePlayerControlsInactive(playerState) {
1816
+ const focusOutlineVisible = useFocusOutlineVisible();
1817
+ return (playerState.userIdle || !playerState.userHovering) && (!focusOutlineVisible || !playerState.focusInsideControls) && !playerState.userHoveringControls;
1818
+ }
1819
+
1820
+ var _jsxFileName$k = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/MediaPlayerControls.js";
1134
1821
  function MediaPlayerControls(props) {
1135
- var playerState = props.playerState;
1136
- var playerActions = props.playerActions;
1137
- var _useI18n = useI18n(),
1138
- t = _useI18n.t;
1139
- var textTracks = useTextTracks({
1822
+ const playerState = props.playerState;
1823
+ const playerActions = props.playerActions;
1824
+ const {
1825
+ t
1826
+ } = useI18n();
1827
+ const textTracks = useTextTracks({
1140
1828
  file: props.file,
1141
1829
  defaultTextTrackFilePermaId: props.defaultTextTrackFilePermaId,
1142
1830
  captionsByDefault: useMediaMuted()
1143
1831
  });
1144
- var focusOutlineVisible = useFocusOutlineVisible();
1832
+ const controlsInactive = usePlayerControlsInactive(playerState);
1145
1833
  return /*#__PURE__*/React.createElement(PlayerControls, Object.assign({
1146
1834
  type: props.type,
1147
1835
  variant: props.configuration.playerControlVariant,
1148
1836
  waveformColor: props.configuration.waveformColor,
1837
+ remainingWaveformColor: props.configuration.remainingWaveformColor,
1838
+ waveformCursorColor: props.configuration.waveformCursorColor,
1839
+ invertPlayButton: props.configuration.invertPlayButton,
1149
1840
  mediaElementId: playerState.mediaElementId,
1150
1841
  currentTime: playerState.scrubbingAt !== undefined ? playerState.scrubbingAt : playerState.currentTime,
1151
1842
  bufferedEnd: playerState.bufferedEnd,
@@ -1153,7 +1844,7 @@ function MediaPlayerControls(props) {
1153
1844
  isPlaying: playerState.shouldPlay,
1154
1845
  unplayed: playerState.unplayed,
1155
1846
  lastControlledVia: playerState.lastControlledVia,
1156
- inactive: props.autoHide && (playerState.userIdle || !playerState.userHovering) && (!focusOutlineVisible || !playerState.focusInsideControls) && !playerState.userHoveringControls,
1847
+ inactive: props.autoHide && controlsInactive,
1157
1848
  onFocus: playerActions.focusEnteredControls,
1158
1849
  onBlur: playerActions.focusLeftControls,
1159
1850
  onMouseEnter: playerActions.mouseEnteredControls,
@@ -1166,7 +1857,14 @@ function MediaPlayerControls(props) {
1166
1857
  onTextTracksMenuItemClick: textTracks.select,
1167
1858
  qualityMenuItems: props.qualityMenuItems,
1168
1859
  onQualityMenuItemClick: props.onQualityMenuItemClick
1169
- }, props));
1860
+ }, props, {
1861
+ __self: this,
1862
+ __source: {
1863
+ fileName: _jsxFileName$k,
1864
+ lineNumber: 22,
1865
+ columnNumber: 5
1866
+ }
1867
+ }));
1170
1868
  }
1171
1869
  MediaPlayerControls.defaultProps = {
1172
1870
  configuration: {}
@@ -1183,104 +1881,153 @@ function getTextTracksMenuItems(textTracks, t) {
1183
1881
  value: 'auto',
1184
1882
  label: textTracks.autoDisplayLabel,
1185
1883
  active: textTracks.mode === 'auto'
1186
- }].concat(_toConsumableArray(textTracks.files.map(function (textTrackFile) {
1187
- return {
1188
- value: textTrackFile.id,
1189
- label: textTrackFile.displayLabel,
1190
- active: textTracks.mode === 'user' && textTrackFile.id === textTracks.activeFileId
1191
- };
1192
- })));
1884
+ }, ...textTracks.files.map(textTrackFile => ({
1885
+ value: textTrackFile.id,
1886
+ label: textTrackFile.displayLabel,
1887
+ active: textTracks.mode === 'user' && textTrackFile.id === textTracks.activeFileId
1888
+ }))];
1193
1889
  }
1194
1890
 
1195
- var _excluded = ["videoFile"];
1196
- function VideoPlayerControls(_ref) {
1197
- var videoFile = _ref.videoFile,
1198
- props = _objectWithoutProperties(_ref, _excluded);
1199
- var _useVideoQualitySetti = useVideoQualitySetting(),
1200
- _useVideoQualitySetti2 = _slicedToArray(_useVideoQualitySetti, 2),
1201
- activeQuality = _useVideoQualitySetti2[0],
1202
- setActiveQuality = _useVideoQualitySetti2[1];
1203
- var availableQualities = useAvailableQualities(videoFile);
1204
- var _useI18n = useI18n(),
1205
- t = _useI18n.t;
1891
+ var _jsxFileName$l = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/VideoPlayerControls.js";
1892
+ function VideoPlayerControls({
1893
+ videoFile,
1894
+ ...props
1895
+ }) {
1896
+ const [activeQuality, setActiveQuality] = useVideoQualitySetting();
1897
+ const availableQualities = useAvailableQualities(videoFile);
1898
+ const {
1899
+ t
1900
+ } = useI18n();
1206
1901
  return /*#__PURE__*/React.createElement(MediaPlayerControls, Object.assign({}, props, {
1207
1902
  file: videoFile,
1208
1903
  autoHide: true,
1209
1904
  qualityMenuItems: getQualityMenuItems(availableQualities, activeQuality, t),
1210
- onQualityMenuItemClick: setActiveQuality
1905
+ onQualityMenuItemClick: setActiveQuality,
1906
+ __self: this,
1907
+ __source: {
1908
+ fileName: _jsxFileName$l,
1909
+ lineNumber: 14,
1910
+ columnNumber: 5
1911
+ }
1211
1912
  }));
1212
1913
  }
1213
1914
  function getQualityMenuItems(availableQualities, activeQuality, t) {
1214
- return availableQualities.map(function (quality) {
1215
- return {
1216
- value: quality,
1217
- label: t("pageflow_scrolled.public.video_qualities.labels.".concat(quality)),
1218
- annotation: t("pageflow_scrolled.public.video_qualities.annotations.".concat(quality), {
1219
- defaultValue: ''
1220
- }),
1221
- active: activeQuality === quality
1222
- };
1223
- });
1915
+ return availableQualities.map(quality => ({
1916
+ value: quality,
1917
+ label: t(`pageflow_scrolled.public.video_qualities.labels.${quality}`),
1918
+ annotation: t(`pageflow_scrolled.public.video_qualities.annotations.${quality}`, {
1919
+ defaultValue: ''
1920
+ }),
1921
+ active: activeQuality === quality
1922
+ }));
1224
1923
  }
1225
1924
 
1226
- var _excluded$1 = ["audioFile"];
1227
- function AudioPlayerControls(_ref) {
1228
- var audioFile = _ref.audioFile,
1229
- props = _objectWithoutProperties(_ref, _excluded$1);
1925
+ var _jsxFileName$m = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/AudioPlayerControls.js";
1926
+ function AudioPlayerControls({
1927
+ audioFile,
1928
+ ...props
1929
+ }) {
1230
1930
  return /*#__PURE__*/React.createElement(MediaPlayerControls, Object.assign({}, props, {
1231
- file: audioFile
1931
+ file: audioFile,
1932
+ __self: this,
1933
+ __source: {
1934
+ fileName: _jsxFileName$m,
1935
+ lineNumber: 7,
1936
+ columnNumber: 5
1937
+ }
1232
1938
  }));
1233
1939
  }
1234
1940
 
1235
- var Viewer = React.lazy(function () {
1236
- return import('./Viewer-0345ce57.js');
1237
- });
1941
+ var _jsxFileName$n = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/Panorama/index.js";
1942
+ const Viewer = React.lazy(() => import('./Viewer-1482ca34.js'));
1238
1943
  function Panorama(props) {
1239
1944
  return /*#__PURE__*/React.createElement(Suspense, {
1240
- fallback: /*#__PURE__*/React.createElement("div", null)
1241
- }, /*#__PURE__*/React.createElement(Viewer, props));
1945
+ fallback: /*#__PURE__*/React.createElement("div", {
1946
+ __self: this,
1947
+ __source: {
1948
+ fileName: _jsxFileName$n,
1949
+ lineNumber: 7,
1950
+ columnNumber: 25
1951
+ }
1952
+ }),
1953
+ __self: this,
1954
+ __source: {
1955
+ fileName: _jsxFileName$n,
1956
+ lineNumber: 7,
1957
+ columnNumber: 5
1958
+ }
1959
+ }, /*#__PURE__*/React.createElement(Viewer, Object.assign({}, props, {
1960
+ __self: this,
1961
+ __source: {
1962
+ fileName: _jsxFileName$n,
1963
+ lineNumber: 8,
1964
+ columnNumber: 7
1965
+ }
1966
+ })));
1242
1967
  }
1243
1968
 
1244
- var _excluded$2 = ["enabled"];
1245
- var Viewer$1 = React.lazy(function () {
1246
- return import('./Viewer-cdc549cc.js');
1247
- });
1248
- function ExpandableImage(_ref) {
1249
- var enabled = _ref.enabled,
1250
- props = _objectWithoutProperties(_ref, _excluded$2);
1969
+ var _jsxFileName$o = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/ExpandableImage/index.js";
1970
+ const Viewer$1 = React.lazy(() => import('./Viewer-70504231.js'));
1971
+ function ExpandableImage({
1972
+ enabled,
1973
+ ...props
1974
+ }) {
1251
1975
  if (!enabled) {
1252
1976
  return props.children;
1253
1977
  }
1254
1978
  return /*#__PURE__*/React.createElement(Suspense, {
1255
- fallback: /*#__PURE__*/React.createElement("div", null)
1256
- }, /*#__PURE__*/React.createElement(Viewer$1, props));
1257
- }
1258
-
1259
- var styles$8 = {"nav":"PaginationIndicator-module_nav__cY6JE","item":"PaginationIndicator-module_item__O7cZ-","current":"PaginationIndicator-module_current__1wxHj"};
1260
-
1261
- function PaginationIndicator(_ref) {
1262
- var itemCount = _ref.itemCount,
1263
- currentIndex = _ref.currentIndex,
1264
- scrollerRef = _ref.scrollerRef,
1265
- navAriaLabelTranslationKey = _ref.navAriaLabelTranslationKey,
1266
- itemAriaLabelTranslationKey = _ref.itemAriaLabelTranslationKey,
1267
- onItemClick = _ref.onItemClick;
1268
- var _useI18n = useI18n$1(),
1269
- t = _useI18n.t;
1270
- var navRef = useRef();
1271
- var theme = useTheme$1();
1272
- var currentItemFlex = theme.options.properties.root.paginationIndicatorCurrentItemFlex || 3;
1273
- useEffect(function () {
1979
+ fallback: /*#__PURE__*/React.createElement("div", {
1980
+ __self: this,
1981
+ __source: {
1982
+ fileName: _jsxFileName$o,
1983
+ lineNumber: 11,
1984
+ columnNumber: 25
1985
+ }
1986
+ }),
1987
+ __self: this,
1988
+ __source: {
1989
+ fileName: _jsxFileName$o,
1990
+ lineNumber: 11,
1991
+ columnNumber: 5
1992
+ }
1993
+ }, /*#__PURE__*/React.createElement(Viewer$1, Object.assign({}, props, {
1994
+ __self: this,
1995
+ __source: {
1996
+ fileName: _jsxFileName$o,
1997
+ lineNumber: 12,
1998
+ columnNumber: 7
1999
+ }
2000
+ })));
2001
+ }
2002
+
2003
+ var styles$9 = {"nav":"PaginationIndicator-module_nav__cY6JE","item":"PaginationIndicator-module_item__O7cZ-","current":"PaginationIndicator-module_current__1wxHj"};
2004
+
2005
+ var _jsxFileName$p = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/PaginationIndicator.js";
2006
+ function PaginationIndicator({
2007
+ itemCount,
2008
+ currentIndex,
2009
+ scrollerRef,
2010
+ navAriaLabelTranslationKey,
2011
+ itemAriaLabelTranslationKey,
2012
+ onItemClick
2013
+ }) {
2014
+ const {
2015
+ t
2016
+ } = useI18n$1();
2017
+ const navRef = useRef();
2018
+ const theme = useTheme$1();
2019
+ const currentItemFlex = theme.options.properties.root.paginationIndicatorCurrentItemFlex || 3;
2020
+ useEffect(() => {
1274
2021
  if (!(currentItemFlex > 1)) {
1275
2022
  return;
1276
2023
  }
1277
- var timeline = new window.ScrollTimeline({
2024
+ const timeline = new window.ScrollTimeline({
1278
2025
  source: scrollerRef.current,
1279
2026
  axis: 'inline'
1280
2027
  });
1281
- var animations = _toConsumableArray(navRef.current.children).map(function (element, index) {
1282
- var start = 1 / Math.max(itemCount - 1, 1) * (index - 1);
1283
- var end = 1 / Math.max(itemCount - 1, 1) * (index + 1);
2028
+ const animations = [...navRef.current.children].map((element, index) => {
2029
+ const start = 1 / Math.max(itemCount - 1, 1) * (index - 1);
2030
+ const end = 1 / Math.max(itemCount - 1, 1) * (index + 1);
1284
2031
  return element.animate([start >= 0 && {
1285
2032
  flex: 1,
1286
2033
  offset: start
@@ -1291,48 +2038,55 @@ function PaginationIndicator(_ref) {
1291
2038
  offset: end
1292
2039
  }].filter(Boolean), {
1293
2040
  easing: 'linear',
1294
- timeline: timeline
2041
+ timeline
1295
2042
  });
1296
2043
  });
1297
- return function () {
1298
- return animations.forEach(function (animation) {
1299
- return animation.cancel();
1300
- });
1301
- };
2044
+ return () => animations.forEach(animation => animation.cancel());
1302
2045
  }, [currentItemFlex, scrollerRef, itemCount]);
1303
2046
  return /*#__PURE__*/React.createElement("nav", {
1304
2047
  ref: navRef,
1305
- className: styles$8.nav,
2048
+ className: styles$9.nav,
1306
2049
  "aria-label": t(navAriaLabelTranslationKey),
1307
2050
  style: {
1308
- aspectRatio: "".concat(itemCount + 2, " / 1")
2051
+ aspectRatio: `${itemCount + 2} / 1`
2052
+ },
2053
+ __self: this,
2054
+ __source: {
2055
+ fileName: _jsxFileName$p,
2056
+ lineNumber: 54,
2057
+ columnNumber: 5
1309
2058
  }
1310
- }, Array(itemCount).fill().map(function (_, index) {
1311
- return /*#__PURE__*/React.createElement("button", {
1312
- key: index,
1313
- className: classNames(styles$8.item, _defineProperty({}, styles$8.current, index === currentIndex)),
1314
- "aria-label": t(itemAriaLabelTranslationKey, {
1315
- index: index
1316
- }),
1317
- "aria-current": index === currentIndex,
1318
- onClick: function onClick() {
1319
- return onItemClick(index);
1320
- }
1321
- });
1322
- }));
2059
+ }, Array(itemCount).fill().map((_, index) => /*#__PURE__*/React.createElement("button", {
2060
+ key: index,
2061
+ className: classNames(styles$9.item, {
2062
+ [styles$9.current]: index === currentIndex
2063
+ }),
2064
+ "aria-label": t(itemAriaLabelTranslationKey, {
2065
+ index
2066
+ }),
2067
+ "aria-current": index === currentIndex,
2068
+ onClick: () => onItemClick(index),
2069
+ __self: this,
2070
+ __source: {
2071
+ fileName: _jsxFileName$p,
2072
+ lineNumber: 59,
2073
+ columnNumber: 9
2074
+ }
2075
+ })));
1323
2076
  }
1324
2077
 
1325
2078
  // from https://github.com/n8tb1t/use-scroll-position
1326
- var isBrowser = typeof window !== "undefined";
1327
- function getScrollPosition(_ref) {
1328
- var element = _ref.element,
1329
- useWindow = _ref.useWindow;
2079
+ const isBrowser = typeof window !== `undefined`;
2080
+ function getScrollPosition({
2081
+ element,
2082
+ useWindow
2083
+ }) {
1330
2084
  if (!isBrowser) return {
1331
2085
  x: 0,
1332
2086
  y: 0
1333
2087
  };
1334
- var target = element ? element.current : document.body;
1335
- var position = target.getBoundingClientRect();
2088
+ const target = element ? element.current : document.body;
2089
+ const position = target.getBoundingClientRect();
1336
2090
  return useWindow ? {
1337
2091
  x: window.scrollX,
1338
2092
  y: window.scrollY
@@ -1342,27 +2096,27 @@ function getScrollPosition(_ref) {
1342
2096
  };
1343
2097
  }
1344
2098
  function useScrollPosition(effect, deps, element, useWindow, wait) {
1345
- var position = useRef(getScrollPosition({
1346
- useWindow: useWindow
2099
+ const position = useRef(getScrollPosition({
2100
+ useWindow
1347
2101
  }));
1348
- var throttleTimeout = null;
1349
- var callBack = function callBack() {
1350
- var currPos = getScrollPosition({
1351
- element: element,
1352
- useWindow: useWindow
2102
+ let throttleTimeout = null;
2103
+ const callBack = () => {
2104
+ const currPos = getScrollPosition({
2105
+ element,
2106
+ useWindow
1353
2107
  });
1354
2108
  effect({
1355
2109
  prevPos: position.current,
1356
- currPos: currPos
2110
+ currPos
1357
2111
  });
1358
2112
  position.current = currPos;
1359
2113
  throttleTimeout = null;
1360
2114
  };
1361
- useIsomorphicLayoutEffect(function () {
2115
+ useIsomorphicLayoutEffect(() => {
1362
2116
  if (!isBrowser) {
1363
2117
  return;
1364
2118
  }
1365
- var handleScroll = function handleScroll() {
2119
+ const handleScroll = () => {
1366
2120
  if (wait) {
1367
2121
  if (throttleTimeout === null) {
1368
2122
  // Todo: store in useRef hook?
@@ -1373,9 +2127,7 @@ function useScrollPosition(effect, deps, element, useWindow, wait) {
1373
2127
  }
1374
2128
  };
1375
2129
  window.addEventListener('scroll', handleScroll);
1376
- return function () {
1377
- return window.removeEventListener('scroll', handleScroll);
1378
- };
2130
+ return () => window.removeEventListener('scroll', handleScroll);
1379
2131
  }, deps);
1380
2132
  }
1381
2133
  useScrollPosition.defaultProps = {
@@ -1385,41 +2137,97 @@ useScrollPosition.defaultProps = {
1385
2137
  wait: null
1386
2138
  };
1387
2139
 
1388
- var EditableInlineText = withInlineEditingAlternative('EditableInlineText', function EditableInlineText(_ref) {
2140
+ var _jsxFileName$q = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/EditableInlineText.js";
2141
+ const EditableInlineText = extensible('EditableInlineText', function EditableInlineText({
2142
+ value,
2143
+ hyphens,
2144
+ defaultValue = ''
2145
+ }) {
1389
2146
  var _value$, _value$$children$;
1390
- var value = _ref.value,
1391
- hyphens = _ref.hyphens,
1392
- _ref$defaultValue = _ref.defaultValue,
1393
- defaultValue = _ref$defaultValue === void 0 ? '' : _ref$defaultValue;
1394
- var text = value ? (_value$ = value[0]) === null || _value$ === void 0 ? void 0 : (_value$$children$ = _value$.children[0]) === null || _value$$children$ === void 0 ? void 0 : _value$$children$.text : defaultValue;
2147
+ const text = value ? (_value$ = value[0]) === null || _value$ === void 0 ? void 0 : (_value$$children$ = _value$.children[0]) === null || _value$$children$ === void 0 ? void 0 : _value$$children$.text : defaultValue;
1395
2148
  return /*#__PURE__*/React.createElement("span", {
1396
- className: classNames(frontendStyles.root, frontendStyles.textEffects, frontendStyles["hyphens-".concat(hyphens)])
1397
- }, /*#__PURE__*/React.createElement("span", null, text));
2149
+ className: classNames(frontendStyles.root, frontendStyles.textEffects, frontendStyles[`hyphens-${hyphens}`]),
2150
+ __self: this,
2151
+ __source: {
2152
+ fileName: _jsxFileName$q,
2153
+ lineNumber: 14,
2154
+ columnNumber: 7
2155
+ }
2156
+ }, /*#__PURE__*/React.createElement("span", {
2157
+ __self: this,
2158
+ __source: {
2159
+ fileName: _jsxFileName$q,
2160
+ lineNumber: 17,
2161
+ columnNumber: 9
2162
+ }
2163
+ }, text));
1398
2164
  });
1399
2165
 
1400
- var EditableLink = withInlineEditingAlternative('EditableLink', function EditableLink(_ref) {
1401
- var className = _ref.className,
1402
- href = _ref.href,
1403
- openInNewTab = _ref.openInNewTab,
1404
- children = _ref.children;
2166
+ var _jsxFileName$r = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/EditableLink.js";
2167
+ const EditableLink = extensible('EditableLink', function EditableLink({
2168
+ className,
2169
+ href,
2170
+ openInNewTab,
2171
+ onClick,
2172
+ children
2173
+ }) {
1405
2174
  return /*#__PURE__*/React.createElement(Link, {
1406
2175
  href: href,
1407
2176
  openInNewTab: openInNewTab,
1408
2177
  attributes: {
1409
- className: className
2178
+ className,
2179
+ onClick
1410
2180
  },
1411
- children: children
2181
+ children: children,
2182
+ __self: this,
2183
+ __source: {
2184
+ fileName: _jsxFileName$r,
2185
+ lineNumber: 10,
2186
+ columnNumber: 7
2187
+ }
1412
2188
  });
1413
2189
  });
1414
2190
 
1415
- var LinkTooltipProvider = withInlineEditingAlternative('LinkTooltipProvider', function LinkTooltipProvider(_ref) {
1416
- var children = _ref.children;
2191
+ var _jsxFileName$s = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/Placeholder.js";
2192
+ const Placeholder = extensible('Placeholder', function Placeholder() {
2193
+ return /*#__PURE__*/React.createElement("div", {
2194
+ className: styles$e.placeholder,
2195
+ __self: this,
2196
+ __source: {
2197
+ fileName: _jsxFileName$s,
2198
+ lineNumber: 6,
2199
+ columnNumber: 10
2200
+ }
2201
+ });
2202
+ });
2203
+
2204
+ var _jsxFileName$t = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/FilePlaceholderDecorator.js";
2205
+ function FilePlaceholder({
2206
+ file
2207
+ }) {
2208
+ if (file === null || file === void 0 ? void 0 : file.isReady) {
2209
+ return null;
2210
+ }
2211
+ return /*#__PURE__*/React.createElement(Placeholder, {
2212
+ __self: this,
2213
+ __source: {
2214
+ fileName: _jsxFileName$t,
2215
+ lineNumber: 9,
2216
+ columnNumber: 10
2217
+ }
2218
+ });
2219
+ }
2220
+
2221
+ const LinkTooltipProvider = extensible('LinkTooltipProvider', function LinkTooltipProvider({
2222
+ children
2223
+ }) {
1417
2224
  return children;
1418
2225
  });
1419
2226
 
1420
- var styles$9 = {"container":"FitViewport-module_container__-awVj","content":"FitViewport-module_content__1_K5a","inner":"FitViewport-module_inner__3psd1","opaque":"FitViewport-module_opaque__3EE3o"};
2227
+ var styles$a = {"container":"FitViewport-module_container__-awVj","content":"FitViewport-module_content__1_K5a","inner":"FitViewport-module_inner__3psd1"};
1421
2228
 
1422
- var AspectRatioContext = React.createContext();
2229
+ var _jsxFileName$u = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/FitViewport.js";
2230
+ const AspectRatioContext = React.createContext();
1423
2231
 
1424
2232
  /**
1425
2233
  * Render a div with the given aspect ratio which does not
@@ -1444,115 +2252,225 @@ var AspectRatioContext = React.createContext();
1444
2252
  * @param {number} [props.aspectRatio] - Aspect ratio of div.
1445
2253
  * @param {Object} [props.file] - Use width/height of file to calculate aspect ratio.
1446
2254
  * @param {number} [props.scale] - Only take up fraction of the viewport height supplied as value between 0 and 1.
1447
- * @param {Object} [props.opaque] - Render black background behind content.
1448
2255
  * @param {string} [props.fill] - Ignore aspect ration and fill viewport vertically.
1449
2256
  */
1450
- function FitViewport(_ref) {
1451
- var file = _ref.file,
1452
- aspectRatio = _ref.aspectRatio,
1453
- opaque = _ref.opaque,
1454
- children = _ref.children,
1455
- fill = _ref.fill,
1456
- scale = _ref.scale;
1457
- if (!file && !aspectRatio) return children;
2257
+ function FitViewport({
2258
+ file,
2259
+ aspectRatio,
2260
+ fallbackAspectRatio,
2261
+ children,
2262
+ fill,
2263
+ scale
2264
+ }) {
2265
+ if (!file && !aspectRatio && !fallbackAspectRatio) return children;
1458
2266
  if (typeof aspectRatio === 'string') {
1459
- aspectRatio = "var(--theme-aspect-ratio-".concat(aspectRatio, ")");
2267
+ aspectRatio = `var(--theme-aspect-ratio-${aspectRatio})`;
1460
2268
  }
1461
- aspectRatio = fill ? 'fill' : aspectRatio || file.height / file.width;
2269
+ aspectRatio = fill ? 'fill' : aspectRatio || ((file === null || file === void 0 ? void 0 : file.width) ? file.height / file.width : fallbackAspectRatio);
1462
2270
  return /*#__PURE__*/React.createElement("div", {
1463
- className: classNames(styles$9.container, _defineProperty({}, styles$9.opaque, opaque)),
2271
+ className: styles$a.container,
1464
2272
  style: {
1465
2273
  '--fit-viewport-aspect-ratio': fill ? undefined : aspectRatio,
1466
2274
  '--fit-viewport-scale': scale
2275
+ },
2276
+ __self: this,
2277
+ __source: {
2278
+ fileName: _jsxFileName$u,
2279
+ lineNumber: 45,
2280
+ columnNumber: 5
1467
2281
  }
1468
2282
  }, /*#__PURE__*/React.createElement(AspectRatioContext.Provider, {
1469
- value: aspectRatio
2283
+ value: aspectRatio,
2284
+ __self: this,
2285
+ __source: {
2286
+ fileName: _jsxFileName$u,
2287
+ lineNumber: 48,
2288
+ columnNumber: 7
2289
+ }
1470
2290
  }, children));
1471
2291
  }
1472
- FitViewport.Content = function FitViewportContent(_ref2) {
1473
- var children = _ref2.children;
1474
- var aspectRatio = useContext(AspectRatioContext);
2292
+ FitViewport.Content = function FitViewportContent({
2293
+ children
2294
+ }) {
2295
+ let aspectRatio = useContext(AspectRatioContext);
1475
2296
  if (aspectRatio === 'fill') {
1476
2297
  return /*#__PURE__*/React.createElement(Fullscreen, {
1477
- children: children
2298
+ children: children,
2299
+ __self: this,
2300
+ __source: {
2301
+ fileName: _jsxFileName$u,
2302
+ lineNumber: 61,
2303
+ columnNumber: 9
2304
+ }
1478
2305
  });
1479
2306
  } else if (!aspectRatio) {
1480
2307
  return children;
1481
2308
  }
1482
2309
  return /*#__PURE__*/React.createElement("div", {
1483
- className: styles$9.content
1484
- }, /*#__PURE__*/React.createElement("div", null), /*#__PURE__*/React.createElement("div", {
1485
- className: styles$9.inner
2310
+ className: styles$a.content,
2311
+ __self: this,
2312
+ __source: {
2313
+ fileName: _jsxFileName$u,
2314
+ lineNumber: 69,
2315
+ columnNumber: 7
2316
+ }
2317
+ }, /*#__PURE__*/React.createElement("div", {
2318
+ __self: this,
2319
+ __source: {
2320
+ fileName: _jsxFileName$u,
2321
+ lineNumber: 70,
2322
+ columnNumber: 9
2323
+ }
2324
+ }), /*#__PURE__*/React.createElement("div", {
2325
+ className: styles$a.inner,
2326
+ __self: this,
2327
+ __source: {
2328
+ fileName: _jsxFileName$u,
2329
+ lineNumber: 71,
2330
+ columnNumber: 9
2331
+ }
1486
2332
  }, children));
1487
2333
  };
1488
2334
 
1489
- var styles$a = {"container":"Tooltip-module_container__3V63U","bubble":"Tooltip-module_bubble__FIL1C scope-tooltip","fixed":"Tooltip-module_fixed__3NGyG","openOnHover":"Tooltip-module_openOnHover__1EeI5","fadeIn":"Tooltip-module_fadeIn__3g9QH","inner":"Tooltip-module_inner__E2hsp","highlight":"Tooltip-module_highlight__2NpuQ","arrow":"Tooltip-module_arrow__3LxXo"};
1490
-
1491
- function Tooltip(_ref) {
1492
- var bubbleClassName = _ref.bubbleClassName,
1493
- arrowPos = _ref.arrowPos,
1494
- children = _ref.children,
1495
- content = _ref.content,
1496
- fixed = _ref.fixed,
1497
- highlight = _ref.highlight,
1498
- openOnHover = _ref.openOnHover,
1499
- verticalOffset = _ref.verticalOffset,
1500
- horizontalOffset = _ref.horizontalOffset;
2335
+ var styles$b = {"container":"Tooltip-module_container__3V63U","bubble":"Tooltip-module_bubble__FIL1C scope-tooltip","open":"Tooltip-module_open__1avQa","fixed":"Tooltip-module_fixed__3NGyG","openOnHover":"Tooltip-module_openOnHover__1EeI5","fadeIn":"Tooltip-module_fadeIn__3g9QH","inner":"Tooltip-module_inner__E2hsp","highlight":"Tooltip-module_highlight__2NpuQ","arrow":"Tooltip-module_arrow__3LxXo"};
2336
+
2337
+ var _jsxFileName$v = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/Tooltip.js";
2338
+ function Tooltip({
2339
+ bubbleClassName,
2340
+ arrowPos,
2341
+ children,
2342
+ content,
2343
+ fixed,
2344
+ highlight,
2345
+ name,
2346
+ openOnHover,
2347
+ verticalOffset,
2348
+ horizontalOffset
2349
+ }) {
2350
+ const [isOpen, setIsOpen] = useState(false);
2351
+ const buttonRef = useRef(null);
2352
+ const containerRef = useRef(null);
2353
+ const tooltipId = `tooltip-${name}`;
2354
+ const handleClick = () => {
2355
+ setIsOpen(prev => !prev);
2356
+ };
2357
+ const handleKeyDown = event => {
2358
+ if (event.key === 'Escape' && isOpen) {
2359
+ setIsOpen(false);
2360
+ setTimeout(() => {
2361
+ var _buttonRef$current;
2362
+ return (_buttonRef$current = buttonRef.current) === null || _buttonRef$current === void 0 ? void 0 : _buttonRef$current.focus();
2363
+ }, 0);
2364
+ }
2365
+ };
2366
+ const handleBlur = event => {
2367
+ var _containerRef$current;
2368
+ if (isOpen && event.relatedTarget && !((_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.contains(event.relatedTarget))) {
2369
+ setIsOpen(false);
2370
+ }
2371
+ };
2372
+ const isControlled = !openOnHover && !fixed;
2373
+ useEffect(() => {
2374
+ if (!isControlled || !isOpen) {
2375
+ return;
2376
+ }
2377
+ const handleDocumentClick = event => {
2378
+ var _containerRef$current2;
2379
+ if (!((_containerRef$current2 = containerRef.current) === null || _containerRef$current2 === void 0 ? void 0 : _containerRef$current2.contains(event.target))) {
2380
+ setIsOpen(false);
2381
+ }
2382
+ };
2383
+ document.addEventListener('click', handleDocumentClick);
2384
+ return () => {
2385
+ document.removeEventListener('click', handleDocumentClick);
2386
+ };
2387
+ }, [isControlled, isOpen]);
2388
+ const triggerProps = isControlled ? {
2389
+ onClick: handleClick,
2390
+ ref: buttonRef,
2391
+ 'aria-expanded': isOpen,
2392
+ 'aria-controls': tooltipId
2393
+ } : openOnHover ? {
2394
+ 'aria-describedby': tooltipId
2395
+ } : {};
1501
2396
  return /*#__PURE__*/React.createElement("div", {
1502
- className: classNames(styles$a.container, _defineProperty(_defineProperty({}, styles$a.openOnHover, openOnHover), styles$a.fixed, fixed)),
1503
- onClick: fixFocusHandlingSafari
1504
- }, children, /*#__PURE__*/React.createElement(Bubble, {
2397
+ ref: containerRef,
2398
+ className: classNames(styles$b.container, {
2399
+ [styles$b.openOnHover]: openOnHover,
2400
+ [styles$b.fixed]: fixed
2401
+ }),
2402
+ onKeyDown: isControlled ? handleKeyDown : undefined,
2403
+ onBlur: isControlled ? handleBlur : undefined,
2404
+ __self: this,
2405
+ __source: {
2406
+ fileName: _jsxFileName$v,
2407
+ lineNumber: 73,
2408
+ columnNumber: 5
2409
+ }
2410
+ }, typeof children === 'function' ? children(triggerProps) : children, /*#__PURE__*/React.createElement(Bubble, {
1505
2411
  className: bubbleClassName,
1506
2412
  highlight: highlight,
1507
2413
  arrowPos: arrowPos,
1508
2414
  verticalOffset: verticalOffset,
1509
- horizontalOffset: horizontalOffset
2415
+ horizontalOffset: horizontalOffset,
2416
+ isOpen: isOpen,
2417
+ id: tooltipId,
2418
+ __self: this,
2419
+ __source: {
2420
+ fileName: _jsxFileName$v,
2421
+ lineNumber: 81,
2422
+ columnNumber: 7
2423
+ }
1510
2424
  }, content));
1511
2425
  }
1512
- function Bubble(_ref2) {
1513
- var className = _ref2.className,
1514
- arrowPos = _ref2.arrowPos,
1515
- children = _ref2.children,
1516
- highlight = _ref2.highlight,
1517
- horizontalOffset = _ref2.horizontalOffset,
1518
- verticalOffset = _ref2.verticalOffset;
1519
- var inlineStyle = {
2426
+ function Bubble({
2427
+ className,
2428
+ arrowPos,
2429
+ children,
2430
+ highlight,
2431
+ horizontalOffset,
2432
+ verticalOffset,
2433
+ isOpen,
2434
+ id
2435
+ }) {
2436
+ let inlineStyle = {
1520
2437
  marginLeft: horizontalOffset,
1521
2438
  marginTop: verticalOffset
1522
2439
  };
1523
-
1524
- // Negative tabIndex ensures element can take focus but does not
1525
- // come up in tab order. This ensures the tooltip stays expanded
1526
- // when text in the legal info menu is selected.
1527
2440
  return /*#__PURE__*/React.createElement("div", {
1528
2441
  style: inlineStyle,
1529
- tabIndex: "-1",
1530
- className: classNames(className, styles$a.bubble, _defineProperty({}, styles$a.highlight, highlight))
2442
+ id: id,
2443
+ className: classNames(className, styles$b.bubble, {
2444
+ [styles$b.highlight]: highlight,
2445
+ [styles$b.open]: isOpen
2446
+ }),
2447
+ __self: this,
2448
+ __source: {
2449
+ fileName: _jsxFileName$v,
2450
+ lineNumber: 101,
2451
+ columnNumber: 5
2452
+ }
1531
2453
  }, /*#__PURE__*/React.createElement("div", {
1532
2454
  style: {
1533
2455
  left: arrowPos
1534
2456
  },
1535
- className: styles$a.arrow
2457
+ className: styles$b.arrow,
2458
+ __self: this,
2459
+ __source: {
2460
+ fileName: _jsxFileName$v,
2461
+ lineNumber: 106,
2462
+ columnNumber: 7
2463
+ }
1536
2464
  }), /*#__PURE__*/React.createElement("div", {
1537
- className: styles$a.inner
2465
+ className: styles$b.inner,
2466
+ __self: this,
2467
+ __source: {
2468
+ fileName: _jsxFileName$v,
2469
+ lineNumber: 107,
2470
+ columnNumber: 7
2471
+ }
1538
2472
  }, children));
1539
2473
  }
1540
-
1541
- // Safari does not focus buttons after they are clicked [1]. Focus
1542
- // manually to ensure `focus-within` selector that opens the tooltip
1543
- // applies.
1544
- //
1545
- // [1] https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Clicking_and_focus
1546
- function fixFocusHandlingSafari(event) {
1547
- if (!event.target.closest) {
1548
- // IE does not support closest, but also does not need this fix.
1549
- return;
1550
- }
1551
- var button = event.target.closest('button');
1552
- if (button) {
1553
- button.focus();
1554
- }
1555
- }
1556
2474
  Tooltip.defaultProps = {
1557
2475
  arrowPos: '50%',
1558
2476
  fixed: false,
@@ -1561,27 +2479,56 @@ Tooltip.defaultProps = {
1561
2479
  horizontalOffset: 0
1562
2480
  };
1563
2481
 
1564
- var styles$b = {"button":"ScrollButton-module_button__3rrDc","icon":"ScrollButton-module_icon__128_J","disabled":"ScrollButton-module_disabled__35fFF","visuallyHidden":"ScrollButton-module_visuallyHidden__36chO"};
1565
-
1566
- var size = 40;
1567
- function ScrollButton(_ref) {
1568
- var direction = _ref.direction,
1569
- disabled = _ref.disabled,
1570
- onClick = _ref.onClick;
1571
- var _useI18n = useI18n(),
1572
- t = _useI18n.t;
2482
+ var styles$c = {"button":"ScrollButton-module_button__3rrDc","icon":"ScrollButton-module_icon__128_J","disabled":"ScrollButton-module_disabled__35fFF","visuallyHidden":"ScrollButton-module_visuallyHidden__36chO"};
2483
+
2484
+ var _jsxFileName$w = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/ScrollButton.js";
2485
+ const size = 40;
2486
+ function ScrollButton({
2487
+ direction,
2488
+ disabled,
2489
+ onClick
2490
+ }) {
2491
+ const {
2492
+ t
2493
+ } = useI18n();
1573
2494
  return /*#__PURE__*/React.createElement("button", {
1574
- className: classNames(styles$b.button, _defineProperty({}, styles$b.disabled, disabled)),
2495
+ className: classNames(styles$c.button, {
2496
+ [styles$c.disabled]: disabled
2497
+ }),
1575
2498
  tabIndex: "-1",
1576
- onClick: onClick
2499
+ onClick: onClick,
2500
+ __self: this,
2501
+ __source: {
2502
+ fileName: _jsxFileName$w,
2503
+ lineNumber: 14,
2504
+ columnNumber: 5
2505
+ }
1577
2506
  }, /*#__PURE__*/React.createElement("div", {
1578
- className: styles$b.icon
2507
+ className: styles$c.icon,
2508
+ __self: this,
2509
+ __source: {
2510
+ fileName: _jsxFileName$w,
2511
+ lineNumber: 18,
2512
+ columnNumber: 7
2513
+ }
1579
2514
  }, /*#__PURE__*/React.createElement(ThemeIcon, {
1580
2515
  name: direction === 'left' ? 'arrowLeft' : 'arrowRight',
1581
2516
  width: size,
1582
- height: size
2517
+ height: size,
2518
+ __self: this,
2519
+ __source: {
2520
+ fileName: _jsxFileName$w,
2521
+ lineNumber: 19,
2522
+ columnNumber: 9
2523
+ }
1583
2524
  }), /*#__PURE__*/React.createElement("span", {
1584
- className: styles$b.visuallyHidden
2525
+ className: styles$c.visuallyHidden,
2526
+ __self: this,
2527
+ __source: {
2528
+ fileName: _jsxFileName$w,
2529
+ lineNumber: 22,
2530
+ columnNumber: 9
2531
+ }
1585
2532
  }, t(direction === 'left' ? 'pageflow_scrolled.public.previous' : 'pageflow_scrolled.public.next'))));
1586
2533
  }
1587
2534
 
@@ -1590,98 +2537,102 @@ function textColorForBackgroundColor(hex) {
1590
2537
  }
1591
2538
 
1592
2539
  function registerTemplateWidgetType (typeName, callback) {
1593
- var element = document.getElementById('template-widget-container');
2540
+ let element = document.getElementById('template-widget-container');
1594
2541
  callback(element);
1595
2542
  }
1596
2543
 
1597
- var WidgetSelectionRect = withInlineEditingAlternative('WidgetSelectionRect', function WidgetSelectionRect(_ref) {
1598
- var children = _ref.children;
2544
+ const WidgetSelectionRect = extensible('WidgetSelectionRect', function WidgetSelectionRect({
2545
+ children
2546
+ }) {
1599
2547
  return children;
1600
2548
  });
1601
2549
 
1602
- var styles$c = {"button":"LinkButton-module_button__33q1F","editable":"LinkButton-module_editable__FzuA4"};
1603
-
1604
- var _excluded$3 = ["href", "openInNewTab", "value", "onTextChange", "onLinkChange", "scaleCategory", "className", "actionButtonVisible", "linkPreviewPosition", "linkPreviewDisabled", "children"];
1605
- function LinkButton(_ref) {
1606
- var href = _ref.href,
1607
- openInNewTab = _ref.openInNewTab,
1608
- value = _ref.value,
1609
- onTextChange = _ref.onTextChange,
1610
- onLinkChange = _ref.onLinkChange,
1611
- scaleCategory = _ref.scaleCategory,
1612
- className = _ref.className,
1613
- actionButtonVisible = _ref.actionButtonVisible,
1614
- linkPreviewPosition = _ref.linkPreviewPosition,
1615
- linkPreviewDisabled = _ref.linkPreviewDisabled,
1616
- children = _ref.children,
1617
- props = _objectWithoutProperties(_ref, _excluded$3);
1618
- var _useI18n = useI18n({
1619
- locale: 'ui'
1620
- }),
1621
- t = _useI18n.t;
1622
- var _useContentElementEdi = useContentElementEditorState(),
1623
- isEditable = _useContentElementEdi.isEditable;
2550
+ var styles$d = {"button":"LinkButton-module_button__33q1F scope-linkButton","editable":"LinkButton-module_editable__FzuA4"};
2551
+
2552
+ var _jsxFileName$x = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/LinkButton.js";
2553
+ function LinkButton({
2554
+ href,
2555
+ openInNewTab,
2556
+ value,
2557
+ onTextChange,
2558
+ onLinkChange,
2559
+ scaleCategory,
2560
+ className,
2561
+ actionButtonVisible,
2562
+ linkPreviewPosition,
2563
+ linkPreviewDisabled,
2564
+ children,
2565
+ ...props
2566
+ }) {
2567
+ const {
2568
+ t
2569
+ } = useI18n({
2570
+ locale: 'ui'
2571
+ });
2572
+ const {
2573
+ isEditable
2574
+ } = useContentElementEditorState();
1624
2575
  return /*#__PURE__*/React.createElement(Text, {
1625
2576
  inline: true,
1626
- scaleCategory: scaleCategory
2577
+ scaleCategory: scaleCategory,
2578
+ __self: this,
2579
+ __source: {
2580
+ fileName: _jsxFileName$x,
2581
+ lineNumber: 29,
2582
+ columnNumber: 5
2583
+ }
1627
2584
  }, /*#__PURE__*/React.createElement(EditableLink, Object.assign({
1628
2585
  href: href,
1629
2586
  openInNewTab: openInNewTab,
1630
2587
  linkPreviewPosition: linkPreviewPosition,
1631
2588
  linkPreviewDisabled: utils.isBlankEditableTextValue(value) || linkPreviewDisabled,
1632
2589
  actionButtonVisible: actionButtonVisible,
1633
- className: classNames(styles$c.button, className, _defineProperty({}, styles$c.editable, isEditable)),
2590
+ className: classNames(styles$d.button, className, {
2591
+ [styles$d.editable]: isEditable
2592
+ }),
1634
2593
  onChange: onLinkChange
1635
- }, props), /*#__PURE__*/React.createElement(EditableInlineText, {
2594
+ }, props, {
2595
+ __self: this,
2596
+ __source: {
2597
+ fileName: _jsxFileName$x,
2598
+ lineNumber: 30,
2599
+ columnNumber: 7
2600
+ }
2601
+ }), /*#__PURE__*/React.createElement(EditableInlineText, {
1636
2602
  value: value,
1637
2603
  onChange: onTextChange,
1638
- placeholder: t('pageflow_scrolled.inline_editing.type_text')
2604
+ placeholder: t('pageflow_scrolled.inline_editing.type_text'),
2605
+ __self: this,
2606
+ __source: {
2607
+ fileName: _jsxFileName$x,
2608
+ lineNumber: 38,
2609
+ columnNumber: 9
2610
+ }
1639
2611
  }), children));
1640
2612
  }
1641
2613
 
1642
- function _regeneratorRuntime$1() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime$1 = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == typeof h && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(typeof e + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
1643
- var editMode = typeof window !== 'undefined' && window.location.pathname.indexOf('/editor/entries') === 0;
1644
- var withShadowClassName = styles$d.withShadow;
1645
- global.pageflowScrolledRender = /*#__PURE__*/function () {
1646
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime$1().mark(function _callee(seed) {
1647
- return _regeneratorRuntime$1().wrap(function _callee$(_context) {
1648
- while (1) switch (_context.prev = _context.next) {
1649
- case 0:
1650
- setupI18n(seed.i18n);
1651
- features.enable('frontend', seed.config.enabledFeatureNames);
1652
- _context.next = 4;
1653
- return browser.detectFeatures();
1654
- case 4:
1655
- _context.next = 6;
1656
- return loadDashUnlessHlsSupported(seed);
1657
- case 6:
1658
- if (!editMode) {
1659
- _context.next = 11;
1660
- break;
1661
- }
1662
- _context.next = 9;
1663
- return loadInlineEditingComponents();
1664
- case 9:
1665
- _context.next = 12;
1666
- break;
1667
- case 11:
1668
- registerVendors({
1669
- contentElementTypes: api.contentElementTypes,
1670
- consent: consent,
1671
- seed: seed
1672
- });
1673
- case 12:
1674
- render(seed);
1675
- case 13:
1676
- case "end":
1677
- return _context.stop();
1678
- }
1679
- }, _callee);
1680
- }));
1681
- return function (_x) {
1682
- return _ref.apply(this, arguments);
1683
- };
1684
- }();
2614
+ var _jsxFileName$y = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/frontend/index.js";
2615
+ const editMode = typeof window !== 'undefined' && window.location.pathname.indexOf('/editor/entries') === 0;
2616
+ const withShadowClassName = styles$f.withShadow;
2617
+ global.pageflowScrolledRender = async function (seed) {
2618
+ setupI18n(seed.i18n);
2619
+ features.enable('frontend', seed.config.enabledFeatureNames);
2620
+ await browser.detectFeatures();
2621
+ await loadDashUnlessHlsSupported(seed);
2622
+ if (seed.config.loadInlineEditing) {
2623
+ await loadInlineEditingExtensions();
2624
+ } else {
2625
+ registerVendors({
2626
+ contentElementTypes: api.contentElementTypes,
2627
+ consent,
2628
+ seed
2629
+ });
2630
+ }
2631
+ render(seed);
2632
+ if (seed.config.loadCommenting) {
2633
+ loadCommentingExtensions();
2634
+ }
2635
+ };
1685
2636
  global.pageflowScrolledRegisterUpdateSeedHandler = function () {
1686
2637
  if (window.parent !== window) {
1687
2638
  window.addEventListener('message', receive);
@@ -1694,22 +2645,66 @@ global.pageflowScrolledRegisterUpdateSeedHandler = function () {
1694
2645
  }
1695
2646
  }
1696
2647
  };
2648
+ function bootFromSeedElement() {
2649
+ const element = document.querySelector('script[type="application/json"][data-pageflow-scrolled-seed]');
2650
+ if (element) {
2651
+ global.pageflowScrolledRender(JSON.parse(element.textContent));
2652
+ }
2653
+ }
2654
+ if (typeof document !== 'undefined') {
2655
+ // Widget packs (defaultNavigation, consentBar, mainStorylineSheet, ...) are
2656
+ // separate scripts that load after this entry bundle and register their widget
2657
+ // types on execution. All deferred pack scripts run before DOMContentLoaded, so
2658
+ // waiting for that event is what guarantees every widget type - and the seed
2659
+ // element that follows the scripts - is present before we render.
2660
+ if (document.readyState === 'complete') {
2661
+ bootFromSeedElement();
2662
+ } else {
2663
+ document.addEventListener('DOMContentLoaded', bootFromSeedElement);
2664
+ }
2665
+ }
1697
2666
  function render(seed) {
1698
2667
  if (editMode) {
1699
2668
  ReactDOM.render( /*#__PURE__*/React.createElement(Root, {
1700
- seed: seed
2669
+ seed: seed,
2670
+ __self: this,
2671
+ __source: {
2672
+ fileName: _jsxFileName$y,
2673
+ lineNumber: 226,
2674
+ columnNumber: 21
2675
+ }
1701
2676
  }), document.getElementById('root'));
1702
2677
  } else {
1703
2678
  ReactDOM.hydrate( /*#__PURE__*/React.createElement(Root, {
1704
- seed: seed
2679
+ seed: seed,
2680
+ __self: this,
2681
+ __source: {
2682
+ fileName: _jsxFileName$y,
2683
+ lineNumber: 229,
2684
+ columnNumber: 22
2685
+ }
1705
2686
  }), document.getElementById('root'));
1706
2687
  }
1707
2688
  }
1708
- function Root(_ref2) {
1709
- var seed = _ref2.seed;
2689
+ function Root({
2690
+ seed
2691
+ }) {
1710
2692
  return /*#__PURE__*/React.createElement(RootProviders, {
1711
- seed: seed
1712
- }, /*#__PURE__*/React.createElement(Entry, null));
2693
+ seed: seed,
2694
+ __self: this,
2695
+ __source: {
2696
+ fileName: _jsxFileName$y,
2697
+ lineNumber: 235,
2698
+ columnNumber: 5
2699
+ }
2700
+ }, /*#__PURE__*/React.createElement(Entry, {
2701
+ __self: this,
2702
+ __source: {
2703
+ fileName: _jsxFileName$y,
2704
+ lineNumber: 236,
2705
+ columnNumber: 7
2706
+ }
2707
+ }));
1713
2708
  }
1714
2709
 
1715
- export { AudioPlayerControls, ClassicPlayerControls, ContentElementBox, ContentElementFigure, EditableInlineText, EditableLink, Entry, ExpandableImage, Figure, FitViewport, LinkButton, LinkTooltipProvider, MediaInteractionTracking, MediaPlayerControls, PaginationIndicator, Panorama, PlayerControls, Root, ScrollButton, Tooltip, VideoPlayerControls, WaveformPlayerControls, WidgetSelectionRect, registerTemplateWidgetType, textColorForBackgroundColor, useScrollPosition, withShadowClassName };
2710
+ export { ActionButton, AudioPlayerControls, ClassicPlayerControls, ContentElementBox, ContentElementFigure, EditableInlineText, EditableLink, Entry, ExpandableImage, Figure, FilePlaceholder, FitViewport, LinkButton, LinkTooltipProvider, MediaInteractionTracking, MediaPlayerControls, PaginationIndicator, Panorama, Placeholder, PlayerControls, Root, ScrollButton, Tooltip, VideoPlayerControls, WaveformPlayerControls, WidgetSelectionRect, contentElementBoxProps, processImageModifiers, registerTemplateWidgetType, textColorForBackgroundColor, useFileWithCropPosition, usePlayerControlsInactive, useScrollPosition, withShadowClassName };