@sima-land/ui-nucleons 45.0.0-alpha.20 → 45.0.0-alpha.22

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 (59) hide show
  1. package/helpers/index.d.ts +1 -0
  2. package/helpers/index.js +3 -1
  3. package/helpers/index.js.map +1 -1
  4. package/helpers/merge-refs.d.ts +8 -0
  5. package/helpers/merge-refs.js +22 -0
  6. package/helpers/merge-refs.js.map +1 -0
  7. package/input/input.js +1 -1
  8. package/input/input.js.map +1 -1
  9. package/package.json +3 -4
  10. package/phone-input/phone-input.js +21 -10
  11. package/phone-input/phone-input.js.map +1 -1
  12. package/select/index.d.ts +2 -0
  13. package/select/index.js +5 -1
  14. package/select/index.js.map +1 -1
  15. package/select/parts/{block.d.ts → field-block.d.ts} +1 -1
  16. package/select/parts/field-block.js +70 -0
  17. package/select/parts/field-block.js.map +1 -0
  18. package/select/parts/menu.d.ts +2 -2
  19. package/select/parts/menu.js +132 -46
  20. package/select/parts/menu.js.map +1 -1
  21. package/select/parts/{button.d.ts → text-button.d.ts} +1 -1
  22. package/select/parts/text-button.js +48 -0
  23. package/select/parts/text-button.js.map +1 -0
  24. package/select/select.d.ts +1 -7
  25. package/select/select.js +44 -105
  26. package/select/select.js.map +1 -1
  27. package/select/types.d.ts +16 -22
  28. package/select/utils.d.ts +3 -2
  29. package/select/utils.js +16 -10
  30. package/select/utils.js.map +1 -1
  31. package/side-page/index.d.ts +2 -1
  32. package/side-page/index.js +6 -5
  33. package/side-page/index.js.map +1 -1
  34. package/side-page/side-page-body.d.ts +7 -0
  35. package/side-page/side-page-body.js +27 -0
  36. package/side-page/side-page-body.js.map +1 -0
  37. package/side-page/side-page-body.m.scss +4 -0
  38. package/side-page/side-page-util.scss +9 -0
  39. package/side-page/side-page.d.ts +1 -7
  40. package/side-page/side-page.js +10 -37
  41. package/side-page/side-page.js.map +1 -1
  42. package/side-page/side-page.m.scss +6 -72
  43. package/side-page/types.d.ts +11 -23
  44. package/side-page/utils.d.ts +26 -0
  45. package/side-page/utils.js +69 -0
  46. package/side-page/utils.js.map +1 -0
  47. package/side-page/utils.m.scss +67 -0
  48. package/textarea/textarea.js +5 -5
  49. package/textarea/textarea.js.map +1 -1
  50. package/textarea/types.d.ts +1 -1
  51. package/select/parts/block.js +0 -52
  52. package/select/parts/block.js.map +0 -1
  53. package/select/parts/button.js +0 -33
  54. package/select/parts/button.js.map +0 -1
  55. package/select/parts/menu.m.scss +0 -4
  56. package/side-page/slots.d.ts +0 -26
  57. package/side-page/slots.js +0 -39
  58. package/side-page/slots.js.map +0 -1
  59. /package/select/parts/{block.m.scss → field-block.m.scss} +0 -0
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SelectTextButton = SelectTextButton;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const react_1 = require("react");
9
+ const text_button_1 = require("../../text-button");
10
+ const utils_1 = require("../utils");
11
+ const ArrowExpandUp_1 = __importDefault(require("@sima-land/ui-quarks/icons/16x16/Stroked/ArrowExpandUp"));
12
+ const ArrowExpandDown_1 = __importDefault(require("@sima-land/ui-quarks/icons/16x16/Stroked/ArrowExpandDown"));
13
+ const helpers_1 = require("../../helpers");
14
+ /**
15
+ * "Открывашка" для Select в виде текстовой кнопки.
16
+ * @param props Свойства.
17
+ * @return Элемент.
18
+ */
19
+ function SelectTextButton({ buttonRef, children, onMouseDown, onKeyDown, ...restProps }) {
20
+ const {
21
+ //
22
+ selectProps, currentValue, menuOpen, setMenuOpen, setOpenerElement, setAnchorElement, } = (0, react_1.useContext)(utils_1.SelectContext);
23
+ const { label, disabled } = selectProps;
24
+ const ArrowSVG = menuOpen ? ArrowExpandUp_1.default : ArrowExpandDown_1.default;
25
+ const mergedRef = (0, react_1.useMemo)(() => (0, helpers_1.mergeRefs)([buttonRef, setOpenerElement, setAnchorElement]), [buttonRef, setOpenerElement, setAnchorElement]);
26
+ return ((0, jsx_runtime_1.jsx)(text_button_1.TextButton, { role: 'combobox', disabled: disabled, iconGutter: 4, endIcon: ArrowSVG, ...restProps, as: 'button', buttonRef: mergedRef, onMouseDown: event => {
27
+ onMouseDown?.(event);
28
+ if (disabled || event.defaultPrevented) {
29
+ return;
30
+ }
31
+ // ВАЖНО: предотвращаем фокус
32
+ !menuOpen && event.preventDefault();
33
+ setMenuOpen(a => !a);
34
+ }, onKeyDown: event => {
35
+ onKeyDown?.(event);
36
+ if (disabled || event.defaultPrevented) {
37
+ return;
38
+ }
39
+ switch (event.code) {
40
+ case 'Enter':
41
+ case 'ArrowUp':
42
+ case 'ArrowDown':
43
+ setMenuOpen(true);
44
+ break;
45
+ }
46
+ }, children: children ?? (currentValue || label) }));
47
+ }
48
+ //# sourceMappingURL=text-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-button.js","sourceRoot":"","sources":["../../../src/select/parts/text-button.tsx"],"names":[],"mappings":";;;;;AAYA,4CAkEC;;AA9ED,iCAA4C;AAC5C,mDAAwE;AACxE,oCAAyC;AACzC,2GAA2E;AAC3E,+GAA+E;AAC/E,2CAA0C;AAE1C;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,QAAQ,EACR,WAAW,EACX,SAAS,EACT,GAAG,SAAS,EACY;IACxB,MAAM;IACJ,EAAE;IACF,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,gBAAgB,GACjB,GAAG,IAAA,kBAAU,EAAC,qBAAa,CAAC,CAAC;IAE9B,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC;IAExC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,uBAAK,CAAC,CAAC,CAAC,yBAAO,CAAC;IAE5C,MAAM,SAAS,GAAG,IAAA,eAAO,EACvB,GAAG,EAAE,CAAC,IAAA,mBAAS,EAAoB,CAAC,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,EACnF,CAAC,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAChD,CAAC;IAEF,OAAO,CACL,uBAAC,wBAAU,IACT,IAAI,EAAC,UAAU,EACf,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,CAAC,EACb,OAAO,EAAE,QAAQ,KACb,SAAS,EACb,EAAE,EAAC,QAAQ,EACX,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,KAAK,CAAC,EAAE;YACnB,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;YAErB,IAAI,QAAQ,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;gBACvC,OAAO;YACT,CAAC;YAED,6BAA6B;YAC7B,CAAC,QAAQ,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YAEpC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC,EACD,SAAS,EAAE,KAAK,CAAC,EAAE;YACjB,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC;YAEnB,IAAI,QAAQ,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;gBACvC,OAAO;YACT,CAAC;YAED,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,OAAO,CAAC;gBACb,KAAK,SAAS,CAAC;gBACf,KAAK,WAAW;oBACd,WAAW,CAAC,IAAI,CAAC,CAAC;oBAClB,MAAM;YACV,CAAC;QACH,CAAC,YAEA,QAAQ,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,GACzB,CACd,CAAC;AACJ,CAAC"}
@@ -1,13 +1,7 @@
1
1
  import { SelectProps } from './types';
