pageflow 16.0.0 → 16.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +210 -33
  3. data/README.md +0 -1
  4. data/Rakefile +1 -1
  5. data/admins/pageflow/entry.rb +0 -1
  6. data/admins/pageflow/sites.rb +3 -0
  7. data/app/assets/javascripts/pageflow/dist/ui.js +298 -72
  8. data/app/assets/stylesheets/pageflow/admin/permalink_input.scss +10 -0
  9. data/app/assets/stylesheets/pageflow/editor/drop_down_button.scss +6 -1
  10. data/app/assets/stylesheets/pageflow/editor/file_thumbnails.scss +4 -0
  11. data/app/assets/stylesheets/pageflow/editor/help.scss +3 -3
  12. data/app/assets/stylesheets/pageflow/editor/info_box.scss +7 -0
  13. data/app/assets/stylesheets/pageflow/editor/inputs/file_input.scss +0 -5
  14. data/app/assets/stylesheets/pageflow/ui/forms.scss +1 -1
  15. data/app/controllers/pageflow/chapters_controller.rb +2 -2
  16. data/app/controllers/pageflow/editor/files_controller.rb +1 -1
  17. data/app/controllers/pageflow/entries_controller.rb +10 -0
  18. data/app/controllers/pageflow/feeds_controller.rb +18 -0
  19. data/app/controllers/pageflow/pages_controller.rb +2 -2
  20. data/app/controllers/pageflow/sitemaps_controller.rb +15 -0
  21. data/app/controllers/pageflow/storylines_controller.rb +2 -2
  22. data/app/helpers/pageflow/entries_helper.rb +2 -1
  23. data/app/helpers/pageflow/feeds_helper.rb +66 -0
  24. data/app/helpers/pageflow/page_types_helper.rb +9 -9
  25. data/app/inputs/pageflow_permalink_input.rb +15 -3
  26. data/app/models/concerns/pageflow/reusable_file.rb +3 -3
  27. data/app/models/pageflow/account.rb +8 -0
  28. data/app/models/pageflow/audio_file_url_templates.rb +2 -1
  29. data/app/models/pageflow/draft_entry.rb +1 -1
  30. data/app/models/pageflow/entries_feed.rb +32 -0
  31. data/app/models/pageflow/image_file.rb +14 -3
  32. data/app/models/pageflow/membership.rb +3 -2
  33. data/app/models/pageflow/other_file.rb +5 -0
  34. data/app/models/pageflow/other_file_url_templates.rb +16 -0
  35. data/app/models/pageflow/published_entry.rb +6 -0
  36. data/app/models/pageflow/revision.rb +4 -0
  37. data/app/models/pageflow/site.rb +8 -0
  38. data/app/models/pageflow/sitemaps.rb +13 -0
  39. data/app/models/pageflow/used_file.rb +2 -2
  40. data/app/models/pageflow/video_file_url_templates.rb +3 -1
  41. data/app/models/pageflow/widget.rb +9 -1
  42. data/app/views/admin/entries/_permalink_inputs.html.erb +1 -2
  43. data/app/views/admin/sites/_attributes_table.html.arb +3 -0
  44. data/app/views/admin/sites/_fields.html.erb +6 -0
  45. data/app/views/components/pageflow/admin/extensible_attributes_table.rb +8 -2
  46. data/app/views/components/pageflow/admin/sites_tab.rb +3 -0
  47. data/app/views/pageflow/editor/config/_seeds.json.jbuilder +1 -0
  48. data/app/views/pageflow/feeds/index.atom.builder +20 -0
  49. data/app/views/pageflow/sitemaps/index.xml.builder +9 -0
  50. data/config/initializers/features.rb +1 -0
  51. data/config/initializers/paperclip.rb +4 -0
  52. data/config/locales/de.yml +27 -6
  53. data/config/locales/en.yml +30 -4
  54. data/config/routes.rb +3 -0
  55. data/config/spring.rb +1 -1
  56. data/db/migrate/20230120092923_create_other_files.rb +23 -0
  57. data/db/migrate/20230323115745_add_feeds_enabled_to_sites.rb +5 -0
  58. data/db/migrate/20230323154323_add_sitemap_enabled_to_sites.rb +5 -0
  59. data/db/migrate/20230331103823_add_title_to_sites.rb +5 -0
  60. data/db/migrate/20230405103612_add_custom_feed_url_to_sites.rb +5 -0
  61. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/editor.js +445 -109
  62. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/frontend.js +26 -3
  63. data/entry_types/paged/app/controllers/pageflow_paged/editor/entries_controller.rb +0 -2
  64. data/entry_types/paged/app/controllers/pageflow_paged/entries_controller.rb +1 -0
  65. data/entry_types/paged/app/views/pageflow_paged/entries/show.html.erb +1 -0
  66. data/entry_types/paged/config/initializers/features.rb +0 -1
  67. data/entry_types/paged/lib/pageflow_paged/engine.rb +17 -1
  68. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/chapters_controller.rb +2 -2
  69. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/content_elements_controller.rb +3 -4
  70. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/sections_controller.rb +13 -6
  71. data/entry_types/scrolled/app/controllers/pageflow_scrolled/entries_controller.rb +2 -0
  72. data/entry_types/scrolled/app/helpers/pageflow_scrolled/cache_helper.rb +11 -0
  73. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/entry_json_seed_helper.rb +42 -0
  74. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/seed_html_helper.rb +3 -0
  75. data/entry_types/scrolled/app/helpers/pageflow_scrolled/packs_helper.rb +31 -10
  76. data/entry_types/scrolled/app/helpers/pageflow_scrolled/react_server_side_rendering_helper.rb +9 -1
  77. data/entry_types/scrolled/app/helpers/pageflow_scrolled/themes_helper.rb +3 -1
  78. data/entry_types/scrolled/app/models/pageflow_scrolled/chapter.rb +23 -0
  79. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_head.html.erb +6 -1
  80. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_seed.json.jbuilder +1 -5
  81. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/sections/_section_with_content_elements.json.jbuilder +10 -0
  82. data/entry_types/scrolled/app/views/pageflow_scrolled/entries/show.html.erb +44 -41
  83. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_consent_vendors.json.jbuilder +16 -0
  84. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry.json.jbuilder +3 -0
  85. data/entry_types/scrolled/config/initializers/features.rb +5 -0
  86. data/entry_types/scrolled/config/locales/consent_widget.de.yml +4 -0
  87. data/entry_types/scrolled/config/locales/consent_widget.en.yml +4 -0
  88. data/entry_types/scrolled/config/locales/de.yml +189 -8
  89. data/entry_types/scrolled/config/locales/en.yml +207 -2
  90. data/entry_types/scrolled/config/routes.rb +4 -0
  91. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/install_generator.rb +97 -5
  92. data/entry_types/scrolled/lib/pageflow_scrolled/additional_seed_data.rb +1 -1
  93. data/entry_types/scrolled/lib/pageflow_scrolled/configuration.rb +96 -0
  94. data/entry_types/scrolled/lib/pageflow_scrolled/content_element_consent_vendors.rb +38 -0
  95. data/entry_types/scrolled/lib/pageflow_scrolled/engine.rb +17 -1
  96. data/entry_types/scrolled/lib/pageflow_scrolled/plugin.rb +24 -0
  97. data/entry_types/scrolled/lib/pageflow_scrolled/react_widget_type.rb +6 -1
  98. data/entry_types/scrolled/lib/tasks/pageflow_scrolled/storybook.rake +1 -2
  99. data/entry_types/scrolled/package/contentElements-editor.js +307 -22
  100. data/entry_types/scrolled/package/contentElements-frontend.css +1 -1
  101. data/entry_types/scrolled/package/contentElements-frontend.js +690 -71
  102. data/entry_types/scrolled/package/editor.js +616 -220
  103. data/entry_types/scrolled/package/frontend/{EditableInlineText.module-14c7b097.js → EditableInlineText.module-fa9e3aff.js} +1669 -1674
  104. data/entry_types/scrolled/package/frontend/PhonePlatformContext-10a1d600.js +32 -0
  105. data/entry_types/scrolled/package/frontend/ToggleFullscreenCornerButton-727cce0d.js +107 -0
  106. data/entry_types/scrolled/package/frontend/Viewer-169e14ca.js +154 -0
  107. data/entry_types/scrolled/package/frontend/{Viewer-b6becc57.js → Viewer-ee1aa590.js} +32 -161
  108. data/entry_types/scrolled/package/frontend/arrowRight-92a34ccc.js +77 -0
  109. data/entry_types/scrolled/package/frontend/{components-b3160dd7.js → components-4a09bfa3.js} +185 -45
  110. data/entry_types/scrolled/package/frontend/{PhonePlatformContext-f6093cc6.js → i18n-ddd92820.js} +149 -107
  111. data/entry_types/scrolled/package/frontend/index-02378634.js +118 -0
  112. data/entry_types/scrolled/package/frontend/index.css +1 -1
  113. data/entry_types/scrolled/package/frontend/index.js +206 -54
  114. data/entry_types/scrolled/package/frontend/useContentElementEditorState-63045393.js +52 -0
  115. data/entry_types/scrolled/package/package.json +2 -1
  116. data/entry_types/scrolled/package/testHelpers.js +9 -2
  117. data/entry_types/scrolled/package/values/colors.module.css +15 -0
  118. data/entry_types/scrolled/package/widgets/consentBar.css +1 -0
  119. data/entry_types/scrolled/package/widgets/consentBar.js +426 -0
  120. data/entry_types/scrolled/package/widgets/defaultNavigation.css +1 -1
  121. data/lib/generators/pageflow/resque/resque_generator.rb +1 -1
  122. data/lib/pageflow/ability_mixin.rb +5 -5
  123. data/lib/pageflow/active_admin_can_can_fix.rb +2 -2
  124. data/lib/pageflow/built_in_file_type.rb +7 -0
  125. data/lib/pageflow/configuration.rb +21 -0
  126. data/lib/pageflow/engine.rb +60 -39
  127. data/lib/pageflow/entry_export_import/revision_serialization.rb +1 -1
  128. data/lib/pageflow/file_type.rb +2 -2
  129. data/lib/pageflow/global_config_api.rb +2 -2
  130. data/lib/pageflow/nested_revision_component.rb +23 -5
  131. data/lib/pageflow/rails_version.rb +19 -0
  132. data/lib/pageflow/seeds.rb +10 -7
  133. data/lib/pageflow/version.rb +1 -1
  134. data/lib/pageflow/widget_types.rb +4 -0
  135. data/package/config/webpack5.js +14 -0
  136. data/package/editor.js +141 -30
  137. data/package/frontend.js +26 -2
  138. data/package/testHelpers.js +1 -1
  139. data/package/ui.js +296 -71
  140. data/spec/factories/entries.rb +17 -3
  141. data/spec/factories/sites.rb +3 -0
  142. data/vendor/assets/javascripts/iscroll.js +4 -7
  143. metadata +65 -49
  144. data/app/helpers/pageflow/admin/permalinks_helper.rb +0 -15
  145. data/entry_types/scrolled/package/frontend/arrowRight-78a7cee4.js +0 -42
