mimir-ui-kit 1.21.1 → 1.21.3

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 +1 @@
1
- ._drawer_3gban_3{--drawer-width: 808px;--drawer-z-index: 10000;position:fixed;z-index:10000;z-index:var(--drawer-z-index);display:flex;flex-direction:column;width:808px;width:var(--drawer-width);height:100%;overflow:auto;background-color:var(--black-5);transition:all .3s ease;pointer-events:none}._drawer_3gban_3::-webkit-scrollbar{width:3px}._drawer_3gban_3::-webkit-scrollbar-thumb{background-color:var(--black-80);border-radius:2px}._drawer_3gban_3::-webkit-scrollbar-track{background-color:var(--white)}._drawer_3gban_3 ._content_3gban_27{position:relative;display:flex;flex:1;flex-direction:column;padding:var(--space-m) var(--space-4xl) var(--space-4xl);transition:all .3s ease}@media (max-width: 600px){._drawer_3gban_3 ._content_3gban_27{--drawer-width: 100%;padding:var(--space-m)}}._drawer_3gban_3 ._content_3gban_27._is-loading_3gban_41{align-items:center;justify-content:center}._drawer_3gban_3 ._header_3gban_45{display:flex;gap:var(--space-xs);min-height:68px}._drawer_3gban_3 ._header_3gban_45:not(:last-child){margin-bottom:var(--space-2xl)}._drawer_3gban_3 ._header_3gban_45._sticky-header_3gban_53{position:-webkit-sticky;position:sticky;top:0;left:0;background-color:var(--black-5)}._drawer_3gban_3 ._header_3gban_45 ._title_3gban_59{flex:1;align-self:flex-end;font-weight:var(--font-weight-text-medium);font-size:var(--size-text-xl3);line-height:var(--line-height-text-s1);letter-spacing:.7px}@media (max-width: 600px){._drawer_3gban_3 ._header_3gban_45 ._title_3gban_59{font-size:var(--size-text-xl2);line-height:var(--line-height-text-xs)}}._drawer_3gban_3 ._header_3gban_45 ._space_3gban_73{flex:0 0 var(--button-height-m)}@media (max-width: 600px){._drawer_3gban_3 ._header_3gban_45{min-height:55px}._drawer_3gban_3 ._header_3gban_45:not(:last-child){margin-bottom:var(--space-m)}}._drawer_3gban_3 ._inner_3gban_84{flex:1}._drawer_3gban_3 ._button_3gban_87{position:absolute;top:var(--space-m);right:var(--space-m)}._drawer_3gban_3 ._footer_3gban_92{display:block;padding-top:var(--space-4xl)}@media (max-width: 600px){._drawer_3gban_3 ._footer_3gban_92{padding-top:var(--space-m)}}._drawer_3gban_3 ._footer-button_3gban_101{display:block;margin-left:auto}._drawer_3gban_3._left_3gban_105{top:0;left:-100%}._drawer_3gban_3._right_3gban_109{top:0;right:-100%}._drawer_3gban_3._full_3gban_113{top:0;right:0;bottom:0;left:0;width:100%;height:100%;max-height:100vh;border-radius:0;transform:scale(.95);opacity:0;transition:transform .3s ease-in-out,opacity .3s ease-in-out}._drawer_3gban_3._bottom_3gban_123{right:50%;bottom:-100%;left:50%;height:-webkit-min-content;height:-moz-min-content;height:min-content;max-height:calc(100% - var(--space-xs));border-top-left-radius:var(--control-radius);border-top-right-radius:var(--control-radius);transform:translate(-50%)}._drawer_3gban_3._bottom_3gban_123._full-bottom-height_3gban_133{height:calc(100% - var(--space-xs))}._drawer_3gban_3._opened_3gban_136{transition:all .3s ease;pointer-events:auto}._drawer_3gban_3._opened_3gban_136._left_3gban_105{left:0%;transition:left .3s ease}._drawer_3gban_3._opened_3gban_136._right_3gban_109{right:0%;transition:right .3s ease}._drawer_3gban_3._opened_3gban_136._bottom_3gban_123{bottom:0%}._drawer_3gban_3._opened_3gban_136._full_3gban_113{transform:scale(1);opacity:1}._drawer_3gban_3._is-closing_3gban_155._left_3gban_105{left:-100%}._drawer_3gban_3._is-closing_3gban_155._right_3gban_109{right:-100%}._drawer_3gban_3._is-closing_3gban_155._bottom_3gban_123{bottom:-100%}._drawer_3gban_3._is-closing_3gban_155._full_3gban_113{transform:scale(.95);opacity:0}@media (max-width: 1440px){._drawer_3gban_3{--drawer-width: 608px}}@media (max-width: 1280px){._drawer_3gban_3{--drawer-width: 648px}}@media (max-width: 768px){._drawer_3gban_3{--drawer-width: 584px}}@media (max-width: 600px){._drawer_3gban_3{--drawer-width: 100%}._drawer_3gban_3._bottom_3gban_123{--drawer-width: calc(100% - var(--space-xs))}}._overlay_3gban_192{--overlay-z-index: 9990;position:fixed;top:0;left:0;z-index:9990;z-index:var(--overlay-z-index);width:100%;height:100%;background-color:#0009;opacity:0;transition:all .3s ease}._overlay_3gban_192._opened_3gban_136{opacity:1;transition:all .3s ease}._overlay_3gban_192._is-closing_3gban_155{opacity:0;transition:all .3s ease}
1
+ ._drawer_1y1lk_3{--drawer-width: 808px;--drawer-z-index: 10000;position:fixed;z-index:10000;z-index:var(--drawer-z-index);display:flex;flex-direction:column;width:808px;width:var(--drawer-width);height:100%;overflow:auto;background-color:var(--black-5);transition:all .3s ease;pointer-events:none}._drawer_1y1lk_3::-webkit-scrollbar{width:3px}._drawer_1y1lk_3::-webkit-scrollbar-thumb{background-color:var(--black-80);border-radius:2px}._drawer_1y1lk_3::-webkit-scrollbar-track{background-color:var(--white)}._drawer_1y1lk_3 ._content_1y1lk_27{position:relative;display:flex;flex:1;flex-direction:column;padding:var(--space-m) var(--space-4xl) var(--space-4xl);transition:all .3s ease}@media (max-width: 600px){._drawer_1y1lk_3 ._content_1y1lk_27{--drawer-width: 100%;padding:var(--space-m)}}._drawer_1y1lk_3 ._content_1y1lk_27._is-loading_1y1lk_41{align-items:center;justify-content:center}._drawer_1y1lk_3 ._header_1y1lk_45{display:flex;gap:var(--space-xs);min-height:68px}._drawer_1y1lk_3 ._header_1y1lk_45:not(:last-child){margin-bottom:var(--space-2xl)}._drawer_1y1lk_3 ._header_1y1lk_45._sticky-header_1y1lk_53{position:-webkit-sticky;position:sticky;top:0;left:0;background-color:var(--black-5)}._drawer_1y1lk_3 ._header_1y1lk_45 ._title_1y1lk_59{flex:1;align-self:flex-end;font-weight:var(--font-weight-text-medium);font-size:var(--size-text-xl3);line-height:var(--line-height-text-s1);letter-spacing:.7px}@media (max-width: 600px){._drawer_1y1lk_3 ._header_1y1lk_45 ._title_1y1lk_59{font-size:var(--size-text-xl2);line-height:var(--line-height-text-xs)}}._drawer_1y1lk_3 ._header_1y1lk_45 ._space_1y1lk_73{flex:0 0 var(--button-height-m)}@media (max-width: 600px){._drawer_1y1lk_3 ._header_1y1lk_45{min-height:55px}._drawer_1y1lk_3 ._header_1y1lk_45:not(:last-child){margin-bottom:var(--space-m)}}._drawer_1y1lk_3 ._inner_1y1lk_84{flex:1}._drawer_1y1lk_3 ._button_1y1lk_87{position:absolute;top:var(--space-m);right:var(--space-m)}._drawer_1y1lk_3 ._footer_1y1lk_92{display:block;padding-top:var(--space-4xl)}@media (max-width: 600px){._drawer_1y1lk_3 ._footer_1y1lk_92{padding-top:var(--space-m)}}._drawer_1y1lk_3 ._footer-button_1y1lk_101{display:block;margin-left:auto}._drawer_1y1lk_3._left_1y1lk_105{top:0;left:-100%}._drawer_1y1lk_3._right_1y1lk_109{top:0;right:-100%}._drawer_1y1lk_3._full_1y1lk_113{top:0;right:0;bottom:0;left:0;width:100%;height:100%;max-height:100vh;border-radius:0;transform:scale(.95);opacity:0;transition:transform .3s ease-in-out,opacity .3s ease-in-out}._drawer_1y1lk_3._bottom_1y1lk_123{right:50%;bottom:-100%;left:50%;height:-webkit-max-content;height:-moz-max-content;height:max-content;max-height:calc(100% - var(--space-xs));border-top-left-radius:var(--control-radius);border-top-right-radius:var(--control-radius);transform:translate(-50%)}._drawer_1y1lk_3._bottom_1y1lk_123._full-bottom-height_1y1lk_133{height:calc(100% - var(--space-xs))}._drawer_1y1lk_3._bottom_1y1lk_123._is-loading_1y1lk_41{height:50vh}._drawer_1y1lk_3._opened_1y1lk_139{transition:all .3s ease;pointer-events:auto}._drawer_1y1lk_3._opened_1y1lk_139._left_1y1lk_105{left:0%;transition:left .3s ease}._drawer_1y1lk_3._opened_1y1lk_139._right_1y1lk_109{right:0%;transition:right .3s ease}._drawer_1y1lk_3._opened_1y1lk_139._bottom_1y1lk_123{bottom:0%}._drawer_1y1lk_3._opened_1y1lk_139._full_1y1lk_113{transform:scale(1);opacity:1}._drawer_1y1lk_3._is-closing_1y1lk_158._left_1y1lk_105{left:-100%}._drawer_1y1lk_3._is-closing_1y1lk_158._right_1y1lk_109{right:-100%}._drawer_1y1lk_3._is-closing_1y1lk_158._bottom_1y1lk_123{bottom:-100%}._drawer_1y1lk_3._is-closing_1y1lk_158._full_1y1lk_113{transform:scale(.95);opacity:0}@media (max-width: 1440px){._drawer_1y1lk_3{--drawer-width: 608px}}@media (max-width: 1280px){._drawer_1y1lk_3{--drawer-width: 648px}}@media (max-width: 768px){._drawer_1y1lk_3{--drawer-width: 584px}}@media (max-width: 600px){._drawer_1y1lk_3{--drawer-width: 100%}._drawer_1y1lk_3._bottom_1y1lk_123{--drawer-width: calc(100% - var(--space-xs))}}._overlay_1y1lk_195{--overlay-z-index: 9990;position:fixed;top:0;left:0;z-index:9990;z-index:var(--overlay-z-index);width:100%;height:100%;background-color:#0009;opacity:0;transition:all .3s ease}._overlay_1y1lk_195._opened_1y1lk_139{opacity:1;transition:all .3s ease}._overlay_1y1lk_195._is-closing_1y1lk_158{opacity:0;transition:all .3s ease}
@@ -14,10 +14,6 @@ type TProps = {
14
14
  * Настраиваемый паддинг для body, что бы избежать скачка контента при overflow: hidden
15
15
  */
16
16
  paddingRight?: number;
17
- /**
18
- * Дополнительная высота для учета нижнего сайдбара
19
- */
20
- additionalHeight?: number;
21
17
  /**
22
18
  * Функция закрытия шторки
23
19
  */
@@ -52,5 +48,5 @@ type TProps = {
52
48
  /**
53
49
  * Компонент шторки, который может выезжать слева, справа или внизу.
54
50
  */
55
- export declare const Drawer: ({ isOpen, onClose, title, className, isLoading, stickyHeader, fullBottomHeight, position, paddingRight, additionalHeight, footer, children }: PropsWithChildren<TProps>) => import("react/jsx-runtime").JSX.Element | null;
51
+ export declare const Drawer: ({ isOpen, onClose, title, className, isLoading, stickyHeader, fullBottomHeight, position, paddingRight, footer, children }: PropsWithChildren<TProps>) => import("react/jsx-runtime").JSX.Element | null;
56
52
  export {};
@@ -5,43 +5,44 @@ import { EDrawerPosition } from "./constants.js";
5
5
  import { useMediaQuery } from "../../hooks/useMediaQuery/useMediaQuery.js";
6
6
  import { EMediaQuery } from "../../hooks/useMediaQuery/constants.js";
7
7
  import { useLockBodyScroll } from "../../hooks/useLockBodyScroll/useLockBodyScroll.js";
8
+ import { useResizeObserver } from "../../hooks/useResizeObserver/useResizeObserver.js";
8
9
  import { Button } from "../Button/Button.js";
9
10
  import { EButtonVariantDefault, EButtonSize } from "../Button/constants.js";
10
11
  import { Loader } from "../Loader/Loader.js";
11
12
  import { Portal } from "../Portal/Portal.js";
12
- import '../../assets/Drawer.css';const drawer = "_drawer_3gban_3";
13
- const content = "_content_3gban_27";
14
- const header = "_header_3gban_45";
15
- const title = "_title_3gban_59";
16
- const space = "_space_3gban_73";
17
- const inner = "_inner_3gban_84";
18
- const button = "_button_3gban_87";
19
- const footer = "_footer_3gban_92";
20
- const left = "_left_3gban_105";
21
- const right = "_right_3gban_109";
22
- const full = "_full_3gban_113";
23
- const bottom = "_bottom_3gban_123";
24
- const opened = "_opened_3gban_136";
25
- const overlay = "_overlay_3gban_192";
13
+ import '../../assets/Drawer.css';const drawer = "_drawer_1y1lk_3";
14
+ const content = "_content_1y1lk_27";
15
+ const header = "_header_1y1lk_45";
16
+ const title = "_title_1y1lk_59";
17
+ const space = "_space_1y1lk_73";
18
+ const inner = "_inner_1y1lk_84";
19
+ const button = "_button_1y1lk_87";
20
+ const footer = "_footer_1y1lk_92";
21
+ const left = "_left_1y1lk_105";
22
+ const right = "_right_1y1lk_109";
23
+ const full = "_full_1y1lk_113";
24
+ const bottom = "_bottom_1y1lk_123";
25
+ const opened = "_opened_1y1lk_139";
26
+ const overlay = "_overlay_1y1lk_195";
26
27
  const cls = {
27
28
  drawer,
28
29
  content,
29
- "is-loading": "_is-loading_3gban_41",
30
+ "is-loading": "_is-loading_1y1lk_41",
30
31
  header,
31
- "sticky-header": "_sticky-header_3gban_53",
32
+ "sticky-header": "_sticky-header_1y1lk_53",
32
33
  title,
33
34
  space,
34
35
  inner,
35
36
  button,
36
37
  footer,
37
- "footer-button": "_footer-button_3gban_101",
38
+ "footer-button": "_footer-button_1y1lk_101",
38
39
  left,
39
40
  right,
40
41
  full,
41
42
  bottom,
42
- "full-bottom-height": "_full-bottom-height_3gban_133",
43
+ "full-bottom-height": "_full-bottom-height_1y1lk_133",
43
44
  opened,
44
- "is-closing": "_is-closing_3gban_155",
45
+ "is-closing": "_is-closing_1y1lk_158",
45
46
  overlay
46
47
  };
47
48
  const ANIMATION_DELAY = 300;
@@ -50,12 +51,11 @@ const Drawer = ({
50
51
  onClose,
51
52
  title: title2,
52
53
  className,
53
- isLoading,
54
+ isLoading = false,
54
55
  stickyHeader,
55
56
  fullBottomHeight = false,
56
57
  position = EDrawerPosition.RIGHT,
57
58
  paddingRight = 8,
58
- additionalHeight = 0,
59
59
  footer: footer2,
60
60
  children
61
61
  }) => {
@@ -63,9 +63,10 @@ const Drawer = ({
63
63
  const [isMounted, setIsMounted] = useState(false);
64
64
  const [isBodyScrollLocked, setIsBodyScrollLocked] = useState(false);
65
65
  const timerRef = useRef();
66
- const contentRef = useRef(null);
67
- const isBottomPosition = position === EDrawerPosition.BOTTOM;
68
66
  const isMobile = useMediaQuery(EMediaQuery.XS1);
67
+ const { ref } = useResizeObserver({
68
+ enabled: position === EDrawerPosition.BOTTOM
69
+ });
69
70
  useLockBodyScroll({
70
71
  on: isBodyScrollLocked,
71
72
  paddingRight
@@ -103,26 +104,23 @@ const Drawer = ({
103
104
  const mods = {
104
105
  [cls.opened]: isMounted,
105
106
  [cls["is-closing"]]: isClosing,
106
- [cls["full-bottom-height"]]: fullBottomHeight
107
+ [cls["full-bottom-height"]]: fullBottomHeight,
108
+ [cls["is-loading"]]: isLoading
107
109
  };
108
110
  if (!isOpen) {
109
111
  return null;
110
112
  }
111
- const bottomPositionHeight = isBottomPosition && contentRef.current && !fullBottomHeight ? contentRef.current.offsetHeight + additionalHeight : void 0;
112
113
  return /* @__PURE__ */ jsxs(Portal, { children: [
113
114
  /* @__PURE__ */ jsx(
114
115
  "div",
115
116
  {
116
117
  "aria-hidden": !isOpen,
117
118
  role: "dialog",
118
- style: {
119
- height: bottomPositionHeight
120
- },
121
119
  className: classNames(cls.drawer, cls[position], mods, className),
122
120
  children: /* @__PURE__ */ jsx(
123
121
  "section",
124
122
  {
125
- ref: contentRef,
123
+ ref,
126
124
  className: classNames(cls.content, cls[position], {
127
125
  [cls["is-loading"]]: Boolean(isLoading)
128
126
  }),
@@ -4,3 +4,4 @@ export { useInterval } from './useInterval';
4
4
  export { useTimer } from './useTimer';
5
5
  export { useCopyToClipboard } from './useCopyToClipboard';
6
6
  export { useMergeRefs } from './useMergeRefs';
7
+ export { useResizeObserver } from './useResizeObserver';
@@ -5,6 +5,7 @@ import { useInterval } from "./useInterval/useInterval.js";
5
5
  import { useTimer } from "./useTimer/index.js";
6
6
  import { useCopyToClipboard } from "./useCopyToClipboard/useCopyToClipboard.js";
7
7
  import { useMergeRefs } from "./useMergeRefs/useMergeRefs.js";
8
+ import { useResizeObserver } from "./useResizeObserver/useResizeObserver.js";
8
9
  export {
9
10
  EMediaQuery,
10
11
  EMinMediaQuery,
@@ -13,5 +14,6 @@ export {
13
14
  useLockBodyScroll,
14
15
  useMediaQuery,
15
16
  useMergeRefs,
17
+ useResizeObserver,
16
18
  useTimer
17
19
  };
@@ -0,0 +1,4 @@
1
+ import { RefObject } from 'react';
2
+
3
+ export type GetElementTarget = RefObject<Element | null | undefined> | (() => Element) | Element | Window | Document;
4
+ export declare const getElement: <Target extends GetElementTarget>(target: Target) => Element | (Target & Document) | (Target & Window) | null | undefined;
@@ -0,0 +1,18 @@
1
+ const getElement = (target) => {
2
+ if (typeof target === "function") {
3
+ return target();
4
+ }
5
+ if (target instanceof Document) {
6
+ return target;
7
+ }
8
+ if (target instanceof Window) {
9
+ return target;
10
+ }
11
+ if (target instanceof Element) {
12
+ return target;
13
+ }
14
+ return target.current;
15
+ };
16
+ export {
17
+ getElement
18
+ };
@@ -0,0 +1 @@
1
+ export { useResizeObserver } from './useResizeObserver';
@@ -0,0 +1,4 @@
1
+ import { useResizeObserver } from "./useResizeObserver.js";
2
+ export {
3
+ useResizeObserver
4
+ };
@@ -0,0 +1,17 @@
1
+ import { RefObject } from 'react';
2
+
3
+ export type UseResizeObserverTarget = RefObject<Element | null | undefined> | (() => Element) | Element;
4
+ export interface UseResizeObserverOptions extends ResizeObserverOptions {
5
+ enabled?: boolean;
6
+ onChange?: (entries: ResizeObserverEntry[], observer: ResizeObserver) => void;
7
+ }
8
+ export interface UseResizeObserverReturn {
9
+ entries: ResizeObserverEntry[];
10
+ }
11
+ export interface UseResizeObserver {
12
+ <Target extends UseResizeObserverTarget | UseResizeObserverTarget[]>(target: Target, options?: UseResizeObserverOptions): UseResizeObserverReturn;
13
+ <Target extends UseResizeObserverTarget | UseResizeObserverTarget[]>(options?: UseResizeObserverOptions, target?: never): UseResizeObserverReturn & {
14
+ ref: (node: Target) => void;
15
+ };
16
+ }
17
+ export declare const useResizeObserver: UseResizeObserver;
@@ -0,0 +1,49 @@
1
+ import { useState, useRef, useEffect } from "react";
2
+ import { getElement } from "./getElement.js";
3
+ const useResizeObserver = (...params) => {
4
+ const target = typeof params[0] === "object" && !("current" in params[0]) ? void 0 : params[0];
5
+ const options = target ? params[1] : params[0];
6
+ const enabled = (options == null ? void 0 : options.enabled) ?? true;
7
+ const [entries, setEntries] = useState([]);
8
+ const [internalRef, setInternalRef] = useState();
9
+ const internalOnChangeRef = useRef();
10
+ internalOnChangeRef.current = options == null ? void 0 : options.onChange;
11
+ useEffect(() => {
12
+ if (!enabled && !target && !internalRef) return;
13
+ if (Array.isArray(target)) {
14
+ if (!target.length) return;
15
+ const observer2 = new ResizeObserver((entries2) => {
16
+ var _a;
17
+ setEntries(entries2);
18
+ (_a = internalOnChangeRef.current) == null ? void 0 : _a.call(internalOnChangeRef, entries2, observer2);
19
+ });
20
+ target.forEach((target2) => {
21
+ const element2 = getElement(target2);
22
+ if (!element2) return;
23
+ observer2.observe(element2, options);
24
+ });
25
+ return () => {
26
+ observer2.disconnect();
27
+ };
28
+ }
29
+ const element = target ? getElement(target) : internalRef;
30
+ if (!element) return;
31
+ const observer = new ResizeObserver((entries2) => {
32
+ var _a;
33
+ setEntries(entries2);
34
+ (_a = internalOnChangeRef.current) == null ? void 0 : _a.call(internalOnChangeRef, entries2, observer);
35
+ });
36
+ observer.observe(element, options);
37
+ return () => {
38
+ observer.disconnect();
39
+ };
40
+ }, [internalRef, target, options == null ? void 0 : options.box, enabled]);
41
+ if (target) return { entries };
42
+ return {
43
+ ref: setInternalRef,
44
+ entries
45
+ };
46
+ };
47
+ export {
48
+ useResizeObserver
49
+ };
package/dist/index.js CHANGED
@@ -50,6 +50,7 @@ import { useInterval } from "./hooks/useInterval/useInterval.js";
50
50
  import { useTimer } from "./hooks/useTimer/index.js";
51
51
  import { useCopyToClipboard } from "./hooks/useCopyToClipboard/useCopyToClipboard.js";
52
52
  import { useMergeRefs } from "./hooks/useMergeRefs/useMergeRefs.js";
53
+ import { useResizeObserver } from "./hooks/useResizeObserver/useResizeObserver.js";
53
54
  import { Icon } from "./icons/Icon.js";
54
55
  import { formating } from "./utils/index.js";
55
56
  import './assets/index.css';export {
@@ -118,6 +119,7 @@ import './assets/index.css';export {
118
119
  useLockBodyScroll,
119
120
  useMediaQuery,
120
121
  useMergeRefs,
122
+ useResizeObserver,
121
123
  useTimer,
122
124
  useToast
123
125
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mimir-ui-kit",
3
3
  "private": false,
4
- "version": "1.21.1",
4
+ "version": "1.21.3",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  ".": {