2
- import { SelectFieldBlock } from './parts/block';
3
- import { SelectTextButton } from './parts/button';
4
2
  /**
5
3
  * Поле выбора из списка.
6
4
  * @param props Свойства.
7
5
  * @return Элемент.
8
6
  */
9
- export declare function Select({ children, disabled, failed, loading, onValueChange, onMenuToggle, value, defaultValue, label, opener, renderValue, dropdownProps, onMenuOpen, onMenuClose, }: SelectProps): import("react/jsx-runtime").JSX.Element;
10
- export declare namespace Select {
11
- var FieldBlock: typeof SelectFieldBlock;
12
- var TextButton: typeof SelectTextButton;
13
- }
7
+ export declare function Select(props: SelectProps): import("react/jsx-runtime").JSX.Element;
package/select/select.js CHANGED
@@ -4,124 +4,63 @@ exports.Select = Select;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const utils_1 = require("./utils");
7
- const use_identity_ref_1 = require("../hooks/use-identity-ref");
8
- const utils_2 = require("../dropdown-item/utils");
9
- const react_2 = require("@floating-ui/react");
7
+ const field_block_1 = require("./parts/field-block");
10
8
  const menu_1 = require("./parts/menu");
11
- const block_1 = require("./parts/block");
12
- const button_1 = require("./parts/button");
13
- const utils_3 = require("../dropdown/utils");
14
- const lifecycle_1 = require("../_internal/lifecycle");
15
- const portal_1 = require("../portal");
9
+ const react_2 = require("@floating-ui/react");
10
+ const dropdown_1 = require("../dropdown");
11
+ const hooks_1 = require("../hooks");
16
12
  /**
17
13
  * Поле выбора из списка.
18
14
  * @param props Свойства.
19
15
  * @return Элемент.
20
16
  */
