@cloud-ru/ds-drawer 1.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.
Files changed (140) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE +201 -0
  3. package/README.md +480 -0
  4. package/dist/cjs/components/Drawer/Drawer.d.ts +6 -0
  5. package/dist/cjs/components/Drawer/Drawer.js +15 -0
  6. package/dist/cjs/components/Drawer/constants.d.ts +1 -0
  7. package/dist/cjs/components/Drawer/constants.js +4 -0
  8. package/dist/cjs/components/Drawer/index.d.ts +2 -0
  9. package/dist/cjs/components/Drawer/index.js +18 -0
  10. package/dist/cjs/components/Drawer/styles.module.css +19 -0
  11. package/dist/cjs/components/Drawer/types.d.ts +35 -0
  12. package/dist/cjs/components/Drawer/types.js +2 -0
  13. package/dist/cjs/components/DrawerCustom/DrawerCustom.d.ts +15 -0
  14. package/dist/cjs/components/DrawerCustom/DrawerCustom.js +76 -0
  15. package/dist/cjs/components/DrawerCustom/constants.d.ts +4 -0
  16. package/dist/cjs/components/DrawerCustom/constants.js +17 -0
  17. package/dist/cjs/components/DrawerCustom/hooks/index.d.ts +1 -0
  18. package/dist/cjs/components/DrawerCustom/hooks/index.js +17 -0
  19. package/dist/cjs/components/DrawerCustom/hooks/useDrawerFocusTrap.d.ts +9 -0
  20. package/dist/cjs/components/DrawerCustom/hooks/useDrawerFocusTrap.js +83 -0
  21. package/dist/cjs/components/DrawerCustom/hooks/useDrawerResize.d.ts +15 -0
  22. package/dist/cjs/components/DrawerCustom/hooks/useDrawerResize.js +50 -0
  23. package/dist/cjs/components/DrawerCustom/index.d.ts +2 -0
  24. package/dist/cjs/components/DrawerCustom/index.js +17 -0
  25. package/dist/cjs/components/DrawerCustom/motion.css +93 -0
  26. package/dist/cjs/components/DrawerCustom/styles.module.css +491 -0
  27. package/dist/cjs/components/DrawerCustom/types.d.ts +71 -0
  28. package/dist/cjs/components/DrawerCustom/types.js +2 -0
  29. package/dist/cjs/components/index.d.ts +2 -0
  30. package/dist/cjs/components/index.js +18 -0
  31. package/dist/cjs/constants.d.ts +28 -0
  32. package/dist/cjs/constants.js +31 -0
  33. package/dist/cjs/helperComponents/DesktopDrawer/DesktopDrawer.d.ts +3 -0
  34. package/dist/cjs/helperComponents/DesktopDrawer/DesktopDrawer.js +32 -0
  35. package/dist/cjs/helperComponents/DesktopDrawer/index.d.ts +1 -0
  36. package/dist/cjs/helperComponents/DesktopDrawer/index.js +17 -0
  37. package/dist/cjs/helperComponents/DialogSlots.d.ts +8 -0
  38. package/dist/cjs/helperComponents/DialogSlots.js +12 -0
  39. package/dist/cjs/helperComponents/DrawerBody/DrawerBody.d.ts +4 -0
  40. package/dist/cjs/helperComponents/DrawerBody/DrawerBody.js +17 -0
  41. package/dist/cjs/helperComponents/DrawerBody/index.d.ts +1 -0
  42. package/dist/cjs/helperComponents/DrawerBody/index.js +17 -0
  43. package/dist/cjs/helperComponents/DrawerBody/styles.module.css +30 -0
  44. package/dist/cjs/helperComponents/MobileDrawer/MobileDrawer.d.ts +7 -0
  45. package/dist/cjs/helperComponents/MobileDrawer/MobileDrawer.js +26 -0
  46. package/dist/cjs/helperComponents/MobileDrawer/index.d.ts +1 -0
  47. package/dist/cjs/helperComponents/MobileDrawer/index.js +17 -0
  48. package/dist/cjs/helperComponents/index.d.ts +8 -0
  49. package/dist/cjs/helperComponents/index.js +30 -0
  50. package/dist/cjs/index.d.ts +5 -0
  51. package/dist/cjs/index.js +23 -0
  52. package/dist/cjs/package.json +3 -0
  53. package/dist/cjs/style.css +633 -0
  54. package/dist/cjs/types.d.ts +4 -0
  55. package/dist/cjs/types.js +2 -0
  56. package/dist/cjs/utils/interopDefault.d.ts +7 -0
  57. package/dist/cjs/utils/interopDefault.js +10 -0
  58. package/dist/esm/components/Drawer/Drawer.d.ts +6 -0
  59. package/dist/esm/components/Drawer/Drawer.js +12 -0
  60. package/dist/esm/components/Drawer/constants.d.ts +1 -0
  61. package/dist/esm/components/Drawer/constants.js +1 -0
  62. package/dist/esm/components/Drawer/index.d.ts +2 -0
  63. package/dist/esm/components/Drawer/index.js +2 -0
  64. package/dist/esm/components/Drawer/styles.module.css +19 -0
  65. package/dist/esm/components/Drawer/types.d.ts +35 -0
  66. package/dist/esm/components/Drawer/types.js +1 -0
  67. package/dist/esm/components/DrawerCustom/DrawerCustom.d.ts +15 -0
  68. package/dist/esm/components/DrawerCustom/DrawerCustom.js +70 -0
  69. package/dist/esm/components/DrawerCustom/constants.d.ts +4 -0
  70. package/dist/esm/components/DrawerCustom/constants.js +13 -0
  71. package/dist/esm/components/DrawerCustom/hooks/index.d.ts +1 -0
  72. package/dist/esm/components/DrawerCustom/hooks/index.js +1 -0
  73. package/dist/esm/components/DrawerCustom/hooks/useDrawerFocusTrap.d.ts +9 -0
  74. package/dist/esm/components/DrawerCustom/hooks/useDrawerFocusTrap.js +80 -0
  75. package/dist/esm/components/DrawerCustom/hooks/useDrawerResize.d.ts +15 -0
  76. package/dist/esm/components/DrawerCustom/hooks/useDrawerResize.js +47 -0
  77. package/dist/esm/components/DrawerCustom/index.d.ts +2 -0
  78. package/dist/esm/components/DrawerCustom/index.js +1 -0
  79. package/dist/esm/components/DrawerCustom/motion.css +93 -0
  80. package/dist/esm/components/DrawerCustom/styles.module.css +491 -0
  81. package/dist/esm/components/DrawerCustom/types.d.ts +71 -0
  82. package/dist/esm/components/DrawerCustom/types.js +1 -0
  83. package/dist/esm/components/index.d.ts +2 -0
  84. package/dist/esm/components/index.js +2 -0
  85. package/dist/esm/constants.d.ts +28 -0
  86. package/dist/esm/constants.js +28 -0
  87. package/dist/esm/helperComponents/DesktopDrawer/DesktopDrawer.d.ts +3 -0
  88. package/dist/esm/helperComponents/DesktopDrawer/DesktopDrawer.js +26 -0
  89. package/dist/esm/helperComponents/DesktopDrawer/index.d.ts +1 -0
  90. package/dist/esm/helperComponents/DesktopDrawer/index.js +1 -0
  91. package/dist/esm/helperComponents/DialogSlots.d.ts +8 -0
  92. package/dist/esm/helperComponents/DialogSlots.js +8 -0
  93. package/dist/esm/helperComponents/DrawerBody/DrawerBody.d.ts +4 -0
  94. package/dist/esm/helperComponents/DrawerBody/DrawerBody.js +11 -0
  95. package/dist/esm/helperComponents/DrawerBody/index.d.ts +1 -0
  96. package/dist/esm/helperComponents/DrawerBody/index.js +1 -0
  97. package/dist/esm/helperComponents/DrawerBody/styles.module.css +30 -0
  98. package/dist/esm/helperComponents/MobileDrawer/MobileDrawer.d.ts +7 -0
  99. package/dist/esm/helperComponents/MobileDrawer/MobileDrawer.js +23 -0
  100. package/dist/esm/helperComponents/MobileDrawer/index.d.ts +1 -0
  101. package/dist/esm/helperComponents/MobileDrawer/index.js +1 -0
  102. package/dist/esm/helperComponents/index.d.ts +8 -0
  103. package/dist/esm/helperComponents/index.js +8 -0
  104. package/dist/esm/index.d.ts +5 -0
  105. package/dist/esm/index.js +5 -0
  106. package/dist/esm/style.css +633 -0
  107. package/dist/esm/types.d.ts +4 -0
  108. package/dist/esm/types.js +1 -0
  109. package/dist/esm/utils/interopDefault.d.ts +7 -0
  110. package/dist/esm/utils/interopDefault.js +7 -0
  111. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  112. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  113. package/package.json +51 -0
  114. package/src/components/Drawer/Drawer.tsx +15 -0
  115. package/src/components/Drawer/constants.ts +1 -0
  116. package/src/components/Drawer/index.ts +2 -0
  117. package/src/components/Drawer/styles.module.scss +26 -0
  118. package/src/components/Drawer/types.ts +42 -0
  119. package/src/components/DrawerCustom/DrawerCustom.tsx +197 -0
  120. package/src/components/DrawerCustom/constants.ts +17 -0
  121. package/src/components/DrawerCustom/hooks/index.ts +1 -0
  122. package/src/components/DrawerCustom/hooks/useDrawerFocusTrap.ts +97 -0
  123. package/src/components/DrawerCustom/hooks/useDrawerResize.tsx +78 -0
  124. package/src/components/DrawerCustom/index.ts +2 -0
  125. package/src/components/DrawerCustom/styles.module.scss +330 -0
  126. package/src/components/DrawerCustom/types.ts +77 -0
  127. package/src/components/index.ts +2 -0
  128. package/src/constants.ts +31 -0
  129. package/src/helperComponents/DesktopDrawer/DesktopDrawer.tsx +85 -0
  130. package/src/helperComponents/DesktopDrawer/index.ts +1 -0
  131. package/src/helperComponents/DialogSlots.tsx +25 -0
  132. package/src/helperComponents/DrawerBody/DrawerBody.tsx +25 -0
  133. package/src/helperComponents/DrawerBody/index.ts +1 -0
  134. package/src/helperComponents/DrawerBody/styles.module.scss +32 -0
  135. package/src/helperComponents/MobileDrawer/MobileDrawer.tsx +75 -0
  136. package/src/helperComponents/MobileDrawer/index.ts +1 -0
  137. package/src/helperComponents/index.ts +11 -0
  138. package/src/index.ts +6 -0
  139. package/src/types.ts +6 -0
  140. package/src/utils/interopDefault.ts +7 -0
