@lideralia/alife-uikit 1.2.30 → 1.2.32

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.
@@ -57,7 +57,8 @@ var ButtonTabs = function ButtonTabs(_ref2) {
57
57
  }, rest), _react.default.createElement(_Layout.Flex, {
58
58
  backgroundColor: "black12",
59
59
  borderRadius: 3,
60
- padding: 1
60
+ padding: 1,
61
+ overflow: "hidden"
61
62
  }, items === null || items === void 0 ? void 0 : items.map(function (item) {
62
63
  return _react.default.createElement(Button, (0, _extends2.default)({
63
64
  key: item.id,
@@ -19,8 +19,8 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
19
19
 
20
20
  function SvgIconClockBig(props) {
21
21
  return React.createElement("svg", (0, _extends2.default)({
22
- width: "8.5em",
23
- height: "8.5em",
22
+ width: "1em",
23
+ height: "1em",
24
24
  viewBox: "0 0 120 120",
25
25
  fill: "none",
26
26
  xmlns: "http://www.w3.org/2000/svg",
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.default = void 0;
11
+
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
+
14
+ var React = _interopRequireWildcard(require("react"));
15
+
16
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
17
+
18
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
+
20
+ function SvgIconHeadphones(props) {
21
+ return React.createElement("svg", (0, _extends2.default)({
22
+ width: "1em",
23
+ height: "1em",
24
+ viewBox: "0 0 18 18",
25
+ fill: "none",
26
+ xmlns: "http://www.w3.org/2000/svg",
27
+ preserveAspectRatio: "xMidYMid meet",
28
+ stroke: props.stroke
29
+ }, props), React.createElement("path", {
30
+ d: "M3 12.75v0a.75.75 0 01-.75-.75V9A6.75 6.75 0 019 2.25v0A6.75 6.75 0 0115.75 9v3a.75.75 0 01-.75.75v0",
31
+ stroke: "inherit",
32
+ strokeWidth: 1.5,
33
+ strokeLinecap: "round",
34
+ strokeLinejoin: "round"
35
+ }), React.createElement("path", {
36
+ d: "M3 12.25a2.5 2.5 0 012.5-2.5v0c.69 0 1.25.56 1.25 1.25v3.5c0 .69-.56 1.25-1.25 1.25v0a2.5 2.5 0 01-2.5-2.5v-1zM11.25 11c0-.69.56-1.25 1.25-1.25v0a2.5 2.5 0 012.5 2.5v1a2.5 2.5 0 01-2.5 2.5v0c-.69 0-1.25-.56-1.25-1.25V11z",
37
+ stroke: "inherit",
38
+ strokeWidth: 1.5,
39
+ strokeLinecap: "round",
40
+ strokeLinejoin: "round"
41
+ }));
42
+ }
43
+
44
+ var _default = SvgIconHeadphones;
45
+ exports.default = _default;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.default = void 0;
11
+
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
+
14
+ var React = _interopRequireWildcard(require("react"));
15
+
16
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
17
+
18
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
+
20
+ function SvgIconMicrophone(props) {
21
+ return React.createElement("svg", (0, _extends2.default)({
22
+ width: "1em",
23
+ height: "1em",
24
+ viewBox: "0 0 24 24",
25
+ fill: "none",
26
+ xmlns: "http://www.w3.org/2000/svg",
27
+ preserveAspectRatio: "xMidYMid meet",
28
+ stroke: props.stroke
29
+ }, props), React.createElement("path", {
30
+ d: "M9 21h6M12 21v-3",
31
+ stroke: "inherit",
32
+ strokeWidth: 2,
33
+ strokeLinecap: "round",
34
+ strokeLinejoin: "round"
35
+ }), React.createElement("rect", {
36
+ x: 9,
37
+ y: 2,
38
+ width: 6,
39
+ height: 12,
40
+ rx: 3,
41
+ stroke: "inherit",
42
+ strokeWidth: 2,
43
+ strokeLinejoin: "round"
44
+ }), React.createElement("path", {
45
+ d: "M5 11l.151 1.06A6.918 6.918 0 0012 18v0a6.918 6.918 0 006.849-5.94L19 11",
46
+ stroke: "inherit",
47
+ strokeWidth: 2,
48
+ strokeLinecap: "round",
49
+ strokeLinejoin: "round"
50
+ }));
51
+ }
52
+
53
+ var _default = SvgIconMicrophone;
54
+ exports.default = _default;
@@ -413,6 +413,12 @@ Object.defineProperty(exports, "IconGrave", {
413
413
  return _IconGrave.default;
414
414
  }
415
415
  });
416
+ Object.defineProperty(exports, "IconHeadphones", {
417
+ enumerable: true,
418
+ get: function get() {
419
+ return _IconHeadphones.default;
420
+ }
421
+ });
416
422
  Object.defineProperty(exports, "IconHelp", {
417
423
  enumerable: true,
418
424
  get: function get() {
@@ -527,6 +533,12 @@ Object.defineProperty(exports, "IconMenu", {
527
533
  return _IconMenu.default;
528
534
  }
529
535
  });
536
+ Object.defineProperty(exports, "IconMicrophone", {
537
+ enumerable: true,
538
+ get: function get() {
539
+ return _IconMicrophone.default;
540
+ }
541
+ });
530
542
  Object.defineProperty(exports, "IconNotification", {
531
543
  enumerable: true,
532
544
  get: function get() {
@@ -994,6 +1006,8 @@ var _IconFrame = _interopRequireDefault(require("./IconFrame"));
994
1006
 
995
1007
  var _IconGrave = _interopRequireDefault(require("./IconGrave"));
996
1008
 
1009
+ var _IconHeadphones = _interopRequireDefault(require("./IconHeadphones"));
1010
+
997
1011
  var _IconHelpCircle = _interopRequireDefault(require("./IconHelpCircle"));
998
1012
 
999
1013
  var _IconHelp = _interopRequireDefault(require("./IconHelp"));
@@ -1032,6 +1046,8 @@ var _IconManagement = _interopRequireDefault(require("./IconManagement"));
1032
1046
 
1033
1047
  var _IconMenu = _interopRequireDefault(require("./IconMenu"));
1034
1048
 
1049
+ var _IconMicrophone = _interopRequireDefault(require("./IconMicrophone"));
1050
+
1035
1051
  var _IconNotification = _interopRequireDefault(require("./IconNotification"));
1036
1052
 
1037
1053
  var _IconPauseCircle = _interopRequireDefault(require("./IconPauseCircle"));
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.CardAudio = void 0;
11
+
12
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
+
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+
16
+ var _react = _interopRequireWildcard(require("react"));
17
+
18
+ var _wavesurfer = _interopRequireDefault(require("wavesurfer.js"));
19
+
20
+ var _Icons = require("../../atoms/Icons");
21
+
22
+ var _Icon = require("../../atoms/Icon");
23
+
24
+ var _Layout = require("../../atoms/Layout");
25
+
26
+ var _Typography = require("../../atoms/Typography");
27
+
28
+ var _Button = require("../../atoms/Button");
29
+
30
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
31
+
32
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
33
+
34
+ var CardAudio = function CardAudio(_ref) {
35
+ var contentColor = _ref.contentColor,
36
+ audio = _ref.audio;
37
+ var waveformRef = (0, _react.useRef)();
38
+ var waveSurferRef = (0, _react.useRef)({
39
+ isPlaying: function isPlaying() {
40
+ return false;
41
+ }
42
+ });
43
+
44
+ var _useState = (0, _react.useState)(false),
45
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
46
+ isPlaying = _useState2[0],
47
+ toggleIsPlaying = _useState2[1];
48
+
49
+ var _useState3 = (0, _react.useState)('00:00'),
50
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
51
+ durationTime = _useState4[0],
52
+ setDurationTime = _useState4[1];
53
+
54
+ var _useState5 = (0, _react.useState)('00:00'),
55
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
56
+ currentTime = _useState6[0],
57
+ setCurrentTime = _useState6[1];
58
+
59
+ var secondsToMMss = function secondsToMMss(seconds) {
60
+ return new Date(seconds * 1000).toISOString().substring(14, 19);
61
+ };
62
+
63
+ (0, _react.useEffect)(function () {
64
+ var waveSurfer = _wavesurfer.default.create({
65
+ container: waveformRef.current,
66
+ waveColor: 'rgba(242, 242, 243, 1)',
67
+ progressColor: contentColor,
68
+ barWidth: 3,
69
+ barRadius: 3,
70
+ cursorWidth: 0,
71
+ height: 100,
72
+ barGap: 4
73
+ });
74
+
75
+ waveSurfer.load(audio);
76
+ waveSurfer.on('ready', function () {
77
+ waveSurfer.setProgressColor(contentColor);
78
+ waveSurferRef.current = waveSurfer;
79
+ setDurationTime(secondsToMMss(waveSurfer.getDuration()));
80
+ var peaks = waveSurfer.backend.getPeaks(1024);
81
+ var minValue = Math.min.apply(Math, (0, _toConsumableArray2.default)(peaks));
82
+ var maxValue = Math.max.apply(Math, (0, _toConsumableArray2.default)(peaks));
83
+ var volume = peaks.map(function (value) {
84
+ return value > 0.05 ? value - minValue - 0.01 / (maxValue - minValue) : 0.05;
85
+ });
86
+ waveSurfer.drawer.drawPeaks(volume, waveSurfer.drawer.width, 0, volume.length);
87
+ });
88
+ waveSurfer.on('audioprocess', function () {
89
+ setCurrentTime(secondsToMMss(waveSurfer.getCurrentTime()));
90
+ });
91
+ waveSurfer.on('seek', function () {
92
+ setCurrentTime(secondsToMMss(waveSurfer.getCurrentTime()));
93
+ });
94
+ waveSurfer.on('error', function (e) {});
95
+ waveSurfer.on('finish', function () {
96
+ toggleIsPlaying(false);
97
+ });
98
+ return function () {
99
+ waveSurfer.destroy();
100
+ };
101
+ }, []);
102
+ return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement("div", {
103
+ ref: waveformRef,
104
+ style: {
105
+ margin: '-13px auto'
106
+ }
107
+ }), _react.default.createElement(_Layout.Flex, {
108
+ justifyContent: "space-between"
109
+ }, _react.default.createElement(_Layout.Box, null, _react.default.createElement(_Typography.Text, {
110
+ color: "black36",
111
+ sizeText: "display12"
112
+ }, currentTime)), _react.default.createElement(_Layout.Box, null, _react.default.createElement(_Typography.Text, {
113
+ color: "black36",
114
+ sizeText: "display12"
115
+ }, durationTime))), _react.default.createElement(_Button.Button, {
116
+ colorType: contentColor,
117
+ backgroundColor: contentColor,
118
+ rounded: true,
119
+ sizeButton: "none",
120
+ action: function action() {
121
+ waveSurferRef.current.playPause();
122
+ toggleIsPlaying(!isPlaying);
123
+ },
124
+ width: "45px",
125
+ height: "45px",
126
+ marginTop: 2
127
+ }, _react.default.createElement(_Icon.Icon, {
128
+ sizeIcon: "display24",
129
+ color: "white"
130
+ }, isPlaying ? _react.default.createElement(_Icons.IconPause, null) : _react.default.createElement(_Icons.IconPlay, {
131
+ fill: "#fff"
132
+ }))));
133
+ };
134
+
135
+ exports.CardAudio = CardAudio;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = exports.Audio = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _Audio = require("./Audio");
13
+
14
+ var _Layout = require("../../atoms/Layout");
15
+
16
+ var _default = {
17
+ title: 'Organisms/Audios',
18
+ component: _Audio.CardAudio
19
+ };
20
+ exports.default = _default;
21
+
22
+ var Template = function Template(args) {
23
+ return _react.default.createElement(_Layout.Container, null, _react.default.createElement(_Layout.Row, {
24
+ justifyContent: "center",
25
+ alignItems: "center"
26
+ }, _react.default.createElement(_Layout.Col, {
27
+ width: [1, 1, 1 / 2]
28
+ }, _react.default.createElement(_Audio.CardAudio, args))));
29
+ };
30
+
31
+ var Audio = Template.bind({});
32
+ exports.Audio = Audio;
33
+ Audio.args = {
34
+ contentColor: 'orange',
35
+ audio: "https://s3-eu-west-1.amazonaws.com/alife-cdn-test/audios/21/63/or_1163-3a4659f286180e236fc7db552889cd16.mp3"
36
+ };
@@ -0,0 +1,404 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.CreateAudio = void 0;
11
+
12
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
13
+
14
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
15
+
16
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
17
+
18
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
19
+
20
+ var _react = _interopRequireWildcard(require("react"));
21
+
22
+ var _recordrtc = _interopRequireDefault(require("recordrtc"));
23
+
24
+ var _wavesurfer = _interopRequireDefault(require("wavesurfer.js"));
25
+
26
+ var _Button = require("../../atoms/Button");
27
+
28
+ var _Icon = require("../../atoms/Icon");
29
+
30
+ var _Icons = require("../../atoms/Icons");
31
+
32
+ var _Layout = require("../../atoms/Layout");
33
+
34
+ var _Typography = require("../../atoms/Typography");
35
+
36
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
37
+
38
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
39
+
40
+ var CreateAudio = function CreateAudio(_ref) {
41
+ var textStopRecording = _ref.textStopRecording,
42
+ textStartRecording = _ref.textStartRecording,
43
+ audioData = _ref.audioData,
44
+ contentColor = _ref.contentColor,
45
+ textMicrophonePermissionDenied = _ref.textMicrophonePermissionDenied;
46
+ var mediaRecorderRef = (0, _react.useRef)(null);
47
+ var waveSurferRef = (0, _react.useRef)({
48
+ isPlaying: function isPlaying() {
49
+ return false;
50
+ }
51
+ });
52
+ var waveformRef = (0, _react.useRef)();
53
+ var waveformRefPlaceholder = (0, _react.useRef)();
54
+
55
+ var _useState = (0, _react.useState)(false),
56
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
57
+ isRecording = _useState2[0],
58
+ setIsRecording = _useState2[1];
59
+
60
+ var _useState3 = (0, _react.useState)(null),
61
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
62
+ waveSurfer = _useState4[0],
63
+ setWaveSurfer = _useState4[1];
64
+
65
+ var _useState5 = (0, _react.useState)(false),
66
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
67
+ isPlaying = _useState6[0],
68
+ toggleIsPlaying = _useState6[1];
69
+
70
+ var _useState7 = (0, _react.useState)(false),
71
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
72
+ countdownActive = _useState8[0],
73
+ setCountdownActive = _useState8[1];
74
+
75
+ var _useState9 = (0, _react.useState)('00:00'),
76
+ _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
77
+ durationTimerAudio = _useState10[0],
78
+ setDurationTimerAudio = _useState10[1];
79
+
80
+ var _useState11 = (0, _react.useState)(20),
81
+ _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
82
+ durationTime = _useState12[0],
83
+ setDurationTime = _useState12[1];
84
+
85
+ var _useState13 = (0, _react.useState)(false),
86
+ _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
87
+ isMicrophoneBlocked = _useState14[0],
88
+ setIsMicrophoneBlocked = _useState14[1];
89
+
90
+ var handleToggleRecording = function handleToggleRecording() {
91
+ if (isMicrophoneBlocked) return;
92
+
93
+ if (isRecording) {
94
+ setCountdownActive(false);
95
+ mediaRecorderRef.current.stopRecording((0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee() {
96
+ var audioBlob;
97
+ return _regenerator.default.wrap(function _callee$(_context) {
98
+ while (1) {
99
+ switch (_context.prev = _context.next) {
100
+ case 0:
101
+ audioBlob = mediaRecorderRef.current.getBlob();
102
+ waveSurfer.load(URL.createObjectURL(audioBlob));
103
+ audioData(audioBlob);
104
+
105
+ case 3:
106
+ case "end":
107
+ return _context.stop();
108
+ }
109
+ }
110
+ }, _callee);
111
+ })));
112
+ } else {
113
+ navigator.mediaDevices.getUserMedia({
114
+ audio: true
115
+ }).then(function (stream) {
116
+ var options = {
117
+ type: 'audio',
118
+ mimeType: 'audio/webm',
119
+ timeSlice: 1000
120
+ };
121
+ setCountdownActive(true);
122
+ setDurationTime(20);
123
+ var mediaRecorder = new _recordrtc.default(stream, options);
124
+ mediaRecorderRef.current = mediaRecorder;
125
+ mediaRecorderRef.current.startRecording();
126
+ }).catch(function (error) {
127
+ if (error.name === 'NotAllowedError' || error.name === 'PermissionDeniedError') setIsMicrophoneBlocked(true);
128
+ });
129
+ }
130
+
131
+ setIsRecording(function (prevIsRecording) {
132
+ return !prevIsRecording;
133
+ });
134
+ };
135
+
136
+ var handleDeleteAudio = function handleDeleteAudio() {
137
+ setDurationTime(20);
138
+ waveSurfer.empty();
139
+ audioData(null);
140
+ };
141
+
142
+ (0, _react.useEffect)(function () {
143
+ var interval;
144
+
145
+ if (countdownActive) {
146
+ interval = setInterval(function () {
147
+ setDurationTime(function (prevSegundos) {
148
+ return prevSegundos - 1;
149
+ });
150
+ }, 1000);
151
+ }
152
+
153
+ if (durationTime === 0 && countdownActive) {
154
+ setCountdownActive(false);
155
+ handleToggleRecording();
156
+ }
157
+
158
+ return function () {
159
+ clearInterval(interval);
160
+ };
161
+ }, [countdownActive, durationTime]);
162
+ (0, _react.useEffect)(function () {
163
+ var colorWave = 'rgba(242, 242, 243, 1)';
164
+
165
+ var waveSurferCreate = _wavesurfer.default.create({
166
+ container: waveformRef.current,
167
+ waveColor: colorWave,
168
+ progressColor: contentColor,
169
+ barWidth: 3,
170
+ barRadius: 3,
171
+ cursorWidth: 0,
172
+ height: 100,
173
+ hideScrollbar: true,
174
+ width: '100%',
175
+ fillParent: true,
176
+ barGap: 4,
177
+ scrollParent: true,
178
+ partialRender: true,
179
+ responsive: true
180
+ });
181
+
182
+ var waveSurferCreatePlaceholder = _wavesurfer.default.create({
183
+ container: waveformRefPlaceholder.current,
184
+ waveColor: colorWave,
185
+ progressColor: colorWave,
186
+ barWidth: 3,
187
+ barRadius: 3,
188
+ cursorWidth: 0,
189
+ height: 100,
190
+ width: '100%',
191
+ fillParent: true,
192
+ hideScrollbar: true,
193
+ minPxPerSec: 50,
194
+ barGap: 4,
195
+ scrollParent: true,
196
+ partialRender: true,
197
+ responsive: true
198
+ });
199
+
200
+ setWaveSurfer(waveSurferCreate);
201
+ var fakePeaks = [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05];
202
+ waveSurferCreatePlaceholder.load('https://www.mfiles.co.uk/mp3-downloads/gs-cd-track2.mp3', fakePeaks);
203
+ return function () {
204
+ waveSurferCreate.destroy();
205
+ waveSurferCreatePlaceholder.destroy();
206
+ };
207
+ }, []);
208
+
209
+ var secondsToMMss = function secondsToMMss(seconds) {
210
+ return new Date(seconds * 1000).toISOString().substring(14, 19);
211
+ };
212
+
213
+ (0, _react.useEffect)(function () {
214
+ if (!waveSurfer) return;
215
+ waveSurfer.on('ready', function () {
216
+ waveSurfer.setProgressColor(contentColor);
217
+ waveSurferRef.current = waveSurfer;
218
+ setDurationTimerAudio(secondsToMMss(waveSurfer.getDuration()));
219
+ var peaks = waveSurfer.backend.getPeaks(1024);
220
+ var minValue = Math.min.apply(Math, (0, _toConsumableArray2.default)(peaks));
221
+ var maxValue = Math.max.apply(Math, (0, _toConsumableArray2.default)(peaks));
222
+ var volume = peaks.map(function (value) {
223
+ return value > 0.05 ? value - minValue - 0.01 / (maxValue - minValue) : 0.05;
224
+ });
225
+ waveSurfer.drawer.drawPeaks(volume, waveSurfer.drawer.width, 0, volume.length);
226
+ waveSurfer.drawer.containerWidth = waveSurfer.drawer.container.clientWidth;
227
+ waveSurfer.drawBuffer();
228
+ });
229
+ waveSurfer.on('audioprocess', function () {
230
+ setDurationTimerAudio(secondsToMMss(waveSurfer.getCurrentTime()));
231
+ });
232
+ waveSurfer.on('finish', function () {
233
+ toggleIsPlaying(false);
234
+ });
235
+ }, [waveSurfer]);
236
+
237
+ if (isMicrophoneBlocked) {
238
+ return _react.default.createElement(_Typography.Text, {
239
+ sizeText: "display16",
240
+ fontWeight: "bold",
241
+ display: "flex",
242
+ style: {
243
+ justifyContent: 'center'
244
+ }
245
+ }, textMicrophonePermissionDenied);
246
+ }
247
+
248
+ return _react.default.createElement(_Layout.Box, {
249
+ position: "relative",
250
+ display: "flex",
251
+ alignItems: "center",
252
+ style: {
253
+ gap: '10px'
254
+ }
255
+ }, !(waveSurfer !== null && waveSurfer !== void 0 && waveSurfer.isReady) ? _react.default.createElement(_Button.Button, {
256
+ colorType: contentColor,
257
+ backgroundColor: contentColor,
258
+ rounded: true,
259
+ sizeButton: "none",
260
+ action: handleToggleRecording,
261
+ width: "45px",
262
+ height: "45px"
263
+ }, _react.default.createElement(_Icon.Icon, {
264
+ sizeIcon: "display24",
265
+ color: "white"
266
+ }, isRecording ? _react.default.createElement(_Icons.IconPause, null) : _react.default.createElement(_Icons.IconMicrophone, null))) : _react.default.createElement(_Button.Button, {
267
+ colorType: contentColor,
268
+ backgroundColor: contentColor,
269
+ rounded: true,
270
+ sizeButton: "none",
271
+ action: function action() {
272
+ waveSurferRef.current.playPause();
273
+ toggleIsPlaying(!isPlaying);
274
+ },
275
+ width: "45px",
276
+ height: "45px"
277
+ }, _react.default.createElement(_Icon.Icon, {
278
+ sizeIcon: "display24",
279
+ color: "white"
280
+ }, isPlaying ? _react.default.createElement(_Icons.IconPause, null) : _react.default.createElement(_Icons.IconPlay, {
281
+ stroke: "white"
282
+ }))), _react.default.createElement(TextExplainButton, {
283
+ isRecording: isRecording,
284
+ textStopRecording: textStopRecording,
285
+ textStartRecording: textStartRecording
286
+ }), _react.default.createElement("div", {
287
+ ref: waveformRef,
288
+ style: {
289
+ display: "".concat(waveSurfer !== null && waveSurfer !== void 0 && waveSurfer.isReady ? 'block' : 'none'),
290
+ width: '100%'
291
+ }
292
+ }), _react.default.createElement("div", {
293
+ ref: waveformRefPlaceholder,
294
+ style: {
295
+ display: "".concat(!(waveSurfer !== null && waveSurfer !== void 0 && waveSurfer.isReady) ? 'initial' : 'none'),
296
+ width: '100%'
297
+ }
298
+ }), _react.default.createElement(_Typography.Text, {
299
+ color: "black36",
300
+ sizeText: "display12"
301
+ }, countdownActive || durationTime === 20 ? "-00:".concat(durationTime < 10 ? "0".concat(durationTime) : durationTime) : durationTimerAudio), (waveSurfer === null || waveSurfer === void 0 ? void 0 : waveSurfer.isReady) && _react.default.createElement(_Button.Button, {
302
+ colorType: "none",
303
+ action: function action() {
304
+ return handleDeleteAudio();
305
+ },
306
+ padding: 0,
307
+ minWidth: "auto"
308
+ }, _react.default.createElement(_Icon.Icon, {
309
+ sizeIcon: "display24",
310
+ color: "red"
311
+ }, _react.default.createElement(_Icons.IconTrash, null))));
312
+ };
313
+
314
+ exports.CreateAudio = CreateAudio;
315
+
316
+ var TextExplainButton = function TextExplainButton(_ref3) {
317
+ var textStopRecording = _ref3.textStopRecording,
318
+ textStartRecording = _ref3.textStartRecording,
319
+ isRecording = _ref3.isRecording;
320
+ var firstStart = (0, _react.useRef)(true);
321
+ var firstStop = (0, _react.useRef)(true);
322
+
323
+ var _useState15 = (0, _react.useState)(firstStop.current),
324
+ _useState16 = (0, _slicedToArray2.default)(_useState15, 2),
325
+ firstTimeStop = _useState16[0],
326
+ setFirstTimeStop = _useState16[1];
327
+
328
+ var _useState17 = (0, _react.useState)(firstStart.current),
329
+ _useState18 = (0, _slicedToArray2.default)(_useState17, 2),
330
+ firstTimeStart = _useState18[0],
331
+ setFirstTimeStart = _useState18[1];
332
+
333
+ var stylesDiv = {
334
+ backgroundColor: 'white',
335
+ position: 'absolute',
336
+ top: '90px',
337
+ left: '5px',
338
+ padding: '14px',
339
+ zIndex: '10',
340
+ borderRadius: '9px',
341
+ filter: 'drop-shadow(0px 8px 18px rgba(60, 54, 58, 0.1)) drop-shadow(0px -8px 18px rgba(60, 54, 58, 0.1))'
342
+ };
343
+ var stylesTriangle = {
344
+ position: 'absolute',
345
+ top: '-20px',
346
+ borderLeft: '5px solid transparent',
347
+ borderRight: '5px solid transparent',
348
+ borderBottom: '10px solid white',
349
+ width: 0,
350
+ height: 0,
351
+ filter: 'drop-shadow(0px 8px 18px rgba(60, 54, 58, 0.1)) drop-shadow(0px -8px 18px rgba(60, 54, 58, 0.1))'
352
+ };
353
+ (0, _react.useEffect)(function () {
354
+ var timeout;
355
+ if (!firstStop.current && !firstStart.current) return;
356
+
357
+ if (isRecording) {
358
+ if (!firstStop.current) return;
359
+ timeout = setTimeout(function () {
360
+ firstStop.current = false;
361
+ setFirstTimeStop(false);
362
+ }, 2000);
363
+ } else {
364
+ if (!firstStart.current) return;
365
+ timeout = setTimeout(function () {
366
+ firstStart.current = false;
367
+ setFirstTimeStart(false);
368
+ }, 2000);
369
+ }
370
+
371
+ return function () {
372
+ return clearTimeout(timeout);
373
+ };
374
+ }, [isRecording]);
375
+ if (!firstStart.current && !firstStop.current) return null;
376
+
377
+ if (isRecording && firstTimeStop) {
378
+ return _react.default.createElement("div", {
379
+ style: stylesDiv
380
+ }, _react.default.createElement(_Layout.Box, {
381
+ position: "relative"
382
+ }, _react.default.createElement("div", {
383
+ style: stylesTriangle
384
+ })), _react.default.createElement(_Typography.Text, {
385
+ color: "black84",
386
+ sizeText: "display12"
387
+ }, textStopRecording));
388
+ }
389
+
390
+ if (!isRecording && firstTimeStart) {
391
+ return _react.default.createElement("div", {
392
+ style: stylesDiv
393
+ }, _react.default.createElement(_Layout.Box, {
394
+ position: "relative"
395
+ }, _react.default.createElement("div", {
396
+ style: stylesTriangle
397
+ })), _react.default.createElement(_Typography.Text, {
398
+ color: "black84",
399
+ sizeText: "display12"
400
+ }, textStartRecording));
401
+ }
402
+
403
+ return null;
404
+ };
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = exports.AddAudio = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _CreateAudio = require("./CreateAudio");
13
+
14
+ var _default = {
15
+ title: 'Organisms/Audios',
16
+ component: _CreateAudio.CreateAudio
17
+ };
18
+ exports.default = _default;
19
+
20
+ var Template = function Template(args) {
21
+ return _react.default.createElement(_CreateAudio.CreateAudio, args);
22
+ };
23
+
24
+ var AddAudio = Template.bind({});
25
+ exports.AddAudio = AddAudio;
26
+ AddAudio.args = {
27
+ textStopRecording: 'Pulsa para parar la grabación',
28
+ textStartRecording: 'Pulsa para empezar a grabar',
29
+ textMicrophonePermissionDenied: 'Tienes el micrófono deshabilitado, por favor actívalo e inténtelo de nuevo.',
30
+ contentColor: '#aed603',
31
+ audioData: function audioData(data) {
32
+ return void 0;
33
+ }
34
+ };
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "CardAudio", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _Audio.CardAudio;
10
+ }
11
+ });
12
+
13
+ var _Audio = require("./Audio");
@@ -29,6 +29,8 @@ var _PlaceholderLoad = require("../../atoms/PlaceholderLoad");
29
29
 
30
30
  var _IconClose = _interopRequireDefault(require("../../atoms/Icons/IconClose"));
31
31
 
32
+ var _Audio = require("../Audios/Audio");
33
+
32
34
  var CardBadges = function CardBadges(_ref) {
33
35
  var props = (0, _extends2.default)({}, _ref);
34
36
  return _react.default.createElement(_Card.Card, {
@@ -90,17 +92,17 @@ CardBadges.Body = function (props) {
90
92
  var text = props.text,
91
93
  picture = props.picture,
92
94
  countryCode = props.countryCode,
93
- showCountry = props.showCountry;
94
- return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_Layout.Flex, null, text && !picture && _react.default.createElement(_Typography.Text, {
95
- sizeText: "display16",
96
- color: "black"
97
- }, text || _react.default.createElement(_PlaceholderLoad.PlaceholderLoad, {
98
- height: "22px"
99
- })), picture && _react.default.createElement(_Image.Image, {
100
- height: "176px",
101
- width: "100%",
102
- src: picture
103
- })), showCountry && countryCode && _react.default.createElement(_Layout.Flex, {
95
+ showCountry = props.showCountry,
96
+ audio = props.audio,
97
+ contentColor = props.contentColor;
98
+ return _react.default.createElement(_react.default.Fragment, null, text && !picture && _react.default.createElement(CardText, {
99
+ text: text
100
+ }), picture && _react.default.createElement(CardPicture, {
101
+ picture: picture
102
+ }), audio ? _react.default.createElement(_Audio.CardAudio, {
103
+ contentColor: contentColor,
104
+ audio: audio
105
+ }) : null, showCountry && countryCode && _react.default.createElement(_Layout.Flex, {
104
106
  style: {
105
107
  flexFlow: 'row-reverse'
106
108
  }
@@ -110,6 +112,25 @@ CardBadges.Body = function (props) {
110
112
  }, countryCode)));
111
113
  };
112
114
 
115
+ var CardText = function CardText(_ref2) {
116
+ var text = _ref2.text;
117
+ return _react.default.createElement(_Layout.Flex, null, _react.default.createElement(_Typography.Text, {
118
+ sizeText: "display16",
119
+ color: "black"
120
+ }, text || _react.default.createElement(_PlaceholderLoad.PlaceholderLoad, {
121
+ height: "22px"
122
+ })));
123
+ };
124
+
125
+ var CardPicture = function CardPicture(_ref3) {
126
+ var picture = _ref3.picture;
127
+ return _react.default.createElement(_Layout.Flex, null, _react.default.createElement(_Image.Image, {
128
+ height: "176px",
129
+ width: "100%",
130
+ src: picture
131
+ }));
132
+ };
133
+
113
134
  CardBadges.Header.propTypes = {
114
135
  authorName: _propTypes.default.string.isRequired,
115
136
  contentIcon: _propTypes.default.element.isRequired,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lideralia/alife-uikit",
3
- "version": "1.2.30",
3
+ "version": "1.2.32",
4
4
  "description": "Librería y documentación de componentes, basada en el Design System de Alife.",
5
5
  "homepage": "https://github.com/lideralia/alife-frontend-components#readme",
6
6
  "bugs": {
@@ -93,8 +93,10 @@
93
93
  "react-livechat": "^1.1.1",
94
94
  "react-scripts": "4.0.3",
95
95
  "react-select": "^4.1.0",
96
+ "recordrtc": "^5.6.2",
96
97
  "styled-components": "^5.2.0",
97
98
  "styled-system": "^5.1.4",
99
+ "wavesurfer.js": "^6.6.3",
98
100
  "web-vitals": "^0.2.4"
99
101
  },
100
102
  "devDependencies": {