@panneau/core 1.0.1-alpha.0 → 1.0.3-alpha.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 (80) hide show
  1. package/contexts.js +1 -1
  2. package/es/contexts.js +1740 -0
  3. package/es/hooks.js +1116 -0
  4. package/es/index.js +991 -9
  5. package/es/utils.js +329 -1
  6. package/hooks.js +1 -0
  7. package/lib/contexts.js +1871 -0
  8. package/lib/hooks.js +1167 -0
  9. package/lib/index.js +1003 -44
  10. package/lib/utils.js +371 -12
  11. package/package.json +79 -49
  12. package/utils.js +1 -1
  13. package/components.js +0 -1
  14. package/es/components/Button.js +0 -157
  15. package/es/components/ButtonGroup.js +0 -87
  16. package/es/components/Errors.js +0 -33
  17. package/es/components/Label.js +0 -32
  18. package/es/components/Loading.js +0 -56
  19. package/es/components/index.js +0 -6
  20. package/es/contexts/Components.js +0 -52
  21. package/es/contexts/Definition.js +0 -21
  22. package/es/contexts/UrlGenerator.js +0 -33
  23. package/es/contexts/index.js +0 -3
  24. package/es/lib/ComponentsCollection.js +0 -107
  25. package/es/lib/Definition.js +0 -134
  26. package/es/lib/PropTypes.js +0 -75
  27. package/es/lib/Resource.js +0 -93
  28. package/es/lib/ResourceApi.js +0 -139
  29. package/es/lib/UrlGenerator.js +0 -66
  30. package/es/lib/requests.js +0 -165
  31. package/es/lib/useResourceApi.js +0 -19
  32. package/es/lib/utils.js +0 -19
  33. package/es/requests.js +0 -1
  34. package/lib/components/Button.js +0 -182
  35. package/lib/components/ButtonGroup.js +0 -104
  36. package/lib/components/Errors.js +0 -49
  37. package/lib/components/Label.js +0 -47
  38. package/lib/components/Loading.js +0 -70
  39. package/lib/components/index.js +0 -47
  40. package/lib/contexts/Components.js +0 -78
  41. package/lib/contexts/Definition.js +0 -45
  42. package/lib/contexts/UrlGenerator.js +0 -53
  43. package/lib/contexts/index.js +0 -73
  44. package/lib/lib/ComponentsCollection.js +0 -117
  45. package/lib/lib/Definition.js +0 -145
  46. package/lib/lib/PropTypes.js +0 -152
  47. package/lib/lib/Resource.js +0 -104
  48. package/lib/lib/ResourceApi.js +0 -154
  49. package/lib/lib/UrlGenerator.js +0 -76
  50. package/lib/lib/requests.js +0 -206
  51. package/lib/lib/useResourceApi.js +0 -33
  52. package/lib/lib/utils.js +0 -35
  53. package/lib/requests.js +0 -17
  54. package/requests.js +0 -1
  55. package/src/components/Button.jsx +0 -186
  56. package/src/components/ButtonGroup.jsx +0 -98
  57. package/src/components/Errors.jsx +0 -46
  58. package/src/components/Label.jsx +0 -32
  59. package/src/components/Loading.jsx +0 -51
  60. package/src/components/index.js +0 -7
  61. package/src/contexts/Components.jsx +0 -49
  62. package/src/contexts/Definition.jsx +0 -21
  63. package/src/contexts/UrlGenerator.jsx +0 -35
  64. package/src/contexts/index.js +0 -12
  65. package/src/index.js +0 -8
  66. package/src/lib/ComponentsCollection.js +0 -81
  67. package/src/lib/Definition.js +0 -87
  68. package/src/lib/PropTypes.js +0 -117
  69. package/src/lib/Resource.js +0 -65
  70. package/src/lib/ResourceApi.js +0 -114
  71. package/src/lib/UrlGenerator.js +0 -55
  72. package/src/lib/requests.js +0 -120
  73. package/src/lib/useResourceApi.jsx +0 -20
  74. package/src/lib/utils.js +0 -13
  75. package/src/requests.js +0 -1
  76. package/src/styles/components/button-group.scss +0 -10
  77. package/src/styles/components/errors.scss +0 -5
  78. package/src/styles/components/loading.scss +0 -36
  79. package/src/styles/variables.scss +0 -5
  80. package/src/utils.js +0 -1