@@ -0,0 +1,76 @@
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.DrawerCustom = DrawerCustom;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const adaptive_1 = require("@cloud-ru/ds-adaptive");
9
+ const bottom_sheet_1 = require("@cloud-ru/ds-bottom-sheet");
10
+ const popup_private_1 = require("@cloud-ru/ds-popup-private");
11
+ const portal_context_1 = require("@cloud-ru/ds-portal-context");
12
+ const utils_1 = require("@cloud-ru/ds-utils");
13
+ const drawer_1 = __importDefault(require("@rc-component/drawer"));
14
+ const classnames_1 = __importDefault(require("classnames"));
15
+ const react_1 = require("react");
16
+ const constants_1 = require("../../constants");
17
+ const helperComponents_1 = require("../../helperComponents");
18
+ const interopDefault_1 = require("../../utils/interopDefault");
19
+ const constants_2 = require("./constants");
20
+ const hooks_1 = require("./hooks");
21
+ const useDrawerResize_1 = require("./hooks/useDrawerResize");
22
+ const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
23
+ const RcDrawer = (0, interopDefault_1.interopDefault)(drawer_1.default);
24
+ /** Desktop-frame дровера: rc-drawer + position/width/push/nestedDrawer + close-button. Surface='drawer'. */
25
+ function DrawerFrame(props) {
26
+ const { showBlackout = true, showButtonClosed = true, open, onClose, rootClassName, className, push, container, children, nestedDrawer, closeOnPopstate, position, heightAuto, width: widthProp, resizable: resizableProp, disableMotions = false, ...rest } = props;
27
+ const heightAutoVertical = Boolean(heightAuto && (position === 'top' || position === 'bottom'));
28
+ const resizable = heightAutoVertical ? undefined : resizableProp;
29
+ const { tooltip, checkElement, width: userWidth, resizable: drawerResizable, } = (0, useDrawerResize_1.useDrawerResize)({
30
+ resizable,
31
+ position,
32
+ });
33
+ const width = resizable ? (userWidth ?? widthProp) : widthProp;
34
+ const isPredefinedWidth = typeof width === 'string' && constants_1.WIDTH_AS_VALUES.includes(width);
35
+ // Wrapper height/inset задаёт CSS по `[data-height-auto]`; здесь только стили секции.
36
+ const drawerPanelStyle = (0, react_1.useMemo)(() => {
37
+ if (!heightAutoVertical) {
38
+ return undefined;
39
+ }
40
+ return {
41
+ height: 'auto',
42
+ maxHeight: '100%',
43
+ minHeight: 0,
44
+ overflow: 'hidden',
45
+ };
46
+ }, [heightAutoVertical]);
47
+ // Esc обрабатывает rc-drawer (`keyboard={showBlackout}`) — он уважает стек порталов и закрывает
48
+ // только верхний дровер. `CloseWatcher` подключаем лишь там, где rc-drawer Esc не слушает
49
+ // (`showBlackout=false`): иначе два независимых обработчика закрывают и вложенный, и родительский.
50
+ (0, utils_1.useModalOpenState)(open, onClose, { closeOnPopstate, closeByCloseWatcher: !showBlackout });
51
+ const focusTrapRef = (0, hooks_1.useDrawerFocusTrap)(Boolean(open));
52
+ // Без явного container портал идёт через PortalContextProvider (как у Modal): скоуп к локальному
53
+ // элементу и отказ от body-level scroll lock, который rc-drawer ставит при рендере в document.body.
54
+ const portalContextRef = (0, portal_context_1.usePortalContext)();
55
+ const resolvedContainer = container ?? (portalContextRef.current ? () => portalContextRef.current : undefined);
56
+ return ((0, jsx_runtime_1.jsx)(RcDrawer, { resizable: drawerResizable, panelRef: checkElement, mask: showBlackout, maskClosable: showBlackout, keyboard: showBlackout, "data-showblackout": showBlackout, open: open, onClose: onClose, push: push, getContainer: resolvedContainer, placement: position, destroyOnHidden: true, rootClassName: (0, classnames_1.default)(styles_module_scss_1.default.drawerRoot, rootClassName), style: drawerPanelStyle, classNames: {
57
+ section: (0, classnames_1.default)(styles_module_scss_1.default.drawer, className),
58
+ }, size: isPredefinedWidth ? 'null' : width, ...(0, utils_1.extractSupportProps)(rest), "data-content-wrapper": true, "data-position": position, "data-width": isPredefinedWidth ? width : undefined, "data-height-auto": heightAutoVertical ? true : undefined, "data-acrylic-appearance": 'neutral', "data-acrylic-level": '1Level', prefixCls: 'snack-rc-drawer', ...(disableMotions ? {} : constants_2.motionProps), children: (0, jsx_runtime_1.jsxs)("div", { ref: focusTrapRef, className: styles_module_scss_1.default.focusScope, children: [showButtonClosed && ((0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.showButtonClosedWrapper, children: (0, jsx_runtime_1.jsx)(popup_private_1.PopupCloseButton, { className: styles_module_scss_1.default.showButtonClosed, "aria-label": 'close drawer', "data-test-id": constants_1.TEST_IDS.closeButton, onClick: onClose }) })), (0, jsx_runtime_1.jsx)(bottom_sheet_1.OverlaySurfaceProvider, { surface: bottom_sheet_1.OVERLAY_SURFACE.Drawer, bodyHeightAuto: heightAutoVertical, children: children }), tooltip, nestedDrawer] }) }));
59
+ }
60
+ /**
61
+ * Адаптивный low-level `DrawerCustom`: на `mobile` — `BottomSheetCustom`, иначе — `DrawerFrame`.
62
+ * Композиция одна (surface-aware слоты `.Header/.Body/.Footer`). Форс — `withLayoutType`.
63
+ */
64
+ function DrawerCustom(props) {
65
+ const { layoutType } = (0, adaptive_1.useAdaptiveLayout)();
66
+ if ((0, adaptive_1.isMobileLayout)(layoutType)) {
67
+ const { open, onClose, children, className, rootClassName, container, closeOnPopstate, showBlackout, snapPoints, swipeEnabled, safeArea, disableMotions, ...rest } = props;
68
+ return ((0, jsx_runtime_1.jsx)(bottom_sheet_1.BottomSheetCustom, { open: open, onClose: onClose, container: container, className: className, rootClassName: rootClassName, closeOnPopstate: closeOnPopstate, showBackdrop: showBlackout, snapPoints: snapPoints, swipeEnabled: swipeEnabled, safeArea: safeArea, disableMotions: disableMotions, ...(0, utils_1.extractSupportProps)(rest), children: children }));
69
+ }
70
+ return (0, jsx_runtime_1.jsx)(DrawerFrame, { ...props });
71
+ }
72
+ (function (DrawerCustom) {
73
+ DrawerCustom.Header = helperComponents_1.DialogHeader;
74
+ DrawerCustom.Body = helperComponents_1.DialogBody;
75
+ DrawerCustom.Footer = helperComponents_1.DialogFooter;
76
+ })(DrawerCustom || (exports.DrawerCustom = DrawerCustom = {}));
@@ -0,0 +1,4 @@
1
+ import { DrawerProps } from '@rc-component/drawer';
2
+ export declare const maskMotion: DrawerProps['maskMotion'];
3
+ export declare const motion: DrawerProps['motion'];
4
+ export declare const motionProps: Partial<DrawerProps>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.motionProps = exports.motion = exports.maskMotion = void 0;
4
+ exports.maskMotion = {
5
+ motionAppear: true,
6
+ motionName: 'maskMotion',
7
+ };
8
+ const motion = placement => ({
9
+ motionAppear: true,
10
+ motionDeadline: 300,
11
+ motionName: `panelMotion-${placement}`,
12
+ });
13
+ exports.motion = motion;
14
+ exports.motionProps = {
15
+ maskMotion: exports.maskMotion,
16
+ motion: exports.motion,
17
+ };
@@ -0,0 +1 @@
1
+ export * from './useDrawerFocusTrap';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./useDrawerFocusTrap"), exports);
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Focus scope для Drawer-панели:
3
+ * - запоминает activeElement до открытия и возвращает фокус после закрытия;
4
+ * - устанавливает фокус на контейнер при открытии (без прыжка на первый focusable);
5
+ * - цикличный Tab / Shift+Tab внутри контейнера.
6
+ *
7
+ * Возвращает ref, который нужно повесить на корневой DOM-узел панели.
8
+ */
9
+ export declare function useDrawerFocusTrap(active: boolean): import("react").RefObject<HTMLDivElement>;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useDrawerFocusTrap = useDrawerFocusTrap;
4
+ const utils_1 = require("@cloud-ru/ds-utils");
5
+ const react_1 = require("react");
6
+ const tabbable_1 = require("tabbable");
7
+ /**
8
+ * Focus scope для Drawer-панели:
9
+ * - запоминает activeElement до открытия и возвращает фокус после закрытия;
10
+ * - устанавливает фокус на контейнер при открытии (без прыжка на первый focusable);
11
+ * - цикличный Tab / Shift+Tab внутри контейнера.
12
+ *
13
+ * Возвращает ref, который нужно повесить на корневой DOM-узел панели.
14
+ */
15
+ function useDrawerFocusTrap(active) {
16
+ const containerRef = (0, react_1.useRef)(null);
17
+ (0, utils_1.useLayoutEffect)(() => {
18
+ if (!active) {
19
+ return;
20
+ }
21
+ // Панель rc-drawer монтируется отдельным коммитом, поэтому `containerRef` здесь ещё пуст —
22
+ // возврат фокуса от него не зависит и на его отсутствие завязываться нельзя.
23
+ // Начальный фокус ставит сам rc-drawer (autoFocus на panelRef).
24
+ const previous = document.activeElement instanceof HTMLElement ? document.activeElement : null;
25
+ return () => {
26
+ if (previous &&
27
+ previous !== document.body &&
28
+ previous !== document.documentElement &&
29
+ document.documentElement.contains(previous)) {
30
+ previous.focus({ preventScroll: true });
31
+ }
32
+ };
33
+ }, [active]);
34
+ (0, react_1.useEffect)(() => {
35
+ if (!active) {
36
+ return;
37
+ }
38
+ const handleKeyDown = (event) => {
39
+ if (event.key !== 'Tab') {
40
+ return;
41
+ }
42
+ const container = containerRef.current;
43
+ if (!container) {
44
+ return;
45
+ }
46
+ const activeElement = document.activeElement;
47
+ if (!(activeElement instanceof HTMLElement)) {
48
+ return;
49
+ }
50
+ const focusInsideDialog = container.contains(activeElement);
51
+ const nodes = (0, tabbable_1.tabbable)(container);
52
+ if (nodes.length === 0) {
53
+ event.preventDefault();
54
+ return;
55
+ }
56
+ const first = nodes[0];
57
+ const last = nodes[nodes.length - 1];
58
+ if (!focusInsideDialog) {
59
+ // Фокус ушёл наружу (rc-drawer sentinel / body) — вернём внутрь.
60
+ event.preventDefault();
61
+ if (event.shiftKey) {
62
+ last?.focus();
63
+ }
64
+ else {
65
+ first?.focus();
66
+ }
67
+ return;
68
+ }
69
+ if (event.shiftKey && activeElement === first) {
70
+ event.preventDefault();
71
+ last?.focus();
72
+ return;
73
+ }
74
+ if (!event.shiftKey && activeElement === last) {
75
+ event.preventDefault();
76
+ first?.focus();
77
+ }
78
+ };
79
+ document.addEventListener('keydown', handleKeyDown, true);
80
+ return () => document.removeEventListener('keydown', handleKeyDown, true);
81
+ }, [active]);
82
+ return containerRef;
83
+ }
@@ -0,0 +1,15 @@
1
+ import { DrawerProps } from '@rc-component/drawer';
2
+ import { DrawerCustomProps } from '../types';
3
+ type UseDrawerResizeParams = Pick<DrawerCustomProps, 'position' | 'resizable'>;
4
+ type UseDrawerResizeResult = {
5
+ /** JSX Тултипа для ползунка изменения ширины */
6
+ tooltip: React.ReactNode;
7
+ /** Функция поиска ползунка в DOM-дереве. Стоит вызывать тогда, когда он отрендерен. */
8
+ checkElement: () => void;
9
+ /** Ресайз-хендлер для rc-drawer */
10
+ resizable: DrawerProps['resizable'];
11
+ /** Ширина ползунка в пикселях */
12
+ width?: number;
13
+ };
14
+ export declare function useDrawerResize({ position, resizable: resizableProp }: UseDrawerResizeParams): UseDrawerResizeResult;
15
+ export {};
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useDrawerResize = useDrawerResize;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const tooltip_1 = require("@cloud-ru/ds-tooltip");
6
+ const utils_1 = require("@cloud-ru/ds-utils");
7
+ const react_1 = require("react");
8
+ const DRAGGER_SELECTOR = '.rc-drawer-resizable-dragger';
9
+ function useDrawerResize({ position, resizable: resizableProp }) {
10
+ const targetRef = (0, react_1.useRef)(null);
11
+ const targetRefCallbackRef = (0, react_1.useRef)();
12
+ const [width, setWidth] = (0, react_1.useState)(resizableProp?.default);
13
+ const [muted, setMuted] = (0, react_1.useState)(false);
14
+ const [open, setOpen] = (0, react_1.useState)(false);
15
+ const draggerTooltip = resizableProp?.draggerTooltip;
16
+ const checkElement = (0, react_1.useCallback)(() => {
17
+ if ((0, utils_1.isBrowser)() && draggerTooltip) {
18
+ const element = document.querySelector(DRAGGER_SELECTOR);
19
+ if (!element)
20
+ return;
21
+ targetRefCallbackRef.current ? targetRefCallbackRef.current(element) : (targetRef.current = element);
22
+ }
23
+ }, [draggerTooltip]);
24
+ const tooltip = draggerTooltip ? ((0, jsx_runtime_1.jsx)(tooltip_1.Tooltip, { placement: position, offset: 4, tip: draggerTooltip, open: open && !muted, onOpenChange: setOpen, children: ({ ref: targetRefCallback }) => {
25
+ if (!targetRefCallback)
26
+ return null;
27
+ targetRef.current ? targetRefCallback(targetRef.current) : (targetRefCallbackRef.current = targetRefCallback);
28
+ } })) : null;
29
+ const resizable = (0, react_1.useMemo)(() => resizableProp
30
+ ? {
31
+ onResize: value => {
32
+ if (value < (resizableProp?.min || 0))
33
+ return;
34
+ if (value > (resizableProp?.max || Infinity))
35
+ return;
36
+ setWidth(value);
37
+ resizableProp?.onResize?.(value);
38
+ },
39
+ onResizeEnd: () => {
40
+ setOpen(false);
41
+ setMuted(false);
42
+ resizableProp?.onResizeEnd?.(width ?? 0);
43
+ },
44
+ onResizeStart: () => {
45
+ setMuted(true);
46
+ },
47
+ }
48
+ : undefined, [resizableProp, width]);
49
+ return { tooltip, checkElement, resizable, width };
50
+ }
@@ -0,0 +1,2 @@
1
+ export * from './DrawerCustom';
2
+ export type { DrawerCustomProps } from './types';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./DrawerCustom"), exports);
@@ -0,0 +1,93 @@
1
+ .rc-drawer.rc-drawer-open .rc-drawer-mask{
2
+ opacity:unset;
3
+ transition:none;
4
+ }
5
+
6
+ .rc-drawer .rc-drawer-mask.maskMotion{
7
+ opacity:unset;
8
+ }
9
+ .rc-drawer .rc-drawer-mask.maskMotion-enter, .rc-drawer .rc-drawer-mask.maskMotion-appear{
10
+ opacity:0;
11
+ }
12
+ .rc-drawer .rc-drawer-mask.maskMotion-enter-active, .rc-drawer .rc-drawer-mask.maskMotion-appear-active{
13
+ opacity:1;
14
+ transition:opacity 0.2s;
15
+ }
16
+ .rc-drawer .rc-drawer-mask.maskMotion-leave{
17
+ opacity:1;
18
+ }
19
+ .rc-drawer .rc-drawer-mask.maskMotion-leave-active{
20
+ opacity:0;
21
+ transition:opacity 0.1s;
22
+ }
23
+ .rc-drawer .rc-drawer-content-wrapper.panelMotion{
24
+ transform:unset;
25
+ }
26
+ .rc-drawer .rc-drawer-content-wrapper.panelMotion-left-enter-start, .rc-drawer .rc-drawer-content-wrapper.panelMotion-left-appear-start, .rc-drawer .rc-drawer-content-wrapper.panelMotion-left-leave-start{
27
+ transition:none !important;
28
+ }
29
+ .rc-drawer .rc-drawer-content-wrapper.panelMotion-left-enter, .rc-drawer .rc-drawer-content-wrapper.panelMotion-left-appear{
30
+ transform:translateX(-100%);
31
+ }
32
+ .rc-drawer .rc-drawer-content-wrapper.panelMotion-left-enter-active, .rc-drawer .rc-drawer-content-wrapper.panelMotion-left-appear-active{
33
+ transform:translateX(0);
34
+ transition:transform 0.2s ease-in-out;
35
+ }
36
+ .rc-drawer .rc-drawer-content-wrapper.panelMotion-left-leave{
37
+ transform:translateX(0);
38
+ }
39
+ .rc-drawer .rc-drawer-content-wrapper.panelMotion-left-leave-active{
40
+ transform:translateX(-100%) !important;
41
+ transition:transform 0.1s ease-out;
42
+ }
43
+ .rc-drawer .rc-drawer-content-wrapper.panelMotion-right-enter-start, .rc-drawer .rc-drawer-content-wrapper.panelMotion-right-appear-start, .rc-drawer .rc-drawer-content-wrapper.panelMotion-right-leave-start{
44
+ transition:none !important;
45
+ }
46
+ .rc-drawer .rc-drawer-content-wrapper.panelMotion-right-enter, .rc-drawer .rc-drawer-content-wrapper.panelMotion-right-appear{
47
+ transform:translateX(100%);
48
+ }
49
+ .rc-drawer .rc-drawer-content-wrapper.panelMotion-right-enter-active, .rc-drawer .rc-drawer-content-wrapper.panelMotion-right-appear-active{
50
+ transform:translateX(0);
51
+ transition:transform 0.2s ease-in-out;
52
+ }
53
+ .rc-drawer .rc-drawer-content-wrapper.panelMotion-right-leave{
54
+ transform:translateX(0);
55
+ }
56
+ .rc-drawer .rc-drawer-content-wrapper.panelMotion-right-leave-active{
57
+ transform:translateX(100%) !important;
58
+ transition:transform 0.1s ease-out;
59
+ }
60
+ .rc-drawer .rc-drawer-content-wrapper.panelMotion-top-enter-start, .rc-drawer .rc-drawer-content-wrapper.panelMotion-top-appear-start, .rc-drawer .rc-drawer-content-wrapper.panelMotion-top-leave-start{
61
+ transition:none !important;
62
+ }
63
+ .rc-drawer .rc-drawer-content-wrapper.panelMotion-top-enter, .rc-drawer .rc-drawer-content-wrapper.panelMotion-top-appear{
64
+ transform:translateY(-100%);
65
+ }
66
+ .rc-drawer .rc-drawer-content-wrapper.panelMotion-top-enter-active, .rc-drawer .rc-drawer-content-wrapper.panelMotion-top-appear-active{
67
+ transform:translateY(0);
68
+ transition:transform 0.2s ease-in-out;
69
+ }
70
+ .rc-drawer .rc-drawer-content-wrapper.panelMotion-top-leave{
71
+ transform:translateY(0);
72
+ }
73
+ .rc-drawer .rc-drawer-content-wrapper.panelMotion-top-leave-active{
74
+ transform:translateY(-100%) !important;
75
+ transition:transform 0.1s ease-out;
76
+ }
77
+ .rc-drawer .rc-drawer-content-wrapper.panelMotion-bottom-enter-start, .rc-drawer .rc-drawer-content-wrapper.panelMotion-bottom-appear-start, .rc-drawer .rc-drawer-content-wrapper.panelMotion-bottom-leave-start{
78
+ transition:none !important;
79
+ }
80
+ .rc-drawer .rc-drawer-content-wrapper.panelMotion-bottom-enter, .rc-drawer .rc-drawer-content-wrapper.panelMotion-bottom-appear{
81
+ transform:translateY(100%);
82
+ }
83
+ .rc-drawer .rc-drawer-content-wrapper.panelMotion-bottom-enter-active, .rc-drawer .rc-drawer-content-wrapper.panelMotion-bottom-appear-active{
84
+ transform:translateY(0);
85
+ transition:transform 0.2s ease-in-out;
86
+ }
87
+ .rc-drawer .rc-drawer-content-wrapper.panelMotion-bottom-leave{
88
+ transform:translateY(0);
89
+ }
90
+ .rc-drawer .rc-drawer-content-wrapper.panelMotion-bottom-leave-active{
91
+ transform:translateY(100%) !important;
92
+ transition:transform 0.1s ease-out;
93
+ }