@sima-land/ui-nucleons 41.3.0 → 42.0.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/alert/index.d.ts CHANGED
@@ -8,8 +8,6 @@ export interface AlertProps extends WithBodyScrollLock {
8
8
  className?: string;
9
9
  /** Содержимое "подвала". */
10
10
  footer?: React.ReactNode;
11
- /** Нужно ли выводить в Layer. */
12
- inPortal?: boolean;
13
11
  /** Свойства компонента NavBar. */
14
12
  navBarProps?: NavBarProps;
15
13
  /** Заголовок. */
@@ -26,4 +24,4 @@ export interface AlertProps extends WithBodyScrollLock {
26
24
  * @param props Свойства.
27
25
  * @return Элемент.
28
26
  */
29
- export declare const Alert: ({ inPortal, ...restProps }: AlertProps) => JSX.Element;
27
+ export declare const Alert: ({ children, className, footer, navBarProps, title, withDivideNavBar, withNavBar, withScrollDisable, scrollDisableOptions, onClose, }: AlertProps) => JSX.Element;
package/alert/index.js CHANGED
@@ -18,24 +18,12 @@ var __importStar = (this && this.__importStar) || function (mod) {
18
18
  __setModuleDefault(result, mod);
19
19
  return result;
20
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
- };
32
21
  var __importDefault = (this && this.__importDefault) || function (mod) {
33
22
  return (mod && mod.__esModule) ? mod : { "default": mod };
34
23
  };
35
24
  Object.defineProperty(exports, "__esModule", { value: true });
36
25
  exports.Alert = void 0;
37
26
  const react_1 = __importStar(require("react"));
38
- const portal_1 = require("../portal");
39
27
  const nav_bar_1 = require("../nav-bar");
40
28
  const bind_1 = __importDefault(require("classnames/bind"));
41
29
  const alert_module_scss_1 = __importDefault(require("./alert.module.scss"));
@@ -48,27 +36,15 @@ const cx = bind_1.default.bind(alert_module_scss_1.default);
48
36
  * @param props Свойства.
49
37
  * @return Элемент.
50
38
  */
51
- const Alert = (_a) => {
52
- var { inPortal = true } = _a, restProps = __rest(_a, ["inPortal"]);
39
+ const Alert = ({ children, className, footer, navBarProps, title, withDivideNavBar, withNavBar = Boolean(title), withScrollDisable = false, scrollDisableOptions, onClose, }) => {
53
40
  const layer = (0, layer_1.useLayer)() + 100;
54
- const Wrapper = inPortal ? portal_1.Portal : react_1.Fragment;
55
- return (react_1.default.createElement(layer_1.LayerProvider, { value: layer },
56
- react_1.default.createElement(Wrapper, null,
57
- react_1.default.createElement(AlertInner, Object.assign({}, restProps)))));
58
- };
59
- exports.Alert = Alert;
60
- /**
61
- * Промежуточный компонент, необходимый для того чтобы не передавать реф для блокировки прокрутки через портал.
62
- * @param props Свойства.
63
- * @return Элемент.
64
- */
65
- const AlertInner = ({ children, className, footer, navBarProps, title, withDivideNavBar, withNavBar = Boolean(title), withScrollDisable = false, scrollDisableOptions, onClose, }) => {
66
41
  const rootRef = (0, react_1.useRef)(null);
67
- const layer = (0, layer_1.useLayer)();
68
42
  (0, body_scroll_1.useBodyScrollLock)(rootRef, withScrollDisable, Object.assign({ allowTouchMove: body_scroll_1.allowTouchMove }, scrollDisableOptions));
69
- return (react_1.default.createElement("div", { ref: rootRef, className: cx('overlay'), style: { zIndex: layer }, onClick: e => e.target === e.currentTarget && (onClose === null || onClose === void 0 ? void 0 : onClose()), "data-testid": 'alert:overlay' },
70
- react_1.default.createElement("div", { className: cx('alert', className), "data-testid": 'alert' },
71
- withNavBar && (react_1.default.createElement(nav_bar_1.NavBar, Object.assign({}, navBarProps, { title: title, bottomBordered: withDivideNavBar, className: cx('header') }))),
72
- react_1.default.createElement("div", { className: cx('main') }, children),
73
- Boolean(footer) && react_1.default.createElement("div", { className: borders_1.InnerBorder.top }, footer))));
43
+ return (react_1.default.createElement(layer_1.LayerProvider, { value: layer },
44
+ react_1.default.createElement("div", { ref: rootRef, className: cx('overlay'), style: { zIndex: layer }, onClick: e => e.target === e.currentTarget && (onClose === null || onClose === void 0 ? void 0 : onClose()), "data-testid": 'alert:overlay' },
45
+ react_1.default.createElement("div", { className: cx('alert', className), "data-testid": 'alert' },
46
+ withNavBar && (react_1.default.createElement(nav_bar_1.NavBar, Object.assign({}, navBarProps, { title: title, bottomBordered: withDivideNavBar, className: cx('header') }))),
47
+ react_1.default.createElement("div", { className: cx('main') }, children),
48
+ Boolean(footer) && react_1.default.createElement("div", { className: borders_1.InnerBorder.top }, footer)))));
74
49
  };
50
+ exports.Alert = Alert;
package/modal/index.d.ts CHANGED
@@ -13,8 +13,6 @@ export interface ModalProps extends WithBodyScrollLock {
13
13
  onClose?: () => void;
14
14
  /** Размер окна. */
15
15
  size?: ModalSize;
16
- /** Нужно ли выводить элемент в портале (для SSR следует указывать false). */
17
- inPortal?: boolean;
18
16
  /** Идентификатор для систем автоматизированного тестирования. */
19
17
  'data-testid'?: string;
20
18
  }
package/modal/index.js CHANGED
@@ -18,17 +18,6 @@ var __importStar = (this && this.__importStar) || function (mod) {
18
18
  __setModuleDefault(result, mod);
19
19
  return result;
20
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
- };
32
21
  var __importDefault = (this && this.__importDefault) || function (mod) {
33
22
  return (mod && mod.__esModule) ? mod : { "default": mod };
34
23
  };
@@ -39,7 +28,6 @@ const top_bar_1 = require("../top-bar");
39
28
  const bottom_bar_1 = require("../bottom-bar");
40
29
  const utils_1 = require("./utils");
41
30
  const shadows_1 = require("../styling/shadows");
42
- const portal_1 = require("../portal");
43
31
  const lodash_1 = require("lodash");
44
32
  const slots_1 = require("./slots");
45
33
  const layer_1 = require("../helpers/layer");
@@ -53,19 +41,7 @@ const cx = bind_1.default.bind(modal_module_scss_1.default);
53
41
  * @param props Свойства.
54
42
  * @return Элемент.
55
43
  */
56
- const Modal = (_a) => {
57
- var { inPortal } = _a, restProps = __rest(_a, ["inPortal"]);
58
- const Wrapper = inPortal ? portal_1.Portal : react_1.Fragment;
59
- return (react_1.default.createElement(Wrapper, null,
60
- react_1.default.createElement(ModalInner, Object.assign({}, restProps))));
61
- };
62
- exports.Modal = Modal;
63
- /**
64
- * Внутренний компонент для того чтобы не прокидывать реф через портал.
65
- * @param props Свойства.
66
- * @return Элемент.
67
- */
68
- const ModalInner = ({ children, height, onClose, scrollDisableOptions = { reserveScrollBarGap: true }, size = 'm', withScrollDisable = false, 'data-testid': testId = 'modal', }) => {
44
+ const Modal = ({ children, height, onClose, scrollDisableOptions = { reserveScrollBarGap: true }, size = 'm', withScrollDisable = false, 'data-testid': testId = 'modal', }) => {
69
45
  const layer = (0, layer_1.useLayer)() + 100;
70
46
  const rootRef = (0, react_1.useRef)(null);
71
47
  const bind = (0, utils_1.useCloseHandler)(onClose);
@@ -102,6 +78,7 @@ const ModalInner = ({ children, height, onClose, scrollDisableOptions = { reserv
102
78
  !footer && !fullscreen && react_1.default.createElement("div", { className: cx('footer-stub') }),
103
79
  !fullscreen && overlap && react_1.default.createElement("div", { className: cx('overlap') }, overlap))));
104
80
  };
81
+ exports.Modal = Modal;
105
82
  exports.Modal.Header = slots_1.ModalHeader;
106
83
  exports.Modal.Body = slots_1.ModalBody;
107
84
  exports.Modal.Footer = slots_1.ModalFooter;
package/modal/utils.d.ts CHANGED
@@ -1,9 +1,10 @@
1
+ import React from 'react';
1
2
  /**
2
3
  * Вызывает callback только если клик был начат и закончен по одному и тому же элементу.
3
4
  * @param callback Сработает при клике.
4
5
  * @return Свойства для целевого элемента.
5
6
  */
6
7
  export declare const useCloseHandler: (callback?: (() => void) | undefined) => {
7
- onMouseUp: ({ target, currentTarget, button }: any) => void;
8
- onMouseDown: ({ button, target }: any) => void;
8
+ onMouseUp: ({ target, currentTarget, button }: React.MouseEvent) => void;
9
+ onMouseDown: ({ button, target }: React.MouseEvent) => void;
9
10
  };
package/modal/utils.js CHANGED
@@ -2,12 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useCloseHandler = void 0;
4
4
  const react_1 = require("react");
5
+ const identity_1 = require("../hooks/identity");
5
6
  /**
6
7
  * Вызывает callback только если клик был начат и закончен по одному и тому же элементу.
7
8
  * @param callback Сработает при клике.
8
9
  * @return Свойства для целевого элемента.
9
10
  */
10
11
  const useCloseHandler = (callback) => {
12
+ const callbackRef = (0, identity_1.useIdentityRef)(callback);
11
13
  const mouseDownTarget = (0, react_1.useRef)();
12
14
  const onMouseDown = (0, react_1.useCallback)(({ button, target }) => {
13
15
  if (button === 0) {
@@ -15,12 +17,13 @@ const useCloseHandler = (callback) => {
15
17
  }
16
18
  }, []);
17
19
  const onMouseUp = (0, react_1.useCallback)(({ target, currentTarget, button }) => {
18
- callback &&
20
+ const fn = callbackRef.current;
21
+ fn &&
19
22
  button === 0 &&
20
23
  target === currentTarget &&
21
24
  currentTarget === mouseDownTarget.current &&
22
- callback();
23
- }, [callback]);
25
+ fn();
26
+ }, []);
24
27
  return { onMouseUp, onMouseDown };
25
28
  };
26
29
  exports.useCloseHandler = useCloseHandler;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sima-land/ui-nucleons",
3
- "version": "41.3.0",
3
+ "version": "42.0.0",
4
4
  "repository": "ssh://git@github.com:sima-land/ui-nucleons.git",
5
5
  "author": "www.sima-land.ru team",
6
6
  "license": "Apache-2.0",
package/select/index.d.ts CHANGED
@@ -22,5 +22,5 @@ export interface SelectProps extends Omit<TextFieldProps, 'style'> {
22
22
  * @param props Свойства.
23
23
  * @return Элемент.
24
24
  */
25
- export declare const Select: ({ options, optionSize, onSelect, style, className, label, onClick, value, loading, onMenuToggle, renderOption, "data-testid": dataTestId, ...restProps }: SelectProps) => JSX.Element;
25
+ export declare const Select: ({ options, optionSize, onSelect, style, className, label, onClick, value, loading, onMenuToggle, renderOption, "data-testid": dataTestId, size, ...restProps }: SelectProps) => JSX.Element;
26
26
  export {};
package/select/index.js CHANGED
@@ -53,7 +53,7 @@ const cx = bind_1.default.bind(select_module_scss_1.default);
53
53
  * @return Элемент.
54
54
  */
55
55
  const Select = (_a) => {
56
- var { options, optionSize, onSelect, style, className, label, onClick, value, loading, onMenuToggle, renderOption = String, 'data-testid': dataTestId } = _a, restProps = __rest(_a, ["options", "optionSize", "onSelect", "style", "className", "label", "onClick", "value", "loading", "onMenuToggle", "renderOption", 'data-testid']);
56
+ var { options, optionSize, onSelect, style, className, label, onClick, value, loading, onMenuToggle, renderOption = String, 'data-testid': dataTestId, size } = _a, restProps = __rest(_a, ["options", "optionSize", "onSelect", "style", "className", "label", "onClick", "value", "loading", "onMenuToggle", "renderOption", 'data-testid', "size"]);
57
57
  const rootRef = (0, react_1.useRef)(null);
58
58
  const fieldRef = (0, react_1.useRef)(null);
59
59
  const menuRef = (0, react_1.useRef)(null);
@@ -65,7 +65,7 @@ const Select = (_a) => {
65
65
  }, [opened]);
66
66
  (0, hooks_1.useOutsideClick)(rootRef, toggleMenu.bind(null, false));
67
67
  return (react_1.default.createElement("div", { ref: rootRef, style: style, className: cx('root', className), "data-testid": dataTestId },
68
- react_1.default.createElement(text_field_1.TextField, { blockProps: {
68
+ react_1.default.createElement(text_field_1.TextField, Object.assign({}, restProps, { size: size, blockProps: {
69
69
  ref: fieldRef,
70
70
  tabIndex: 0,
71
71
  onMouseDown: () => {
@@ -82,8 +82,8 @@ const Select = (_a) => {
82
82
  // чтобы не ловить фокус на поле
83
83
  style: { pointerEvents: 'none' },
84
84
  tabIndex: -1,
85
- }, value: value, multiline: false, variant: 'desktop', readOnly: true, endAdornment: react_1.default.createElement(ArrowSVG, { fill: colors_1.COLORS.get('gray38') }) }),
86
- 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', role: 'menu', tabIndex: -1, className: cx('menu'), onKeyDown: event => {
85
+ }, value: value, multiline: false, variant: 'desktop', readOnly: true, endAdornment: react_1.default.createElement(ArrowSVG, { fill: colors_1.COLORS.get('gray38') }) })),
86
+ opened && (loading || options.length > 0) && (react_1.default.createElement(dropdown_1.Dropdown, Object.assign({}, (0, dropdown_2.placeDropdown)(size), { ref: menuRef, "data-testid": 'select:menu', role: 'menu', tabIndex: -1, className: cx('menu'), onKeyDown: event => {
87
87
  if (event.key === 'Enter') {
88
88
  toggleMenu(false);
89
89
  fieldRef.current && fieldRef.current.focus();