pageflow 15.8.0 → 16.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +183 -103
  3. data/README.md +0 -1
  4. data/Rakefile +1 -1
  5. data/admins/pageflow/accounts.rb +12 -16
  6. data/admins/pageflow/entry.rb +28 -26
  7. data/admins/pageflow/entry_templates.rb +5 -7
  8. data/admins/pageflow/sites.rb +53 -0
  9. data/app/assets/javascripts/pageflow/admin/entries.js +16 -7
  10. data/app/assets/javascripts/pageflow/dist/ui.js +298 -72
  11. data/app/assets/stylesheets/pageflow/admin/permalink_input.scss +10 -0
  12. data/app/assets/stylesheets/pageflow/editor/drop_down_button.scss +6 -1
  13. data/app/assets/stylesheets/pageflow/editor/file_thumbnails.scss +4 -0
  14. data/app/assets/stylesheets/pageflow/editor/help.scss +3 -3
  15. data/app/assets/stylesheets/pageflow/editor/info_box.scss +7 -0
  16. data/app/assets/stylesheets/pageflow/editor/inputs/file_input.scss +0 -5
  17. data/app/assets/stylesheets/pageflow/ui/forms.scss +1 -1
  18. data/app/controllers/pageflow/chapters_controller.rb +2 -2
  19. data/app/controllers/pageflow/editor/files_controller.rb +1 -1
  20. data/app/controllers/pageflow/entries_controller.rb +12 -2
  21. data/app/controllers/pageflow/feeds_controller.rb +18 -0
  22. data/app/controllers/pageflow/pages_controller.rb +2 -2
  23. data/app/controllers/pageflow/sitemaps_controller.rb +15 -0
  24. data/app/controllers/pageflow/storylines_controller.rb +2 -2
  25. data/app/helpers/pageflow/common_entry_seed_helper.rb +1 -1
  26. data/app/helpers/pageflow/embed_code_helper.rb +1 -1
  27. data/app/helpers/pageflow/entries_helper.rb +16 -15
  28. data/app/helpers/pageflow/feeds_helper.rb +66 -0
  29. data/app/helpers/pageflow/page_types_helper.rb +9 -9
  30. data/app/helpers/pageflow/sites_helper.rb +11 -0
  31. data/app/helpers/pageflow/social_share_helper.rb +2 -2
  32. data/app/inputs/pageflow_permalink_input.rb +15 -3
  33. data/app/models/concerns/pageflow/reusable_file.rb +3 -3
  34. data/app/models/pageflow/account.rb +13 -31
  35. data/app/models/pageflow/audio_file_url_templates.rb +2 -1
  36. data/app/models/pageflow/{cname_theming_request_scope.rb → cname_site_request_scope.rb} +3 -3
  37. data/app/models/pageflow/customized_theme.rb +1 -1
  38. data/app/models/pageflow/draft_entry.rb +1 -1
  39. data/app/models/pageflow/entries_feed.rb +32 -0
  40. data/app/models/pageflow/entry.rb +3 -4
  41. data/app/models/pageflow/entry_at_revision.rb +2 -2
  42. data/app/models/pageflow/entry_duplicate.rb +1 -1
  43. data/app/models/pageflow/entry_template.rb +4 -4
  44. data/app/models/pageflow/home_button.rb +7 -7
  45. data/app/models/pageflow/image_file.rb +14 -3
  46. data/app/models/pageflow/membership.rb +3 -2
  47. data/app/models/pageflow/other_file.rb +5 -0
  48. data/app/models/pageflow/other_file_url_templates.rb +16 -0
  49. data/app/models/pageflow/permalink.rb +3 -3
  50. data/app/models/pageflow/permalink_directory.rb +2 -2
  51. data/app/models/pageflow/published_entry.rb +8 -2
  52. data/app/models/pageflow/revision.rb +4 -0
  53. data/app/models/pageflow/site.rb +67 -0
  54. data/app/models/pageflow/sitemaps.rb +13 -0
  55. data/app/models/pageflow/theme_customization.rb +1 -1
  56. data/app/models/pageflow/used_file.rb +2 -2
  57. data/app/models/pageflow/video_file_url_templates.rb +3 -1
  58. data/app/models/pageflow/widget.rb +9 -1
  59. data/app/policies/pageflow/account_policy.rb +2 -2
  60. data/app/policies/pageflow/entry_policy.rb +2 -2
  61. data/app/policies/pageflow/entry_template_policy.rb +1 -1
  62. data/app/policies/pageflow/{theming_policy.rb → site_policy.rb} +13 -11
  63. data/app/views/admin/accounts/_entry_template_details.html.arb +1 -1
  64. data/app/views/admin/accounts/_form.html.erb +4 -22
  65. data/app/views/admin/accounts/_site_defaults_inline_help.html.erb +5 -0
  66. data/app/views/admin/entries/_form.html.erb +4 -13
  67. data/app/views/admin/entries/_permalink_inputs.html.erb +2 -3
  68. data/app/views/admin/entries/_site_input.html.erb +15 -0
  69. data/app/views/admin/entries/{entry_type_name_input.html.erb → entry_site_and_type_name_input.html.erb} +3 -0
  70. data/app/views/admin/entry_templates/_form.html.erb +5 -5
  71. data/app/views/admin/sites/_attributes_table.html.arb +12 -0
  72. data/app/views/admin/sites/_fields.html.erb +23 -0
  73. data/app/views/admin/sites/_form.html.erb +5 -0
  74. data/app/views/components/pageflow/admin/entries_tab.rb +1 -2
  75. data/app/views/components/pageflow/admin/entry_templates_tab.rb +10 -11
  76. data/app/views/components/pageflow/admin/extensible_attributes_table.rb +8 -2
  77. data/app/views/components/pageflow/admin/features_tab.rb +1 -1
  78. data/app/views/components/pageflow/admin/sites_tab.rb +35 -0
  79. data/app/views/components/pageflow/admin/users_tab.rb +1 -2
  80. data/app/views/pageflow/editor/config/_seeds.json.jbuilder +1 -0
  81. data/app/views/pageflow/editor/entries/seed.json.erb +1 -1
  82. data/app/views/pageflow/editor/sites/_site.json.jbuilder +1 -0
  83. data/app/views/pageflow/entries/stylesheet.css.erb +1 -1
  84. data/app/views/pageflow/feeds/index.atom.builder +20 -0
  85. data/app/views/pageflow/sitemaps/index.xml.builder +9 -0
  86. data/app/views/pageflow/social_share/_entry_meta_tags.html.erb +1 -1
  87. data/app/views/pageflow/social_share/_page_meta_tags.html.erb +1 -1
  88. data/config/initializers/admin_resource_tabs.rb +29 -12
  89. data/config/initializers/features.rb +1 -0
  90. data/config/initializers/paperclip.rb +4 -0
  91. data/config/locales/de.yml +42 -19
  92. data/config/locales/en.yml +45 -17
  93. data/config/routes.rb +3 -0
  94. data/config/spring.rb +1 -1
  95. data/db/migrate/20221215101134_rename_theming_to_site.rb +9 -0
  96. data/db/migrate/20221215120856_associate_entry_templates_with_sites.rb +34 -0
  97. data/db/migrate/20221219203023_add_name_to_sites.rb +5 -0
  98. data/db/migrate/20230103155934_associate_theme_customizations_with_sites.rb +27 -0
  99. data/db/migrate/20230120092923_create_other_files.rb +23 -0
  100. data/db/migrate/20230323115745_add_feeds_enabled_to_sites.rb +5 -0
  101. data/db/migrate/20230323154323_add_sitemap_enabled_to_sites.rb +5 -0
  102. data/db/migrate/20230331103823_add_title_to_sites.rb +5 -0
  103. data/db/migrate/20230405103612_add_custom_feed_url_to_sites.rb +5 -0
  104. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/editor.js +455 -119
  105. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/frontend.js +31 -8
  106. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-client.js +1 -1
  107. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/react-server.js +1 -1
  108. data/entry_types/paged/app/controllers/pageflow_paged/editor/entries_controller.rb +0 -2
  109. data/entry_types/paged/app/controllers/pageflow_paged/entries_controller.rb +1 -0
  110. data/entry_types/paged/app/views/pageflow_paged/entries/show.html.erb +1 -0
  111. data/entry_types/paged/config/initializers/features.rb +0 -1
  112. data/entry_types/paged/lib/pageflow_paged/engine.rb +17 -1
  113. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/chapters_controller.rb +2 -2
  114. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/content_elements_controller.rb +3 -4
  115. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/sections_controller.rb +13 -6
  116. data/entry_types/scrolled/app/controllers/pageflow_scrolled/entries_controller.rb +2 -0
  117. data/entry_types/scrolled/app/helpers/pageflow_scrolled/cache_helper.rb +11 -0
  118. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/entry_json_seed_helper.rb +42 -0
  119. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/seed_html_helper.rb +3 -0
  120. data/entry_types/scrolled/app/helpers/pageflow_scrolled/packs_helper.rb +31 -10
  121. data/entry_types/scrolled/app/helpers/pageflow_scrolled/react_server_side_rendering_helper.rb +9 -1
  122. data/entry_types/scrolled/app/helpers/pageflow_scrolled/themes_helper.rb +3 -1
  123. data/entry_types/scrolled/app/models/pageflow_scrolled/chapter.rb +23 -0
  124. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_head.html.erb +6 -1
  125. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_seed.json.jbuilder +1 -5
  126. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/sections/_section_with_content_elements.json.jbuilder +10 -0
  127. data/entry_types/scrolled/app/views/pageflow_scrolled/entries/show.html.erb +44 -41
  128. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_consent_vendors.json.jbuilder +16 -0
  129. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry.json.jbuilder +8 -5
  130. data/entry_types/scrolled/config/initializers/features.rb +5 -0
  131. data/entry_types/scrolled/config/locales/consent_widget.de.yml +4 -0
  132. data/entry_types/scrolled/config/locales/consent_widget.en.yml +4 -0
  133. data/entry_types/scrolled/config/locales/de.yml +189 -8
  134. data/entry_types/scrolled/config/locales/en.yml +207 -2
  135. data/entry_types/scrolled/config/routes.rb +4 -0
  136. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/install_generator.rb +97 -5
  137. data/entry_types/scrolled/lib/pageflow_scrolled/additional_seed_data.rb +1 -1
  138. data/entry_types/scrolled/lib/pageflow_scrolled/configuration.rb +96 -0
  139. data/entry_types/scrolled/lib/pageflow_scrolled/content_element_consent_vendors.rb +38 -0
  140. data/entry_types/scrolled/lib/pageflow_scrolled/engine.rb +17 -1
  141. data/entry_types/scrolled/lib/pageflow_scrolled/plugin.rb +24 -0
  142. data/entry_types/scrolled/lib/pageflow_scrolled/react_widget_type.rb +6 -1
  143. data/entry_types/scrolled/lib/pageflow_scrolled/seeds.rb +1 -1
  144. data/entry_types/scrolled/lib/tasks/pageflow_scrolled/storybook.rake +1 -2
  145. data/entry_types/scrolled/package/contentElements-editor.js +307 -22
  146. data/entry_types/scrolled/package/contentElements-frontend.css +1 -1
  147. data/entry_types/scrolled/package/contentElements-frontend.js +690 -71
  148. data/entry_types/scrolled/package/editor.js +616 -220
  149. data/entry_types/scrolled/package/frontend/{EditableInlineText.module-c6672f27.js → EditableInlineText.module-fa9e3aff.js} +1669 -1674
  150. data/entry_types/scrolled/package/frontend/PhonePlatformContext-10a1d600.js +32 -0
  151. data/entry_types/scrolled/package/frontend/ToggleFullscreenCornerButton-727cce0d.js +107 -0
  152. data/entry_types/scrolled/package/frontend/Viewer-169e14ca.js +154 -0
  153. data/entry_types/scrolled/package/frontend/{Viewer-6b05522f.js → Viewer-ee1aa590.js} +32 -161
  154. data/entry_types/scrolled/package/frontend/arrowRight-92a34ccc.js +77 -0
  155. data/entry_types/scrolled/package/frontend/{components-487daafa.js → components-4a09bfa3.js} +185 -45
  156. data/entry_types/scrolled/package/frontend/{PhonePlatformContext-22e65f92.js → i18n-ddd92820.js} +162 -292
  157. data/entry_types/scrolled/package/frontend/index-02378634.js +118 -0
  158. data/entry_types/scrolled/package/frontend/index.css +1 -1
  159. data/entry_types/scrolled/package/frontend/index.js +375 -40
  160. data/entry_types/scrolled/package/frontend/useContentElementEditorState-63045393.js +52 -0
  161. data/entry_types/scrolled/package/package.json +2 -1
  162. data/entry_types/scrolled/package/testHelpers.js +9 -2
  163. data/entry_types/scrolled/package/values/colors.module.css +15 -0
  164. data/entry_types/scrolled/package/widgets/consentBar.css +1 -0
  165. data/entry_types/scrolled/package/widgets/consentBar.js +426 -0
  166. data/entry_types/scrolled/package/widgets/defaultNavigation.css +2 -2
  167. data/entry_types/scrolled/package/widgets/defaultNavigation.js +16 -9
  168. data/lib/generators/pageflow/resque/resque_generator.rb +1 -1
  169. data/lib/pageflow/ability_mixin.rb +21 -13
  170. data/lib/pageflow/active_admin_can_can_fix.rb +2 -2
  171. data/lib/pageflow/admin/attributes_table_rows.rb +1 -1
  172. data/lib/pageflow/admin/form_inputs.rb +1 -1
  173. data/lib/pageflow/admin/tabs.rb +1 -1
  174. data/lib/pageflow/built_in_file_type.rb +7 -0
  175. data/lib/pageflow/configuration/permissions.rb +3 -3
  176. data/lib/pageflow/configuration.rb +38 -17
  177. data/lib/pageflow/engine.rb +60 -39
  178. data/lib/pageflow/entry_export_import/entry_serialization.rb +1 -1
  179. data/lib/pageflow/entry_export_import/revision_serialization.rb +1 -1
  180. data/lib/pageflow/file_type.rb +2 -2
  181. data/lib/pageflow/global_config_api.rb +2 -2
  182. data/lib/pageflow/nested_revision_component.rb +23 -5
  183. data/lib/pageflow/primary_domain_entry_redirect.rb +7 -7
  184. data/lib/pageflow/rails_version.rb +19 -0
  185. data/lib/pageflow/seeds.rb +20 -17
  186. data/lib/pageflow/theme_customizations.rb +10 -10
  187. data/lib/pageflow/version.rb +1 -1
  188. data/lib/pageflow/widget_types.rb +4 -0
  189. data/package/config/webpack5.js +14 -0
  190. data/package/editor.js +148 -37
  191. data/package/frontend.js +26 -2
  192. data/package/testHelpers.js +1 -1
  193. data/package/ui.js +296 -71
  194. data/spec/factories/accounts.rb +5 -2
  195. data/spec/factories/draft_entries.rb +2 -2
  196. data/spec/factories/entries.rb +19 -5
  197. data/spec/factories/entry_templates.rb +1 -1
  198. data/spec/factories/permalink_directory.rb +1 -1
  199. data/spec/factories/published_entries.rb +2 -2
  200. data/spec/factories/sites.rb +12 -0
  201. data/vendor/assets/javascripts/iscroll.js +4 -7
  202. metadata +84 -59
  203. data/app/helpers/pageflow/admin/permalinks_helper.rb +0 -15
  204. data/app/helpers/pageflow/themings_helper.rb +0 -11
  205. data/app/models/pageflow/theming.rb +0 -30
  206. data/app/views/admin/accounts/_theming_defaults_inline_help.html.erb +0 -5
  207. data/app/views/admin/accounts/_theming_details.html.arb +0 -5
  208. data/app/views/pageflow/editor/themings/_theming.json.jbuilder +0 -1
  209. data/entry_types/scrolled/package/frontend/arrowRight-7e3d9dd5.js +0 -42
  210. data/spec/factories/themings.rb +0 -7
  211. /data/app/views/pageflow/entries/{_theming.css.erb → _site.css.erb} +0 -0