@@ -1,6 +1,6 @@
1
1
  import 'regenerator-runtime';
2
- import { E as EventContextDataProvider, C as ConnectedSection, u as usePrevious, g as getEventObject, w as withInlineEditingDecorator, a as useCurrentSectionIndexState, b as usePostMessageListener, c as contentStyles, A as AtmoProvider, S as ScrollToSectionContext, d as api, B as Bar, _ as _asyncToGenerator, e as _regeneratorRuntime, f as useDarkBackground, T as Text, h as useTextTracks, i as useMediaMuted, j as useFocusOutlineVisible, k as useVideoQualitySetting, l as useIsomorphicLayoutEffect, m as withInlineEditingAlternative, n as frontendStyles, o as useFullscreenDimensions, p as information, q as camelize, s as styles$a, R as RootProviders, r as registerVendors, t as loadInlineEditingComponents } from './EditableInlineText.module-14c7b097.js';
3
- export { a0 as Atmo, a1 as AtmoContext, A as AtmoProvider, Z as AudioPlayer, J as EditableText, Q as Image, U as MediaPlayer, K as PhonePlatformProvider, P as PlayerEventContextDataProvider, R as RootProviders, a5 as SectionThumbnail, a4 as StandaloneSectionThumbnail, T as Text, O as ThirdPartyOptIn, L as ThirdPartyOptOutInfo, Y as VideoPlayer, d as frontend, N as getAvailableTransitionNames, V as getInitialPlayerState, M as getTransitionNames, W as playerStateReducer, $ as processSources, r as registerConsentVendors, a2 as useAtmo, v as useAudioFocus, x as useContentElementConfigurationUpdate, y as useContentElementEditorCommandSubscription, z as useContentElementEditorState, D as useContentElementLifecycle, F as useCurrentChapter, f as useDarkBackground, G as useIsStaticPreview, i as useMediaMuted, a3 as useOnScreen, H as useOnUnmuteMedia, X as usePlayerState, I as usePortraitOrientation } from './EditableInlineText.module-14c7b097.js';
2
+ import { E as EventContextDataProvider, C as ConnectedSection, u as usePrevious, g as getEventObject, w as withInlineEditingDecorator, a as useCurrentSectionIndexState, b as usePostMessageListener, c as contentStyles, A as AtmoProvider, S as ScrollToSectionContext, d as api, _ as _asyncToGenerator, e as _regeneratorRuntime, f as withInlineEditingAlternative, h as useDarkBackground, i as EditableText, j as useContentElementConfigurationUpdate, k as useContentElementAttributes, l as widths, m as useTextTracks, n as useMediaMuted, o as useFocusOutlineVisible, p as useVideoQualitySetting, q as useIsomorphicLayoutEffect, r as frontendStyles, s as useFullscreenDimensions, t as information, v as camelize, x as styles$a, R as RootProviders, y as registerVendors, z as loadInlineEditingComponents } from './EditableInlineText.module-fa9e3aff.js';
3
+ export { a3 as Atmo, a4 as AtmoContext, A as AtmoProvider, a1 as AudioPlayer, i as EditableText, V as Image, X as MediaPlayer, K as PhonePlatformProvider, P as PlayerEventContextDataProvider, R as RootProviders, a8 as SectionThumbnail, a7 as StandaloneSectionThumbnail, W as Text, O as ThirdPartyOptIn, L as ThirdPartyOptOutInfo, a0 as VideoPlayer, U as contentElementWidthName, l as contentElementWidths, d as frontend, Q as getAvailableTransitionNames, Y as getInitialPlayerState, N as getTransitionNames, T as paletteColor, Z as playerStateReducer, a2 as processSources, y as registerConsentVendors, a5 as useAtmo, B as useAudioFocus, M as useConsentRequested, j as useContentElementConfigurationUpdate, D as useContentElementEditorCommandSubscription, F as useContentElementLifecycle, G as useCurrentChapter, h as useDarkBackground, H as useIsStaticPreview, n as useMediaMuted, a6 as useOnScreen, I as useOnUnmuteMedia, $ as usePlayerState, J as usePortraitOrientation } from './EditableInlineText.module-fa9e3aff.js';
4
4
  import 'core-js/modules/es.symbol';
