@micromag/element-audio 0.3.531 → 0.3.547

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 (2) hide show
  1. package/package.json +5 -6
  2. package/lib/index.js +0 -623
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@micromag/element-audio",
3
- "version": "0.3.531",
3
+ "version": "0.3.547",
4
4
  "private": false,
5
5
  "description": "",
6
6
  "keywords": [
@@ -30,11 +30,10 @@
30
30
  }
31
31
  ],
32
32
  "license": "ISC",
33
- "main": "lib/index.js",
33
+ "type": "module",
34
34
  "module": "es/index.js",
35
35
  "exports": {
36
36
  ".": {
37
- "require": "./lib/index.js",
38
37
  "import": "./es/index.js"
39
38
  },
40
39
  "./assets/css/styles": "./assets/css/styles.css",
@@ -60,8 +59,8 @@
60
59
  },
61
60
  "dependencies": {
62
61
  "@babel/runtime": "^7.13.10",
63
- "@micromag/core": "^0.3.531",
64
- "@micromag/element-closed-captions": "^0.3.531",
62
+ "@micromag/core": "^0.3.547",
63
+ "@micromag/element-closed-captions": "^0.3.547",
65
64
  "@react-spring/core": "^9.6.1",
66
65
  "@react-spring/web": "^9.6.1",
67
66
  "@use-gesture/react": "^10.3.0",
@@ -75,5 +74,5 @@
75
74
  "access": "public",
76
75
  "registry": "https://registry.npmjs.org/"
77
76
  },
78
- "gitHead": "e3a59c467ad33528b38eb4badd78b6ed0e38a3a6"
77
+ "gitHead": "3c2f5904ce61fcfa61f673c38c2a5ec56e9e2b07"
79
78
  }
