@megafon/ui-core 5.7.1 → 5.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 +30 -0
- package/dist/es/components/{Chip → Chips}/Chip.css +53 -32
- package/dist/es/components/Chips/Chip.d.ts +74 -0
- package/dist/es/components/{Chip → Chips}/Chip.js +45 -6
- package/dist/es/components/Chips/Chips.css +19 -0
- package/dist/es/components/Chips/Chips.d.ts +27 -0
- package/dist/es/components/Chips/Chips.js +129 -0
- package/dist/es/components/Chips/components/ChipsDropdown.css +106 -0
- package/dist/es/components/Chips/components/ChipsDropdown.d.ts +16 -0
- package/dist/es/components/Chips/components/ChipsDropdown.js +101 -0
- package/dist/es/components/ContentView/ContentView.css +61 -0
- package/dist/es/components/ContentView/ContentView.d.ts +49 -0
- package/dist/es/components/ContentView/ContentView.js +103 -0
- package/dist/es/components/ContentView/i/alarm.png +0 -0
- package/dist/es/components/ContentView/i/empty.png +0 -0
- package/dist/es/components/ContentView/i/error.png +0 -0
- package/dist/es/components/ContentView/i/fail.png +0 -0
- package/dist/es/components/ContentView/i/searchNoResult.png +0 -0
- package/dist/es/components/ContentView/i/submit.png +0 -0
- package/dist/es/components/ContentView/i/success.png +0 -0
- package/dist/es/components/ContentView/i/update.png +0 -0
- package/dist/es/components/ContentView/i/waiting.png +0 -0
- package/dist/es/components/Search/Search.d.ts +2 -0
- package/dist/es/components/Search/Search.js +7 -2
- package/dist/es/components/Sliders/Slider/Slider.css +127 -0
- package/dist/es/components/Sliders/Slider/Slider.d.ts +41 -0
- package/dist/es/components/Sliders/Slider/Slider.js +126 -0
- package/dist/es/components/Sliders/SliderRange/SliderRange.css +154 -0
- package/dist/es/components/Sliders/SliderRange/SliderRange.d.ts +49 -0
- package/dist/es/components/Sliders/SliderRange/SliderRange.js +227 -0
- package/dist/es/components/Sliders/SliderRange/helpers.d.ts +6 -0
- package/dist/es/components/Sliders/SliderRange/helpers.js +31 -0
- package/dist/es/components/Sliders/SliderRatio/SliderRatio.css +209 -0
- package/dist/es/components/Sliders/SliderRatio/SliderRatio.d.ts +42 -0
- package/dist/es/components/Sliders/SliderRatio/SliderRatio.js +206 -0
- package/dist/es/components/Sliders/SliderRatio/helpers.d.ts +15 -0
- package/dist/es/components/Sliders/SliderRatio/helpers.js +32 -0
- package/dist/es/components/Sliders/SliderRatio/i/thumb.png +0 -0
- package/dist/es/components/Sliders/SliderRatio/types.d.ts +8 -0
- package/dist/es/components/Sliders/SliderRatio/types.js +6 -0
- package/dist/es/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.css +83 -0
- package/dist/es/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.d.ts +23 -0
- package/dist/es/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.js +82 -0
- package/dist/es/components/Sliders/components/SliderScale/SliderScale.css +15 -0
- package/dist/es/components/Sliders/components/SliderScale/SliderScale.d.ts +19 -0
- package/dist/es/components/Sliders/components/SliderScale/SliderScale.js +51 -0
- package/dist/es/components/Sliders/components/SliderScale/helpers.d.ts +2 -0
- package/dist/es/components/Sliders/components/SliderScale/helpers.js +39 -0
- package/dist/es/components/Sliders/helpers.d.ts +2 -0
- package/dist/es/components/Sliders/helpers.js +33 -0
- package/dist/es/components/Switcher/Switcher.css +13 -0
- package/dist/es/components/Switcher/Switcher.d.ts +3 -1
- package/dist/es/components/Switcher/Switcher.js +5 -1
- package/dist/es/components/Tabs/Tabs.css +11 -3
- package/dist/es/components/TextField/i/textarea-resizer.svg +1 -0
- package/dist/es/index.d.ts +9 -2
- package/dist/es/index.js +9 -2
- package/dist/lib/components/{Chip → Chips}/Chip.css +53 -32
- package/dist/lib/components/Chips/Chip.d.ts +74 -0
- package/dist/lib/components/{Chip → Chips}/Chip.js +49 -7
- package/dist/lib/components/Chips/Chips.css +19 -0
- package/dist/lib/components/Chips/Chips.d.ts +27 -0
- package/dist/lib/components/Chips/Chips.js +159 -0
- package/dist/lib/components/Chips/components/ChipsDropdown.css +106 -0
- package/dist/lib/components/Chips/components/ChipsDropdown.d.ts +16 -0
- package/dist/lib/components/Chips/components/ChipsDropdown.js +131 -0
- package/dist/lib/components/ContentView/ContentView.css +61 -0
- package/dist/lib/components/ContentView/ContentView.d.ts +49 -0
- package/dist/lib/components/ContentView/ContentView.js +133 -0
- package/dist/lib/components/ContentView/i/alarm.png +0 -0
- package/dist/lib/components/ContentView/i/empty.png +0 -0
- package/dist/lib/components/ContentView/i/error.png +0 -0
- package/dist/lib/components/ContentView/i/fail.png +0 -0
- package/dist/lib/components/ContentView/i/searchNoResult.png +0 -0
- package/dist/lib/components/ContentView/i/submit.png +0 -0
- package/dist/lib/components/ContentView/i/success.png +0 -0
- package/dist/lib/components/ContentView/i/update.png +0 -0
- package/dist/lib/components/ContentView/i/waiting.png +0 -0
- package/dist/lib/components/Search/Search.d.ts +2 -0
- package/dist/lib/components/Search/Search.js +7 -2
- package/dist/lib/components/Sliders/Slider/Slider.css +127 -0
- package/dist/lib/components/Sliders/Slider/Slider.d.ts +41 -0
- package/dist/lib/components/Sliders/Slider/Slider.js +150 -0
- package/dist/lib/components/Sliders/SliderRange/SliderRange.css +154 -0
- package/dist/lib/components/Sliders/SliderRange/SliderRange.d.ts +49 -0
- package/dist/lib/components/Sliders/SliderRange/SliderRange.js +252 -0
- package/dist/lib/components/Sliders/SliderRange/helpers.d.ts +6 -0
- package/dist/lib/components/Sliders/SliderRange/helpers.js +48 -0
- package/dist/lib/components/Sliders/SliderRatio/SliderRatio.css +209 -0
- package/dist/lib/components/Sliders/SliderRatio/SliderRatio.d.ts +42 -0
- package/dist/lib/components/Sliders/SliderRatio/SliderRatio.js +237 -0
- package/dist/lib/components/Sliders/SliderRatio/helpers.d.ts +15 -0
- package/dist/lib/components/Sliders/SliderRatio/helpers.js +58 -0
- package/dist/lib/components/Sliders/SliderRatio/i/thumb.png +0 -0
- package/dist/lib/components/Sliders/SliderRatio/types.d.ts +8 -0
- package/dist/lib/components/Sliders/SliderRatio/types.js +13 -0
- package/dist/lib/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.css +83 -0
- package/dist/lib/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.d.ts +23 -0
- package/dist/lib/components/Sliders/components/SliderDisplayValue/SliderDisplayValue.js +104 -0
- package/dist/lib/components/Sliders/components/SliderScale/SliderScale.css +15 -0
- package/dist/lib/components/Sliders/components/SliderScale/SliderScale.d.ts +19 -0
- package/dist/lib/components/Sliders/components/SliderScale/SliderScale.js +74 -0
- package/dist/lib/components/Sliders/components/SliderScale/helpers.d.ts +2 -0
- package/dist/lib/components/Sliders/components/SliderScale/helpers.js +60 -0
- package/dist/lib/components/Sliders/helpers.d.ts +2 -0
- package/dist/lib/components/Sliders/helpers.js +47 -0
- package/dist/lib/components/Switcher/Switcher.css +13 -0
- package/dist/lib/components/Switcher/Switcher.d.ts +3 -1
- package/dist/lib/components/Switcher/Switcher.js +5 -1
- package/dist/lib/components/Tabs/Tabs.css +11 -3
- package/dist/lib/components/TextField/i/textarea-resizer.svg +1 -0
- package/dist/lib/index.d.ts +9 -2
- package/dist/lib/index.js +65 -9
- package/package.json +5 -4
- package/dist/es/components/Chip/Chip.d.ts +0 -36
- package/dist/lib/components/Chip/Chip.d.ts +0 -36
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
+
import "core-js/modules/es.array.find.js";
|
|
4
|
+
import "core-js/modules/es.array.map.js";
|
|
5
|
+
import "core-js/modules/es.object.values.js";
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import { cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
|
|
8
|
+
import * as PropTypes from 'prop-types';
|
|
9
|
+
import Chip, { ChipColors, ChipPropType } from "../Chip";
|
|
10
|
+
import "./ChipsDropdown.css";
|
|
11
|
+
var cn = cnCreate('mfui-chips-dropdown');
|
|
12
|
+
|
|
13
|
+
var ChipsDropdown = function ChipsDropdown(_ref) {
|
|
14
|
+
var color = _ref.color,
|
|
15
|
+
moreTitle = _ref.moreTitle,
|
|
16
|
+
_ref$items = _ref.items,
|
|
17
|
+
items = _ref$items === void 0 ? [] : _ref$items,
|
|
18
|
+
value = _ref.value,
|
|
19
|
+
onClick = _ref.onClick,
|
|
20
|
+
dataAttrs = _ref.dataAttrs;
|
|
21
|
+
|
|
22
|
+
var _React$useState = React.useState(false),
|
|
23
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
24
|
+
isDropdownOpen = _React$useState2[0],
|
|
25
|
+
setIsDropdownOpen = _React$useState2[1];
|
|
26
|
+
|
|
27
|
+
var dropdownRef = React.useRef(null);
|
|
28
|
+
var listRef = React.useRef(null);
|
|
29
|
+
var currentItem = React.useMemo(function () {
|
|
30
|
+
return items.find(function (item) {
|
|
31
|
+
return item.id === value;
|
|
32
|
+
}) || {
|
|
33
|
+
id: '',
|
|
34
|
+
children: moreTitle
|
|
35
|
+
};
|
|
36
|
+
}, [items, value, moreTitle]);
|
|
37
|
+
var handleOutsideClick = React.useCallback(function (event) {
|
|
38
|
+
if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
|
|
39
|
+
setIsDropdownOpen(false);
|
|
40
|
+
}
|
|
41
|
+
}, []);
|
|
42
|
+
|
|
43
|
+
var handleOpenItemList = function handleOpenItemList() {
|
|
44
|
+
setIsDropdownOpen(true);
|
|
45
|
+
document.addEventListener('mousedown', handleOutsideClick);
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
var handleItemClick = React.useCallback(function (item) {
|
|
49
|
+
return function (e) {
|
|
50
|
+
e.persist();
|
|
51
|
+
setIsDropdownOpen(false);
|
|
52
|
+
onClick(e, item.id);
|
|
53
|
+
};
|
|
54
|
+
}, [onClick]);
|
|
55
|
+
React.useEffect(function () {
|
|
56
|
+
if (!isDropdownOpen) {
|
|
57
|
+
document.removeEventListener('mousedown', handleOutsideClick);
|
|
58
|
+
}
|
|
59
|
+
}, [handleOutsideClick, isDropdownOpen]);
|
|
60
|
+
React.useEffect(function () {
|
|
61
|
+
return function () {
|
|
62
|
+
return document.removeEventListener('mousedown', handleOutsideClick);
|
|
63
|
+
};
|
|
64
|
+
}, [handleOutsideClick]);
|
|
65
|
+
return /*#__PURE__*/React.createElement("div", _extends({
|
|
66
|
+
className: cn(),
|
|
67
|
+
ref: dropdownRef
|
|
68
|
+
}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root)), /*#__PURE__*/React.createElement(Chip, _extends({}, currentItem, {
|
|
69
|
+
className: cn('button'),
|
|
70
|
+
color: color,
|
|
71
|
+
checked: !!currentItem.id,
|
|
72
|
+
arrow: isDropdownOpen ? 'up' : 'down',
|
|
73
|
+
onClick: handleOpenItemList
|
|
74
|
+
})), isDropdownOpen && /*#__PURE__*/React.createElement("div", _extends({
|
|
75
|
+
className: cn('list'),
|
|
76
|
+
ref: listRef
|
|
77
|
+
}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.list)), /*#__PURE__*/React.createElement("div", {
|
|
78
|
+
className: cn('list-inner')
|
|
79
|
+
}, items.map(function (item, key) {
|
|
80
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
81
|
+
key: key,
|
|
82
|
+
className: cn('list-item', {
|
|
83
|
+
'with-icon': !!item.icon
|
|
84
|
+
}),
|
|
85
|
+
onClick: handleItemClick(item),
|
|
86
|
+
onKeyDown: handleItemClick(item)
|
|
87
|
+
}, !!(item === null || item === void 0 ? void 0 : item.icon) && /*#__PURE__*/React.createElement("span", {
|
|
88
|
+
className: cn('icon')
|
|
89
|
+
}, item.icon), !!(item === null || item === void 0 ? void 0 : item.children) && item.children);
|
|
90
|
+
}))));
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
ChipsDropdown.propTypes = {
|
|
94
|
+
moreTitle: PropTypes.string.isRequired,
|
|
95
|
+
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
|
|
96
|
+
items: PropTypes.arrayOf(PropTypes.shape(ChipPropType).isRequired).isRequired,
|
|
97
|
+
color: PropTypes.oneOf(Object.values(ChipColors)).isRequired,
|
|
98
|
+
onClick: PropTypes.func.isRequired,
|
|
99
|
+
dataAttrs: PropTypes.objectOf(PropTypes.object)
|
|
100
|
+
};
|
|
101
|
+
export default ChipsDropdown;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
.mfui-content-view {
|
|
2
|
+
min-width: 240px;
|
|
3
|
+
padding: 0 16px;
|
|
4
|
+
color: var(--content);
|
|
5
|
+
text-align: center;
|
|
6
|
+
}
|
|
7
|
+
.mfui-content-view__image {
|
|
8
|
+
max-width: 144px;
|
|
9
|
+
margin-bottom: 24px;
|
|
10
|
+
vertical-align: top;
|
|
11
|
+
}
|
|
12
|
+
.mfui-content-view__title {
|
|
13
|
+
font-weight: 500;
|
|
14
|
+
font-size: 20px;
|
|
15
|
+
line-height: 28px;
|
|
16
|
+
letter-spacing: 0.5px;
|
|
17
|
+
}
|
|
18
|
+
.mfui-content-view__text {
|
|
19
|
+
font-size: 15px;
|
|
20
|
+
line-height: 24px;
|
|
21
|
+
font-weight: 400;
|
|
22
|
+
margin-top: 4px;
|
|
23
|
+
}
|
|
24
|
+
.mfui-content-view__buttons {
|
|
25
|
+
display: -webkit-box;
|
|
26
|
+
display: -ms-flexbox;
|
|
27
|
+
display: flex;
|
|
28
|
+
-webkit-box-orient: vertical;
|
|
29
|
+
-webkit-box-direction: normal;
|
|
30
|
+
-ms-flex-direction: column;
|
|
31
|
+
flex-direction: column;
|
|
32
|
+
gap: 12px;
|
|
33
|
+
-webkit-box-align: center;
|
|
34
|
+
-ms-flex-align: center;
|
|
35
|
+
align-items: center;
|
|
36
|
+
padding-top: 32px;
|
|
37
|
+
}
|
|
38
|
+
.mfui-content-view_fullscreen {
|
|
39
|
+
display: -webkit-box;
|
|
40
|
+
display: -ms-flexbox;
|
|
41
|
+
display: flex;
|
|
42
|
+
-webkit-box-orient: vertical;
|
|
43
|
+
-webkit-box-direction: normal;
|
|
44
|
+
-ms-flex-direction: column;
|
|
45
|
+
flex-direction: column;
|
|
46
|
+
-webkit-box-align: center;
|
|
47
|
+
-ms-flex-align: center;
|
|
48
|
+
align-items: center;
|
|
49
|
+
-webkit-box-pack: center;
|
|
50
|
+
-ms-flex-pack: center;
|
|
51
|
+
justify-content: center;
|
|
52
|
+
min-height: 100%;
|
|
53
|
+
}
|
|
54
|
+
.mfui-content-view_fullscreen .mfui-content-view__content {
|
|
55
|
+
margin-top: auto;
|
|
56
|
+
}
|
|
57
|
+
.mfui-content-view_fullscreen .mfui-content-view__buttons {
|
|
58
|
+
margin-top: auto;
|
|
59
|
+
padding-top: 24px;
|
|
60
|
+
padding-bottom: 24px;
|
|
61
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import './ContentView.less';
|
|
3
|
+
declare const imageMap: {
|
|
4
|
+
alarm: any;
|
|
5
|
+
empty: any;
|
|
6
|
+
error: any;
|
|
7
|
+
fail: any;
|
|
8
|
+
searchNoResult: any;
|
|
9
|
+
submit: any;
|
|
10
|
+
success: any;
|
|
11
|
+
update: any;
|
|
12
|
+
waiting: any;
|
|
13
|
+
};
|
|
14
|
+
declare type ElementType = {
|
|
15
|
+
/** Текст */
|
|
16
|
+
text?: string;
|
|
17
|
+
/** Атрибут href */
|
|
18
|
+
href?: string;
|
|
19
|
+
/** Атрибут target */
|
|
20
|
+
target?: '_self' | '_blank' | '_parent' | '_top';
|
|
21
|
+
/** Обработчик клика */
|
|
22
|
+
onClick?: (e: React.SyntheticEvent<EventTarget>) => void;
|
|
23
|
+
};
|
|
24
|
+
export interface IContentViewProps {
|
|
25
|
+
/** Дополнительный класс корневого элемента */
|
|
26
|
+
className?: string;
|
|
27
|
+
/** Заголовок */
|
|
28
|
+
title: string;
|
|
29
|
+
/** Тип встроенного изображения */
|
|
30
|
+
type?: keyof typeof imageMap;
|
|
31
|
+
/** Значение тега alt для изображения */
|
|
32
|
+
alt?: string;
|
|
33
|
+
/** Ссылка на изображение */
|
|
34
|
+
src?: string;
|
|
35
|
+
/** Параметры кнопки */
|
|
36
|
+
buttonParams?: ElementType;
|
|
37
|
+
/** Параметры ссылки */
|
|
38
|
+
linkParams?: ElementType;
|
|
39
|
+
/** Полноэкранный режим */
|
|
40
|
+
isFullscreen?: boolean;
|
|
41
|
+
/** Дополнительные data атрибуты к внутренним элементам */
|
|
42
|
+
dataAttrs?: {
|
|
43
|
+
root?: Record<string, string>;
|
|
44
|
+
button?: Record<string, string>;
|
|
45
|
+
link?: Record<string, string>;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
declare const ContentView: React.FC<IContentViewProps>;
|
|
49
|
+
export default ContentView;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import "core-js/modules/es.string.link.js";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
|
|
5
|
+
import * as PropTypes from 'prop-types';
|
|
6
|
+
import Button from "../Button/Button";
|
|
7
|
+
import alarmImg from "./i/alarm.png";
|
|
8
|
+
import emptyImg from "./i/empty.png";
|
|
9
|
+
import errorImg from "./i/error.png";
|
|
10
|
+
import failImg from "./i/fail.png";
|
|
11
|
+
import searchNoResultImg from "./i/searchNoResult.png";
|
|
12
|
+
import submitImg from "./i/submit.png";
|
|
13
|
+
import successImg from "./i/success.png";
|
|
14
|
+
import updateImg from "./i/update.png";
|
|
15
|
+
import waitingImg from "./i/waiting.png";
|
|
16
|
+
import "./ContentView.css";
|
|
17
|
+
var imageMap = {
|
|
18
|
+
alarm: alarmImg,
|
|
19
|
+
empty: emptyImg,
|
|
20
|
+
error: errorImg,
|
|
21
|
+
fail: failImg,
|
|
22
|
+
searchNoResult: searchNoResultImg,
|
|
23
|
+
submit: submitImg,
|
|
24
|
+
success: successImg,
|
|
25
|
+
update: updateImg,
|
|
26
|
+
waiting: waitingImg
|
|
27
|
+
};
|
|
28
|
+
var cn = cnCreate('mfui-content-view');
|
|
29
|
+
|
|
30
|
+
var ContentView = function ContentView(_ref) {
|
|
31
|
+
var className = _ref.className,
|
|
32
|
+
title = _ref.title,
|
|
33
|
+
type = _ref.type,
|
|
34
|
+
_ref$alt = _ref.alt,
|
|
35
|
+
alt = _ref$alt === void 0 ? '' : _ref$alt,
|
|
36
|
+
src = _ref.src,
|
|
37
|
+
buttonParams = _ref.buttonParams,
|
|
38
|
+
linkParams = _ref.linkParams,
|
|
39
|
+
isFullscreen = _ref.isFullscreen,
|
|
40
|
+
dataAttrs = _ref.dataAttrs,
|
|
41
|
+
children = _ref.children;
|
|
42
|
+
var imageSrc = type ? imageMap[type] : src;
|
|
43
|
+
var showButtons = !!(buttonParams === null || buttonParams === void 0 ? void 0 : buttonParams.text) || !!(linkParams === null || linkParams === void 0 ? void 0 : linkParams.text);
|
|
44
|
+
return /*#__PURE__*/React.createElement("div", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root), {
|
|
45
|
+
className: cn({
|
|
46
|
+
fullscreen: isFullscreen
|
|
47
|
+
}, [className])
|
|
48
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
49
|
+
className: cn('content')
|
|
50
|
+
}, /*#__PURE__*/React.createElement("img", {
|
|
51
|
+
className: cn('image'),
|
|
52
|
+
src: imageSrc,
|
|
53
|
+
alt: alt
|
|
54
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
55
|
+
className: cn('title')
|
|
56
|
+
}, title), !!children && /*#__PURE__*/React.createElement("div", {
|
|
57
|
+
className: cn('text')
|
|
58
|
+
}, children)), showButtons && /*#__PURE__*/React.createElement("div", {
|
|
59
|
+
className: cn('buttons')
|
|
60
|
+
}, !!(buttonParams === null || buttonParams === void 0 ? void 0 : buttonParams.text) && /*#__PURE__*/React.createElement(Button, {
|
|
61
|
+
href: buttonParams.href,
|
|
62
|
+
target: buttonParams.target,
|
|
63
|
+
onClick: buttonParams.onClick,
|
|
64
|
+
dataAttrs: {
|
|
65
|
+
root: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.button
|
|
66
|
+
}
|
|
67
|
+
}, buttonParams.text), !!(linkParams === null || linkParams === void 0 ? void 0 : linkParams.text) && /*#__PURE__*/React.createElement(Button, {
|
|
68
|
+
type: "text",
|
|
69
|
+
href: linkParams.href,
|
|
70
|
+
target: linkParams.target,
|
|
71
|
+
onClick: linkParams.onClick,
|
|
72
|
+
dataAttrs: {
|
|
73
|
+
root: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.link
|
|
74
|
+
}
|
|
75
|
+
}, linkParams.text)));
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
ContentView.propTypes = {
|
|
79
|
+
className: PropTypes.string,
|
|
80
|
+
title: PropTypes.string.isRequired,
|
|
81
|
+
type: PropTypes.oneOf(['waiting', 'error', 'submit', 'success', 'fail', 'update', 'alarm', 'empty', 'searchNoResult']),
|
|
82
|
+
alt: PropTypes.string,
|
|
83
|
+
src: PropTypes.string,
|
|
84
|
+
buttonParams: PropTypes.shape({
|
|
85
|
+
text: PropTypes.string,
|
|
86
|
+
href: PropTypes.string,
|
|
87
|
+
target: PropTypes.oneOf(['_self', '_blank', '_parent', '_top']),
|
|
88
|
+
onClick: PropTypes.func
|
|
89
|
+
}),
|
|
90
|
+
linkParams: PropTypes.shape({
|
|
91
|
+
text: PropTypes.string,
|
|
92
|
+
href: PropTypes.string,
|
|
93
|
+
target: PropTypes.oneOf(['_self', '_blank', '_parent', '_top']),
|
|
94
|
+
onClick: PropTypes.func
|
|
95
|
+
}),
|
|
96
|
+
isFullscreen: PropTypes.bool,
|
|
97
|
+
dataAttrs: PropTypes.shape({
|
|
98
|
+
root: PropTypes.objectOf(PropTypes.string.isRequired),
|
|
99
|
+
button: PropTypes.objectOf(PropTypes.string.isRequired),
|
|
100
|
+
link: PropTypes.objectOf(PropTypes.string.isRequired)
|
|
101
|
+
})
|
|
102
|
+
};
|
|
103
|
+
export default ContentView;
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -13,6 +13,8 @@ export declare const SearchItemsPaddings: {
|
|
|
13
13
|
export declare type SearchItem = {
|
|
14
14
|
/** Значение value элемента */
|
|
15
15
|
value: string;
|
|
16
|
+
/** Ссылка элемента */
|
|
17
|
+
href?: string;
|
|
16
18
|
/** Настраиваемое отображение элементов в выпадающем списке */
|
|
17
19
|
searchView?: ElementOrString;
|
|
18
20
|
/** Размер горизонтальных отступов элемента */
|
|
@@ -152,8 +152,12 @@ var Search = function Search(_ref) {
|
|
|
152
152
|
return;
|
|
153
153
|
}
|
|
154
154
|
|
|
155
|
-
var
|
|
156
|
-
onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(
|
|
155
|
+
var chosenItem = items[index];
|
|
156
|
+
onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(chosenItem.value);
|
|
157
|
+
|
|
158
|
+
if (chosenItem.href) {
|
|
159
|
+
window.location.href = chosenItem.href;
|
|
160
|
+
}
|
|
157
161
|
}, [disabled, items, onSubmit]);
|
|
158
162
|
var handleSelectSubmit = React.useCallback(function (index) {
|
|
159
163
|
return function () {
|
|
@@ -465,6 +469,7 @@ Search.propTypes = {
|
|
|
465
469
|
hideIcon: PropTypes.bool,
|
|
466
470
|
items: PropTypes.arrayOf(PropTypes.shape({
|
|
467
471
|
value: PropTypes.string.isRequired,
|
|
472
|
+
href: PropTypes.string,
|
|
468
473
|
searchView: PropTypes.oneOfType([PropTypes.string, PropTypes.element, PropTypes.arrayOf(PropTypes.element)]),
|
|
469
474
|
paddings: PropTypes.oneOf(Object.values(SearchItemsPaddings))
|
|
470
475
|
}).isRequired),
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
.mfui-slider {
|
|
2
|
+
display: -webkit-box;
|
|
3
|
+
display: -ms-flexbox;
|
|
4
|
+
display: flex;
|
|
5
|
+
-webkit-box-orient: vertical;
|
|
6
|
+
-webkit-box-direction: normal;
|
|
7
|
+
-ms-flex-direction: column;
|
|
8
|
+
flex-direction: column;
|
|
9
|
+
}
|
|
10
|
+
.mfui-slider__head {
|
|
11
|
+
font-size: 15px;
|
|
12
|
+
line-height: 24px;
|
|
13
|
+
font-weight: 500;
|
|
14
|
+
display: -webkit-box;
|
|
15
|
+
display: -ms-flexbox;
|
|
16
|
+
display: flex;
|
|
17
|
+
-webkit-box-align: end;
|
|
18
|
+
-ms-flex-align: end;
|
|
19
|
+
align-items: flex-end;
|
|
20
|
+
margin-bottom: 8px;
|
|
21
|
+
}
|
|
22
|
+
.mfui-slider__display-value {
|
|
23
|
+
margin-left: auto;
|
|
24
|
+
}
|
|
25
|
+
.mfui-slider__range-input {
|
|
26
|
+
height: 12px;
|
|
27
|
+
margin: 6px 0;
|
|
28
|
+
border-radius: 100px;
|
|
29
|
+
background: var(--spbSky0);
|
|
30
|
+
background-image: -webkit-gradient(linear, left top, left bottom, from(var(--brandGreen)), to(var(--brandGreen)));
|
|
31
|
+
background-image: linear-gradient(var(--brandGreen), var(--brandGreen));
|
|
32
|
+
background-repeat: no-repeat;
|
|
33
|
+
outline: none;
|
|
34
|
+
cursor: pointer;
|
|
35
|
+
-webkit-appearance: none;
|
|
36
|
+
-moz-appearance: none;
|
|
37
|
+
appearance: none;
|
|
38
|
+
}
|
|
39
|
+
.mfui-slider__range-input:focus {
|
|
40
|
+
outline: none;
|
|
41
|
+
}
|
|
42
|
+
.mfui-slider__range-input::-webkit-slider-thumb {
|
|
43
|
+
width: 24px;
|
|
44
|
+
height: 24px;
|
|
45
|
+
border: none;
|
|
46
|
+
border-radius: 50%;
|
|
47
|
+
background-color: var(--stcWhite);
|
|
48
|
+
-webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
|
|
49
|
+
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
|
|
50
|
+
-webkit-appearance: none;
|
|
51
|
+
}
|
|
52
|
+
.mfui-slider__range-input::-moz-range-thumb {
|
|
53
|
+
width: 24px;
|
|
54
|
+
height: 24px;
|
|
55
|
+
border: none;
|
|
56
|
+
border-radius: 50%;
|
|
57
|
+
background-color: var(--stcWhite);
|
|
58
|
+
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
|
|
59
|
+
-webkit-appearance: none;
|
|
60
|
+
}
|
|
61
|
+
.mfui-slider__range-input::-ms-thumb {
|
|
62
|
+
width: 24px;
|
|
63
|
+
height: 24px;
|
|
64
|
+
border: none;
|
|
65
|
+
border-radius: 50%;
|
|
66
|
+
background-color: var(--stcWhite);
|
|
67
|
+
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
|
|
68
|
+
-webkit-appearance: none;
|
|
69
|
+
}
|
|
70
|
+
.mfui-slider__range-input::-webkit-slider-runnable-track {
|
|
71
|
+
border: none;
|
|
72
|
+
background: transparent;
|
|
73
|
+
-webkit-box-shadow: none;
|
|
74
|
+
box-shadow: none;
|
|
75
|
+
-webkit-appearance: none;
|
|
76
|
+
}
|
|
77
|
+
.mfui-slider__range-input::-moz-range-track {
|
|
78
|
+
border: none;
|
|
79
|
+
background: transparent;
|
|
80
|
+
box-shadow: none;
|
|
81
|
+
-webkit-appearance: none;
|
|
82
|
+
}
|
|
83
|
+
.mfui-slider__range-input::-ms-track {
|
|
84
|
+
border: none;
|
|
85
|
+
background: transparent;
|
|
86
|
+
box-shadow: none;
|
|
87
|
+
-webkit-appearance: none;
|
|
88
|
+
}
|
|
89
|
+
.mfui-slider_disabled .mfui-slider__head {
|
|
90
|
+
color: var(--spbSky3);
|
|
91
|
+
}
|
|
92
|
+
.mfui-slider_disabled .mfui-slider__range-input {
|
|
93
|
+
background-image: -webkit-gradient(linear, left top, left bottom, from(var(--spbSky1)), to(var(--spbSky1)));
|
|
94
|
+
background-image: linear-gradient(var(--spbSky1), var(--spbSky1));
|
|
95
|
+
cursor: default;
|
|
96
|
+
}
|
|
97
|
+
.mfui-slider_disabled .mfui-slider__range-input::-webkit-slider-thumb {
|
|
98
|
+
width: 24px;
|
|
99
|
+
height: 24px;
|
|
100
|
+
border: none;
|
|
101
|
+
border-radius: 50%;
|
|
102
|
+
background-color: var(--stcWhite);
|
|
103
|
+
-webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
|
|
104
|
+
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
|
|
105
|
+
-webkit-appearance: none;
|
|
106
|
+
background-color: var(--spbSky2);
|
|
107
|
+
}
|
|
108
|
+
.mfui-slider_disabled .mfui-slider__range-input::-moz-range-thumb {
|
|
109
|
+
width: 24px;
|
|
110
|
+
height: 24px;
|
|
111
|
+
border: none;
|
|
112
|
+
border-radius: 50%;
|
|
113
|
+
background-color: var(--stcWhite);
|
|
114
|
+
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
|
|
115
|
+
-webkit-appearance: none;
|
|
116
|
+
background-color: var(--spbSky2);
|
|
117
|
+
}
|
|
118
|
+
.mfui-slider_disabled .mfui-slider__range-input::-ms-thumb {
|
|
119
|
+
width: 24px;
|
|
120
|
+
height: 24px;
|
|
121
|
+
border: none;
|
|
122
|
+
border-radius: 50%;
|
|
123
|
+
background-color: var(--stcWhite);
|
|
124
|
+
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.16);
|
|
125
|
+
-webkit-appearance: none;
|
|
126
|
+
background-color: var(--spbSky2);
|
|
127
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { DisplayValueType } from '../components/SliderDisplayValue/SliderDisplayValue';
|
|
3
|
+
import { ScaleType } from '../components/SliderScale/SliderScale';
|
|
4
|
+
import './Slider.less';
|
|
5
|
+
export interface ISlider {
|
|
6
|
+
/** Дополнительный класс корневого элемента */
|
|
7
|
+
className?: string;
|
|
8
|
+
/** Текущее значение */
|
|
9
|
+
value?: number;
|
|
10
|
+
/** Минимальное значение */
|
|
11
|
+
minValue: number;
|
|
12
|
+
/** Максимальное значение */
|
|
13
|
+
maxValue: number;
|
|
14
|
+
/** Лейбл */
|
|
15
|
+
label?: string;
|
|
16
|
+
/** Тип выводимого значения */
|
|
17
|
+
displayValueType?: DisplayValueType;
|
|
18
|
+
/** Единица измерения выводимого значения */
|
|
19
|
+
displayValueUnit?: string;
|
|
20
|
+
/** Переводит компонент в контролируемое состояние */
|
|
21
|
+
isControlled?: boolean;
|
|
22
|
+
/** Шаг */
|
|
23
|
+
step?: number;
|
|
24
|
+
/** Тип встроенной шкалы */
|
|
25
|
+
scale?: ScaleType;
|
|
26
|
+
/** Кастомная шкала */
|
|
27
|
+
customScale?: string[];
|
|
28
|
+
/** Переводит компонент в выключенное состояние */
|
|
29
|
+
disabled?: boolean;
|
|
30
|
+
/** Дополнительные data атрибуты к внутренним элементам */
|
|
31
|
+
dataAttrs?: {
|
|
32
|
+
root?: Record<string, string>;
|
|
33
|
+
input?: Record<string, string>;
|
|
34
|
+
rangeInput?: Record<string, string>;
|
|
35
|
+
scale?: Record<string, string>;
|
|
36
|
+
};
|
|
37
|
+
/** Обработчик изменения значения */
|
|
38
|
+
onChange?: (value: number) => void;
|
|
39
|
+
}
|
|
40
|
+
declare const Slider: React.FC<ISlider>;
|
|
41
|
+
export default Slider;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
+
import "core-js/modules/es.object.values.js";
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import { cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
|
|
6
|
+
import * as PropTypes from 'prop-types';
|
|
7
|
+
import SliderDisplayValue, { DisplayValue } from "../components/SliderDisplayValue/SliderDisplayValue";
|
|
8
|
+
import SliderScale, { Scale } from "../components/SliderScale/SliderScale";
|
|
9
|
+
import { getRangeValue, getTrackSize } from "../helpers";
|
|
10
|
+
import "./Slider.css";
|
|
11
|
+
var cn = cnCreate('mfui-slider');
|
|
12
|
+
|
|
13
|
+
var Slider = function Slider(_ref) {
|
|
14
|
+
var className = _ref.className,
|
|
15
|
+
label = _ref.label,
|
|
16
|
+
displayValueType = _ref.displayValueType,
|
|
17
|
+
displayValueUnit = _ref.displayValueUnit,
|
|
18
|
+
_ref$value = _ref.value,
|
|
19
|
+
outerRangeValue = _ref$value === void 0 ? 0 : _ref$value,
|
|
20
|
+
minValue = _ref.minValue,
|
|
21
|
+
maxValue = _ref.maxValue,
|
|
22
|
+
_ref$isControlled = _ref.isControlled,
|
|
23
|
+
isControlled = _ref$isControlled === void 0 ? false : _ref$isControlled,
|
|
24
|
+
_ref$step = _ref.step,
|
|
25
|
+
step = _ref$step === void 0 ? 1 : _ref$step,
|
|
26
|
+
scale = _ref.scale,
|
|
27
|
+
customScale = _ref.customScale,
|
|
28
|
+
_ref$disabled = _ref.disabled,
|
|
29
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
30
|
+
dataAttrs = _ref.dataAttrs,
|
|
31
|
+
onChange = _ref.onChange;
|
|
32
|
+
var defaultRangeValue = outerRangeValue || minValue;
|
|
33
|
+
|
|
34
|
+
var _React$useState = React.useState(null),
|
|
35
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
36
|
+
rawInputValue = _React$useState2[0],
|
|
37
|
+
setRawInputValue = _React$useState2[1];
|
|
38
|
+
|
|
39
|
+
var _React$useState3 = React.useState(defaultRangeValue),
|
|
40
|
+
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
41
|
+
innerRangeValue = _React$useState4[0],
|
|
42
|
+
setInnerRangeValue = _React$useState4[1];
|
|
43
|
+
|
|
44
|
+
var rangeValue = isControlled ? outerRangeValue : innerRangeValue;
|
|
45
|
+
var trackSize = getTrackSize(rangeValue, minValue, maxValue);
|
|
46
|
+
var showHead = !!label || !!displayValueType;
|
|
47
|
+
|
|
48
|
+
var handleInputChange = function handleInputChange(isRange) {
|
|
49
|
+
return function (e) {
|
|
50
|
+
var targetValue = e.target.value;
|
|
51
|
+
var newRangeValue = getRangeValue(targetValue, minValue, maxValue, step);
|
|
52
|
+
!isControlled && setInnerRangeValue(newRangeValue);
|
|
53
|
+
!isRange && setRawInputValue(targetValue);
|
|
54
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(newRangeValue);
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
var handleInputBlur = function handleInputBlur() {
|
|
59
|
+
setRawInputValue(null);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
return /*#__PURE__*/React.createElement("div", _extends({
|
|
63
|
+
className: cn({
|
|
64
|
+
disabled: disabled
|
|
65
|
+
}, [className])
|
|
66
|
+
}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root)), showHead && /*#__PURE__*/React.createElement("div", {
|
|
67
|
+
className: cn('head')
|
|
68
|
+
}, !!label && /*#__PURE__*/React.createElement("div", {
|
|
69
|
+
className: cn('label')
|
|
70
|
+
}, label), !!displayValueType && /*#__PURE__*/React.createElement(SliderDisplayValue, {
|
|
71
|
+
className: cn('display-value'),
|
|
72
|
+
value: rawInputValue !== null && rawInputValue !== void 0 ? rawInputValue : rangeValue,
|
|
73
|
+
displayValueType: displayValueType,
|
|
74
|
+
displayValueUnit: displayValueUnit,
|
|
75
|
+
disabled: disabled,
|
|
76
|
+
onChange: handleInputChange(false),
|
|
77
|
+
onBlur: handleInputBlur,
|
|
78
|
+
dataAttrs: {
|
|
79
|
+
input: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.input
|
|
80
|
+
}
|
|
81
|
+
})), /*#__PURE__*/React.createElement("input", _extends({
|
|
82
|
+
className: cn('range-input'),
|
|
83
|
+
type: "range",
|
|
84
|
+
value: rangeValue,
|
|
85
|
+
min: minValue,
|
|
86
|
+
max: maxValue,
|
|
87
|
+
step: step,
|
|
88
|
+
onChange: handleInputChange(true),
|
|
89
|
+
disabled: disabled,
|
|
90
|
+
style: {
|
|
91
|
+
backgroundSize: "".concat(trackSize, "% 100%")
|
|
92
|
+
}
|
|
93
|
+
}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.rangeInput))), (!!scale || !!customScale) && /*#__PURE__*/React.createElement(SliderScale, {
|
|
94
|
+
minValue: minValue,
|
|
95
|
+
maxValue: maxValue,
|
|
96
|
+
scale: scale,
|
|
97
|
+
customScale: customScale,
|
|
98
|
+
disabled: disabled,
|
|
99
|
+
dataAttrs: {
|
|
100
|
+
root: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.scale
|
|
101
|
+
}
|
|
102
|
+
}));
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
Slider.propTypes = {
|
|
106
|
+
className: PropTypes.string,
|
|
107
|
+
value: PropTypes.number,
|
|
108
|
+
minValue: PropTypes.number.isRequired,
|
|
109
|
+
maxValue: PropTypes.number.isRequired,
|
|
110
|
+
label: PropTypes.string,
|
|
111
|
+
displayValueType: PropTypes.oneOf(Object.values(DisplayValue)),
|
|
112
|
+
displayValueUnit: PropTypes.string,
|
|
113
|
+
isControlled: PropTypes.bool,
|
|
114
|
+
step: PropTypes.number,
|
|
115
|
+
scale: PropTypes.oneOf(Object.values(Scale)),
|
|
116
|
+
customScale: PropTypes.arrayOf(PropTypes.string.isRequired),
|
|
117
|
+
disabled: PropTypes.bool,
|
|
118
|
+
onChange: PropTypes.func,
|
|
119
|
+
dataAttrs: PropTypes.shape({
|
|
120
|
+
root: PropTypes.objectOf(PropTypes.string.isRequired),
|
|
121
|
+
input: PropTypes.objectOf(PropTypes.string.isRequired),
|
|
122
|
+
rangeInput: PropTypes.objectOf(PropTypes.string.isRequired),
|
|
123
|
+
scale: PropTypes.objectOf(PropTypes.string.isRequired)
|
|
124
|
+
})
|
|
125
|
+
};
|
|
126
|
+
export default Slider;
|