@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.
Files changed (42) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/es/components/AudioPlayer/AudioPlayer.d.ts +10 -0
  3. package/dist/es/components/AudioPlayer/AudioPlayer.js +116 -0
  4. package/dist/es/components/AudioPlayer/AudioProgress.d.ts +14 -0
  5. package/dist/es/components/AudioPlayer/AudioProgress.js +117 -0
  6. package/dist/es/components/AudioPlayer/AudioRange.d.ts +14 -0
  7. package/dist/es/components/AudioPlayer/AudioRange.js +31 -0
  8. package/dist/es/components/AudioPlayer/AudioVolume.d.ts +7 -0
  9. package/dist/es/components/AudioPlayer/AudioVolume.js +83 -0
  10. package/dist/es/components/AudioPlayer/style/AudioPlayer.css +58 -0
  11. package/dist/es/components/AudioPlayer/style/AudioProgress.css +35 -0
  12. package/dist/es/components/AudioPlayer/style/AudioRange.css +68 -0
  13. package/dist/es/components/AudioPlayer/style/AudioVolume.css +34 -0
  14. package/dist/es/components/AudioPlayer/timerFormatUtil.d.ts +2 -0
  15. package/dist/es/components/AudioPlayer/timerFormatUtil.js +33 -0
  16. package/dist/es/components/Instructions/Instructions.js +3 -4
  17. package/dist/es/components/Steps/Steps.d.ts +2 -0
  18. package/dist/es/components/Steps/Steps.js +6 -4
  19. package/dist/es/components/Steps/StepsItem.js +2 -2
  20. package/dist/es/index.d.ts +5 -0
  21. package/dist/es/index.js +5 -0
  22. package/dist/lib/components/AudioPlayer/AudioPlayer.d.ts +10 -0
  23. package/dist/lib/components/AudioPlayer/AudioPlayer.js +133 -0
  24. package/dist/lib/components/AudioPlayer/AudioProgress.d.ts +14 -0
  25. package/dist/lib/components/AudioPlayer/AudioProgress.js +141 -0
  26. package/dist/lib/components/AudioPlayer/AudioRange.d.ts +14 -0
  27. package/dist/lib/components/AudioPlayer/AudioRange.js +42 -0
  28. package/dist/lib/components/AudioPlayer/AudioVolume.d.ts +7 -0
  29. package/dist/lib/components/AudioPlayer/AudioVolume.js +99 -0
  30. package/dist/lib/components/AudioPlayer/style/AudioPlayer.css +58 -0
  31. package/dist/lib/components/AudioPlayer/style/AudioProgress.css +35 -0
  32. package/dist/lib/components/AudioPlayer/style/AudioRange.css +68 -0
  33. package/dist/lib/components/AudioPlayer/style/AudioVolume.css +34 -0
  34. package/dist/lib/components/AudioPlayer/timerFormatUtil.d.ts +2 -0
  35. package/dist/lib/components/AudioPlayer/timerFormatUtil.js +42 -0
  36. package/dist/lib/components/Instructions/Instructions.js +2 -4
  37. package/dist/lib/components/Steps/Steps.d.ts +2 -0
  38. package/dist/lib/components/Steps/Steps.js +5 -3
  39. package/dist/lib/components/Steps/StepsItem.js +1 -1
  40. package/dist/lib/index.d.ts +5 -0
  41. package/dist/lib/index.js +40 -0
  42. 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,6 +1,8 @@
1
1
  import * as React from 'react';
2
2
  import './Steps.less';
3
3
  export interface ISteps {
4
+ /** Дополнительный класс корневого элемента */
5
+ className?: string;
4
6
  /** Ссылка на корневой элемент */
5
7
  rootRef?: React.Ref<HTMLDivElement>;
6
8
  /** Заголовок */
@@ -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 title = _ref.title,
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 = {
@@ -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,7 @@
1
+ import React from 'react';
2
+ import './style/AudioVolume.less';
3
+ export interface IAudioVolumeProps {
4
+ onChangeAudioVolume: (volume: number) => void;
5
+ }
6
+ declare const AudioVolume: React.FC<IAudioVolumeProps>;
7
+ export default AudioVolume;
@@ -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
+ }