@megafon/ui-core 7.2.1 → 7.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/dist/es/components/Banner/Banner.css +1 -1
  2. package/dist/es/components/Banner/Banner.d.ts +2 -0
  3. package/dist/es/components/Banner/Banner.js +4 -1
  4. package/dist/es/components/Calendar/Calendar.css +1 -1
  5. package/dist/es/components/Calendar/Calendar.js +2 -2
  6. package/dist/es/components/Calendar/components/_Day/Day.css +1 -1
  7. package/dist/es/components/Calendar/components/_Month/Month.css +1 -1
  8. package/dist/es/components/Search/Search.css +1 -1
  9. package/dist/es/components/Search/Search.d.ts +15 -2
  10. package/dist/es/components/Search/Search.js +173 -23
  11. package/dist/es/components/Search/i/textarea-resizer.svg +4 -0
  12. package/dist/es/components/Tooltip/Tooltip.css +1 -1
  13. package/dist/es/components/Tooltip/Tooltip.d.ts +8 -0
  14. package/dist/es/components/Tooltip/Tooltip.js +9 -2
  15. package/dist/es/components/UploadForm/UploadField/UploadField.css +1 -0
  16. package/dist/es/components/UploadForm/UploadField/UploadField.d.ts +22 -0
  17. package/dist/es/components/UploadForm/UploadField/UploadField.js +56 -0
  18. package/dist/es/components/UploadForm/UploadField/components/_UploadFieldDropArea/UploadFieldDropArea.css +1 -0
  19. package/dist/es/components/UploadForm/UploadField/components/_UploadFieldDropArea/UploadFieldDropArea.d.ts +21 -0
  20. package/dist/es/components/UploadForm/UploadField/components/_UploadFieldDropArea/UploadFieldDropArea.js +50 -0
  21. package/dist/es/components/UploadForm/UploadField/components/useDragAndDrop.d.ts +3 -0
  22. package/dist/es/components/UploadForm/UploadField/components/useDragAndDrop.js +50 -0
  23. package/dist/es/components/UploadForm/UploadFileItem/UploadFileItem.css +1 -0
  24. package/dist/es/components/UploadForm/UploadFileItem/UploadFileItem.d.ts +25 -0
  25. package/dist/es/components/UploadForm/UploadFileItem/UploadFileItem.js +96 -0
  26. package/dist/es/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/UploadFileItemIcon.d.ts +7 -0
  27. package/dist/es/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/UploadFileItemIcon.js +279 -0
  28. package/dist/es/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/attach.svg +3 -0
  29. package/dist/es/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/excel.svg +25 -0
  30. package/dist/es/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/image.svg +3 -0
  31. package/dist/es/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/pdf.svg +4 -0
  32. package/dist/es/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/power.svg +21 -0
  33. package/dist/es/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/word.svg +22 -0
  34. package/dist/es/components/UploadForm/UploadFileItem/helpers.d.ts +5 -0
  35. package/dist/es/components/UploadForm/UploadFileItem/helpers.js +27 -0
  36. package/dist/es/index.d.ts +5 -0
  37. package/dist/es/index.js +5 -0
  38. package/dist/lib/components/Banner/Banner.css +1 -1
  39. package/dist/lib/components/Banner/Banner.d.ts +2 -0
  40. package/dist/lib/components/Banner/Banner.js +4 -1
  41. package/dist/lib/components/Calendar/Calendar.css +1 -1
  42. package/dist/lib/components/Calendar/Calendar.js +2 -2
  43. package/dist/lib/components/Calendar/components/_Day/Day.css +1 -1
  44. package/dist/lib/components/Calendar/components/_Month/Month.css +1 -1
  45. package/dist/lib/components/Search/Search.css +1 -1
  46. package/dist/lib/components/Search/Search.d.ts +15 -2
  47. package/dist/lib/components/Search/Search.js +174 -24
  48. package/dist/lib/components/Search/i/textarea-resizer.svg +4 -0
  49. package/dist/lib/components/Tooltip/Tooltip.css +1 -1
  50. package/dist/lib/components/Tooltip/Tooltip.d.ts +8 -0
  51. package/dist/lib/components/Tooltip/Tooltip.js +10 -3
  52. package/dist/lib/components/UploadForm/UploadField/UploadField.css +1 -0
  53. package/dist/lib/components/UploadForm/UploadField/UploadField.d.ts +22 -0
  54. package/dist/lib/components/UploadForm/UploadField/UploadField.js +65 -0
  55. package/dist/lib/components/UploadForm/UploadField/components/_UploadFieldDropArea/UploadFieldDropArea.css +1 -0
  56. package/dist/lib/components/UploadForm/UploadField/components/_UploadFieldDropArea/UploadFieldDropArea.d.ts +21 -0
  57. package/dist/lib/components/UploadForm/UploadField/components/_UploadFieldDropArea/UploadFieldDropArea.js +59 -0
  58. package/dist/lib/components/UploadForm/UploadField/components/useDragAndDrop.d.ts +3 -0
  59. package/dist/lib/components/UploadForm/UploadField/components/useDragAndDrop.js +57 -0
  60. package/dist/lib/components/UploadForm/UploadFileItem/UploadFileItem.css +1 -0
  61. package/dist/lib/components/UploadForm/UploadFileItem/UploadFileItem.d.ts +25 -0
  62. package/dist/lib/components/UploadForm/UploadFileItem/UploadFileItem.js +105 -0
  63. package/dist/lib/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/UploadFileItemIcon.d.ts +7 -0
  64. package/dist/lib/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/UploadFileItemIcon.js +289 -0
  65. package/dist/lib/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/attach.svg +3 -0
  66. package/dist/lib/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/excel.svg +25 -0
  67. package/dist/lib/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/image.svg +3 -0
  68. package/dist/lib/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/pdf.svg +4 -0
  69. package/dist/lib/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/power.svg +21 -0
  70. package/dist/lib/components/UploadForm/UploadFileItem/components/_UploadFileItemIcon/i/word.svg +22 -0
  71. package/dist/lib/components/UploadForm/UploadFileItem/helpers.d.ts +5 -0
  72. package/dist/lib/components/UploadForm/UploadFileItem/helpers.js +33 -0
  73. package/dist/lib/index.d.ts +5 -0
  74. package/dist/lib/index.js +35 -0
  75. package/package.json +3 -3