@@ -1,9 +1,8 @@
1
- import { browser } from 'pageflow/frontend';
2
- import React, { useReducer, useMemo, useCallback, createContext as createContext$1, useContext, useState, useEffect } from 'react';
3
- import I18n from 'i18n-js';
1
+ import React, { useReducer, useMemo, useCallback, createContext as createContext$1, useContext } from 'react';
4
2
  import { createContext, useContextSelector } from 'use-context-selector';
5
3
  import { createSelectorCreator, defaultMemoize, createSelector } from 'reselect';
6
4
  import slugify from 'slugify';
5
+ import I18n from 'i18n-js';
7
6
 
8
7
  function _arrayWithHoles(arr) {
9
8
  if (Array.isArray(arr)) return arr;
@@ -112,6 +111,22 @@ function _objectSpread2(target) {
112
111
  return target;
113
112
  }
114
113
 
114
+ function _arrayWithoutHoles(arr) {
115
+ if (Array.isArray(arr)) return _arrayLikeToArray(arr);
116
+ }
117
+
118
+ function _iterableToArray(iter) {
119
+ if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
120
+ }
121
+
122
+ function _nonIterableSpread() {
123
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
124
+ }
125
+
126
+ function _toConsumableArray(arr) {
127
+ return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
128
+ }
129
+
115
130
  var PREFIX = 'PAGEFLOW_SCROLLED_COLLECTION';
116
131
  var RESET = "".concat(PREFIX, "_RESET");
117
132
  var ADD = "".concat(PREFIX, "_ADD");
@@ -215,6 +230,22 @@ function getItem(state, collectionName, key) {
215
230
  return state[collectionName].items[key];
216
231
  }
217
232
  }