5
5
  import 'core-js/modules/es.symbol.description';
6
6
  import 'core-js/modules/es.symbol.async-iterator';
@@ -74,23 +74,28 @@ import 'core-js/modules/esnext.symbol.pattern-match';
74
74
  import 'core-js/modules/web.dom-collections.iterator';
75
75
  import 'regenerator-runtime/runtime.js';
76
76
  import { browser, events, consent, features } from 'pageflow/frontend';
77
- import React, { useRef, useState, useEffect, useCallback, Suspense, useContext } from 'react';
77
+ import React, { useRef, useState, useEffect, useCallback, useMemo, Suspense, useContext } from 'react';
78
78
  import ReactDOM from 'react-dom';
79
- import { c as _slicedToArray, m as useSectionsWithChapter, r as useEntryStructure, s as useWidget, t as getFileUrlTemplateHost, b as _defineProperty, a as _objectSpread2, _ as _objectWithoutProperties, u as useI18n, f as useTheme, j as _toConsumableArray, v as useAvailableQualities, w as setupI18n } from './PhonePlatformContext-f6093cc6.js';
80
- export { L as LocaleProvider, w as setupI18n, l as useAdditionalSeedData, x as useChapters, y as useCredits, o as useEntryStateDispatch, i as useFile, z as useFileRights, u as useI18n, e as useLegalInfo, d as useLocale, A as useShareProviders, C as useShareUrl, f as useTheme } from './PhonePlatformContext-f6093cc6.js';
81
- import 'i18n-js';
79
+ import { _ as _slicedToArray, j as useSectionsWithChapter, p as useEntryStructure, q as useWidget, r as getFileUrlTemplateHost, u as useI18n, b as _defineProperty, a as _objectSpread2, e as _objectWithoutProperties, g as useTheme, l as _toConsumableArray, s as useAvailableQualities, t as setupI18n } from './i18n-ddd92820.js';
80
+ export { L as LocaleProvider, t as setupI18n, i as useAdditionalSeedData, v as useChapters, w as useCredits, n as useEntryStateDispatch, f as useFile, x as useFileRights, u as useI18n, y as useLegalInfo, B as useLocale, z as useShareProviders, A as useShareUrl, g as useTheme } from './i18n-ddd92820.js';
81
+ import classNames from 'classnames';
82
+ import { a as useContentElementEditorState } from './useContentElementEditorState-63045393.js';
83
+ export { a as useContentElementEditorState } from './useContentElementEditorState-63045393.js';
82
84
  import 'use-context-selector';
83
85
  import 'reselect';
84
86
  import 'slugify';
85
- import classNames from 'classnames';
86
87
  import './createSuper-d0f30da3.js';
87
88
  import 'backbone-events-standalone';
89
+ import 'i18n-js';
90
+ import './PhonePlatformContext-10a1d600.js';
91
+ import stripTags from 'striptags';
88
92
  import Measure from 'react-measure';
89
93
  import { DraggableCore } from 'react-draggable';
90
- import { A as ArrowRightIcon } from './arrowRight-78a7cee4.js';
91
- export { u as usePhonePlatform } from './arrowRight-78a7cee4.js';
94
+ export { T as ToggleFullscreenCornerButton } from './ToggleFullscreenCornerButton-727cce0d.js';
95
+ export { F as FullscreenViewer } from './index-02378634.js';
96
+ import { A as ArrowRightIcon, a as ArrowLeftIcon } from './arrowRight-92a34ccc.js';
97
+ export { u as usePhonePlatform } from './arrowRight-92a34ccc.js';
92
98
  import invert from 'invert-color';
93
- import stripTags from 'striptags';
94
99
 
95
100
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
96
101
 
@@ -326,7 +331,9 @@ function Widget(_ref) {
326
331
  }
327
332
 
