@folklore/hooks 0.0.8 → 0.0.10

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 (3) hide show
  1. package/dist/cjs.js +1322 -8
  2. package/dist/es.js +1315 -8
  3. package/package.json +5 -3
package/dist/es.js CHANGED
@@ -1,8 +1,389 @@
1
- import { useEffect, useCallback, useState, useRef } from 'react';
2
- import EventsManager from '@folklore/events';
1
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
3
2
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
3
+ import { useState, useRef, useEffect, useCallback, useMemo } from 'react';
4
+ import { loadDailymotion, loadYouTube, loadVimeo } from '@folklore/services';
5
+ import createDebug from 'debug';
6
+ import EventsManager from '@folklore/events';
4
7
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
5
- import _defineProperty from '@babel/runtime/helpers/defineProperty';
8
+
9
+ function usePlayerCurrentTime(player) {
10
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
11
+ _ref$id = _ref.id,
12
+ id = _ref$id === void 0 ? null : _ref$id,
13
+ _ref$disabled = _ref.disabled,
14
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
15
+ _ref$updateInterval = _ref.updateInterval,
16
+ updateInterval = _ref$updateInterval === void 0 ? 1000 : _ref$updateInterval,
17
+ _ref$onUpdate = _ref.onUpdate,
18
+ customOnUpdate = _ref$onUpdate === void 0 ? null : _ref$onUpdate,
19
+ _ref$getCurrentTime = _ref.getCurrentTime,
20
+ getCurrentTime = _ref$getCurrentTime === void 0 ? function (p) {
21
+ return p.currentTime;
22
+ } : _ref$getCurrentTime;
23
+
24
+ var _useState = useState(0),
25
+ _useState2 = _slicedToArray(_useState, 2),
26
+ currentTime = _useState2[0],
27
+ setCurrentTime = _useState2[1];
28
+
29
+ var realCurrentTime = useRef(currentTime);
30
+ var lastIdRef = useRef(id);
31
+ var idChanged = lastIdRef.current !== id;
32
+
33
+ if (idChanged) {
34
+ realCurrentTime.current = 0;
35
+ lastIdRef.current = id;
36
+ } // Check time update
37
+
38
+
39
+ useEffect(function () {
40
+ if (disabled || player === null) {
41
+ return function () {};
42
+ }
43
+
44
+ var canceled = false;
45
+
46
+ var updateTime = function updateTime(time) {
47
+ if (canceled) {
48
+ return;
49
+ }
50
+
51
+ realCurrentTime.current = time;
52
+ setCurrentTime(time);
53
+
54
+ if (customOnUpdate !== null) {
55
+ customOnUpdate(time);
56
+ }
57
+ };
58
+
59
+ var interval = setInterval(function () {
60
+ var time = getCurrentTime(player);
61
+
62
+ if (typeof time.then !== 'undefined') {
63
+ time.then(updateTime);
64
+ } else {
65
+ updateTime(time);
66
+ }
67
+ }, updateInterval);
68
+ return function () {
69
+ canceled = true;
70
+ clearInterval(interval);
71
+ };
72
+ }, [id, player, setCurrentTime, disabled, updateInterval, getCurrentTime]);
73
+ return realCurrentTime.current;
74
+ }
75
+
76
+ function ownKeys$4(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
77
+
78
+ function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$4(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
79
+ var noPlayerError$2 = new Error('No player');
80
+ var debug$3 = createDebug('folklore:video:youtube');
81
+
82
+ var useDailymotionPlayer = function useDailymotionPlayer() {
83
+ var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
84
+ var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
85
+ var _params$width = params.width,
86
+ width = _params$width === void 0 ? 0 : _params$width,
87
+ _params$height = params.height,
88
+ height = _params$height === void 0 ? 0 : _params$height,
89
+ _params$duration = params.duration,
90
+ duration = _params$duration === void 0 ? 0 : _params$duration,
91
+ _params$autoplay = params.autoplay,
92
+ autoplay = _params$autoplay === void 0 ? false : _params$autoplay,
93
+ _params$muted = params.muted,
94
+ initialMuted = _params$muted === void 0 ? false : _params$muted,
95
+ _params$start = params.start,
96
+ start = _params$start === void 0 ? 0 : _params$start,
97
+ _params$controls = params.controls,
98
+ controls = _params$controls === void 0 ? true : _params$controls,
99
+ _params$queueAutoplay = params.queueAutoplayNext,
100
+ queueAutoplayNext = _params$queueAutoplay === void 0 ? false : _params$queueAutoplay,
101
+ _params$queueEnable = params.queueEnable,
102
+ queueEnable = _params$queueEnable === void 0 ? false : _params$queueEnable,
103
+ _params$sharingEnable = params.sharingEnable,
104
+ sharingEnable = _params$sharingEnable === void 0 ? false : _params$sharingEnable,
105
+ _params$uiLogo = params.uiLogo,
106
+ uiLogo = _params$uiLogo === void 0 ? false : _params$uiLogo,
107
+ _params$uiStartScreen = params.uiStartScreenInfo,
108
+ uiStartScreenInfo = _params$uiStartScreen === void 0 ? true : _params$uiStartScreen,
109
+ _params$timeUpdateInt = params.timeUpdateInterval,
110
+ timeUpdateInterval = _params$timeUpdateInt === void 0 ? 1000 : _params$timeUpdateInt,
111
+ _params$onTimeUpdate = params.onTimeUpdate,
112
+ customOnTimeUpdate = _params$onTimeUpdate === void 0 ? null : _params$onTimeUpdate;
113
+
114
+ var _useState = useState(typeof window.DM !== 'undefined'),
115
+ _useState2 = _slicedToArray(_useState, 2),
116
+ apiLoaded = _useState2[0],
117
+ setApiLoaded = _useState2[1];
118
+
119
+ var _useState3 = useState(false),
120
+ _useState4 = _slicedToArray(_useState3, 2),
121
+ playerReady = _useState4[0],
122
+ setPlayerReady = _useState4[1];
123
+
124
+ var _useState5 = useState(false),
125
+ _useState6 = _slicedToArray(_useState5, 2),
126
+ loaded = _useState6[0],
127
+ setLoaded = _useState6[1];
128
+
129
+ var apiRef = useRef(typeof window.DM !== 'undefined' ? window.DM : null);
130
+ var elementRef = useRef(null);
131
+ var playerRef = useRef(null);
132
+ var ready = apiLoaded && playerReady;
133
+
134
+ var _useState7 = useState(initialMuted),
135
+ _useState8 = _slicedToArray(_useState7, 2),
136
+ muted = _useState8[0],
137
+ setMuted = _useState8[1];
138
+
139
+ var _useState9 = useState(initialMuted ? 0 : 1),
140
+ _useState10 = _slicedToArray(_useState9, 2),
141
+ volume = _useState10[0],
142
+ setVolumeState = _useState10[1];
143
+
144
+ var _useState11 = useState({
145
+ playing: false,
146
+ paused: false,
147
+ ended: false,
148
+ buffering: false,
149
+ adPlaying: false
150
+ }),
151
+ _useState12 = _slicedToArray(_useState11, 2),
152
+ playState = _useState12[0],
153
+ setPlayState = _useState12[1];
154
+
155
+ var _useState13 = useState({
156
+ width: width,
157
+ height: height,
158
+ duration: duration
159
+ }),
160
+ _useState14 = _slicedToArray(_useState13, 2),
161
+ metadata = _useState14[0],
162
+ setMetadata = _useState14[1]; // Load SDK
163
+
164
+
165
+ useEffect(function () {
166
+ var canceled = false;
167
+
168
+ if (!apiLoaded && id !== null) {
169
+ loadDailymotion().then(function (api) {
170
+ if (!canceled) {
171
+ apiRef.current = api;
172
+ setApiLoaded(true);
173
+ debug$3('API Loaded');
174
+ }
175
+ });
176
+ }
177
+
178
+ return function () {
179
+ canceled = true;
180
+ };
181
+ }, [id]); // Create or update player
182
+
183
+ useEffect(function () {
184
+ var _apiRef$current = apiRef.current,
185
+ DM = _apiRef$current === void 0 ? null : _apiRef$current;
186
+ var _playerRef$current = playerRef.current,
187
+ currentPlayer = _playerRef$current === void 0 ? null : _playerRef$current;
188
+ var _elementRef$current = elementRef.current,
189
+ element = _elementRef$current === void 0 ? null : _elementRef$current;
190
+
191
+ if (!apiLoaded || id === null || element === null) {
192
+ return;
193
+ }
194
+
195
+ var playerParams = {
196
+ 'autoplay-d': autoplay,
197
+ // muted,
198
+ start: start,
199
+ controls: controls,
200
+ 'queue-autoplay-next': queueAutoplayNext,
201
+ 'queue-enable': queueEnable,
202
+ 'sharing-enable': sharingEnable,
203
+ 'ui-logo': uiLogo,
204
+ 'ui-start-screen-info': uiStartScreenInfo
205
+ };
206
+ var player = currentPlayer;
207
+
208
+ if (player !== null) {
209
+ player.load(id, {
210
+ params: playerParams
211
+ });
212
+ } else {
213
+ player = DM.player(element, {
214
+ video: id,
215
+ width: width,
216
+ height: height,
217
+ params: playerParams
218
+ });
219
+ playerRef.current = player;
220
+ }
221
+
222
+ if (!playerReady) {
223
+ setPlayerReady(true);
224
+ }
225
+ }, [apiLoaded, elementRef.current, id, width, height, autoplay, muted, start, controls, queueAutoplayNext, queueEnable, sharingEnable, uiLogo, uiStartScreenInfo]);
226
+ useEffect(function () {
227
+ var _playerRef$current2 = playerRef.current,
228
+ player = _playerRef$current2 === void 0 ? null : _playerRef$current2;
229
+
230
+ if (player === null) {
231
+ return function () {};
232
+ }
233
+
234
+ var currentPlayState = playState;
235
+ var currentMetadata = metadata;
236
+
237
+ function onPlaybackReady() {
238
+ setLoaded(true);
239
+ }
240
+
241
+ function onLoadedMetadata() {
242
+ currentMetadata = _objectSpread$4(_objectSpread$4({}, currentMetadata), {}, {
243
+ duration: player.duration
244
+ });
245
+ setMetadata(currentMetadata);
246
+ }
247
+
248
+ function onDurationChange() {
249
+ currentMetadata = _objectSpread$4(_objectSpread$4({}, currentMetadata), {}, {
250
+ duration: player.duration
251
+ });
252
+ setMetadata(currentMetadata);
253
+ }
254
+
255
+ function onVolumeChange() {
256
+ setMuted(player.muted);
257
+ setVolumeState(player.volume);
258
+ }
259
+
260
+ function onPlay() {
261
+ currentPlayState = _objectSpread$4(_objectSpread$4({}, currentPlayState), {}, {
262
+ playing: true,
263
+ paused: false,
264
+ ended: false
265
+ });
266
+ setPlayState(currentPlayState);
267
+ }
268
+
269
+ function onPause() {
270
+ currentPlayState = _objectSpread$4(_objectSpread$4({}, currentPlayState), {}, {
271
+ playing: false,
272
+ paused: true,
273
+ ended: false
274
+ });
275
+ setPlayState(currentPlayState);
276
+ }
277
+
278
+ function onEnd() {
279
+ currentPlayState = _objectSpread$4(_objectSpread$4({}, currentPlayState), {}, {
280
+ playing: false,
281
+ paused: false,
282
+ ended: true
283
+ });
284
+ setPlayState(currentPlayState);
285
+ }
286
+
287
+ function onPlaying() {
288
+ currentPlayState = _objectSpread$4(_objectSpread$4({}, currentPlayState), {}, {
289
+ buffering: false
290
+ });
291
+ setPlayState(currentPlayState);
292
+ }
293
+
294
+ function onWaiting() {
295
+ currentPlayState = _objectSpread$4(_objectSpread$4({}, currentPlayState), {}, {
296
+ buffering: true
297
+ });
298
+ setPlayState(currentPlayState);
299
+ }
300
+
301
+ function onAdStart() {
302
+ currentPlayState = _objectSpread$4(_objectSpread$4({}, currentPlayState), {}, {
303
+ adPlaying: true
304
+ });
305
+ setPlayState(currentPlayState);
306
+ }
307
+
308
+ function onAdEnd() {
309
+ currentPlayState = _objectSpread$4(_objectSpread$4({}, currentPlayState), {}, {
310
+ adPlaying: false
311
+ });
312
+ setPlayState(currentPlayState);
313
+ }
314
+
315
+ player.addEventListener('playback_ready', onPlaybackReady);
316
+ player.addEventListener('loadedmetadata', onLoadedMetadata);
317
+ player.addEventListener('durationchange', onDurationChange);
318
+ player.addEventListener('volumechange', onVolumeChange);
319
+ player.addEventListener('play', onPlay);
320
+ player.addEventListener('pause', onPause);
321
+ player.addEventListener('video_end', onEnd);
322
+ player.addEventListener('playing', onPlaying);
323
+ player.addEventListener('waiting', onWaiting);
324
+ player.addEventListener('ad_start', onAdStart);
325
+ player.addEventListener('ad_end', onAdEnd);
326
+ return function () {
327
+ player.removeEventListener('playback_ready', onPlaybackReady);
328
+ player.removeEventListener('loadedmetadata', onLoadedMetadata);
329
+ player.removeEventListener('durationchange', onDurationChange);
330
+ player.removeEventListener('volumechange', onVolumeChange);
331
+ player.removeEventListener('play', onPlay);
332
+ player.removeEventListener('pause', onPause);
333
+ player.removeEventListener('video_end', onEnd);
334
+ player.removeEventListener('playing', onPlaying);
335
+ player.removeEventListener('waiting', onWaiting);
336
+ player.removeEventListener('ad_start', onAdStart);
337
+ player.removeEventListener('ad_end', onAdEnd);
338
+ };
339
+ }, [playerRef.current, playerReady, id, setLoaded, setPlayState, setMetadata, setVolumeState, setMuted]);
340
+ var play = useCallback(function () {
341
+ var player = playerRef.current;
342
+ return player !== null ? player.play() : Promise.reject(noPlayerError$2);
343
+ }, []);
344
+ var pause = useCallback(function () {
345
+ var player = playerRef.current;
346
+ return player !== null ? player.pause() : Promise.reject(noPlayerError$2);
347
+ }, []);
348
+ var setVolume = useCallback(function (newVolume) {
349
+ var player = playerRef.current;
350
+ return player !== null ? player.setVolume(newVolume) : Promise.reject(noPlayerError$2);
351
+ }, []);
352
+ var mute = useCallback(function () {
353
+ var player = playerRef.current;
354
+ return player !== null ? player.setMute(true) : Promise.reject(noPlayerError$2);
355
+ }, []);
356
+ var unmute = useCallback(function () {
357
+ var player = playerRef.current;
358
+ return player !== null ? player.setMute(false) : Promise.reject(noPlayerError$2);
359
+ }, []);
360
+ var seek = useCallback(function (time) {
361
+ var player = playerRef.current;
362
+ return player !== null ? player.seek(time) : Promise.reject(noPlayerError$2);
363
+ }, []);
364
+ var playing = playState.playing;
365
+ var currentTime = usePlayerCurrentTime(playerRef.current, {
366
+ id: id,
367
+ disabled: !playing || timeUpdateInterval === null,
368
+ updateInterval: timeUpdateInterval,
369
+ onUpdate: customOnTimeUpdate
370
+ });
371
+ return _objectSpread$4(_objectSpread$4({
372
+ ref: elementRef,
373
+ player: playerRef.current,
374
+ ready: ready,
375
+ play: play,
376
+ pause: pause,
377
+ mute: mute,
378
+ unmute: unmute,
379
+ setVolume: setVolume,
380
+ seek: seek,
381
+ currentTime: currentTime,
382
+ loaded: loaded,
383
+ muted: muted,
384
+ volume: volume
385
+ }, metadata), playState);
386
+ };
6
387
 
7
388
  var eventsManager$1 = typeof document !== 'undefined' ? new EventsManager(document) : null;
8
389
 
@@ -58,9 +439,212 @@ function useKeyboard() {
58
439
  useWindowEvent('keyup', keyMap !== null ? onKeyUp : null);
59
440
  }
60
441
 
61
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
442
+ function ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
62
443
 
63
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
444
+ function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
445
+ var debug$2 = createDebug('folklore:video:native');
446
+ var noPlayerError$1 = new Error('No player');
447
+
448
+ var useNativeVideoPlayer = function useNativeVideoPlayer(url) {
449
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
450
+ _ref$width = _ref.width,
451
+ width = _ref$width === void 0 ? 0 : _ref$width,
452
+ _ref$height = _ref.height,
453
+ height = _ref$height === void 0 ? 0 : _ref$height,
454
+ _ref$duration = _ref.duration,
455
+ duration = _ref$duration === void 0 ? 0 : _ref$duration,
456
+ _ref$initialMuted = _ref.initialMuted,
457
+ initialMuted = _ref$initialMuted === void 0 ? false : _ref$initialMuted,
458
+ _ref$timeUpdateInterv = _ref.timeUpdateInterval,
459
+ timeUpdateInterval = _ref$timeUpdateInterv === void 0 ? 1000 : _ref$timeUpdateInterv,
460
+ _ref$onTimeUpdate = _ref.onTimeUpdate,
461
+ customOnTimeUpdate = _ref$onTimeUpdate === void 0 ? null : _ref$onTimeUpdate;
462
+
463
+ var elementRef = useRef(null);
464
+
465
+ var _useState = useState(false),
466
+ _useState2 = _slicedToArray(_useState, 2),
467
+ loaded = _useState2[0],
468
+ setLoaded = _useState2[1];
469
+
470
+ var _useState3 = useState(initialMuted ? 0 : 1),
471
+ _useState4 = _slicedToArray(_useState3, 2),
472
+ volume = _useState4[0],
473
+ setVolumeState = _useState4[1];
474
+
475
+ var _useState5 = useState({
476
+ playing: false,
477
+ paused: false,
478
+ ended: false,
479
+ buffering: false
480
+ }),
481
+ _useState6 = _slicedToArray(_useState5, 2),
482
+ playState = _useState6[0],
483
+ setPlayState = _useState6[1];
484
+
485
+ var _useState7 = useState({
486
+ width: width,
487
+ height: height,
488
+ duration: duration
489
+ }),
490
+ _useState8 = _slicedToArray(_useState7, 2),
491
+ metadata = _useState8[0],
492
+ setMetadata = _useState8[1];
493
+
494
+ var play = useCallback(function () {
495
+ var player = elementRef.current;
496
+ return player !== null ? player.play() : Promise.reject(noPlayerError$1);
497
+ }, []);
498
+ var pause = useCallback(function () {
499
+ var player = elementRef.current;
500
+ return player !== null ? player.pause() : Promise.reject(noPlayerError$1);
501
+ }, []);
502
+ var setVolume = useCallback(function (newVolume) {
503
+ var player = elementRef.current;
504
+
505
+ if (player !== null) {
506
+ player.volume = newVolume;
507
+ return Promise.resolve(newVolume);
508
+ }
509
+
510
+ return Promise.reject(noPlayerError$1);
511
+ }, []);
512
+ var mute = useCallback(function () {
513
+ var player = elementRef.current;
514
+
515
+ if (player !== null) {
516
+ player.muted = true;
517
+ return Promise.resolve(true);
518
+ }
519
+
520
+ return Promise.reject(noPlayerError$1);
521
+ }, []);
522
+ var unmute = useCallback(function () {
523
+ var player = elementRef.current;
524
+
525
+ if (player !== null) {
526
+ player.muted = false;
527
+ return Promise.resolve(false);
528
+ }
529
+
530
+ return Promise.reject(noPlayerError$1);
531
+ }, []);
532
+ var seek = useCallback(function (newTime) {
533
+ var player = elementRef.current;
534
+
535
+ if (player !== null) {
536
+ player.currentTime = newTime;
537
+ return Promise.resolve(newTime);
538
+ }
539
+
540
+ return Promise.reject(noPlayerError$1);
541
+ }, []);
542
+ var setLoop = useCallback(function (newLoop) {
543
+ var player = elementRef.current;
544
+
545
+ if (player !== null) {
546
+ player.loop = newLoop;
547
+ return Promise.resolve(newLoop);
548
+ }
549
+
550
+ return Promise.reject(noPlayerError$1);
551
+ }, []); // Bind player events
552
+
553
+ useEffect(function () {
554
+ var player = elementRef.current;
555
+
556
+ if (player === null) {
557
+ return function () {};
558
+ }
559
+
560
+ var onCanPlay = function onCanPlay() {
561
+ setLoaded(true);
562
+ debug$2('onCanPlay [URL: %s]', url);
563
+ };
564
+
565
+ var onMetadataLoaded = function onMetadataLoaded() {
566
+ var newMetadata = {
567
+ duration: player.duration,
568
+ width: player.videoWidth,
569
+ height: player.videoHeight
570
+ };
571
+ setMetadata(newMetadata);
572
+ debug$2('onMetadataLoaded [URL: %s]', url);
573
+ };
574
+
575
+ var onPlay = function onPlay() {
576
+ setPlayState({
577
+ playing: true,
578
+ paused: false,
579
+ ended: false,
580
+ buffering: false
581
+ });
582
+ debug$2('onPlay [URL: %s]', url);
583
+ };
584
+
585
+ var onPause = function onPause() {
586
+ setPlayState({
587
+ playing: false,
588
+ paused: true,
589
+ ended: false,
590
+ buffering: false
591
+ });
592
+ debug$2('onPause [URL: %s]', url);
593
+ };
594
+
595
+ var onEnded = function onEnded() {
596
+ setPlayState({
597
+ playing: false,
598
+ paused: false,
599
+ ended: true,
600
+ buffering: false
601
+ });
602
+ debug$2('onEnded [URL: %s]', url);
603
+ };
604
+
605
+ debug$2('Bind events [URL: %s]', url);
606
+ player.addEventListener('canplay', onCanPlay);
607
+ player.addEventListener('metadataloaded', onMetadataLoaded);
608
+ player.addEventListener('play', onPlay);
609
+ player.addEventListener('pause', onPause);
610
+ player.addEventListener('ended', onEnded);
611
+ return function () {
612
+ debug$2('Unbind events [URL: %s]', url);
613
+ player.removeEventListener('canplay', onCanPlay);
614
+ player.removeEventListener('metadataloaded', onMetadataLoaded);
615
+ player.removeEventListener('play', onPlay);
616
+ player.removeEventListener('pause', onPause);
617
+ player.removeEventListener('ended', onEnded);
618
+ };
619
+ }, [url, elementRef.current, setPlayState, setMetadata, setVolumeState, setLoaded]);
620
+ var playing = playState.playing;
621
+ var currentTime = usePlayerCurrentTime(elementRef.current, {
622
+ id: url,
623
+ disabled: !playing || timeUpdateInterval === null,
624
+ updateInterval: timeUpdateInterval,
625
+ onUpdate: customOnTimeUpdate
626
+ });
627
+ return _objectSpread$3(_objectSpread$3({
628
+ ref: elementRef,
629
+ player: elementRef.current,
630
+ play: play,
631
+ pause: pause,
632
+ mute: mute,
633
+ unmute: unmute,
634
+ setVolume: setVolume,
635
+ seek: seek,
636
+ setLoop: setLoop,
637
+ ready: true,
638
+ currentTime: currentTime,
639
+ loaded: loaded,
640
+ muted: volume === 0,
641
+ volume: volume
642
+ }, metadata), playState);
643
+ };
644
+
645
+ function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
646
+
647
+ function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
64
648
  var observersCache = new Map();
65
649
 
66
650
  var getOptionsKey = function getOptionsKey(_ref) {
@@ -83,7 +667,7 @@ var createObserver = function createObserver(Observer) {
83
667
 
84
668
  if (currentSubscriber !== null) {
85
669
  return subscribers.map(function (it) {
86
- return it.element === element && it.callbacks.indexOf(callback) === -1 ? _objectSpread(_objectSpread({}, it), {}, {
670
+ return it.element === element && it.callbacks.indexOf(callback) === -1 ? _objectSpread$2(_objectSpread$2({}, it), {}, {
87
671
  callbacks: [].concat(_toConsumableArray(it.callbacks), [callback])
88
672
  }) : it;
89
673
  }).filter(function (it) {
@@ -99,7 +683,7 @@ var createObserver = function createObserver(Observer) {
99
683
 
100
684
  var removeSubscriber = function removeSubscriber(element, callback) {
101
685
  return subscribers.map(function (it) {
102
- return it.element === element ? _objectSpread(_objectSpread({}, it), {}, {
686
+ return it.element === element ? _objectSpread$2(_objectSpread$2({}, it), {}, {
103
687
  callbacks: it.callbacks.filter(function (subCallback) {
104
688
  return subCallback !== callback;
105
689
  })
@@ -298,4 +882,727 @@ var useResizeObserver = function useResizeObserver() {
298
882
  }, resizeObserverInitialEntry);
299
883
  };
300
884
 
301
- export { getObserver, useDocumentEvent, useIntersectionObserver, useKeyboard, useObserver, useResizeObserver, useWindowEvent };
885
+ function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
886
+
887
+ function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
888
+ var NO_PLAYER_ERROR = new Error('No player');
889
+
890
+ var getYoutubeVideoId = function getYoutubeVideoId(url) {
891
+ var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&?]*).*/;
892
+ var match = url.match(regExp);
893
+ return match && match[7].length === 11 ? match[7] : false;
894
+ };
895
+
896
+ var debug$1 = createDebug('folklore:video:youtube');
897
+ var isVideoId$1 = function isVideoId(url) {
898
+ return url !== null && url.match(/^https?:/) === null;
899
+ };
900
+
901
+ var getVideoId$1 = function getVideoId(url) {
902
+ if (url === null) {
903
+ return null;
904
+ }
905
+
906
+ if (isVideoId$1(url)) {
907
+ return url;
908
+ }
909
+
910
+ return getYoutubeVideoId(url);
911
+ };
912
+
913
+ function useYouTubePlayer(id) {
914
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
915
+ _ref$width = _ref.width,
916
+ width = _ref$width === void 0 ? 0 : _ref$width,
917
+ _ref$height = _ref.height,
918
+ height = _ref$height === void 0 ? 0 : _ref$height,
919
+ _ref$duration = _ref.duration,
920
+ duration = _ref$duration === void 0 ? 0 : _ref$duration,
921
+ _ref$autoplay = _ref.autoplay,
922
+ autoplay = _ref$autoplay === void 0 ? false : _ref$autoplay,
923
+ _ref$controls = _ref.controls,
924
+ controls = _ref$controls === void 0 ? true : _ref$controls,
925
+ _ref$timeUpdateInterv = _ref.timeUpdateInterval,
926
+ timeUpdateInterval = _ref$timeUpdateInterv === void 0 ? 1000 : _ref$timeUpdateInterv,
927
+ _ref$muted = _ref.muted,
928
+ initialMuted = _ref$muted === void 0 ? false : _ref$muted,
929
+ _ref$onVolumeChange = _ref.onVolumeChange,
930
+ customOnVolumeChange = _ref$onVolumeChange === void 0 ? null : _ref$onVolumeChange,
931
+ _ref$onTimeUpdate = _ref.onTimeUpdate,
932
+ customOnTimeUpdate = _ref$onTimeUpdate === void 0 ? null : _ref$onTimeUpdate;
933
+
934
+ var _useState = useState(typeof window.YT !== 'undefined'),
935
+ _useState2 = _slicedToArray(_useState, 2),
936
+ apiLoaded = _useState2[0],
937
+ setApiLoaded = _useState2[1];
938
+
939
+ var apiRef = useRef(typeof window.YT !== 'undefined' ? window.YT : null);
940
+ var elementRef = useRef(null);
941
+ var playerRef = useRef(null);
942
+ var playerElementRef = useRef(elementRef.current);
943
+ var videoId = useMemo(function () {
944
+ return getVideoId$1(id);
945
+ }, [id]);
946
+
947
+ var _useState3 = useState(false),
948
+ _useState4 = _slicedToArray(_useState3, 2),
949
+ ready = _useState4[0],
950
+ setReady = _useState4[1];
951
+
952
+ var _useState5 = useState(initialMuted),
953
+ _useState6 = _slicedToArray(_useState5, 2),
954
+ muted = _useState6[0],
955
+ setMuted = _useState6[1];
956
+
957
+ var _useState7 = useState({
958
+ playing: false,
959
+ paused: false,
960
+ ended: false,
961
+ buffering: false
962
+ }),
963
+ _useState8 = _slicedToArray(_useState7, 2),
964
+ playState = _useState8[0],
965
+ setPlayState = _useState8[1];
966
+
967
+ var _useState9 = useState({
968
+ width: width,
969
+ height: height,
970
+ duration: duration
971
+ }),
972
+ _useState10 = _slicedToArray(_useState9, 2),
973
+ metadata = _useState10[0],
974
+ setMetadata = _useState10[1];
975
+
976
+ useEffect(function () {
977
+ var canceled = false;
978
+
979
+ if (!apiLoaded && videoId !== null) {
980
+ loadYouTube().then(function (api) {
981
+ if (!canceled) {
982
+ apiRef.current = api;
983
+ setApiLoaded(true);
984
+ debug$1('API Loaded');
985
+ }
986
+ });
987
+ }
988
+
989
+ return function () {
990
+ canceled = true;
991
+ };
992
+ }, [apiLoaded, videoId, setApiLoaded]);
993
+ var play = useCallback(function () {
994
+ var player = playerRef.current;
995
+ return player !== null && typeof player.playVideo !== 'undefined' ? Promise.resolve(player.playVideo()) : Promise.reject(NO_PLAYER_ERROR);
996
+ }, []);
997
+ var pause = useCallback(function () {
998
+ var player = playerRef.current;
999
+ return player !== null && typeof player.pauseVideo !== 'undefined' ? Promise.resolve(player.pauseVideo()) : Promise.reject(NO_PLAYER_ERROR);
1000
+ }, []);
1001
+ var setVolume = useCallback(function (volume) {
1002
+ var player = playerRef.current;
1003
+ var promise = player !== null && typeof player.setVolume !== 'undefined' ? Promise.resolve(player.setVolume(volume * 100)) : Promise.reject(NO_PLAYER_ERROR);
1004
+
1005
+ if (customOnVolumeChange) {
1006
+ customOnVolumeChange(volume);
1007
+ }
1008
+
1009
+ return promise;
1010
+ }, [customOnVolumeChange]);
1011
+ var mute = useCallback(function () {
1012
+ var player = playerRef.current;
1013
+ return (player !== null && typeof player.mute !== 'undefined' ? Promise.resolve(player.mute()) : Promise.reject(NO_PLAYER_ERROR)).then(function () {
1014
+ return setMuted(true);
1015
+ });
1016
+ }, [setMuted]);
1017
+ var unmute = useCallback(function () {
1018
+ var player = playerRef.current;
1019
+ return (player !== null && typeof player.unMute !== 'undefined' ? Promise.resolve(player.unMute()) : Promise.reject(NO_PLAYER_ERROR)).then(function () {
1020
+ return setMuted(false);
1021
+ });
1022
+ }, []);
1023
+ var seek = useCallback(function (time) {
1024
+ var player = playerRef.current;
1025
+ return player !== null && typeof player.seekTo !== 'undefined' ? Promise.resolve(player.seekTo(time)) : Promise.reject(NO_PLAYER_ERROR);
1026
+ }, []);
1027
+ var setLoop = useCallback(function (loop) {
1028
+ var player = playerRef.current;
1029
+ return player !== null && typeof player.setLoop !== 'undefined' ? Promise.resolve(player.setLoop(loop)) : Promise.reject(NO_PLAYER_ERROR);
1030
+ }, []);
1031
+ var destroyPlayer = useCallback(function () {
1032
+ if (playerRef.current !== null) {
1033
+ debug$1('Unset player');
1034
+ playerRef.current = null;
1035
+ }
1036
+ }, []); // Detect iframe switch and destroy player
1037
+
1038
+ useEffect(function () {
1039
+ var currentPlayer = playerRef.current;
1040
+
1041
+ if (playerElementRef.current !== elementRef.current && currentPlayer !== null) {
1042
+ debug$1('iFrame switched');
1043
+ destroyPlayer();
1044
+ }
1045
+ }); // Create player
1046
+
1047
+ useEffect(function () {
1048
+ var _apiRef$current = apiRef.current,
1049
+ YT = _apiRef$current === void 0 ? null : _apiRef$current;
1050
+ var _playerRef$current = playerRef.current,
1051
+ currentPlayer = _playerRef$current === void 0 ? null : _playerRef$current;
1052
+ var _elementRef$current = elementRef.current,
1053
+ element = _elementRef$current === void 0 ? null : _elementRef$current;
1054
+
1055
+ if (!apiLoaded || videoId === null || element === null) {
1056
+ destroyPlayer();
1057
+ return;
1058
+ }
1059
+
1060
+ var player = currentPlayer;
1061
+
1062
+ if (player !== null) {
1063
+ debug$1('Switch video [ID: %s]', videoId);
1064
+ player.loadVideoById(videoId);
1065
+ } else {
1066
+ debug$1('Create player [ID: %s]', videoId);
1067
+ var iframe = elementRef.current;
1068
+
1069
+ var onReady = function onReady(_ref2) {
1070
+ var target = _ref2.target;
1071
+ player = target;
1072
+ playerRef.current = target;
1073
+ setReady(true);
1074
+ var newDuration = target.getDuration();
1075
+
1076
+ if (newDuration !== metadata.duration) {
1077
+ setMetadata(_objectSpread$1(_objectSpread$1({}, metadata), {}, {
1078
+ duration: newDuration
1079
+ }));
1080
+ }
1081
+
1082
+ debug$1('onReady [ID: %s]', videoId);
1083
+ };
1084
+
1085
+ var onStateChange = function onStateChange(_ref3) {
1086
+ var state = _ref3.data;
1087
+ var newState = {
1088
+ playing: state === YT.PlayerState.PLAYING,
1089
+ paused: state === YT.PlayerState.PAUSED,
1090
+ ended: state === YT.PlayerState.ENDED,
1091
+ buffering: state === YT.PlayerState.BUFFERING
1092
+ };
1093
+ setPlayState(newState);
1094
+ var stateLabel = null;
1095
+
1096
+ if (newState.playing) {
1097
+ stateLabel = 'playing';
1098
+ } else if (newState.paused) {
1099
+ stateLabel = 'paused';
1100
+ } else if (newState.ended) {
1101
+ stateLabel = 'ended';
1102
+ } else if (newState.buffering) {
1103
+ stateLabel = 'buffering';
1104
+ } else if (state === -1) {
1105
+ stateLabel = 'not started';
1106
+ } else if (state === 0) {
1107
+ stateLabel = 'stopped';
1108
+ }
1109
+
1110
+ debug$1('onStateChange %s [ID: %s]', stateLabel, videoId);
1111
+ };
1112
+
1113
+ player = new YT.Player(iframe, {
1114
+ videoId: videoId,
1115
+ playerVars: {
1116
+ controls: controls,
1117
+ autoplay: autoplay ? 1 : 0,
1118
+ mute: initialMuted,
1119
+ playsinline: true,
1120
+ rel: 0,
1121
+ showinfo: 0,
1122
+ modestbranding: 1
1123
+ },
1124
+ events: {
1125
+ onReady: onReady,
1126
+ onStateChange: onStateChange
1127
+ }
1128
+ });
1129
+ playerElementRef.current = iframe;
1130
+ }
1131
+
1132
+ playerRef.current = player;
1133
+ }, [apiLoaded, videoId, setPlayState, setReady, setMetadata, destroyPlayer]);
1134
+ var playing = playState.playing;
1135
+ var getCurrentTime = useCallback(function (p) {
1136
+ return p.getCurrentTime();
1137
+ }, []);
1138
+ var currentTime = usePlayerCurrentTime(playerRef.current, {
1139
+ id: videoId,
1140
+ disabled: !playing || timeUpdateInterval === null,
1141
+ updateInterval: timeUpdateInterval,
1142
+ onUpdate: customOnTimeUpdate,
1143
+ getCurrentTime: getCurrentTime
1144
+ });
1145
+ return _objectSpread$1(_objectSpread$1({
1146
+ ref: elementRef,
1147
+ player: playerRef.current,
1148
+ play: play,
1149
+ pause: pause,
1150
+ mute: mute,
1151
+ unmute: unmute,
1152
+ setVolume: setVolume,
1153
+ seek: seek,
1154
+ setLoop: setLoop,
1155
+ ready: ready,
1156
+ currentTime: currentTime,
1157
+ muted: muted,
1158
+ loaded: ready
1159
+ }, metadata), playState);
1160
+ }
1161
+
1162
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1163
+
1164
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1165
+ var debug = createDebug('folklore:video:vimeo');
1166
+ var isVideoId = function isVideoId(url) {
1167
+ return url !== null && url.match(/^[0-9]+$/);
1168
+ };
1169
+
1170
+ var getVideoId = function getVideoId(url) {
1171
+ if (url === null) {
1172
+ return null;
1173
+ }
1174
+
1175
+ if (isVideoId(url)) {
1176
+ return url;
1177
+ }
1178
+
1179
+ var match = url.match(/\/[0-9]+/);
1180
+ return match !== null ? match[1] : null;
1181
+ };
1182
+
1183
+ var noPlayerError = new Error('No player');
1184
+
1185
+ var useVimeoPlayer = function useVimeoPlayer(id) {
1186
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
1187
+ _ref$width = _ref.width,
1188
+ width = _ref$width === void 0 ? 0 : _ref$width,
1189
+ _ref$height = _ref.height,
1190
+ height = _ref$height === void 0 ? 0 : _ref$height,
1191
+ _ref$duration = _ref.duration,
1192
+ duration = _ref$duration === void 0 ? 0 : _ref$duration,
1193
+ _ref$autoplay = _ref.autoplay,
1194
+ autoplay = _ref$autoplay === void 0 ? false : _ref$autoplay,
1195
+ _ref$autopause = _ref.autopause,
1196
+ autopause = _ref$autopause === void 0 ? true : _ref$autopause,
1197
+ _ref$byline = _ref.byline,
1198
+ byline = _ref$byline === void 0 ? false : _ref$byline,
1199
+ _ref$controls = _ref.controls,
1200
+ controls = _ref$controls === void 0 ? false : _ref$controls,
1201
+ _ref$initialMuted = _ref.initialMuted,
1202
+ initialMuted = _ref$initialMuted === void 0 ? false : _ref$initialMuted,
1203
+ _ref$timeUpdateInterv = _ref.timeUpdateInterval,
1204
+ timeUpdateInterval = _ref$timeUpdateInterv === void 0 ? 1000 : _ref$timeUpdateInterv,
1205
+ _ref$onTimeUpdate = _ref.onTimeUpdate,
1206
+ customOnTimeUpdate = _ref$onTimeUpdate === void 0 ? null : _ref$onTimeUpdate;
1207
+
1208
+ var _useState = useState(false),
1209
+ _useState2 = _slicedToArray(_useState, 2),
1210
+ apiLoaded = _useState2[0],
1211
+ setApiLoaded = _useState2[1];
1212
+
1213
+ var apiRef = useRef(null);
1214
+ var elementRef = useRef(null);
1215
+ var playerRef = useRef(null);
1216
+ var videoId = useMemo(function () {
1217
+ return getVideoId(id);
1218
+ }, [id]);
1219
+
1220
+ var _useState3 = useState(false),
1221
+ _useState4 = _slicedToArray(_useState3, 2),
1222
+ ready = _useState4[0],
1223
+ setReady = _useState4[1];
1224
+
1225
+ var _useState5 = useState(false),
1226
+ _useState6 = _slicedToArray(_useState5, 2),
1227
+ loaded = _useState6[0],
1228
+ setLoaded = _useState6[1];
1229
+
1230
+ var _useState7 = useState(initialMuted ? 0 : 1),
1231
+ _useState8 = _slicedToArray(_useState7, 2),
1232
+ volume = _useState8[0],
1233
+ setVolumeState = _useState8[1];
1234
+
1235
+ var _useState9 = useState({
1236
+ playing: false,
1237
+ paused: false,
1238
+ ended: false,
1239
+ buffering: false
1240
+ }),
1241
+ _useState10 = _slicedToArray(_useState9, 2),
1242
+ playState = _useState10[0],
1243
+ setPlayState = _useState10[1];
1244
+
1245
+ var _useState11 = useState({
1246
+ width: width,
1247
+ height: height,
1248
+ duration: duration
1249
+ }),
1250
+ _useState12 = _slicedToArray(_useState11, 2),
1251
+ metadata = _useState12[0],
1252
+ setMetadata = _useState12[1]; // Load SDK
1253
+
1254
+
1255
+ useEffect(function () {
1256
+ var canceled = false;
1257
+
1258
+ if (!apiLoaded && id !== null) {
1259
+ loadVimeo().then(function (api) {
1260
+ if (!canceled) {
1261
+ apiRef.current = api;
1262
+ setApiLoaded(true);
1263
+ debug('API Loaded');
1264
+ }
1265
+ });
1266
+ }
1267
+
1268
+ return function () {
1269
+ canceled = true;
1270
+ };
1271
+ }, [id]);
1272
+ var play = useCallback(function () {
1273
+ var player = playerRef.current;
1274
+ return player !== null ? player.play() : Promise.reject(noPlayerError);
1275
+ }, []);
1276
+ var pause = useCallback(function () {
1277
+ var player = playerRef.current;
1278
+ return player !== null ? player.pause() : Promise.reject(noPlayerError);
1279
+ }, []);
1280
+ var setVolume = useCallback(function (newVolume) {
1281
+ var player = playerRef.current;
1282
+ return player !== null ? player.setVolume(newVolume) : Promise.reject(noPlayerError);
1283
+ }, []);
1284
+ var mute = useCallback(function () {
1285
+ var player = playerRef.current;
1286
+ return player !== null ? player.setVolume(0) : Promise.reject(noPlayerError);
1287
+ }, []);
1288
+ var unmute = useCallback(function () {
1289
+ var player = playerRef.current;
1290
+ return player !== null ? player.setVolume(1) : Promise.reject(noPlayerError);
1291
+ }, []);
1292
+ var seek = useCallback(function (time) {
1293
+ var player = playerRef.current;
1294
+ return player !== null ? player.setCurrentTime(time) : Promise.reject(noPlayerError);
1295
+ }, []);
1296
+ var setLoop = useCallback(function (loop) {
1297
+ var player = playerRef.current;
1298
+ return player !== null ? player.setLoop(loop) : Promise.reject(noPlayerError);
1299
+ }, []);
1300
+ var destroyVideo = useCallback(function () {
1301
+ var player = playerRef.current;
1302
+
1303
+ if (player !== null) {
1304
+ debug('Unload video');
1305
+ player.unload();
1306
+ }
1307
+
1308
+ if (player !== null) {
1309
+ debug('Unset video');
1310
+ playerRef.current = null;
1311
+ }
1312
+ }, []);
1313
+ var playerElementRef = useRef(elementRef.current);
1314
+ useEffect(function () {
1315
+ var currentPlayer = playerRef.current;
1316
+
1317
+ if (playerElementRef.current !== elementRef.current && currentPlayer !== null) {
1318
+ debug('iFrame switched');
1319
+ destroyVideo();
1320
+ }
1321
+ }); // Create player
1322
+
1323
+ useEffect(function () {
1324
+ var _apiRef$current = apiRef.current,
1325
+ Player = _apiRef$current === void 0 ? null : _apiRef$current;
1326
+ var _playerRef$current = playerRef.current,
1327
+ currentPlayer = _playerRef$current === void 0 ? null : _playerRef$current;
1328
+ var _elementRef$current = elementRef.current,
1329
+ element = _elementRef$current === void 0 ? null : _elementRef$current;
1330
+
1331
+ if (!apiLoaded || videoId === null || element === null) {
1332
+ destroyVideo();
1333
+ return;
1334
+ }
1335
+
1336
+ var player = currentPlayer;
1337
+
1338
+ if (player === null) {
1339
+ debug('Create player [ID: %s]', videoId);
1340
+ player = new Player(element, {
1341
+ id: videoId,
1342
+ autoplay: autoplay,
1343
+ autopause: autopause,
1344
+ byline: byline,
1345
+ controls: controls,
1346
+ muted: initialMuted,
1347
+ background: !controls
1348
+ });
1349
+ player.ready().then(function () {
1350
+ return setReady(true);
1351
+ }).catch(function (e) {
1352
+ debug('ERROR: %o', e);
1353
+ });
1354
+ playerElementRef.current = element;
1355
+ } else {
1356
+ debug('Load video [ID: %s]', videoId);
1357
+ player.loadVideo(videoId).catch(function (e) {
1358
+ debug('ERROR: %o', e);
1359
+ });
1360
+ }
1361
+
1362
+ playerRef.current = player;
1363
+ }, [apiLoaded, videoId, setReady, destroyVideo, setLoaded]); // Bind player events
1364
+
1365
+ useEffect(function () {
1366
+ var player = playerRef.current;
1367
+
1368
+ if (player === null) {
1369
+ return function () {};
1370
+ }
1371
+
1372
+ var canceled = false;
1373
+
1374
+ var onLoaded = function onLoaded() {
1375
+ Promise.all([player.getDuration(), player.getVideoWidth(), player.getVideoHeight(), player.getMuted()]).then(function (_ref2) {
1376
+ var _ref3 = _slicedToArray(_ref2, 4),
1377
+ newDuration = _ref3[0],
1378
+ newWidth = _ref3[1],
1379
+ newHeight = _ref3[2],
1380
+ newMuted = _ref3[3];
1381
+
1382
+ if (canceled) {
1383
+ return;
1384
+ }
1385
+
1386
+ var newMetadata = {
1387
+ duration: newDuration,
1388
+ width: newWidth,
1389
+ height: newHeight
1390
+ };
1391
+ setMetadata(newMetadata);
1392
+
1393
+ if (newMuted) {
1394
+ setVolumeState(0);
1395
+ }
1396
+
1397
+ setLoaded(true);
1398
+ });
1399
+ debug('onLoaded [ID: %s]', videoId);
1400
+ };
1401
+
1402
+ var onPlay = function onPlay() {
1403
+ setPlayState({
1404
+ playing: true,
1405
+ paused: false,
1406
+ ended: false,
1407
+ buffering: false
1408
+ });
1409
+ debug('onPlay [ID: %s]', videoId);
1410
+ player.getMuted().then(function (newMuted) {
1411
+ if (!canceled && newMuted) {
1412
+ setVolumeState(0);
1413
+ }
1414
+ }).catch(function () {});
1415
+ };
1416
+
1417
+ var onPause = function onPause() {
1418
+ setPlayState({
1419
+ playing: false,
1420
+ paused: true,
1421
+ ended: false,
1422
+ buffering: false
1423
+ });
1424
+ debug('onPause [ID: %s]', videoId);
1425
+ };
1426
+
1427
+ var onVolumeChange = function onVolumeChange(_ref4) {
1428
+ var newVolume = _ref4.volume;
1429
+ return setVolumeState(newVolume);
1430
+ };
1431
+
1432
+ var onEnded = function onEnded() {
1433
+ setPlayState({
1434
+ playing: false,
1435
+ paused: false,
1436
+ ended: true,
1437
+ buffering: false
1438
+ });
1439
+ };
1440
+
1441
+ var onBufferStart = function onBufferStart() {
1442
+ setPlayState({
1443
+ playing: true,
1444
+ paused: false,
1445
+ ended: false,
1446
+ buffering: true
1447
+ });
1448
+ debug('onBufferStart [ID: %s]', videoId);
1449
+ };
1450
+
1451
+ var onBufferEnded = function onBufferEnded() {
1452
+ setPlayState({
1453
+ playing: true,
1454
+ paused: false,
1455
+ ended: false,
1456
+ buffering: false
1457
+ });
1458
+ debug('onBufferStart [ID: %s]', videoId);
1459
+ };
1460
+
1461
+ debug('Bind events [ID: %s]', videoId);
1462
+ player.on('loaded', onLoaded);
1463
+ player.on('play', onPlay);
1464
+ player.on('pause', onPause);
1465
+ player.on('volumechange', onVolumeChange);
1466
+ player.on('ended', onEnded);
1467
+ player.on('bufferstart', onBufferStart);
1468
+ player.on('bufferend', onBufferEnded);
1469
+ return function () {
1470
+ canceled = true;
1471
+ debug('Unbind events [ID: %s]', videoId);
1472
+ player.off('loaded', onLoaded);
1473
+ player.off('play', onPlay);
1474
+ player.off('pause', onPause);
1475
+ player.off('volumechange', onVolumeChange);
1476
+ player.off('ended', onEnded);
1477
+ player.off('bufferstart', onBufferStart);
1478
+ player.off('bufferend', onBufferEnded);
1479
+ };
1480
+ }, [videoId, playerRef.current, setPlayState, setMetadata, setVolumeState, setLoaded]);
1481
+ var playing = playState.playing;
1482
+ var getCurrentTime = useCallback(function (p) {
1483
+ return p.getCurrentTime();
1484
+ }, []);
1485
+ var currentTime = usePlayerCurrentTime(playerRef.current, {
1486
+ id: videoId,
1487
+ disabled: !playing || timeUpdateInterval === null,
1488
+ updateInterval: timeUpdateInterval,
1489
+ onUpdate: customOnTimeUpdate,
1490
+ getCurrentTime: getCurrentTime
1491
+ });
1492
+ return _objectSpread(_objectSpread({
1493
+ ref: elementRef,
1494
+ player: playerRef.current,
1495
+ play: play,
1496
+ pause: pause,
1497
+ mute: mute,
1498
+ unmute: unmute,
1499
+ setVolume: setVolume,
1500
+ seek: seek,
1501
+ setLoop: setLoop,
1502
+ ready: ready,
1503
+ currentTime: currentTime,
1504
+ loaded: loaded,
1505
+ muted: volume === 0,
1506
+ volume: volume
1507
+ }, metadata), playState);
1508
+ };
1509
+
1510
+ function useVideoPlayer(params) {
1511
+ var _ref = params || {},
1512
+ _ref$service = _ref.service,
1513
+ service = _ref$service === void 0 ? null : _ref$service,
1514
+ _ref$videoId = _ref.videoId,
1515
+ videoId = _ref$videoId === void 0 ? null : _ref$videoId,
1516
+ _ref$url = _ref.url,
1517
+ url = _ref$url === void 0 ? null : _ref$url,
1518
+ _ref$onLoaded = _ref.onLoaded,
1519
+ customOnLoaded = _ref$onLoaded === void 0 ? null : _ref$onLoaded,
1520
+ _ref$onPlay = _ref.onPlay,
1521
+ customOnPlay = _ref$onPlay === void 0 ? null : _ref$onPlay,
1522
+ _ref$onPause = _ref.onPause,
1523
+ customOnPause = _ref$onPause === void 0 ? null : _ref$onPause,
1524
+ _ref$onEnd = _ref.onEnd,
1525
+ customOnEnd = _ref$onEnd === void 0 ? null : _ref$onEnd,
1526
+ _ref$onMetadataChange = _ref.onMetadataChange,
1527
+ customOnMetadataChange = _ref$onMetadataChange === void 0 ? null : _ref$onMetadataChange,
1528
+ _ref$onBufferStart = _ref.onBufferStart,
1529
+ customOnBufferStart = _ref$onBufferStart === void 0 ? null : _ref$onBufferStart,
1530
+ _ref$onBufferEnded = _ref.onBufferEnded,
1531
+ customOnBufferEnded = _ref$onBufferEnded === void 0 ? null : _ref$onBufferEnded;
1532
+
1533
+ var dailymotionPlayer = useDailymotionPlayer(service === 'dailymotion' ? videoId || url : null, params);
1534
+ var youtubePlayer = useYouTubePlayer(service === 'youtube' ? videoId || url : null, params);
1535
+ var vimeoPlayer = useVimeoPlayer(service === 'vimeo' ? videoId || url : null, params);
1536
+ var nativePlayer = useNativeVideoPlayer(url, params);
1537
+ var player = null;
1538
+
1539
+ if (service === 'dailymotion') {
1540
+ player = dailymotionPlayer;
1541
+ } else if (service === 'youtube') {
1542
+ player = youtubePlayer;
1543
+ } else if (service === 'vimeo') {
1544
+ player = vimeoPlayer;
1545
+ } else {
1546
+ player = nativePlayer;
1547
+ }
1548
+
1549
+ var _ref2 = player || {},
1550
+ _ref2$playing = _ref2.playing,
1551
+ playing = _ref2$playing === void 0 ? false : _ref2$playing,
1552
+ _ref2$paused = _ref2.paused,
1553
+ paused = _ref2$paused === void 0 ? false : _ref2$paused,
1554
+ _ref2$buffering = _ref2.buffering,
1555
+ buffering = _ref2$buffering === void 0 ? false : _ref2$buffering,
1556
+ _ref2$ended = _ref2.ended,
1557
+ ended = _ref2$ended === void 0 ? false : _ref2$ended,
1558
+ _ref2$ready = _ref2.ready,
1559
+ ready = _ref2$ready === void 0 ? false : _ref2$ready,
1560
+ _ref2$width = _ref2.width,
1561
+ metaWidth = _ref2$width === void 0 ? null : _ref2$width,
1562
+ _ref2$height = _ref2.height,
1563
+ metaHeight = _ref2$height === void 0 ? null : _ref2$height,
1564
+ _ref2$duration = _ref2.duration,
1565
+ metaDuration = _ref2$duration === void 0 ? null : _ref2$duration;
1566
+
1567
+ useEffect(function () {
1568
+ if (ready && customOnLoaded !== null) {
1569
+ customOnLoaded();
1570
+ }
1571
+ }, [ready, customOnLoaded]);
1572
+ useEffect(function () {
1573
+ if (playing && customOnPlay !== null) {
1574
+ customOnPlay();
1575
+ }
1576
+ }, [playing, customOnPlay]);
1577
+ useEffect(function () {
1578
+ if (paused && customOnPause !== null) {
1579
+ customOnPause();
1580
+ }
1581
+ }, [paused, customOnPause]);
1582
+ useEffect(function () {
1583
+ if (buffering && customOnBufferStart !== null) {
1584
+ customOnBufferStart();
1585
+ } else if (!buffering && customOnBufferEnded !== null) {
1586
+ customOnBufferEnded();
1587
+ }
1588
+ }, [buffering, customOnBufferStart, customOnBufferEnded]);
1589
+ useEffect(function () {
1590
+ if (ended && customOnEnd !== null) {
1591
+ customOnEnd();
1592
+ }
1593
+ }, [ended, customOnEnd]);
1594
+ useEffect(function () {
1595
+ var hasMetadata = metaWidth !== null || metaHeight !== null || metaDuration !== null;
1596
+
1597
+ if (hasMetadata && customOnMetadataChange !== null) {
1598
+ customOnMetadataChange({
1599
+ width: metaWidth,
1600
+ height: metaHeight,
1601
+ duration: metaDuration
1602
+ });
1603
+ }
1604
+ }, [metaWidth, metaHeight, metaDuration, customOnMetadataChange]);
1605
+ return player;
1606
+ }
1607
+
1608
+ export { getObserver, useDailymotionPlayer, useDocumentEvent, useIntersectionObserver, useKeyboard, useNativeVideoPlayer, useObserver, usePlayerCurrentTime, useResizeObserver, useVideoPlayer, useVimeoPlayer, useWindowEvent, useYouTubePlayer };