21
- function Select({ children, disabled, failed, loading, onValueChange, onMenuToggle, value, defaultValue, label, opener = (0, jsx_runtime_1.jsx)(block_1.SelectFieldBlock, {}), renderValue = v => v, dropdownProps, onMenuOpen, onMenuClose, }) {
17
+ function Select(props) {
18
+ const { opener = (0, jsx_runtime_1.jsx)(field_block_1.SelectFieldBlock, {}), menu = (0, jsx_runtime_1.jsx)(menu_1.SelectMenu, {}), value, defaultValue, onValueChange, } = props;
22
19
  // @todo по аналогии с <select /> надо проверять, есть ли значение в списке переданных
23
- const [initialValue] = (0, react_1.useState)(() => value ?? defaultValue ?? '');
24
- const [currentValue, setCurrentValue] = (0, react_1.useState)(initialValue);
25
- const [needMenu, setNeedMenu] = (0, react_1.useState)(false);
20
+ const [currentValue, setCurrentValue] = (0, react_1.useState)(() => value ?? defaultValue ?? '');
21
+ const [menuOpen, setMenuOpen] = (0, react_1.useState)(false);
22
+ const [openerElement, setOpenerElement] = (0, react_1.useState)(null);
23
+ const [anchorElement, setAnchorElement] = (0, react_1.useState)(null);
26
24
  const [menuElement, setMenuElement] = (0, react_1.useState)(null);
27
- const [menuFocused, setMenuFocused] = (0, react_1.useState)(false);
28
- const onMenuToggleRef = (0, use_identity_ref_1.useIdentityRef)(onMenuToggle);
29
- const openerRef = (0, react_1.useRef)(null);
30
- const menuShown = needMenu && menuElement !== null;
31
- const { refs, isPositioned, ...floating } = (0, react_2.useFloating)({
32
- open: needMenu,
33
- ...(0, utils_3.dropdownFloatingConfig)(),
34
- });
35
- (0, react_1.useImperativeHandle)(refs.setFloating, () => menuElement, [menuElement]);
36
- (0, react_1.useEffect)(() => {
37
- if (typeof value !== 'undefined') {
38
- // @todo по аналогии с <select /> надо проверять, есть ли значение в списке переданных
25
+ const menuFloating = (0, react_2.useFloating)({ open: menuOpen, ...(0, dropdown_1.dropdownFloatingConfig)() });
26
+ const { setReference, setFloating } = menuFloating.refs;
27
+ const menuFloatingStyle = (0, dropdown_1.useDropdownFloatingStyle)(menuFloating);
28
+ (0, hooks_1.useIsomorphicLayoutEffect)(() => {
29
+ if (typeof value === 'string') {
39
30
  setCurrentValue(value);
40
31
  }
41
32
  }, [value]);
42
- (0, react_1.useEffect)(() => {
43
- if (disabled) {
44
- setNeedMenu(false);
45
- }
46
- if (!disabled && menuElement && isPositioned) {
47
- menuElement.focus();
48
- }
49
- // @todo menuShown в зависимости или useCallback
50
- onMenuToggleRef.current?.({ opened: menuShown });
51
- }, [disabled, menuElement, isPositioned]);
52
- const openerBinding = {
53
- label,
54
- anchorRef: refs.setReference,
55
- openerRef,
56
- value: renderValue(currentValue),
57
- opened: menuShown,
58
- failed,
59
- disabled,
60
- menuFocused,
61
- onMouseDown: event => {
62
- if (!disabled) {
63
- !menuElement && event.preventDefault();
64
- setNeedMenu(a => !a);
65
- }
66
- },
67
- onKeyDown: e => {
68
- if (!disabled) {
69
- switch (e.code) {
70
- case 'Enter':
71
- case 'ArrowUp':
72
- case 'ArrowDown':
73
- setNeedMenu(true);
74
- break;
75
- }
33
+ const contextValue = {
34
+ selectProps: props,
35
+ currentValue,
36
+ setCurrentValue: (0, react_1.useCallback)(valueInit => {
37
+ let nextValue = valueInit;
38
+ if (typeof nextValue === 'function') {
39
+ nextValue = nextValue(currentValue);
76
40
  }
77
- },
78
- };
79
- const floatingStyle = (0, utils_3.useDropdownFloatingStyle)({ refs, ...floating });
80
- const menuProps = {
81
- ...dropdownProps,
82
- style: {
83
- ...floatingStyle,
84
- ...dropdownProps?.style,
85
- },
86
- menuRef: setMenuElement,
87
- value,
88
- loading,
89
- onFocus: () => {
90
- setMenuFocused(true);
91
- },
92
- onBlur: () => {
93
- setNeedMenu(false);
94
- setMenuFocused(false);
95
- },
96
- onKeyDown: event => {
97
- switch (event.code) {
98
- case 'ArrowUp':
99
- case 'ArrowDown':
100
- event.preventDefault(); // предотвращаем прокрутку страницы
101
- break;
102
- case 'Enter':
103
- case 'Escape':
104
- openerRef.current?.focus();
105
- break;
106
- case 'Tab':
107
- event.preventDefault(); // предотвращаем фокус на следующем элементе
108
- openerRef.current?.focus();
109
- break;
41
+ if (currentValue !== nextValue) {
42
+ setCurrentValue(nextValue);
43
+ onValueChange?.(nextValue);
110
44
  }
111
- },
112
- onItemSelect: item => {
113
- const nextValue = utils_2.DropdownItemUtils.getValue(item);
114
- setCurrentValue(nextValue);
115
- onValueChange?.(nextValue);
116
- setNeedMenu(false);
117
- openerRef.current?.focus();
118
- },
119
- onDismiss: () => {
120
- setNeedMenu(false);
121
- },
45
+ }, [currentValue, onValueChange]),
46
+ menuOpen,
47
+ setMenuOpen,
48
+ openerElement,
49
+ setOpenerElement: (0, react_1.useCallback)(element => {
50
+ setOpenerElement(element);
51
+ }, []),
52
+ anchorElement,
53
+ setAnchorElement: (0, react_1.useCallback)(element => {
54
+ setReference(element);
55
+ setAnchorElement(element);
56
+ }, [setReference]),
57
+ menuElement,
58
+ setMenuElement: (0, react_1.useCallback)(element => {
59
+ setFloating(element);
60
+ setMenuElement(element);
61
+ }, [setFloating]),
62
+ menuFloatingStyle,
122
63
  };
123
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(utils_1.SelectContext.Provider, { value: openerBinding, children: (0, react_1.isValidElement)(opener) && opener }), needMenu && ((0, jsx_runtime_1.jsx)(portal_1.Portal, { children: (0, jsx_runtime_1.jsx)(lifecycle_1.Lifecycle, { onMount: onMenuOpen, onUnmount: onMenuClose, children: (0, jsx_runtime_1.jsx)(menu_1.SelectMenu, { ...menuProps, children: children }) }) }))] }));
64
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsxs)(utils_1.SelectContext.Provider, { value: contextValue, children: [opener, menu] }) }));
124
65
  }