328
333
  function Entry() {
329
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Bar, null), /*#__PURE__*/React.createElement(Widget, {
334
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Widget, {
335
+ role: "consent"
336
+ }), /*#__PURE__*/React.createElement(Widget, {
330
337
  role: "header"
331
338
  }), /*#__PURE__*/React.createElement(Content, null), /*#__PURE__*/React.createElement(Widget, {
332
339
  role: "footer"
@@ -374,27 +381,92 @@ function hlsHostSupportedByAndroid(seed) {
374
381
  return getFileUrlTemplateHost(seed, 'videoFiles', 'hls-playlist').indexOf('_') < 0;
375
382
  }
376
383
 
377
- 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)","root":"Figure-module_root__3FC-x","invert":"Figure-module_invert___0BJP"};
384
+ var ActionButton = withInlineEditingAlternative('ActionButton', function ActionButton() {
385
+ return null;
386
+ });
387
+
388
+ function isBlank(html) {
389
+ return !!stripTags(html).match(/^\s*$/);
390
+ }
391
+ function presence(html) {
392
+ return isBlank(html) ? null : html;
393
+ }
394
+ function isBlankEditableTextValue(value) {
395
+ var _value$0$children$;
396
+
397
+ return !value || value.length === 0 || value.length === 1 && value[0].children.length <= 1 && !((_value$0$children$ = value[0].children[0]) === null || _value$0$children$ === void 0 ? void 0 : _value$0$children$.text);
398
+ }
399
+
400
+ 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","contentLinkColor":"var(--content-link-color)","root":"Figure-module_root__3FC-x colors-module_contentColorScope__2Zizr","invert":"Figure-module_invert___0BJP"};
378
401
 
379
402
  /**
380
403
  * Render a figure with a caption text attached.
381
404
  *
382
405
  * @param {Object} props
383
406
  * @param {string} props.children - Content of figure.
384
- * @param {string} props.text - The text to be displayed.
407
+ * @param {Object[]|string} props.caption - Formatted text data as provided by onCaptionChange.
408
+ * @param {Function} props.onCaptionChange - Receives updated value when it changes.
409
+ * @param {boolean} [props.addCaptionButtonVisible=true] - Control visiblility of action button.
410
+ * @param {string} [props.captionButtonPosition='outside'] - Position of action button.
385
411
  */
386
412
 
387
413
  function Figure(_ref) {
388
414
  var children = _ref.children,
389
- caption = _ref.caption;
415
+ caption = _ref.caption,
416
+ onCaptionChange = _ref.onCaptionChange,
417
+ _ref$addCaptionButton = _ref.addCaptionButtonVisible,
418
+ addCaptionButtonVisible = _ref$addCaptionButton === void 0 ? true : _ref$addCaptionButton,
419
+ _ref$addCaptionButton2 = _ref.addCaptionButtonPosition,
420
+ addCaptionButtonPosition = _ref$addCaptionButton2 === void 0 ? 'outside' : _ref$addCaptionButton2;
390
421
  var darkBackground = useDarkBackground();
391
422
 
392
- if (caption) {
423
+ var _useContentElementEdi = useContentElementEditorState(),
424
+ isSelected = _useContentElementEdi.isSelected,
425
+ isEditable = _useContentElementEdi.isEditable;
426
+
427
+ var _useState = useState(false),
428
+ _useState2 = _slicedToArray(_useState, 2),
429
+ isEditingCaption = _useState2[0],
430
+ setIsEditingCaption = _useState2[1];
431
+
432
+ var _useI18n = useI18n({
433
+ locale: 'ui'
434
+ }),
435
+ t = _useI18n.t;
436
+
437
+ caption = useMemo(function () {
438
+ return typeof caption === 'string' ? [{
439
+ type: 'paragraph',
440
+ children: [{
441
+ text: caption
442
+ }]
443
+ }] : caption;
444
+ }, [caption]);
445
+
446
+ if (!isBlankEditableTextValue(caption) || isEditable) {
393
447
  return /*#__PURE__*/React.createElement("figure", {
394
448
  className: classNames(styles.root, _defineProperty({}, styles.invert, !darkBackground))
395
- }, children, /*#__PURE__*/React.createElement("figcaption", null, /*#__PURE__*/React.createElement(Text, {
396
- scaleCategory: "caption"
397
- }, caption)));
449
+ }, children, isBlankEditableTextValue(caption) && isSelected && !isEditingCaption && addCaptionButtonVisible && /*#__PURE__*/React.createElement(ActionButton, {
450
+ position: addCaptionButtonPosition,
451
+ icon: "pencil",
452
+ text: t('pageflow_scrolled.inline_editing.add_caption'),
453
+ onClick: function onClick() {
454
+ return setIsEditingCaption(true);
455
+ }
456
+ }), (!isBlankEditableTextValue(caption) || isEditingCaption) && /*#__PURE__*/React.createElement("figcaption", {
457
+ onBlur: function onBlur() {
458
+ return setIsEditingCaption(false);
459
+ }
460
+ }, /*#__PURE__*/React.createElement(EditableText, {
461
+ autoFocus: isEditingCaption,
462
+ value: caption,
463
+ scaleCategory: "caption",
464
+ onChange: onCaptionChange,
465
+ onlyParagraphs: true,
466
+ hyphens: "none",
467
+ floatingControlsPosition: "above",
468
+ placeholder: t('pageflow_scrolled.inline_editing.type_text')
469
+ })));
398
470
  } else {
399
471
  return children;
400
472
  }
@@ -417,6 +489,31 @@ function ContentElementBox(_ref) {
417
489
  }, children);
418
490
  }
419
491
 
492
+ /**
493
+ * @param {Object} props
494
+ * @param {Object} props.configuration - Configuration of the content element.
495
+ * @param {string} props.children - Content of box.
496
+ */
497
+
498
+ function ContentElementFigure(_ref) {
499
+ var configuration = _ref.configuration,
500
+ children = _ref.children;
501
+ var updateConfiguration = useContentElementConfigurationUpdate();
502
+
503
+ var _useContentElementAtt = useContentElementAttributes(),
504
+ width = _useContentElementAtt.width;
505
+
506
+ return /*#__PURE__*/React.createElement(Figure, {
507
+ caption: configuration.caption,
508
+ onCaptionChange: function onCaptionChange(caption) {
509
+ return updateConfiguration({
510
+ caption: caption
511
+ });
512
+ },
513
+ addCaptionButtonPosition: width === widths.full ? 'outsideIndented' : 'outside'
514
+ }, children);
515
+ }
516
+
420
517
  function MediaInteractionTracking(_ref) {
421
518
  var playerState = _ref.playerState,
422
519
  playerActions = _ref.playerActions,
@@ -1185,8 +1282,7 @@ function MediaPlayerControls(props) {
1185
1282
  }, props));
1186
1283
  }
1187
1284
  MediaPlayerControls.defaultProps = {
1188
- configuration: {},
1189
- sectionProps: {}
1285
+ configuration: {}
1190
1286
  };
1191
1287
 