package/lib/index.js DELETED
@@ -1,623 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var _defineProperty = require('@babel/runtime/helpers/defineProperty');
6
- var classNames = require('classnames');
7
- var isFunction = require('lodash/isFunction');
8
- var isNumber = require('lodash/isNumber');
9
- var PropTypes = require('prop-types');
10
- var React = require('react');
11
- var core = require('@micromag/core');
12
- var hooks = require('@micromag/core/hooks');
13
- var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
14
- var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
15
- var react = require('@use-gesture/react');
16
- var reactIntl = require('react-intl');
17
- var core$1 = require('@react-spring/core');
18
- var web = require('@react-spring/web');
19
- var utils = require('@micromag/core/utils');
20
-
21
- var styles$2 = {"container":"micromag-element-audio-audio-bars-container","seekButton":"micromag-element-audio-audio-bars-seekButton"};
22
-
23
- var propTypes$2 = {
24
- progress: PropTypes.number,
25
- duration: PropTypes.number,
26
- playing: PropTypes.bool,
27
- seek: PropTypes.func,
28
- play: PropTypes.func,
29
- // onReady: PropTypes.func,
30
- className: PropTypes.string
31
- };
32
- var defaultProps$2 = {
33
- progress: 0,
34
- duration: 0,
35
- playing: false,
36
- seek: null,
37
- play: null,
38
- // onReady: null,
39
- className: null
40
- };
41
- function AudioBars(_ref) {
42
- var progress = _ref.progress,
43
- playing = _ref.playing,
44
- duration = _ref.duration,
45
- seek = _ref.seek,
46
- play = _ref.play,
47
- className = _ref.className;
48
- var intl = reactIntl.useIntl();
49
- var _useDimensionObserver = hooks.useDimensionObserver(),
50
- elRef = _useDimensionObserver.ref,
51
- _useDimensionObserver2 = _useDimensionObserver.width,
52
- elWidth = _useDimensionObserver2 === void 0 ? null : _useDimensionObserver2,
53
- elHeight = _useDimensionObserver.height;
54
- var barWidth = 1;
55
- var barGap = 1;
56
- var barSize = barWidth + barGap;
57
- var current = progress * elWidth;
58
- var _useState = React.useState(null),
59
- _useState2 = _slicedToArray(_useState, 2),
60
- currentSeek = _useState2[0],
61
- setCurrentSeek = _useState2[1];
62
- var items = React.useMemo(function () {
63
- var count = Math.floor(elWidth / barSize);
64
- return _toConsumableArray(Array(count).keys()).map(function () {
65
- return Math.floor(Math.random() * 100);
66
- });
67
- }, [elWidth, barSize]);
68
- var seekFromX = React.useCallback(function () {
69
- var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
70
- if (x === null) {
71
- return;
72
- }
73
- var _elRef$current$getBou = elRef.current.getBoundingClientRect(),
74
- elX = _elRef$current$getBou.left,
75
- width = _elRef$current$getBou.width;
76
- var distance = Math.max(0, Math.min(1, (x - elX) / width));
77
- if (seek !== null && duration !== null) {
78
- seek(parseFloat(distance * duration, 10));
79
- }
80
- if (!playing && play != null) {
81
- play();
82
- }
83
- }, [elRef.current, elWidth, duration, playing, seek, play]);
84
- var seekTemporary = React.useCallback(function (x) {
85
- var _elRef$current$getBou2 = elRef.current.getBoundingClientRect(),
86
- elX = _elRef$current$getBou2.left,
87
- width = _elRef$current$getBou2.width;
88
- var distance = Math.max(0, Math.min(1, (x - elX) / width));
89
- setCurrentSeek(distance * elWidth);
90
- }, [elRef.current, elWidth, setCurrentSeek]);
91
- var onClick = React.useCallback(function (e) {
92
- if (e) {
93
- seekFromX(e.clientX || null);
94
- setCurrentSeek(null);
95
- }
96
- }, [seekFromX, setCurrentSeek]);
97
- var bind = react.useGesture({
98
- onDrag: function onDrag(_ref2) {
99
- var _ref2$xy = _slicedToArray(_ref2.xy, 1),
100
- x = _ref2$xy[0],
101
- elapsedTime = _ref2.elapsedTime,
102
- active = _ref2.active;
103
- if (!active && elapsedTime > 300) {
104
- return;
105
- }
106
- seekTemporary(x);
107
- },
108
- onDragStart: function onDragStart(_ref3) {
109
- var _ref3$xy = _slicedToArray(_ref3.xy, 1),
110
- x = _ref3$xy[0],
111
- elapsedTime = _ref3.elapsedTime,
112
- active = _ref3.active;
113
- if (!active && elapsedTime > 300) {
114
- return;
115
- }
116
- seekTemporary(x);
117
- },
118
- onDragEnd: function onDragEnd(_ref4) {
119
- var _ref4$xy = _slicedToArray(_ref4.xy, 1),
120
- x = _ref4$xy[0];
121
- seekFromX(x);
122
- setTimeout(function () {
123
- setCurrentSeek(null);
124
- }, 1000);
125
- }
126
- }, {
127
- drag: {
128
- axis: 'x',
129
- filterTaps: true
130
- }
131
- });
132
- return /*#__PURE__*/React.createElement("div", {
133
- className: classNames([styles$2.container, _defineProperty({}, className, className !== null)]),
134
- ref: elRef
135
- }, /*#__PURE__*/React.createElement("svg", {
136
- version: "1.1",
137
- xmlns: "http://www.w3.org/2000/svg",
138
- xmlnsXlink: "http://www.w3.org/1999/xlink",
139
- x: "0",
140
- y: "0",
141
- width: "".concat(elWidth, "px"),
142
- height: "".concat(elHeight, "px"),
143
- viewBox: "0 0 ".concat(elWidth, " ").concat(elHeight),
144
- className: className,
145
- xmlSpace: "preserve"
146
- }, items.map(function (size, i) {
147
- return /*#__PURE__*/React.createElement("rect", {
148
- key: "bar-".concat(i + 1),
149
- width: barWidth,
150
- height: size,
151
- x: i * barSize,
152
- y: elHeight / 2 - size / 2,
153
- fill: (currentSeek || current) > i * barSize ? 'white' : 'gray',
154
- stroke: "black",
155
- strokeWidth: "0px",
156
- strokeLinejoin: "round",
157
- strokeLinecap: "round"
158
- });
159
- })), /*#__PURE__*/React.createElement("button", Object.assign({}, bind(), {
160
- onClick: onClick,
161
- type: "button",
162
- className: styles$2.seekButton,
163
- title: intl.formatMessage({
164
- id: "G1Gyjn",
165
- defaultMessage: [{
166
- "type": 0,
167
- "value": "Seek"
168
- }]
169
- }),
170
- "aria-label": intl.formatMessage({
171
- id: "G1Gyjn",
172
- defaultMessage: [{
173
- "type": 0,
174
- "value": "Seek"
175
- }]
176
- })
177
- })));
178
- }
179
- AudioBars.propTypes = propTypes$2;
180
- AudioBars.defaultProps = defaultProps$2;
181
-
182
- var styles$1 = {"container":"micromag-element-audio-container","wave":"micromag-element-audio-wave","withAutoHeight":"micromag-element-audio-withAutoHeight"};
183
-
184
- var propTypes$1 = {
185
- media: core.PropTypes.audioMedia,
186
- mediaRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({
187
- current: PropTypes.any
188
- })]),
189
- muted: PropTypes.bool,
190
- autoPlay: PropTypes.bool,
191
- paused: PropTypes.bool,
192
- loop: PropTypes.bool,
193
- preload: PropTypes.oneOf(['auto', 'none', 'metadata']),
194
- shouldLoad: PropTypes.bool,
195
- waveFake: PropTypes.bool,
196
- // waveProps: PropTypes.shape({
197
- // sampleWidth: PropTypes.number,
198
- // sampleMargin: PropTypes.number,
199
- // minSampleHeight: PropTypes.number,
200
- // }),
201
- withWave: PropTypes.bool,
202
- autoWaveHeight: PropTypes.bool,
203
- // reduceBufferFactor: PropTypes.number,
204
- updateInterval: PropTypes.number,
205
- className: PropTypes.string,
206
- onReady: PropTypes.func,
207
- onPlay: PropTypes.func,
208
- onPause: PropTypes.func,
209
- onEnded: PropTypes.func,
210
- onSeeked: PropTypes.func,
211
- onTimeUpdate: PropTypes.func,
212
- onProgressStep: PropTypes.func,
213
- onDurationChange: PropTypes.func,
214
- onVolumeChange: PropTypes.func,
215
- onPlayError: PropTypes.func
216
- };
217
- var defaultProps$1 = {
218
- media: null,
219
- mediaRef: null,
220
- muted: false,
221
- autoPlay: false,
222
- paused: false,
223
- loop: false,
224
- preload: 'auto',
225
- shouldLoad: true,
226
- waveFake: false,
227
- // waveProps: null,
228
- withWave: false,
229
- autoWaveHeight: false,
230
- // reduceBufferFactor: 100,
231
- updateInterval: 1000,
232
- className: null,
233
- onReady: null,
234
- onPlay: null,
235
- onPause: null,
236
- onEnded: null,
237
- onSeeked: null,
238
- onTimeUpdate: null,
239
- onProgressStep: null,
240
- onDurationChange: null,
241
- onVolumeChange: null,
242
- onPlayError: null
243
- };
244
- var Audio = function Audio(_ref) {
245
- var media = _ref.media,
246
- mediaRef = _ref.mediaRef,
247
- muted = _ref.muted,
248
- autoPlay = _ref.autoPlay,
249
- paused = _ref.paused,
250
- loop = _ref.loop,
251
- preload = _ref.preload,
252
- shouldLoad = _ref.shouldLoad,
253
- waveFake = _ref.waveFake,
254
- withWave = _ref.withWave,
255
- autoWaveHeight = _ref.autoWaveHeight,
256
- updateInterval = _ref.updateInterval,
257
- className = _ref.className,
258
- onReady = _ref.onReady,
259
- onPlay = _ref.onPlay,
260
- onPause = _ref.onPause,
261
- onEnded = _ref.onEnded,
262
- onSeeked = _ref.onSeeked,
263
- onTimeUpdate = _ref.onTimeUpdate,
264
- onProgressStep = _ref.onProgressStep,
265
- customOnDurationChange = _ref.onDurationChange,
266
- customOnVolumeChange = _ref.onVolumeChange,
267
- onPlayError = _ref.onPlayError;
268
- var _ref2 = media || {},
269
- _ref2$url = _ref2.url,
270
- url = _ref2$url === void 0 ? null : _ref2$url;
271
- var _ref4 = React.useRef(null);
272
- var currentTime = hooks.useMediaCurrentTime(_ref4.current, {
273
- id: url,
274
- disabled: paused || !withWave && onProgressStep === null,
275
- updateInterval: updateInterval
276
- });
277
- var ready = hooks.useMediaReady(_ref4.current, {
278
- id: url
279
- });
280
- var duration = hooks.useMediaDuration(_ref4.current, {
281
- id: url
282
- });
283
-
284
- // const audioLevels = useMediaWaveform(media, {
285
- // fake: waveFake,
286
- // reduceBufferFactor,
287
- // });
288
-
289
- hooks.useMediaLoad(_ref4.current, {
290
- preload: preload,
291
- shouldLoad: shouldLoad
292
- });
293
- var waveReady = waveFake || ready;
294
- React.useEffect(function () {
295
- if (duration > 0 && customOnDurationChange !== null) {
296
- customOnDurationChange(duration);
297
- }
298
- }, [duration, customOnDurationChange]);
299
- var onVolumeChange = React.useCallback(function () {
300
- var _ref$current = _ref4.current,
301
- element = _ref$current === void 0 ? null : _ref$current;
302
- if (element === null) {
303
- return;
304
- }
305
- if (customOnVolumeChange !== null) {
306
- customOnVolumeChange(element.volume);
307
- }
308
- }, [_ref4.current, customOnVolumeChange]);
309
- var onWavePlay = React.useCallback(function () {
310
- var _ref$current2 = _ref4.current,
311
- element = _ref$current2 === void 0 ? null : _ref$current2;
312
- if (element === null) {
313
- return;
314
- }
315
- element.play();
316
- }, [_ref4.current]);
317
- var onWaveSeek = React.useCallback(function (newTime) {
318
- var _ref$current3 = _ref4.current,
319
- element = _ref$current3 === void 0 ? null : _ref$current3;
320
- if (element === null) {
321
- return;
322
- }
323
- if (isNumber(newTime)) {
324
- element.currentTime = newTime;
325
- }
326
- }, [_ref4.current]);
327
- React.useEffect(function () {
328
- if (waveReady && onReady !== null) {
329
- onReady();
330
- }
331
- }, [waveReady, onReady]);
332
- React.useEffect(function () {
333
- var _ref$current4 = _ref4.current,
334
- element = _ref$current4 === void 0 ? null : _ref$current4;
335
- if (element === null) {
336
- return;
337
- }
338
- var isPaused = element.paused;
339
- if (paused && !isPaused) {
340
- element.pause();
341
- } else if (!paused && isPaused) {
342
- element.play()["catch"](function (e) {
343
- if (onPlayError !== null) {
344
- onPlayError(e);
345
- }
346
- });
347
- }
348
- }, [paused, media, onPlayError]);
349
- hooks.useProgressSteps({
350
- currentTime: currentTime,
351
- duration: duration,
352
- disabled: paused,
353
- onStep: onProgressStep
354
- });
355
- var progress = currentTime !== null && duration > 0 ? currentTime / duration : 0;
356
- return /*#__PURE__*/React.createElement("div", {
357
- className: classNames([styles$1.container, _defineProperty({}, className, className !== null)])
358
- }, /*#__PURE__*/React.createElement("audio", {
359
- key: url,
360
- ref: function ref(newRef) {
361
- _ref4.current = newRef;
362
- if (mediaRef !== null && isFunction(mediaRef)) {
363
- mediaRef(newRef);
364
- } else if (mediaRef !== null) {
365
- mediaRef.current = newRef;
366
- }
367
- },
368
- src: url,
369
- autoPlay: autoPlay,
370
- muted: muted,
371
- loop: loop,
372
- crossOrigin: "anonymous",
373
- preload: preload,
374
- onPlay: onPlay,
375
- onPause: onPause,
376
- onEnded: onEnded,
377
- onSeeked: onSeeked,
378
- onTimeUpdate: onTimeUpdate,
379
- onVolumeChange: onVolumeChange
380
- }), withWave ? /*#__PURE__*/React.createElement(AudioBars, {
381
- className: classNames([styles$1.wave, _defineProperty({}, styles$1.withAutoHeight, autoWaveHeight)]),
382
- progress: progress
383
- // {...waveProps}
384
- ,
385
- duration: duration,
386
- playing: !paused,
387
- seek: onWaveSeek,
388
- play: onWavePlay
389
- }) : null);
390
- };
391
- Audio.propTypes = propTypes$1;
392
- Audio.defaultProps = defaultProps$1;
393
- var Audio$1 = /*#__PURE__*/React.forwardRef(function (props, ref) {
394
- return /*#__PURE__*/React.createElement(Audio, Object.assign({
395
- mediaRef: ref
396
- }, props));
397
- });
398
-
399
- var styles = {"container":"micromag-element-audio-audio-wave-container","button":"micromag-element-audio-audio-wave-button","canvasBackground":"micromag-element-audio-audio-wave-canvasBackground","canvasProgress":"micromag-element-audio-audio-wave-canvasProgress"};
400
-
401
- var propTypes = {
402
- currentTime: PropTypes.number,
403
- duration: PropTypes.number,
404
- playing: PropTypes.bool,
405
- sampleWidth: PropTypes.number,
406
- sampleMargin: PropTypes.number,
407
- minSampleHeight: PropTypes.number,
408
- backgroundColor: core.PropTypes.color,
409
- progressColor: core.PropTypes.color,
410
- audioLevels: PropTypes.arrayOf(PropTypes.number),
411
- className: PropTypes.string,
412
- onSeek: PropTypes.func,
413
- onResume: PropTypes.func,
414
- onReady: PropTypes.func
415
- };
416
- var defaultProps = {
417
- currentTime: null,
418
- duration: null,
419
- playing: false,
420
- sampleWidth: 3,
421
- sampleMargin: 1,
422
- minSampleHeight: 2,
423
- backgroundColor: 'white',
424
- progressColor: null,
425
- audioLevels: null,
426
- className: null,
427
- onSeek: null,
428
- onResume: null,
429
- onReady: null
430
- };
431
- function AudioWave(_ref) {
432
- var currentTime = _ref.currentTime,
433
- duration = _ref.duration,
434
- playing = _ref.playing,
435
- sampleWidth = _ref.sampleWidth,
436
- sampleMargin = _ref.sampleMargin,
437
- minSampleHeight = _ref.minSampleHeight,
438
- backgroundColor = _ref.backgroundColor,
439
- progressColor = _ref.progressColor,
440
- audioLevels = _ref.audioLevels,
441
- className = _ref.className,
442
- onSeek = _ref.onSeek,
443
- onResume = _ref.onResume,
444
- onReady = _ref.onReady;
445
- var canvasBackgroundRef = React.useRef(null);
446
- var canvasProgressRef = React.useRef(null);
447
- var mainColor = React.useMemo(function () {
448
- var _ref2 = backgroundColor || {},
449
- _ref2$color = _ref2.color,
450
- color = _ref2$color === void 0 ? 'white' : _ref2$color;
451
- return color;
452
- }, [backgroundColor]);
453
- var alternateColor = React.useMemo(function () {
454
- return utils.getContrastingColor(backgroundColor, progressColor);
455
- }, [progressColor, backgroundColor]);
456
- var _useDimensionObserver = hooks.useDimensionObserver(),
457
- elRef = _useDimensionObserver.ref,
458
- _useDimensionObserver2 = _useDimensionObserver.width,
459
- elWidth = _useDimensionObserver2 === void 0 ? null : _useDimensionObserver2,
460
- elHeight = _useDimensionObserver.height;
461
-
462
- // Linear animation for progress bar
463
-
464
- var _useSpring = core$1.useSpring(function () {
465
- return {
466
- x: 0,
467
- config: {
468
- duration: 0
469
- }
470
- };
471
- }),
472
- _useSpring2 = _slicedToArray(_useSpring, 2),
473
- springProps = _useSpring2[0],
474
- setSpringProps = _useSpring2[1];
475
- React.useEffect(function () {
476
- if (currentTime === null || duration === null) {
477
- return;
478
- }
479
- var progress = currentTime / duration;
480
- setSpringProps.start({
481
- reset: true,
482
- immediate: !playing,
483
- from: {
484
- x: progress
485
- },
486
- to: {
487
- x: playing ? 1 : progress
488
- },
489
- config: {
490
- duration: (duration - currentTime) * 1000
491
- }
492
- });
493
- }, [playing, duration, currentTime, setSpringProps]);
494
-
495
- // draw canvas
496
-
497
- React.useEffect(function () {
498
- if (audioLevels === null || audioLevels.length === 0 || elRef.current === null) {
499
- return;
500
- }
501
- var sampleOuterWidth = sampleWidth + sampleMargin * 2;
502
- var samplesCount = Math.floor(elWidth / sampleOuterWidth);
503
-
504
- // const amplitudes = [];
505
-
506
- // get samples
507
-
508
- var levelsBySamples = audioLevels.length / samplesCount;
509
- var amplitudes = _toConsumableArray(Array(samplesCount).keys()).reduce(function (newAmplitudes, index) {
510
- var levelStartIndex = index * levelsBySamples;
511
- var levelEndIndex = levelStartIndex + levelsBySamples;
512
- var newValues = [];
513
- for (var i = Math.floor(levelStartIndex); i < Math.round(levelEndIndex); i += 1) {
514
- newValues.push(audioLevels[i]);
515
- }
516
- return levelsBySamples >= 1 ? [].concat(_toConsumableArray(newAmplitudes), [newValues.reduce(function (total, value) {
517
- return total + value;
518
- }, 0) / newValues.length]) : [].concat(_toConsumableArray(newAmplitudes), newValues);
519
- }, []);
520
-
521
- // for (let sampleI = 0; sampleI < samplesCount; sampleI += levelsBySamples) {
522
- // // if (levelsBySamples >= 1) {
523
- // // const sampleSize = Math.floor(levelsBySamples);
524
- // // const sampleStart = sampleSize * sampleI;
525
- // // let sum = 0;
526
- // // for (let sampleSizeI = 0; sampleSizeI < sampleSize; sampleSizeI += 1) {
527
- // // sum += Math.abs(audioLevels[sampleStart + sampleSizeI]);
528
- // // }
529
- // // amplitudes.push(sum / sampleSize);
530
- // // } else {
531
- // console.log(sampleI);
532
- // amplitudes.push(Math.abs(audioLevels[Math.floor(sampleI)]));
533
- // // for (let sampleSizeI = 0; sampleSizeI < sampleSize; sampleSizeI += 1) {
534
- // // console.log(sampleI, sampleSize);
535
- // // amplitudes.push(Math.abs(audioLevels[sampleI % sampleSize]));
536
- // // }
537
- // // }
538
- // }
539
- var minAmplitude = Math.min.apply(Math, _toConsumableArray(amplitudes));
540
- var maxAmplitude = Math.max.apply(Math, _toConsumableArray(amplitudes));
541
- var delta = maxAmplitude - minAmplitude;
542
- var normalizedAmplitudes = amplitudes.map(function (n) {
543
- return (n - minAmplitude) / delta;
544
- });
545
-
546
- // draw samples
547
- var canvasBg = canvasBackgroundRef.current;
548
- var canvasProgress = canvasProgressRef.current;
549
- var scale = typeof window !== 'undefined' ? window.devicePixelRatio : 1;
550
- canvasBg.width = canvasProgress.width = Math.floor(elWidth * scale);
551
- canvasBg.height = canvasProgress.height = Math.floor(elHeight * scale);
552
- var ctxBG = canvasBg.getContext('2d');
553
- var ctxProgress = canvasProgress.getContext('2d');
554
- ctxBG.scale(scale, scale);
555
- ctxProgress.scale(scale, scale);
556
- ctxBG.clearRect(0, 0, elWidth, elHeight);
557
- ctxProgress.clearRect(0, 0, elWidth, elHeight);
558
- ctxBG.fillStyle = mainColor;
559
- ctxProgress.fillStyle = alternateColor;
560
- var offsetLeft = (elWidth - samplesCount * sampleOuterWidth) / 2;
561
- normalizedAmplitudes.forEach(function (amplitude, amplitudeI) {
562
- var sampleHeight = Math.max(minSampleHeight, amplitude * elHeight);
563
- var sampleX = sampleOuterWidth * amplitudeI + offsetLeft + sampleMargin;
564
- var sampleY = elHeight / 2 - sampleHeight / 2;
565
- ctxBG.fillRect(Math.round(sampleX), Math.round(sampleY), sampleWidth, Math.round(sampleHeight));
566
- ctxProgress.fillRect(Math.round(sampleX), Math.round(sampleY), sampleWidth, Math.round(sampleHeight));
567
- });
568
- if (onReady !== null) {
569
- onReady();
570
- }
571
- }, [audioLevels, sampleWidth, sampleMargin, minSampleHeight, elWidth, elHeight, mainColor, alternateColor, onReady]);
572
-
573
- // User events
574
- var seekFromX = React.useCallback(function (x) {
575
- var _elRef$current$getBou = elRef.current.getBoundingClientRect(),
576
- elX = _elRef$current$getBou.left,
577
- width = _elRef$current$getBou.width;
578
- var progress = Math.max(0, Math.min(1, (x - elX) / width));
579
- if (onSeek !== null && duration !== null) {
580
- onSeek(progress * duration);
581
- }
582
- if (!playing) {
583
- onResume();
584
- }
585
- }, [duration, playing, onSeek, onResume]);
586
- var bind = react.useGesture({
587
- onDrag: function onDrag(_ref3) {
588
- var _ref3$xy = _slicedToArray(_ref3.xy, 1),
589
- x = _ref3$xy[0],
590
- elapsedTime = _ref3.elapsedTime,
591
- active = _ref3.active;
592
- if (!active && elapsedTime > 300) {
593
- return;
594
- }
595
- seekFromX(x);
596
- }
597
- }, {
598
- drag: {
599
- axis: 'x',
600
- filterTaps: true
601
- }
602
- });
603
- return /*#__PURE__*/React.createElement("div", Object.assign({
604
- className: classNames([styles.container, _defineProperty({}, className, className !== null)]),
605
- ref: elRef
606
- }, bind()), /*#__PURE__*/React.createElement("canvas", {
607
- ref: canvasBackgroundRef,
608
- className: styles.canvasBackground
609
- }), /*#__PURE__*/React.createElement(web.animated.canvas, {
610
- ref: canvasProgressRef,
611
- className: styles.canvasProgress,
612
- style: {
613
- clipPath: springProps.x.to(function (x) {
614
- return "polygon(0 0, ".concat(x * 100, "% 0, ").concat(x * 100, "% 100%, 0 100%)");
615
- })
616
- }
617
- }));
618
- }
619
- AudioWave.propTypes = propTypes;
620
- AudioWave.defaultProps = defaultProps;
621
-
622
- exports.AudioWave = AudioWave;
623
- exports.default = Audio$1;