@megafon/ui-core 6.4.4 → 6.6.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 +20 -4
- package/dist/es/components/Banner/Banner.css +3 -0
- package/dist/es/components/Banner/Banner.d.ts +2 -0
- package/dist/es/components/Banner/Banner.js +5 -1
- package/dist/es/components/Calendar/Calendar.css +2 -3
- package/dist/es/components/Calendar/Calendar.js +2 -2
- package/dist/es/components/Calendar/components/Day/Day.css +10 -7
- package/dist/es/components/Calendar/components/Month/Month.css +5 -5
- package/dist/es/components/Search/Search.css +76 -4
- package/dist/es/components/Search/Search.d.ts +15 -2
- package/dist/es/components/Search/Search.js +204 -25
- package/dist/es/components/Search/i/textarea-resizer.svg +4 -0
- package/dist/es/components/Tooltip/Tooltip.css +56 -0
- package/dist/es/components/Tooltip/Tooltip.d.ts +8 -0
- package/dist/es/components/Tooltip/Tooltip.js +11 -2
- package/dist/lib/components/Banner/Banner.css +3 -0
- package/dist/lib/components/Banner/Banner.d.ts +2 -0
- package/dist/lib/components/Banner/Banner.js +5 -1
- package/dist/lib/components/Calendar/Calendar.css +2 -3
- package/dist/lib/components/Calendar/Calendar.js +2 -2
- package/dist/lib/components/Calendar/components/Day/Day.css +10 -7
- package/dist/lib/components/Calendar/components/Month/Month.css +5 -5
- package/dist/lib/components/Search/Search.css +76 -4
- package/dist/lib/components/Search/Search.d.ts +15 -2
- package/dist/lib/components/Search/Search.js +217 -26
- package/dist/lib/components/Search/i/textarea-resizer.svg +4 -0
- package/dist/lib/components/Tooltip/Tooltip.css +56 -0
- package/dist/lib/components/Tooltip/Tooltip.d.ts +8 -0
- package/dist/lib/components/Tooltip/Tooltip.js +13 -3
- package/package.json +2 -2
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
2
|
import _extends from "@babel/runtime/helpers/extends";
|
|
3
3
|
import "core-js/modules/es.array.slice.js";
|
|
4
|
+
import "core-js/modules/es.parse-float.js";
|
|
4
5
|
import "core-js/modules/es.regexp.exec.js";
|
|
5
6
|
import "core-js/modules/es.string.replace.js";
|
|
6
7
|
import "core-js/modules/es.string.split.js";
|
|
@@ -11,10 +12,12 @@ import "core-js/modules/es.object.values.js";
|
|
|
11
12
|
import React from 'react';
|
|
12
13
|
import { cnCreate, filterDataAttrs } from '@megafon/ui-helpers';
|
|
13
14
|
import debounce from 'lodash.debounce';
|
|
15
|
+
import throttle from 'lodash.throttle';
|
|
14
16
|
import * as PropTypes from 'prop-types';
|
|
15
17
|
import Caption from "../Caption/Caption";
|
|
16
18
|
import Header from "../Header/Header";
|
|
17
19
|
import Preloader from "../Preloader/Preloader";
|
|
20
|
+
import throttleTime from "../../constants/throttleTime";
|
|
18
21
|
import "./Search.css";
|
|
19
22
|
|
|
20
23
|
var SearchIcon16 = function SearchIcon16(props) {
|
|
@@ -42,8 +45,26 @@ var ClearIcon = function ClearIcon(props) {
|
|
|
42
45
|
}));
|
|
43
46
|
};
|
|
44
47
|
|
|
48
|
+
var ResizeIcon = function ResizeIcon(props) {
|
|
49
|
+
return /*#__PURE__*/React.createElement("svg", _extends({
|
|
50
|
+
width: 12,
|
|
51
|
+
height: 12
|
|
52
|
+
}, props), /*#__PURE__*/React.createElement("path", {
|
|
53
|
+
d: "M1 11L11 1M7 11l4-4"
|
|
54
|
+
}));
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
var DEFAULT_ROW_COUNT = 3;
|
|
58
|
+
var MAX_ROW_COUNT = 6;
|
|
59
|
+
var TEXTAREA_ROW_HEIGHT = 24;
|
|
60
|
+
var TEXTAREA_MAX_HEIGHT = TEXTAREA_ROW_HEIGHT * MAX_ROW_COUNT;
|
|
61
|
+
var DEFAULT_LABEL_TOP_POSITION = 16;
|
|
45
62
|
var SEARCH_QUERY_REGEX = /[^A-Z-a-zА-ЯЁа-яё0-9]/g;
|
|
46
63
|
var MAX_POPULAR_ITEMS_LENGTH = 5;
|
|
64
|
+
export var MinTextareaHeight = {
|
|
65
|
+
ONE_ROW: TEXTAREA_ROW_HEIGHT,
|
|
66
|
+
THREE_ROWS: TEXTAREA_ROW_HEIGHT * DEFAULT_ROW_COUNT
|
|
67
|
+
};
|
|
47
68
|
export var Verification = {
|
|
48
69
|
VALID: 'valid',
|
|
49
70
|
ERROR: 'error'
|
|
@@ -75,6 +96,7 @@ var Search = function Search(_ref) {
|
|
|
75
96
|
classes = _ref.classes,
|
|
76
97
|
_ref$type = _ref.type,
|
|
77
98
|
type = _ref$type === void 0 ? 'textfield' : _ref$type,
|
|
99
|
+
textarea = _ref.textarea,
|
|
78
100
|
showLoader = _ref.showLoader,
|
|
79
101
|
showNotFound = _ref.showNotFound,
|
|
80
102
|
textNotFound = _ref.textNotFound,
|
|
@@ -82,6 +104,9 @@ var Search = function Search(_ref) {
|
|
|
82
104
|
popularItems = _ref$popularItems === void 0 ? [] : _ref$popularItems,
|
|
83
105
|
popularTitle = _ref.popularTitle,
|
|
84
106
|
listRef = _ref.listRef,
|
|
107
|
+
_ref$minTextareaHeigh = _ref.minTextareaHeight,
|
|
108
|
+
minTextareaHeight = _ref$minTextareaHeigh === void 0 ? MinTextareaHeight.ONE_ROW : _ref$minTextareaHeigh,
|
|
109
|
+
showResizer = _ref.showResizer,
|
|
85
110
|
onChange = _ref.onChange,
|
|
86
111
|
onSubmit = _ref.onSubmit,
|
|
87
112
|
onBlur = _ref.onBlur,
|
|
@@ -108,19 +133,68 @@ var Search = function Search(_ref) {
|
|
|
108
133
|
popularActiveIndex = _React$useState8[0],
|
|
109
134
|
setPopularActiveIndex = _React$useState8[1];
|
|
110
135
|
|
|
136
|
+
var _React$useState9 = React.useState(TEXTAREA_ROW_HEIGHT),
|
|
137
|
+
_React$useState10 = _slicedToArray(_React$useState9, 2),
|
|
138
|
+
textareaHeight = _React$useState10[0],
|
|
139
|
+
setTextareaHeight = _React$useState10[1];
|
|
140
|
+
|
|
141
|
+
var _React$useState11 = React.useState(false),
|
|
142
|
+
_React$useState12 = _slicedToArray(_React$useState11, 2),
|
|
143
|
+
isTextareaResizing = _React$useState12[0],
|
|
144
|
+
setIsTextareaResizing = _React$useState12[1];
|
|
145
|
+
|
|
146
|
+
var _React$useState13 = React.useState(false),
|
|
147
|
+
_React$useState14 = _slicedToArray(_React$useState13, 2),
|
|
148
|
+
isTextareaResized = _React$useState14[0],
|
|
149
|
+
setIsTextareaResized = _React$useState14[1];
|
|
150
|
+
|
|
111
151
|
var debouncedOnChange = React.useRef(debounce(function (inputValue) {
|
|
112
152
|
return onChange && onChange(inputValue);
|
|
113
153
|
}, changeDelay));
|
|
114
154
|
var highlightedItem = React.useRef(null);
|
|
115
|
-
var
|
|
155
|
+
var containerRef = React.useRef(null);
|
|
156
|
+
var fieldRef = React.useRef(null);
|
|
157
|
+
var labelRef = React.useRef(null);
|
|
158
|
+
var resizerRef = React.useRef(null);
|
|
116
159
|
var correctPopularItems = React.useMemo(function () {
|
|
117
160
|
return popularItems.slice(0, MAX_POPULAR_ITEMS_LENGTH);
|
|
118
161
|
}, [popularItems]);
|
|
119
162
|
var isCompact = type === 'compact';
|
|
163
|
+
var isTextarea = textarea && !isCompact;
|
|
120
164
|
var showClearIcon = isCompact && !!searchQuery;
|
|
121
165
|
var showTextFieldSubmit = !hideIcon && !isCompact && !showLoader;
|
|
122
166
|
var showAdditionalElement = !hideIcon || showLoader || showClearIcon;
|
|
123
167
|
var showPopularItems = !!correctPopularItems.length;
|
|
168
|
+
|
|
169
|
+
var getFieldRef = function getFieldRef(node) {
|
|
170
|
+
if (!node) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
fieldRef.current = node;
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
var textareaResize = React.useCallback(function () {
|
|
178
|
+
if (!isTextarea || !fieldRef.current || !containerRef.current || isTextareaResized) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
fieldRef.current.style.height = "".concat(minTextareaHeight, "px");
|
|
183
|
+
var scrollHeight = fieldRef.current.scrollHeight;
|
|
184
|
+
|
|
185
|
+
var _window$getComputedSt = window.getComputedStyle(fieldRef.current),
|
|
186
|
+
paddingTop = _window$getComputedSt.paddingTop,
|
|
187
|
+
paddingBottom = _window$getComputedSt.paddingBottom;
|
|
188
|
+
|
|
189
|
+
var innerHeight = scrollHeight - parseFloat(paddingTop) - parseFloat(paddingBottom);
|
|
190
|
+
|
|
191
|
+
if (innerHeight >= TEXTAREA_MAX_HEIGHT) {
|
|
192
|
+
fieldRef.current.style.height = "".concat(TEXTAREA_MAX_HEIGHT, "px");
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
fieldRef.current.style.height = "".concat(innerHeight, "px");
|
|
197
|
+
}, [isTextareaResized, minTextareaHeight, isTextarea]);
|
|
124
198
|
var handleChange = React.useCallback(function (e) {
|
|
125
199
|
var _e$target$value = e.target.value,
|
|
126
200
|
inputValue = _e$target$value === void 0 ? '' : _e$target$value;
|
|
@@ -134,7 +208,9 @@ var Search = function Search(_ref) {
|
|
|
134
208
|
// @ts-ignore
|
|
135
209
|
debouncedOnChange.current(inputValue);
|
|
136
210
|
}
|
|
137
|
-
|
|
211
|
+
|
|
212
|
+
textareaResize();
|
|
213
|
+
}, [changeDelay, onChange, textareaResize]);
|
|
138
214
|
var handleHoverItem = React.useCallback(function (index) {
|
|
139
215
|
return function () {
|
|
140
216
|
setActiveIndex(index);
|
|
@@ -185,7 +261,7 @@ var Search = function Search(_ref) {
|
|
|
185
261
|
var _a;
|
|
186
262
|
|
|
187
263
|
var chosenValue = popularItems[popularActiveIndex].title;
|
|
188
|
-
(_a =
|
|
264
|
+
(_a = fieldRef === null || fieldRef === void 0 ? void 0 : fieldRef.current) === null || _a === void 0 ? void 0 : _a.blur();
|
|
189
265
|
onPopularItemClick === null || onPopularItemClick === void 0 ? void 0 : onPopularItemClick(chosenValue);
|
|
190
266
|
}, [onPopularItemClick, popularActiveIndex, popularItems]);
|
|
191
267
|
var handleKeyDownPopularItems = React.useCallback(function (e) {
|
|
@@ -210,6 +286,7 @@ var Search = function Search(_ref) {
|
|
|
210
286
|
{
|
|
211
287
|
var currentHref = (_a = popularItems[popularActiveIndex]) === null || _a === void 0 ? void 0 : _a.href;
|
|
212
288
|
handlePopularItemMouseUp();
|
|
289
|
+
e.preventDefault();
|
|
213
290
|
|
|
214
291
|
if (currentHref) {
|
|
215
292
|
window.location.href = currentHref;
|
|
@@ -246,7 +323,12 @@ var Search = function Search(_ref) {
|
|
|
246
323
|
break;
|
|
247
324
|
|
|
248
325
|
case e.key === 'Enter' && activeIndex === -1:
|
|
326
|
+
if (isTextarea && e.shiftKey) {
|
|
327
|
+
return false;
|
|
328
|
+
}
|
|
329
|
+
|
|
249
330
|
handleSearchSubmit();
|
|
331
|
+
e.preventDefault();
|
|
250
332
|
break;
|
|
251
333
|
|
|
252
334
|
default:
|
|
@@ -254,7 +336,7 @@ var Search = function Search(_ref) {
|
|
|
254
336
|
}
|
|
255
337
|
|
|
256
338
|
return false;
|
|
257
|
-
}, [activeIndex, handleItemSubmit, handleSearchSubmit, items.length]);
|
|
339
|
+
}, [activeIndex, handleItemSubmit, handleSearchSubmit, items.length, isTextarea]);
|
|
258
340
|
var handleKeyDown = React.useCallback(function (e) {
|
|
259
341
|
if (showNotFound && showPopularItems) {
|
|
260
342
|
return handleKeyDownPopularItems(e);
|
|
@@ -272,9 +354,68 @@ var Search = function Search(_ref) {
|
|
|
272
354
|
!!debouncedOnChange.current && debouncedOnChange.current.cancel();
|
|
273
355
|
onChange === null || onChange === void 0 ? void 0 : onChange('');
|
|
274
356
|
setSearchQuery('');
|
|
275
|
-
(_a =
|
|
357
|
+
(_a = fieldRef === null || fieldRef === void 0 ? void 0 : fieldRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
276
358
|
};
|
|
277
359
|
|
|
360
|
+
var handleTextareaScroll = function handleTextareaScroll() {
|
|
361
|
+
if (!(fieldRef === null || fieldRef === void 0 ? void 0 : fieldRef.current) || !(labelRef === null || labelRef === void 0 ? void 0 : labelRef.current)) {
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
var scrollTop = fieldRef.current.scrollTop;
|
|
366
|
+
|
|
367
|
+
if (!scrollTop) {
|
|
368
|
+
labelRef.current.style.top = '';
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
labelRef.current.style.top = "".concat(DEFAULT_LABEL_TOP_POSITION - scrollTop, "px");
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
React.useEffect(function () {
|
|
376
|
+
textareaResize();
|
|
377
|
+
}, [textareaResize]);
|
|
378
|
+
React.useEffect(function () {
|
|
379
|
+
if (!resizerRef.current || !isTextarea || !showResizer) {
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
var originalHeight;
|
|
384
|
+
var originalCoordinateY;
|
|
385
|
+
var handleResize = throttle(function (moveEvent) {
|
|
386
|
+
var currentCoordinateY = moveEvent.clientY || moveEvent.touches[0].clientY;
|
|
387
|
+
var resizeHeight = originalHeight + (currentCoordinateY - originalCoordinateY);
|
|
388
|
+
var updatedHeight = resizeHeight < minTextareaHeight ? minTextareaHeight : resizeHeight;
|
|
389
|
+
setTextareaHeight(updatedHeight);
|
|
390
|
+
setIsTextareaResized(true);
|
|
391
|
+
}, throttleTime.resizeTextarea);
|
|
392
|
+
|
|
393
|
+
var handleResizeCancel = function handleResizeCancel() {
|
|
394
|
+
setIsTextareaResizing(false);
|
|
395
|
+
window.removeEventListener('mousemove', handleResize);
|
|
396
|
+
window.removeEventListener('touchmove', handleResize);
|
|
397
|
+
window.removeEventListener('mouseup', handleResizeCancel);
|
|
398
|
+
window.removeEventListener('touchend', handleResizeCancel);
|
|
399
|
+
};
|
|
400
|
+
|
|
401
|
+
var handleStartResize = function handleStartResize(event) {
|
|
402
|
+
if (!fieldRef.current) {
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
setIsTextareaResizing(true);
|
|
407
|
+
event.preventDefault();
|
|
408
|
+
originalHeight = parseFloat(getComputedStyle(fieldRef.current).getPropertyValue('height').replace('px', ''));
|
|
409
|
+
originalCoordinateY = event.clientY || event.touches[0].clientY;
|
|
410
|
+
window.addEventListener('mousemove', handleResize);
|
|
411
|
+
window.addEventListener('touchmove', handleResize);
|
|
412
|
+
window.addEventListener('mouseup', handleResizeCancel);
|
|
413
|
+
window.addEventListener('touchend', handleResizeCancel);
|
|
414
|
+
};
|
|
415
|
+
|
|
416
|
+
resizerRef.current.addEventListener('mousedown', handleStartResize);
|
|
417
|
+
resizerRef.current.addEventListener('touchstart', handleStartResize);
|
|
418
|
+
}, [isTextarea, minTextareaHeight, showResizer]);
|
|
278
419
|
React.useEffect(function () {
|
|
279
420
|
return setSearchQuery(value);
|
|
280
421
|
}, [value]);
|
|
@@ -407,17 +548,14 @@ var Search = function Search(_ref) {
|
|
|
407
548
|
}, popularTitle || 'Популярные действия'), renderPopularItems())));
|
|
408
549
|
};
|
|
409
550
|
|
|
410
|
-
|
|
411
|
-
className: cn(
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
}), /*#__PURE__*/React.createElement("div", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.control), {
|
|
419
|
-
className: cn('control', [classes === null || classes === void 0 ? void 0 : classes.control])
|
|
420
|
-
}), isCompact && renderSubmitButton(), /*#__PURE__*/React.createElement("input", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.searchField), {
|
|
551
|
+
var renderLabel = /*#__PURE__*/React.createElement("label", {
|
|
552
|
+
className: cn('label', [classes === null || classes === void 0 ? void 0 : classes.label]),
|
|
553
|
+
htmlFor: searchId,
|
|
554
|
+
ref: labelRef
|
|
555
|
+
}, label, required && /*#__PURE__*/React.createElement("span", {
|
|
556
|
+
className: cn('require-mark')
|
|
557
|
+
}, "*"));
|
|
558
|
+
var renderInput = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("input", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.searchField), {
|
|
421
559
|
id: searchId,
|
|
422
560
|
className: cn('field', {
|
|
423
561
|
filled: !!searchQuery,
|
|
@@ -433,13 +571,48 @@ var Search = function Search(_ref) {
|
|
|
433
571
|
disabled: disabled,
|
|
434
572
|
type: "text",
|
|
435
573
|
autoComplete: "off",
|
|
436
|
-
ref:
|
|
437
|
-
})), label &&
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
574
|
+
ref: getFieldRef
|
|
575
|
+
})), label && renderLabel);
|
|
576
|
+
var renderTextarea = /*#__PURE__*/React.createElement(React.Fragment, null, showResizer && /*#__PURE__*/React.createElement("div", _extends({
|
|
577
|
+
className: cn('resizer', [classes === null || classes === void 0 ? void 0 : classes.resizer]),
|
|
578
|
+
ref: resizerRef
|
|
579
|
+
}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.resizer)), /*#__PURE__*/React.createElement(ResizeIcon, null)), /*#__PURE__*/React.createElement("div", {
|
|
580
|
+
className: cn('textarea-wrapper')
|
|
581
|
+
}, /*#__PURE__*/React.createElement("textarea", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.searchField), {
|
|
582
|
+
id: searchId,
|
|
583
|
+
className: cn('field', {
|
|
584
|
+
filled: !!searchQuery,
|
|
585
|
+
labeled: !!label
|
|
586
|
+
}, [classes === null || classes === void 0 ? void 0 : classes.input]),
|
|
587
|
+
style: {
|
|
588
|
+
height: "".concat(textareaHeight, "px")
|
|
589
|
+
},
|
|
590
|
+
placeholder: placeholder,
|
|
591
|
+
value: searchQuery,
|
|
592
|
+
onChange: handleChange,
|
|
593
|
+
onFocus: handleFocus,
|
|
594
|
+
onBlur: handleBlur,
|
|
595
|
+
onKeyDown: handleKeyDown,
|
|
596
|
+
onClick: handleClick,
|
|
597
|
+
onScroll: handleTextareaScroll,
|
|
598
|
+
autoComplete: "off",
|
|
599
|
+
ref: getFieldRef
|
|
600
|
+
})), label && renderLabel));
|
|
601
|
+
return /*#__PURE__*/React.createElement("div", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root), {
|
|
602
|
+
className: cn({
|
|
603
|
+
open: isFocused,
|
|
604
|
+
disabled: disabled,
|
|
605
|
+
type: type,
|
|
606
|
+
textarea: isTextarea,
|
|
607
|
+
error: verification === Verification.ERROR,
|
|
608
|
+
success: verification === Verification.VALID
|
|
609
|
+
}, [className])
|
|
610
|
+
}), /*#__PURE__*/React.createElement("div", _extends({}, filterDataAttrs(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.control), {
|
|
611
|
+
className: cn('control', {
|
|
612
|
+
focused: isTextareaResizing
|
|
613
|
+
}, [classes === null || classes === void 0 ? void 0 : classes.control]),
|
|
614
|
+
ref: containerRef
|
|
615
|
+
}), isCompact && renderSubmitButton(), isTextarea ? renderTextarea : renderInput, showAdditionalElement && /*#__PURE__*/React.createElement("div", {
|
|
443
616
|
className: cn('icons')
|
|
444
617
|
}, showTextFieldSubmit && renderSubmitButton(), showLoader && /*#__PURE__*/React.createElement(Preloader, {
|
|
445
618
|
delay: false,
|
|
@@ -462,9 +635,12 @@ Search.propTypes = {
|
|
|
462
635
|
item: PropTypes.objectOf(PropTypes.string.isRequired),
|
|
463
636
|
itemTitle: PropTypes.objectOf(PropTypes.string.isRequired),
|
|
464
637
|
notice: PropTypes.objectOf(PropTypes.string.isRequired),
|
|
465
|
-
popularItem: PropTypes.objectOf(PropTypes.string.isRequired)
|
|
638
|
+
popularItem: PropTypes.objectOf(PropTypes.string.isRequired),
|
|
639
|
+
resizer: PropTypes.objectOf(PropTypes.string.isRequired)
|
|
466
640
|
}),
|
|
467
641
|
value: PropTypes.string,
|
|
642
|
+
type: PropTypes.oneOf(['textfield', 'compact']),
|
|
643
|
+
textarea: PropTypes.bool,
|
|
468
644
|
label: PropTypes.string,
|
|
469
645
|
searchId: PropTypes.string,
|
|
470
646
|
placeholder: PropTypes.string,
|
|
@@ -489,7 +665,8 @@ Search.propTypes = {
|
|
|
489
665
|
icon: PropTypes.string,
|
|
490
666
|
textNotFound: PropTypes.string,
|
|
491
667
|
popularTitle: PropTypes.string,
|
|
492
|
-
popularItem: PropTypes.string
|
|
668
|
+
popularItem: PropTypes.string,
|
|
669
|
+
resizer: PropTypes.string
|
|
493
670
|
}),
|
|
494
671
|
showNotFound: PropTypes.bool,
|
|
495
672
|
textNotFound: PropTypes.string,
|
|
@@ -502,6 +679,8 @@ Search.propTypes = {
|
|
|
502
679
|
listRef: PropTypes.oneOfType([PropTypes.func, PropTypes.oneOfType([PropTypes.shape({
|
|
503
680
|
current: PropTypes.elementType
|
|
504
681
|
}), PropTypes.any])]),
|
|
682
|
+
minTextareaHeight: PropTypes.oneOf([MinTextareaHeight.ONE_ROW, MinTextareaHeight.THREE_ROWS]),
|
|
683
|
+
showResizer: PropTypes.bool,
|
|
505
684
|
onChange: PropTypes.func,
|
|
506
685
|
onSubmit: PropTypes.func,
|
|
507
686
|
onBlur: PropTypes.func,
|
|
@@ -269,6 +269,20 @@
|
|
|
269
269
|
-webkit-transform: rotate(-90deg);
|
|
270
270
|
transform: rotate(-90deg);
|
|
271
271
|
}
|
|
272
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='right'] .mfui-v6-tooltip__content,
|
|
273
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='right-start'] .mfui-v6-tooltip__content,
|
|
274
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='right-end'] .mfui-v6-tooltip__content,
|
|
275
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='right'] .mfui-v6-tooltip__content-shadow,
|
|
276
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='right-start'] .mfui-v6-tooltip__content-shadow,
|
|
277
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='right-end'] .mfui-v6-tooltip__content-shadow {
|
|
278
|
+
-webkit-transform: translateX(15px);
|
|
279
|
+
transform: translateX(15px);
|
|
280
|
+
}
|
|
281
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='right'] .mfui-v6-tooltip__arrow-wrap,
|
|
282
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='right-start'] .mfui-v6-tooltip__arrow-wrap,
|
|
283
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='right-end'] .mfui-v6-tooltip__arrow-wrap {
|
|
284
|
+
left: -6px;
|
|
285
|
+
}
|
|
272
286
|
.mfui-v6-tooltip[data-popper-placement='left'] .mfui-v6-tooltip__content,
|
|
273
287
|
.mfui-v6-tooltip[data-popper-placement='left-start'] .mfui-v6-tooltip__content,
|
|
274
288
|
.mfui-v6-tooltip[data-popper-placement='left-end'] .mfui-v6-tooltip__content,
|
|
@@ -292,6 +306,20 @@
|
|
|
292
306
|
-webkit-transform: rotate(90deg);
|
|
293
307
|
transform: rotate(90deg);
|
|
294
308
|
}
|
|
309
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='left'] .mfui-v6-tooltip__content,
|
|
310
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='left-start'] .mfui-v6-tooltip__content,
|
|
311
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='left-end'] .mfui-v6-tooltip__content,
|
|
312
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='left'] .mfui-v6-tooltip__content-shadow,
|
|
313
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='left-start'] .mfui-v6-tooltip__content-shadow,
|
|
314
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='left-end'] .mfui-v6-tooltip__content-shadow {
|
|
315
|
+
-webkit-transform: translateX(-15px);
|
|
316
|
+
transform: translateX(-15px);
|
|
317
|
+
}
|
|
318
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='left'] .mfui-v6-tooltip__arrow-wrap,
|
|
319
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='left-start'] .mfui-v6-tooltip__arrow-wrap,
|
|
320
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='left-end'] .mfui-v6-tooltip__arrow-wrap {
|
|
321
|
+
right: -6px;
|
|
322
|
+
}
|
|
295
323
|
.mfui-v6-tooltip[data-popper-placement='top'] .mfui-v6-tooltip__content,
|
|
296
324
|
.mfui-v6-tooltip[data-popper-placement='top-start'] .mfui-v6-tooltip__content,
|
|
297
325
|
.mfui-v6-tooltip[data-popper-placement='top-end'] .mfui-v6-tooltip__content,
|
|
@@ -315,6 +343,20 @@
|
|
|
315
343
|
-webkit-transform: rotate(180deg);
|
|
316
344
|
transform: rotate(180deg);
|
|
317
345
|
}
|
|
346
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='top'] .mfui-v6-tooltip__content,
|
|
347
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='top-start'] .mfui-v6-tooltip__content,
|
|
348
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='top-end'] .mfui-v6-tooltip__content,
|
|
349
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='top'] .mfui-v6-tooltip__content-shadow,
|
|
350
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='top-start'] .mfui-v6-tooltip__content-shadow,
|
|
351
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='top-end'] .mfui-v6-tooltip__content-shadow {
|
|
352
|
+
-webkit-transform: translateY(-15px);
|
|
353
|
+
transform: translateY(-15px);
|
|
354
|
+
}
|
|
355
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='top'] .mfui-v6-tooltip__arrow-wrap,
|
|
356
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='top-start'] .mfui-v6-tooltip__arrow-wrap,
|
|
357
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='top-end'] .mfui-v6-tooltip__arrow-wrap {
|
|
358
|
+
bottom: 4px;
|
|
359
|
+
}
|
|
318
360
|
.mfui-v6-tooltip[data-popper-placement='bottom'] .mfui-v6-tooltip__content,
|
|
319
361
|
.mfui-v6-tooltip[data-popper-placement='bottom-start'] .mfui-v6-tooltip__content,
|
|
320
362
|
.mfui-v6-tooltip[data-popper-placement='bottom-end'] .mfui-v6-tooltip__content,
|
|
@@ -329,6 +371,20 @@
|
|
|
329
371
|
.mfui-v6-tooltip[data-popper-placement='bottom-end'] .mfui-v6-tooltip__arrow-wrap {
|
|
330
372
|
top: 13px;
|
|
331
373
|
}
|
|
374
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='bottom'] .mfui-v6-tooltip__content,
|
|
375
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='bottom-start'] .mfui-v6-tooltip__content,
|
|
376
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='bottom-end'] .mfui-v6-tooltip__content,
|
|
377
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='bottom'] .mfui-v6-tooltip__content-shadow,
|
|
378
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='bottom-start'] .mfui-v6-tooltip__content-shadow,
|
|
379
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='bottom-end'] .mfui-v6-tooltip__content-shadow {
|
|
380
|
+
-webkit-transform: translateY(15px);
|
|
381
|
+
transform: translateY(15px);
|
|
382
|
+
}
|
|
383
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='bottom'] .mfui-v6-tooltip__arrow-wrap,
|
|
384
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='bottom-start'] .mfui-v6-tooltip__arrow-wrap,
|
|
385
|
+
.mfui-v6-tooltip_offset_small[data-popper-placement='bottom-end'] .mfui-v6-tooltip__arrow-wrap {
|
|
386
|
+
top: 4px;
|
|
387
|
+
}
|
|
332
388
|
.mfui-v6-tooltip[data-popper-escaped='true'].mfui-v6-tooltip_has-escape {
|
|
333
389
|
visibility: hidden;
|
|
334
390
|
pointer-events: none;
|
|
@@ -23,6 +23,10 @@ export declare const Paddings: {
|
|
|
23
23
|
readonly MEDIUM: "medium";
|
|
24
24
|
};
|
|
25
25
|
declare type PaddingsType = typeof Paddings[keyof typeof Paddings];
|
|
26
|
+
export declare const Offset: {
|
|
27
|
+
readonly SMALL: "small";
|
|
28
|
+
};
|
|
29
|
+
declare type OffsetType = typeof Offset[keyof typeof Offset];
|
|
26
30
|
export declare const TriggerEvent: {
|
|
27
31
|
readonly HOVER: "hover";
|
|
28
32
|
readonly CLICK: "click";
|
|
@@ -55,6 +59,8 @@ export interface ITooltipProps {
|
|
|
55
59
|
hasCloseButton?: boolean;
|
|
56
60
|
/** Позиционирование относительно триггер-элемента */
|
|
57
61
|
placement?: PlacementType;
|
|
62
|
+
/** Смещение тултипа относительно триггер-элемента */
|
|
63
|
+
offset?: OffsetType;
|
|
58
64
|
/** Направления перестроения тултипа при переполнении */
|
|
59
65
|
fallbackPlacements?: PlacementType[];
|
|
60
66
|
/** Размер отступов от контента */
|
|
@@ -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
|
/** Рендеринг компонента в указанном селекторе */
|
|
@@ -62,6 +62,9 @@ export var Paddings = {
|
|
|
62
62
|
SMALL: 'small',
|
|
63
63
|
MEDIUM: 'medium'
|
|
64
64
|
};
|
|
65
|
+
export var Offset = {
|
|
66
|
+
SMALL: 'small'
|
|
67
|
+
};
|
|
65
68
|
export var TriggerEvent = {
|
|
66
69
|
HOVER: 'hover',
|
|
67
70
|
CLICK: 'click',
|
|
@@ -95,6 +98,7 @@ var Tooltip = function Tooltip(_ref) {
|
|
|
95
98
|
fallbackPlacements = _ref$fallbackPlacemen === void 0 ? ['left', 'right', 'top', 'bottom'] : _ref$fallbackPlacemen,
|
|
96
99
|
_ref$paddings = _ref.paddings,
|
|
97
100
|
paddings = _ref$paddings === void 0 ? 'small' : _ref$paddings,
|
|
101
|
+
offset = _ref.offset,
|
|
98
102
|
_ref$triggerEvent = _ref.triggerEvent,
|
|
99
103
|
triggerEvent = _ref$triggerEvent === void 0 ? 'hover' : _ref$triggerEvent,
|
|
100
104
|
boundaryElement = _ref.boundaryElement,
|
|
@@ -104,6 +108,8 @@ var Tooltip = function Tooltip(_ref) {
|
|
|
104
108
|
isOpened = _ref$isOpened === void 0 ? false : _ref$isOpened,
|
|
105
109
|
_ref$isPortal = _ref.isPortal,
|
|
106
110
|
isPortal = _ref$isPortal === void 0 ? false : _ref$isPortal,
|
|
111
|
+
_ref$isHiddenResize = _ref.isHiddenResize,
|
|
112
|
+
isHiddenResize = _ref$isHiddenResize === void 0 ? false : _ref$isHiddenResize,
|
|
107
113
|
portalSelector = _ref.portalSelector,
|
|
108
114
|
children = _ref.children,
|
|
109
115
|
_ref$classes = _ref.classes;
|
|
@@ -180,7 +186,7 @@ var Tooltip = function Tooltip(_ref) {
|
|
|
180
186
|
name: 'eventListeners',
|
|
181
187
|
options: {
|
|
182
188
|
scroll: isOpen,
|
|
183
|
-
resize: isOpen
|
|
189
|
+
resize: isHiddenResize || isOpen
|
|
184
190
|
}
|
|
185
191
|
}, {
|
|
186
192
|
name: 'preventOverflow',
|
|
@@ -189,7 +195,7 @@ var Tooltip = function Tooltip(_ref) {
|
|
|
189
195
|
}
|
|
190
196
|
}]
|
|
191
197
|
};
|
|
192
|
-
}, [placement, arrowElement,
|
|
198
|
+
}, [placement, arrowElement, fallbackPlacements, isOpen, isHiddenResize, currentBoundary]);
|
|
193
199
|
|
|
194
200
|
var _usePopper = usePopper(currentTarget, popperElement, options),
|
|
195
201
|
styles = _usePopper.styles,
|
|
@@ -335,6 +341,7 @@ var Tooltip = function Tooltip(_ref) {
|
|
|
335
341
|
className: cn({
|
|
336
342
|
theme: theme,
|
|
337
343
|
paddings: paddings,
|
|
344
|
+
offset: offset,
|
|
338
345
|
open: isOpen,
|
|
339
346
|
small: !isBigSize,
|
|
340
347
|
'has-escape': !targetElement
|
|
@@ -399,6 +406,7 @@ Tooltip.propTypes = {
|
|
|
399
406
|
placement: PropTypes.oneOf(Object.values(Placement)),
|
|
400
407
|
fallbackPlacements: PropTypes.arrayOf(PropTypes.oneOf(Object.values(Placement)).isRequired),
|
|
401
408
|
paddings: PropTypes.oneOf(Object.values(Paddings)),
|
|
409
|
+
offset: PropTypes.oneOf(Object.values(Offset)),
|
|
402
410
|
triggerEvent: PropTypes.oneOf(Object.values(TriggerEvent)),
|
|
403
411
|
boundaryElement: PropTypes.oneOfType([PropTypes.func, PropTypes.oneOfType([PropTypes.shape({
|
|
404
412
|
current: PropTypes.elementType
|
|
@@ -424,6 +432,7 @@ Tooltip.propTypes = {
|
|
|
424
432
|
}), PropTypes.any])]),
|
|
425
433
|
isOpened: PropTypes.bool,
|
|
426
434
|
isPortal: PropTypes.bool,
|
|
435
|
+
isHiddenResize: PropTypes.bool,
|
|
427
436
|
portalSelector: PropTypes.string,
|
|
428
437
|
className: PropTypes.string,
|
|
429
438
|
classes: PropTypes.shape({
|
|
@@ -69,6 +69,8 @@ export interface IBannerProps {
|
|
|
69
69
|
noIncreaseAutoplayDelay?: boolean;
|
|
70
70
|
/** Показать часть следующего слайда */
|
|
71
71
|
showNextSlide?: boolean;
|
|
72
|
+
/** Отступ сверху */
|
|
73
|
+
hasMarginTop?: boolean;
|
|
72
74
|
/** Ref на swiper */
|
|
73
75
|
getSwiper?: (instance: SwiperCore) => void;
|
|
74
76
|
/** Обработчик клика по стрелке "вперед" (должен быть обернут в useCallback) */
|
|
@@ -97,6 +97,8 @@ var Banner = function Banner(_ref) {
|
|
|
97
97
|
autoHeight = _ref$autoHeight === void 0 ? false : _ref$autoHeight,
|
|
98
98
|
noIncreaseAutoplayDelay = _ref.noIncreaseAutoplayDelay,
|
|
99
99
|
showNextSlide = _ref.showNextSlide,
|
|
100
|
+
_ref$hasMarginTop = _ref.hasMarginTop,
|
|
101
|
+
hasMarginTop = _ref$hasMarginTop === void 0 ? false : _ref$hasMarginTop,
|
|
100
102
|
_ref$children = _ref.children,
|
|
101
103
|
children = _ref$children === void 0 ? [] : _ref$children,
|
|
102
104
|
getSwiper = _ref.getSwiper,
|
|
@@ -299,7 +301,8 @@ var Banner = function Banner(_ref) {
|
|
|
299
301
|
'background-color': backgroundColor,
|
|
300
302
|
'no-touch': !isTouch,
|
|
301
303
|
radius: radius,
|
|
302
|
-
'show-next-slide': showNextSlide
|
|
304
|
+
'show-next-slide': showNextSlide,
|
|
305
|
+
'margin-top': hasMarginTop
|
|
303
306
|
}, className),
|
|
304
307
|
ref: rootRef
|
|
305
308
|
}), /*#__PURE__*/React.createElement("div", {
|
|
@@ -361,6 +364,7 @@ Banner.propTypes = {
|
|
|
361
364
|
noIncreaseAutoplayDelay: PropTypes.bool,
|
|
362
365
|
showNextSlide: PropTypes.bool,
|
|
363
366
|
getSwiper: PropTypes.func,
|
|
367
|
+
hasMarginTop: PropTypes.bool,
|
|
364
368
|
onNextClick: PropTypes.func,
|
|
365
369
|
onPrevClick: PropTypes.func,
|
|
366
370
|
onDotClick: PropTypes.func,
|
|
@@ -5,16 +5,15 @@
|
|
|
5
5
|
}
|
|
6
6
|
.mfui-v6-calendar_modern {
|
|
7
7
|
display: block;
|
|
8
|
-
width:
|
|
8
|
+
width: 100%;
|
|
9
9
|
height: 304px;
|
|
10
10
|
overflow-x: hidden;
|
|
11
11
|
overflow-y: scroll;
|
|
12
12
|
}
|
|
13
13
|
.mfui-v6-calendar_modern::-webkit-scrollbar {
|
|
14
|
-
width:
|
|
14
|
+
width: 4px;
|
|
15
15
|
}
|
|
16
16
|
.mfui-v6-calendar_modern::-webkit-scrollbar-thumb {
|
|
17
|
-
border: 6px solid transparent;
|
|
18
17
|
border-radius: 16px;
|
|
19
18
|
background-color: #D8D8D8;
|
|
20
19
|
background-clip: padding-box;
|
|
@@ -406,14 +406,14 @@ var Calendar = function Calendar(_ref) {
|
|
|
406
406
|
var isNextMonthDisabled = !!maxBookingDate && (0, _isSameMonth["default"])(new Date(year, month, 1), maxBookingDate);
|
|
407
407
|
var isCurrentMonth = new Date().getFullYear() === year && new Date().getMonth() === month;
|
|
408
408
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
409
|
-
ref: isCurrentMonth ? currentMonthRef : null
|
|
409
|
+
ref: isCurrentMonth ? currentMonthRef : null,
|
|
410
|
+
key: "".concat(year, "-").concat(month)
|
|
410
411
|
}, /*#__PURE__*/_react["default"].createElement(_Month["default"], {
|
|
411
412
|
dataAttrs: {
|
|
412
413
|
root: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.month,
|
|
413
414
|
arrowLeft: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.arrowLeft,
|
|
414
415
|
arrowRight: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.arrowRight
|
|
415
416
|
},
|
|
416
|
-
key: "".concat(year, "-").concat(month),
|
|
417
417
|
year: year,
|
|
418
418
|
weekdayLabels: weekdayLabels,
|
|
419
419
|
monthLabel: monthLabel,
|