125
- Select.FieldBlock = block_1.SelectFieldBlock;
126
- Select.TextButton = button_1.SelectTextButton;
127
66
  //# sourceMappingURL=select.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/select/select.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/select/select.tsx"],"names":[],"mappings":"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"}
package/select/types.d.ts CHANGED
@@ -1,30 +1,22 @@
1
- import type { FocusEventHandler, HTMLAttributes, ReactElement, ReactNode, Ref } from 'react';
1
+ import type { CSSProperties, Dispatch, ReactElement, ReactNode, SetStateAction } from 'react';
2
2
  import type { DropdownProps } from '../dropdown';
3
- import type { DropdownItemElement } from '../dropdown-item/types';
4
3
  import type { FieldBlockStyle } from '../field-block';
5
4
  export interface SelectStyle extends FieldBlockStyle {
6
5
  '--dropdown-width'?: string | number;
7
6
  }
8
- export interface SelectOpenerBinding {
9
- label?: string;
10
- failed?: boolean;
11
- disabled?: boolean;
12
- value: ReactNode;
13
- opened: boolean;
14
- menuFocused: boolean;
15
- openerRef: Ref<HTMLElement | null>;
16
- anchorRef: Ref<HTMLElement | null>;
17
- onMouseDown: Required<HTMLAttributes<HTMLElement>>['onMouseDown'];
18
- onKeyDown: Required<HTMLAttributes<HTMLElement>>['onKeyDown'];
19
- }
20
- export interface SelectMenuProps extends DropdownProps {
21
- menuRef?: Ref<HTMLDivElement | null>;
22
- value?: ReactNode;
23
- children?: ReactNode;
24
- loading?: boolean;
25
- onBlur?: FocusEventHandler;
26
- onItemSelect?: (item: DropdownItemElement) => void;
27
- onDismiss?: VoidFunction;
7
+ export interface SelectContextValue {
8
+ selectProps: SelectProps;
9
+ currentValue: string;
10
+ setCurrentValue: Dispatch<SetStateAction<string>>;
11
+ menuOpen: boolean;
12
+ setMenuOpen: Dispatch<SetStateAction<boolean>>;
13
+ openerElement: HTMLElement | null;
14
+ setOpenerElement: (element: HTMLElement | null) => void;
15
+ anchorElement: HTMLElement | null;
16
+ setAnchorElement: (element: HTMLElement | null) => void;
17
+ menuElement: HTMLElement | null;
18
+ setMenuElement: (element: HTMLElement | null) => void;
19
+ menuFloatingStyle?: CSSProperties;
28
20
  }
29
21
  export interface SelectProps {
30
22
  /** Опции. */
@@ -51,6 +43,8 @@ export interface SelectProps {
51
43
  label?: string;
52
44
  /** Открывающий элемент. */
53
45
  opener?: ReactElement;
46
+ /** Элемент меню. */
47
+ menu?: ReactElement;
54
48
  /** Свойства компонента Dropdown. */
55
49
  dropdownProps?: Omit<DropdownProps, 'rootRef' | 'viewportRef'>;
56
50
  /** Сработает при открытии меню. */
package/select/utils.d.ts CHANGED
@@ -1,2 +1,3 @@
1
- import { SelectOpenerBinding } from './types';
2
- export declare const SelectContext: import("react").Context<SelectOpenerBinding>;
1
+ import type { SelectContextValue } from './types';
2
+ export declare const SELECT_CONTEXT_DEFAULT_VALUE: SelectContextValue;
3
+ export declare const SelectContext: import("react").Context<SelectContextValue>;
package/select/utils.js CHANGED
@@ -1,14 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SelectContext = void 0;
3
+ exports.SelectContext = exports.SELECT_CONTEXT_DEFAULT_VALUE = void 0;
4
4
  const react_1 = require("react");
5
- exports.SelectContext = (0, react_1.createContext)({
6
- value: '',
7
- opened: false,
8
- menuFocused: false,
9
- openerRef: (0, react_1.createRef)(),
10
- anchorRef: (0, react_1.createRef)(),
11
- onMouseDown: () => void 0,
12
- onKeyDown: () => void 0,
13
- });
5
+ exports.SELECT_CONTEXT_DEFAULT_VALUE = {
6
+ selectProps: {},
7
+ currentValue: '',
8
+ setCurrentValue: () => { },
9
+ menuOpen: false,
10
+ setMenuOpen: () => { },
11
+ openerElement: null,
12
+ setOpenerElement: () => { },
13
+ anchorElement: null,
14
+ setAnchorElement: () => { },
15
+ menuElement: null,
16
+ setMenuElement: () => { },
17
+ menuFloatingStyle: {},
18
+ };
19
+ exports.SelectContext = (0, react_1.createContext)(exports.SELECT_CONTEXT_DEFAULT_VALUE);
14
20
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/select/utils.ts"],"names":[],"mappings":";;;AAAA,iCAAiD;AAGpC,QAAA,aAAa,GAAG,IAAA,qBAAa,EAAsB;IAC9D,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,KAAK;IACb,WAAW,EAAE,KAAK;IAClB,SAAS,EAAE,IAAA,iBAAS,GAAE;IACtB,SAAS,EAAE,IAAA,iBAAS,GAAE;IACtB,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC;IACzB,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC;CACxB,CAAC,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/select/utils.ts"],"names":[],"mappings":";;;AACA,iCAAsC;AAEzB,QAAA,4BAA4B,GAAuB;IAC9D,WAAW,EAAE,EAAE;IAEf,YAAY,EAAE,EAAE;IAChB,eAAe,EAAE,GAAG,EAAE,GAAE,CAAC;IAEzB,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC;IAErB,aAAa,EAAE,IAAI;IACnB,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;IAE1B,aAAa,EAAE,IAAI;IACnB,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;IAE1B,WAAW,EAAE,IAAI;IACjB,cAAc,EAAE,GAAG,EAAE,GAAE,CAAC;IAExB,iBAAiB,EAAE,EAAE;CACtB,CAAC;AAEW,QAAA,aAAa,GAAG,IAAA,qBAAa,EAAqB,oCAA4B,CAAC,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export type { SidePageProps } from './types';
2
2
  export { SidePage } from './side-page';
3
- export { SidePageHeader, SidePageBody, SidePageFooter } from './slots';
3
+ export { SidePageBody } from './side-page-body';
4
+ export { getResponsiveSidePageProps, useSidePageTransition } from './utils';
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SidePageFooter = exports.SidePageBody = exports.SidePageHeader = exports.SidePage = void 0;
3
+ exports.useSidePageTransition = exports.getResponsiveSidePageProps = exports.SidePageBody = exports.SidePage = void 0;
4
4
  var side_page_1 = require("./side-page");
5
5
  Object.defineProperty(exports, "SidePage", { enumerable: true, get: function () { return side_page_1.SidePage; } });
6
- var slots_1 = require("./slots");
7
- Object.defineProperty(exports, "SidePageHeader", { enumerable: true, get: function () { return slots_1.SidePageHeader; } });
8
- Object.defineProperty(exports, "SidePageBody", { enumerable: true, get: function () { return slots_1.SidePageBody; } });
9
- Object.defineProperty(exports, "SidePageFooter", { enumerable: true, get: function () { return slots_1.SidePageFooter; } });
6
+ var side_page_body_1 = require("./side-page-body");
7
+ Object.defineProperty(exports, "SidePageBody", { enumerable: true, get: function () { return side_page_body_1.SidePageBody; } });
8
+ var utils_1 = require("./utils");
9
+ Object.defineProperty(exports, "getResponsiveSidePageProps", { enumerable: true, get: function () { return utils_1.getResponsiveSidePageProps; } });
10
+ Object.defineProperty(exports, "useSidePageTransition", { enumerable: true, get: function () { return utils_1.useSidePageTransition; } });
10
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/side-page/index.ts"],"names":[],"mappings":";;;AACA,yCAAuC;AAA9B,qGAAA,QAAQ,OAAA;AACjB,iCAAuE;AAA9D,uGAAA,cAAc,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,uGAAA,cAAc,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/side-page/index.ts"],"names":[],"mappings":";;;AACA,yCAAuC;AAA9B,qGAAA,QAAQ,OAAA;AACjB,mDAAgD;AAAvC,8GAAA,YAAY,OAAA;AACrB,iCAA4E;AAAnE,mHAAA,0BAA0B,OAAA;AAAE,8GAAA,qBAAqB,OAAA"}
@@ -0,0 +1,7 @@
1
+ import { SidePageBodyProps } from './types';
2
+ /**
3
+ * Основной контент SidePage.
4
+ * @param props Свойства.
5
+ * @return Элемент.
6
+ */
7
+ export declare function SidePageBody({ rootRef, children, className, withScrollDisable, scrollDisableOptions, 'data-testid': testId, ...restProps }: SidePageBodyProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SidePageBody = SidePageBody;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const react_1 = require("react");
9
+ const page_scroll_lock_1 = require("../_internal/page-scroll-lock");
10
+ const helpers_1 = require("../helpers");
11
+ const classnames_1 = __importDefault(require("classnames"));
12
+ const side_page_body_m_scss_1 = __importDefault(require("./side-page-body.m.scss"));
13
+ /**
14
+ * Основной контент SidePage.
15
+ * @param props Свойства.
16
+ * @return Элемент.
17
+ */
18
+ function SidePageBody({ rootRef, children, className, withScrollDisable, scrollDisableOptions, 'data-testid': testId, ...restProps }) {
19
+ const innerRootRef = (0, react_1.useRef)(null);
20
+ const mergedRef = (0, react_1.useMemo)(() => (0, helpers_1.mergeRefs)([rootRef, innerRootRef]), [rootRef, innerRootRef]);
21
+ (0, page_scroll_lock_1.usePageScrollLock)(innerRootRef, {
22
+ lockEnabled: withScrollDisable,
23
+ ...scrollDisableOptions,
24
+ });
25
+ return ((0, jsx_runtime_1.jsx)("div", { ref: mergedRef, className: (0, classnames_1.default)(side_page_body_m_scss_1.default.body, className), ...restProps, "data-testid": testId, children: children }));
26
+ }
27
+ //# sourceMappingURL=side-page-body.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"side-page-body.js","sourceRoot":"","sources":["../../src/side-page/side-page-body.tsx"],"names":[],"mappings":";;;;;AAYA,oCA2BC;;AAtCD,iCAAwC;AACxC,oEAAkE;AAClE,wCAAuC;AACvC,4DAAoC;AACpC,oFAA6C;AAE7C;;;;GAIG;AACH,SAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,QAAQ,EACR,SAAS,EACT,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EAAE,MAAM,EACrB,GAAG,SAAS,EACM;IAClB,MAAM,YAAY,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,IAAA,mBAAS,EAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAE7F,IAAA,oCAAiB,EAAC,YAAY,EAAE;QAC9B,WAAW,EAAE,iBAAiB;QAC9B,GAAG,oBAAoB;KACxB,CAAC,CAAC;IAEH,OAAO,CACL,gCACE,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,IAAA,oBAAU,EAAC,+BAAM,CAAC,IAAI,EAAE,SAAS,CAAC,KACzC,SAAS,iBACA,MAAM,YAElB,QAAQ,GACL,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ .body {
2
+ flex-grow: 1;
3
+ overflow-y: auto;
4
+ }
@@ -0,0 +1,9 @@
1
+ @use '../shadows';
2
+
3
+ @mixin size-s {
4
+ --side-page-max-width: 488px;
5
+ }
6
+
7
+ @mixin size-m {
8
+ --side-page-max-width: 968px;
9
+ }
@@ -1,13 +1,7 @@
1
1
  import type { SidePageProps } from './types';
2
- import { SidePageBody, SidePageFooter, SidePageHeader } from './slots';
3
2
  /**
4
3
  * Модальное окно, прикрепленное к правой стороне экрана.
5
4
  * @param props Свойства.
6
5
  * @return Элемент.
7
6
  */
8
- export declare function SidePage({ shown, withTransitions, onEnter, onEntering, onEntered, onExit, onExiting, onExited, ...restProps }: SidePageProps): import("react/jsx-runtime").JSX.Element;
9
- export declare namespace SidePage {
10
- var Header: typeof SidePageHeader;
11
- var Body: typeof SidePageBody;
12
- var Footer: typeof SidePageFooter;
13
- }
7
+ export declare function SidePage({ size, className, children, onClose, overlayProps, 'data-testid': testId, ...restProps }: SidePageProps): import("react/jsx-runtime").JSX.Element;
@@ -5,53 +5,26 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.SidePage = SidePage;
7
7
  const jsx_runtime_1 = require("react/jsx-runtime");
8
- const react_1 = require("react");
9
- const define_slots_1 = require("../helpers/define-slots");
10
- const page_scroll_lock_1 = require("../_internal/page-scroll-lock");
11
- const slots_1 = require("./slots");
12
- const CSSTransition_1 = __importDefault(require("react-transition-group/CSSTransition"));
13
8
  const modal_overlay_1 = require("../modal-overlay");
14
9
  const utils_1 = require("../modal-overlay/utils");
15
10
  const bind_1 = __importDefault(require("classnames/bind"));
16
11
  const side_page_m_scss_1 = __importDefault(require("./side-page.m.scss"));
17
12
  const cx = bind_1.default.bind(side_page_m_scss_1.default);
18
- const transitionClasses = {
19
- enter: cx('enter'),
20
- enterActive: cx('enter-active'),
21
- exit: cx('exit'),
22
- exitActive: cx('exit-active'),
23
- };
24
13
  /**
25
14
  * Модальное окно, прикрепленное к правой стороне экрана.
26
15
  * @param props Свойства.
27
16
  * @return Элемент.
28
17
  */
29
- function SidePage({ shown, withTransitions, onEnter, onEntering, onEntered, onExit, onExiting, onExited, ...restProps }) {
30
- const transitionDuration = withTransitions ? 300 : 0;
31
- return ((0, jsx_runtime_1.jsx)(CSSTransition_1.default, { in: shown, timeout: transitionDuration, classNames: transitionClasses, unmountOnExit: true, onEntering: onEntering, onEnter: onEnter, onEntered: onEntered, onExit: onExit, onExiting: onExiting, onExited: onExited, children: transitionStatus => ((0, jsx_runtime_1.jsx)(SidePageInner, { ...restProps, transitionStatus, transitionDuration })) }));
32
- }
33
- /**
34
- * Фиктивный компонент, необходимый для того чтобы задействовать хук блокировки прокрутки внутри CSSTransition.
35
- * @param props Свойства.
36
- * @return Элемент.
37
- */
38
- function SidePageInner({ size = 'm', children, onClose, withScrollDisable = false, scrollDisableOptions, transitionStatus, transitionDuration, }) {
39
- const overlayClickBind = (0, utils_1.useExactClick)(onClose);
40
- const ref = (0, react_1.useRef)(null);
41
- (0, page_scroll_lock_1.usePageScrollLock)(ref, { lockEnabled: withScrollDisable, ...scrollDisableOptions });
42
- const { header, body, footer } = (0, define_slots_1.defineSlots)(children, {
43
- header: SidePage.Header,
44
- body: SidePage.Body,
45
- footer: SidePage.Footer,
18
+ function SidePage({ size = 'm', className, children, onClose, overlayProps, 'data-testid': testId = 'side-page', ...restProps }) {
19
+ const overlayClickProps = (0, utils_1.useExactClick)(onClose, {
20
+ onMouseDown: overlayProps?.onMouseDown,
21
+ onMouseUp: overlayProps?.onMouseUp,
46
22
  });
47
- const overlayProps = {
48
- style: { '--transition-duration': `${transitionDuration}ms` },
49
- // условие нужно чтобы не было моментального закрытия на double click
50
- ...(transitionStatus !== 'entering' && overlayClickBind),
51
- };
52
- return ((0, jsx_runtime_1.jsx)(modal_overlay_1.ModalOverlay, { ...overlayProps, children: (0, jsx_runtime_1.jsxs)("div", { className: cx('side-page', `size-${size}`), "data-testid": 'side-page', children: [header, (0, jsx_runtime_1.jsx)("div", { ref: ref, className: cx('body'), children: body }), footer] }) }));
23
+ const overlayClassName = cx('overlay',
24
+ // ВАЖНО: классы размера и скруглений кидаем на ModalOverlay для того чтобы понизить специфичность
25
+ // а также потому что надо регулировать отступы от края
26
+ size !== 'unset' && `size-${size}`, overlayProps?.className);
27
+ const sidePageClassName = cx('side-page', className);
28
+ return ((0, jsx_runtime_1.jsx)(modal_overlay_1.ModalOverlay, { ...overlayProps, className: overlayClassName, ...overlayClickProps, children: (0, jsx_runtime_1.jsx)("div", { className: sidePageClassName, "data-testid": testId, ...restProps, children: children }) }));
53
29
  }
54
- SidePage.Header = slots_1.SidePageHeader;
55
- SidePage.Body = slots_1.SidePageBody;
56
- SidePage.Footer = slots_1.SidePageFooter;
57
30
  //# sourceMappingURL=side-page.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"side-page.js","sourceRoot":"","sources":["../../src/side-page/side-page.tsx"],"names":[],"mappings":";;;;;AAyBA,4BA+BC;;AAvDD,iCAA8C;AAC9C,0DAAsD;AACtD,oEAAkE;AAClE,mCAAuE;AACvE,yFAAiE;AACjE,oDAAmE;AACnE,kDAAuD;AACvD,2DAAyC;AACzC,0EAAwC;AAExC,MAAM,EAAE,GAAG,cAAU,CAAC,IAAI,CAAC,0BAAM,CAAC,CAAC;AAEnC,MAAM,iBAAiB,GAAG;IACxB,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC;IAClB,WAAW,EAAE,EAAE,CAAC,cAAc,CAAC;IAC/B,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC;IAChB,UAAU,EAAE,EAAE,CAAC,aAAa,CAAC;CACrB,CAAC;AAEX;;;;GAIG;AACH,SAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,eAAe,EACf,OAAO,EACP,UAAU,EACV,SAAS,EACT,MAAM,EACN,SAAS,EACT,QAAQ,EACR,GAAG,SAAS,EACE;IACd,MAAM,kBAAkB,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAErD,OAAO,CACL,uBAAC,uBAAa,IACZ,EAAE,EAAE,KAAK,EACT,OAAO,EAAE,kBAAkB,EAC3B,UAAU,EAAE,iBAAiB,EAC7B,aAAa,QACb,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,YAEjB,gBAAgB,CAAC,EAAE,CAAC,CACnB,uBAAC,aAAa,OAAK,SAAS,EAAQ,gBAAgB,EAAE,kBAAkB,GAAM,CAC/E,GACa,CACjB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,EACrB,IAAI,GAAG,GAAG,EACV,QAAQ,EACR,OAAO,EACP,iBAAiB,GAAG,KAAK,EACzB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,GAInB;IACC,MAAM,gBAAgB,GAAG,IAAA,qBAAa,EAAC,OAAO,CAAC,CAAC;IAEhD,MAAM,GAAG,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAEzC,IAAA,oCAAiB,EAAC,GAAG,EAAE,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,oBAAoB,EAAE,CAAC,CAAC;IAEpF,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAA,0BAAW,EAAC,QAAQ,EAAE;QACrD,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;KACxB,CAAC,CAAC;IAEH,MAAM,YAAY,GAAsB;QACtC,KAAK,EAAE,EAAE,uBAAuB,EAAE,GAAG,kBAAkB,IAAI,EAAmB;QAE9E,qEAAqE;QACrE,GAAG,CAAC,gBAAgB,KAAK,UAAU,IAAI,gBAAgB,CAAC;KACzD,CAAC;IAEF,OAAO,CACL,uBAAC,4BAAY,OAAK,YAAY,YAC5B,iCAAK,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,QAAQ,IAAI,EAAE,CAAC,iBAAc,WAAW,aACrE,MAAM,EACP,gCAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,YACjC,IAAI,GACD,EACL,MAAM,IACH,GACO,CAChB,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,MAAM,GAAG,sBAAc,CAAC;AACjC,QAAQ,CAAC,IAAI,GAAG,oBAAY,CAAC;AAC7B,QAAQ,CAAC,MAAM,GAAG,sBAAc,CAAC"}
1
+ {"version":3,"file":"side-page.js","sourceRoot":"","sources":["../../src/side-page/side-page.tsx"],"names":[],"mappings":";;;;;AAaA,4BA+BC;;AA3CD,oDAAgD;AAChD,kDAAuD;AACvD,2DAAyC;AACzC,0EAAwC;AAExC,MAAM,EAAE,GAAG,cAAU,CAAC,IAAI,CAAC,0BAAM,CAAC,CAAC;AAEnC;;;;GAIG;AACH,SAAgB,QAAQ,CAAC,EACvB,IAAI,GAAG,GAAG,EACV,SAAS,EACT,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,aAAa,EAAE,MAAM,GAAG,WAAW,EACnC,GAAG,SAAS,EACE;IACd,MAAM,iBAAiB,GAAG,IAAA,qBAAa,EAAC,OAAO,EAAE;QAC/C,WAAW,EAAE,YAAY,EAAE,WAAW;QACtC,SAAS,EAAE,YAAY,EAAE,SAAS;KACnC,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,EAAE,CACzB,SAAS;IACT,kGAAkG;IAClG,uDAAuD;IACvD,IAAI,KAAK,OAAO,IAAI,QAAQ,IAAI,EAAE,EAClC,YAAY,EAAE,SAAS,CACxB,CAAC;IAEF,MAAM,iBAAiB,GAAG,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAErD,OAAO,CACL,uBAAC,4BAAY,OAAK,YAAY,EAAE,SAAS,EAAE,gBAAgB,KAAM,iBAAiB,YAChF,gCAAK,SAAS,EAAE,iBAAiB,iBAAe,MAAM,KAAM,SAAS,YAClE,QAAQ,GACL,GACO,CAChB,CAAC;AACJ,CAAC"}