233
+ function createMultipleItemsSelector(collectionNames, filter) {
234
+ return createSelector.apply(void 0, _toConsumableArray(collectionNames.map(function (collectionName) {
235
+ return function (collections) {
236
+ return collections[collectionName];
237
+ };
238
+ })).concat([function () {
239
+ for (var _len = arguments.length, collections = new Array(_len), _key = 0; _key < _len; _key++) {
240
+ collections[_key] = arguments[_key];
241
+ }
242
+
243
+ return collectionNames.reduce(function (result, collectionName, index) {
244
+ result[collectionName] = toOrderedItems(collections[index]);
245
+ return result;
246
+ }, {});
247
+ }]));
248
+ }
218
249
  function createItemsSelector(collectionName, filter) {
219
250
  if (filter) {
220
251
  var itemsSelector = createItemsSelector(collectionName);
@@ -227,17 +258,20 @@ function createItemsSelector(collectionName, filter) {
227
258
 
228
259
  return createSelector(function (collections) {
229
260
  return collections[collectionName];
230
- }, function (collection) {
231
- if (collection) {
232
- var items = collection.items;
233
- return collection.order.map(function (key) {
234
- return items[key];
235
- });
236
- } else {
237
- return [];
238
- }
239
- });
261
+ }, toOrderedItems);
240
262
  }
