mimir-ui-kit 1.24.4 → 1.26.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,14 +2,33 @@ import { ReactNode } from 'react';
2
2
  import { EAccordionButtonStyle, EAccordionButtonType, EAccordionIconType, EAccordionSize } from './constants';
3
3
 
4
4
  export type TAccordionProps = {
5
+ /** Заголовок аккордеона */
5
6
  title: string;
7
+ /** Содержимое аккордеона */
6
8
  children: ReactNode;
9
+ /** Размер аккордеона */
7
10
  size?: EAccordionSize;
11
+ /** Преобразование заголовка в верхний регистр */
8
12
  titleUppercase?: boolean;
13
+ /** Тип кнопки аккордеона */
9
14
  buttonType?: EAccordionButtonType | `${EAccordionButtonType}`;
15
+ /** Стиль кнопки аккордеона */
10
16
  buttonStyle?: EAccordionButtonStyle | `${EAccordionButtonStyle}`;
17
+ /** Тип иконки аккордеона */
11
18
  iconType?: EAccordionIconType | `${EAccordionIconType}`;
19
+ /** Дополнительный класс для заголовка */
12
20
  classNameTitle?: string;
21
+ /** Дополнительный класс для содержимого */
13
22
  classNameContent?: string;
23
+ /** Дополнительный класс для всего аккордеона */
24
+ classNameAccordion?: string;
25
+ /** Дополнительный класс для кнопки с иконкой */
26
+ classNameIconButton?: string;
27
+ /** React-нода для отображения под заголовком */
28
+ subtitleNode?: ReactNode;
29
+ /** React-нода для отображения под заголовком когда аккордеон открыт */
30
+ onlyOpenSubtitleNode?: ReactNode;
31
+ /** Дополнительный класс для контейнера subtitle */
32
+ classNameSubtitleContainer?: string;
14
33
  };
15
34
  export declare const Accordion: import('react').ForwardRefExoticComponent<TAccordionProps & import('react').RefAttributes<HTMLElement>>;
@@ -1,6 +1,6 @@
1
- import { jsx, jsxs, Fragment as Fragment$1 } from "react/jsx-runtime";
1
+ import { jsxs, Fragment as Fragment$1, jsx } from "react/jsx-runtime";
2
2
  import { c as classNames } from "../../index-CweZ_OcN.js";
3
- import React__default, { createContext, useRef, Fragment, useReducer, useMemo, useId, useEffect, useContext, forwardRef } from "react";
3
+ import React__default, { createContext, useRef, Fragment, useReducer, useMemo, useId, useEffect, useContext, forwardRef, useState } from "react";
4
4
  import { AccordionItem } from "./AccordionItem/AccordionItem.js";
5
5
  import { EAccordionButtonType, EAccordionSize, EAccordionButtonStyle, EAccordionIconType, EAccordionLinkIconSize, EAccordionButtonIconSize } from "./constants.js";
6
6
  import { useMediaQuery } from "../../hooks/useMediaQuery/useMediaQuery.js";
@@ -155,8 +155,14 @@ const Accordion = forwardRef(
155
155
  buttonStyle = EAccordionButtonStyle.CIRCLE,
156
156
  iconType = EAccordionIconType.ARROW,
157
157
  classNameTitle,
158
- classNameContent
158
+ classNameContent,
159
+ classNameAccordion,
160
+ classNameIconButton,
161
+ subtitleNode,
162
+ onlyOpenSubtitleNode,
163
+ classNameSubtitleContainer
159
164
  }, ref) => {
165
+ const [isOpen, setIsOpen] = useState(false);
160
166
  const isMobile = useMediaQuery(EMediaQuery.XS1);
161
167
  const isLink = buttonType === "link";
162
168
  const linkClasses = {
@@ -206,7 +212,8 @@ const Accordion = forwardRef(
206
212
  className: classNames(
207
213
  cls["icon-container"],
208
214
  open2 && cls.open,
209
- cls[buttonStyle]
215
+ cls[buttonStyle],
216
+ classNameIconButton
210
217
  ),
211
218
  children: /* @__PURE__ */ jsx(Icon, { iconName: getIconName(), className: cls.icon })
212
219
  }
@@ -218,27 +225,51 @@ const Accordion = forwardRef(
218
225
  }
219
226
  }
220
227
  };
