@megafon/ui-core 7.2.0 → 7.3.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/dist/es/components/Banner/Banner.css +1 -1
- package/dist/es/components/Banner/Banner.d.ts +2 -0
- package/dist/es/components/Banner/Banner.js +4 -1
- package/dist/es/components/Calendar/Calendar.css +1 -1
- package/dist/es/components/Calendar/Calendar.js +2 -2
- package/dist/es/components/Calendar/components/_Day/Day.css +1 -1
- package/dist/es/components/Calendar/components/_Month/Month.css +1 -1
- package/dist/es/components/Tooltip/Tooltip.css +1 -1
- package/dist/es/components/Tooltip/Tooltip.d.ts +8 -0
- package/dist/es/components/Tooltip/Tooltip.js +9 -2
- package/dist/es/components/UploadForm/UploadField/UploadField.css +1 -0
- package/dist/es/components/UploadForm/UploadField/UploadField.d.ts +22 -0
- package/dist/es/components/UploadForm/UploadField/UploadField.js +56 -0
- package/dist/es/components/UploadForm/UploadField/components/_UploadFieldDropArea/UploadFieldDropArea.css +1 -0
- package/dist/es/components/UploadForm/UploadField/components/_UploadFieldDropArea/UploadFieldDropArea.d.ts +21 -0
- package/dist/es/components/UploadForm/UploadField/components/_UploadFieldDropArea/UploadFieldDropArea.js +50 -0
- package/dist/es/components/UploadForm/UploadField/components/useDragAndDrop.d.ts +3 -0
- package/dist/es/components/UploadForm/UploadField/components/useDragAndDrop.js +50 -0
- package/dist/es/components/UploadForm/UploadFileItem/UploadFileItem.css +1 -0
- package/dist/es/components/UploadForm/UploadFileItem/UploadFileItem.d.ts +25 -0
- package/dist/es/components/UploadForm/UploadFileItem/UploadFileItem.js +96 -0
- package/dist/es/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/UploadFileItemIcon.d.ts +7 -0
- package/dist/es/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/UploadFileItemIcon.js +279 -0
- package/dist/es/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/attach.svg +3 -0
- package/dist/es/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/excel.svg +25 -0
- package/dist/es/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/image.svg +3 -0
- package/dist/es/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/pdf.svg +4 -0
- package/dist/es/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/power.svg +21 -0
- package/dist/es/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/word.svg +22 -0
- package/dist/es/components/UploadForm/UploadFileItem/helpers.d.ts +5 -0
- package/dist/es/components/UploadForm/UploadFileItem/helpers.js +27 -0
- package/dist/es/index.d.ts +5 -0
- package/dist/es/index.js +5 -0
- package/dist/lib/components/Banner/Banner.css +1 -1
- package/dist/lib/components/Banner/Banner.d.ts +2 -0
- package/dist/lib/components/Banner/Banner.js +4 -1
- package/dist/lib/components/Calendar/Calendar.css +1 -1
- package/dist/lib/components/Calendar/Calendar.js +2 -2
- package/dist/lib/components/Calendar/components/_Day/Day.css +1 -1
- package/dist/lib/components/Calendar/components/_Month/Month.css +1 -1
- package/dist/lib/components/Tooltip/Tooltip.css +1 -1
- package/dist/lib/components/Tooltip/Tooltip.d.ts +8 -0
- package/dist/lib/components/Tooltip/Tooltip.js +10 -3
- package/dist/lib/components/UploadForm/UploadField/UploadField.css +1 -0
- package/dist/lib/components/UploadForm/UploadField/UploadField.d.ts +22 -0
- package/dist/lib/components/UploadForm/UploadField/UploadField.js +65 -0
- package/dist/lib/components/UploadForm/UploadField/components/_UploadFieldDropArea/UploadFieldDropArea.css +1 -0
- package/dist/lib/components/UploadForm/UploadField/components/_UploadFieldDropArea/UploadFieldDropArea.d.ts +21 -0
- package/dist/lib/components/UploadForm/UploadField/components/_UploadFieldDropArea/UploadFieldDropArea.js +59 -0
- package/dist/lib/components/UploadForm/UploadField/components/useDragAndDrop.d.ts +3 -0
- package/dist/lib/components/UploadForm/UploadField/components/useDragAndDrop.js +57 -0
- package/dist/lib/components/UploadForm/UploadFileItem/UploadFileItem.css +1 -0
- package/dist/lib/components/UploadForm/UploadFileItem/UploadFileItem.d.ts +25 -0
- package/dist/lib/components/UploadForm/UploadFileItem/UploadFileItem.js +105 -0
- package/dist/lib/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/UploadFileItemIcon.d.ts +7 -0
- package/dist/lib/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/UploadFileItemIcon.js +289 -0
- package/dist/lib/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/attach.svg +3 -0
- package/dist/lib/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/excel.svg +25 -0
- package/dist/lib/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/image.svg +3 -0
- package/dist/lib/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/pdf.svg +4 -0
- package/dist/lib/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/power.svg +21 -0
- package/dist/lib/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/word.svg +22 -0
- package/dist/lib/components/UploadForm/UploadFileItem/helpers.d.ts +5 -0
- package/dist/lib/components/UploadForm/UploadFileItem/helpers.js +33 -0
- package/dist/lib/index.d.ts +5 -0
- package/dist/lib/index.js +35 -0
- package/package.json +3 -3
|
@@ -23,6 +23,10 @@ export declare const Paddings: {
|
|
|
23
23
|
readonly MEDIUM: "medium";
|
|
24
24
|
};
|
|
25
25
|
type PaddingsType = (typeof Paddings)[keyof typeof Paddings];
|
|
26
|
+
export declare const Offset: {
|
|
27
|
+
readonly SMALL: "small";
|
|
28
|
+
};
|
|
29
|
+
type OffsetType = (typeof Offset)[keyof typeof Offset];
|
|
26
30
|
export declare const TriggerEvent: {
|
|
27
31
|
readonly HOVER: "hover";
|
|
28
32
|
readonly CLICK: "click";
|
|
@@ -59,6 +63,8 @@ export interface ITooltipProps {
|
|
|
59
63
|
fallbackPlacements?: PlacementType[];
|
|
60
64
|
/** Размер отступов от контента */
|
|
61
65
|
paddings?: PaddingsType;
|
|
66
|
+
/** Смещение тултипа относительно триггер-элемента */
|
|
67
|
+
offset?: OffsetType;
|
|
62
68
|
/** Тип взаимодействия с триггер-элементом для показа тултипа */
|
|
63
69
|
triggerEvent?: TriggerEventType;
|
|
64
70
|
/** Реф на элемент, за границы которого тултип не сможет выйти. По умолчанию viewport */
|
|
@@ -69,6 +75,8 @@ export interface ITooltipProps {
|
|
|
69
75
|
targetElement?: React.RefObject<HTMLElement>;
|
|
70
76
|
/** Управление состоянием. Компонент поддерживает контроллируемое и неконтроллируемое состояние. */
|
|
71
77
|
isOpened?: boolean;
|
|
78
|
+
/** Пересчет позиции тултипа в скрытом состоянии при изменении размера окна */
|
|
79
|
+
isHiddenResize?: boolean;
|
|
72
80
|
/** Отрендерить компонент в корневой элементе страницы body */
|
|
73
81
|
isPortal?: boolean;
|
|
74
82
|
/** Рендеринг компонента в указанном селекторе */
|
|
@@ -4,7 +4,7 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.testIdPrefix = exports["default"] = exports.TriggerEvent = exports.Size = exports.Placement = exports.Paddings = exports.ColorTheme = void 0;
|
|
7
|
+
exports.testIdPrefix = exports["default"] = exports.TriggerEvent = exports.Size = exports.Placement = exports.Paddings = exports.Offset = exports.ColorTheme = void 0;
|
|
8
8
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
10
|
var React = _interopRequireWildcard(require("react"));
|
|
@@ -63,6 +63,9 @@ var Paddings = exports.Paddings = {
|
|
|
63
63
|
SMALL: 'small',
|
|
64
64
|
MEDIUM: 'medium'
|
|
65
65
|
};
|
|
66
|
+
var Offset = exports.Offset = {
|
|
67
|
+
SMALL: 'small'
|
|
68
|
+
};
|
|
66
69
|
var TriggerEvent = exports.TriggerEvent = {
|
|
67
70
|
HOVER: 'hover',
|
|
68
71
|
CLICK: 'click',
|
|
@@ -99,6 +102,7 @@ var Tooltip = function Tooltip(_ref) {
|
|
|
99
102
|
fallbackPlacements = _ref$fallbackPlacemen === void 0 ? ['left', 'right', 'top', 'bottom'] : _ref$fallbackPlacemen,
|
|
100
103
|
_ref$paddings = _ref.paddings,
|
|
101
104
|
paddings = _ref$paddings === void 0 ? 'small' : _ref$paddings,
|
|
105
|
+
offset = _ref.offset,
|
|
102
106
|
_ref$triggerEvent = _ref.triggerEvent,
|
|
103
107
|
triggerEvent = _ref$triggerEvent === void 0 ? 'hover' : _ref$triggerEvent,
|
|
104
108
|
boundaryElement = _ref.boundaryElement,
|
|
@@ -106,6 +110,8 @@ var Tooltip = function Tooltip(_ref) {
|
|
|
106
110
|
targetElement = _ref.targetElement,
|
|
107
111
|
_ref$isOpened = _ref.isOpened,
|
|
108
112
|
isOpened = _ref$isOpened === void 0 ? false : _ref$isOpened,
|
|
113
|
+
_ref$isHiddenResize = _ref.isHiddenResize,
|
|
114
|
+
isHiddenResize = _ref$isHiddenResize === void 0 ? false : _ref$isHiddenResize,
|
|
109
115
|
_ref$isPortal = _ref.isPortal,
|
|
110
116
|
isPortal = _ref$isPortal === void 0 ? false : _ref$isPortal,
|
|
111
117
|
portalSelector = _ref.portalSelector,
|
|
@@ -178,7 +184,7 @@ var Tooltip = function Tooltip(_ref) {
|
|
|
178
184
|
name: 'eventListeners',
|
|
179
185
|
options: {
|
|
180
186
|
scroll: isOpen,
|
|
181
|
-
resize: isOpen
|
|
187
|
+
resize: isHiddenResize || isOpen
|
|
182
188
|
}
|
|
183
189
|
}, {
|
|
184
190
|
name: 'preventOverflow',
|
|
@@ -187,7 +193,7 @@ var Tooltip = function Tooltip(_ref) {
|
|
|
187
193
|
}
|
|
188
194
|
}]
|
|
189
195
|
};
|
|
190
|
-
}, [placement, arrowElement,
|
|
196
|
+
}, [placement, arrowElement, fallbackPlacements, isOpen, isHiddenResize, currentBoundary]);
|
|
191
197
|
var _usePopper = (0, _reactPopper.usePopper)(currentTarget, popperElement, options),
|
|
192
198
|
styles = _usePopper.styles,
|
|
193
199
|
attributes = _usePopper.attributes,
|
|
@@ -321,6 +327,7 @@ var Tooltip = function Tooltip(_ref) {
|
|
|
321
327
|
className: cn({
|
|
322
328
|
theme: theme,
|
|
323
329
|
paddings: paddings,
|
|
330
|
+
offset: offset,
|
|
324
331
|
open: isOpen,
|
|
325
332
|
small: !isBigSize,
|
|
326
333
|
'has-escape': !targetElement
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
h1,h2,h3,h4,h5{margin:0}.mfui-upload-field{-webkit-box-sizing:border-box;box-sizing:border-box;max-width:455px;position:relative;width:100%}.mfui-upload-field__input{border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px;clip:rect(0 0 0 0);clip-path:inset(100%)}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import './UploadField.scss';
|
|
3
|
+
export interface IUploadDropField {
|
|
4
|
+
/** Дополнительный класс корневого элемента */
|
|
5
|
+
className?: string;
|
|
6
|
+
/** Обязательность поля */
|
|
7
|
+
required?: boolean;
|
|
8
|
+
/** Заблокированное состояние */
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
/** Действие при выборе файла */
|
|
11
|
+
onChange: (files: File[]) => void;
|
|
12
|
+
/** Дополнительная информация */
|
|
13
|
+
description?: string;
|
|
14
|
+
/** Дополнительные data атрибуты к внутренним элементам */
|
|
15
|
+
dataAttrs?: {
|
|
16
|
+
root?: Record<string, string>;
|
|
17
|
+
input?: Record<string, string>;
|
|
18
|
+
dropArea?: Record<string, string>;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
declare const UploadField: React.FC<IUploadDropField>;
|
|
22
|
+
export default UploadField;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
require("core-js/modules/es.symbol.js");
|
|
10
|
+
require("core-js/modules/es.symbol.description.js");
|
|
11
|
+
require("core-js/modules/es.array.from.js");
|
|
12
|
+
require("core-js/modules/es.string.iterator.js");
|
|
13
|
+
var React = _interopRequireWildcard(require("react"));
|
|
14
|
+
var _uiHelpers = require("@megafon/ui-helpers");
|
|
15
|
+
var _UploadFieldDropArea = _interopRequireDefault(require("./components/_UploadFieldDropArea/UploadFieldDropArea"));
|
|
16
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
17
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
18
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
19
|
+
var cn = (0, _uiHelpers.cnCreate)('mfui-upload-field');
|
|
20
|
+
var UploadField = function UploadField(_ref) {
|
|
21
|
+
var className = _ref.className,
|
|
22
|
+
_ref$required = _ref.required,
|
|
23
|
+
required = _ref$required === void 0 ? false : _ref$required,
|
|
24
|
+
_ref$disabled = _ref.disabled,
|
|
25
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
26
|
+
onChange = _ref.onChange,
|
|
27
|
+
description = _ref.description,
|
|
28
|
+
dataAttrs = _ref.dataAttrs;
|
|
29
|
+
var inputRef = React.useRef(null);
|
|
30
|
+
var handleInputChange = React.useCallback(function (e) {
|
|
31
|
+
var uploadFiles = Array.from(e.target.files || []);
|
|
32
|
+
onChange(uploadFiles);
|
|
33
|
+
e.target.value = '';
|
|
34
|
+
}, [onChange]);
|
|
35
|
+
var handleFileDrop = React.useCallback(function (uploadFiles) {
|
|
36
|
+
onChange(uploadFiles);
|
|
37
|
+
}, [onChange]);
|
|
38
|
+
var handleSelectButtonClick = React.useCallback(function () {
|
|
39
|
+
if (!inputRef || !inputRef.current) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
inputRef.current.click();
|
|
43
|
+
}, []);
|
|
44
|
+
return /*#__PURE__*/React.createElement("div", (0, _extends2["default"])({
|
|
45
|
+
className: cn([className])
|
|
46
|
+
}, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root)), /*#__PURE__*/React.createElement("input", (0, _extends2["default"])({
|
|
47
|
+
className: cn('input')
|
|
48
|
+
}, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.input), {
|
|
49
|
+
multiple: true,
|
|
50
|
+
type: "file",
|
|
51
|
+
ref: inputRef,
|
|
52
|
+
onChange: handleInputChange,
|
|
53
|
+
disabled: disabled
|
|
54
|
+
})), /*#__PURE__*/React.createElement(_UploadFieldDropArea["default"], {
|
|
55
|
+
description: description,
|
|
56
|
+
required: required,
|
|
57
|
+
disabled: disabled,
|
|
58
|
+
onDrop: handleFileDrop,
|
|
59
|
+
onSelectButtonClick: handleSelectButtonClick,
|
|
60
|
+
dataAttrs: {
|
|
61
|
+
root: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.dropArea
|
|
62
|
+
}
|
|
63
|
+
}));
|
|
64
|
+
};
|
|
65
|
+
var _default = exports["default"] = UploadField;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
h1,h2,h3,h4,h5{margin:0}.mfui-upload-field-drop-area{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:8px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border:1px dashed var(--spbSky2);border-radius:12px;padding:12px 32px 20px;width:100%}.mfui-upload-field-drop-area__upload-icon{height:40px;width:40px;fill:var(--spbSky3)}.mfui-upload-field-drop-area__content{text-align:center}.mfui-upload-field-drop-area__select-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:none;border-radius:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--brandGreen);cursor:pointer;display:inline-block;font-family:inherit;font-weight:500;margin-right:4px;outline:none;padding:0;text-align:center;text-decoration:none}.mfui-upload-field-drop-area__description{color:var(--spbSky3);font-size:12px;font-weight:400;line-height:18px;text-align:center}.mfui-upload-field-drop-area__select-button:hover{color:var(--buttonHoverGreen)}.mfui-upload-field-drop-area__mark{color:var(--fury)}.mfui-upload-field-drop-area_dragging{border-color:var(--brandGreen)}.mfui-upload-field-drop-area_dragging *{pointer-events:none}.mfui-upload-field-drop-area_disabled{background-color:var(--spbSky0);color:var(--spbSky3)}.mfui-upload-field-drop-area_disabled .mfui-upload-field-drop-area__select-button{color:var(--spbSky3);cursor:not-allowed}.mfui-upload-field-drop-area_disabled .mfui-upload-field-drop-area__mark{color:var(--spbSky3)}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import './UploadFieldDropArea.scss';
|
|
3
|
+
export interface IUploadFieldDropArea {
|
|
4
|
+
/** Дополнительная информация */
|
|
5
|
+
description?: string;
|
|
6
|
+
/** Обязательность поля */
|
|
7
|
+
required: boolean;
|
|
8
|
+
/** Заблокированное состояние */
|
|
9
|
+
disabled: boolean;
|
|
10
|
+
/** Обработчик события 'drop' */
|
|
11
|
+
onDrop: (files: File[]) => void;
|
|
12
|
+
/** Обработчик нажатия на кнопку выбора файлов */
|
|
13
|
+
onSelectButtonClick: () => void;
|
|
14
|
+
/** Дополнительные data атрибуты к внутренним элементам */
|
|
15
|
+
dataAttrs?: {
|
|
16
|
+
root?: Record<string, string>;
|
|
17
|
+
button?: Record<string, string>;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
declare const UploadFieldDropArea: React.FC<IUploadFieldDropArea>;
|
|
21
|
+
export default UploadFieldDropArea;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
require("core-js/modules/es.symbol.js");
|
|
10
|
+
require("core-js/modules/es.symbol.description.js");
|
|
11
|
+
var React = _interopRequireWildcard(require("react"));
|
|
12
|
+
var _uiHelpers = require("@megafon/ui-helpers");
|
|
13
|
+
var _useDragAndDrop = _interopRequireDefault(require("../useDragAndDrop"));
|
|
14
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
15
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
16
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
17
|
+
var CloudUpload = function CloudUpload(props) {
|
|
18
|
+
return /*#__PURE__*/React.createElement("svg", (0, _extends2["default"])({
|
|
19
|
+
viewBox: "0 0 40 40"
|
|
20
|
+
}, props), /*#__PURE__*/React.createElement("path", {
|
|
21
|
+
d: "M19 36V22l-2.38 3.9-1.71-1L19 18h1.88l4.14 6.85-1.71 1L21 22v14zM8.21 32H14v-2H8.21A4.27 4.27 0 014 25.6a4.27 4.27 0 014.21-4.4h2.07V18a9.94 9.94 0 019.66-10 9.94 9.94 0 019.66 10v1h1a5.49 5.49 0 010 11H26v2h4.6a7.49 7.49 0 001-14.91A11.94 11.94 0 0019.94 6 11.94 11.94 0 008.27 18v1.16h-.06A6.27 6.27 0 002 25.6 6.27 6.27 0 008.21 32z"
|
|
22
|
+
}));
|
|
23
|
+
};
|
|
24
|
+
var cn = (0, _uiHelpers.cnCreate)('mfui-upload-field-drop-area');
|
|
25
|
+
var UploadFieldDropArea = function UploadFieldDropArea(_ref) {
|
|
26
|
+
var description = _ref.description,
|
|
27
|
+
required = _ref.required,
|
|
28
|
+
disabled = _ref.disabled,
|
|
29
|
+
onDrop = _ref.onDrop,
|
|
30
|
+
onSelectButtonClick = _ref.onSelectButtonClick,
|
|
31
|
+
dataAttrs = _ref.dataAttrs;
|
|
32
|
+
var dropAreaRef = React.useRef(null);
|
|
33
|
+
var currentDropAreaRef = !disabled ? dropAreaRef : {
|
|
34
|
+
current: null
|
|
35
|
+
};
|
|
36
|
+
var isDragging = (0, _useDragAndDrop["default"])(currentDropAreaRef, onDrop);
|
|
37
|
+
return /*#__PURE__*/React.createElement("div", (0, _extends2["default"])({
|
|
38
|
+
className: cn({
|
|
39
|
+
disabled: disabled,
|
|
40
|
+
dragging: isDragging
|
|
41
|
+
}),
|
|
42
|
+
ref: dropAreaRef
|
|
43
|
+
}, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root)), /*#__PURE__*/React.createElement(CloudUpload, {
|
|
44
|
+
className: cn('upload-icon')
|
|
45
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
46
|
+
className: cn('content')
|
|
47
|
+
}, /*#__PURE__*/React.createElement("button", (0, _extends2["default"])({
|
|
48
|
+
className: cn('select-button')
|
|
49
|
+
}, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.button), {
|
|
50
|
+
type: "button",
|
|
51
|
+
disabled: disabled,
|
|
52
|
+
onClick: !disabled ? onSelectButtonClick : undefined
|
|
53
|
+
}), "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u0430\u0439\u043B\u044B"), /*#__PURE__*/React.createElement("span", null, "\u0438\u043B\u0438 \u043F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u0435 \u0438\u0445 \u0441\u044E\u0434\u0430", required && /*#__PURE__*/React.createElement("span", {
|
|
54
|
+
className: cn('mark')
|
|
55
|
+
}, "*"))), !!description && /*#__PURE__*/React.createElement("div", {
|
|
56
|
+
className: cn('description')
|
|
57
|
+
}, description));
|
|
58
|
+
};
|
|
59
|
+
var _default = exports["default"] = UploadFieldDropArea;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
8
|
+
require("core-js/modules/es.array.from.js");
|
|
9
|
+
require("core-js/modules/es.string.iterator.js");
|
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
12
|
+
var useDragAndDrop = function useDragAndDrop(dropAreaRef, onDrop) {
|
|
13
|
+
var _React$useState = _react["default"].useState(false),
|
|
14
|
+
_React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
|
|
15
|
+
isDragging = _React$useState2[0],
|
|
16
|
+
setIsDragging = _React$useState2[1];
|
|
17
|
+
var dragEnterHandler = _react["default"].useCallback(function (e) {
|
|
18
|
+
e.preventDefault();
|
|
19
|
+
e.stopPropagation();
|
|
20
|
+
setIsDragging(true);
|
|
21
|
+
}, []);
|
|
22
|
+
var dragLeaveHandler = _react["default"].useCallback(function (e) {
|
|
23
|
+
e.preventDefault();
|
|
24
|
+
e.stopPropagation();
|
|
25
|
+
setIsDragging(false);
|
|
26
|
+
}, []);
|
|
27
|
+
var dragOverHandler = _react["default"].useCallback(function (e) {
|
|
28
|
+
e.preventDefault();
|
|
29
|
+
e.stopPropagation();
|
|
30
|
+
}, []);
|
|
31
|
+
var dropHandler = _react["default"].useCallback(function (e) {
|
|
32
|
+
e.preventDefault();
|
|
33
|
+
e.stopPropagation();
|
|
34
|
+
setIsDragging(false);
|
|
35
|
+
if (e.dataTransfer) {
|
|
36
|
+
onDrop(Array.from(e.dataTransfer.files));
|
|
37
|
+
}
|
|
38
|
+
}, [onDrop]);
|
|
39
|
+
_react["default"].useEffect(function () {
|
|
40
|
+
if (!dropAreaRef.current) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
var dropArea = dropAreaRef.current;
|
|
44
|
+
dropArea.addEventListener('dragenter', dragEnterHandler);
|
|
45
|
+
dropArea.addEventListener('dragleave', dragLeaveHandler);
|
|
46
|
+
dropArea.addEventListener('dragover', dragOverHandler);
|
|
47
|
+
dropArea.addEventListener('drop', dropHandler);
|
|
48
|
+
return function () {
|
|
49
|
+
dropArea.removeEventListener('dragenter', dragEnterHandler);
|
|
50
|
+
dropArea.removeEventListener('dragleave', dragLeaveHandler);
|
|
51
|
+
dropArea.removeEventListener('dragover', dragOverHandler);
|
|
52
|
+
dropArea.removeEventListener('drop', dropHandler);
|
|
53
|
+
};
|
|
54
|
+
}, [dragEnterHandler, dragLeaveHandler, dragOverHandler, dropHandler, dropAreaRef]);
|
|
55
|
+
return isDragging;
|
|
56
|
+
};
|
|
57
|
+
var _default = exports["default"] = useDragAndDrop;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
h1,h2,h3,h4,h5{margin:0}.mfui-upload-file-item{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;border-color:var(--spbSky1);border-radius:12px;border-style:solid;border-width:1px;-webkit-box-sizing:border-box;box-sizing:border-box;max-width:455px;padding:12px;width:100%}.mfui-upload-file-item__cancel-icon-box,.mfui-upload-file-item__file-icon-box{-ms-flex-negative:0;flex-shrink:0;height:32px;margin-top:5px;width:32px}.mfui-upload-file-item__cancel-icon-box{background-color:var(--spbSky0);border:none;border-radius:50%;cursor:pointer;padding:0}.mfui-upload-file-item__cancel-icon-box svg{fill:var(--spbSky3)}.mfui-upload-file-item__cancel-icon-box:hover{background-color:var(--spbSky1)}.mfui-upload-file-item__cancel-icon-box:active{background-color:var(--spbSky2)}.mfui-upload-file-item__icon{height:100%;width:100%}.mfui-upload-file-item__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden}.mfui-upload-file-item__name{font-size:15px;font-weight:500;line-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.mfui-upload-file-item__description{color:var(--spbSky3);display:-webkit-box;display:-ms-flexbox;display:flex;font-size:12px;font-weight:400;gap:4px;line-height:18px}.mfui-upload-file-item__progress-bar{background-color:var(--spbSky1);border-radius:2px;height:4px;margin-top:12px;width:100%}.mfui-upload-file-item__progress-bar-fill{background-color:var(--brandGreen);border-radius:2px;height:100%;-webkit-transition:width .3s ease;transition:width .3s ease;width:0}.mfui-upload-file-item__service-message{color:var(--content)}.mfui-upload-file-item__error-message{color:var(--fury);cursor:pointer;-webkit-text-decoration-color:var(--fury);text-decoration-color:var(--fury);-webkit-text-decoration-line:underline;text-decoration-line:underline;-webkit-text-decoration-style:dotted;text-decoration-style:dotted;text-underline-offset:2px}.mfui-upload-file-item__error-tooltip{font-size:15px;font-weight:500;line-height:24px;max-width:260px}.mfui-upload-file-item_error{border-color:var(--fury20)}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import './UploadFileItem.scss';
|
|
3
|
+
export interface IUploadFileItem {
|
|
4
|
+
/** Дополнительный класс корневого элемента */
|
|
5
|
+
className?: string;
|
|
6
|
+
/** Имя файла с расширением */
|
|
7
|
+
fileName: string;
|
|
8
|
+
/** Размер файла в байтах */
|
|
9
|
+
fileSize?: string | number;
|
|
10
|
+
/** Процент загрузки файла */
|
|
11
|
+
loadingProgress?: number;
|
|
12
|
+
/** Сообщение об ошибке */
|
|
13
|
+
errorText?: string;
|
|
14
|
+
/** Проверка файла */
|
|
15
|
+
isChecking?: string;
|
|
16
|
+
/** Обработчик удаления файла */
|
|
17
|
+
onDelete?: (e: React.SyntheticEvent<EventTarget>) => void;
|
|
18
|
+
/** Дополнительные data атрибуты к внутренним элементам */
|
|
19
|
+
dataAttrs?: {
|
|
20
|
+
root?: Record<string, string>;
|
|
21
|
+
deleteButton?: Record<string, string>;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
declare const UploadFileItem: React.FC<IUploadFileItem>;
|
|
25
|
+
export default UploadFileItem;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
require("core-js/modules/es.function.name.js");
|
|
10
|
+
var React = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _uiHelpers = require("@megafon/ui-helpers");
|
|
12
|
+
var _Tooltip = _interopRequireDefault(require("../../Tooltip/Tooltip"));
|
|
13
|
+
var _UploadFileItemIcon = _interopRequireDefault(require("./components/_UploadFileItemIcon/UploadFileItemIcon"));
|
|
14
|
+
var _helpers = require("./helpers");
|
|
15
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
16
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
17
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
18
|
+
var CancelIcon = function CancelIcon(props) {
|
|
19
|
+
return /*#__PURE__*/React.createElement("svg", (0, _extends2["default"])({
|
|
20
|
+
viewBox: "0 0 32 32"
|
|
21
|
+
}, props), /*#__PURE__*/React.createElement("path", {
|
|
22
|
+
className: "CancelIcon__st0",
|
|
23
|
+
d: "M16 14.5L11.5 10 10 11.5l4.5 4.5-4.5 4.5 1.5 1.5 4.5-4.5 4.5 4.5 1.5-1.5-4.5-4.5 4.5-4.5-1.5-1.5-4.5 4.5z"
|
|
24
|
+
}));
|
|
25
|
+
};
|
|
26
|
+
var MAX_PROGRESS = 100;
|
|
27
|
+
var cn = (0, _uiHelpers.cnCreate)('mfui-upload-file-item');
|
|
28
|
+
var UploadFileItem = function UploadFileItem(_ref) {
|
|
29
|
+
var className = _ref.className,
|
|
30
|
+
fileName = _ref.fileName,
|
|
31
|
+
_ref$fileSize = _ref.fileSize,
|
|
32
|
+
fileSize = _ref$fileSize === void 0 ? 0 : _ref$fileSize,
|
|
33
|
+
_ref$loadingProgress = _ref.loadingProgress,
|
|
34
|
+
loadingProgress = _ref$loadingProgress === void 0 ? 0 : _ref$loadingProgress,
|
|
35
|
+
errorText = _ref.errorText,
|
|
36
|
+
_ref$isChecking = _ref.isChecking,
|
|
37
|
+
isChecking = _ref$isChecking === void 0 ? false : _ref$isChecking,
|
|
38
|
+
onDelete = _ref.onDelete,
|
|
39
|
+
dataAttrs = _ref.dataAttrs;
|
|
40
|
+
var tooltipTriggerElement = React.useRef(null);
|
|
41
|
+
var _splitFileName = (0, _helpers.splitFileName)(fileName),
|
|
42
|
+
name = _splitFileName.name,
|
|
43
|
+
extension = _splitFileName.extension;
|
|
44
|
+
var readableFileSize = (0, _helpers.getReadableFileSize)(fileSize);
|
|
45
|
+
var isError = !!errorText;
|
|
46
|
+
var handleDelete = function handleDelete(e) {
|
|
47
|
+
onDelete === null || onDelete === void 0 ? void 0 : onDelete(e);
|
|
48
|
+
};
|
|
49
|
+
var loadingStatusText = function loadingStatusText() {
|
|
50
|
+
if (isChecking) {
|
|
51
|
+
return 'проверка файла…';
|
|
52
|
+
}
|
|
53
|
+
if (loadingProgress === MAX_PROGRESS) {
|
|
54
|
+
return 'файл загружен';
|
|
55
|
+
}
|
|
56
|
+
return "\u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0430 ".concat(loadingProgress, "%");
|
|
57
|
+
};
|
|
58
|
+
var renderExtraContent = function renderExtraContent() {
|
|
59
|
+
if (isError) {
|
|
60
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
|
|
61
|
+
className: cn('error-message'),
|
|
62
|
+
ref: tooltipTriggerElement
|
|
63
|
+
}, "\u041E\u0448\u0438\u0431\u043A\u0430"), /*#__PURE__*/React.createElement(_Tooltip["default"], {
|
|
64
|
+
className: cn('error-tooltip'),
|
|
65
|
+
triggerElement: tooltipTriggerElement,
|
|
66
|
+
colorTheme: "blue",
|
|
67
|
+
placement: "bottom"
|
|
68
|
+
}, errorText));
|
|
69
|
+
}
|
|
70
|
+
return /*#__PURE__*/React.createElement("span", {
|
|
71
|
+
className: cn('service-message')
|
|
72
|
+
}, loadingStatusText());
|
|
73
|
+
};
|
|
74
|
+
return /*#__PURE__*/React.createElement("div", (0, _extends2["default"])({
|
|
75
|
+
className: cn({
|
|
76
|
+
error: isError
|
|
77
|
+
}, [className])
|
|
78
|
+
}, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root)), /*#__PURE__*/React.createElement("div", {
|
|
79
|
+
className: cn('file-icon-box')
|
|
80
|
+
}, /*#__PURE__*/React.createElement(_UploadFileItemIcon["default"], {
|
|
81
|
+
fileExtension: extension,
|
|
82
|
+
className: cn('icon')
|
|
83
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
84
|
+
className: cn('content')
|
|
85
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
86
|
+
className: cn('name')
|
|
87
|
+
}, name), /*#__PURE__*/React.createElement("div", {
|
|
88
|
+
className: cn('description')
|
|
89
|
+
}, !!extension && /*#__PURE__*/React.createElement("span", null, extension.toUpperCase()), /*#__PURE__*/React.createElement("span", null, readableFileSize), renderExtraContent()), /*#__PURE__*/React.createElement("div", {
|
|
90
|
+
className: cn('progress-bar')
|
|
91
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
92
|
+
className: cn('progress-bar-fill'),
|
|
93
|
+
style: {
|
|
94
|
+
width: "".concat(loadingProgress, "%")
|
|
95
|
+
}
|
|
96
|
+
}))), /*#__PURE__*/React.createElement("button", (0, _extends2["default"])({
|
|
97
|
+
type: "button",
|
|
98
|
+
className: cn('cancel-icon-box')
|
|
99
|
+
}, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.deleteButton), {
|
|
100
|
+
onClick: handleDelete
|
|
101
|
+
}), /*#__PURE__*/React.createElement(CancelIcon, {
|
|
102
|
+
className: cn('icon')
|
|
103
|
+
})));
|
|
104
|
+
};
|
|
105
|
+
var _default = exports["default"] = UploadFileItem;
|