1192
1288
  function getTextTracksMenuItems(textTracks, t) {
@@ -1256,7 +1352,7 @@ function AudioPlayerControls(_ref) {
1256
1352
  }
1257
1353
 
1258
1354
  var Viewer = React.lazy(function () {
1259
- return import('./Viewer-b6becc57.js');
1355
+ return import('./Viewer-ee1aa590.js');
1260
1356
  });
1261
1357
  function Panorama(props) {
1262
1358
  return /*#__PURE__*/React.createElement(Suspense, {
@@ -1264,6 +1360,22 @@ function Panorama(props) {
1264
1360
  }, /*#__PURE__*/React.createElement(Viewer, props));
1265
1361
  }
1266
1362
 
1363
+ var Viewer$1 = React.lazy(function () {
1364
+ return import('./Viewer-169e14ca.js');
1365
+ });
1366
+ function ExpandableImage(_ref) {
1367
+ var enabled = _ref.enabled,
1368
+ props = _objectWithoutProperties(_ref, ["enabled"]);
1369
+
1370
+ if (!enabled) {
1371
+ return props.children;
1372
+ }
1373
+
1374
+ return /*#__PURE__*/React.createElement(Suspense, {
1375
+ fallback: /*#__PURE__*/React.createElement("div", null)
1376
+ }, /*#__PURE__*/React.createElement(Viewer$1, props));
1377
+ }
1378
+
1267
1379
  // from https://github.com/n8tb1t/use-scroll-position
1268
1380
  var isBrowser = typeof window !== "undefined";
1269
1381
 
@@ -1370,6 +1482,7 @@ var AspectRatioContext = React.createContext();
1370
1482
  * @param {Object} props
1371
1483
  * @param {number} [props.aspectRatio] - Aspect ratio of div.
1372
1484
  * @param {Object} [props.file] - Use width/height of file to calculate aspect ratio.
1485
+ * @param {number} [props.scale] - Only take up fraction of the viewport height supplied as value between 0 and 1.
1373
1486
  * @param {Object} [props.opaque] - Render black background behind content.
1374
1487
  */
1375
1488
 
@@ -1377,7 +1490,9 @@ function FitViewport(_ref) {
1377
1490
  var file = _ref.file,
1378
1491
  aspectRatio = _ref.aspectRatio,
1379
1492
  opaque = _ref.opaque,
1380
- children = _ref.children;
1493
+ children = _ref.children,
1494
+ _ref$scale = _ref.scale,
1495
+ scale = _ref$scale === void 0 ? 1 : _ref$scale;
1381
1496
 
1382
1497
  var _useFullscreenDimensi = useFullscreenDimensions(),
1383
1498
  height = _useFullscreenDimensi.height;
@@ -1388,10 +1503,10 @@ function FitViewport(_ref) {
1388
1503
 
1389
1504
  if (height) {
1390
1505
  // thumbnail view/fixed size: calculate absolute width in px
1391
- maxWidthCSS = height / aspectRatio + 'px';
1506
+ maxWidthCSS = height / aspectRatio * scale + 'px';
1392
1507
  } else {
1393
1508
  // published view: set max width to specific aspect ratio depending on viewport height
1394
- maxWidthCSS = 100 / aspectRatio + 'vh';
1509
+ maxWidthCSS = 100 / aspectRatio * scale + 'vh';
1395
1510
  }
1396
1511
 
1397
1512
  return /*#__PURE__*/React.createElement("div", {
@@ -1615,15 +1730,15 @@ function _extends$8() {
1615
1730
 
1616
1731
  return _extends$8.apply(this, arguments);
1617
1732
  }
1618
- var email = (function (_ref) {
1733
+ var gear = (function (_ref) {
1619
1734
  var _ref$styles = _ref.styles,
1620
1735
  props = _objectWithoutProperties(_ref, ["styles"]);
1621
1736
 
1622
1737
  return /*#__PURE__*/React.createElement("svg", _extends$8({
1623
1738
  xmlns: "http://www.w3.org/2000/svg",
1624
- viewBox: "0 0 612 612"
1739
+ viewBox: "-3 -3 30 30"
1625
1740
  }, props), /*#__PURE__*/React.createElement("path", {
1626
- d: "M573.75 57.375H38.25C17.136 57.375 0 74.511 0 95.625v420.75c0 21.133 17.136 38.25 38.25 38.25h535.5c21.133 0 38.25-17.117 38.25-38.25V95.625c0-21.114-17.117-38.25-38.25-38.25zM554.625 497.25H57.375V204.657l224.03 187.999c7.134 5.967 15.874 8.97 24.595 8.97 8.74 0 17.461-3.003 24.595-8.97l224.03-187.999V497.25zm0-367.487L306 338.379 57.375 129.763V114.75h497.25v15.013z"
1741
+ d: "M19.43 12.98c.04-.32.07-.64.07-.98s-.03-.66-.07-.98l2.11-1.65c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.3-.61-.22l-2.49 1c-.52-.4-1.08-.73-1.69-.98l-.38-2.65A.488.488 0 0014 2h-4c-.25 0-.46.18-.49.42l-.38 2.65c-.61.25-1.17.59-1.69.98l-2.49-1c-.23-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49.12.64l2.11 1.65c-.04.32-.07.65-.07.98s.03.66.07.98l-2.11 1.65c-.19.15-.24.42-.12.64l2 3.46c.12.22.39.3.61.22l2.49-1c.52.4 1.08.73 1.69.98l.38 2.65c.03.24.24.42.49.42h4c.25 0 .46-.18.49-.42l.38-2.65c.61-.25 1.17-.59 1.69-.98l2.49 1c.23.09.49 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.65zM12 15.5c-1.93 0-3.5-1.57-3.5-3.5s1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z"
1627
1742
  }));
1628
1743
  });
1629
1744
 
@@ -1644,15 +1759,15 @@ function _extends$9() {
1644
1759
 
1645
1760
  return _extends$9.apply(this, arguments);
1646
1761
  }
1647
- var facebook = (function (_ref) {
1762
+ var email = (function (_ref) {
1648
1763
  var _ref$styles = _ref.styles,
1649
1764
  props = _objectWithoutProperties(_ref, ["styles"]);
1650
1765
 
1651
1766
  return /*#__PURE__*/React.createElement("svg", _extends$9({
1652
1767
  xmlns: "http://www.w3.org/2000/svg",
1653
- viewBox: "0 0 430.113 430.114"
1768
+ viewBox: "0 0 612 612"
1654
1769
  }, props), /*#__PURE__*/React.createElement("path", {
1655
- d: "M158.081 83.3v59.218h-43.385v72.412h43.385v215.183h89.122V214.936h59.805s5.601-34.721 8.316-72.685H247.54V92.74c0-7.4 9.717-17.354 19.321-17.354h48.557V.001h-66.021C155.878-.004 158.081 72.48 158.081 83.3z"
1770
+ d: "M573.75 57.375H38.25C17.136 57.375 0 74.511 0 95.625v420.75c0 21.133 17.136 38.25 38.25 38.25h535.5c21.133 0 38.25-17.117 38.25-38.25V95.625c0-21.114-17.117-38.25-38.25-38.25zM554.625 497.25H57.375V204.657l224.03 187.999c7.134 5.967 15.874 8.97 24.595 8.97 8.74 0 17.461-3.003 24.595-8.97l224.03-187.999V497.25zm0-367.487L306 338.379 57.375 129.763V114.75h497.25v15.013z"
1656
1771
  }));
1657
1772
  });
1658
1773
 
@@ -1673,15 +1788,15 @@ function _extends$a() {
1673
1788
 
1674
1789
  return _extends$a.apply(this, arguments);
1675
1790
  }
1676
- var linkedIn = (function (_ref) {
1791
+ var facebook = (function (_ref) {
1677
1792
  var _ref$styles = _ref.styles,
1678
1793
  props = _objectWithoutProperties(_ref, ["styles"]);
1679
1794
 
1680
1795
  return /*#__PURE__*/React.createElement("svg", _extends$a({
1681
1796
  xmlns: "http://www.w3.org/2000/svg",
1682
- viewBox: "0 0 430.117 430.117"
1797
+ viewBox: "0 0 430.113 430.114"
1683
1798
  }, props), /*#__PURE__*/React.createElement("path", {
1684
- d: "M430.117 261.543V420.56h-92.188V272.193c0-37.271-13.334-62.707-46.703-62.707-25.473 0-40.632 17.142-47.301 33.724-2.432 5.928-3.058 14.179-3.058 22.477V420.56h-92.219s1.242-251.285 0-277.32h92.21v39.309c-.187.294-.43.611-.606.896h.606v-.896c12.251-18.869 34.13-45.824 83.102-45.824 60.673-.001 106.157 39.636 106.157 124.818zM52.183 9.558C20.635 9.558 0 30.251 0 57.463c0 26.619 20.038 47.94 50.959 47.94h.616c32.159 0 52.159-21.317 52.159-47.94-.606-27.212-20-47.905-51.551-47.905zM5.477 420.56h92.184V143.24H5.477v277.32z"
1799
+ d: "M158.081 83.3v59.218h-43.385v72.412h43.385v215.183h89.122V214.936h59.805s5.601-34.721 8.316-72.685H247.54V92.74c0-7.4 9.717-17.354 19.321-17.354h48.557V.001h-66.021C155.878-.004 158.081 72.48 158.081 83.3z"
1685
1800
  }));
1686
1801
  });
1687
1802
 
@@ -1702,15 +1817,15 @@ function _extends$b() {
1702
1817
 
1703
1818
  return _extends$b.apply(this, arguments);
1704
1819
  }
1705
- var telegram = (function (_ref) {
1820
+ var linkedIn = (function (_ref) {
1706
1821
  var _ref$styles = _ref.styles,
1707
1822
  props = _objectWithoutProperties(_ref, ["styles"]);
1708
1823
 
1709
1824
  return /*#__PURE__*/React.createElement("svg", _extends$b({
1710
1825
  xmlns: "http://www.w3.org/2000/svg",
1711
- viewBox: "0 0 512.004 512.004"
1826
+ viewBox: "0 0 430.117 430.117"
1712
1827
  }, props), /*#__PURE__*/React.createElement("path", {
1713
- d: "M508.194 20.517c-4.43-4.96-11.42-6.29-17.21-3.76l-482 211a15.01 15.01 0 00-8.98 13.41 15.005 15.005 0 008.38 13.79l115.09 56.6 28.68 172.06c.93 6.53 6.06 11.78 12.74 12.73 4.8.69 9.57-1 12.87-4.4l90.86-90.86 129.66 92.62a15.02 15.02 0 0014.24 1.74 15.01 15.01 0 009.19-11.01l90-451c.89-4.47-.26-9.26-3.52-12.92zm-372.84 263.45l-84.75-41.68 334.82-146.57-250.07 188.25zm46.94 44.59l-13.95 69.75-15.05-90.3 183.97-138.49-150.88 151.39c-2.12 2.12-3.53 4.88-4.09 7.65zm9.13 107.3l15.74-78.67 36.71 26.22-52.45 52.45zm205.41 19.94l-176.73-126.23 252.47-253.31-75.74 379.54z"
1828
+ d: "M430.117 261.543V420.56h-92.188V272.193c0-37.271-13.334-62.707-46.703-62.707-25.473 0-40.632 17.142-47.301 33.724-2.432 5.928-3.058 14.179-3.058 22.477V420.56h-92.219s1.242-251.285 0-277.32h92.21v39.309c-.187.294-.43.611-.606.896h.606v-.896c12.251-18.869 34.13-45.824 83.102-45.824 60.673-.001 106.157 39.636 106.157 124.818zM52.183 9.558C20.635 9.558 0 30.251 0 57.463c0 26.619 20.038 47.94 50.959 47.94h.616c32.159 0 52.159-21.317 52.159-47.94-.606-27.212-20-47.905-51.551-47.905zM5.477 420.56h92.184V143.24H5.477v277.32z"
1714
1829
  }));
1715
1830
  });
1716
1831
 
@@ -1731,15 +1846,15 @@ function _extends$c() {
1731
1846
 
1732
1847
  return _extends$c.apply(this, arguments);
1733
1848
  }
1734
- var twitter = (function (_ref) {
1849
+ var telegram = (function (_ref) {
1735
1850
  var _ref$styles = _ref.styles,
1736
1851
  props = _objectWithoutProperties(_ref, ["styles"]);
1737
1852
 
1738
1853
  return /*#__PURE__*/React.createElement("svg", _extends$c({
1739
1854
  xmlns: "http://www.w3.org/2000/svg",
1740
- viewBox: "0 0 612 612"
1855
+ viewBox: "0 0 512.004 512.004"
1741
1856
  }, props), /*#__PURE__*/React.createElement("path", {
1742
- d: "M612 116.258a250.714 250.714 0 01-72.088 19.772c25.929-15.527 45.777-40.155 55.184-69.411-24.322 14.379-51.169 24.82-79.775 30.48-22.907-24.437-55.49-39.658-91.63-39.658-69.334 0-125.551 56.217-125.551 125.513 0 9.828 1.109 19.427 3.251 28.606-104.326-5.24-196.835-55.223-258.75-131.174-10.823 18.51-16.98 40.078-16.98 63.101 0 43.559 22.181 81.993 55.835 104.479a125.556 125.556 0 01-56.867-15.756v1.568c0 60.806 43.291 111.554 100.693 123.104-10.517 2.83-21.607 4.398-33.08 4.398-8.107 0-15.947-.803-23.634-2.333 15.985 49.907 62.336 86.199 117.253 87.194-42.947 33.654-97.099 53.655-155.916 53.655-10.134 0-20.116-.612-29.944-1.721 55.567 35.681 121.536 56.485 192.438 56.485 230.948 0 357.188-191.291 357.188-357.188l-.421-16.253c24.666-17.593 46.005-39.697 62.794-64.861z"
1857
+ d: "M508.194 20.517c-4.43-4.96-11.42-6.29-17.21-3.76l-482 211a15.01 15.01 0 00-8.98 13.41 15.005 15.005 0 008.38 13.79l115.09 56.6 28.68 172.06c.93 6.53 6.06 11.78 12.74 12.73 4.8.69 9.57-1 12.87-4.4l90.86-90.86 129.66 92.62a15.02 15.02 0 0014.24 1.74 15.01 15.01 0 009.19-11.01l90-451c.89-4.47-.26-9.26-3.52-12.92zm-372.84 263.45l-84.75-41.68 334.82-146.57-250.07 188.25zm46.94 44.59l-13.95 69.75-15.05-90.3 183.97-138.49-150.88 151.39c-2.12 2.12-3.53 4.88-4.09 7.65zm9.13 107.3l15.74-78.67 36.71 26.22-52.45 52.45zm205.41 19.94l-176.73-126.23 252.47-253.31-75.74 379.54z"
1743
1858
  }));
1744
1859
  });
1745
1860
 
@@ -1760,11 +1875,40 @@ function _extends$d() {
1760
1875
 
1761
1876
  return _extends$d.apply(this, arguments);
1762
1877
  }
1763
- var whatsApp = (function (_ref) {
1878
+ var twitter = (function (_ref) {
1764
1879
  var _ref$styles = _ref.styles,
1765
1880
  props = _objectWithoutProperties(_ref, ["styles"]);
1766
1881
 
1767
1882
  return /*#__PURE__*/React.createElement("svg", _extends$d({
1883
+ xmlns: "http://www.w3.org/2000/svg",
1884
+ viewBox: "0 0 612 612"
1885
+ }, props), /*#__PURE__*/React.createElement("path", {
1886
+ d: "M612 116.258a250.714 250.714 0 01-72.088 19.772c25.929-15.527 45.777-40.155 55.184-69.411-24.322 14.379-51.169 24.82-79.775 30.48-22.907-24.437-55.49-39.658-91.63-39.658-69.334 0-125.551 56.217-125.551 125.513 0 9.828 1.109 19.427 3.251 28.606-104.326-5.24-196.835-55.223-258.75-131.174-10.823 18.51-16.98 40.078-16.98 63.101 0 43.559 22.181 81.993 55.835 104.479a125.556 125.556 0 01-56.867-15.756v1.568c0 60.806 43.291 111.554 100.693 123.104-10.517 2.83-21.607 4.398-33.08 4.398-8.107 0-15.947-.803-23.634-2.333 15.985 49.907 62.336 86.199 117.253 87.194-42.947 33.654-97.099 53.655-155.916 53.655-10.134 0-20.116-.612-29.944-1.721 55.567 35.681 121.536 56.485 192.438 56.485 230.948 0 357.188-191.291 357.188-357.188l-.421-16.253c24.666-17.593 46.005-39.697 62.794-64.861z"
1887
+ }));
1888
+ });
1889
+
1890
+ function _extends$e() {
1891
+ _extends$e = Object.assign || function (target) {
1892
+ for (var i = 1; i < arguments.length; i++) {
1893
+ var source = arguments[i];
1894
+
1895
+ for (var key in source) {
1896
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
1897
+ target[key] = source[key];
1898
+ }
1899
+ }
1900
+ }
1901
+
1902
+ return target;
1903
+ };
1904
+
1905
+ return _extends$e.apply(this, arguments);
1906
+ }
1907
+ var whatsApp = (function (_ref) {
1908
+ var _ref$styles = _ref.styles,
1909
+ props = _objectWithoutProperties(_ref, ["styles"]);
1910
+
1911
+ return /*#__PURE__*/React.createElement("svg", _extends$e({
1768
1912
  xmlns: "http://www.w3.org/2000/svg",
1769
1913
  viewBox: "0 0 90 90"
1770
1914
  }, props), /*#__PURE__*/React.createElement("path", {
@@ -1778,24 +1922,32 @@ var icons = {
1778
1922
  muted: muted,
1779
1923
  share: share,
1780
1924
  unmuted: unmuted,
1925
+ gear: gear,
1781
1926
  email: email,
1782
1927
  facebook: facebook,
1783
1928
  linkedIn: linkedIn,
1784
1929
  telegram: telegram,
1785
1930
  twitter: twitter,
1786
- whatsApp: whatsApp
1931
+ whatsApp: whatsApp,
1932
+ arrowLeft: ArrowLeftIcon,
1933
+ arrowRight: ArrowRightIcon
1787
1934
  };
1788
1935
  /**
1789
1936
  * Render an SVG icon that can be customized in themes.
1790
1937
  *
1791
1938
  * @param {Object} props
1792
1939
  * @param {string} props.name -
1793
- * Either: expand, information, muted, share, unmuted,
1794
- * email, facebook, linkedIn, telegram, twitter, whatsApp.
1940
+ * Either: expand, gear, information, muted, share, unmuted,
1941
+ * email, facebook, linkedIn, telegram, twitter, whatsApp,
1942
+ * arrowLeft, arrowRight,
1943
+ * @params {number} [props.width] - Image width.
1944
+ * @params {number} [props.height] - Image height.
1795
1945
  */
1796
1946
 
1797
1947
  function ThemeIcon(_ref) {
1798
- var name = _ref.name;
1948
+ var name = _ref.name,
1949
+ width = _ref.width,
1950
+ height = _ref.height;
1799
1951
  var theme = useTheme();
1800
1952
  var FallbackIcon = icons[name];
1801
1953
  var themeAsset = theme.assets.icons[name];
@@ -1805,11 +1957,17 @@ function ThemeIcon(_ref) {
1805
1957
  }
1806
1958
 
1807
1959
  if (themeAsset) {
1808
- return /*#__PURE__*/React.createElement("svg", null, /*#__PURE__*/React.createElement("use", {
1960
+ return /*#__PURE__*/React.createElement("svg", {
1961
+ width: width,
1962
+ height: height
1963
+ }, /*#__PURE__*/React.createElement("use", {
1809
1964
  xlinkHref: "".concat(themeAsset, "#icon")
1810
1965
  }));
1811
1966
  } else {
1812
- return /*#__PURE__*/React.createElement(FallbackIcon, null);
1967
+ return /*#__PURE__*/React.createElement(FallbackIcon, {
1968
+ width: width,
1969
+ height: height
1970
+ });
1813
1971
  }
1814
1972
  }
1815
1973
 
@@ -1822,16 +1980,10 @@ function registerTemplateWidgetType (typeName, callback) {
1822
1980
  callback(element);
1823
1981
  }
1824
1982
 
1825
- function isBlank(html) {
1826
- return !!stripTags(html).match(/^\s*$/);
1827
- }
1828
- function presence(html) {
1829
- return isBlank(html) ? null : html;
1830
- }
1831
-
1832
1983
  var utils = {
1833
1984
  camelize: camelize,
1834
1985
  isBlank: isBlank,
1986
+ isBlankEditableTextValue: isBlankEditableTextValue,
1835
1987
  presence: presence
1836
1988
  };
1837
1989
 
@@ -1922,4 +2074,4 @@ function Root(_ref2) {
1922
2074
  }, /*#__PURE__*/React.createElement(Entry, null));
1923
2075
  }
1924
2076
 
1925
- export { AudioPlayerControls, ClassicPlayerControls, ContentElementBox, EditableInlineText, Entry, Figure, FitViewport, MediaInteractionTracking, MediaPlayerControls, Panorama, PlayerControls, Root, ThemeIcon, Tooltip, VideoPlayerControls, WaveformPlayerControls, Widget, registerTemplateWidgetType, textColorForBackgroundColor, useScrollPosition, utils, withShadowClassName };
2077
+ export { AudioPlayerControls, ClassicPlayerControls, ContentElementBox, ContentElementFigure, EditableInlineText, Entry, ExpandableImage, Figure, FitViewport, MediaInteractionTracking, MediaPlayerControls, Panorama, PlayerControls, Root, ThemeIcon, Tooltip, VideoPlayerControls, WaveformPlayerControls, Widget, registerTemplateWidgetType, textColorForBackgroundColor, useScrollPosition, utils, withShadowClassName };
@@ -0,0 +1,52 @@
1
+ import { useState, useRef, useEffect, createContext, useContext } from 'react';
2
+ import { _ as _slicedToArray } from './i18n-ddd92820.js';
3
+
4
+ function useDelayedBoolean(value, _ref) {
5
+ var fromFalseToTrue = _ref.fromFalseToTrue,
6
+ fromTrueToFalse = _ref.fromTrueToFalse;
7
+
8
+ var _useState = useState(false),
9
+ _useState2 = _slicedToArray(_useState, 2),
10
+ setFlag = _useState2[1];
11
+
12
+ var timeoutRef = useRef(null);
13
+ var ref = useRef(value);
14
+ useEffect(function () {
15
+ if (value && !fromFalseToTrue || !value && !fromTrueToFalse) {
16
+ ref.current = value;
17
+ } else if (ref.current !== value) {
18
+ timeoutRef.current = setTimeout(function () {
19
+ ref.current = value;
20
+ setFlag(function (flag) {
21
+ return !flag;
22
+ });
23
+ }, ref.current ? fromTrueToFalse : fromFalseToTrue);
24
+ return function () {
25
+ return clearTimeout(timeoutRef.current);
26
+ };
27
+ }
28
+ }, [value, fromTrueToFalse, fromFalseToTrue]);
29
+ return !fromFalseToTrue && value || ref.current && (!!fromTrueToFalse || value);
30
+ }
31
+
32
+ var ContentElementEditorStateContext = createContext({
33
+ isSelected: false,
34
+ isEditable: false,
35
+ setTransientState: function setTransientState() {}
36
+ });
37
+ /**
38
+ * Use inside a content element component to determine whether the
39
+ * component is being rendered inside the editor iframe, and whether
40
+ * the content element is currently selected. This can be used to
41
+ * implement simple inline editing capabilities like displaying extra
42
+ * information when the content element is selected.
43
+ *
44
+ * @example
45
+ * const {isEditable, isSelected} = useContentElementEditorState();
46
+ */
47
+
48
+ function useContentElementEditorState() {
49
+ return useContext(ContentElementEditorStateContext);
50
+ }
51
+
52
+ export { ContentElementEditorStateContext as C, useContentElementEditorState as a, useDelayedBoolean as u };
@@ -21,6 +21,7 @@
21
21
  "react-draggable": "^4.4.2",
22
22
  "react-measure": "^2.3.0",
23
23
  "react-player": "^1.15.2",
24
+ "react-quick-pinch-zoom": "^4.8.0",
24
25
  "react-tooltip": "^3.11.1",
25
26
  "react_ujs": "^2.6.1",
26
27
  "reselect": "^4.0.0",
@@ -30,7 +31,7 @@
30
31
  "slugify": "^1.4.6",
31
32
  "striptags": "^3.1.1",
32
33
  "use-context-selector": "^1.2.11",
33
- "video.js": "https://github.com/tf/video.js#pageflow-scrolled-6",
34
+ "video.js": "https://github.com/tf/video.js#pageflow-scrolled-8",
34
35
  "wavesurfer.js": "6.1.0",
35
36
  "whatwg-fetch": "^3.0.0"
36
37
  },
@@ -65,6 +65,9 @@ function _objectSpread2(target) {
65
65
  * @param {Object} [options.legalInfo] - imprint, copyright and privacy information of entry.
66
66
  * @param {Object} [options.themeOptions] - Options set via theme registration.
67
67
  * @param {Object} [options.themeAssets] - Paths to theme assets.
68
+ * @param {Object} [options.additionalSeedData] - Seed data by name.
69
+ * @param {Array} [options.consentVendors] - Server rendered consent vendor data.
70
+ * @param {Object} [options.contentElementConsentVendors] - Consent vendor name by content element id.
68
71
  * @param {Object} [options.entry] - attributes of entry.
69
72
  * @param {Array} [options.imageFiles] - Array of objects with image file attributes of entry.
70
73
  * @param {Array} [options.videoFiles] - Array of objects with video file attributes of entry.
@@ -96,7 +99,9 @@ function normalizeSeed() {
96
99
  sections = _ref.sections,
97
100
  contentElements = _ref.contentElements,
98
101
  widgets = _ref.widgets,
99
- additionalSeedData = _ref.additionalSeedData;
102
+ additionalSeedData = _ref.additionalSeedData,
103
+ consentVendors = _ref.consentVendors,
104
+ contentElementConsentVendors = _ref.contentElementConsentVendors;
100
105
 
101
106
  var entries = entry ? [entry] : [{}];
102
107
  var normalizedEntries = normalizeCollection(entries);
@@ -130,7 +135,9 @@ function normalizeSeed() {
130
135
  }),
131
136
  additionalSeedData: additionalSeedData || {
132
137
  frontendVersion: 1
133
- }
138
+ },
139
+ consentVendors: consentVendors || [],
140
+ contentElementConsentVendors: contentElementConsentVendors || {}
134
141
  },
135
142
  collections: {
136
143
  entries: normalizedEntries,
@@ -3,3 +3,18 @@
3
3
 
4
4
  @value lightContentTextColor: var(--theme-light-content-text-color, #fff);
5
5
  @value darkContentTextColor: var(--theme-dark-content-text-color, #222);
6
+
7
+ @value lightContentLinkColor: var(--theme-light-content-link-color, var(--theme-content-link-color, currentColor));
8
+ @value darkContentLinkColor: var(--theme-dark-content-link-color, var(--theme-content-link-color, currentColor));
9
+
10
+ @value contentLinkColor: var(--content-link-color);
11
+ @value contentTextColor: var(--content-text-color);
12
+
13
+ /* see src/frontend/global.module.css */
14
+
15
+ .contentColorScope {
16
+ --theme-light-content-surface-color: var(--root-light-content-surface-color);
17
+ --theme-dark-content-surface-color: var(--root-dark-content-surface-color);
18
+ --theme-light-content-text-color: var(--root-light-content-text-color);
19
+ --theme-dark-content-text-color: var(--root-dark-content-text-color);
20
+ }
@@ -0,0 +1 @@
1
+ .Toggle-module_toggle__2N5XY{border:none;background:transparent;padding:0;position:absolute;top:3px;right:40px;cursor:pointer}.Toggle-module_toggle__2N5XY svg{display:block;fill:var(--theme-widget-on-surface-color);color:var(--theme-widget-surface-color)}.Toggle-module_toggle__2N5XY[aria-checked=true] svg{fill:var(--theme-widget-primary-color);color:var(--theme-widget-on-primary-color)}.ConsentBar-module_bar__YiYoC{position:fixed;bottom:0;left:0;width:100%;box-sizing:border-box;z-index:10;padding:10px 20px;font-family:var(--theme-widget-font-family);font-size:15px;background-color:var(--theme-widget-surface-color);color:var(--theme-widget-on-surface-color)}.ConsentBar-module_text__2GSPP{margin-top:10px;margin-bottom:10px}.ConsentBar-module_text__2GSPP a{color:var(--theme-accent-color)}.ConsentBar-module_button__2LVnY{border:none;border-radius:3px;margin:10px 5px 5px;padding:10px 15px;font:inherit;cursor:pointer;background-color:var(--theme-widget-secondary-color)}.ConsentBar-module_acceptAllButton__1rSdh{background-color:var(--theme-widget-primary-color);color:var(--theme-widget-on-primary-color)}.ConsentBar-module_configureButton__1VBqX{margin-left:0}.ConsentBar-module_configureButton__1VBqX svg{fill:currentColor;margin-right:6px;margin-bottom:1px;vertical-align:bottom}.ConsentBar-module_vendorsBox__Jckbl h3{margin:.5em 0;font-size:1em}.ConsentBar-module_vendorList__3Z4jU{overflow:auto;max-height:40vh;padding-right:5px;margin:5px 0}.ConsentBar-module_vendor__2hPAk{position:relative;margin-bottom:5px;padding:8px 0;min-height:20px}.ConsentBar-module_vendor__2hPAk p{font-size:13px}.ConsentBar-module_vendor__2hPAk a{color:inherit}.ConsentBar-module_expandVendor__hSkAD{border:none;background:transparent;position:absolute;right:5px;top:3px;padding:0;cursor:pointer}.ConsentBar-module_expandVendor__hSkAD svg{fill:currentColor;display:block}.ConsentBar-module_expandVendor__hSkAD:active svg,.ConsentBar-module_expandVendor__hSkAD:focus svg,.ConsentBar-module_expandVendor__hSkAD:hover svg{fill:var(--theme-widget-primary-color)}@media (max-width:780px){.ConsentBar-module_button__2LVnY{display:block;width:100%;margin:10px 0}}@media (min-width:781px){.ConsentBar-module_vendorsBox__Jckbl{position:absolute;bottom:100%;right:5px;margin-bottom:5px;max-width:400px;width:90%;box-sizing:border-box;padding:10px 20px;background-color:inherit;color:inherit;border-radius:5px}.ConsentBar-module_saveButton__16b97{float:right}.ConsentBar-module_decisionButtons__I4T8q{float:right;display:inline-block;white-space:nowrap}}