@sima-land/ui-nucleons 45.0.0-alpha.21 → 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.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sima-land/ui-nucleons",
3
3
  "type": "commonjs",
4
- "version": "45.0.0-alpha.21",
4
+ "version": "45.0.0-alpha.22",
5
5
  "repository": "ssh://git@github.com:sima-land/ui-nucleons.git",
6
6
  "author": "www.sima-land.ru team",
7
7
  "license": "Apache-2.0",
@@ -34,7 +34,7 @@
34
34
  "focus-trap": "^7.2.0",
35
35
  "overlayscrollbars": "^2.8.0",
36
36
  "overlayscrollbars-react": "^0.5.6",
37
- "react-transition-group": "^4.4.2",
37
+ "react-transition-state": "^2.1.2",
38
38
  "redux": "^4.2.0"
39
39
  },
40
40
  "devDependencies": {
@@ -51,7 +51,6 @@
51
51
  "@types/overlayscrollbars": "^1.12.1",
52
52
  "@types/react": "^18.2.21",
53
53
  "@types/react-dom": "^18.2.7",
54
- "@types/react-transition-group": "^4.4.4",
55
54
  "babel-jest": "^27.5.1",
56
55
  "copyfiles": "^2.4.1",
57
56
  "eslint": "^9.8.0",
@@ -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"}
@@ -1,7 +1,5 @@
1
- @use '../colors';
2
1
  @use '../breakpoints';
3
- @use '../top-bar/top-bar-util';
4
- @use '../bottom-bar/bottom-bar-util';
2
+ @use './side-page-util';
5
3
  @use '../modal-overlay/modal-overlay-util';
6
4
 
7
5
  .side-page {
@@ -13,77 +11,13 @@
13
11
  display: flex;
14
12
  flex-direction: column;
15
13
  background: #fff;
16
- @include breakpoints.down('xs') {
17
- width: 100%;
18
- .header {
19
- @include top-bar-util.size-m;
20
- }
21
- .footer {
22
- @include bottom-bar-util.size-m;
23
- }
24
- }
25
- @include breakpoints.up('xs') {
26
- &.size-s {
27
- max-width: 488px;
28
- }
29
- &.size-m {
30
- max-width: 968px;
31
- }
32
- .header {
33
- @include top-bar-util.size-xl;
34
- }
35
- .footer {
36
- @include bottom-bar-util.size-l;
37
- }
38
- }
14
+ max-width: var(--side-page-max-width, auto);
39
15
  }
40
16
 
41
- .header {
42
- flex-shrink: 0;
43
- width: 100%;
44
- }
45
-
46
- .body {
47
- flex-grow: 1;
48
- overflow-y: auto;
49
- }
50
-
51
- .footer {
52
- flex-shrink: 0;
53
- width: 100%;
54
- }
55
-
56
- // transitions
57
- .enter {
58
- background-color: transparent;
59
- .side-page {
60
- transform: translateX(100%);
61
- }
62
- }
63
-
64
- .enter-active {
65
- transition: background-color var(--transition-duration) ease-in-out;
66
- background-color: modal-overlay-util.$overlay-color;
67
- overflow: hidden;
68
- .side-page {
69
- transition: transform var(--transition-duration) ease-in-out;
70
- transform: translateX(0);
71
- }
72
- }
73
-
74
- .exit {
75
- background-color: modal-overlay-util.$overlay-color;
76
- .side-page {
77
- transform: translateX(0);
78
- }
17
+ .size-s {
18
+ @include side-page-util.size-s;
79
19
  }
80
20
 
81
- .exit-active {
82
- transition: background-color var(--transition-duration) ease-in-out;
83
- background-color: transparent;
84
- overflow: hidden;
85
- .side-page {
86
- transition: transform var(--transition-duration) ease-in-out;
87
- transform: translateX(100%);
88
- }
21
+ .size-m {
22
+ @include side-page-util.size-m;
89
23
  }
@@ -1,27 +1,15 @@
1
- import type { ReactNode } from 'react';
2
- import type { CSSTransitionProps } from 'react-transition-group/CSSTransition';
1
+ import type { HTMLAttributes, Ref } from 'react';
2
+ import type { WithTestId } from '../types';
3
+ import type { ModalOverlayProps } from '../modal-overlay';
3
4
  import type { WithPageScrollLock } from '../_internal/page-scroll-lock';
4
- export interface SidePageProps extends WithPageScrollLock {
5
- /** Нужно ли показать компонент. */
6
- shown?: boolean;
7
- /** Нужно ли использовать анимации при открытии/закрытии. */
8
- withTransitions?: boolean;
5
+ export interface SidePageProps extends HTMLAttributes<HTMLDivElement>, WithTestId {
9
6
  /** Ширина. */
10
- size?: 's' | 'm';
11
- /** Содержимое. */
12
- children?: ReactNode;
13
- /** Сработает при закрытии. */
7
+ size?: 's' | 'm' | 'unset';
8
+ /** Будет вызвана при закрытии. */
14
9
  onClose?: () => void;
15
- /** Обработчик "onEntering" для CSSTransition. */
16
- onEntering?: CSSTransitionProps['onEntering'];
17
- /** Обработчик "onEnter" для CSSTransition. */
18
- onEnter?: CSSTransitionProps['onEnter'];
19
- /** Обработчик "onEntered" для CSSTransition. */
20
- onEntered?: CSSTransitionProps['onEntered'];
21
- /** Обработчик "onExiting" для CSSTransition. */
22
- onExiting?: CSSTransitionProps['onExiting'];
23
- /** Обработчик "onExited" для CSSTransition. */
24
- onExited?: CSSTransitionProps['onExited'];
25
- /** Обработчик "onExit" для CSSTransition. */
26
- onExit?: CSSTransitionProps['onExit'];
10
+ /** Свойства компонента ModalOverlay. */
11
+ overlayProps?: ModalOverlayProps;
12
+ }
13
+ export interface SidePageBodyProps extends HTMLAttributes<HTMLDivElement>, WithTestId, WithPageScrollLock {
14
+ rootRef?: Ref<HTMLDivElement>;
27
15
  }
@@ -0,0 +1,26 @@
1
+ import type { SidePageProps } from './types';
2
+ import { type TransitionOptions, type TransitionState } from 'react-transition-state';
3
+ /**
4
+ * Вернет свойства SidePage для формирования отзывчивого дизайна по гайдам.
5
+ * @param props Свойства SidePage.
6
+ * Неиспользуемые свойства будут выведены в результат без изменений.
7
+ * @param props.size Размер на desktop-разрешениях.
8
+ * @return Свойства SidePage.
9
+ */
10
+ export declare function getResponsiveSidePageProps(props: SidePageProps): SidePageProps;
11
+ /**
12
+ * Хук для формирования перехода (плавного появления/исчезания) SidePage.
13
+ * @param config Конфиг.
14
+ * @param config.extraProps Свойства SidePage и свойства состояния (shown).
15
+ * Неиспользуемые свойства будут выведены в результат без изменений.
16
+ * @return Состояние перехода и Свойства SidePage.
17
+ */
18
+ export declare function useSidePageTransition({ shown, timeout, onStateChange, extraProps, }: {
19
+ shown?: boolean;
20
+ timeout?: number;
21
+ onStateChange?: TransitionOptions['onStateChange'];
22
+ extraProps?: SidePageProps;
23
+ }): {
24
+ state: TransitionState;
25
+ sidePageProps: SidePageProps;
26
+ };
@@ -0,0 +1,69 @@
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.getResponsiveSidePageProps = getResponsiveSidePageProps;
7
+ exports.useSidePageTransition = useSidePageTransition;
8
+ const hooks_1 = require("../hooks");
9
+ const react_transition_state_1 = require("react-transition-state");
10
+ const classnames_1 = __importDefault(require("classnames"));
11
+ const utils_m_scss_1 = __importDefault(require("./utils.m.scss"));
12
+ /**
13
+ * Вернет свойства SidePage для формирования отзывчивого дизайна по гайдам.
14
+ * @param props Свойства SidePage.
15
+ * Неиспользуемые свойства будут выведены в результат без изменений.
16
+ * @param props.size Размер на desktop-разрешениях.
17
+ * @return Свойства SidePage.
18
+ */
19
+ function getResponsiveSidePageProps(props) {
20
+ const { size, overlayProps, ...restProps } = props;
21
+ return {
22
+ ...restProps,
23
+ size: 'unset',
24
+ // ВАЖНО: накидываем класс именно на ModalOverlay так как размер влияет и на него в том числе
25
+ overlayProps: {
26
+ ...overlayProps,
27
+ className: (0, classnames_1.default)(utils_m_scss_1.default[`size-${size}`], overlayProps?.className),
28
+ },
29
+ };
30
+ }
31
+ /**
32
+ * Хук для формирования перехода (плавного появления/исчезания) SidePage.
33
+ * @param config Конфиг.
34
+ * @param config.extraProps Свойства SidePage и свойства состояния (shown).
35
+ * Неиспользуемые свойства будут выведены в результат без изменений.
36
+ * @return Состояние перехода и Свойства SidePage.
37
+ */
38
+ function useSidePageTransition({ shown, timeout = 300, onStateChange, extraProps, }) {
39
+ const [state, toggle] = (0, react_transition_state_1.useTransition)({
40
+ initialEntered: shown,
41
+ preEnter: true,
42
+ mountOnEnter: true,
43
+ unmountOnExit: true,
44
+ timeout,
45
+ onStateChange,
46
+ });
47
+ (0, hooks_1.useIsomorphicLayoutEffect)(() => {
48
+ toggle(shown);
49
+ }, [shown]);
50
+ return {
51
+ state,
52
+ sidePageProps: {
53
+ ...extraProps,
54
+ className: (0, classnames_1.default)(extraProps?.className, utils_m_scss_1.default['side-page']),
55
+ onClose: state.status === 'entering' ? undefined : extraProps?.onClose,
56
+ overlayProps: {
57
+ ...extraProps?.overlayProps,
58
+ className: (0, classnames_1.default)(extraProps?.overlayProps?.className, utils_m_scss_1.default[state.status]),
59
+ style: timeout !== 300
60
+ ? {
61
+ '--side-page-transition-duration': `${timeout}ms`,
62
+ ...extraProps?.overlayProps?.style,
63
+ }
64
+ : extraProps?.overlayProps?.style,
65
+ },
66
+ },
67
+ };
68
+ }
69
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/side-page/utils.ts"],"names":[],"mappings":";;;;;AAkBA,gEAeC;AASD,sDAoDC;AA5FD,oCAAqD;AACrD,mEAIgC;AAChC,4DAAoC;AACpC,kEAAoC;AAEpC;;;;;;GAMG;AACH,SAAgB,0BAA0B,CAAC,KAAoB;IAC7D,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC;IAEnD,OAAO;QACL,GAAG,SAAS;QAEZ,IAAI,EAAE,OAAO;QAEb,6FAA6F;QAC7F,YAAY,EAAE;YACZ,GAAG,YAAY;YAEf,SAAS,EAAE,IAAA,oBAAU,EAAC,sBAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC;SACvE;KACF,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,qBAAqB,CAAC,EACpC,KAAK,EACL,OAAO,GAAG,GAAG,EACb,aAAa,EACb,UAAU,GAMX;IAIC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,IAAA,sCAAa,EAAC;QACpC,cAAc,EAAE,KAAK;QACrB,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,IAAI;QACnB,OAAO;QACP,aAAa;KACd,CAAC,CAAC;IAEH,IAAA,iCAAyB,EAAC,GAAG,EAAE;QAC7B,MAAM,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO;QACL,KAAK;QAEL,aAAa,EAAE;YACb,GAAG,UAAU;YAEb,SAAS,EAAE,IAAA,oBAAU,EAAC,UAAU,EAAE,SAAS,EAAE,sBAAM,CAAC,WAAW,CAAC,CAAC;YAEjE,OAAO,EAAE,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO;YAEtE,YAAY,EAAE;gBACZ,GAAG,UAAU,EAAE,YAAY;gBAE3B,SAAS,EAAE,IAAA,oBAAU,EAAC,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,sBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAEhF,KAAK,EACH,OAAO,KAAK,GAAG;oBACb,CAAC,CAAE;wBACC,iCAAiC,EAAE,GAAG,OAAO,IAAI;wBACjD,GAAG,UAAU,EAAE,YAAY,EAAE,KAAK;qBACjB;oBACrB,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,KAAK;aACtC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,67 @@
1
+ @use '../breakpoints';
2
+ @use './side-page-util';
3
+ @use '../top-bar/top-bar-util';
4
+ @use '../bottom-bar/bottom-bar-util';
5
+ @use '../modal-overlay/modal-overlay-util';
6
+
7
+ @include breakpoints.lt('xs') {
8
+ .size-s {
9
+ @include top-bar-util.size-m;
10
+ @include bottom-bar-util.size-m;
11
+ }
12
+ .size-m {
13
+ @include top-bar-util.size-m;
14
+ @include bottom-bar-util.size-m;
15
+ }
16
+ }
17
+
18
+ @include breakpoints.gte('xs') {
19
+ .size-s {
20
+ @include side-page-util.size-s;
21
+ @include top-bar-util.size-xl;
22
+ @include bottom-bar-util.size-l;
23
+ }
24
+ .size-m {
25
+ @include side-page-util.size-m;
26
+ @include top-bar-util.size-xl;
27
+ @include bottom-bar-util.size-l;
28
+ }
29
+ }
30
+
31
+ // transitions
32
+
33
+ /* stylelint-disable-next-line selector-class-pattern */
34
+ .preEnter {
35
+ background-color: transparent;
36
+ .side-page {
37
+ transform: translateX(100%);
38
+ }
39
+ }
40
+
41
+ .entering {
42
+ transition: background-color var(--side-page-transition-duration, 300ms) ease-in-out;
43
+ background-color: modal-overlay-util.$overlay-color;
44
+ overflow: hidden;
45
+ .side-page {
46
+ transition: transform var(--side-page-transition-duration, 300ms) ease-in-out;
47
+ transform: translateX(0);
48
+ }
49
+ }
50
+
51
+ /* stylelint-disable-next-line selector-class-pattern */
52
+ .preExit {
53
+ background-color: modal-overlay-util.$overlay-color;
54
+ .side-page {
55
+ transform: translateX(0);
56
+ }
57
+ }
58
+
59
+ .exiting {
60
+ transition: background-color var(--side-page-transition-duration, 300ms) ease-in-out;
61
+ background-color: transparent;
62
+ overflow: hidden;
63
+ .side-page {
64
+ transition: transform var(--side-page-transition-duration, 300ms) ease-in-out;
65
+ transform: translateX(100%);
66
+ }
67
+ }
@@ -1,26 +0,0 @@
1
- import { ReactNode } from 'react';
2
- import { TopBarProps } from '../top-bar';
3
- import { BottomBarProps } from '../bottom-bar';
4
- /**
5
- * Шапка SidePage.
6
- * @param props Свойства.
7
- * @return Элемент.
8
- */
9
- export declare function SidePageHeader({ onBack, onClose, buttons, ...topBarProps }: TopBarProps & {
10
- onBack?: () => void;
11
- onClose?: () => void;
12
- }): import("react/jsx-runtime").JSX.Element;
13
- /**
14
- * Основной контент SidePage.
15
- * @param props Свойства.
16
- * @return Элемент.
17
- */
18
- export declare function SidePageBody({ children }: {
19
- children?: ReactNode;
20
- }): import("react/jsx-runtime").JSX.Element;
21
- /**
22
- * Подвал SidePage.
23
- * @param props Свойства.
24
- * @return Элемент.
25
- */
26
- export declare function SidePageFooter({ ...props }: BottomBarProps): import("react/jsx-runtime").JSX.Element;
@@ -1,39 +0,0 @@
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.SidePageHeader = SidePageHeader;
7
- exports.SidePageBody = SidePageBody;
8
- exports.SidePageFooter = SidePageFooter;
9
- const jsx_runtime_1 = require("react/jsx-runtime");
10
- const top_bar_1 = require("../top-bar");
11
- const bottom_bar_1 = require("../bottom-bar");
12
- const utils_1 = require("../top-bar/utils");
13
- const classnames_1 = __importDefault(require("classnames"));
14
- const side_page_m_scss_1 = __importDefault(require("./side-page.m.scss"));
15
- /**
16
- * Шапка SidePage.
17
- * @param props Свойства.
18
- * @return Элемент.
19
- */
20
- function SidePageHeader({ onBack, onClose, buttons, ...topBarProps }) {
21
- return ((0, jsx_runtime_1.jsx)(top_bar_1.TopBar, { ...topBarProps, size: 'unset', className: side_page_m_scss_1.default.header, buttons: (0, utils_1.navigationButtons)({ buttons, onBack, onClose }) }));
22
- }
23
- /**
24
- * Основной контент SidePage.
25
- * @param props Свойства.
26
- * @return Элемент.
27
- */
28
- function SidePageBody({ children }) {
29
- return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children });
30
- }
31
- /**
32
- * Подвал SidePage.
33
- * @param props Свойства.
34
- * @return Элемент.
35
- */
36
- function SidePageFooter({ ...props }) {
37
- return (0, jsx_runtime_1.jsx)(bottom_bar_1.BottomBar, { ...props, size: 'unset', className: (0, classnames_1.default)(side_page_m_scss_1.default.footer) });
38
- }
39
- //# sourceMappingURL=slots.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"slots.js","sourceRoot":"","sources":["../../src/side-page/slots.tsx"],"names":[],"mappings":";;;;;AAYA,wCAiBC;AAOD,oCAEC;AAOD,wCAEC;;AA9CD,wCAAiD;AACjD,8CAA0D;AAC1D,4CAAqD;AACrD,4DAAoC;AACpC,0EAAwC;AAExC;;;;GAIG;AACH,SAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,OAAO,EACP,OAAO,EACP,GAAG,WAAW,EAIf;IACC,OAAO,CACL,uBAAC,gBAAM,OACD,WAAW,EACf,IAAI,EAAC,OAAO,EACZ,SAAS,EAAE,0BAAM,CAAC,MAAM,EACxB,OAAO,EAAE,IAAA,yBAAiB,EAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GACxD,CACH,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAC,EAAE,QAAQ,EAA4B;IACjE,OAAO,2DAAG,QAAQ,GAAI,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,EAAE,GAAG,KAAK,EAAkB;IACzD,OAAO,uBAAC,sBAAS,OAAK,KAAK,EAAE,IAAI,EAAC,OAAO,EAAC,SAAS,EAAE,IAAA,oBAAU,EAAC,0BAAM,CAAC,MAAM,CAAC,GAAI,CAAC;AACrF,CAAC"}