221
- return /* @__PURE__ */ jsx("div", { className: classNames(cls.accordion, cls[size], linkClasses), children: /* @__PURE__ */ jsx(We, { ref, children: ({ open: open2 }) => /* @__PURE__ */ jsxs(Fragment$1, { children: [
228
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [
222
229
  /* @__PURE__ */ jsx(
223
- Ce,
224
- {
225
- as: isLink ? Fragment : EAccordionButtonType.BUTTON,
226
- className: classNames({ [cls.header]: !isLink }),
227
- children: renderButton(open2)
228
- }
229
- ),
230
- /* @__PURE__ */ jsx(
231
- Ie,
230
+ "div",
232
231
  {
233
232
  className: classNames(
234
- cls.panel,
235
- classNameContent,
236
- linkClasses
233
+ cls.accordion,
234
+ cls[size],
235
+ linkClasses,
236
+ classNameAccordion
237
237
  ),
238
- children: /* @__PURE__ */ jsx(AccordionItem, { size, children })
238
+ children: /* @__PURE__ */ jsx(We, { ref, children: ({ open: open2 }) => {
239
+ if (open2 !== isOpen) {
240
+ setIsOpen(open2);
241
+ }
242
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [
243
+ /* @__PURE__ */ jsx(
244
+ Ce,
245
+ {
246
+ as: isLink ? Fragment : EAccordionButtonType.BUTTON,
247
+ className: classNames({
248
+ [cls.header]: !isLink
249
+ }),
250
+ children: renderButton(open2)
251
+ }
252
+ ),
253
+ /* @__PURE__ */ jsx(
254
+ Ie,
255
+ {
256
+ className: classNames(
257
+ cls.panel,
258
+ classNameContent,
259
+ linkClasses
260
+ ),
261
+ children: /* @__PURE__ */ jsx(AccordionItem, { size, children })
262
+ }
263
+ )
264
+ ] });
265
+ } })
239
266
  }
240
- )
241
- ] }) }) });
267
+ ),
268
+ (subtitleNode || onlyOpenSubtitleNode) && /* @__PURE__ */ jsxs("div", { className: classNameSubtitleContainer, children: [
269
+ subtitleNode,
270
+ isOpen && onlyOpenSubtitleNode
271
+ ] })
272
+ ] });
242
273
  }
243
274
  );
244
275
  export {
@@ -48,9 +48,13 @@ type TProps = {
48
48
  footer?: ReactNode | ((props: {
49
49
  handleClose: VoidFunction;
50
50
  }) => JSX.Element);
51
+ /**
52
+ * Дополнительный класс для inner.
53
+ */
54
+ classNameInner?: string;
51
55
  };
52
56
  /**
53
57
  * Компонент шторки, который может выезжать слева, справа или внизу.
54
58
  */
55
- export declare const Drawer: ({ isOpen, onClose, title, className, unmount, isLoading, stickyHeader, fullBottomHeight, position, paddingRight, footer, children }: PropsWithChildren<TProps>) => import("react/jsx-runtime").JSX.Element | null;
59
+ export declare const Drawer: ({ isOpen, onClose, title, className, unmount, isLoading, stickyHeader, fullBottomHeight, position, paddingRight, footer, children, classNameInner }: PropsWithChildren<TProps>) => import("react/jsx-runtime").JSX.Element | null;
56
60
  export {};
@@ -60,7 +60,8 @@ const Drawer = ({
60
60
  position = EDrawerPosition.RIGHT,
61
61
  paddingRight = 8,
62
62
  footer: footer2,
63
- children
63
+ children,
64
+ classNameInner
64
65
  }) => {
65
66
  const [isClosing, setIsClosing] = useState(false);
66
67
  const [isMounted, setIsMounted] = useState(false);
@@ -150,7 +151,7 @@ const Drawer = ({
150
151
  ]
151
152
  }
152
153
  ),
153
- /* @__PURE__ */ jsx("div", { className: cls.inner, children }),
154
+ /* @__PURE__ */ jsx("div", { className: classNames(cls.inner, classNameInner), children }),
154
155
  /* @__PURE__ */ jsx("footer", { className: cls.footer, children: typeof footer2 === "function" ? footer2({ handleClose }) : footer2 || /* @__PURE__ */ jsx(
155
156
  Button,
156
157
  {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mimir-ui-kit",
3
3
  "private": false,
4
- "version": "1.24.4",
4
+ "version": "1.26.0",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  ".": {