pageflow 15.2.2 → 15.6.1

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

Potentially problematic release.


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

Files changed (213) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -118
  3. data/README.md +2 -3
  4. data/admins/pageflow/accounts.rb +1 -98
  5. data/admins/pageflow/entry.rb +21 -1
  6. data/admins/pageflow/entry_templates.rb +140 -0
  7. data/admins/pageflow/membership.rb +12 -0
  8. data/admins/pageflow/user.rb +5 -5
  9. data/app/assets/javascripts/pageflow/admin/entries.js +65 -0
  10. data/app/assets/javascripts/pageflow/admin/users.js +1 -1
  11. data/app/assets/javascripts/pageflow/asset_urls.js.erb +1 -0
  12. data/app/assets/javascripts/pageflow/base.js +0 -12
  13. data/app/assets/javascripts/pageflow/components.js +2 -6
  14. data/app/assets/javascripts/pageflow/dist/ui.js +178 -55
  15. data/app/assets/javascripts/pageflow/editor/vendor.js +1 -0
  16. data/app/assets/javascripts/pageflow/vendor.js +12 -10
  17. data/app/assets/stylesheets/pageflow/base.scss +0 -7
  18. data/app/assets/stylesheets/pageflow/editor/base.scss +5 -2
  19. data/app/assets/stylesheets/pageflow/editor/composables.scss +5 -1
  20. data/app/assets/stylesheets/pageflow/editor/drop_down_button.scss +1 -1
  21. data/app/assets/stylesheets/pageflow/editor/emulation_mode_button.scss +44 -55
  22. data/app/assets/stylesheets/pageflow/editor/help.scss +2 -2
  23. data/app/assets/stylesheets/pageflow/editor/select_button.scss +1 -1
  24. data/app/assets/stylesheets/pageflow/editor/sidebar_footer.scss +1 -1
  25. data/app/assets/stylesheets/pageflow/entries.scss +1 -1
  26. data/app/assets/stylesheets/pageflow/loading_spinner.scss +4 -1
  27. data/app/assets/stylesheets/pageflow/navigation_mobile.scss +4 -4
  28. data/app/assets/stylesheets/pageflow/themes/default/anchors.scss +1 -1
  29. data/app/assets/stylesheets/pageflow/themes/default/logo/variant/watermark.scss +1 -1
  30. data/app/assets/stylesheets/pageflow/themes/default/page.scss +7 -0
  31. data/app/assets/stylesheets/pageflow/themes/default/page/anchors.scss +1 -1
  32. data/app/assets/stylesheets/pageflow/themes/default/player_controls/classic/control_bar.scss +1 -1
  33. data/app/assets/stylesheets/pageflow/themes/default/player_controls/classic/info_box.scss +1 -1
  34. data/app/assets/stylesheets/pageflow/themes/default/player_controls/shared/menu_bar.scss +2 -2
  35. data/app/assets/stylesheets/pageflow/themes/default/player_controls/slim/control_bar.scss +2 -2
  36. data/app/assets/stylesheets/pageflow/themes/default/player_controls/slim/info_box.scss +1 -1
  37. data/app/assets/stylesheets/pageflow/themes/default/player_controls/slim/quality_menu.scss +2 -2
  38. data/app/assets/stylesheets/pageflow/themes/default/player_controls/waveform/wave.scss +1 -1
  39. data/app/assets/stylesheets/pageflow/ui/forms.scss +9 -2
  40. data/app/assets/stylesheets/pageflow/ui/input/extended_select_input.scss +2 -2
  41. data/app/assets/stylesheets/pageflow/ui/tooltip.scss +17 -3
  42. data/app/helpers/pageflow/admin/entries_helper.rb +16 -0
  43. data/app/helpers/pageflow/structured_data_helper.rb +0 -2
  44. data/app/models/pageflow/account.rb +21 -1
  45. data/app/models/pageflow/account_role_query.rb +1 -1
  46. data/app/models/pageflow/chapter.rb +3 -9
  47. data/app/models/pageflow/entry.rb +9 -2
  48. data/app/models/pageflow/entry_duplicate.rb +1 -0
  49. data/app/models/pageflow/entry_template.rb +16 -2
  50. data/app/models/pageflow/managed_user_query.rb +1 -1
  51. data/app/models/pageflow/page.rb +1 -4
  52. data/app/models/pageflow/revision.rb +0 -4
  53. data/app/models/pageflow/storyline.rb +2 -9
  54. data/app/policies/pageflow/account_policy.rb +10 -0
  55. data/app/policies/pageflow/entry_template_policy.rb +5 -1
  56. data/app/policies/pageflow/folder_policy.rb +2 -2
  57. data/app/policies/pageflow/membership_policy.rb +2 -2
  58. data/app/policies/pageflow/theming_policy.rb +2 -2
  59. data/app/policies/pageflow/user_policy.rb +1 -1
  60. data/app/views/admin/accounts/_entry_template_details.html.arb +7 -5
  61. data/app/views/admin/accounts/_form.html.erb +3 -49
  62. data/app/views/admin/entries/_attributes_table.html.arb +5 -0
  63. data/app/views/admin/entries/_not_allowed_to_see_entry_types.json.jbuilder +2 -0
  64. data/app/views/admin/entries/entry_types.json.jbuilder +4 -0
  65. data/app/views/admin/entry_templates/_form.html.erb +58 -0
  66. data/app/views/admin/users/_not_allowed_to_see_user_quota.html.erb +3 -0
  67. data/app/views/components/pageflow/admin/entry_templates_tab.rb +48 -0
  68. data/app/views/pageflow/admin/initial_passwords/edit.html.erb +2 -1
  69. data/app/views/pageflow/admin/users/_quota_exhausted.html.erb +1 -1
  70. data/app/views/pageflow/themes/_theme.json.jbuilder +1 -1
  71. data/app/views/pageflow/video_files/_video_file.json.jbuilder +8 -1
  72. data/config/initializers/admin_resource_tabs.rb +5 -0
  73. data/config/initializers/help_entries.rb +1 -5
  74. data/config/initializers/revision_components.rb +5 -0
  75. data/config/locales/de.yml +88 -155
  76. data/config/locales/en.yml +79 -143
  77. data/db/migrate/20200515112500_add_constraints_to_entry_templates.rb +21 -0
  78. data/db/migrate/20200807135200_rename_pageflow_entry_template_entry_type_to_entry_type_name.rb +7 -0
  79. data/entry_types/paged/app/assets/javascripts/pageflow_paged/components.js +7 -0
  80. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/editor.js +1528 -1349
  81. data/entry_types/paged/app/assets/javascripts/pageflow_paged/dist/frontend.js +9258 -0
  82. data/{app/assets/javascripts/pageflow → entry_types/paged/app/assets/javascripts/pageflow_paged}/dist/react-client.js +1 -1
  83. data/{app/assets/javascripts/pageflow → entry_types/paged/app/assets/javascripts/pageflow_paged}/dist/react-server.js +3 -3
  84. data/entry_types/paged/app/assets/javascripts/pageflow_paged/frontend.js +6 -0
  85. data/entry_types/paged/app/assets/javascripts/pageflow_paged/server_rendering.js +9 -0
  86. data/entry_types/paged/app/assets/javascripts/pageflow_paged/vendor.js +9 -0
  87. data/entry_types/paged/app/assets/javascripts/pageflow_paged/videojs.js +6 -0
  88. data/entry_types/paged/app/controllers/pageflow_paged/application_controller.rb +2 -2
  89. data/{app/helpers/pageflow → entry_types/paged/app/helpers/pageflow_paged}/page_background_asset_helper.rb +4 -3
  90. data/{app/helpers/pageflow → entry_types/paged/app/helpers/pageflow_paged}/react_server_side_rendering_helper.rb +23 -2
  91. data/entry_types/paged/app/views/layouts/pageflow_paged/_loading_spinner_inline_script.html.erb +1 -0
  92. data/entry_types/paged/app/views/layouts/pageflow_paged/application.html.erb +3 -3
  93. data/entry_types/paged/app/views/pageflow_paged/editor/entries/_head.html.erb +4 -2
  94. data/entry_types/paged/app/views/pageflow_paged/entries/_entry.html.erb +1 -1
  95. data/{app/views/pageflow → entry_types/paged/app/views/pageflow_paged}/page_background_asset/_element.html.erb +0 -0
  96. data/{app/views/pageflow → entry_types/paged/app/views/pageflow_paged}/react/_widget.html.erb +0 -0
  97. data/{app/views/pageflow → entry_types/paged/app/views/pageflow_paged}/react/page.html.erb +0 -0
  98. data/entry_types/paged/config/initializers/features.rb +1 -1
  99. data/entry_types/paged/config/initializers/help_entries.rb +17 -0
  100. data/entry_types/paged/config/locales/new/help.de.yml +162 -0
  101. data/entry_types/paged/config/locales/new/help.en.yml +153 -0
  102. data/entry_types/paged/lib/pageflow_paged/engine.rb +13 -0
  103. data/entry_types/paged/lib/pageflow_paged/plugin.rb +5 -1
  104. data/entry_types/paged/lib/pageflow_paged/react.rb +12 -0
  105. data/{lib/pageflow → entry_types/paged/lib/pageflow_paged}/react/page_type.rb +2 -2
  106. data/{lib/pageflow → entry_types/paged/lib/pageflow_paged}/react/widget_type.rb +2 -2
  107. data/entry_types/paged/lib/tasks/pageflow_paged_tasks.rake +7 -0
  108. data/entry_types/paged/vendor/assets/javascripts/development/pageflow_paged/vendor/react-server.js +20613 -0
  109. data/entry_types/paged/vendor/assets/javascripts/development/pageflow_paged/vendor/react.js +21495 -0
  110. data/{vendor/assets/javascripts → entry_types/paged/vendor/assets/javascripts/pageflow_paged/vendor}/dash.all.min.js +0 -0
  111. data/{vendor/assets/javascripts → entry_types/paged/vendor/assets/javascripts/pageflow_paged/vendor}/videojs-dash.js +0 -0
  112. data/{vendor/assets/javascripts → entry_types/paged/vendor/assets/javascripts/pageflow_paged/vendor}/videojs.js +0 -0
  113. data/entry_types/paged/vendor/assets/javascripts/production/pageflow_paged/vendor/react-server.js +24 -0
  114. data/entry_types/paged/vendor/assets/javascripts/production/pageflow_paged/vendor/react.js +24 -0
  115. data/entry_types/scrolled/app/assets/javascripts/pageflow_scrolled/legacy.js +0 -0
  116. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/chapters_controller.rb +2 -2
  117. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/content_elements_controller.rb +14 -4
  118. data/entry_types/scrolled/app/controllers/pageflow_scrolled/editor/sections_controller.rb +2 -2
  119. data/entry_types/scrolled/app/controllers/pageflow_scrolled/entries_controller.rb +10 -0
  120. data/entry_types/scrolled/app/helpers/pageflow_scrolled/editor/seed_html_helper.rb +7 -0
  121. data/entry_types/scrolled/app/helpers/pageflow_scrolled/entry_json_seed_helper.rb +2 -0
  122. data/entry_types/scrolled/app/helpers/pageflow_scrolled/favicon_helper.rb +21 -0
  123. data/entry_types/scrolled/app/helpers/pageflow_scrolled/react_server_side_rendering_helper.rb +40 -0
  124. data/entry_types/scrolled/app/helpers/pageflow_scrolled/themes_helper.rb +36 -0
  125. data/entry_types/scrolled/app/models/pageflow_scrolled/chapter.rb +3 -9
  126. data/entry_types/scrolled/app/models/pageflow_scrolled/content_element.rb +37 -2
  127. data/entry_types/scrolled/app/models/pageflow_scrolled/section.rb +3 -9
  128. data/entry_types/scrolled/app/models/pageflow_scrolled/storyline.rb +1 -9
  129. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/content_elements/batch.json.jbuilder +2 -0
  130. data/entry_types/scrolled/app/views/pageflow_scrolled/editor/entries/_head.html.erb +1 -7
  131. data/entry_types/scrolled/app/views/pageflow_scrolled/entries/_global_notices.html.erb +10 -0
  132. data/entry_types/scrolled/app/views/pageflow_scrolled/entries/show.html.erb +28 -11
  133. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_entry.json.jbuilder +3 -0
  134. data/entry_types/scrolled/app/views/pageflow_scrolled/entry_json_seed/_theme.json.jbuilder +8 -0
  135. data/entry_types/scrolled/app/views/pageflow_scrolled/favicons/_entry.html.erb +10 -0
  136. data/entry_types/scrolled/config/initializers/help_entries.rb +16 -0
  137. data/entry_types/scrolled/config/locales/de.yml +669 -0
  138. data/entry_types/scrolled/config/locales/en.yml +488 -0
  139. data/entry_types/scrolled/config/routes.rb +1 -0
  140. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/install_generator.rb +76 -6
  141. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/favicons/android-chrome-192x192.png +0 -0
  142. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/favicons/android-chrome-512x512.png +0 -0
  143. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/favicons/apple-touch-icon.png +0 -0
  144. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/favicons/browserconfig.xml +9 -0
  145. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/favicons/favicon-16x16.png +0 -0
  146. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/favicons/favicon-32x32.png +0 -0
  147. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/favicons/favicon.ico +0 -0
  148. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/favicons/mstile-150x150.png +0 -0
  149. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/favicons/safari-pinned-tab.svg +46 -0
  150. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/favicons/site.webmanifest +19 -0
  151. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/logoDesktop.svg +56 -0
  152. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/logoMobile.svg +22 -0
  153. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/theme/unmute.mp3 +0 -0
  154. data/entry_types/scrolled/lib/generators/pageflow_scrolled/install/templates/themes_plugin.rb.tt +26 -0
  155. data/entry_types/scrolled/lib/pageflow_scrolled/engine.rb +6 -0
  156. data/entry_types/scrolled/lib/pageflow_scrolled/plugin.rb +3 -1
  157. data/entry_types/scrolled/lib/pageflow_scrolled/seeds.rb +90 -30
  158. data/entry_types/scrolled/lib/tasks/pageflow_scrolled/create_bundle_symlinks_for_yarn.rake +33 -0
  159. data/entry_types/scrolled/lib/tasks/pageflow_scrolled/dummy.rake +8 -0
  160. data/entry_types/scrolled/lib/tasks/pageflow_scrolled/storybook.rake +173 -0
  161. data/entry_types/scrolled/package/config/webpack.js +11 -0
  162. data/entry_types/scrolled/package/contentElements-editor.js +316 -185
  163. data/entry_types/scrolled/package/contentElements-frontend.css +1 -0
  164. data/entry_types/scrolled/package/contentElements-frontend.js +940 -304
  165. data/entry_types/scrolled/package/editor.js +2930 -371
  166. data/entry_types/scrolled/package/frontend-server.js +228 -0
  167. data/entry_types/scrolled/package/frontend/EditableText-7093fd0e.js +1071 -0
  168. data/entry_types/scrolled/package/frontend/Viewer-e49e7807.js +387 -0
  169. data/entry_types/scrolled/package/frontend/Wavesurfer-0adf5667.js +375 -0
  170. data/entry_types/scrolled/package/frontend/components-6a6793ca.js +2534 -0
  171. data/entry_types/scrolled/package/frontend/getPrototypeOf-63c7c8e8.js +86 -0
  172. data/entry_types/scrolled/package/frontend/i18n-4dc6c377.js +1092 -0
  173. data/entry_types/scrolled/package/frontend/index.css +9 -0
  174. data/entry_types/scrolled/package/frontend/index.js +5686 -0
  175. data/entry_types/scrolled/package/frontend/useBrowserFeature-91a4c29d.js +33 -0
  176. data/entry_types/scrolled/package/package.json +30 -9
  177. data/entry_types/scrolled/spec/fixtures/audio.m4a +0 -0
  178. data/entry_types/scrolled/spec/fixtures/video.mp4 +0 -0
  179. data/lib/generators/pageflow/initializer/templates/pageflow.rb +14 -9
  180. data/lib/pageflow/ability_mixin.rb +14 -2
  181. data/lib/pageflow/configuration.rb +6 -5
  182. data/lib/pageflow/entry_export_import/revision_serialization.rb +15 -13
  183. data/lib/pageflow/entry_export_import/revision_serialization/import.rb +18 -26
  184. data/lib/pageflow/entry_type_configuration.rb +2 -0
  185. data/lib/pageflow/global_config_api.rb +5 -4
  186. data/lib/pageflow/nested_revision_component.rb +49 -0
  187. data/lib/pageflow/react.rb +4 -2
  188. data/lib/pageflow/revision_component.rb +6 -2
  189. data/lib/pageflow/themes.rb +4 -0
  190. data/lib/pageflow/user_mixin.rb +2 -1
  191. data/lib/pageflow/version.rb +1 -1
  192. data/{packages/pageflow → package}/config/jest/index.js +8 -2
  193. data/{packages/pageflow → package}/config/jest/transformers/jst.js +0 -0
  194. data/{packages/pageflow → package}/config/jest/transformers/upwardBabel.js +0 -0
  195. data/{packages/pageflow → package}/config/webpack.js +7 -0
  196. data/{packages/pageflow → package}/editor.js +482 -1130
  197. data/package/frontend.js +2553 -0
  198. data/{packages/pageflow → package}/package.json +3 -0
  199. data/{packages/pageflow → package}/testHelpers.js +114 -13
  200. data/{packages/pageflow → package}/ui.js +178 -55
  201. data/spec/factories/accounts.rb +3 -1
  202. data/spec/factories/entry_templates.rb +1 -0
  203. data/spec/factories/published_entries.rb +6 -1
  204. data/spec/factories/test_revision_components.rb +4 -0
  205. metadata +95 -36
  206. data/app/assets/javascripts/pageflow/dist/frontend.js +0 -5800
  207. data/app/assets/javascripts/pageflow/videojs.js +0 -6
  208. data/config/initializers/entry_types.rb +0 -4
  209. data/entry_types/scrolled/config/locales/new/de.yml +0 -269
  210. data/entry_types/scrolled/config/locales/new/en.yml +0 -264
  211. data/entry_types/scrolled/lib/tasks/pageflow_scrolled_tasks.rake +0 -96
  212. data/entry_types/scrolled/package/frontend.js +0 -2879
  213. data/packages/pageflow/config/jest/transformers/cssModules.js +0 -1