263
+
264
+ function toOrderedItems(collection) {
265
+ if (collection) {
266
+ var items = collection.items;
267
+ return collection.order.map(function (key) {
268
+ return items[key];
269
+ });
270
+ } else {
271
+ return [];
272
+ }
273
+ }
274
+
241
275
  var createShallowEqualArraysSelector = createSelectorCreator(defaultMemoize, shallowEqualArrays);
242
276
 
243
277
  function shallowEqualArrays(a, b) {
@@ -304,6 +338,14 @@ function useEntryStateCollectionItems(collectionName, filter) {
304
338
  return itemsSelector(entryState.collections);
305
339
  });
306
340
  }
341
+ function useMultipleEntryStateCollectionItems(collectionNames) {
342
+ var multipleItemsSelector = useMemo(function () {
343
+ return createMultipleItemsSelector(collectionNames);
344
+ }, [collectionNames]);
345
+ return useEntryState(function (entryState) {
346
+ return multipleItemsSelector(entryState.collections);
347
+ });
348
+ }
307
349
 
308
350
  /**
309
351
  * Returns data generated by a Ruby lambda registered server
@@ -324,6 +366,15 @@ function useAdditionalSeedData(name) {
324
366
  return config.additionalSeedData[name];
325
367
  }
326
368
 
369
+ function useContentElementConsentVendor(_ref) {
370
+ var contentElementId = _ref.contentElementId;
371
+ var config = useEntryStateConfig();
372
+ var vendorName = config.contentElementConsentVendors[contentElementId];
373
+ return config.consentVendors.find(function (vendor) {
374
+ return vendor.name === vendorName;
375
+ });
376
+ }
377
+
327
378
  /**
328
379
  * Returns a nested data structure representing the metadata of the entry.
329
380
  *
@@ -347,217 +398,11 @@ function useEntryMetadata() {
347
398
  }, [entries]);
348
399
  }
349
400
 
350
- function _objectWithoutPropertiesLoose(source, excluded) {
351
- if (source == null) return {};
352
- var target = {};
353
- var sourceKeys = Object.keys(source);
354
- var key, i;
355
-
356
- for (i = 0; i < sourceKeys.length; i++) {
357
- key = sourceKeys[i];
358
- if (excluded.indexOf(key) >= 0) continue;
359
- target[key] = source[key];
360
- }
361
-
362
- return target;
363
- }
364
-
365
- function _objectWithoutProperties(source, excluded) {
366
- if (source == null) return {};
367
- var target = _objectWithoutPropertiesLoose(source, excluded);
368
- var key, i;
369
-
370
- if (Object.getOwnPropertySymbols) {
371
- var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
372
-
373
- for (i = 0; i < sourceSymbolKeys.length; i++) {
374
- key = sourceSymbolKeys[i];
375
- if (excluded.indexOf(key) >= 0) continue;
376
- if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
377
- target[key] = source[key];
378
- }
379
- }
380
-
381
- return target;
382
- }
383
-
384
- function _extends() {
385
- _extends = Object.assign || function (target) {
386
- for (var i = 1; i < arguments.length; i++) {
387
- var source = arguments[i];
388
-
389
- for (var key in source) {
390
- if (Object.prototype.hasOwnProperty.call(source, key)) {
391
- target[key] = source[key];
392
- }
393
- }
394
- }
395
-
396
- return target;
397
- };
398
-
399
- return _extends.apply(this, arguments);
400
- }
401
- var EmailIcon = (function (_ref) {
402
- var _ref$styles = _ref.styles,
403
- props = _objectWithoutProperties(_ref, ["styles"]);
404
-
405
- return /*#__PURE__*/React.createElement("svg", _extends({
406
- xmlns: "http://www.w3.org/2000/svg",
407
- viewBox: "0 0 612 612"
408
- }, props), /*#__PURE__*/React.createElement("path", {
409
- 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"
410
- }));
411
- });
412
-
413
- function _extends$1() {
414
- _extends$1 = Object.assign || function (target) {
415
- for (var i = 1; i < arguments.length; i++) {
416
- var source = arguments[i];
417
-
418
- for (var key in source) {
419
- if (Object.prototype.hasOwnProperty.call(source, key)) {
420
- target[key] = source[key];
421
- }
422
- }
423
- }
424
-
425
- return target;
426
- };
427
-
428
- return _extends$1.apply(this, arguments);
429
- }
430
- var FacebookIcon = (function (_ref) {
431
- var _ref$styles = _ref.styles,
432
- props = _objectWithoutProperties(_ref, ["styles"]);
433
-
434
- return /*#__PURE__*/React.createElement("svg", _extends$1({
435
- xmlns: "http://www.w3.org/2000/svg",
436
- viewBox: "0 0 430.113 430.114"
437
- }, props), /*#__PURE__*/React.createElement("path", {
438
- 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"
439
- }));
440
- });
441
-
442
- function _extends$2() {
443
- _extends$2 = Object.assign || function (target) {
444
- for (var i = 1; i < arguments.length; i++) {
445
- var source = arguments[i];
446
-
447
- for (var key in source) {
448
- if (Object.prototype.hasOwnProperty.call(source, key)) {
449
- target[key] = source[key];
450
- }
451
- }
452
- }
453
-
454
- return target;
455
- };
456
-
457
- return _extends$2.apply(this, arguments);
458
- }
459
- var LinkedInIcon = (function (_ref) {
460
- var _ref$styles = _ref.styles,
461
- props = _objectWithoutProperties(_ref, ["styles"]);
462
-
463
- return /*#__PURE__*/React.createElement("svg", _extends$2({
464
- xmlns: "http://www.w3.org/2000/svg",
465
- viewBox: "0 0 430.117 430.117"
466
- }, props), /*#__PURE__*/React.createElement("path", {
467
- 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"
468
- }));
469
- });
470
-
471
- function _extends$3() {
472
- _extends$3 = Object.assign || function (target) {
473
- for (var i = 1; i < arguments.length; i++) {
474
- var source = arguments[i];
475
-
476
- for (var key in source) {
477
- if (Object.prototype.hasOwnProperty.call(source, key)) {
478
- target[key] = source[key];
479
- }
480
- }
481
- }
482
-
483
- return target;
484
- };
485
-
486
- return _extends$3.apply(this, arguments);
487
- }
488
- var TelegramIcon = (function (_ref) {
489
- var _ref$styles = _ref.styles,
490
- props = _objectWithoutProperties(_ref, ["styles"]);
491
-
492
- return /*#__PURE__*/React.createElement("svg", _extends$3({
493
- xmlns: "http://www.w3.org/2000/svg",
494
- viewBox: "0 0 512.004 512.004"
495
- }, props), /*#__PURE__*/React.createElement("path", {
496
- 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"
497
- }));
498
- });
499
-
500
- function _extends$4() {
501
- _extends$4 = Object.assign || function (target) {
502
- for (var i = 1; i < arguments.length; i++) {
503
- var source = arguments[i];
504
-
505
- for (var key in source) {
506
- if (Object.prototype.hasOwnProperty.call(source, key)) {
507
- target[key] = source[key];
508
- }
509
- }
510
- }
511
-
512
- return target;
513
- };
514
-
515
- return _extends$4.apply(this, arguments);
516
- }
517
- var TwitterIcon = (function (_ref) {
518
- var _ref$styles = _ref.styles,
519
- props = _objectWithoutProperties(_ref, ["styles"]);
520
-
521
- return /*#__PURE__*/React.createElement("svg", _extends$4({
522
- xmlns: "http://www.w3.org/2000/svg",
523
- viewBox: "0 0 612 612"
524
- }, props), /*#__PURE__*/React.createElement("path", {
525
- 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"
526
- }));
527
- });
528
-
529
- function _extends$5() {
530
- _extends$5 = Object.assign || function (target) {
531
- for (var i = 1; i < arguments.length; i++) {
532
- var source = arguments[i];
533
-
534
- for (var key in source) {
535
- if (Object.prototype.hasOwnProperty.call(source, key)) {
536
- target[key] = source[key];
537
- }
538
- }
539
- }
540
-
541
- return target;
542
- };
543
-
544
- return _extends$5.apply(this, arguments);
545
- }
546
- var WhatsAppIcon = (function (_ref) {
547
- var _ref$styles = _ref.styles,
548
- props = _objectWithoutProperties(_ref, ["styles"]);
549
-
550
- return /*#__PURE__*/React.createElement("svg", _extends$5({
551
- xmlns: "http://www.w3.org/2000/svg",
552
- viewBox: "0 0 90 90"
553
- }, props), /*#__PURE__*/React.createElement("path", {
554
- d: "M90 43.841c0 24.213-19.779 43.841-44.182 43.841a44.256 44.256 0 01-21.357-5.455L0 90l7.975-23.522a43.38 43.38 0 01-6.34-22.637C1.635 19.628 21.416 0 45.818 0 70.223 0 90 19.628 90 43.841zM45.818 6.982c-20.484 0-37.146 16.535-37.146 36.859 0 8.065 2.629 15.534 7.076 21.61L11.107 79.14l14.275-4.537A37.122 37.122 0 0045.819 80.7c20.481 0 37.146-16.533 37.146-36.857S66.301 6.982 45.818 6.982zm22.311 46.956c-.273-.447-.994-.717-2.076-1.254-1.084-.537-6.41-3.138-7.4-3.495-.993-.358-1.717-.538-2.438.537-.721 1.076-2.797 3.495-3.43 4.212-.632.719-1.263.809-2.347.271-1.082-.537-4.571-1.673-8.708-5.333-3.219-2.848-5.393-6.364-6.025-7.441-.631-1.075-.066-1.656.475-2.191.488-.482 1.084-1.255 1.625-1.882.543-.628.723-1.075 1.082-1.793.363-.717.182-1.344-.09-1.883-.27-.537-2.438-5.825-3.34-7.977-.902-2.15-1.803-1.792-2.436-1.792-.631 0-1.354-.09-2.076-.09s-1.896.269-2.889 1.344c-.992 1.076-3.789 3.676-3.789 8.963 0 5.288 3.879 10.397 4.422 11.113.541.716 7.49 11.92 18.5 16.223C58.2 65.771 58.2 64.336 60.186 64.156c1.984-.179 6.406-2.599 7.312-5.107.9-2.512.9-4.663.631-5.111z"
555
- }));
556
- });
557
-
558
401
  /**
559
- * Returns a list of attributes (icon, name and url) of all configured share providers of the entry.
560
- * The url provides a %{url} placeholder where the link can be inserted.
402
+ * Returns a list of attributes (iconName, name and url) of all configured share
403
+ * providers of the entry. The url provides a %{url} placeholder where the link
404
+ * can be inserted. iconName can be passed to ThemeIcon to render a theme
405
+ * specific icon.
561
406
  *
562
407
  * @example
563
408
  *
@@ -565,12 +410,12 @@ var WhatsAppIcon = (function (_ref) {
565
410
  * shareProviders // =>
566
411
  * [
567
412
  * {
568
- * icon: <FacebookSVGIcon />,
413
+ * iconName: 'facebook',
569
414
  * name: 'Facebook',
570
415
  * url: http://www.facebook.com/sharer/sharer.php?u=%{url}
571
416
  * },
572
417
  * {
573
- * icon: <TwitterSVGIcon />,
418
+ * iconName: 'twitter',
574
419
  * name: 'Twitter',
575
420
  * url: https://twitter.com/intent/tweet?url=%{url}
576
421
  * }
@@ -586,32 +431,32 @@ function useShareProviders(_ref) {
586
431
  return useMemo(function () {
587
432
  var sharing = {
588
433
  email: {
589
- icon: EmailIcon,
434
+ iconName: 'email',
590
435
  name: 'Mail',
591
436
  url: urlTemplates.email
592
437
  },
593
438
  facebook: {
594
- icon: FacebookIcon,
439
+ iconName: 'facebook',
595
440
  name: 'Facebook',
596
441
  url: urlTemplates.facebook
597
442
  },
598
443
  linked_in: {
599
- icon: LinkedInIcon,
444
+ iconName: 'linkedIn',
600
445
  name: 'LinkedIn',
601
446
  url: urlTemplates.linked_in
602
447
  },
603
448
  telegram: {
604
- icon: TelegramIcon,
449
+ iconName: 'telegram',
605
450
  name: 'Telegram',
606
451
  url: urlTemplates.telegram
607
452
  },
608
453
  twitter: {
609
- icon: TwitterIcon,
454
+ iconName: 'twitter',
610
455
  name: 'Twitter',
611
456
  url: urlTemplates.twitter
612
457
  },
613
458
  whats_app: {
614
- icon: WhatsAppIcon,
459
+ iconName: 'whatsApp',
615
460
  name: 'WhatsApp',
616
461
  url: urlTemplates.whats_app
617
462
  }
@@ -620,7 +465,7 @@ function useShareProviders(_ref) {
620
465
  var config = sharing[provider];
621
466
  return {
622
467
  name: config.name,
623
- icon: config.icon,
468
+ iconName: config.iconName,
624
469
  url: config.url
625
470
  };
626
471
  });
@@ -806,21 +651,52 @@ function sectionData(section) {
806
651
  }
807
652
 
808
653
  function useSectionContentElements(_ref2) {
809
- var sectionId = _ref2.sectionId;
654
+ var sectionId = _ref2.sectionId,
655
+ layout = _ref2.layout;
810
656
  var filterBySectionId = useCallback(function (contentElement) {
811
657
  return contentElement.sectionId === sectionId;
812
658
  }, [sectionId]);
813
659
  var contentElements = useEntryStateCollectionItems('contentElements', filterBySectionId);
814
- return contentElements.map(function (item) {
660
+ return contentElements.map(function (contentElement) {
661
+ var position = getPosition(contentElement, layout);
815
662
  return {
816
- id: item.id,
817
- permaId: item.permaId,
818
- type: item.typeName,
819
- position: item.configuration.position,
820
- props: item.configuration
663
+ id: contentElement.id,
664
+ permaId: contentElement.permaId,
665
+ type: contentElement.typeName,
666
+ position: position,
667
+ width: getWidth(contentElement, position),
668
+ props: contentElement.configuration
821
669
  };
822
670
  });
823
671
  }
672
+ var supportedPositions = {
673
+ center: ['inline', 'left', 'right'],
674
+ centerRagged: ['inline', 'left', 'right'],
675
+ left: ['inline', 'sticky'],
676
+ right: ['inline', 'sticky']
677
+ };
678
+
679
+ function getPosition(contentElement, layout) {
680
+ var position = contentElement.configuration.position;
681
+ return supportedPositions[layout || 'left'].includes(position) ? position : 'inline';
682
+ }
683
+
684
+ var legacyPositionWidths = {
685
+ wide: 2,
686
+ full: 3
687
+ };
688
+ var clampedWidthPositions = ['sticky', 'left', 'right'];
689
+
690
+ function getWidth(contentElement, position) {
691
+ var width = typeof contentElement.configuration.width === 'number' ? contentElement.configuration.width : legacyPositionWidths[contentElement.configuration.position] || 0;
692
+
693
+ if (clampedWidthPositions.includes(position)) {
694
+ return Math.min(Math.max(width || 0, -2), 2);
695
+ } else {
696
+ return width;
697
+ }
698
+ }
699
+
824
700
  function useChapter(_ref3) {
825
701
  var permaId = _ref3.permaId;
826
702
  var chapters = useChapters();
@@ -892,7 +768,7 @@ function expandUrls(collectionName, file, urlTemplates) {
892
768
  throw new Error("No file url templates found for ".concat(collectionName));
893
769
  }
894
770
 
895
- var variants = file.variants || Object.keys(urlTemplates[collectionName]);
771
+ var variants = file.variants ? ['original'].concat(_toConsumableArray(file.variants)) : Object.keys(urlTemplates[collectionName]);
896
772
  var urls = variants.reduce(function (result, variant) {
897
773
  var url = getFileUrl(collectionName, file, variant, urlTemplates);
898
774
 
@@ -988,28 +864,31 @@ function getFileUrlTemplateHost(seed, collectionName, variant) {
988
864
 
989
865
  /**
990
866
  * Returns a string (comma-separated list) of copyrights of
991
- * all images used in the entry.
992
- * If none of the images has a rights attribute configured,
867
+ * all files used in the entry.
868
+ * If none of the files has a rights attribute configured,
993
869
  * it falls back to the default file rights of the entry's account,
994
870
  * otherwise returns an empty string
995
871
  *
996
872
  * @example
997
873
  *
998
874
  * const fileRights = useFileRights();
999
- * fileRights // => "author of image 1, author of image 2"
875
+ * fileRights // => "author of image 1, author of video 2"
1000
876
  */
