@sima-land/ui-nucleons 40.1.0 → 40.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/_internal/custom-scrollbar/index.js +3 -3
- package/alert/index.d.ts +2 -0
- package/alert/index.js +3 -3
- package/autocomplete/index.js +12 -17
- package/avatar/index.d.ts +1 -1
- package/avatar/index.js +2 -4
- package/avatar/user.d.ts +1 -1
- package/avatar/user.js +2 -2
- package/avatar/utils.js +7 -1
- package/base-input/index.d.ts +1 -1
- package/base-input/index.js +1 -1
- package/bordered-layout/index.d.ts +1 -1
- package/bordered-layout/index.js +1 -1
- package/box/index.js +17 -36
- package/button/index.d.ts +3 -3
- package/button/index.js +4 -4
- package/card/slots.js +1 -1
- package/carousel/draggable.js +14 -16
- package/carousel/index.d.ts +1 -1
- package/carousel/index.js +17 -37
- package/chips/index.js +1 -1
- package/clean-buttons/index.js +1 -3
- package/dot-nav/dot-nav.module.scss +2 -2
- package/dropdown/dropdown.module.scss +1 -3
- package/field-grid/index.d.ts +2 -2
- package/field-grid/index.js +3 -3
- package/file-icon/index.js +5 -6
- package/helpers/bounds-of.js +1 -3
- package/helpers/find-child-element.js +1 -3
- package/helpers/find-offset-parent.js +4 -3
- package/helpers/fit-element-height.js +1 -1
- package/helpers/format-date.js +3 -1
- package/helpers/get-fraction-depth.js +1 -3
- package/hooks/identity.d.ts +1 -0
- package/hooks/identity.js +1 -0
- package/layout/index.js +1 -1
- package/link/index.js +1 -3
- package/loading-overlay/index.d.ts +1 -1
- package/loading-overlay/index.js +1 -1
- package/nav-bar/index.d.ts +1 -0
- package/nav-bar/index.js +1 -1
- package/package.json +17 -14
- package/pagination/base-pagination.js +18 -20
- package/pagination/index.js +1 -3
- package/pagination/utils.d.ts +2 -2
- package/pagination/utils.js +7 -6
- package/panel/index.js +1 -3
- package/phone-input/index.js +19 -20
- package/price/utils.js +1 -3
- package/range/index.js +11 -14
- package/rating/index.js +2 -2
- package/readme.md +1 -1
- package/screen/index.js +14 -16
- package/screen/screen-layout.js +10 -4
- package/select/index.js +5 -7
- package/side-page/index.d.ts +3 -2
- package/side-page/index.js +48 -6
- package/spinner/index.d.ts +1 -1
- package/spinner/index.js +1 -1
- package/spinner/spinner.module.scss +1 -4
- package/styling/fonts.js +1 -3
- package/styling/utils.js +1 -3
- package/text-field/index.js +3 -10
- package/timer/index.d.ts +3 -3
- package/timer/index.js +4 -4
- package/timer/utils.js +1 -4
- package/top-bar/index.js +1 -1
- package/unknown-content/index.d.ts +4 -2
- package/unknown-content/index.js +28 -2
- package/unknown-content/unknown-content.module.scss +214 -120
- package/unknown-content/utils.d.ts +6 -0
- package/unknown-content/utils.js +18 -0
- package/upload/area.js +3 -1
- package/upload/utils.d.ts +2 -2
- package/upload/utils.js +2 -2
- package/with-hint/positioning-hint.d.ts +1 -1
- package/with-hint/positioning-hint.js +1 -1
- package/with-hint/utils.js +5 -7
- package/with-in-viewport-observer/index.js +1 -1
package/screen/index.js
CHANGED
|
@@ -43,28 +43,26 @@ const Screen = ({ children, contentRef, footer, fullScrollThreshold = 320, loadi
|
|
|
43
43
|
innerContentRef.current && (0, body_scroll_lock_1.enableBodyScroll)(innerContentRef.current);
|
|
44
44
|
}, []);
|
|
45
45
|
return (react_1.default.createElement(Wrapper, null,
|
|
46
|
-
react_1.default.createElement("div", { ref: rootRef, className: (0, utils_1.cx)('screen', 'full-width'), style: { zIndex: layer } }, loading && loadingArea === 'full'
|
|
47
|
-
? react_1.default.createElement(loading_overlay_1.LoadingOverlay, Object.assign({}, loadingOverlayProps
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
(
|
|
56
|
-
(0, exports.takeScrollableElement)(innerContentRef, element);
|
|
57
|
-
}, footer: footer, onBack: ({ contentElement }) => {
|
|
58
|
-
onBack && onBack({
|
|
46
|
+
react_1.default.createElement("div", { ref: rootRef, className: (0, utils_1.cx)('screen', 'full-width'), style: { zIndex: layer } }, loading && loadingArea === 'full' ? (react_1.default.createElement(loading_overlay_1.LoadingOverlay, Object.assign({}, loadingOverlayProps))) : (react_1.default.createElement(layer_1.LayerProvider, { value: layer },
|
|
47
|
+
react_1.default.createElement(screen_layout_1.ScreenLayout, { title: title, subtitle: subtitle, withHeader: withHeader, withDivideHeader: withDivideHeader, withBackButton: withBackButton, withCloseButton: withCloseButton, children: loading && loadingArea === 'content' ? (react_1.default.createElement(loading_overlay_1.LoadingOverlay, Object.assign({}, loadingOverlayProps, (loadingArea === 'content' && {
|
|
48
|
+
fill: false,
|
|
49
|
+
style: { height: '100%' },
|
|
50
|
+
})))) : (children), childrenRef: element => {
|
|
51
|
+
(0, exports.setRefValue)(contentRef, element);
|
|
52
|
+
(0, exports.takeScrollableElement)(innerContentRef, element);
|
|
53
|
+
}, footer: footer, onBack: ({ contentElement }) => {
|
|
54
|
+
onBack &&
|
|
55
|
+
onBack({
|
|
59
56
|
rootElement: rootRef.current,
|
|
60
57
|
contentElement,
|
|
61
58
|
});
|
|
62
|
-
|
|
63
|
-
|
|
59
|
+
}, onClose: ({ contentElement }) => {
|
|
60
|
+
onClose &&
|
|
61
|
+
onClose({
|
|
64
62
|
rootElement: rootRef.current,
|
|
65
63
|
contentElement,
|
|
66
64
|
});
|
|
67
|
-
|
|
65
|
+
}, onFullScroll: onFullScroll, fullScrollThreshold: fullScrollThreshold, navBarProps: navBarProps }))))));
|
|
68
66
|
};
|
|
69
67
|
exports.Screen = Screen;
|
|
70
68
|
/**
|
package/screen/screen-layout.js
CHANGED
|
@@ -57,15 +57,21 @@ const ScreenLayout = ({ children, childrenRef, footer, fullScrollThreshold, navB
|
|
|
57
57
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
58
58
|
Boolean(withHeader) && (react_1.default.createElement(nav_bar_1.NavBar, Object.assign({}, navBarProps, { title: title, subtitle: subtitle, bottomBordered: withDivideHeader, buttons: Object.assign(Object.assign({}, navBarProps.buttons), { start: withBackButton
|
|
59
59
|
? {
|
|
60
|
+
// ВАЖНО: не подмешиваем свойства из navBarProps.buttons.start
|
|
61
|
+
// чтобы не распылять конфигурацию одной и той же кнопки по нескольким местам
|
|
60
62
|
icon: arrow_left_1.default,
|
|
61
63
|
onClick: () => onBack && onBack({ contentElement: contentRef.current }),
|
|
62
64
|
'aria-label': 'Вернуться назад',
|
|
65
|
+
'data-testid': 'screen:back',
|
|
63
66
|
}
|
|
64
67
|
: (0, lodash_1.get)(navBarProps.buttons, 'start'), end: withCloseButton
|
|
65
68
|
? {
|
|
69
|
+
// ВАЖНО: не подмешиваем свойства из navBarProps.buttons.end
|
|
70
|
+
// чтобы не распылять конфигурацию одной и той же кнопки по нескольким местам
|
|
66
71
|
icon: cross_1.default,
|
|
67
72
|
onClick: () => onClose && onClose({ contentElement: contentRef.current }),
|
|
68
73
|
'aria-label': `Закрыть ${title || ''}`.trim(),
|
|
74
|
+
'data-testid': 'screen:close',
|
|
69
75
|
}
|
|
70
76
|
: (0, lodash_1.get)(navBarProps.buttons, 'end') }) }))),
|
|
71
77
|
react_1.default.createElement("div", { className: (0, utils_1.cx)('content', 'full-width'), children: children, ref: (0, exports.createTakeContentRef)({
|
|
@@ -74,7 +80,7 @@ const ScreenLayout = ({ children, childrenRef, footer, fullScrollThreshold, navB
|
|
|
74
80
|
onFullScroll,
|
|
75
81
|
fullScrollThreshold,
|
|
76
82
|
}) }),
|
|
77
|
-
Boolean(footer) &&
|
|
83
|
+
Boolean(footer) && react_1.default.createElement("div", { className: (0, utils_1.cx)('footer', 'full-width') }, footer)));
|
|
78
84
|
};
|
|
79
85
|
exports.ScreenLayout = ScreenLayout;
|
|
80
86
|
/**
|
|
@@ -101,9 +107,9 @@ const createTakeContentRef = ({ elementRef, unsubscribeRef, onFullScroll, fullSc
|
|
|
101
107
|
unsubscribeRef.current && unsubscribeRef.current();
|
|
102
108
|
// выполняем подписку, сохраняем функцию отписки
|
|
103
109
|
unsubscribeRef.current = (0, on_1.default)(element, 'scroll', () => {
|
|
104
|
-
(0, is_fully_scrolled_1.isFullyScrolled)(element, { threshold })
|
|
105
|
-
&&
|
|
106
|
-
|
|
110
|
+
(0, is_fully_scrolled_1.isFullyScrolled)(element, { threshold }) &&
|
|
111
|
+
onFullScroll &&
|
|
112
|
+
onFullScroll({ contentElement: element });
|
|
107
113
|
});
|
|
108
114
|
}
|
|
109
115
|
};
|
package/select/index.js
CHANGED
|
@@ -69,7 +69,7 @@ const Select = (_a) => {
|
|
|
69
69
|
relatedTarget !== menuRef.current && toggleMenu(false);
|
|
70
70
|
}, onKeyDown: (e) => {
|
|
71
71
|
e.key === 'Enter' && toggleMenu(true);
|
|
72
|
-
}, className: cx('field'), endAdornment:
|
|
72
|
+
}, className: cx('field'), endAdornment: react_1.default.createElement(ArrowSVG, { fill: colors_1.COLORS.get('gray38') }) })),
|
|
73
73
|
opened && (loading || options.length > 0) && (react_1.default.createElement(dropdown_1.Dropdown, Object.assign({}, (0, dropdown_2.placeDropdown)(restProps.size), { ref: menuRef, "data-testid": 'select:menu', tabIndex: -1, className: cx('menu'), onBlur: () => {
|
|
74
74
|
toggleMenu(false);
|
|
75
75
|
}, role: 'menu', onKeyDown: (event) => {
|
|
@@ -77,11 +77,9 @@ const Select = (_a) => {
|
|
|
77
77
|
toggleMenu(false);
|
|
78
78
|
fieldRef.current && fieldRef.current.focus();
|
|
79
79
|
}
|
|
80
|
-
} }), loading
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
onSelect && onSelect(option);
|
|
85
|
-
} }, renderOption(option))))))));
|
|
80
|
+
} }), loading ? (react_1.default.createElement(dropdown_loading_1.DropdownLoading, { "data-testid": 'select:loading-area' })) : (options.map((option, index) => (react_1.default.createElement(dropdown_item_1.DropdownItem, { size: optionSize, key: index, role: 'menuitem', onClick: () => {
|
|
81
|
+
toggleMenu(false);
|
|
82
|
+
onSelect && onSelect(option);
|
|
83
|
+
} }, renderOption(option)))))))));
|
|
86
84
|
};
|
|
87
85
|
exports.Select = Select;
|
package/side-page/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
2
|
+
import { WithBodyScrollLock } from '../_internal/body-scroll';
|
|
3
|
+
export interface SidePageProps extends WithBodyScrollLock {
|
|
3
4
|
/** Нужно ли показать компонент. */
|
|
4
5
|
shown?: boolean;
|
|
5
6
|
/** Нужно ли использовать анимации при открытии/закрытии. */
|
|
@@ -17,7 +18,7 @@ export interface SidePageProps {
|
|
|
17
18
|
* @return Элемент.
|
|
18
19
|
*/
|
|
19
20
|
export declare const SidePage: {
|
|
20
|
-
({ shown, withTransitions,
|
|
21
|
+
({ shown, withTransitions, ...restProps }: SidePageProps): JSX.Element;
|
|
21
22
|
Header: {
|
|
22
23
|
({ onBack, onClose, ...topBarProps }: import("../top-bar").TopBarProps & {
|
|
23
24
|
onBack?: (() => void) | undefined;
|
package/side-page/index.js
CHANGED
|
@@ -1,13 +1,44 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
22
|
+
var t = {};
|
|
23
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
24
|
+
t[p] = s[p];
|
|
25
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
26
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
27
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
28
|
+
t[p[i]] = s[p[i]];
|
|
29
|
+
}
|
|
30
|
+
return t;
|
|
31
|
+
};
|
|
2
32
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
33
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
34
|
};
|
|
5
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
36
|
exports.SidePage = void 0;
|
|
7
|
-
const react_1 =
|
|
37
|
+
const react_1 = __importStar(require("react"));
|
|
8
38
|
const define_slots_1 = require("../helpers/define-slots");
|
|
9
39
|
const utils_1 = require("../modal/utils");
|
|
10
40
|
const layer_1 = require("../helpers/layer");
|
|
41
|
+
const body_scroll_1 = require("../_internal/body-scroll");
|
|
11
42
|
const slots_1 = require("./slots");
|
|
12
43
|
const CSSTransition_1 = __importDefault(require("react-transition-group/CSSTransition"));
|
|
13
44
|
const bind_1 = __importDefault(require("classnames/bind"));
|
|
@@ -24,10 +55,21 @@ const transitionClasses = {
|
|
|
24
55
|
* @param props Свойства.
|
|
25
56
|
* @return Элемент.
|
|
26
57
|
*/
|
|
27
|
-
const SidePage = (
|
|
58
|
+
const SidePage = (_a) => {
|
|
59
|
+
var { shown, withTransitions } = _a, restProps = __rest(_a, ["shown", "withTransitions"]);
|
|
60
|
+
const transitionDuration = withTransitions ? 300 : 0;
|
|
61
|
+
return (react_1.default.createElement(CSSTransition_1.default, { in: shown, timeout: transitionDuration, classNames: transitionClasses, unmountOnExit: true }, transitionStatus => (react_1.default.createElement(SidePageInner, Object.assign({}, restProps, { transitionStatus, transitionDuration })))));
|
|
62
|
+
};
|
|
63
|
+
exports.SidePage = SidePage;
|
|
64
|
+
/**
|
|
65
|
+
* Фиктивный компонент, необходимый для того чтобы задействовать хук блокировки прокрутки внутри CSSTransition.
|
|
66
|
+
* @param props Свойства.
|
|
67
|
+
* @return Элемент.
|
|
68
|
+
*/
|
|
69
|
+
const SidePageInner = ({ size = 'm', children, onClose, withScrollDisable, scrollDisableOptions, transitionStatus, transitionDuration, }) => {
|
|
28
70
|
const layer = (0, layer_1.useLayer)() + 100;
|
|
29
71
|
const overlayBind = (0, utils_1.useCloseHandler)(onClose);
|
|
30
|
-
const
|
|
72
|
+
const ref = (0, react_1.useRef)(null);
|
|
31
73
|
const overlayStyles = {
|
|
32
74
|
zIndex: layer,
|
|
33
75
|
'--transition-duration': `${transitionDuration}ms`,
|
|
@@ -37,13 +79,13 @@ const SidePage = ({ shown, withTransitions, size = 'm', children, onClose, }) =>
|
|
|
37
79
|
body: exports.SidePage.Body,
|
|
38
80
|
footer: exports.SidePage.Footer,
|
|
39
81
|
});
|
|
40
|
-
|
|
82
|
+
(0, body_scroll_1.useBodyScrollLock)(ref, withScrollDisable, scrollDisableOptions);
|
|
83
|
+
return (react_1.default.createElement("div", Object.assign({ ref: ref, className: cx('overlay'), style: overlayStyles }, (transitionStatus !== 'entering' && overlayBind)),
|
|
41
84
|
react_1.default.createElement("div", { className: cx('main', `size-${size}`) },
|
|
42
85
|
header,
|
|
43
86
|
react_1.default.createElement("div", { className: cx('body') }, body),
|
|
44
|
-
footer)))
|
|
87
|
+
footer)));
|
|
45
88
|
};
|
|
46
|
-
exports.SidePage = SidePage;
|
|
47
89
|
exports.SidePage.Header = slots_1.SidePageHeader;
|
|
48
90
|
exports.SidePage.Body = slots_1.SidePageBody;
|
|
49
91
|
exports.SidePage.Footer = slots_1.SidePageFooter;
|
package/spinner/index.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ export declare const DIAMETERS: Record<Size, number>;
|
|
|
15
15
|
/**
|
|
16
16
|
* Компонент спиннера.
|
|
17
17
|
* @param props Свойства.
|
|
18
|
-
* @return
|
|
18
|
+
* @return Элемент.
|
|
19
19
|
*/
|
|
20
20
|
export declare const Spinner: ({ size, color, className, style, }: SpinnerProps) => JSX.Element;
|
|
21
21
|
export {};
|
package/spinner/index.js
CHANGED
|
@@ -20,7 +20,7 @@ const AVAILABLE_COLORS = ['brand-blue', 'white'];
|
|
|
20
20
|
/**
|
|
21
21
|
* Компонент спиннера.
|
|
22
22
|
* @param props Свойства.
|
|
23
|
-
* @return
|
|
23
|
+
* @return Элемент.
|
|
24
24
|
*/
|
|
25
25
|
const Spinner = ({ size = 'medium', color = DEFAULT_COLOR, className, style, }) => {
|
|
26
26
|
const readySize = (0, lodash_1.has)(exports.DIAMETERS, size) ? size : 'medium';
|
|
@@ -23,10 +23,7 @@ $durations: (
|
|
|
23
23
|
width: #{$diameter}px;
|
|
24
24
|
height: #{$diameter}px;
|
|
25
25
|
.circle {
|
|
26
|
-
animation: dash-#{$sizeKey}
|
|
27
|
-
map-get($durations, $sizeKey)
|
|
28
|
-
linear
|
|
29
|
-
infinite;
|
|
26
|
+
animation: dash-#{$sizeKey} map-get($durations, $sizeKey) linear infinite;
|
|
30
27
|
}
|
|
31
28
|
@keyframes dash-#{$sizeKey} {
|
|
32
29
|
0% {
|
package/styling/fonts.js
CHANGED
|
@@ -7,9 +7,7 @@ exports.weight = exports.lineHeight = exports.size = exports.WEIGHTS = exports.L
|
|
|
7
7
|
const utils_1 = require("./utils");
|
|
8
8
|
const fonts_module_scss_1 = __importDefault(require("./fonts.module.scss"));
|
|
9
9
|
exports.SIZES = new Set([12, 14, 16, 20, 24, 32, 48, 64]);
|
|
10
|
-
exports.LINE_HEIGHTS = new Set([
|
|
11
|
-
16, 20, 24, 28, 32, 40, 60, 80,
|
|
12
|
-
]);
|
|
10
|
+
exports.LINE_HEIGHTS = new Set([16, 20, 24, 28, 32, 40, 60, 80]);
|
|
13
11
|
exports.WEIGHTS = new Set([400, 600, 700]);
|
|
14
12
|
exports.size = (0, utils_1.ClassGetter)(fonts_module_scss_1.default, exports.SIZES.has.bind(exports.SIZES), 'size-');
|
|
15
13
|
exports.lineHeight = (0, utils_1.ClassGetter)(fonts_module_scss_1.default, exports.LINE_HEIGHTS.has.bind(exports.LINE_HEIGHTS), 'line-height-');
|
package/styling/utils.js
CHANGED
|
@@ -14,8 +14,6 @@ const bind_1 = __importDefault(require("classnames/bind"));
|
|
|
14
14
|
*/
|
|
15
15
|
const ClassGetter = (classes, isValidKey, prefix = '') => {
|
|
16
16
|
const cx = bind_1.default.bind(classes);
|
|
17
|
-
return (value) => isValidKey(value)
|
|
18
|
-
? cx(`${prefix}${value}`)
|
|
19
|
-
: undefined;
|
|
17
|
+
return (value) => (isValidKey(value) ? cx(`${prefix}${value}`) : undefined);
|
|
20
18
|
};
|
|
21
19
|
exports.ClassGetter = ClassGetter;
|
package/text-field/index.js
CHANGED
|
@@ -45,7 +45,7 @@ const isVisible = (value) => !(0, lodash_1.isNil)(value) && `${value}` !== '';
|
|
|
45
45
|
* @param modifiers Данные визуальных модификаторов.
|
|
46
46
|
* @return Строка с css-классами.
|
|
47
47
|
*/
|
|
48
|
-
const modifiersToClasses = ({ disabled, failed, focused, variant }) => cx(disabled && 'disabled', failed && 'failed', focused && 'focused', variant && `variant-${variant}`);
|
|
48
|
+
const modifiersToClasses = ({ disabled, failed, focused, variant, }) => cx(disabled && 'disabled', failed && 'failed', focused && 'focused', variant && `variant-${variant}`);
|
|
49
49
|
/**
|
|
50
50
|
* Компонент текстового поля.
|
|
51
51
|
* @param props Свойства.
|
|
@@ -73,20 +73,13 @@ exports.TextField = (0, react_1.forwardRef)(function TextField({ autoFocus, capt
|
|
|
73
73
|
react_1.default.createElement("div", { "data-testid": 'text-field:block', className: cx('reset', 'input-block', commonModifyClasses, size && `size-${size}`, focused && classes.blockFocused, multiline && 'multiline', withLabel && 'with-label', variant === 'desktop' && rounds !== 'none' && shapes_1.SmallRounds[rounds]), onClick: event => {
|
|
74
74
|
const input = baseInputRef.current;
|
|
75
75
|
onClick === null || onClick === void 0 ? void 0 : onClick(event);
|
|
76
|
-
input
|
|
77
|
-
&& !disabled
|
|
78
|
-
&& input !== document.activeElement
|
|
79
|
-
&& input.focus();
|
|
76
|
+
input && !disabled && input !== document.activeElement && input.focus();
|
|
80
77
|
} },
|
|
81
78
|
!multiline && Boolean(startAdornment) && (react_1.default.createElement(box_1.Box, { display: 'flex', alignItems: 'center', marginRight: 4 }, startAdornment)),
|
|
82
79
|
react_1.default.createElement("div", { className: cx('main-column') },
|
|
83
80
|
withLabel && (react_1.default.createElement("label", { className: cx('label', commonModifyClasses, hasValue && 'filled', labelAsPlaceholder && 'as-placeholder'), children: label })),
|
|
84
81
|
react_1.default.createElement("div", { className: cx('input-wrapper') },
|
|
85
|
-
react_1.default.createElement(base_input_1.BaseInput, Object.assign({}, baseInputProps, { "data-testid": 'text-field:field', multiline: multiline, ref: baseInputRef, placeholder: withLabel && labelAsPlaceholder
|
|
86
|
-
? undefined
|
|
87
|
-
: placeholder, restPlaceholder: withLabel && labelAsPlaceholder
|
|
88
|
-
? undefined
|
|
89
|
-
: restPlaceholder, autoFocus: autoFocus, className: cx('base-input', commonModifyClasses, classes.baseInput, size && `size-${size}`), defaultValue: defaultValue, value: value, readOnly: readOnly, disabled: disabled, onFocus: (event) => {
|
|
82
|
+
react_1.default.createElement(base_input_1.BaseInput, Object.assign({}, baseInputProps, { "data-testid": 'text-field:field', multiline: multiline, ref: baseInputRef, placeholder: withLabel && labelAsPlaceholder ? undefined : placeholder, restPlaceholder: withLabel && labelAsPlaceholder ? undefined : restPlaceholder, autoFocus: autoFocus, className: cx('base-input', commonModifyClasses, classes.baseInput, size && `size-${size}`), defaultValue: defaultValue, value: value, readOnly: readOnly, disabled: disabled, onFocus: (event) => {
|
|
90
83
|
(0, lodash_1.isFunction)(onFocus) && onFocus(event);
|
|
91
84
|
toggleHasValue(Boolean(event.target.value));
|
|
92
85
|
toggleFocused(true);
|
package/timer/index.d.ts
CHANGED
|
@@ -9,8 +9,8 @@ export interface TimerProps {
|
|
|
9
9
|
timeout?: number;
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
13
|
-
* @param props
|
|
12
|
+
* Компонент для вывода оставшегося времени до целевой временной отметки.
|
|
13
|
+
* @param props Свойства.
|
|
14
14
|
* @return Элемент.
|
|
15
15
|
*/
|
|
16
|
-
export declare const Timer: ({ date, format, timeout
|
|
16
|
+
export declare const Timer: ({ date, format, timeout }: TimerProps) => JSX.Element;
|
package/timer/index.js
CHANGED
|
@@ -23,11 +23,11 @@ exports.Timer = void 0;
|
|
|
23
23
|
const react_1 = __importStar(require("react"));
|
|
24
24
|
const utils_1 = require("./utils");
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
27
|
-
* @param props
|
|
26
|
+
* Компонент для вывода оставшегося времени до целевой временной отметки.
|
|
27
|
+
* @param props Свойства.
|
|
28
28
|
* @return Элемент.
|
|
29
29
|
*/
|
|
30
|
-
const Timer = ({ date, format = utils_1.formatDistance, timeout = 1000
|
|
30
|
+
const Timer = ({ date, format = utils_1.formatDistance, timeout = 1000 }) => {
|
|
31
31
|
const [distance, setDistance] = (0, react_1.useState)((0, utils_1.getDistanceToNow)(date));
|
|
32
32
|
(0, react_1.useEffect)(() => {
|
|
33
33
|
const timerId = setInterval(() => {
|
|
@@ -36,6 +36,6 @@ const Timer = ({ date, format = utils_1.formatDistance, timeout = 1000, }) => {
|
|
|
36
36
|
setDistance((0, utils_1.getDistanceToNow)(date));
|
|
37
37
|
return () => clearInterval(timerId);
|
|
38
38
|
}, [timeout]);
|
|
39
|
-
return
|
|
39
|
+
return react_1.default.createElement(react_1.default.Fragment, null, format(distance));
|
|
40
40
|
};
|
|
41
41
|
exports.Timer = Timer;
|
package/timer/utils.js
CHANGED
|
@@ -14,10 +14,7 @@ const UNITS = ['day', 'hour', 'minute', 'second'];
|
|
|
14
14
|
* @param distance Оставшееся время.
|
|
15
15
|
* @return Отформатированное время.
|
|
16
16
|
*/
|
|
17
|
-
const formatDistance = ({ days, hours, minutes, seconds }) => [
|
|
18
|
-
days,
|
|
19
|
-
...[hours % 24, minutes % 60, seconds % 60].map(s => `${s}`.padStart(2, '0')),
|
|
20
|
-
].join(':');
|
|
17
|
+
const formatDistance = ({ days, hours, minutes, seconds }) => [days, ...[hours % 24, minutes % 60, seconds % 60].map(s => `${s}`.padStart(2, '0'))].join(':');
|
|
21
18
|
exports.formatDistance = formatDistance;
|
|
22
19
|
/**
|
|
23
20
|
* Возвращает объект с данными об оставшемся времени от текущего момента.
|
package/top-bar/index.js
CHANGED
|
@@ -43,7 +43,7 @@ const TopBar = ({ divided, size = 'm', title, subtitle, buttonsProps: { start, s
|
|
|
43
43
|
hasStartSecondary ? react_1.default.createElement(exports.IconButton, Object.assign({}, startSecondary)) : secondaryStub,
|
|
44
44
|
react_1.default.createElement("div", { className: cx('main-section') },
|
|
45
45
|
react_1.default.createElement("div", { className: cx('title', 'ellipsis') }, title),
|
|
46
|
-
Boolean(subtitle) &&
|
|
46
|
+
Boolean(subtitle) && react_1.default.createElement("div", { className: cx('subtitle', 'ellipsis') }, subtitle)),
|
|
47
47
|
hasEndSecondary ? react_1.default.createElement(exports.IconButton, Object.assign({}, endSecondary)) : secondaryStub,
|
|
48
48
|
hasEnd ? react_1.default.createElement(exports.IconButton, Object.assign({}, end)) : stub));
|
|
49
49
|
};
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
export interface UnknownContentProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
3
|
/** Строка с html-версткой. */
|
|
4
|
-
markup
|
|
4
|
+
markup?: string;
|
|
5
|
+
/** Содержимое. */
|
|
6
|
+
children?: React.ReactNode;
|
|
5
7
|
}
|
|
6
8
|
/**
|
|
7
9
|
* Компонент, стилизующий верстку по гайдам.
|
|
8
10
|
* @param props Свойства.
|
|
9
11
|
* @return Элемент.
|
|
10
12
|
*/
|
|
11
|
-
export declare const UnknownContent: ({ markup, className }: UnknownContentProps) => JSX.Element;
|
|
13
|
+
export declare const UnknownContent: ({ markup, children, className }: UnknownContentProps) => JSX.Element;
|
package/unknown-content/index.js
CHANGED
|
@@ -1,16 +1,42 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
2
21
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
22
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
23
|
};
|
|
5
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
25
|
exports.UnknownContent = void 0;
|
|
7
|
-
const react_1 =
|
|
26
|
+
const react_1 = __importStar(require("react"));
|
|
8
27
|
const classnames_1 = __importDefault(require("classnames"));
|
|
9
28
|
const unknown_content_module_scss_1 = __importDefault(require("./unknown-content.module.scss"));
|
|
29
|
+
const utils_1 = require("./utils");
|
|
10
30
|
/**
|
|
11
31
|
* Компонент, стилизующий верстку по гайдам.
|
|
12
32
|
* @param props Свойства.
|
|
13
33
|
* @return Элемент.
|
|
14
34
|
*/
|
|
15
|
-
const UnknownContent = ({ markup, className }) =>
|
|
35
|
+
const UnknownContent = ({ markup, children, className }) => {
|
|
36
|
+
const ref = (0, react_1.useRef)(null);
|
|
37
|
+
(0, react_1.useEffect)(() => {
|
|
38
|
+
ref.current && (0, utils_1.setTableRowLabels)(ref.current);
|
|
39
|
+
});
|
|
40
|
+
return (react_1.default.createElement("div", Object.assign({ ref: ref, className: (0, classnames_1.default)(unknown_content_module_scss_1.default.root, className) }, (children ? { children } : { dangerouslySetInnerHTML: { __html: markup || '' } }))));
|
|
41
|
+
};
|
|
16
42
|
exports.UnknownContent = UnknownContent;
|