@sima-land/ui-nucleons 45.0.0-alpha.1 → 45.0.0-alpha.2

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.
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { BottomBarProps, BottomBarSize } from './types';
2
+ import { BottomBarProps, type BottomBarSize } from './types';
3
3
  export declare const BOTTOM_BAR_HEIGHT: Record<BottomBarSize, number>;
4
4
  export declare const BOTTOM_BAR_DEFAULTS: {
5
5
  readonly size: "m";
@@ -1,2 +1,2 @@
1
+ export type { BottomBarSize, BottomBarProps } from './types';
1
2
  export { BottomBar, BOTTOM_BAR_DEFAULTS, BOTTOM_BAR_HEIGHT } from './bottom-bar';
2
- export { BottomBarSize, BottomBarProps } from './types';
@@ -31,4 +31,4 @@ export interface DropdownItemProps extends Omit<React.HTMLAttributes<HTMLDivElem
31
31
  * @param props Свойства.
32
32
  * @return Элемент.
33
33
  */
34
- export declare function DropdownItem({ size, children, className, selected, disabled, noHover, checked, startContent, startIcon: StartIcon, endContent, endIcon: EndIcon, comment, 'data-testid': testId, ...restProps }: DropdownItemProps): JSX.Element;
34
+ export declare function DropdownItem({ size, children, className, selected, disabled, noHover, checked, startContent, startIcon: StartIcon, endContent, endIcon: EndIcon, comment, dangerouslySetInnerHTML, 'data-testid': testId, ...restProps }: DropdownItemProps): JSX.Element;
@@ -25,14 +25,15 @@ const cx = bind_1.default.bind(dropdown_item_module_scss_1.default);
25
25
  * @return Элемент.
26
26
  */
27
27
  function DropdownItem(_a) {
28
- var { size = 'm', children, className, selected, disabled, noHover, checked, startContent, startIcon: StartIcon, endContent, endIcon: EndIcon, comment, 'data-testid': testId = 'dropdown-item' } = _a, restProps = __rest(_a, ["size", "children", "className", "selected", "disabled", "noHover", "checked", "startContent", "startIcon", "endContent", "endIcon", "comment", 'data-testid']);
28
+ var { size = 'm', children, className, selected, disabled, noHover, checked, startContent, startIcon: StartIcon, endContent, endIcon: EndIcon, comment, dangerouslySetInnerHTML, 'data-testid': testId = 'dropdown-item' } = _a, restProps = __rest(_a, ["size", "children", "className", "selected", "disabled", "noHover", "checked", "startContent", "startIcon", "endContent", "endIcon", "comment", "dangerouslySetInnerHTML", 'data-testid']);
29
29
  const start = StartIcon ? react_1.default.createElement(StartIcon, { className: cx('icon') }) : startContent;
30
30
  const end = EndIcon ? react_1.default.createElement(EndIcon, { className: cx('icon') }) : endContent;
31
- return (react_1.default.createElement("div", Object.assign({}, restProps, { className: cx('root', `size-${size}`, selected && 'selected', checked && 'checked', disabled && 'disabled', noHover && 'no-hover', className), "data-testid": testId }),
31
+ const hasChildren = [start, children, end].some(item => typeof item !== 'undefined');
32
+ return (react_1.default.createElement("div", Object.assign({}, restProps, { className: cx('root', `size-${size}`, selected && 'selected', checked && 'checked', disabled && 'disabled', noHover && 'no-hover', className), dangerouslySetInnerHTML: dangerouslySetInnerHTML, "data-testid": testId }), hasChildren ? (react_1.default.createElement(react_1.default.Fragment, null,
32
33
  start && react_1.default.createElement("div", { className: cx('col', 'col-start') }, start),
33
34
  react_1.default.createElement("div", { className: cx('col', 'col-center') },
34
35
  react_1.default.createElement("div", { className: cx('row-main') }, children),
35
36
  size === 'xl' && comment && react_1.default.createElement("div", { className: cx('row-comment') }, comment)),
36
- end && react_1.default.createElement("div", { className: cx('col', 'col-end') }, end)));
37
+ end && react_1.default.createElement("div", { className: cx('col', 'col-end') }, end))) : undefined));
37
38
  }
38
39
  exports.DropdownItem = DropdownItem;
@@ -22,6 +22,7 @@ export interface ExpandableGroupProps {
22
22
  style?: CSSProperties;
23
23
  /** Нужно ли выводить список развернутым. */
24
24
  expanded?: boolean;
25
+ /** Ширина открывающего элемента. */
25
26
  openerWidth?: number;
26
27
  }
27
28
  export interface GroupItemProps {
package/hooks/index.js CHANGED
@@ -64,7 +64,9 @@ function useOutsideClick(elementRef, callback) {
64
64
  }
65
65
  }
66
66
  isOutsideClick && ((_a = callbackRef.current) === null || _a === void 0 ? void 0 : _a.call(callbackRef, event));
67
- });
67
+ },
68
+ // ВАЖНО: чтобы изменение DOM не приводило к ложному срабатыванию
69
+ { capture: true });
68
70
  return off;