1001
877
 
1002
878
  function useFileRights() {
1003
879
  var _config$defaultFileRi;
1004
880
 
1005
881
  var config = useEntryStateConfig();
1006
- var imageFiles = useEntryStateCollectionItems('imageFiles');
882
+ var fileCollectionNames = Object.keys(config.fileModelTypes);
883
+ var files = useMultipleEntryStateCollectionItems(fileCollectionNames);
1007
884
  var defaultFileRights = (_config$defaultFileRi = config.defaultFileRights) === null || _config$defaultFileRi === void 0 ? void 0 : _config$defaultFileRi.trim();
1008
- return Array.from(new Set(imageFiles.map(function (imageFile) {
1009
- var _imageFile$rights;
885
+ return Array.from(new Set(Object.keys(files).flatMap(function (key) {
886
+ return files[key].map(function (file) {
887
+ var _file$rights;
1010
888
 
1011
- return ((_imageFile$rights = imageFile.rights) === null || _imageFile$rights === void 0 ? void 0 : _imageFile$rights.trim()) || defaultFileRights;
1012
- }))).filter(Boolean).join(', ');
889
+ return ((_file$rights = file.rights) === null || _file$rights === void 0 ? void 0 : _file$rights.trim()) || defaultFileRights;
890
+ });
891
+ }))).sort().filter(Boolean).join(', ');
1013
892
  }
