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
@@ -0,0 +1,823 @@
1
+ import { useContentElementEditorState, useContentElementLifecycle, ContentElementBox, ThirdPartyOptIn, ThirdPartyOptOutInfo, frontend } from 'pageflow-scrolled/frontend';
2
+ import React, { useState, useCallback, useRef, useEffect } from 'react';
3
+ import classNames from 'classnames';
4
+
5
+ const loadedScripts = new Set();
6
+ const loadingScripts = new Map();
7
+ function loadScript(src) {
8
+ if (loadedScripts.has(src)) {
9
+ return Promise.resolve();
10
+ }
11
+ if (loadingScripts.has(src)) {
12
+ return loadingScripts.get(src);
13
+ }
14
+ const promise = new Promise((resolve, reject) => {
15
+ const script = document.createElement('script');
16
+ script.src = src;
17
+ script.addEventListener('load', () => {
18
+ loadedScripts.add(src);
19
+ loadingScripts.delete(src);
20
+ resolve();
21
+ });
22
+ script.addEventListener('error', () => {
23
+ loadingScripts.delete(src);
24
+ reject(new Error(`Failed to load script: ${src}`));
25
+ });
26
+ document.head.appendChild(script);
27
+ });
28
+ loadingScripts.set(src, promise);
29
+ return promise;
30
+ }
31
+ function reloadScript(src) {
32
+ const scripts = document.querySelectorAll(`script[src="${src}"]`);
33
+ scripts.forEach(script => script.remove());
34
+ loadedScripts.delete(src);
35
+ loadingScripts.delete(src);
36
+ return loadScript(src);
37
+ }
38
+
39
+ var styles = {"wrapper":"XPlaceholder-module_wrapper__1IvCE","row":"XPlaceholder-module_row__1Ty9F","item":"XPlaceholder-module_item__2AlY9 placeholder-module_item__2i0eO","avatar":"XPlaceholder-module_avatar__1TfhZ XPlaceholder-module_item__2AlY9 placeholder-module_item__2i0eO","info":"XPlaceholder-module_info__32nNs","name":"XPlaceholder-module_name__1Gj6h XPlaceholder-module_item__2AlY9 placeholder-module_item__2i0eO","handle":"XPlaceholder-module_handle__1UTKA XPlaceholder-module_item__2AlY9 placeholder-module_item__2i0eO","text":"XPlaceholder-module_text__lvrT3 XPlaceholder-module_item__2AlY9 placeholder-module_item__2i0eO"};
40
+
41
+ function _extends() {
42
+ _extends = Object.assign ? Object.assign.bind() : function (target) {
43
+ for (var i = 1; i < arguments.length; i++) {
44
+ var source = arguments[i];
45
+ for (var key in source) {
46
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
47
+ target[key] = source[key];
48
+ }
49
+ }
50
+ }
51
+ return target;
52
+ };
53
+ return _extends.apply(this, arguments);
54
+ }
55
+ var Icon = (({
56
+ styles = {},
57
+ ...props
58
+ }) => /*#__PURE__*/React.createElement("svg", _extends({
59
+ viewBox: "0 0 512 512",
60
+ "aria-hidden": "true"
61
+ }, props), /*#__PURE__*/React.createElement("path", {
62
+ d: "M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9L389.2 48zm-24.8 373.8h39.1L151.1 88h-42l255.3 333.8z"
63
+ })));
64
+
65
+ var _jsxFileName = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/contentElements/socialEmbed/providers/x/XPlaceholder.js";
66
+ function XPlaceholder({
67
+ children,
68
+ minHeight
69
+ }) {
70
+ return /*#__PURE__*/React.createElement("div", {
71
+ className: styles.wrapper,
72
+ style: {
73
+ minHeight
74
+ },
75
+ __self: this,
76
+ __source: {
77
+ fileName: _jsxFileName,
78
+ lineNumber: 9,
79
+ columnNumber: 5
80
+ }
81
+ }, /*#__PURE__*/React.createElement("div", {
82
+ className: styles.row,
83
+ __self: this,
84
+ __source: {
85
+ fileName: _jsxFileName,
86
+ lineNumber: 10,
87
+ columnNumber: 7
88
+ }
89
+ }, /*#__PURE__*/React.createElement("div", {
90
+ className: styles.avatar,
91
+ __self: this,
92
+ __source: {
93
+ fileName: _jsxFileName,
94
+ lineNumber: 11,
95
+ columnNumber: 9
96
+ }
97
+ }), /*#__PURE__*/React.createElement("div", {
98
+ className: styles.info,
99
+ __self: this,
100
+ __source: {
101
+ fileName: _jsxFileName,
102
+ lineNumber: 12,
103
+ columnNumber: 9
104
+ }
105
+ }, /*#__PURE__*/React.createElement("div", {
106
+ className: styles.name,
107
+ __self: this,
108
+ __source: {
109
+ fileName: _jsxFileName,
110
+ lineNumber: 13,
111
+ columnNumber: 11
112
+ }
113
+ }), /*#__PURE__*/React.createElement("div", {
114
+ className: styles.handle,
115
+ __self: this,
116
+ __source: {
117
+ fileName: _jsxFileName,
118
+ lineNumber: 14,
119
+ columnNumber: 11
120
+ }
121
+ })), /*#__PURE__*/React.createElement(Icon, {
122
+ width: 24,
123
+ height: 24,
124
+ __self: this,
125
+ __source: {
126
+ fileName: _jsxFileName,
127
+ lineNumber: 16,
128
+ columnNumber: 9
129
+ }
130
+ })), children || /*#__PURE__*/React.createElement("div", {
131
+ className: styles.text,
132
+ __self: this,
133
+ __source: {
134
+ fileName: _jsxFileName,
135
+ lineNumber: 18,
136
+ columnNumber: 20
137
+ }
138
+ }));
139
+ }
140
+
141
+ var _jsxFileName$1 = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/contentElements/socialEmbed/providers/x/index.js";
142
+ const xProvider = {
143
+ name: 'x',
144
+ Placeholder: XPlaceholder,
145
+ embedScript: 'https://platform.twitter.com/widgets.js',
146
+ Seed: () => /*#__PURE__*/React.createElement("div", {
147
+ __self: undefined,
148
+ __source: {
149
+ fileName: _jsxFileName$1,
150
+ lineNumber: 8,
151
+ columnNumber: 15
152
+ }
153
+ }),
154
+ process({
155
+ element,
156
+ url,
157
+ configuration
158
+ }) {
159
+ var _window$twttr;
160
+ const postId = url ? url.split('/')[5] : undefined;
161
+ if (!postId || !((_window$twttr = window.twttr) === null || _window$twttr === void 0 ? void 0 : _window$twttr.widgets)) {
162
+ return Promise.reject(new Error('Invalid post URL or X widgets not loaded'));
163
+ }
164
+ const options = {
165
+ cards: configuration.hideMedia ? 'hidden' : '',
166
+ conversation: configuration.hideConversation ? 'none' : ''
167
+ };
168
+ return window.twttr.widgets.createTweet(postId, element, options);
169
+ }
170
+ };
171
+
172
+ var styles$1 = {"wrapper":"InstagramPlaceholder-module_wrapper__1RYie","item":"InstagramPlaceholder-module_item__1qjTR placeholder-module_item__2i0eO","header":"InstagramPlaceholder-module_header__3sU6C","avatar":"InstagramPlaceholder-module_avatar__BDRaM InstagramPlaceholder-module_item__1qjTR placeholder-module_item__2i0eO","username":"InstagramPlaceholder-module_username__26OVQ InstagramPlaceholder-module_item__1qjTR placeholder-module_item__2i0eO","imageContainer":"InstagramPlaceholder-module_imageContainer__16taa","content":"InstagramPlaceholder-module_content__TxvEV InstagramPlaceholder-module_item__1qjTR placeholder-module_item__2i0eO","footer":"InstagramPlaceholder-module_footer__1ebKe","textLine":"InstagramPlaceholder-module_textLine__1difc InstagramPlaceholder-module_item__1qjTR placeholder-module_item__2i0eO","textLineShort":"InstagramPlaceholder-module_textLineShort__1qzJX InstagramPlaceholder-module_textLine__1difc InstagramPlaceholder-module_item__1qjTR placeholder-module_item__2i0eO","textLineMedium":"InstagramPlaceholder-module_textLineMedium__1WvN4 InstagramPlaceholder-module_textLine__1difc InstagramPlaceholder-module_item__1qjTR placeholder-module_item__2i0eO","textLineLong":"InstagramPlaceholder-module_textLineLong__x20k2 InstagramPlaceholder-module_textLine__1difc InstagramPlaceholder-module_item__1qjTR placeholder-module_item__2i0eO"};
173
+
174
+ var _jsxFileName$2 = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/contentElements/socialEmbed/providers/instagram/InstagramPlaceholder.js";
175
+ function InstagramPlaceholder({
176
+ children,
177
+ minHeight
178
+ }) {
179
+ return /*#__PURE__*/React.createElement("div", {
180
+ className: styles$1.wrapper,
181
+ style: {
182
+ minHeight
183
+ },
184
+ __self: this,
185
+ __source: {
186
+ fileName: _jsxFileName$2,
187
+ lineNumber: 7,
188
+ columnNumber: 5
189
+ }
190
+ }, /*#__PURE__*/React.createElement("div", {
191
+ className: styles$1.header,
192
+ __self: this,
193
+ __source: {
194
+ fileName: _jsxFileName$2,
195
+ lineNumber: 8,
196
+ columnNumber: 7
197
+ }
198
+ }, /*#__PURE__*/React.createElement("div", {
199
+ className: styles$1.avatar,
200
+ __self: this,
201
+ __source: {
202
+ fileName: _jsxFileName$2,
203
+ lineNumber: 9,
204
+ columnNumber: 9
205
+ }
206
+ }), /*#__PURE__*/React.createElement("div", {
207
+ className: styles$1.username,
208
+ __self: this,
209
+ __source: {
210
+ fileName: _jsxFileName$2,
211
+ lineNumber: 10,
212
+ columnNumber: 9
213
+ }
214
+ })), /*#__PURE__*/React.createElement("div", {
215
+ className: styles$1.imageContainer,
216
+ __self: this,
217
+ __source: {
218
+ fileName: _jsxFileName$2,
219
+ lineNumber: 12,
220
+ columnNumber: 7
221
+ }
222
+ }, children || /*#__PURE__*/React.createElement("div", {
223
+ className: styles$1.content,
224
+ __self: this,
225
+ __source: {
226
+ fileName: _jsxFileName$2,
227
+ lineNumber: 13,
228
+ columnNumber: 22
229
+ }
230
+ })), /*#__PURE__*/React.createElement("div", {
231
+ className: styles$1.footer,
232
+ __self: this,
233
+ __source: {
234
+ fileName: _jsxFileName$2,
235
+ lineNumber: 15,
236
+ columnNumber: 7
237
+ }
238
+ }, /*#__PURE__*/React.createElement("div", {
239
+ className: styles$1.textLineShort,
240
+ __self: this,
241
+ __source: {
242
+ fileName: _jsxFileName$2,
243
+ lineNumber: 16,
244
+ columnNumber: 9
245
+ }
246
+ }), /*#__PURE__*/React.createElement("div", {
247
+ className: styles$1.textLineMedium,
248
+ __self: this,
249
+ __source: {
250
+ fileName: _jsxFileName$2,
251
+ lineNumber: 17,
252
+ columnNumber: 9
253
+ }
254
+ }), /*#__PURE__*/React.createElement("div", {
255
+ className: styles$1.textLineLong,
256
+ __self: this,
257
+ __source: {
258
+ fileName: _jsxFileName$2,
259
+ lineNumber: 18,
260
+ columnNumber: 9
261
+ }
262
+ })));
263
+ }
264
+
265
+ function waitForIframeMessage(element) {
266
+ return new Promise(resolve => {
267
+ const checkForIframe = () => {
268
+ const iframe = element.querySelector('iframe');
269
+ if (iframe) {
270
+ const handleMessage = event => {
271
+ if (event.source === iframe.contentWindow) {
272
+ const hasHeight = typeof event.data === 'object' ? event.data && 'height' in event.data : typeof event.data === 'string' && event.data.includes('height');
273
+ if (hasHeight) {
274
+ window.removeEventListener('message', handleMessage);
275
+ resolve();
276
+ }
277
+ }
278
+ };
279
+ window.addEventListener('message', handleMessage);
280
+ } else {
281
+ setTimeout(checkForIframe, 50);
282
+ }
283
+ };
284
+ checkForIframe();
285
+ });
286
+ }
287
+
288
+ var _jsxFileName$3 = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/contentElements/socialEmbed/providers/instagram/index.js";
289
+ const instagramProvider = {
290
+ name: 'instagram',
291
+ Placeholder: InstagramPlaceholder,
292
+ embedScript: 'https://www.instagram.com/embed.js',
293
+ Seed: ({
294
+ url
295
+ }) => /*#__PURE__*/React.createElement("blockquote", {
296
+ className: "instagram-media",
297
+ "data-instgrm-captioned": true,
298
+ "data-instgrm-permalink": url,
299
+ "data-instgrm-version": "14",
300
+ __self: undefined,
301
+ __source: {
302
+ fileName: _jsxFileName$3,
303
+ lineNumber: 10,
304
+ columnNumber: 5
305
+ }
306
+ }, /*#__PURE__*/React.createElement("a", {
307
+ href: url,
308
+ __self: undefined,
309
+ __source: {
310
+ fileName: _jsxFileName$3,
311
+ lineNumber: 15,
312
+ columnNumber: 7
313
+ }
314
+ }, "View this post on Instagram")),
315
+ process() {
316
+ var _window$instgrm;
317
+ if (!((_window$instgrm = window.instgrm) === null || _window$instgrm === void 0 ? void 0 : _window$instgrm.Embeds)) {
318
+ return Promise.reject(new Error('Instagram embed script not loaded'));
319
+ }
320
+ window.instgrm.Embeds.process();
321
+ },
322
+ ready({
323
+ element
324
+ }) {
325
+ return waitForIframeMessage(element);
326
+ }
327
+ };
328
+
329
+ var styles$2 = {"wrapper":"BlueskyPlaceholder-module_wrapper__3YNT8","item":"BlueskyPlaceholder-module_item__2KUVd placeholder-module_item__2i0eO","header":"BlueskyPlaceholder-module_header__30fsg","avatar":"BlueskyPlaceholder-module_avatar__2TZGS BlueskyPlaceholder-module_item__2KUVd placeholder-module_item__2i0eO","info":"BlueskyPlaceholder-module_info__2qIqO","name":"BlueskyPlaceholder-module_name__1lhlW BlueskyPlaceholder-module_item__2KUVd placeholder-module_item__2i0eO","handle":"BlueskyPlaceholder-module_handle__4ghgn BlueskyPlaceholder-module_item__2KUVd placeholder-module_item__2i0eO","content":"BlueskyPlaceholder-module_content__1TrLN BlueskyPlaceholder-module_item__2KUVd placeholder-module_item__2i0eO"};
330
+
331
+ function _extends$1() {
332
+ _extends$1 = Object.assign ? Object.assign.bind() : function (target) {
333
+ for (var i = 1; i < arguments.length; i++) {
334
+ var source = arguments[i];
335
+ for (var key in source) {
336
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
337
+ target[key] = source[key];
338
+ }
339
+ }
340
+ }
341
+ return target;
342
+ };
343
+ return _extends$1.apply(this, arguments);
344
+ }
345
+ var Icon$1 = (({
346
+ styles = {},
347
+ ...props
348
+ }) => /*#__PURE__*/React.createElement("svg", _extends$1({
349
+ xmlns: "http://www.w3.org/2000/svg",
350
+ viewBox: "0 0 320 286"
351
+ }, props), /*#__PURE__*/React.createElement("path", {
352
+ d: "M69.364 19.146c36.687 27.806 76.147 84.186 90.636 114.439 14.489-30.253 53.948-86.633 90.636-114.439C277.107-.917 320-16.44 320 32.957c0 9.865-5.603 82.875-8.889 94.729-11.423 41.208-53.045 51.719-90.071 45.357 64.719 11.12 81.182 47.953 45.627 84.785-80 82.874-106.667-44.333-106.667-44.333s-26.667 127.207-106.667 44.333c-35.555-36.832-19.092-73.665 45.627-84.785-37.026 6.362-78.648-4.149-90.071-45.357C5.603 115.832 0 42.822 0 32.957 0-16.44 42.893-.917 69.364 19.147z"
353
+ })));
354
+
355
+ var _jsxFileName$4 = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/contentElements/socialEmbed/providers/bluesky/BlueskyPlaceholder.js";
356
+ function BlueskyPlaceholder({
357
+ children,
358
+ minHeight
359
+ }) {
360
+ return /*#__PURE__*/React.createElement("div", {
361
+ className: styles$2.wrapper,
362
+ style: {
363
+ minHeight
364
+ },
365
+ __self: this,
366
+ __source: {
367
+ fileName: _jsxFileName$4,
368
+ lineNumber: 9,
369
+ columnNumber: 5
370
+ }
371
+ }, /*#__PURE__*/React.createElement("div", {
372
+ className: styles$2.header,
373
+ __self: this,
374
+ __source: {
375
+ fileName: _jsxFileName$4,
376
+ lineNumber: 10,
377
+ columnNumber: 7
378
+ }
379
+ }, /*#__PURE__*/React.createElement("div", {
380
+ className: styles$2.avatar,
381
+ __self: this,
382
+ __source: {
383
+ fileName: _jsxFileName$4,
384
+ lineNumber: 11,
385
+ columnNumber: 9
386
+ }
387
+ }), /*#__PURE__*/React.createElement("div", {
388
+ className: styles$2.info,
389
+ __self: this,
390
+ __source: {
391
+ fileName: _jsxFileName$4,
392
+ lineNumber: 12,
393
+ columnNumber: 9
394
+ }
395
+ }, /*#__PURE__*/React.createElement("div", {
396
+ className: styles$2.name,
397
+ __self: this,
398
+ __source: {
399
+ fileName: _jsxFileName$4,
400
+ lineNumber: 13,
401
+ columnNumber: 11
402
+ }
403
+ }), /*#__PURE__*/React.createElement("div", {
404
+ className: styles$2.handle,
405
+ __self: this,
406
+ __source: {
407
+ fileName: _jsxFileName$4,
408
+ lineNumber: 14,
409
+ columnNumber: 11
410
+ }
411
+ })), /*#__PURE__*/React.createElement(Icon$1, {
412
+ __self: this,
413
+ __source: {
414
+ fileName: _jsxFileName$4,
415
+ lineNumber: 16,
416
+ columnNumber: 9
417
+ }
418
+ })), children || /*#__PURE__*/React.createElement("div", {
419
+ className: styles$2.content,
420
+ __self: this,
421
+ __source: {
422
+ fileName: _jsxFileName$4,
423
+ lineNumber: 18,
424
+ columnNumber: 20
425
+ }
426
+ }));
427
+ }
428
+
429
+ var _jsxFileName$5 = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/contentElements/socialEmbed/providers/bluesky/index.js";
430
+ const blueskyProvider = {
431
+ name: 'bluesky',
432
+ Placeholder: BlueskyPlaceholder,
433
+ embedScript: 'https://embed.bsky.app/static/embed.js',
434
+ Seed: ({
435
+ url
436
+ }) => /*#__PURE__*/React.createElement("div", {
437
+ "data-bluesky-uri": url,
438
+ __self: undefined,
439
+ __source: {
440
+ fileName: _jsxFileName$5,
441
+ lineNumber: 9,
442
+ columnNumber: 20
443
+ }
444
+ }),
445
+ process() {
446
+ var _window$bluesky;
447
+ if (!((_window$bluesky = window.bluesky) === null || _window$bluesky === void 0 ? void 0 : _window$bluesky.scan)) {
448
+ return Promise.reject(new Error('Bluesky embed script not loaded'));
449
+ }
450
+ window.bluesky.scan();
451
+ },
452
+ ready({
453
+ element
454
+ }) {
455
+ return waitForIframeMessage(element);
456
+ }
457
+ };
458
+
459
+ var styles$3 = {"container":"TiktokPlaceholder-module_container__1gzeV","item":"TiktokPlaceholder-module_item__2N_wf placeholder-module_item__2i0eO","header":"TiktokPlaceholder-module_header__1HXzc","avatar":"TiktokPlaceholder-module_avatar__1YOKi TiktokPlaceholder-module_item__2N_wf placeholder-module_item__2i0eO","userInfo":"TiktokPlaceholder-module_userInfo__2SgqH","username":"TiktokPlaceholder-module_username__17Vr3 TiktokPlaceholder-module_item__2N_wf placeholder-module_item__2i0eO","displayName":"TiktokPlaceholder-module_displayName__RAhw3 TiktokPlaceholder-module_item__2N_wf placeholder-module_item__2i0eO","viewProfileButton":"TiktokPlaceholder-module_viewProfileButton__1Xzg1 TiktokPlaceholder-module_item__2N_wf placeholder-module_item__2i0eO","videoArea":"TiktokPlaceholder-module_videoArea__1Ij87","video":"TiktokPlaceholder-module_video__3oO4p TiktokPlaceholder-module_item__2N_wf placeholder-module_item__2i0eO","watchBar":"TiktokPlaceholder-module_watchBar__1qoOk TiktokPlaceholder-module_item__2N_wf placeholder-module_item__2i0eO","footer":"TiktokPlaceholder-module_footer__1Nrg-","textLine":"TiktokPlaceholder-module_textLine__3jh0B TiktokPlaceholder-module_item__2N_wf placeholder-module_item__2i0eO","textLineShort":"TiktokPlaceholder-module_textLineShort__2oels TiktokPlaceholder-module_textLine__3jh0B TiktokPlaceholder-module_item__2N_wf placeholder-module_item__2i0eO","textLineMedium":"TiktokPlaceholder-module_textLineMedium__3MI-M TiktokPlaceholder-module_textLine__3jh0B TiktokPlaceholder-module_item__2N_wf placeholder-module_item__2i0eO","textLineLong":"TiktokPlaceholder-module_textLineLong__2Zuwg TiktokPlaceholder-module_textLine__3jh0B TiktokPlaceholder-module_item__2N_wf placeholder-module_item__2i0eO"};
460
+
461
+ var _jsxFileName$6 = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/contentElements/socialEmbed/providers/tiktok/TiktokPlaceholder.js";
462
+ function TiktokPlaceholder({
463
+ children,
464
+ minHeight
465
+ }) {
466
+ return /*#__PURE__*/React.createElement("div", {
467
+ className: styles$3.container,
468
+ style: minHeight ? {
469
+ minHeight: `${minHeight}px`
470
+ } : {},
471
+ __self: this,
472
+ __source: {
473
+ fileName: _jsxFileName$6,
474
+ lineNumber: 6,
475
+ columnNumber: 5
476
+ }
477
+ }, /*#__PURE__*/React.createElement("div", {
478
+ className: styles$3.header,
479
+ __self: this,
480
+ __source: {
481
+ fileName: _jsxFileName$6,
482
+ lineNumber: 7,
483
+ columnNumber: 7
484
+ }
485
+ }, /*#__PURE__*/React.createElement("div", {
486
+ className: styles$3.avatar,
487
+ __self: this,
488
+ __source: {
489
+ fileName: _jsxFileName$6,
490
+ lineNumber: 8,
491
+ columnNumber: 9
492
+ }
493
+ }), /*#__PURE__*/React.createElement("div", {
494
+ className: styles$3.userInfo,
495
+ __self: this,
496
+ __source: {
497
+ fileName: _jsxFileName$6,
498
+ lineNumber: 9,
499
+ columnNumber: 9
500
+ }
501
+ }, /*#__PURE__*/React.createElement("div", {
502
+ className: styles$3.username,
503
+ __self: this,
504
+ __source: {
505
+ fileName: _jsxFileName$6,
506
+ lineNumber: 10,
507
+ columnNumber: 11
508
+ }
509
+ }), /*#__PURE__*/React.createElement("div", {
510
+ className: styles$3.displayName,
511
+ __self: this,
512
+ __source: {
513
+ fileName: _jsxFileName$6,
514
+ lineNumber: 11,
515
+ columnNumber: 11
516
+ }
517
+ })), /*#__PURE__*/React.createElement("div", {
518
+ className: styles$3.viewProfileButton,
519
+ __self: this,
520
+ __source: {
521
+ fileName: _jsxFileName$6,
522
+ lineNumber: 13,
523
+ columnNumber: 9
524
+ }
525
+ })), /*#__PURE__*/React.createElement("div", {
526
+ className: styles$3.videoArea,
527
+ __self: this,
528
+ __source: {
529
+ fileName: _jsxFileName$6,
530
+ lineNumber: 15,
531
+ columnNumber: 7
532
+ }
533
+ }, children || /*#__PURE__*/React.createElement("div", {
534
+ className: styles$3.video,
535
+ __self: this,
536
+ __source: {
537
+ fileName: _jsxFileName$6,
538
+ lineNumber: 16,
539
+ columnNumber: 22
540
+ }
541
+ })), /*#__PURE__*/React.createElement("div", {
542
+ className: styles$3.watchBar,
543
+ __self: this,
544
+ __source: {
545
+ fileName: _jsxFileName$6,
546
+ lineNumber: 18,
547
+ columnNumber: 9
548
+ }
549
+ }), /*#__PURE__*/React.createElement("div", {
550
+ className: styles$3.footer,
551
+ __self: this,
552
+ __source: {
553
+ fileName: _jsxFileName$6,
554
+ lineNumber: 19,
555
+ columnNumber: 9
556
+ }
557
+ }, /*#__PURE__*/React.createElement("div", {
558
+ className: styles$3.textLineShort,
559
+ __self: this,
560
+ __source: {
561
+ fileName: _jsxFileName$6,
562
+ lineNumber: 20,
563
+ columnNumber: 11
564
+ }
565
+ }), /*#__PURE__*/React.createElement("div", {
566
+ className: styles$3.textLineMedium,
567
+ __self: this,
568
+ __source: {
569
+ fileName: _jsxFileName$6,
570
+ lineNumber: 21,
571
+ columnNumber: 11
572
+ }
573
+ }), /*#__PURE__*/React.createElement("div", {
574
+ className: styles$3.textLineLong,
575
+ __self: this,
576
+ __source: {
577
+ fileName: _jsxFileName$6,
578
+ lineNumber: 22,
579
+ columnNumber: 11
580
+ }
581
+ })));
582
+ }
583
+
584
+ var _jsxFileName$7 = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/contentElements/socialEmbed/providers/tiktok/index.js";
585
+ const tiktokProvider = {
586
+ name: 'tiktok',
587
+ Placeholder: TiktokPlaceholder,
588
+ embedScript: 'https://www.tiktok.com/embed.js',
589
+ Seed: ({
590
+ url
591
+ }) => {
592
+ var _url$split$;
593
+ const videoId = url ? (_url$split$ = url.split('/video/')[1]) === null || _url$split$ === void 0 ? void 0 : _url$split$.split('?')[0] : undefined;
594
+ return /*#__PURE__*/React.createElement("blockquote", {
595
+ className: "tiktok-embed",
596
+ cite: url,
597
+ "data-video-id": videoId,
598
+ style: {
599
+ width: '325px'
600
+ },
601
+ __self: undefined,
602
+ __source: {
603
+ fileName: _jsxFileName$7,
604
+ lineNumber: 13,
605
+ columnNumber: 7
606
+ }
607
+ }, /*#__PURE__*/React.createElement("section", {
608
+ __self: undefined,
609
+ __source: {
610
+ fileName: _jsxFileName$7,
611
+ lineNumber: 18,
612
+ columnNumber: 9
613
+ }
614
+ }));
615
+ },
616
+ ready({
617
+ element
618
+ }) {
619
+ return waitForIframeMessage(element);
620
+ }
621
+ };
622
+
623
+ const defaultProviders = [xProvider, instagramProvider, blueskyProvider, tiktokProvider];
624
+
625
+ var styles$4 = {"wrapper":"SocialEmbed-module_wrapper__3gYhR","loadingContainer":"SocialEmbed-module_loadingContainer__2xlmf","container":"SocialEmbed-module_container__PlMW4"};
626
+
627
+ var _jsxFileName$8 = "/home/tfischbach/code/pageflow/entry_types/scrolled/package/src/contentElements/socialEmbed/SocialEmbed.js";
628
+ function SocialEmbed({
629
+ configuration,
630
+ providers = defaultProviders
631
+ }) {
632
+ const {
633
+ provider: providerName
634
+ } = configuration;
635
+ const provider = providers.find(p => p.name === providerName);
636
+ return /*#__PURE__*/React.createElement(SocialEmbedWithProvider, {
637
+ configuration: configuration,
638
+ provider: provider,
639
+ __self: this,
640
+ __source: {
641
+ fileName: _jsxFileName$8,
642
+ lineNumber: 22,
643
+ columnNumber: 5
644
+ }
645
+ });
646
+ }
647
+ function SocialEmbedWithProvider({
648
+ configuration,
649
+ provider
650
+ }) {
651
+ const {
652
+ url
653
+ } = configuration;
654
+ const {
655
+ isEditable,
656
+ isSelected
657
+ } = useContentElementEditorState();
658
+ const {
659
+ shouldLoad
660
+ } = useContentElementLifecycle();
661
+ const [minHeight, setMinHeight] = useState({});
662
+ const key = [url, JSON.stringify(configuration)].join('-');
663
+ const onLoad = useCallback(({
664
+ height
665
+ }) => {
666
+ setMinHeight({
667
+ [key]: height
668
+ });
669
+ }, [key]);
670
+ const Placeholder = provider.Placeholder;
671
+ return /*#__PURE__*/React.createElement(ContentElementBox, {
672
+ __self: this,
673
+ __source: {
674
+ fileName: _jsxFileName$8,
675
+ lineNumber: 45,
676
+ columnNumber: 5
677
+ }
678
+ }, /*#__PURE__*/React.createElement("div", {
679
+ style: {
680
+ pointerEvents: isEditable && !isSelected ? 'none' : undefined
681
+ },
682
+ __self: this,
683
+ __source: {
684
+ fileName: _jsxFileName$8,
685
+ lineNumber: 46,
686
+ columnNumber: 7
687
+ }
688
+ }, shouldLoad && url ? /*#__PURE__*/React.createElement(ThirdPartyOptIn, {
689
+ icon: false,
690
+ wrapper: children => /*#__PURE__*/React.createElement(Placeholder, {
691
+ __self: this,
692
+ __source: {
693
+ fileName: _jsxFileName$8,
694
+ lineNumber: 50,
695
+ columnNumber: 33
696
+ }
697
+ }, children),
698
+ __self: this,
699
+ __source: {
700
+ fileName: _jsxFileName$8,
701
+ lineNumber: 48,
702
+ columnNumber: 10
703
+ }
704
+ }, /*#__PURE__*/React.createElement(Embed, {
705
+ key: key,
706
+ provider: provider,
707
+ url: url,
708
+ configuration: configuration,
709
+ minHeight: minHeight[key],
710
+ onLoad: onLoad,
711
+ __self: this,
712
+ __source: {
713
+ fileName: _jsxFileName$8,
714
+ lineNumber: 51,
715
+ columnNumber: 12
716
+ }
717
+ })) : /*#__PURE__*/React.createElement(Placeholder, {
718
+ minHeight: minHeight[key],
719
+ __self: this,
720
+ __source: {
721
+ fileName: _jsxFileName$8,
722
+ lineNumber: 60,
723
+ columnNumber: 10
724
+ }
725
+ }), /*#__PURE__*/React.createElement(ThirdPartyOptOutInfo, {
726
+ __self: this,
727
+ __source: {
728
+ fileName: _jsxFileName$8,
729
+ lineNumber: 61,
730
+ columnNumber: 9
731
+ }
732
+ })));
733
+ }
734
+ function Embed({
735
+ provider,
736
+ url,
737
+ configuration,
738
+ minHeight,
739
+ onLoad
740
+ }) {
741
+ const ref = useRef(null);
742
+ const [scriptLoaded, setScriptLoaded] = useState(false);
743
+ const Placeholder = provider.Placeholder;
744
+ useEffect(() => {
745
+ let isComponentMounted = true;
746
+ const loadAndProcess = async () => {
747
+ try {
748
+ if (provider.process) {
749
+ await loadScript(provider.embedScript);
750
+ if (isComponentMounted) {
751
+ await provider.process({
752
+ element: ref.current,
753
+ url,
754
+ configuration
755
+ });
756
+ }
757
+ } else {
758
+ await reloadScript(provider.embedScript);
759
+ }
760
+ if (isComponentMounted && provider.ready) {
761
+ await provider.ready({
762
+ element: ref.current
763
+ });
764
+ }
765
+ if (isComponentMounted) {
766
+ var _ref$current;
767
+ setScriptLoaded(true);
768
+ onLoad({
769
+ height: ((_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.clientHeight) - 20
770
+ });
771
+ }
772
+ } catch (error) {
773
+ console.error(`Failed to load ${provider.name} embed:`, error);
774
+ }
775
+ };
776
+ loadAndProcess();
777
+ return () => {
778
+ isComponentMounted = false;
779
+ };
780
+ }, [provider, url, configuration, onLoad]);
781
+ return /*#__PURE__*/React.createElement("div", {
782
+ className: styles$4.wrapper,
783
+ __self: this,
784
+ __source: {
785
+ fileName: _jsxFileName$8,
786
+ lineNumber: 114,
787
+ columnNumber: 5
788
+ }
789
+ }, !scriptLoaded && /*#__PURE__*/React.createElement(Placeholder, {
790
+ minHeight: minHeight,
791
+ __self: this,
792
+ __source: {
793
+ fileName: _jsxFileName$8,
794
+ lineNumber: 115,
795
+ columnNumber: 25
796
+ }
797
+ }), /*#__PURE__*/React.createElement("div", {
798
+ className: classNames(styles$4.container, {
799
+ [styles$4.loadingContainer]: !scriptLoaded
800
+ }),
801
+ ref: ref,
802
+ __self: this,
803
+ __source: {
804
+ fileName: _jsxFileName$8,
805
+ lineNumber: 116,
806
+ columnNumber: 7
807
+ }
808
+ }, /*#__PURE__*/React.createElement(provider.Seed, {
809
+ url: url,
810
+ configuration: configuration,
811
+ __self: this,
812
+ __source: {
813
+ fileName: _jsxFileName$8,
814
+ lineNumber: 118,
815
+ columnNumber: 9
816
+ }
817
+ })));
818
+ }
819
+
820
+ frontend.contentElementTypes.register('socialEmbed', {
821
+ component: SocialEmbed,
822
+ lifecycle: true
823
+ });