69
71
  }, []);
70
72
  }
package/hooks/keydown.js CHANGED
@@ -1,12 +1,9 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.useKeydown = void 0;
7
4
  const react_1 = require("react");
8
5
  const identity_1 = require("./identity");
9
- const on_1 = __importDefault(require("../helpers/on"));
6
+ const on_1 = require("../helpers/on");
10
7
  /**
11
8
  * Хук, добавляющий обработчик нажатия на клавишу.
12
9
  * @param targetKey Клавиша, для которой отслеживается нажатие.
@@ -14,7 +11,7 @@ const on_1 = __importDefault(require("../helpers/on"));
14
11
  */
15
12
  function useKeydown(targetKey, callback) {
16
13
  const ref = (0, identity_1.useIdentityRef)(callback);
17
- (0, react_1.useEffect)(() => (0, on_1.default)(document, 'keydown', event => {
14
+ (0, react_1.useEffect)(() => (0, on_1.on)(document, 'keydown', event => {
18
15
  const handler = ref.current;
19
16
  (event.key === targetKey || event.code === targetKey) && (handler === null || handler === void 0 ? void 0 : handler(event));
20
17
  }), [targetKey]);
@@ -14,7 +14,7 @@ $modal-max-height: 696px;
14
14
 
15
15
  @mixin fullscreen-modal {
16
16
  width: 100%;
17
- height: calc(100 * var(--vh, 1vh));
17
+ height: 100%;
18
18
  max-height: 100%;
19
19
  }
20
20
 
@@ -5,9 +5,12 @@
5
5
  position: fixed;
6
6
  top: 0;
7
7
  left: 0;
8
+
9
+ // ВАЖНО: высота/ширина в процентах тк при использовании 100vw/100vh размер ломается если у body указан min-width
10
+ height: 100%;
11
+ width: 100%;
12
+
8
13
  display: flex;
9
- width: 100vw;
10
- height: calc(var(--vh, 1vh) * 100);
11
14
  background: modal-overlay-util.$overlay-color;
12
15
  overflow: auto;
13
16
  @include utils.hidden-scrollbars;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sima-land/ui-nucleons",
3
- "version": "45.0.0-alpha.1",
3
+ "version": "45.0.0-alpha.2",
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",
@@ -17,7 +17,7 @@ const cx = bind_1.default.bind(switcher_row_module_scss_1.default);
17
17
  * @param props Свойства.
18
18
  * @return Элемент.
19
19
  */
20
- function SwitcherRow({ children, className, style, textAlign, fieldPosition = 'start', 'data-testid': testId = 'switcher-row', }) {
20
+ function SwitcherRow({ children, className, style, textAlign = 'left', fieldPosition = 'start', 'data-testid': testId = 'switcher-row', }) {
21
21
  var _a;
22
22
  const { toggle, checkbox, radio, label, comment } = (0, define_slots_1.defineSlots)(children, {
23
23
  toggle: toggle_1.Toggle,
@@ -30,6 +30,7 @@ function SwitcherRow({ children, className, style, textAlign, fieldPosition = 's
30
30
  const failed = input === null || input === void 0 ? void 0 : input.props.failed;
31
31
  const disabled = input === null || input === void 0 ? void 0 : input.props.disabled;
32
32
  const fieldId = input === null || input === void 0 ? void 0 : input.props.id;
33
+ // @todo в Safari position: relative ломает vertical-align
33
34
  const fieldColumn = input && (react_1.default.createElement("div", { className: cx('col', 'field-col', { 'toggle-col': toggle }) }, input));
34
35
  return (react_1.default.createElement("div", { className: cx('root', `text-align-${textAlign}`, { failed, disabled }, className), style: style, "data-testid": testId },
35
36
  fieldPosition === 'start' && fieldColumn,
@@ -33,7 +33,7 @@
33
33
  }
34
34
 
35
35
  .main-col {
36
- flex-grow: 1;
36
+ // ВАЖНО: чтобы область нажатия ограничивалась текстом не задаем тут flex-grow: 1
37
37
  cursor: pointer;
38
38
  }
39
39
 
@@ -6,11 +6,17 @@
6
6
  cursor: pointer;
7
7
  user-select: none;
8
8
  vertical-align: -2px;
9
- overflow: hidden;
10
9
  }
11
10
 
12
11
  .input {
13
- display: none;
12
+ position: absolute;
13
+ display: block;
14
+ opacity: 0;
15
+ padding: 0;
16
+ margin: 0;
17
+ width: 0;
18
+ height: 0;
19
+ pointer-events: none;
14
20
  &:not(:checked) + .switch {
15
21
  --toggle-slider-position: 2px;
16
22
  }