package/lib/hooks.js ADDED
@@ -0,0 +1,1167 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var react = require('react');
6
+ var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
7
+ var reactIntl = require('react-intl');
8
+ var isString = require('lodash/isString');
9
+ var dayjs = require('dayjs');
10
+ var core = require('@panneau/core');
11
+ var utils = require('@panneau/core/utils');
12
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
13
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
14
+ var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
15
+ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
16
+ var fetch = require('@folklore/fetch');
17
+ var get = require('lodash/get');
18
+ var isArray = require('lodash/isArray');
19
+ var isObject = require('lodash/isObject');
20
+ var contexts = require('@panneau/core/contexts');
21
+ var cssMediaquery = require('css-mediaquery');
22
+
23
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
24
+
25
+ function _interopNamespace(e) {
26
+ if (e && e.__esModule) return e;
27
+ var n = Object.create(null);
28
+ if (e) {
29
+ Object.keys(e).forEach(function (k) {
30
+ if (k !== 'default') {
31
+ var d = Object.getOwnPropertyDescriptor(e, k);
32
+ Object.defineProperty(n, k, d.get ? d : {
33
+ enumerable: true,
34
+ get: function () { return e[k]; }
35
+ });
36
+ }
37
+ });
38
+ }
39
+ n["default"] = e;
40
+ return Object.freeze(n);
41
+ }
42
+
43
+ var _objectSpread__default = /*#__PURE__*/_interopDefaultLegacy(_objectSpread);
44
+ var isString__default = /*#__PURE__*/_interopDefaultLegacy(isString);
45
+ var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs);
46
+ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
47
+ var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
48
+ var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
49
+ var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
50
+ var get__default = /*#__PURE__*/_interopDefaultLegacy(get);
51
+ var isArray__default = /*#__PURE__*/_interopDefaultLegacy(isArray);
52
+ var isObject__default = /*#__PURE__*/_interopDefaultLegacy(isObject);
53
+
54
+ var useAnimationFrame = function useAnimationFrame(onFrame) {
55
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
56
+ _ref$disabled = _ref.disabled,
57
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled;
58
+
59
+ var requestRef = react.useRef(null);
60
+ var startTimeRef = react.useRef(null);
61
+
62
+ var callback = function callback(time) {
63
+ if (!startTimeRef.current) {
64
+ startTimeRef.current = time;
65
+ }
66
+
67
+ var progress = time - startTimeRef.current;
68
+ onFrame(progress);
69
+ requestRef.current = requestAnimationFrame(callback);
70
+ };
71
+
72
+ react.useEffect(function () {
73
+ if (!disabled) {
74
+ requestRef.current = requestAnimationFrame(callback);
75
+ }
76
+
77
+ return function () {
78
+ if (requestRef.current !== null) {
79
+ cancelAnimationFrame(requestRef.current);
80
+ }
81
+ };
82
+ }, [disabled]);
83
+ };
84
+
85
+ var useFormattedDate = function useFormattedDate() {
86
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
87
+ _ref$format = _ref.format,
88
+ format = _ref$format === void 0 ? null : _ref$format,
89
+ _ref$showToday = _ref.showToday,
90
+ showToday = _ref$showToday === void 0 ? true : _ref$showToday;
91
+
92
+ var intl = reactIntl.useIntl();
93
+ var today = dayjs__default["default"]();
94
+ return react.useCallback(function (date) {
95
+ var dateToFormat = isString__default["default"](date) ? dayjs__default["default"](date) : date;
96
+
97
+ if (showToday && dateToFormat.format('YYYY-MM-DD') === today.format('YYYY-MM-DD')) {
98
+ return intl.formatMessage({
99
+ "id": "v4Qtl9",
100
+ "defaultMessage": [{
101
+ "type": 0,
102
+ "value": "Today"
103
+ }]
104
+ });
105
+ }
106
+
107
+ return intl.formatDate(dayjs__default["default"](date).toDate(), _objectSpread__default["default"]({
108
+ year: 'numeric',
109
+ month: 'long',
110
+ day: '2-digit'
111
+ }, format));
112
+ }, [today, showToday, format]);
113
+ };
114
+ var useFormattedTime = function useFormattedTime() {
115
+ var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
116
+ _ref2$format = _ref2.format,
117
+ format = _ref2$format === void 0 ? null : _ref2$format,
118
+ _ref2$showNow = _ref2.showNow,
119
+ showNow = _ref2$showNow === void 0 ? true : _ref2$showNow,
120
+ _ref2$timeGap = _ref2.timeGap,
121
+ timeGap = _ref2$timeGap === void 0 ? 2 : _ref2$timeGap;
122
+
123
+ var intl = reactIntl.useIntl();
124
+ var now = dayjs__default["default"]();
125
+ return react.useCallback(function (date) {
126
+ var dateToFormat = isString__default["default"](date) ? dayjs__default["default"](date) : date;
127
+
128
+ if (showNow && dateToFormat.format('YYYY-MM-DD') === now.format('YYYY-MM-DD') && dateToFormat.hour() === now.hour() && dateToFormat.minute() > now.minute() - timeGap && dateToFormat.minute() < now.minute() + timeGap) {
129
+ return intl.formatMessage({
130
+ "id": "3na7F8",
131
+ "defaultMessage": [{
132
+ "type": 0,
133
+ "value": "Now"
134
+ }]
135
+ });
136
+ }
137
+
138
+ return intl.formatTime(dateToFormat.toDate(), _objectSpread__default["default"]({
139
+ hour: 'numeric',
140
+ minute: 'numeric'
141
+ }, format));
142
+ }, [now, showNow, timeGap, format]);
143
+ };
144
+
145
+ var eventsManager$1 = typeof document !== 'undefined' ? new core.EventsManager(document) : null;
146
+ var useDocumentEvent = utils.createUseEvent(eventsManager$1);
147
+
148
+ var _excluded$1 = ["value", "errors", "onChange"];
149
+
150
+ var getFieldsPropsFromFields = function getFieldsPropsFromFields(fields, _ref) {
151
+ var value = _ref.value,
152
+ errors = _ref.errors,
153
+ _onChange = _ref.onChange,
154
+ props = _objectWithoutProperties__default["default"](_ref, _excluded$1);
155
+
156
+ var locales = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
157
+ return fields.reduce(function (allFields, field) {
158
+ var _ref2 = isObject__default["default"](field) ? field : {},
159
+ _ref2$name = _ref2.name,
160
+ name = _ref2$name === void 0 ? isString__default["default"](field) ? field : null : _ref2$name,
161
+ _ref2$component = _ref2.component,
162
+ component = _ref2$component === void 0 ? null : _ref2$component;
163
+
164
+ var fieldErrors = errors !== null ? errors[name] || [] : [];
165
+ var localizedErrors = component === 'localized' ? (locales || []).reduce(function (previousErrors, locale) {
166
+ var items = errors !== null ? get__default["default"](errors, "".concat(name, ".").concat(locale), []) || [] : [];
167
+ var finalItems = isArray__default["default"](items) ? items : [items];
168
+ var finalPrevious = isArray__default["default"](previousErrors) ? previousErrors : [];
169
+ return [].concat(_toConsumableArray__default["default"](finalPrevious), _toConsumableArray__default["default"](finalItems));
170
+ }, fieldErrors) : fieldErrors;
171
+ return [].concat(_toConsumableArray__default["default"](allFields), [_objectSpread__default["default"](_objectSpread__default["default"]({}, isObject__default["default"](field) ? field : null), {}, {
172
+ name: name,
173
+ component: component,
174
+ value: value !== null ? value[name] || null : null,
175
+ errors: localizedErrors.length > 0 ? localizedErrors : null,
176
+ onChange: function onChange(fieldValue) {
177
+ return _onChange(name, fieldValue);
178
+ }
179
+ }, props)]);
180
+ }, []);
181
+ };
182
+
183
+ var useForm = function useForm() {
184
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
185
+ var _opts$fields = opts.fields,
186
+ fields = _opts$fields === void 0 ? [] : _opts$fields,
187
+ _opts$action = opts.action,
188
+ action = _opts$action === void 0 ? null : _opts$action,
189
+ _opts$postForm = opts.postForm,
190
+ postForm = _opts$postForm === void 0 ? null : _opts$postForm,
191
+ _opts$initialErrors = opts.initialErrors,
192
+ initialErrors = _opts$initialErrors === void 0 ? null : _opts$initialErrors,
193
+ _opts$errors = opts.errors,
194
+ providedErrors = _opts$errors === void 0 ? null : _opts$errors,
195
+ _opts$setErrors = opts.setErrors,
196
+ setProvidedErrors = _opts$setErrors === void 0 ? null : _opts$setErrors,
197
+ _opts$initialGeneralE = opts.initialGeneralError,
198
+ initialGeneralError = _opts$initialGeneralE === void 0 ? null : _opts$initialGeneralE,
199
+ _opts$generalError = opts.generalError,
200
+ providedGeneralError = _opts$generalError === void 0 ? null : _opts$generalError,
201
+ _opts$setGeneralError = opts.setGeneralError,
202
+ setProvidedGeneralError = _opts$setGeneralError === void 0 ? null : _opts$setGeneralError,
203
+ _opts$initialValue = opts.initialValue,
204
+ initialValue = _opts$initialValue === void 0 ? null : _opts$initialValue,
205
+ _opts$value = opts.value,
206
+ providedValue = _opts$value === void 0 ? null : _opts$value,
207
+ _opts$setValue = opts.setValue,
208
+ setProvidedValue = _opts$setValue === void 0 ? null : _opts$setValue,
209
+ _opts$onComplete = opts.onComplete,
210
+ onComplete = _opts$onComplete === void 0 ? null : _opts$onComplete,
211
+ _opts$locales = opts.locales,
212
+ locales = _opts$locales === void 0 ? [] : _opts$locales;
213
+
214
+ var _useState = react.useState(initialValue || providedValue),
215
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
216
+ stateValue = _useState2[0],
217
+ setStateValue = _useState2[1];
218
+
219
+ var _useState3 = react.useState(initialErrors || providedErrors),
220
+ _useState4 = _slicedToArray__default["default"](_useState3, 2),
221
+ stateErrors = _useState4[0],
222
+ setStateErrors = _useState4[1];
223
+
224
+ var _useState5 = react.useState(initialGeneralError || providedGeneralError),
225
+ _useState6 = _slicedToArray__default["default"](_useState5, 2),
226
+ stateGeneralError = _useState6[0],
227
+ setStateGeneralError = _useState6[1];
228
+
229
+ var _useState7 = react.useState({
230
+ success: false,
231
+ loading: false,
232
+ error: false
233
+ }),
234
+ _useState8 = _slicedToArray__default["default"](_useState7, 2),
235
+ requestState = _useState8[0],
236
+ setRequestState = _useState8[1];
237
+
238
+ var _useState9 = react.useState(null),
239
+ _useState10 = _slicedToArray__default["default"](_useState9, 2),
240
+ response = _useState10[0],
241
+ setResponse = _useState10[1];
242
+
243
+ var hasProvidedValue = setProvidedValue !== null;
244
+ var value = hasProvidedValue ? providedValue : stateValue;
245
+ var setValue = hasProvidedValue ? setProvidedValue : setStateValue;
246
+ var hasProvidedErrors = setProvidedErrors !== null;
247
+ var errors = hasProvidedErrors ? providedErrors : stateErrors;
248
+ var setErrors = hasProvidedErrors ? setProvidedErrors : setStateErrors;
249
+ var hasProvidedGeneralError = setProvidedGeneralError !== null;
250
+ var generalError = hasProvidedGeneralError ? providedGeneralError : stateGeneralError;
251
+ var setGeneralError = hasProvidedGeneralError ? setProvidedGeneralError : setStateGeneralError;
252
+ var fieldsKey = [value, errors, locales].concat(fields);
253
+ var onFieldChange = react.useCallback(function (fieldName, fieldValue) {
254
+ var fieldErrors = errors !== null ? errors[fieldName] || null : null;
255
+
256
+ if (fieldErrors !== null) {
257
+ setErrors(_objectSpread__default["default"](_objectSpread__default["default"]({}, errors), {}, _defineProperty__default["default"]({}, fieldName, null)));
258
+ }
259
+
260
+ setValue(_objectSpread__default["default"](_objectSpread__default["default"]({}, value), {}, _defineProperty__default["default"]({}, fieldName, fieldValue)));
261
+ }, fieldsKey);
262
+ var fieldsProps = react.useMemo(function () {
263
+ return getFieldsPropsFromFields(fields, {
264
+ value: value,
265
+ errors: errors,
266
+ onChange: onFieldChange
267
+ }, locales);
268
+ }, fieldsKey);
269
+ var csrfToken = react.useMemo(function () {
270
+ return fetch.getCsrfToken();
271
+ }, []);
272
+
273
+ var onSubmitError = function onSubmitError(error) {
274
+ setRequestState({
275
+ success: false,
276
+ loading: false,
277
+ error: true
278
+ });
279
+
280
+ if (error.name === 'ValidationError') {
281
+ var _error$getResponseDat = error.getResponseData(),
282
+ _error$getResponseDat2 = _error$getResponseDat.errors,
283
+ validationErrors = _error$getResponseDat2 === void 0 ? null : _error$getResponseDat2;
284
+
285
+ setErrors(validationErrors);
286
+ } else {
287
+ setGeneralError(error.message);
288
+ }
289
+ };
290
+
291
+ var onSubmitSuccess = function onSubmitSuccess(resp) {
292
+ setRequestState({
293
+ success: true,
294
+ loading: false,
295
+ error: false
296
+ });
297
+ setResponse(resp);
298
+
299
+ if (onComplete !== null) {
300
+ onComplete(resp);
301
+ }
302
+ };
303
+
304
+ var finalPostForm = react.useCallback(function (postAction, postData) {
305
+ return postForm !== null ? postForm(postAction, postData) : fetch.postJSON(postAction, postData, {
306
+ credentials: 'include',
307
+ headers: fetch.getCSRFHeaders()
308
+ });
309
+ }, [postForm, fetch.postJSON, fetch.getCSRFHeaders]);
310
+ var submit = react.useCallback(function () {
311
+ var submitValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : value;
312
+ setRequestState({
313
+ success: false,
314
+ loading: true,
315
+ error: false
316
+ });
317
+ setGeneralError(null);
318
+ setErrors(null);
319
+ finalPostForm(action, _objectSpread__default["default"](_objectSpread__default["default"]({}, submitValue), {}, {
320
+ _token: csrfToken
321
+ })).then(onSubmitSuccess)["catch"](onSubmitError);
322
+ }, [finalPostForm, action, value]);
323
+ var onSubmit = react.useCallback(function (e) {
324
+ e.preventDefault();
325
+ submit();
326
+ }, [submit]);
327
+ var status = null;
328
+
329
+ if (requestState.loading) {
330
+ status = 'loading';
331
+ } else if (requestState.success) {
332
+ status = 'success';
333
+ } else if (requestState.error) {
334
+ status = 'error';
335
+ }
336
+
337
+ return _objectSpread__default["default"](_objectSpread__default["default"]({
338
+ value: value,
339
+ setValue: setValue,
340
+ csrfToken: csrfToken,
341
+ submit: submit,
342
+ onSubmit: onSubmit
343
+ }, requestState), {}, {
344
+ status: status,
345
+ response: response,
346
+ fields: fieldsProps,
347
+ errors: errors,
348
+ generalError: generalError
349
+ });
350
+ };
351
+
352
+ var buildThresholdArray = function buildThresholdArray() {
353
+ return [0, 1.0];
354
+ };
355
+
356
+ var observersCache = new Map();
357
+
358
+ var getOptionsKey = function getOptionsKey(_ref) {
359
+ var _ref$root = _ref.root,
360
+ root = _ref$root === void 0 ? null : _ref$root,
361
+ rootMargin = _ref.rootMargin,
362
+ _ref$threshold = _ref.threshold,
363
+ threshold = _ref$threshold === void 0 ? null : _ref$threshold;
364
+ return "root_".concat(root, "_rootMargin_").concat(rootMargin || null, "_threshold_").concat(threshold);
365
+ };
366
+
367
+ var createObserver = function createObserver(Observer) {
368
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
369
+ var subscribers = [];
370
+
371
+ var addSubscriber = function addSubscriber(element, callback) {
372
+ var currentSubscriber = subscribers.find(function (it) {
373
+ return it.element === element;
374
+ }) || null;
375
+
376
+ if (currentSubscriber !== null) {
377
+ return subscribers.map(function (it) {
378
+ return it.element === element && it.callbacks.indexOf(callback) === -1 ? _objectSpread__default["default"](_objectSpread__default["default"]({}, it), {}, {
379
+ callbacks: [].concat(_toConsumableArray__default["default"](it.callbacks), [callback])
380
+ }) : it;
381
+ }).filter(function (it) {
382
+ return it.callbacks.length > 0;
383
+ });
384
+ }
385
+
386
+ return [].concat(_toConsumableArray__default["default"](subscribers), [{
387
+ element: element,
388
+ callbacks: [callback]
389
+ }]);
390
+ };
391
+
392
+ var removeSubscriber = function removeSubscriber(element, callback) {
393
+ return subscribers.map(function (it) {
394
+ return it.element === element ? _objectSpread__default["default"](_objectSpread__default["default"]({}, it), {}, {
395
+ callbacks: it.callbacks.filter(function (subCallback) {
396
+ return subCallback !== callback;
397
+ })
398
+ }) : it;
399
+ }).filter(function (it) {
400
+ return it.callbacks.length > 0;
401
+ });
402
+ };
403
+
404
+ var onUpdate = function onUpdate(entries) {
405
+ entries.forEach(function (entry) {
406
+ subscribers.forEach(function (_ref2) {
407
+ var element = _ref2.element,
408
+ callbacks = _ref2.callbacks;
409
+
410
+ if (element === entry.target) {
411
+ callbacks.forEach(function (callback) {
412
+ callback(entry);
413
+ });
414
+ }
415
+ });
416
+ });
417
+ };
418
+
419
+ var observer = new Observer(onUpdate, options);
420
+
421
+ var unsubscribe = function unsubscribe(element) {
422
+ var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
423
+ subscribers = removeSubscriber(element, callback);
424
+
425
+ if (typeof observer.unobserve === 'undefined') {
426
+ observer.disconnect();
427
+ subscribers.forEach(function (subscriber) {
428
+ observer.observe(subscriber.element);
429
+ });
430
+ return;
431
+ }
432
+
433
+ var currentSubscriber = subscribers.find(function (it) {
434
+ return it.element === element;
435
+ }) || null;
436
+
437
+ if (currentSubscriber === null) {
438
+ observer.unobserve(element);
439
+ }
440
+ };
441
+
442
+ var subscribe = function subscribe(element, callback) {
443
+ var currentSubscriber = subscribers.find(function (it) {
444
+ return it.element === element;
445
+ }) || null;
446
+ subscribers = addSubscriber(element, callback);
447
+
448
+ if (currentSubscriber === null) {
449
+ observer.observe(element);
450
+ }
451
+ };
452
+
453
+ return {
454
+ subscribe: subscribe,
455
+ unsubscribe: unsubscribe,
456
+ observer: observer
457
+ };
458
+ };
459
+
460
+ var getObserver = function getObserver(Observer) {
461
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
462
+ var observerKey = getOptionsKey(options);
463
+
464
+ if (!observersCache.has(Observer)) {
465
+ observersCache.set(Observer, {});
466
+ }
467
+
468
+ var observers = observersCache.get(Observer);
469
+
470
+ if (typeof observers[observerKey] === 'undefined') {
471
+ observers[observerKey] = createObserver(Observer, options);
472
+ observersCache.set(Observer, observers);
473
+ }
474
+
475
+ return observers[observerKey];
476
+ };
477
+ var useObserver = function useObserver(Observer) {
478
+ var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
479
+ var initialEntry = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
480
+ var _opts$root = opts.root,
481
+ root = _opts$root === void 0 ? null : _opts$root,
482
+ _opts$rootMargin = opts.rootMargin,
483
+ rootMargin = _opts$rootMargin === void 0 ? null : _opts$rootMargin,
484
+ _opts$threshold = opts.threshold,
485
+ threshold = _opts$threshold === void 0 ? null : _opts$threshold,
486
+ _opts$disabled = opts.disabled,
487
+ disabled = _opts$disabled === void 0 ? false : _opts$disabled;
488
+
489
+ var _useState = react.useState(initialEntry),
490
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
491
+ entry = _useState2[0],
492
+ setEntry = _useState2[1];
493
+
494
+ var nodeRef = react.useRef(null);
495
+ var currentElement = react.useRef(null);
496
+ var elementChanged = nodeRef.current !== currentElement.current;
497
+ react.useEffect(function () {
498
+ var nodeElement = nodeRef.current;
499
+
500
+ var callback = function callback(newEntry) {
501
+ return setEntry(newEntry);
502
+ };
503
+
504
+ var unsubscribe = null;
505
+
506
+ if (nodeElement !== null) {
507
+ var newOpts = {};
508
+
509
+ if (root !== null) {
510
+ newOpts.root = root;
511
+ }
512
+
513
+ if (rootMargin !== null) {
514
+ newOpts.rootMargin = rootMargin;
515
+ }
516
+
517
+ if (threshold !== null) {
518
+ newOpts.threshold = threshold;
519
+ }
520
+
521
+ var _getObserver = getObserver(Observer, newOpts),
522
+ subscribe = _getObserver.subscribe,
523
+ localUnsubscribe = _getObserver.unsubscribe;
524
+
525
+ unsubscribe = localUnsubscribe;
526
+ subscribe(nodeElement, callback);
527
+ }
528
+
529
+ currentElement.current = nodeElement;
530
+ return function () {
531
+ if (unsubscribe !== null) {
532
+ unsubscribe(nodeElement, callback);
533
+ }
534
+ };
535
+ }, [Observer, elementChanged, disabled, root, rootMargin, threshold]);
536
+ return {
537
+ ref: nodeRef,
538
+ entry: entry
539
+ };
540
+ };
541
+ /**
542
+ * Intersection Observer
543
+ */
544
+
545
+ var thresholdArray = buildThresholdArray();
546
+ var intersectionObserverInitialEntry = {
547
+ target: null,
548
+ time: null,
549
+ isVisible: false,
550
+ isIntersecting: false,
551
+ intersectionRatio: 0,
552
+ intersectionRect: null,
553
+ boundingClientRect: null,
554
+ rootBounds: null
555
+ };
556
+ var useIntersectionObserver = function useIntersectionObserver() {
557
+ var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
558
+ _ref3$root = _ref3.root,
559
+ root = _ref3$root === void 0 ? null : _ref3$root,
560
+ _ref3$rootMargin = _ref3.rootMargin,
561
+ rootMargin = _ref3$rootMargin === void 0 ? '0px' : _ref3$rootMargin,
562
+ _ref3$threshold = _ref3.threshold,
563
+ threshold = _ref3$threshold === void 0 ? thresholdArray : _ref3$threshold,
564
+ _ref3$disabled = _ref3.disabled,
565
+ disabled = _ref3$disabled === void 0 ? false : _ref3$disabled;
566
+
567
+ return useObserver(typeof window !== 'undefined' ? IntersectionObserver : null, {
568
+ root: root,
569
+ rootMargin: rootMargin,
570
+ threshold: threshold,
571
+ disabled: disabled
572
+ }, intersectionObserverInitialEntry);
573
+ };
574
+ /**
575
+ * Resize Observer
576
+ */
577
+
578
+ var resizeObserverInitialEntry = {
579
+ target: null,
580
+ contentRect: null,
581
+ contentBoxSize: null,
582
+ borderBoxSize: null
583
+ };
584
+ var useResizeObserver = function useResizeObserver() {
585
+ var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
586
+ _ref4$disabled = _ref4.disabled,
587
+ disabled = _ref4$disabled === void 0 ? false : _ref4$disabled;
588
+
589
+ return useObserver(typeof window !== 'undefined' ? ResizeObserver : null, {
590
+ disabled: disabled
591
+ }, resizeObserverInitialEntry);
592
+ };
593
+
594
+ var useIsVisible = function useIsVisible() {
595
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
596
+ rootMargin = _ref.rootMargin,
597
+ _ref$threshold = _ref.threshold,
598
+ threshold = _ref$threshold === void 0 ? 1 : _ref$threshold,
599
+ _ref$persist = _ref.persist,
600
+ persist = _ref$persist === void 0 ? false : _ref$persist;
601
+
602
+ var _useIntersectionObser = useIntersectionObserver({
603
+ rootMargin: rootMargin,
604
+ threshold: threshold
605
+ }),
606
+ ref = _useIntersectionObser.ref,
607
+ isIntersecting = _useIntersectionObser.entry.isIntersecting;
608
+
609
+ var wasIntersecting = react.useRef(isIntersecting);
610
+
611
+ if (isIntersecting && !wasIntersecting.current) {
612
+ wasIntersecting.current = isIntersecting;
613
+ }
614
+
615
+ var isVisible = !persist && isIntersecting || persist && wasIntersecting.current;
616
+ return {
617
+ ref: ref,
618
+ visible: isVisible
619
+ };
620
+ };
621
+
622
+ var fontsMap = {
623
+ loading: [],
624
+ active: []
625
+ };
626
+
627
+ var isFontLoading = function isFontLoading(name) {
628
+ return fontsMap.loading.indexOf(name) !== -1;
629
+ };
630
+
631
+ var isFontActive = function isFontActive(name) {
632
+ return fontsMap.active.indexOf(name) !== -1;
633
+ };
634
+
635
+ var addFontLoading = function addFontLoading(name) {
636
+ fontsMap.active = fontsMap.active.filter(function (it) {
637
+ return it !== name;
638
+ });
639
+ fontsMap.loading = [].concat(_toConsumableArray__default["default"](fontsMap.loading), [name]);
640
+ };
641
+
642
+ var removeFontLoading = function removeFontLoading(name) {
643
+ fontsMap.loading = fontsMap.loading.filter(function (it) {
644
+ return it !== name;
645
+ });
646
+ };
647
+
648
+ var addFontActive = function addFontActive(name) {
649
+ fontsMap.loading = fontsMap.loading.filter(function (it) {
650
+ return it !== name;
651
+ });
652
+ fontsMap.active = [].concat(_toConsumableArray__default["default"](fontsMap.active), [name]);
653
+ };
654
+
655
+ var useLoadedFonts = function useLoadedFonts(fonts) {
656
+ var _useState = react.useState(false),
657
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
658
+ loaded = _useState2[0],
659
+ setLoaded = _useState2[1];
660
+
661
+ react.useEffect(function () {
662
+ var config = fonts.reduce(function (newConfig, font) {
663
+ var _ref = isObject__default["default"](font) ? font : {
664
+ type: 'system',
665
+ name: font
666
+ },
667
+ type = _ref.type,
668
+ name = _ref.name;
669
+
670
+ if ((type === 'google' || type === 'custom') && !isFontLoading(name) && !isFontActive(name)) {
671
+ return _objectSpread__default["default"](_objectSpread__default["default"]({}, newConfig), {}, _defineProperty__default["default"]({}, type, {
672
+ families: [].concat(_toConsumableArray__default["default"](newConfig !== null ? (newConfig[type] || {}).families || [] : []), [name])
673
+ }));
674
+ }
675
+
676
+ return newConfig;
677
+ }, null);
678
+ var hasConfig = config !== null;
679
+
680
+ if (hasConfig && typeof window !== 'undefined') {
681
+ Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('webfontloader')); }).then(function (_ref2) {
682
+ var WebFont = _ref2["default"];
683
+ return WebFont.load(_objectSpread__default["default"](_objectSpread__default["default"]({}, config), {}, {
684
+ timeout: 3000,
685
+ active: function active() {
686
+ return setLoaded(true);
687
+ },
688
+ fontloading: function fontloading(name) {
689
+ return addFontLoading(name);
690
+ },
691
+ fontactive: function fontactive(name) {
692
+ return addFontActive(name);
693
+ },
694
+ fontinactive: function fontinactive(name) {
695
+ return removeFontLoading(name);
696
+ }
697
+ }));
698
+ });
699
+ } else {
700
+ setLoaded(true);
701
+ }
702
+ }, [fonts, setLoaded]);
703
+ return {
704
+ loaded: loaded
705
+ };
706
+ };
707
+
708
+ var progressSteps = [0.1, 0.25, 0.5, 0.75, 0.9];
709
+
710
+ var useMediaApi = function useMediaApi() {
711
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
712
+ _ref$url = _ref.url,
713
+ url = _ref$url === void 0 ? null : _ref$url,
714
+ _ref$initialMuted = _ref.initialMuted,
715
+ initialMuted = _ref$initialMuted === void 0 ? false : _ref$initialMuted,
716
+ _ref$onTimeUpdate = _ref.onTimeUpdate,
717
+ onTimeUpdate = _ref$onTimeUpdate === void 0 ? null : _ref$onTimeUpdate,
718
+ _ref$onProgressStep = _ref.onProgressStep,
719
+ onProgressStep = _ref$onProgressStep === void 0 ? null : _ref$onProgressStep,
720
+ _ref$onDurationChange = _ref.onDurationChanged,
721
+ onDurationChanged = _ref$onDurationChange === void 0 ? null : _ref$onDurationChange,
722
+ _ref$onVolumeChanged = _ref.onVolumeChanged,
723
+ onVolumeChanged = _ref$onVolumeChanged === void 0 ? null : _ref$onVolumeChanged,
724
+ _ref$onPlay = _ref.onPlay,
725
+ onPlay = _ref$onPlay === void 0 ? null : _ref$onPlay,
726
+ _ref$onPause = _ref.onPause,
727
+ onPause = _ref$onPause === void 0 ? null : _ref$onPause,
728
+ _ref$onEnded = _ref.onEnded,
729
+ onEnded = _ref$onEnded === void 0 ? null : _ref$onEnded,
730
+ _ref$onSeeked = _ref.onSeeked,
731
+ onSeeked = _ref$onSeeked === void 0 ? null : _ref$onSeeked,
732
+ _ref$onLoadStart = _ref.onLoadStart,
733
+ onLoadStart = _ref$onLoadStart === void 0 ? null : _ref$onLoadStart,
734
+ _ref$onCanPlayThough = _ref.onCanPlayThough,
735
+ onCanPlayThough = _ref$onCanPlayThough === void 0 ? null : _ref$onCanPlayThough;
736
+
737
+ var ref = react.useRef(null);
738
+
739
+ var _useState = react.useState(initialMuted),
740
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
741
+ muted = _useState2[0],
742
+ setMuted = _useState2[1];
743
+
744
+ var _useState3 = react.useState(null),
745
+ _useState4 = _slicedToArray__default["default"](_useState3, 2),
746
+ currentTime = _useState4[0],
747
+ setCurrentTime = _useState4[1];
748
+
749
+ var _useState5 = react.useState(null),
750
+ _useState6 = _slicedToArray__default["default"](_useState5, 2),
751
+ duration = _useState6[0],
752
+ setDuration = _useState6[1];
753
+
754
+ var _useState7 = react.useState(false),
755
+ _useState8 = _slicedToArray__default["default"](_useState7, 2),
756
+ playing = _useState8[0],
757
+ setPlaying = _useState8[1];
758
+
759
+ var _useState9 = react.useState(false),
760
+ _useState10 = _slicedToArray__default["default"](_useState9, 2),
761
+ ready = _useState10[0],
762
+ setReady = _useState10[1];
763
+
764
+ var _useState11 = react.useState(true),
765
+ _useState12 = _slicedToArray__default["default"](_useState11, 2),
766
+ initialPlay = _useState12[0],
767
+ setInitialPlay = _useState12[1];
768
+
769
+ var progressStepsReached = react.useRef({});
770
+ var paused = !playing; // Exposed methods
771
+
772
+ var play = react.useCallback(function () {
773
+ var media = ref.current;
774
+
775
+ if (media !== null) {
776
+ media.play();
777
+ }
778
+ }, []);
779
+ var pause = react.useCallback(function () {
780
+ var media = ref.current;
781
+
782
+ if (media !== null) {
783
+ media.pause();
784
+ }
785
+ }, []);
786
+ var togglePlay = react.useCallback(function () {
787
+ var media = ref.current;
788
+
789
+ if (media !== null) {
790
+ if (playing) {
791
+ media.pause();
792
+ } else {
793
+ media.play();
794
+ }
795
+ }
796
+ }, [playing]);
797
+ var stop = react.useCallback(function () {
798
+ var media = ref.current;
799
+
800
+ if (media !== null) {
801
+ media.pause();
802
+ media.currentTime = 0;
803
+ }
804
+ }, []);
805
+ var seek = react.useCallback(function (time) {
806
+ var media = ref.current;
807
+
808
+ if (media !== null) {
809
+ media.currentTime = time;
810
+ }
811
+ }, []);
812
+ var mute = react.useCallback(function () {
813
+ var media = ref.current;
814
+
815
+ if (media !== null) {
816
+ media.muted = true;
817
+ }
818
+ }, []);
819
+ var unMute = react.useCallback(function () {
820
+ var media = ref.current;
821
+
822
+ if (media !== null) {
823
+ media.muted = false;
824
+ }
825
+ }, []);
826
+ var toggleMute = react.useCallback(function () {
827
+ var media = ref.current;
828
+
829
+ if (media !== null) {
830
+ media.muted = !muted;
831
+ }
832
+ }, [muted]); // Media events callbacks
833
+
834
+ var onCustomPlay = react.useCallback(function () {
835
+ if (onPlay !== null) {
836
+ onPlay({
837
+ initial: initialPlay
838
+ });
839
+ }
840
+
841
+ if (initialPlay) {
842
+ setInitialPlay(false);
843
+ }
844
+
845
+ setPlaying(true);
846
+ }, [initialPlay, setPlaying, onPlay]);
847
+ var onCustomPause = react.useCallback(function () {
848
+ var media = ref.current;
849
+ setPlaying(false);
850
+
851
+ if (onPause !== null) {
852
+ onPause({
853
+ midway: media.currentTime > 0 && media.currentTime < media.duration
854
+ });
855
+ }
856
+ }, [setPlaying, onPause]);
857
+ var onCustomEnded = react.useCallback(function () {
858
+ var media = ref.current;
859
+ media.currentTime = 0;
860
+
861
+ if (onEnded !== null) {
862
+ onEnded();
863
+ }
864
+
865
+ setInitialPlay(true);
866
+ }, [setInitialPlay, onEnded]);
867
+ var onCustomTimeUpdate = react.useCallback(function () {
868
+ var media = ref.current;
869
+ setCurrentTime(media.currentTime);
870
+
871
+ if (onTimeUpdate !== null) {
872
+ onTimeUpdate(media.currentTime);
873
+ }
874
+
875
+ var progress = media.currentTime / media.duration;
876
+ var currentSteps = progressStepsReached.current;
877
+ var stepsToTrack = progressSteps.filter(function (step) {
878
+ return progress > step && typeof currentSteps[step] === 'undefined';
879
+ });
880
+ stepsToTrack.forEach(function (step) {
881
+ if (onProgressStep !== null) {
882
+ onProgressStep(step);
883
+ }
884
+
885
+ currentSteps[step] = true;
886
+ });
887
+ }, [setCurrentTime, onTimeUpdate, onProgressStep]);
888
+ var onCustomDurationChange = react.useCallback(function () {
889
+ var media = ref.current;
890
+ setDuration(media.duration);
891
+
892
+ if (onDurationChanged !== null) {
893
+ onDurationChanged(media.duration);
894
+ }
895
+ }, [setDuration, onDurationChanged]);
896
+ var onCustomSeeked = react.useCallback(function () {
897
+ var media = ref.current;
898
+
899
+ if (onSeeked !== null) {
900
+ onSeeked(media.currentTime);
901
+ }
902
+ }, [onSeeked]);
903
+ var onCustomVolumeChange = react.useCallback(function () {
904
+ var media = ref.current;
905
+ setMuted(media.muted);
906
+
907
+ if (onVolumeChanged !== null) {
908
+ onVolumeChanged(media.muted, media.volume);
909
+ }
910
+ }, [setMuted, onVolumeChanged]);
911
+ var onCustomLoadStart = react.useCallback(function () {
912
+ setReady(false);
913
+
914
+ if (onLoadStart !== null) {
915
+ onLoadStart();
916
+ }
917
+ }, [setReady, onLoadStart]);
918
+ var onCustomCanPlayThrough = react.useCallback(function () {
919
+ setReady(true);
920
+
921
+ if (onCanPlayThough !== null) {
922
+ onCanPlayThough();
923
+ }
924
+ }, [setReady, onCanPlayThough]);
925
+ react.useEffect(function () {
926
+ var media = ref.current;
927
+
928
+ if (media !== null) {
929
+ media.addEventListener('timeupdate', onCustomTimeUpdate);
930
+ media.addEventListener('durationchange', onCustomDurationChange);
931
+ media.addEventListener('volumechange', onCustomVolumeChange);
932
+ media.addEventListener('play', onCustomPlay);
933
+ media.addEventListener('pause', onCustomPause);
934
+ media.addEventListener('ended', onCustomEnded);
935
+ media.addEventListener('seeked', onCustomSeeked);
936
+ media.addEventListener('loadstart', onCustomLoadStart);
937
+ media.addEventListener('canplaythrough', onCustomCanPlayThrough);
938
+ }
939
+
940
+ return function () {
941
+ if (media !== null) {
942
+ media.removeEventListener('timeupdate', onCustomTimeUpdate);
943
+ media.removeEventListener('durationchange', onCustomDurationChange);
944
+ media.removeEventListener('volumechange', onCustomVolumeChange);
945
+ media.removeEventListener('play', onCustomPlay);
946
+ media.removeEventListener('pause', onCustomPause);
947
+ media.removeEventListener('ended', onCustomEnded);
948
+ media.removeEventListener('seeked', onCustomSeeked);
949
+ media.removeEventListener('loadstart', onCustomLoadStart);
950
+ media.removeEventListener('canplaythrough', onCustomCanPlayThrough);
951
+ }
952
+ };
953
+ }, [url]);
954
+ return {
955
+ ref: ref,
956
+ play: play,
957
+ pause: pause,
958
+ togglePlay: togglePlay,
959
+ stop: stop,
960
+ seek: seek,
961
+ mute: mute,
962
+ unMute: unMute,
963
+ toggleMute: toggleMute,
964
+ muted: muted,
965
+ currentTime: currentTime,
966
+ duration: duration,
967
+ playing: playing,
968
+ paused: paused,
969
+ ready: ready
970
+ };
971
+ };
972
+
973
+ var useMediasParser = function useMediasParser() {
974
+ // const screensManager = useScreensManager();
975
+ var fieldsManager = contexts.useFieldsManager(); // Convert medias object to path
976
+
977
+ var parser = react.useMemo(function () {
978
+ return new core.MediasParser({
979
+ // screensManager,
980
+ fieldsManager: fieldsManager
981
+ });
982
+ }, [fieldsManager]);
983
+ var toPath = react.useCallback(function (story) {
984
+ return parser.toPath(story);
985
+ }, [parser]);
986
+ var fromPath = react.useCallback(function (story) {
987
+ return parser.fromPath(story);
988
+ }, [parser]);
989
+ return {
990
+ toPath: toPath,
991
+ fromPath: fromPath,
992
+ parser: parser
993
+ };
994
+ };
995
+
996
+ var getResource = function getResource(resources, resourceId) {
997
+ return resourceId !== null && !isObject__default["default"](resourceId) ? resources.find(function (it) {
998
+ return it.id === resourceId;
999
+ }) || null : resourceId;
1000
+ };
1001
+
1002
+ var useResourceUrlGenerator = function useResourceUrlGenerator() {
1003
+ var resourceId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1004
+ var resources = contexts.usePanneauResources();
1005
+ var contextResource = contexts.useResource();
1006
+ var resource = getResource(resources, resourceId) || contextResource;
1007
+ var route = contexts.useUrlGenerator();
1008
+ return function (routeResourceId) {
1009
+ var routeName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
1010
+ var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
1011
+ var finalRouteName = resourceId !== null ? routeResourceId : routeName;
1012
+ var finalParams = resourceId !== null ? routeName : params;
1013
+ var finalResource = getResource(resources, routeResourceId) || resource;
1014
+
1015
+ var _ref = finalResource || {},
1016
+ _ref$id = _ref.id,
1017
+ id = _ref$id === void 0 ? null : _ref$id; // console.log('gen', finalRouteName, route(`resources.${finalRouteName}`, {
1018
+ // ...finalParams,
1019
+ // resource: id,
1020
+ // }));
1021
+
1022
+
1023
+ return id !== null ? route("resources.".concat(finalRouteName), _objectSpread__default["default"](_objectSpread__default["default"]({}, finalParams), {}, {
1024
+ resource: id
1025
+ })) : null;
1026
+ };
1027
+ };
1028
+
1029
+ var _excluded = ["width", "height"];
1030
+
1031
+ var useScreenSize = function useScreenSize(_ref) {
1032
+ var _ref$width = _ref.width,
1033
+ width = _ref$width === void 0 ? null : _ref$width,
1034
+ _ref$height = _ref.height,
1035
+ height = _ref$height === void 0 ? null : _ref$height,
1036
+ _ref$landscape = _ref.landscape,
1037
+ landscape = _ref$landscape === void 0 ? false : _ref$landscape,
1038
+ _ref$screens = _ref.screens,
1039
+ screens = _ref$screens === void 0 ? [] : _ref$screens,
1040
+ _ref$mediaType = _ref.mediaType,
1041
+ mediaType = _ref$mediaType === void 0 ? 'screen' : _ref$mediaType,
1042
+ _ref$media = _ref.media,
1043
+ providedMedia = _ref$media === void 0 ? null : _ref$media;
1044
+ // Get media
1045
+ var media = react.useMemo(function () {
1046
+ return providedMedia !== null ? providedMedia : {
1047
+ type: mediaType,
1048
+ width: "".concat(width, "px"),
1049
+ height: "".concat(height, "px")
1050
+ };
1051
+ }, [providedMedia, mediaType, width, height]); // Get matching screens
1052
+
1053
+ var matchingScreens = react.useMemo(function () {
1054
+ return _toConsumableArray__default["default"](screens).reverse().filter(function (_ref2) {
1055
+ var _ref2$mediaQuery = _ref2.mediaQuery,
1056
+ mediaQuery = _ref2$mediaQuery === void 0 ? null : _ref2$mediaQuery;
1057
+ return mediaQuery === null || cssMediaquery.match(mediaQuery, media);
1058
+ });
1059
+ }, [screens, media]);
1060
+ return {
1061
+ screen: matchingScreens.length > 0 ? matchingScreens[0].name : null,
1062
+ screens: _toConsumableArray__default["default"](matchingScreens).reverse().map(function (_ref3) {
1063
+ var name = _ref3.name;
1064
+ return name;
1065
+ }),
1066
+ width: width,
1067
+ height: height,
1068
+ landscape: landscape
1069
+ };
1070
+ };
1071
+
1072
+ var useScreenSizeFromElement = function useScreenSizeFromElement() {
1073
+ var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
1074
+ _ref4$width = _ref4.width,
1075
+ width = _ref4$width === void 0 ? null : _ref4$width,
1076
+ _ref4$height = _ref4.height,
1077
+ height = _ref4$height === void 0 ? null : _ref4$height,
1078
+ opts = _objectWithoutProperties__default["default"](_ref4, _excluded);
1079
+
1080
+ var _useResizeObserver = useResizeObserver(),
1081
+ ref = _useResizeObserver.ref,
1082
+ contentRect = _useResizeObserver.entry.contentRect;
1083
+
1084
+ var _ref5 = contentRect || {},
1085
+ _ref5$width = _ref5.width,
1086
+ calculatedWidth = _ref5$width === void 0 ? 0 : _ref5$width,
1087
+ _ref5$height = _ref5.height,
1088
+ calculatedHeight = _ref5$height === void 0 ? 0 : _ref5$height;
1089
+
1090
+ var semiFinalWidth = width !== null ? width : calculatedWidth;
1091
+ var semiFinalHeight = height !== null ? height : calculatedHeight;
1092
+ var landscape = semiFinalHeight > 0 && semiFinalWidth > semiFinalHeight;
1093
+ var _opts$withoutMaxSize = opts.withoutMaxSize,
1094
+ withoutMaxSize = _opts$withoutMaxSize === void 0 ? false : _opts$withoutMaxSize;
1095
+ var finalWidth = landscape && !withoutMaxSize ? Math.round(Math.max(320, 0.45 * semiFinalHeight)) : semiFinalWidth;
1096
+ var finalHeight = landscape && !withoutMaxSize ? Math.round(Math.max(533, 0.75 * semiFinalHeight)) : semiFinalHeight;
1097
+
1098
+ if (finalWidth % 2 === 1) {
1099
+ finalWidth -= 1;
1100
+ }
1101
+
1102
+ if (finalHeight % 2 === 1) {
1103
+ finalHeight -= 1;
1104
+ }
1105
+
1106
+ var screenSize = useScreenSize(_objectSpread__default["default"]({
1107
+ width: finalWidth,
1108
+ height: finalHeight,
1109
+ landscape: landscape
1110
+ }, opts));
1111
+ return {
1112
+ ref: ref,
1113
+ screenSize: screenSize
1114
+ };
1115
+ };
1116
+
1117
+ var getWindowSize = function getWindowSize() {
1118
+ return {
1119
+ width: typeof window !== 'undefined' ? window.innerWidth : null,
1120
+ height: typeof window !== 'undefined' ? window.innerHæeight : null
1121
+ };
1122
+ };
1123
+
1124
+ var useScreenSizeFromWindow = function useScreenSizeFromWindow(opts) {
1125
+ var _useState = react.useState(getWindowSize()),
1126
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
1127
+ windowSize = _useState2[0],
1128
+ setWindowSize = _useState2[1];
1129
+
1130
+ react.useEffect(function () {
1131
+ var onResize = function onResize() {
1132
+ return setWindowSize(getWindowSize());
1133
+ };
1134
+
1135
+ if (typeof window !== 'undefined') {
1136
+ window.addEventListener('resize', onResize);
1137
+ }
1138
+
1139
+ return function () {
1140
+ if (typeof window !== 'undefined') {
1141
+ window.removeEventListener('resize', onResize);
1142
+ }
1143
+ };
1144
+ }, [setWindowSize]);
1145
+ return useScreenSize(_objectSpread__default["default"](_objectSpread__default["default"]({}, opts), windowSize));
1146
+ };
1147
+
1148
+ var eventsManager = typeof window !== 'undefined' ? new core.EventsManager(window) : null;
1149
+ var useWindowEvent = utils.createUseEvent(eventsManager);
1150
+
1151
+ exports.getObserver = getObserver;
1152
+ exports.useAnimationFrame = useAnimationFrame;
1153
+ exports.useDocumentEvent = useDocumentEvent;
1154
+ exports.useForm = useForm;
1155
+ exports.useFormattedDate = useFormattedDate;
1156
+ exports.useFormattedTime = useFormattedTime;
1157
+ exports.useIntersectionObserver = useIntersectionObserver;
1158
+ exports.useIsVisible = useIsVisible;
1159
+ exports.useLoadedFonts = useLoadedFonts;
1160
+ exports.useMediaApi = useMediaApi;
1161
+ exports.useMediasParser = useMediasParser;
1162
+ exports.useObserver = useObserver;
1163
+ exports.useResizeObserver = useResizeObserver;
1164
+ exports.useResourceUrlGenerator = useResourceUrlGenerator;
1165
+ exports.useScreenSizeFromElement = useScreenSizeFromElement;
1166
+ exports.useScreenSizeFromWindow = useScreenSizeFromWindow;
1167
+ exports.useWindowEvent = useWindowEvent;