@@ -54,6 +54,9 @@ export var Paddings = {
54
54
  SMALL: 'small',
55
55
  MEDIUM: 'medium'
56
56
  };
57
+ export var Offset = {
58
+ SMALL: 'small'
59
+ };
57
60
  export var TriggerEvent = {
58
61
  HOVER: 'hover',
59
62
  CLICK: 'click',
@@ -90,6 +93,7 @@ var Tooltip = function Tooltip(_ref) {
90
93
  fallbackPlacements = _ref$fallbackPlacemen === void 0 ? ['left', 'right', 'top', 'bottom'] : _ref$fallbackPlacemen,
91
94
  _ref$paddings = _ref.paddings,
92
95
  paddings = _ref$paddings === void 0 ? 'small' : _ref$paddings,
96
+ offset = _ref.offset,
93
97
  _ref$triggerEvent = _ref.triggerEvent,
94
98
  triggerEvent = _ref$triggerEvent === void 0 ? 'hover' : _ref$triggerEvent,
95
99
  boundaryElement = _ref.boundaryElement,
@@ -97,6 +101,8 @@ var Tooltip = function Tooltip(_ref) {
97
101
  targetElement = _ref.targetElement,
98
102
  _ref$isOpened = _ref.isOpened,
99
103
  isOpened = _ref$isOpened === void 0 ? false : _ref$isOpened,
104
+ _ref$isHiddenResize = _ref.isHiddenResize,
105
+ isHiddenResize = _ref$isHiddenResize === void 0 ? false : _ref$isHiddenResize,
100
106
  _ref$isPortal = _ref.isPortal,
101
107
  isPortal = _ref$isPortal === void 0 ? false : _ref$isPortal,
102
108
  portalSelector = _ref.portalSelector,
@@ -169,7 +175,7 @@ var Tooltip = function Tooltip(_ref) {
169
175
  name: 'eventListeners',
170
176
  options: {
171
177
  scroll: isOpen,
172
- resize: isOpen
178
+ resize: isHiddenResize || isOpen
173
179
  }
174
180
  }, {
175
181
  name: 'preventOverflow',
@@ -178,7 +184,7 @@ var Tooltip = function Tooltip(_ref) {
178
184
  }
179
185
  }]
180
186
  };
181
- }, [placement, arrowElement, currentBoundary, isOpen, fallbackPlacements]);
187
+ }, [placement, arrowElement, fallbackPlacements, isOpen, isHiddenResize, currentBoundary]);
182
188
  var _usePopper = usePopper(currentTarget, popperElement, options),