1014
893
  /**
1015
894
  * Returns a nested data structure representing the legal info of the entry.
@@ -1060,22 +939,6 @@ function useCredits() {
1060
939
  return credits;
1061
940
  }
1062
941
 
1063
- function _arrayWithoutHoles(arr) {
1064
- if (Array.isArray(arr)) return _arrayLikeToArray(arr);
1065
- }
1066
-
1067
- function _iterableToArray(iter) {
1068
- if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
1069
- }
1070
-
1071
- function _nonIterableSpread() {
1072
- throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
1073
- }
1074
-
1075
- function _toConsumableArray(arr) {
1076
- return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
1077
- }
1078
-
1079
942
  var qualities = ['medium', 'fullhd', '4k'];
1080
943
  function useAvailableQualities(file) {
1081
944
  if (!file) {
@@ -1133,6 +996,40 @@ function updateContentElementConfiguration(_ref) {
1133
996
  });
1134
997
  }
1135
998
 
999
+ function _objectWithoutPropertiesLoose(source, excluded) {
1000
+ if (source == null) return {};
1001
+ var target = {};
1002
+ var sourceKeys = Object.keys(source);
1003
+ var key, i;
1004
+
1005
+ for (i = 0; i < sourceKeys.length; i++) {
1006
+ key = sourceKeys[i];
1007
+ if (excluded.indexOf(key) >= 0) continue;
1008
+ target[key] = source[key];
1009
+ }
1010
+
1011
+ return target;
1012
+ }
1013
+
1014
+ function _objectWithoutProperties(source, excluded) {
1015
+ if (source == null) return {};
1016
+ var target = _objectWithoutPropertiesLoose(source, excluded);
1017
+ var key, i;
1018
+
1019
+ if (Object.getOwnPropertySymbols) {
1020
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
1021
+
1022
+ for (i = 0; i < sourceSymbolKeys.length; i++) {
1023
+ key = sourceSymbolKeys[i];
1024
+ if (excluded.indexOf(key) >= 0) continue;
1025
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
1026
+ target[key] = source[key];
1027
+ }
1028
+ }
1029
+
1030
+ return target;
1031
+ }
1032
+
1136
1033
  var LocaleContext = createContext$1('en');
1137
1034
  function setupI18n(_ref) {
1138
1035
  var defaultLocale = _ref.defaultLocale,
@@ -1191,31 +1088,4 @@ function useI18n() {
1191
1088
  };
1192
1089
  }
1193
1090
 
1194
- var BrowserFeaturesAvailableContext = createContext$1(); // Browser feature detection is not available during server side
1195
- // rendering. To prevent mismatches during hydration, we keep features
1196
- // disabled in the initial render. Since hydration only starts after
1197
- // feature detection has finished, we can immediately re-render once
1198
- // the provider has mounted.
1199
-
1200
- function BrowserFeaturesProvider(_ref) {
1201
- var children = _ref.children;
1202
-
1203
- var _useState = useState(false),
1204
- _useState2 = _slicedToArray(_useState, 2),
1205
- isAvailable = _useState2[0],
1206
- setIsAvailable = _useState2[1];
1207
-
1208
- useEffect(function () {
1209
- return setIsAvailable(true);
1210
- }, []);
1211
- return /*#__PURE__*/React.createElement(BrowserFeaturesAvailableContext.Provider, {
1212
- value: isAvailable
1213
- }, children);
1214
- }
1215
- function useBrowserFeature(name) {
1216
- return useContext(BrowserFeaturesAvailableContext) && browser.has(name);
1217
- }
1218
-
1219
- var PhonePlatformContext = React.createContext(false);
1220
-
1221
- export { useShareProviders as A, BrowserFeaturesProvider as B, useShareUrl as C, updateContentElementConfiguration as D, EntryStateProvider as E, _unsupportedIterableToArray as F, LocaleProvider as L, PhonePlatformContext as P, _objectWithoutProperties as _, _objectSpread2 as a, _defineProperty as b, _slicedToArray as c, useLocale as d, useLegalInfo as e, useTheme as f, useEntryMetadata as g, useNestedFiles as h, useFile as i, _toConsumableArray as j, useSectionContentElements as k, useAdditionalSeedData as l, useSectionsWithChapter as m, useBrowserFeature as n, useEntryStateDispatch as o, useSection as p, useChapter as q, useEntryStructure as r, useWidget as s, getFileUrlTemplateHost as t, useI18n as u, useAvailableQualities as v, setupI18n as w, useChapters as x, useCredits as y, useFileRights as z };
1091
+ export { useShareUrl as A, useLocale as B, updateContentElementConfiguration as C, _unsupportedIterableToArray as D, EntryStateProvider as E, LocaleProvider as L, _slicedToArray as _, _objectSpread2 as a, _defineProperty as b, useEntryMetadata as c, useNestedFiles as d, _objectWithoutProperties as e, useFile as f, useTheme as g, useSectionContentElements as h, useAdditionalSeedData as i, useSectionsWithChapter as j, useContentElementConsentVendor as k, _toConsumableArray as l, useChapter as m, useEntryStateDispatch as n, useSection as o, useEntryStructure as p, useWidget as q, getFileUrlTemplateHost as r, useAvailableQualities as s, setupI18n as t, useI18n as u, useChapters as v, useCredits as w, useFileRights as x, useLegalInfo as y, useShareProviders as z };