@megafon/ui-shared 4.7.0 → 4.9.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.
- package/CHANGELOG.md +23 -0
- package/dist/es/components/AudioPlayer/AudioPlayer.d.ts +10 -0
- package/dist/es/components/AudioPlayer/AudioPlayer.js +116 -0
- package/dist/es/components/AudioPlayer/AudioProgress.d.ts +14 -0
- package/dist/es/components/AudioPlayer/AudioProgress.js +117 -0
- package/dist/es/components/AudioPlayer/AudioRange.d.ts +14 -0
- package/dist/es/components/AudioPlayer/AudioRange.js +31 -0
- package/dist/es/components/AudioPlayer/AudioVolume.d.ts +7 -0
- package/dist/es/components/AudioPlayer/AudioVolume.js +83 -0
- package/dist/es/components/AudioPlayer/style/AudioPlayer.css +58 -0
- package/dist/es/components/AudioPlayer/style/AudioProgress.css +35 -0
- package/dist/es/components/AudioPlayer/style/AudioRange.css +68 -0
- package/dist/es/components/AudioPlayer/style/AudioVolume.css +34 -0
- package/dist/es/components/AudioPlayer/timerFormatUtil.d.ts +2 -0
- package/dist/es/components/AudioPlayer/timerFormatUtil.js +33 -0
- package/dist/es/components/Instructions/Instructions.js +3 -4
- package/dist/es/components/Steps/Steps.d.ts +2 -0
- package/dist/es/components/Steps/Steps.js +6 -4
- package/dist/es/components/Steps/StepsItem.js +2 -2
- package/dist/es/index.d.ts +5 -0
- package/dist/es/index.js +5 -0
- package/dist/lib/components/AudioPlayer/AudioPlayer.d.ts +10 -0
- package/dist/lib/components/AudioPlayer/AudioPlayer.js +133 -0
- package/dist/lib/components/AudioPlayer/AudioProgress.d.ts +14 -0
- package/dist/lib/components/AudioPlayer/AudioProgress.js +141 -0
- package/dist/lib/components/AudioPlayer/AudioRange.d.ts +14 -0
- package/dist/lib/components/AudioPlayer/AudioRange.js +42 -0
- package/dist/lib/components/AudioPlayer/AudioVolume.d.ts +7 -0
- package/dist/lib/components/AudioPlayer/AudioVolume.js +99 -0
- package/dist/lib/components/AudioPlayer/style/AudioPlayer.css +58 -0
- package/dist/lib/components/AudioPlayer/style/AudioProgress.css +35 -0
- package/dist/lib/components/AudioPlayer/style/AudioRange.css +68 -0
- package/dist/lib/components/AudioPlayer/style/AudioVolume.css +34 -0
- package/dist/lib/components/AudioPlayer/timerFormatUtil.d.ts +2 -0
- package/dist/lib/components/AudioPlayer/timerFormatUtil.js +42 -0
- package/dist/lib/components/Instructions/Instructions.js +2 -4
- package/dist/lib/components/Steps/Steps.d.ts +2 -0
- package/dist/lib/components/Steps/Steps.js +5 -3
- package/dist/lib/components/Steps/StepsItem.js +1 -1
- package/dist/lib/index.d.ts +5 -0
- package/dist/lib/index.js +40 -0
- package/package.json +5 -5
@@ -7,8 +7,7 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
7
7
|
/* eslint-disable jsx-a11y/click-events-have-key-events */
|
8
8
|
import React from 'react';
|
9
9
|
import { Grid, GridColumn, Header, Paragraph } from '@megafon/ui-core';
|
10
|
-
import { cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
|
11
|
-
import convert from 'htmr';
|
10
|
+
import { cnCreate, filterDataAttrs, titleConvertConfig, convert, textConvertConfig } from '@megafon/ui-helpers';
|
12
11
|
import PropTypes from 'prop-types';
|
13
12
|
import { Swiper, SwiperSlide } from 'swiper/react';
|
14
13
|
import "./Instructions.css";
|
@@ -123,13 +122,13 @@ var Instructions = function Instructions(_ref) {
|
|
123
122
|
resolution: resolution
|
124
123
|
}),
|
125
124
|
as: "h2"
|
126
|
-
}, title);
|
125
|
+
}, convert(title, titleConvertConfig));
|
127
126
|
}, [title]);
|
128
127
|
var renderText = React.useCallback(function () {
|
129
128
|
return /*#__PURE__*/React.createElement(Paragraph, {
|
130
129
|
className: cn('text', [additionalText]),
|
131
130
|
hasMargin: false
|
132
|
-
}, convert(text));
|
131
|
+
}, convert(text, textConvertConfig));
|
133
132
|
}, [text, additionalText]);
|
134
133
|
var renderPicture = React.useCallback(function () {
|
135
134
|
if (pictureMask === pictureMaskTypes.NONE) {
|
@@ -1,23 +1,24 @@
|
|
1
1
|
import "core-js/modules/es.array.map";
|
2
2
|
import * as React from 'react';
|
3
3
|
import { Header } from '@megafon/ui-core';
|
4
|
-
import { cnCreate } from '@megafon/ui-helpers';
|
4
|
+
import { cnCreate, convert, titleConvertConfig } from '@megafon/ui-helpers';
|
5
5
|
import PropTypes from 'prop-types';
|
6
6
|
import "./Steps.css";
|
7
7
|
var cn = cnCreate('mfui-steps');
|
8
8
|
|
9
9
|
var Steps = function Steps(_ref) {
|
10
|
-
var
|
10
|
+
var className = _ref.className,
|
11
|
+
title = _ref.title,
|
11
12
|
rootRef = _ref.rootRef,
|
12
13
|
children = _ref.children;
|
13
14
|
return /*#__PURE__*/React.createElement("div", {
|
14
|
-
className: cn(),
|
15
|
+
className: cn([className]),
|
15
16
|
ref: rootRef
|
16
17
|
}, /*#__PURE__*/React.createElement(Header, {
|
17
18
|
as: "h2",
|
18
19
|
align: "center",
|
19
20
|
className: cn('title')
|
20
|
-
}, title), /*#__PURE__*/React.createElement("ul", {
|
21
|
+
}, convert(title, titleConvertConfig)), /*#__PURE__*/React.createElement("ul", {
|
21
22
|
className: cn('list')
|
22
23
|
}, React.Children.map(children, function (child) {
|
23
24
|
return /*#__PURE__*/React.createElement("li", {
|
@@ -27,6 +28,7 @@ var Steps = function Steps(_ref) {
|
|
27
28
|
};
|
28
29
|
|
29
30
|
Steps.propTypes = {
|
31
|
+
className: PropTypes.string,
|
30
32
|
rootRef: PropTypes.oneOfType([PropTypes.func, PropTypes.oneOfType([PropTypes.shape({
|
31
33
|
current: PropTypes.elementType
|
32
34
|
}), PropTypes.any])]),
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { Paragraph } from '@megafon/ui-core';
|
3
|
-
import { cnCreate } from '@megafon/ui-helpers';
|
3
|
+
import { cnCreate, convert, textConvertConfig } from '@megafon/ui-helpers';
|
4
4
|
import PropTypes from 'prop-types';
|
5
5
|
import "./StepsItem.css";
|
6
6
|
var cn = cnCreate('mfui-steps-item');
|
@@ -16,7 +16,7 @@ var StepsItem = function StepsItem(_ref) {
|
|
16
16
|
className: cn('text-wrapper')
|
17
17
|
}, /*#__PURE__*/React.createElement(Paragraph, {
|
18
18
|
hasMargin: false
|
19
|
-
}, text)));
|
19
|
+
}, typeof text === 'string' ? convert(text, textConvertConfig) : text)));
|
20
20
|
};
|
21
21
|
|
22
22
|
StepsItem.propTypes = {
|
package/dist/es/index.d.ts
CHANGED
@@ -1,4 +1,8 @@
|
|
1
1
|
export { default as AccordionBox } from './components/AccordionBox/AccordionBox';
|
2
|
+
export { default as AudioPlayer } from './components/AudioPlayer/AudioPlayer';
|
3
|
+
export { default as AudioProgress } from './components/AudioPlayer/AudioProgress';
|
4
|
+
export { default as AudioRange } from './components/AudioPlayer/AudioRange';
|
5
|
+
export { default as AudioVolume } from './components/AudioPlayer/AudioVolume';
|
2
6
|
export { default as BannerBox } from './components/BannerBox/BannerBox';
|
3
7
|
export { default as BenefitsIcons } from './components/BenefitsIcons/BenefitsIcons';
|
4
8
|
export { default as BenefitsIconsTile } from './components/BenefitsIcons/BenefitsIconsTile';
|
@@ -33,6 +37,7 @@ export { default as TextBox } from './components/TextBox/TextBox';
|
|
33
37
|
export { default as TextBoxPicture } from './components/TextBox/TextBoxPicture';
|
34
38
|
export { default as TextWithIcon } from './components/TextWithIcon/TextWithIcon';
|
35
39
|
export { default as TextWithIconItem } from './components/TextWithIcon/TextWithIconItem';
|
40
|
+
export { default as timerFormatUtil } from './components/AudioPlayer/timerFormatUtil';
|
36
41
|
export { default as TitleDescriptionBox } from './components/TitleDescriptionBox/TitleDescriptionBox';
|
37
42
|
export { default as VideoBanner } from './components/VideoBanner/VideoBanner';
|
38
43
|
export { default as VideoBlock } from './components/VideoBlock/VideoBlock';
|
package/dist/es/index.js
CHANGED
@@ -1,4 +1,8 @@
|
|
1
1
|
export { default as AccordionBox } from "./components/AccordionBox/AccordionBox";
|
2
|
+
export { default as AudioPlayer } from "./components/AudioPlayer/AudioPlayer";
|
3
|
+
export { default as AudioProgress } from "./components/AudioPlayer/AudioProgress";
|
4
|
+
export { default as AudioRange } from "./components/AudioPlayer/AudioRange";
|
5
|
+
export { default as AudioVolume } from "./components/AudioPlayer/AudioVolume";
|
2
6
|
export { default as BannerBox } from "./components/BannerBox/BannerBox";
|
3
7
|
export { default as BenefitsIcons } from "./components/BenefitsIcons/BenefitsIcons";
|
4
8
|
export { default as BenefitsIconsTile } from "./components/BenefitsIcons/BenefitsIconsTile";
|
@@ -33,6 +37,7 @@ export { default as TextBox } from "./components/TextBox/TextBox";
|
|
33
37
|
export { default as TextBoxPicture } from "./components/TextBox/TextBoxPicture";
|
34
38
|
export { default as TextWithIcon } from "./components/TextWithIcon/TextWithIcon";
|
35
39
|
export { default as TextWithIconItem } from "./components/TextWithIcon/TextWithIconItem";
|
40
|
+
export { default as timerFormatUtil } from "./components/AudioPlayer/timerFormatUtil";
|
36
41
|
export { default as TitleDescriptionBox } from "./components/TitleDescriptionBox/TitleDescriptionBox";
|
37
42
|
export { default as VideoBanner } from "./components/VideoBanner/VideoBanner";
|
38
43
|
export { default as VideoBlock } from "./components/VideoBlock/VideoBlock";
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import './style/AudioPlayer.less';
|
3
|
+
export interface IAudioPlayerProps {
|
4
|
+
audioSrc: string;
|
5
|
+
audioTitle: string;
|
6
|
+
position?: 'left' | 'center' | 'right';
|
7
|
+
isFullWidth?: boolean;
|
8
|
+
}
|
9
|
+
declare const AudioPlayer: React.FC<IAudioPlayerProps>;
|
10
|
+
export default AudioPlayer;
|
@@ -0,0 +1,133 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports["default"] = void 0;
|
7
|
+
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
9
|
+
|
10
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
11
|
+
|
12
|
+
var _react = _interopRequireDefault(require("react"));
|
13
|
+
|
14
|
+
var _uiCore = require("@megafon/ui-core");
|
15
|
+
|
16
|
+
var _uiHelpers = require("@megafon/ui-helpers");
|
17
|
+
|
18
|
+
var _AudioProgress = _interopRequireDefault(require("./AudioProgress"));
|
19
|
+
|
20
|
+
var _AudioVolume = _interopRequireDefault(require("./AudioVolume"));
|
21
|
+
|
22
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
23
|
+
|
24
|
+
var IconPause = function IconPause(props) {
|
25
|
+
return /*#__PURE__*/_react["default"].createElement("svg", (0, _extends2["default"])({
|
26
|
+
viewBox: "0 0 32 32"
|
27
|
+
}, props), /*#__PURE__*/_react["default"].createElement("path", {
|
28
|
+
d: "M11 10.5v11a.5.5 0 00.5.5h2a.5.5 0 00.5-.5v-11a.5.5 0 00-.5-.5h-2a.5.5 0 00-.5.5zm7 0v11a.5.5 0 00.5.5h2a.5.5 0 00.5-.5v-11a.5.5 0 00-.5-.5h-2a.5.5 0 00-.5.5z"
|
29
|
+
}));
|
30
|
+
};
|
31
|
+
|
32
|
+
var IconPlay = function IconPlay(props) {
|
33
|
+
return /*#__PURE__*/_react["default"].createElement("svg", (0, _extends2["default"])({
|
34
|
+
viewBox: "0 0 32 32"
|
35
|
+
}, props), /*#__PURE__*/_react["default"].createElement("path", {
|
36
|
+
d: "M11.5 22.13V9.87a.5.5 0 01.752-.431l10.508 6.13a.5.5 0 010 .863l-10.508 6.13a.5.5 0 01-.752-.433z"
|
37
|
+
}));
|
38
|
+
};
|
39
|
+
|
40
|
+
var cn = (0, _uiHelpers.cnCreate)('mfui-audio-player');
|
41
|
+
|
42
|
+
var AudioPlayer = function AudioPlayer(_ref) {
|
43
|
+
var audioSrc = _ref.audioSrc,
|
44
|
+
audioTitle = _ref.audioTitle,
|
45
|
+
_ref$position = _ref.position,
|
46
|
+
position = _ref$position === void 0 ? 'center' : _ref$position,
|
47
|
+
isFullWidth = _ref.isFullWidth;
|
48
|
+
|
49
|
+
var audioRef = _react["default"].useRef(null);
|
50
|
+
|
51
|
+
var _React$useState = _react["default"].useState(false),
|
52
|
+
_React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
|
53
|
+
isPlaying = _React$useState2[0],
|
54
|
+
setIsPlaying = _React$useState2[1];
|
55
|
+
|
56
|
+
var _React$useState3 = _react["default"].useState(false),
|
57
|
+
_React$useState4 = (0, _slicedToArray2["default"])(_React$useState3, 2),
|
58
|
+
isPause = _React$useState4[0],
|
59
|
+
setIsPause = _React$useState4[1];
|
60
|
+
|
61
|
+
var handlePLay = function handlePLay() {
|
62
|
+
var _a;
|
63
|
+
|
64
|
+
setIsPlaying(true);
|
65
|
+
setIsPause(false);
|
66
|
+
(_a = audioRef.current) === null || _a === void 0 ? void 0 : _a.play();
|
67
|
+
};
|
68
|
+
|
69
|
+
var handlePause = function handlePause() {
|
70
|
+
var _a;
|
71
|
+
|
72
|
+
setIsPlaying(false);
|
73
|
+
setIsPause(true);
|
74
|
+
(_a = audioRef.current) === null || _a === void 0 ? void 0 : _a.pause();
|
75
|
+
};
|
76
|
+
|
77
|
+
var handleChangeAudioCurrentTime = function handleChangeAudioCurrentTime(currentTime) {
|
78
|
+
if (!audioRef || !audioRef.current) {
|
79
|
+
return;
|
80
|
+
}
|
81
|
+
|
82
|
+
audioRef.current.currentTime = currentTime;
|
83
|
+
};
|
84
|
+
|
85
|
+
var handleChangeAudioVolume = function handleChangeAudioVolume(volume) {
|
86
|
+
if (!audioRef || !audioRef.current) {
|
87
|
+
return;
|
88
|
+
}
|
89
|
+
|
90
|
+
audioRef.current.volume = volume;
|
91
|
+
audioRef.current.muted = !volume;
|
92
|
+
};
|
93
|
+
|
94
|
+
var playingIconHandleClick = _react["default"].useMemo(function () {
|
95
|
+
return isPlaying ? handlePause : handlePLay;
|
96
|
+
}, [isPlaying]);
|
97
|
+
|
98
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
99
|
+
className: cn({
|
100
|
+
'full-width': isFullWidth,
|
101
|
+
position: position
|
102
|
+
})
|
103
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
104
|
+
className: cn('player')
|
105
|
+
}, /*#__PURE__*/_react["default"].createElement("audio", {
|
106
|
+
className: cn('audio'),
|
107
|
+
ref: audioRef,
|
108
|
+
controls: false
|
109
|
+
}, /*#__PURE__*/_react["default"].createElement("source", {
|
110
|
+
src: audioSrc,
|
111
|
+
type: "audio/mpeg"
|
112
|
+
})), /*#__PURE__*/_react["default"].createElement("div", {
|
113
|
+
className: cn('playing-controls')
|
114
|
+
}, /*#__PURE__*/_react["default"].createElement(_uiCore.Button, {
|
115
|
+
icon: isPlaying ? /*#__PURE__*/_react["default"].createElement(IconPause, null) : /*#__PURE__*/_react["default"].createElement(IconPlay, null),
|
116
|
+
onClick: playingIconHandleClick,
|
117
|
+
sizeAll: "small",
|
118
|
+
className: cn('button')
|
119
|
+
})), /*#__PURE__*/_react["default"].createElement(_AudioProgress["default"], {
|
120
|
+
audioRef: audioRef,
|
121
|
+
audioTitle: audioTitle,
|
122
|
+
isPlaying: isPlaying,
|
123
|
+
isPause: isPause,
|
124
|
+
onChangeAudioCurrentTime: handleChangeAudioCurrentTime,
|
125
|
+
onPLay: handlePLay,
|
126
|
+
onSetIsPlaying: setIsPlaying
|
127
|
+
}), /*#__PURE__*/_react["default"].createElement(_AudioVolume["default"], {
|
128
|
+
onChangeAudioVolume: handleChangeAudioVolume
|
129
|
+
})));
|
130
|
+
};
|
131
|
+
|
132
|
+
var _default = AudioPlayer;
|
133
|
+
exports["default"] = _default;
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import './style/AudioProgress.less';
|
3
|
+
export declare const INTERVAL_DELAY = 1000;
|
4
|
+
export interface IAudioProgressProps {
|
5
|
+
audioRef: React.MutableRefObject<HTMLAudioElement | null>;
|
6
|
+
audioTitle: string;
|
7
|
+
isPlaying: boolean;
|
8
|
+
isPause: boolean;
|
9
|
+
onChangeAudioCurrentTime: (currentTime: number) => void;
|
10
|
+
onPLay: () => void;
|
11
|
+
onSetIsPlaying: (value: boolean) => void;
|
12
|
+
}
|
13
|
+
declare const AudioProgress: React.FC<IAudioProgressProps>;
|
14
|
+
export default AudioProgress;
|
@@ -0,0 +1,141 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports["default"] = exports.INTERVAL_DELAY = void 0;
|
7
|
+
|
8
|
+
require("core-js/modules/es.number.constructor");
|
9
|
+
|
10
|
+
require("core-js/modules/web.timers");
|
11
|
+
|
12
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
13
|
+
|
14
|
+
var _react = _interopRequireDefault(require("react"));
|
15
|
+
|
16
|
+
var _uiHelpers = require("@megafon/ui-helpers");
|
17
|
+
|
18
|
+
var _AudioRange = _interopRequireDefault(require("./AudioRange"));
|
19
|
+
|
20
|
+
var _timerFormatUtil = _interopRequireDefault(require("./timerFormatUtil"));
|
21
|
+
|
22
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
23
|
+
|
24
|
+
var INTERVAL_DELAY = 1000;
|
25
|
+
exports.INTERVAL_DELAY = INTERVAL_DELAY;
|
26
|
+
var cn = (0, _uiHelpers.cnCreate)('mfui-audio-progress');
|
27
|
+
|
28
|
+
var AudioProgress = function AudioProgress(_ref) {
|
29
|
+
var audioRef = _ref.audioRef,
|
30
|
+
audioTitle = _ref.audioTitle,
|
31
|
+
isPlaying = _ref.isPlaying,
|
32
|
+
isPause = _ref.isPause,
|
33
|
+
onChangeAudioCurrentTime = _ref.onChangeAudioCurrentTime,
|
34
|
+
onPLay = _ref.onPLay,
|
35
|
+
onSetIsPlaying = _ref.onSetIsPlaying;
|
36
|
+
|
37
|
+
var intervalId = _react["default"].useRef(null);
|
38
|
+
|
39
|
+
var _React$useState = _react["default"].useState(0),
|
40
|
+
_React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
|
41
|
+
trackDuration = _React$useState2[0],
|
42
|
+
setTrackDuration = _React$useState2[1];
|
43
|
+
|
44
|
+
var _React$useState3 = _react["default"].useState(0),
|
45
|
+
_React$useState4 = (0, _slicedToArray2["default"])(_React$useState3, 2),
|
46
|
+
trackProgress = _React$useState4[0],
|
47
|
+
setTrackProgress = _React$useState4[1];
|
48
|
+
|
49
|
+
var progressColorPercent = _react["default"].useMemo(function () {
|
50
|
+
return trackProgress / trackDuration * 100;
|
51
|
+
}, [trackDuration, trackProgress]);
|
52
|
+
|
53
|
+
var progressValue = _react["default"].useMemo(function () {
|
54
|
+
return isPlaying || isPause ? trackProgress : trackDuration;
|
55
|
+
}, [isPause, isPlaying, trackDuration, trackProgress]);
|
56
|
+
|
57
|
+
var handleStartTimer = _react["default"].useCallback(function () {
|
58
|
+
intervalId.current && clearInterval(intervalId.current);
|
59
|
+
intervalId.current = setInterval(function () {
|
60
|
+
var _a, _b, _c;
|
61
|
+
|
62
|
+
if ((_a = audioRef.current) === null || _a === void 0 ? void 0 : _a.ended) {
|
63
|
+
onSetIsPlaying(false);
|
64
|
+
setTrackProgress(Math.floor(((_b = audioRef.current) === null || _b === void 0 ? void 0 : _b.duration) || 0));
|
65
|
+
return;
|
66
|
+
}
|
67
|
+
|
68
|
+
setTrackProgress(Math.floor(((_c = audioRef.current) === null || _c === void 0 ? void 0 : _c.currentTime) || 0));
|
69
|
+
}, INTERVAL_DELAY);
|
70
|
+
}, [audioRef, onSetIsPlaying]);
|
71
|
+
|
72
|
+
var handleScrubProgress = function handleScrubProgress(e) {
|
73
|
+
var currentTime = Number(e.target.value);
|
74
|
+
setTrackProgress(currentTime);
|
75
|
+
onChangeAudioCurrentTime(currentTime);
|
76
|
+
};
|
77
|
+
|
78
|
+
var handleScrubEndProgress = function handleScrubEndProgress() {
|
79
|
+
if (!isPlaying) {
|
80
|
+
onPLay();
|
81
|
+
}
|
82
|
+
|
83
|
+
handleStartTimer();
|
84
|
+
};
|
85
|
+
|
86
|
+
_react["default"].useEffect(function () {
|
87
|
+
var _a;
|
88
|
+
|
89
|
+
setTrackProgress(Math.floor(((_a = audioRef === null || audioRef === void 0 ? void 0 : audioRef.current) === null || _a === void 0 ? void 0 : _a.currentTime) || 0));
|
90
|
+
}, [audioRef]);
|
91
|
+
|
92
|
+
_react["default"].useEffect(function () {
|
93
|
+
var audioNode = audioRef.current;
|
94
|
+
|
95
|
+
if (audioNode) {
|
96
|
+
audioNode.onloadedmetadata = function () {
|
97
|
+
setTrackDuration(Math.round(audioNode.duration));
|
98
|
+
};
|
99
|
+
}
|
100
|
+
}, [audioRef]);
|
101
|
+
|
102
|
+
_react["default"].useEffect(function () {
|
103
|
+
if (isPlaying) {
|
104
|
+
handleStartTimer();
|
105
|
+
}
|
106
|
+
|
107
|
+
if (isPause) {
|
108
|
+
intervalId.current && clearInterval(intervalId.current);
|
109
|
+
}
|
110
|
+
}, [handleStartTimer, isPause, isPlaying]);
|
111
|
+
|
112
|
+
_react["default"].useEffect(function () {
|
113
|
+
return function () {
|
114
|
+
intervalId.current && clearInterval(intervalId.current);
|
115
|
+
};
|
116
|
+
}, []);
|
117
|
+
|
118
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
119
|
+
className: cn()
|
120
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
121
|
+
className: cn('info')
|
122
|
+
}, /*#__PURE__*/_react["default"].createElement("span", {
|
123
|
+
className: cn('title')
|
124
|
+
}, audioTitle), /*#__PURE__*/_react["default"].createElement("span", {
|
125
|
+
className: cn('value')
|
126
|
+
}, (0, _timerFormatUtil["default"])(progressValue))), /*#__PURE__*/_react["default"].createElement("div", {
|
127
|
+
className: cn('range-wrapper')
|
128
|
+
}, /*#__PURE__*/_react["default"].createElement(_AudioRange["default"], {
|
129
|
+
className: cn('range'),
|
130
|
+
maxValue: trackDuration,
|
131
|
+
value: trackProgress,
|
132
|
+
step: "1",
|
133
|
+
colorPercent: progressColorPercent || 0,
|
134
|
+
onChange: handleScrubProgress,
|
135
|
+
onMouseUp: handleScrubEndProgress,
|
136
|
+
onTouchEnd: handleScrubEndProgress
|
137
|
+
})));
|
138
|
+
};
|
139
|
+
|
140
|
+
var _default = AudioProgress;
|
141
|
+
exports["default"] = _default;
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import './style/AudioRange.less';
|
3
|
+
export interface IAudioRangeProps {
|
4
|
+
className?: string;
|
5
|
+
maxValue: number | string;
|
6
|
+
value: number;
|
7
|
+
step: string;
|
8
|
+
colorPercent: number;
|
9
|
+
onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
|
10
|
+
onMouseUp?: () => void;
|
11
|
+
onTouchEnd?: () => void;
|
12
|
+
}
|
13
|
+
declare const AudioRange: React.FC<IAudioRangeProps>;
|
14
|
+
export default AudioRange;
|
@@ -0,0 +1,42 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports["default"] = void 0;
|
7
|
+
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
9
|
+
|
10
|
+
var _uiHelpers = require("@megafon/ui-helpers");
|
11
|
+
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
13
|
+
|
14
|
+
var cn = (0, _uiHelpers.cnCreate)('mfui-audio-range');
|
15
|
+
|
16
|
+
var AudioRange = function AudioRange(_ref) {
|
17
|
+
var className = _ref.className,
|
18
|
+
maxValue = _ref.maxValue,
|
19
|
+
value = _ref.value,
|
20
|
+
step = _ref.step,
|
21
|
+
colorPercent = _ref.colorPercent,
|
22
|
+
onChange = _ref.onChange,
|
23
|
+
onMouseUp = _ref.onMouseUp,
|
24
|
+
onTouchEnd = _ref.onTouchEnd;
|
25
|
+
return /*#__PURE__*/_react["default"].createElement("input", {
|
26
|
+
className: cn([className]),
|
27
|
+
style: {
|
28
|
+
backgroundSize: "".concat(colorPercent, "% 100%")
|
29
|
+
},
|
30
|
+
type: "range",
|
31
|
+
min: "0",
|
32
|
+
max: maxValue,
|
33
|
+
step: step,
|
34
|
+
value: value,
|
35
|
+
onChange: onChange,
|
36
|
+
onMouseUp: onMouseUp,
|
37
|
+
onTouchEnd: onTouchEnd
|
38
|
+
});
|
39
|
+
};
|
40
|
+
|
41
|
+
var _default = AudioRange;
|
42
|
+
exports["default"] = _default;
|
@@ -0,0 +1,99 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports["default"] = void 0;
|
7
|
+
|
8
|
+
require("core-js/modules/es.number.constructor");
|
9
|
+
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
11
|
+
|
12
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
13
|
+
|
14
|
+
var _react = _interopRequireDefault(require("react"));
|
15
|
+
|
16
|
+
var _uiCore = require("@megafon/ui-core");
|
17
|
+
|
18
|
+
var _uiHelpers = require("@megafon/ui-helpers");
|
19
|
+
|
20
|
+
var _AudioRange = _interopRequireDefault(require("./AudioRange"));
|
21
|
+
|
22
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
23
|
+
|
24
|
+
var NoVolumeIcon = function NoVolumeIcon(props) {
|
25
|
+
return /*#__PURE__*/_react["default"].createElement("svg", (0, _extends2["default"])({
|
26
|
+
viewBox: "0 0 24 24"
|
27
|
+
}, props), /*#__PURE__*/_react["default"].createElement("path", {
|
28
|
+
d: "M14 20.15c0 .322.299.56.606.467a9.004 9.004 0 004.96-13.493l-1.525 1.34a7.002 7.002 0 01-3.687 10.13.525.525 0 00-.354.488v1.069z"
|
29
|
+
}), /*#__PURE__*/_react["default"].createElement("path", {
|
30
|
+
d: "M16.094 10.174c.261.56.406 1.177.406 1.826 0 1.426-.7 2.701-1.8 3.548-.3.23-.7-.004-.7-.382v-3.152l2.094-1.84zm-1.225-1.586L14 9.35v-.517c0-.378.4-.613.7-.382.058.044.114.09.169.136zm1.923-1.69a6.998 6.998 0 00-2.438-1.491.525.525 0 01-.354-.489V3.849c0-.32.299-.559.606-.466a8.994 8.994 0 013.694 2.19l-1.508 1.325zM12 11.108V5.36a.5.5 0 00-.342-.474l-.822-.274a.5.5 0 00-.553.167L7.15 8.807A.5.5 0 016.756 9H3.707a.5.5 0 00-.353.146l-.207.208A.5.5 0 003 9.707v4.586a.5.5 0 00.147.353l.207.208a.5.5 0 00.353.146h3.049a.5.5 0 01.394.193l.082.105L12 11.108zM8.462 16.88l1.82 2.34a.5.5 0 00.554.168l.822-.274A.5.5 0 0012 18.64v-4.87l-3.538 3.11zm-5.488 3.563a.5.5 0 01.046-.705L21.497 3.503a.5.5 0 11.66.751L3.68 20.49a.5.5 0 01-.706-.046z"
|
31
|
+
}));
|
32
|
+
};
|
33
|
+
|
34
|
+
var VolumeIcon = function VolumeIcon(props) {
|
35
|
+
return /*#__PURE__*/_react["default"].createElement("svg", (0, _extends2["default"])({
|
36
|
+
viewBox: "0 0 24 24"
|
37
|
+
}, props), /*#__PURE__*/_react["default"].createElement("path", {
|
38
|
+
d: "M14 20.15c0 .322.299.56.606.467a9.004 9.004 0 000-17.234.475.475 0 00-.606.466v1.069c0 .221.146.414.354.489a7.002 7.002 0 010 13.186.525.525 0 00-.354.489v1.069zM3.146 14.646A.5.5 0 013 14.293V9.707a.5.5 0 01.146-.353l.208-.208A.5.5 0 013.707 9h3.048a.5.5 0 00.395-.193l3.133-4.028a.5.5 0 01.553-.167l.822.274A.5.5 0 0112 5.36v13.28a.5.5 0 01-.342.474l-.822.274a.5.5 0 01-.553-.167L7.15 15.193A.5.5 0 006.755 15H3.707a.5.5 0 01-.353-.146l-.208-.208z"
|
39
|
+
}), /*#__PURE__*/_react["default"].createElement("path", {
|
40
|
+
d: "M16.5 12c0 1.426-.7 2.701-1.8 3.548-.3.23-.7-.004-.7-.382V8.834c0-.378.4-.613.7-.382 1.1.847 1.8 2.122 1.8 3.548z"
|
41
|
+
}));
|
42
|
+
};
|
43
|
+
|
44
|
+
var cn = (0, _uiHelpers.cnCreate)('mfui-audio-volume');
|
45
|
+
|
46
|
+
var AudioVolume = function AudioVolume(_ref) {
|
47
|
+
var onChangeAudioVolume = _ref.onChangeAudioVolume;
|
48
|
+
|
49
|
+
var tooltipTrigger = _react["default"].useRef(null);
|
50
|
+
|
51
|
+
var _React$useState = _react["default"].useState(0.3),
|
52
|
+
_React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
|
53
|
+
trackVolume = _React$useState2[0],
|
54
|
+
setTrackVolume = _React$useState2[1];
|
55
|
+
|
56
|
+
var volumeColorPercent = _react["default"].useMemo(function () {
|
57
|
+
return trackVolume * 100;
|
58
|
+
}, [trackVolume]);
|
59
|
+
|
60
|
+
var handleScrubVolume = function handleScrubVolume(e) {
|
61
|
+
var currentVolume = Number(e.target.value);
|
62
|
+
setTrackVolume(currentVolume);
|
63
|
+
onChangeAudioVolume(currentVolume);
|
64
|
+
};
|
65
|
+
|
66
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
67
|
+
className: cn()
|
68
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
69
|
+
className: cn('icon-area'),
|
70
|
+
ref: tooltipTrigger
|
71
|
+
}, /*#__PURE__*/_react["default"].createElement(VolumeIcon, {
|
72
|
+
className: cn('icon', {
|
73
|
+
visible: !!trackVolume
|
74
|
+
})
|
75
|
+
}), /*#__PURE__*/_react["default"].createElement(NoVolumeIcon, {
|
76
|
+
className: cn('icon', {
|
77
|
+
visible: !trackVolume
|
78
|
+
})
|
79
|
+
})), /*#__PURE__*/_react["default"].createElement(_uiCore.Tooltip, {
|
80
|
+
classes: {
|
81
|
+
content: "".concat(cn('tooltip-content')),
|
82
|
+
contentShadow: "".concat(cn('tooltip-content-shadow'))
|
83
|
+
},
|
84
|
+
triggerElement: tooltipTrigger,
|
85
|
+
triggerEvent: "click",
|
86
|
+
placement: "top",
|
87
|
+
paddings: "none"
|
88
|
+
}, /*#__PURE__*/_react["default"].createElement(_AudioRange["default"], {
|
89
|
+
className: cn('range'),
|
90
|
+
maxValue: "1",
|
91
|
+
value: trackVolume,
|
92
|
+
step: "0.01",
|
93
|
+
colorPercent: volumeColorPercent || 0,
|
94
|
+
onChange: handleScrubVolume
|
95
|
+
})));
|
96
|
+
};
|
97
|
+
|
98
|
+
var _default = AudioVolume;
|
99
|
+
exports["default"] = _default;
|
@@ -0,0 +1,58 @@
|
|
1
|
+
h1,
|
2
|
+
h2,
|
3
|
+
h3,
|
4
|
+
h4,
|
5
|
+
h5 {
|
6
|
+
margin: 0;
|
7
|
+
}
|
8
|
+
.mfui-audio-player {
|
9
|
+
margin-top: 32px;
|
10
|
+
}
|
11
|
+
.mfui-audio-player__player {
|
12
|
+
display: -webkit-box;
|
13
|
+
display: -ms-flexbox;
|
14
|
+
display: flex;
|
15
|
+
-webkit-box-align: center;
|
16
|
+
-ms-flex-align: center;
|
17
|
+
align-items: center;
|
18
|
+
-webkit-box-pack: justify;
|
19
|
+
-ms-flex-pack: justify;
|
20
|
+
justify-content: space-between;
|
21
|
+
-webkit-box-sizing: border-box;
|
22
|
+
box-sizing: border-box;
|
23
|
+
padding: 16px;
|
24
|
+
border-radius: 12px;
|
25
|
+
background: var(--spbSky0);
|
26
|
+
}
|
27
|
+
@media screen and (min-width: 768px) and (max-width: 1023px) {
|
28
|
+
.mfui-audio-player__player {
|
29
|
+
max-width: 530px;
|
30
|
+
}
|
31
|
+
}
|
32
|
+
@media screen and (min-width: 1024px) {
|
33
|
+
.mfui-audio-player__player {
|
34
|
+
max-width: 550px;
|
35
|
+
}
|
36
|
+
}
|
37
|
+
.mfui-audio-player__playing-controls {
|
38
|
+
margin-right: 16px;
|
39
|
+
}
|
40
|
+
.mfui-audio-player_position_center .mfui-audio-player__player {
|
41
|
+
margin: 0 auto;
|
42
|
+
}
|
43
|
+
.mfui-audio-player_position_left .mfui-audio-player__player {
|
44
|
+
margin-right: auto;
|
45
|
+
}
|
46
|
+
.mfui-audio-player_position_right .mfui-audio-player__player {
|
47
|
+
margin-left: auto;
|
48
|
+
}
|
49
|
+
@media screen and (min-width: 768px) and (max-width: 1023px) {
|
50
|
+
.mfui-audio-player_full-width .mfui-audio-player__player {
|
51
|
+
max-width: 100%;
|
52
|
+
}
|
53
|
+
}
|
54
|
+
@media screen and (min-width: 1024px) {
|
55
|
+
.mfui-audio-player_full-width .mfui-audio-player__player {
|
56
|
+
max-width: 100%;
|
57
|
+
}
|
58
|
+
}
|