183
189
  styles = _usePopper.styles,
184
190
  attributes = _usePopper.attributes,
@@ -312,6 +318,7 @@ var Tooltip = function Tooltip(_ref) {
312
318
  className: cn({
313
319
  theme: theme,
314
320
  paddings: paddings,
321
+ offset: offset,
315
322
  open: isOpen,
316
323
  small: !isBigSize,
317
324
  '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,56 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import "core-js/modules/es.symbol.js";
3
+ import "core-js/modules/es.symbol.description.js";
4
+ import "core-js/modules/es.array.from.js";
5
+ import "core-js/modules/es.string.iterator.js";
6
+ import * as React from 'react';
7
+ import { cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
8
+ import UploadFieldDropArea from "./components/_UploadFieldDropArea/UploadFieldDropArea";
9
+ import "./UploadField.css";
10
+ var cn = cnCreate('mfui-upload-field');
11
+ var UploadField = function UploadField(_ref) {
12
+ var className = _ref.className,
13
+ _ref$required = _ref.required,
14
+ required = _ref$required === void 0 ? false : _ref$required,
15
+ _ref$disabled = _ref.disabled,
16
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
17
+ onChange = _ref.onChange,
18
+ description = _ref.description,
19
+ dataAttrs = _ref.dataAttrs;
20
+ var inputRef = React.useRef(null);
21
+ var handleInputChange = React.useCallback(function (e) {
22
+ var uploadFiles = Array.from(e.target.files || []);
23
+ onChange(uploadFiles);
24
+ e.target.value = '';
25
+ }, [onChange]);
26
+ var handleFileDrop = React.useCallback(function (uploadFiles) {
27
+ onChange(uploadFiles);
28
+ }, [onChange]);
29
+ var handleSelectButtonClick = React.useCallback(function () {
30
+ if (!inputRef || !inputRef.current) {
31
+ return;
32
+ }
33
+ inputRef.current.click();
34
+ }, []);
35
+ return /*#__PURE__*/React.createElement("div", _extends({
36
+ className: cn([className])
37
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root)), /*#__PURE__*/React.createElement("input", _extends({
38
+ className: cn('input')
39
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.input), {
40
+ multiple: true,
41
+ type: "file",
42
+ ref: inputRef,
43
+ onChange: handleInputChange,
44
+ disabled: disabled
45
+ })), /*#__PURE__*/React.createElement(UploadFieldDropArea, {
46
+ description: description,
47
+ required: required,
48
+ disabled: disabled,
49
+ onDrop: handleFileDrop,
50
+ onSelectButtonClick: handleSelectButtonClick,
51
+ dataAttrs: {
52
+ root: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.dropArea
53
+ }
54
+ }));
55
+ };
56
+ export 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,50 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import "core-js/modules/es.symbol.js";
3
+ import "core-js/modules/es.symbol.description.js";
4
+ import * as React from 'react';
5
+ import { cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
6
+ import useDragAndDrop from "../useDragAndDrop";
7
+ import "./UploadFieldDropArea.css";
8
+ var CloudUpload = function CloudUpload(props) {
9
+ return /*#__PURE__*/React.createElement("svg", _extends({
10
+ viewBox: "0 0 40 40"
11
+ }, props), /*#__PURE__*/React.createElement("path", {
12
+ 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"
13
+ }));
14
+ };
15
+ var cn = cnCreate('mfui-upload-field-drop-area');
16
+ var UploadFieldDropArea = function UploadFieldDropArea(_ref) {
17
+ var description = _ref.description,
18
+ required = _ref.required,
19
+ disabled = _ref.disabled,
20
+ onDrop = _ref.onDrop,
21
+ onSelectButtonClick = _ref.onSelectButtonClick,
22
+ dataAttrs = _ref.dataAttrs;
23
+ var dropAreaRef = React.useRef(null);
24
+ var currentDropAreaRef = !disabled ? dropAreaRef : {
25
+ current: null
26
+ };
27
+ var isDragging = useDragAndDrop(currentDropAreaRef, onDrop);
28
+ return /*#__PURE__*/React.createElement("div", _extends({
29
+ className: cn({
30
+ disabled: disabled,
31
+ dragging: isDragging
32
+ }),
33
+ ref: dropAreaRef
34
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root)), /*#__PURE__*/React.createElement(CloudUpload, {
35
+ className: cn('upload-icon')
36
+ }), /*#__PURE__*/React.createElement("div", {
37
+ className: cn('content')
38
+ }, /*#__PURE__*/React.createElement("button", _extends({
39
+ className: cn('select-button')
40
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.button), {
41
+ type: "button",
42
+ disabled: disabled,
43
+ onClick: !disabled ? onSelectButtonClick : undefined
44
+ }), "\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", {
45
+ className: cn('mark')
46
+ }, "*"))), !!description && /*#__PURE__*/React.createElement("div", {
47
+ className: cn('description')
48
+ }, description));
49
+ };
50
+ export default UploadFieldDropArea;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const useDragAndDrop: (dropAreaRef: React.RefObject<HTMLElement>, onDrop: (files: File[]) => void) => boolean;
3
+ export default useDragAndDrop;
@@ -0,0 +1,50 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ import "core-js/modules/es.array.from.js";
3
+ import "core-js/modules/es.string.iterator.js";
4
+ import React from 'react';
5
+ var useDragAndDrop = function useDragAndDrop(dropAreaRef, onDrop) {
6
+ var _React$useState = React.useState(false),
7
+ _React$useState2 = _slicedToArray(_React$useState, 2),
8
+ isDragging = _React$useState2[0],
9
+ setIsDragging = _React$useState2[1];
10
+ var dragEnterHandler = React.useCallback(function (e) {
11
+ e.preventDefault();
12
+ e.stopPropagation();
13
+ setIsDragging(true);
14
+ }, []);
15
+ var dragLeaveHandler = React.useCallback(function (e) {
16
+ e.preventDefault();
17
+ e.stopPropagation();
18
+ setIsDragging(false);
19
+ }, []);
20
+ var dragOverHandler = React.useCallback(function (e) {
21
+ e.preventDefault();
22
+ e.stopPropagation();
23
+ }, []);
24
+ var dropHandler = React.useCallback(function (e) {
25
+ e.preventDefault();
26
+ e.stopPropagation();
27
+ setIsDragging(false);
28
+ if (e.dataTransfer) {
29
+ onDrop(Array.from(e.dataTransfer.files));
30
+ }
31
+ }, [onDrop]);
32
+ React.useEffect(function () {
33
+ if (!dropAreaRef.current) {
34
+ return undefined;
35
+ }
36
+ var dropArea = dropAreaRef.current;
37
+ dropArea.addEventListener('dragenter', dragEnterHandler);
38
+ dropArea.addEventListener('dragleave', dragLeaveHandler);
39
+ dropArea.addEventListener('dragover', dragOverHandler);
40
+ dropArea.addEventListener('drop', dropHandler);
41
+ return function () {
42
+ dropArea.removeEventListener('dragenter', dragEnterHandler);
43
+ dropArea.removeEventListener('dragleave', dragLeaveHandler);
44
+ dropArea.removeEventListener('dragover', dragOverHandler);
45
+ dropArea.removeEventListener('drop', dropHandler);
46
+ };
47
+ }, [dragEnterHandler, dragLeaveHandler, dragOverHandler, dropHandler, dropAreaRef]);
48
+ return isDragging;
49
+ };
50
+ export 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,96 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import "core-js/modules/es.function.name.js";
3
+ import * as React from 'react';
4
+ import { cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
5
+ import Tooltip from "../../Tooltip/Tooltip";
6
+ import UploadFileItemIcon from "./components/_UploadFileItemIcon/UploadFileItemIcon";
7
+ import { getReadableFileSize, splitFileName } from "./helpers";
8
+ import "./UploadFileItem.css";
9
+ var CancelIcon = function CancelIcon(props) {
10
+ return /*#__PURE__*/React.createElement("svg", _extends({
11
+ viewBox: "0 0 32 32"
12
+ }, props), /*#__PURE__*/React.createElement("path", {
13
+ className: "CancelIcon__st0",
14
+ 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"
15
+ }));
16
+ };
17
+ var MAX_PROGRESS = 100;
18
+ var cn = cnCreate('mfui-upload-file-item');
19
+ var UploadFileItem = function UploadFileItem(_ref) {
20
+ var className = _ref.className,
21
+ fileName = _ref.fileName,
22
+ _ref$fileSize = _ref.fileSize,
23
+ fileSize = _ref$fileSize === void 0 ? 0 : _ref$fileSize,
24
+ _ref$loadingProgress = _ref.loadingProgress,
25
+ loadingProgress = _ref$loadingProgress === void 0 ? 0 : _ref$loadingProgress,
26
+ errorText = _ref.errorText,
27
+ _ref$isChecking = _ref.isChecking,
28
+ isChecking = _ref$isChecking === void 0 ? false : _ref$isChecking,
29
+ onDelete = _ref.onDelete,
30
+ dataAttrs = _ref.dataAttrs;
31
+ var tooltipTriggerElement = React.useRef(null);
32
+ var _splitFileName = splitFileName(fileName),
33
+ name = _splitFileName.name,
34
+ extension = _splitFileName.extension;
35
+ var readableFileSize = getReadableFileSize(fileSize);
36
+ var isError = !!errorText;
37
+ var handleDelete = function handleDelete(e) {
38
+ onDelete === null || onDelete === void 0 ? void 0 : onDelete(e);
39
+ };
40
+ var loadingStatusText = function loadingStatusText() {
41
+ if (isChecking) {
42
+ return 'проверка файла…';
43
+ }
44
+ if (loadingProgress === MAX_PROGRESS) {
45
+ return 'файл загружен';
46
+ }
47
+ return "\u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0430 ".concat(loadingProgress, "%");
48
+ };
49
+ var renderExtraContent = function renderExtraContent() {
50
+ if (isError) {
51
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
52
+ className: cn('error-message'),
53
+ ref: tooltipTriggerElement
54
+ }, "\u041E\u0448\u0438\u0431\u043A\u0430"), /*#__PURE__*/React.createElement(Tooltip, {
55
+ className: cn('error-tooltip'),
56
+ triggerElement: tooltipTriggerElement,
57
+ colorTheme: "blue",
58
+ placement: "bottom"
59
+ }, errorText));
60
+ }
61
+ return /*#__PURE__*/React.createElement("span", {
62
+ className: cn('service-message')
63
+ }, loadingStatusText());
64
+ };
65
+ return /*#__PURE__*/React.createElement("div", _extends({
66
+ className: cn({
67
+ error: isError
68
+ }, [className])
69
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root)), /*#__PURE__*/React.createElement("div", {
70
+ className: cn('file-icon-box')
71
+ }, /*#__PURE__*/React.createElement(UploadFileItemIcon, {
72
+ fileExtension: extension,
73
+ className: cn('icon')
74
+ })), /*#__PURE__*/React.createElement("div", {
75
+ className: cn('content')
76
+ }, /*#__PURE__*/React.createElement("div", {
77
+ className: cn('name')
78
+ }, name), /*#__PURE__*/React.createElement("div", {
79
+ className: cn('description')
80
+ }, !!extension && /*#__PURE__*/React.createElement("span", null, extension.toUpperCase()), /*#__PURE__*/React.createElement("span", null, readableFileSize), renderExtraContent()), /*#__PURE__*/React.createElement("div", {
81
+ className: cn('progress-bar')
82
+ }, /*#__PURE__*/React.createElement("div", {
83
+ className: cn('progress-bar-fill'),
84
+ style: {
85
+ width: "".concat(loadingProgress, "%")
86
+ }
87
+ }))), /*#__PURE__*/React.createElement("button", _extends({
88
+ type: "button",
89
+ className: cn('cancel-icon-box')
90
+ }, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.deleteButton), {
91
+ onClick: handleDelete
92
+ }), /*#__PURE__*/React.createElement(CancelIcon, {
93
+ className: cn('icon')
94
+ })));
95
+ };
96
+ export default UploadFileItem;
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ export interface IUploadFileItemIcon {
3
+ className?: string;
4
+ fileExtension: string;
5
+ }
6
+ declare const UploadFileItemIcon: React.FC<IUploadFileItemIcon>;
7
+ export default UploadFileItemIcon;