@@ -0,0 +1,387 @@
1
+ import 'pageflow/frontend';
2
+ import React, { useMemo, useEffect, useRef, useState } from 'react';
3
+ import ReactDOM from 'react-dom';
4
+ import { b as _objectWithoutProperties, u as useI18n, _ as _slicedToArray, a as _defineProperty } from './i18n-4dc6c377.js';
5
+ import classNames from 'classnames';
6
+ import 'use-context-selector';
7
+ import 'reselect';
8
+ import 'i18n-js';
9
+ import 'slugify';
10
+ import { u as useBrowserFeature } from './useBrowserFeature-91a4c29d.js';
11
+ import { PanoViewer } from '@egjs/view360';
12
+ import screenfull from 'screenfull';
13
+
14
+ function _extends() {
15
+ _extends = Object.assign || function (target) {
16
+ for (var i = 1; i < arguments.length; i++) {
17
+ var source = arguments[i];
18
+
19
+ for (var key in source) {
20
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
21
+ target[key] = source[key];
22
+ }
23
+ }
24
+ }
25
+
26
+ return target;
27
+ };
28
+
29
+ return _extends.apply(this, arguments);
30
+ }
31
+ var EnterFullscreenIcon = (function (_ref) {
32
+ var _ref$styles = _ref.styles,
33
+ styles = _ref$styles === void 0 ? {} : _ref$styles,
34
+ props = _objectWithoutProperties(_ref, ["styles"]);
35
+
36
+ return React.createElement("svg", _extends({
37
+ "aria-hidden": "true",
38
+ "data-prefix": "fas",
39
+ "data-icon": "expand",
40
+ className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-expand"] || "fa-expand") + " " + (styles["fa-w-14"] || "fa-w-14"),
41
+ xmlns: "http://www.w3.org/2000/svg",
42
+ viewBox: "0 0 448 512"
43
+ }, props), React.createElement("path", {
44
+ fill: "currentColor",
45
+ d: "M0 180V56c0-13.3 10.7-24 24-24h124c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H64v84c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12zM288 44v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V56c0-13.3-10.7-24-24-24H300c-6.6 0-12 5.4-12 12zm148 276h-40c-6.6 0-12 5.4-12 12v84h-84c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24V332c0-6.6-5.4-12-12-12zM160 468v-40c0-6.6-5.4-12-12-12H64v-84c0-6.6-5.4-12-12-12H12c-6.6 0-12 5.4-12 12v124c0 13.3 10.7 24 24 24h124c6.6 0 12-5.4 12-12z"
46
+ }));
47
+ });
48
+
49
+ function _extends$1() {
50
+ _extends$1 = Object.assign || function (target) {
51
+ for (var i = 1; i < arguments.length; i++) {
52
+ var source = arguments[i];
53
+
54
+ for (var key in source) {
55
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
56
+ target[key] = source[key];
57
+ }
58
+ }
59
+ }
60
+
61
+ return target;
62
+ };
63
+
64
+ return _extends$1.apply(this, arguments);
65
+ }
66
+ var ExitFullscreenIcon = (function (_ref) {
67
+ var _ref$styles = _ref.styles,
68
+ styles = _ref$styles === void 0 ? {} : _ref$styles,
69
+ props = _objectWithoutProperties(_ref, ["styles"]);
70
+
71
+ return React.createElement("svg", _extends$1({
72
+ "aria-hidden": "true",
73
+ "data-prefix": "fas",
74
+ "data-icon": "compress",
75
+ className: (styles["svg-inline--fa"] || "svg-inline--fa") + " " + (styles["fa-compress"] || "fa-compress") + " " + (styles["fa-w-14"] || "fa-w-14"),
76
+ xmlns: "http://www.w3.org/2000/svg",
77
+ viewBox: "0 0 448 512"
78
+ }, props), React.createElement("path", {
79
+ fill: "currentColor",
80
+ d: "M436 192H312c-13.3 0-24-10.7-24-24V44c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v84h84c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm-276-24V44c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v84H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24zm0 300V344c0-13.3-10.7-24-24-24H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-84h84c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H312c-13.3 0-24 10.7-24 24v124c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z"
81
+ }));
82
+ });
83
+
84
+ var styles = {"button":"ToggleFullscreenButton-module_button__3iBr8 utils-module_unstyledButton__3rgne"};
85
+
86
+ function ToggleFullscreenButton(props) {
87
+ var _useI18n = useI18n(),
88
+ t = _useI18n.t;
89
+
90
+ return (
91
+ /*#__PURE__*/
92
+ React.createElement("button", {
93
+ className: styles.button,
94
+ title: t(props.isFullscreen ? 'exit_fullscreen' : 'enter_fullscreen', {
95
+ scope: 'pageflow_scrolled.public'
96
+ }),
97
+ onClick: function onClick() {
98
+ return props.isFullscreen ? props.onExit() : props.onEnter();
99
+ }
100
+ }, icon(props))
101
+ );
102
+ }
103
+
104
+ function icon(props) {
105
+ if (props.isFullscreen) {
106
+ return (
107
+ /*#__PURE__*/
108
+ React.createElement(ExitFullscreenIcon, null)
109
+ );
110
+ } else {
111
+ return (
112
+ /*#__PURE__*/
113
+ React.createElement(EnterFullscreenIcon, null)
114
+ );
115
+ }
116
+ }
117
+
118
+ var styles$1 = {"wrapper":"Fullscreen-module_wrapper__300hJ"};
119
+
120
+ function Fullscreen(_ref) {
121
+ var isFullscreen = _ref.isFullscreen,
122
+ children = _ref.children;
123
+ var root = useMemo(function () {
124
+ return document.getElementById('fullscreenRoot');
125
+ }, []);
126
+ useEffect(function () {
127
+ if (isFullscreen) {
128
+ document.body.style.overflow = 'hidden';
129
+ } else {
130
+ document.body.style.overflow = 'initial';
131
+ }
132
+ }, [isFullscreen]);
133
+
134
+ if (isFullscreen) {
135
+ return ReactDOM.createPortal(
136
+ /*#__PURE__*/
137
+ React.createElement("div", {
138
+ className: styles$1.wrapper
139
+ }, children), root);
140
+ } else {
141
+ return children;
142
+ }
143
+ }
144
+
145
+ var styles$2 = {"full":"Viewer-module_full__1q18y","container":"Viewer-module_container__3eJ34 Viewer-module_full__1q18y","controls":"Viewer-module_controls__3BTof","spinner":"Viewer-module_spinner__2oRve","spin":"Viewer-module_spin__3jBR2","isLoading":"Viewer-module_isLoading__sQuGw"};
146
+
147
+ function _extends$2() {
148
+ _extends$2 = Object.assign || function (target) {
149
+ for (var i = 1; i < arguments.length; i++) {
150
+ var source = arguments[i];
151
+
152
+ for (var key in source) {
153
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
154
+ target[key] = source[key];
155
+ }
156
+ }
157
+ }
158
+
159
+ return target;
160
+ };
161
+
162
+ return _extends$2.apply(this, arguments);
163
+ }
164
+ var SpinnerIcon = (function (_ref) {
165
+ var _ref$styles = _ref.styles,
166
+ props = _objectWithoutProperties(_ref, ["styles"]);
167
+
168
+ return React.createElement("svg", _extends$2({
169
+ xmlns: "http://www.w3.org/2000/svg",
170
+ fill: "none",
171
+ viewBox: "0 0 24 24"
172
+ }, props), React.createElement("circle", {
173
+ cx: "12",
174
+ cy: "12",
175
+ r: "10",
176
+ stroke: "currentColor",
177
+ strokeWidth: "4",
178
+ opacity: ".23"
179
+ }), React.createElement("path", {
180
+ fill: "currentColor",
181
+ d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",
182
+ opacity: ".75"
183
+ }));
184
+ });
185
+
186
+ function Viewer(_ref) {
187
+ var imageFile = _ref.imageFile,
188
+ viewerRef = _ref.viewerRef,
189
+ initialYaw = _ref.initialYaw,
190
+ initialPitch = _ref.initialPitch;
191
+ var elRef = useRef();
192
+ var initialYawRef = useRef(initialYaw);
193
+ var initialPitchRef = useRef(initialPitch);
194
+ var touchSupport = useBrowserFeature('touch support');
195
+
196
+ var _useState = useState(true),
197
+ _useState2 = _slicedToArray(_useState, 2),
198
+ isLoading = _useState2[0],
199
+ setIsLoading = _useState2[1];
200
+
201
+ var _useState3 = useState(false),
202
+ _useState4 = _slicedToArray(_useState3, 2),
203
+ isFullscreen = _useState4[0],
204
+ setIsFullscreen = _useState4[1]; // When toggling to fullscreen mode, this component renders to a
205
+ // portal div in the body of the document. We do not want to recreate
206
+ // the PanoViewer instead to keep its current state (pitch, yaw etc.).
207
+ // We therefore initialize the PanoViewer on a detached DOM element
208
+ // and render a component called DOMNodeContainer which appends the
209
+ // element on each render. React.memo causes the DOMNodeContainer to
210
+ // render only when either
211
+ // - the parent Viewer component is mounted
212
+ // - Fullscreen component switches between using the portal or not
213
+
214
+
215
+ function appendViewerTo(parentNode) {
216
+ if (!elRef.current) {
217
+ elRef.current = document.createElement('div');
218
+ elRef.current.className = styles$2.full;
219
+ viewerRef.current = new PanoViewer(elRef.current, {
220
+ image: imageFile.urls.ultra,
221
+ projectionType: imageFile.configuration.projection === 'equirectangular_stereo' ? PanoViewer.PROJECTION_TYPE.STEREOSCOPIC_EQUI : PanoViewer.PROJECTION_TYPE.EQUIRECTANGULAR,
222
+ touchDirection: touchSupport ? PanoViewer.TOUCH_DIRECTION.YAW : PanoViewer.TOUCH_DIRECTION.ALL,
223
+ useZoom: false,
224
+ yaw: initialYawRef.current,
225
+ pitch: initialPitchRef.current
226
+ });
227
+ viewerRef.current.on(PanoViewer.EVENTS.READY, function () {
228
+ viewerRef.current.updateViewportDimensions();
229
+ setIsLoading(false);
230
+ });
231
+ }
232
+
233
+ parentNode.appendChild(elRef.current);
234
+ viewerRef.current.updateViewportDimensions();
235
+ }
236
+
237
+ useEffect(function () {
238
+ return function () {
239
+ if (elRef.current) {
240
+ viewerRef.current.destroy();
241
+ viewerRef.current = null;
242
+ elRef.current = null;
243
+ }
244
+ };
245
+ }, [viewerRef]);
246
+ useEffect(function () {
247
+ if (initialYawRef.current !== initialYaw) {
248
+ initialYawRef.current = initialYaw;
249
+ viewerRef.current.lookAt({
250
+ yaw: initialYaw
251
+ }, 200);
252
+ }
253
+ }, [initialYaw, viewerRef]);
254
+ useEffect(function () {
255
+ if (initialPitchRef.current !== initialPitch) {
256
+ initialPitchRef.current = initialPitch;
257
+ viewerRef.current.lookAt({
258
+ pitch: initialPitch
259
+ }, 200);
260
+ }
261
+ }, [initialPitch, viewerRef]);
262
+ useEffect(function () {
263
+ function onChange() {
264
+ if (!screenfull.isFullscreen) {
265
+ setIsFullscreen(false);
266
+ }
267
+ }
268
+
269
+ if (screenfull.isEnabled) {
270
+ screenfull.on('change', onChange);
271
+ return function () {
272
+ return screenfull.off('change', onChange);
273
+ };
274
+ }
275
+ }, []);
276
+ useEffect(function () {
277
+ function onChange() {
278
+ viewerRef.current.updateViewportDimensions();
279
+ }
280
+
281
+ window.addEventListener('resize', onChange);
282
+ return function () {
283
+ return window.removeEventListener('resize', onChange);
284
+ };
285
+ }, [viewerRef]);
286
+ useEffect(function () {
287
+ if (isFullscreen) {
288
+ viewerRef.current.setTouchDirection(PanoViewer.TOUCH_DIRECTION.ALL);
289
+ viewerRef.current.setGyroMode(PanoViewer.GYRO_MODE.YAWPITCH);
290
+ viewerRef.current.setUseZoom(true);
291
+ } else {
292
+ if (touchSupport) {
293
+ viewerRef.current.setTouchDirection(PanoViewer.TOUCH_DIRECTION.YAW);
294
+ viewerRef.current.lookAt({
295
+ pitch: 0,
296
+ fov: 65
297
+ });
298
+ } else {
299
+ viewerRef.current.lookAt({
300
+ fov: 65
301
+ });
302
+ }
303
+
304
+ viewerRef.current.setGyroMode(PanoViewer.GYRO_MODE.NONE);
305
+ viewerRef.current.setUseZoom(false);
306
+ }
307
+ }, [isFullscreen, viewerRef, touchSupport]);
308
+
309
+ function preventDefaultForArrowUpDown(event) {
310
+ if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
311
+ event.preventDefault();
312
+ }
313
+ }
314
+
315
+ function enterFullscreen() {
316
+ if (screenfull.isEnabled) {
317
+ screenfull.request();
318
+ }
319
+
320
+ setIsFullscreen(true);
321
+ viewerRef.current.enableSensor();
322
+ }
323
+
324
+ function exitFullscreen() {
325
+ if (screenfull.isEnabled) {
326
+ screenfull.exit();
327
+ }
328
+
329
+ setIsFullscreen(false);
330
+ }
331
+
332
+ return (
333
+ /*#__PURE__*/
334
+ React.createElement(Fullscreen, {
335
+ isFullscreen: isFullscreen
336
+ },
337
+ /*#__PURE__*/
338
+ React.createElement("div", {
339
+ className: styles$2.container,
340
+ onKeyDown: preventDefaultForArrowUpDown
341
+ },
342
+ /*#__PURE__*/
343
+ React.createElement(DOMNodeContainer, {
344
+ className: styles$2.full,
345
+ onUpdate: function onUpdate(el) {
346
+ return appendViewerTo(el);
347
+ }
348
+ })),
349
+ /*#__PURE__*/
350
+ React.createElement(SpinnerIcon, {
351
+ className: classNames(styles$2.spinner, _defineProperty({}, styles$2.isLoading, isLoading))
352
+ }),
353
+ /*#__PURE__*/
354
+ React.createElement("div", {
355
+ className: styles$2.controls
356
+ },
357
+ /*#__PURE__*/
358
+ React.createElement(ToggleFullscreenButton, {
359
+ isFullscreen: isFullscreen,
360
+ onEnter: enterFullscreen,
361
+ onExit: exitFullscreen
362
+ })))
363
+ );
364
+ }
365
+ var DOMNodeContainer = React.memo(function (_ref2) {
366
+ var className = _ref2.className,
367
+ onUpdate = _ref2.onUpdate;
368
+ var ref = useRef();
369
+ useEffect(function () {
370
+ var current = ref.current;
371
+ onUpdate(current);
372
+ return function () {
373
+ current.removeChild(current.firstChild);
374
+ };
375
+ });
376
+ return (
377
+ /*#__PURE__*/
378
+ React.createElement("div", {
379
+ ref: ref,
380
+ className: className
381
+ })
382
+ );
383
+ }, function () {
384
+ return true;
385
+ });
386
+
387
+ export default Viewer;
@@ -0,0 +1,375 @@
1
+ import React, { Component } from 'react';
2
+ import Measure from 'react-measure';
3
+ import { b as _inherits, a as _classCallCheck, e as _assertThisInitialized, _ as _createClass, c as _getPrototypeOf, d as _possibleConstructorReturn } from './getPrototypeOf-63c7c8e8.js';
4
+ import assign from 'deep-assign';
5
+ import WaveSurfer from 'wavesurfer.js';
6
+
7
+ function _createSuper(Derived) {
8
+ function isNativeReflectConstruct() {
9
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
10
+ if (Reflect.construct.sham) return false;
11
+ if (typeof Proxy === "function") return true;
12
+
13
+ try {
14
+ Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));
15
+ return true;
16
+ } catch (e) {
17
+ return false;
18
+ }
19
+ }
20
+
21
+ return function () {
22
+ var Super = _getPrototypeOf(Derived),
23
+ result;
24
+
25
+ if (isNativeReflectConstruct()) {
26
+ var NewTarget = _getPrototypeOf(this).constructor;
27
+
28
+ result = Reflect.construct(Super, arguments, NewTarget);
29
+ } else {
30
+ result = Super.apply(this, arguments);
31
+ }
32
+
33
+ return _possibleConstructorReturn(this, result);
34
+ };
35
+ }
36
+ var EVENTS = ['audioprocess', 'error', 'finish', 'loading', 'mouseup', 'pause', 'play', 'ready', 'scroll', 'seek', 'zoom'];
37
+
38
+ function capitaliseFirstLetter(string) {
39
+ return string.split('-').map(function (part) {
40
+ return part.charAt(0).toUpperCase() + part.slice(1);
41
+ }).join('');
42
+ }
43
+
44
+ var Wavesurfer =
45
+ /*#__PURE__*/
46
+ function (_Component) {
47
+ _inherits(Wavesurfer, _Component);
48
+
49
+ var _super = _createSuper(Wavesurfer);
50
+
51
+ function Wavesurfer(props) {
52
+ var _this;
53
+
54
+ _classCallCheck(this, Wavesurfer);
55
+
56
+ _this = _super.call(this, props);
57
+ _this.state = {
58
+ isReady: false
59
+ };
60
+
61
+ if (typeof WaveSurfer === undefined) {
62
+ throw new Error('WaveSurfer is undefined!');
63
+ }
64
+
65
+ _this._wavesurfer = Object.create(WaveSurfer);
66
+ _this._loadMediaElt = _this._loadMediaElt.bind(_assertThisInitialized(_this));
67
+ _this._loadAudio = _this._loadAudio.bind(_assertThisInitialized(_this));
68
+ _this._seekTo = _this._seekTo.bind(_assertThisInitialized(_this));
69
+
70
+ _this._handleResize = function () {
71
+ if (_this.state.isReady) {
72
+ _this._wavesurfer.refresh();
73
+ }
74
+ };
75
+
76
+ return _this;
77
+ }
78
+
79
+ _createClass(Wavesurfer, [{
80
+ key: "componentDidMount",
81
+ value: function componentDidMount() {
82
+ var _this2 = this;
83
+
84
+ var options = assign({}, this.props.options, {
85
+ container: this.wavesurferEl
86
+ }); // media element loading is only supported by MediaElement backend
87
+
88
+ if (this.props.mediaElt) {
89
+ options.backend = 'MediaElement';
90
+ }
91
+
92
+ this._wavesurfer.init(options); // file was loaded, wave was drawn
93
+
94
+
95
+ this._wavesurfer.on('ready', function () {
96
+ _this2.setState({
97
+ isReady: true,
98
+ pos: _this2.props.pos
99
+ }); // set initial position
100
+
101
+
102
+ if (_this2.props.pos) {
103
+ _this2._seekTo(_this2.props.pos);
104
+ } // set initial volume
105
+
106
+
107
+ if (_this2.props.volume != null) {
108
+ _this2._wavesurfer.setVolume(_this2.props.volume);
109
+ } // set initial playing state
110
+
111
+
112
+ if (_this2.props.playing) {
113
+ _this2.wavesurfer.play();
114
+ } // set initial zoom
115
+
116
+
117
+ if (_this2.props.zoom) {
118
+ _this2._wavesurfer.zoom(_this2.props.zoom);
119
+ }
120
+ });
121
+
122
+ this._wavesurfer.on('audioprocess', function (pos) {
123
+ _this2.setState({
124
+ pos: pos
125
+ });
126
+
127
+ _this2.props.onPosChange({
128
+ wavesurfer: _this2._wavesurfer,
129
+ originalArgs: [pos]
130
+ });
131
+ }); // `audioprocess` is not fired when seeking, so we have to plug into the
132
+ // `seek` event and calculate the equivalent in seconds (seek event
133
+ // receives a position float 0-1) – See the README.md for explanation why we
134
+ // need this
135
+
136
+
137
+ this._wavesurfer.on('seek', function (pos) {
138
+ var formattedPos = _this2._posToSec(pos);
139
+
140
+ _this2.setState({
141
+ formattedPos: formattedPos
142
+ });
143
+
144
+ _this2.props.onPosChange({
145
+ wavesurfer: _this2._wavesurfer,
146
+ originalArgs: [formattedPos]
147
+ });
148
+ }); // hook up events to callback handlers passed in as props
149
+
150
+
151
+ EVENTS.forEach(function (e) {
152
+ var propCallback = _this2.props["on".concat(capitaliseFirstLetter(e))];
153
+
154
+ var wavesurfer = _this2._wavesurfer;
155
+
156
+ if (propCallback) {
157
+ _this2._wavesurfer.on(e, function () {
158
+ for (var _len = arguments.length, originalArgs = new Array(_len), _key = 0; _key < _len; _key++) {
159
+ originalArgs[_key] = arguments[_key];
160
+ }
161
+
162
+ propCallback({
163
+ wavesurfer: wavesurfer,
164
+ originalArgs: originalArgs
165
+ });
166
+ });
167
+ }
168
+ }); // if audioFile prop, load file
169
+
170
+ if (this.props.audioFile) {
171
+ this._loadAudio(this.props.audioFile, this.props.audioPeaks);
172
+ } // if mediaElt prop, load media Element
173
+
174
+
175
+ if (this.props.mediaElt) {
176
+ this._loadMediaElt(this.props.mediaElt, this.props.audioPeaks);
177
+ }
178
+ } // update wavesurfer rendering manually
179
+
180
+ }, {
181
+ key: "componentDidUpdate",
182
+ value: function componentDidUpdate(prevProps) {
183
+ // update audioFile
184
+ if (this.props.audioFile !== this.props.audioFile) {
185
+ this._loadAudio(this.props.audioFile, this.props.audioPeaks);
186
+ } // update mediaElt
187
+
188
+
189
+ if (prevProps.mediaElt !== this.props.mediaElt) {
190
+ this._loadMediaElt(this.props.mediaElt, this.props.audioPeaks);
191
+ } // update peaks
192
+
193
+
194
+ if (prevProps.audioPeaks !== this.props.audioPeaks) {
195
+ if (this.props.mediaElt) {
196
+ this._loadMediaElt(prevProps.mediaElt, this.props.audioPeaks);
197
+ } else {
198
+ this._loadAudio(this.props.audioFile, this.props.audioPeaks);
199
+ }
200
+ } // update position
201
+
202
+
203
+ if (this.props.pos && this.state.isReady && prevProps.pos !== this.props.pos && this.props.pos !== this.state.pos) {
204
+ this._seekTo(this.props.pos);
205
+ } // update playing state
206
+
207
+
208
+ if (this.props.playing !== prevProps.playing) {
209
+ if (this.props.playing) {
210
+ this._wavesurfer.play();
211
+ } else {
212
+ this._wavesurfer.pause();
213
+ }
214
+ } // update volume
215
+
216
+
217
+ if (this.props.volume !== prevProps.volume) {
218
+ this._wavesurfer.setVolume(this.props.volume);
219
+ } // update volume
220
+
221
+
222
+ if (this.props.zoom !== prevProps.zoom) {
223
+ this._wavesurfer.zoom(this.props.zoom);
224
+ } // update audioRate
225
+
226
+
227
+ if (this.props.options.audioRate !== prevProps.options.audioRate) {
228
+ this._wavesurfer.setPlaybackRate(this.props.options.audioRate);
229
+ }
230
+
231
+ if (prevProps.options.waveColor !== this.props.options.waveColor) {
232
+ this._wavesurfer.setWaveColor(this.props.options.waveColor);
233
+ }
234
+
235
+ if (prevProps.options.progressColor !== this.props.options.progressColor) {
236
+ this._wavesurfer.setProgressColor(this.props.options.progressColor);
237
+ }
238
+
239
+ if (prevProps.options.cursorColor !== this.props.options.cursorColor) {
240
+ this._wavesurfer.setCursorColor(this.props.options.cursorColor);
241
+ }
242
+
243
+ if (prevProps.options.height !== this.props.options.height) {
244
+ this._wavesurfer.setHeight(this.props.options.height);
245
+ }
246
+ }
247
+ }, {
248
+ key: "componentWillUnmount",
249
+ value: function componentWillUnmount() {
250
+ var _this3 = this;
251
+
252
+ // remove listeners
253
+ EVENTS.forEach(function (e) {
254
+ _this3._wavesurfer.un(e);
255
+ }); // destroy wavesurfer instance
256
+
257
+ this._wavesurfer.destroy();
258
+ } // receives seconds and transforms this to the position as a float 0-1
259
+
260
+ }, {
261
+ key: "_secToPos",
262
+ value: function _secToPos(sec) {
263
+ return 1 / this._wavesurfer.getDuration() * sec;
264
+ } // receives position as a float 0-1 and transforms this to seconds
265
+
266
+ }, {
267
+ key: "_posToSec",
268
+ value: function _posToSec(pos) {
269
+ return pos * this._wavesurfer.getDuration();
270
+ } // pos is in seconds, the 0-1 proportional position we calculate here …
271
+
272
+ }, {
273
+ key: "_seekTo",
274
+ value: function _seekTo(sec) {
275
+ var pos = this._secToPos(sec);
276
+
277
+ if (this.props.options.autoCenter) {
278
+ this._wavesurfer.seekAndCenter(pos);
279
+ } else {
280
+ this._wavesurfer.seekTo(pos);
281
+ }
282
+ } // load a media element selector or HTML element
283
+ // if selector, get the HTML element for it
284
+ // and pass to _loadAudio
285
+
286
+ }, {
287
+ key: "_loadMediaElt",
288
+ value: function _loadMediaElt(selectorOrElt, audioPeaks) {
289
+ if (selectorOrElt instanceof global.HTMLElement) {
290
+ this._loadAudio(selectorOrElt, audioPeaks);
291
+ } else {
292
+ // Ignore if media element cannot be found. There are edge cases
293
+ // where React already unmounted the corresponding media element,
294
+ // but the parent Waveform component still holds the old media
295
+ // element id.
296
+ if (global.document.querySelector(selectorOrElt)) {
297
+ this._loadAudio(global.document.querySelector(selectorOrElt), audioPeaks);
298
+ }
299
+ }
300
+ } // pass audio data to wavesurfer
301
+
302
+ }, {
303
+ key: "_loadAudio",
304
+ value: function _loadAudio(audioFileOrElt, audioPeaks) {
305
+ if (audioFileOrElt instanceof global.HTMLElement) {
306
+ // media element
307
+ this._wavesurfer.loadMediaElement(audioFileOrElt, audioPeaks);
308
+ } else if (typeof audioFileOrElt === 'string') {
309
+ // bog-standard string is handled by load method and ajax call
310
+ this._wavesurfer.load(audioFileOrElt, audioPeaks);
311
+ } else if (audioFileOrElt instanceof global.Blob || audioFileOrElt instanceof global.File) {
312
+ // blob or file is loaded with loadBlob method
313
+ this._wavesurfer.loadBlob(audioFileOrElt, audioPeaks);
314
+ } else {
315
+ throw new Error("Wavesurfer._loadAudio expects prop audioFile\n to be either HTMLElement, string or file/blob");
316
+ }
317
+ }
318
+ }, {
319
+ key: "_measureIfResponsive",
320
+ value: function _measureIfResponsive(children) {
321
+ if (this.props.responsive) {
322
+ return (
323
+ /*#__PURE__*/
324
+ React.createElement(Measure, {
325
+ client: true,
326
+ onResize: this._handleResize
327
+ }, function (_ref) {
328
+ var measureRef = _ref.measureRef;
329
+ return (
330
+ /*#__PURE__*/
331
+ React.createElement("div", {
332
+ ref: measureRef
333
+ }, children)
334
+ );
335
+ })
336
+ );
337
+ }
338
+
339
+ return children;
340
+ }
341
+ }, {
342
+ key: "render",
343
+ value: function render() {
344
+ var _this4 = this;
345
+
346
+ var childrenWithProps = this.props.children ? React.Children.map(this.props.children, function (child) {
347
+ return React.cloneElement(child, {
348
+ wavesurfer: _this4._wavesurfer,
349
+ isReady: _this4.state.isReady
350
+ });
351
+ }) : false;
352
+ return this._measureIfResponsive(
353
+ /*#__PURE__*/
354
+ React.createElement("div", null,
355
+ /*#__PURE__*/
356
+ React.createElement("div", {
357
+ ref: function ref(c) {
358
+ _this4.wavesurferEl = c;
359
+ }
360
+ }), childrenWithProps));
361
+ }
362
+ }]);
363
+
364
+ return Wavesurfer;
365
+ }(Component);
366
+
367
+ Wavesurfer.defaultProps = {
368
+ playing: false,
369
+ pos: 0,
370
+ options: WaveSurfer.defaultParams,
371
+ responsive: true,
372
+ onPosChange: function onPosChange() {}
373
+ };
374
+
375
+ export default Wavesurfer;