@infomaximum/ui-kit 0.17.4 → 0.18.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.
@@ -57,6 +57,18 @@ const getWrapperSolidStyle = (theme, color, disabled) => {
57
57
  colorStyle = getSolidColorStyle(buttonTokens.buttonDanger, buttonTokens.buttonDangerHover, buttonTokens.buttonDangerActive);
58
58
  break;
59
59
  }
60
+ case "warning": {
61
+ colorStyle = getSolidColorStyle(buttonTokens.buttonWarning, buttonTokens.buttonWarningHover, buttonTokens.buttonWarningActive);
62
+ break;
63
+ }
64
+ case "positive": {
65
+ colorStyle = getSolidColorStyle(buttonTokens.buttonPositive, buttonTokens.buttonPositiveHover, buttonTokens.buttonPositiveActive);
66
+ break;
67
+ }
68
+ case "info": {
69
+ colorStyle = getSolidColorStyle(buttonTokens.buttonInfo, buttonTokens.buttonInfoHover, buttonTokens.buttonInfoActive);
70
+ break;
71
+ }
60
72
  case "remove": {
61
73
  colorStyle = getSolidColorStyle(buttonTokens.buttonSolidDefaultBg, buttonTokens.buttonDangerHover, buttonTokens.buttonDangerActive);
62
74
  break;
@@ -93,6 +105,18 @@ const getWrapperOutlinedStyle = (theme, color, disabled, borderStyle = "solid")
93
105
  colorStyle = getOutlinedColorStyle(buttonTokens.buttonDanger, buttonTokens.buttonDanger, buttonTokens.buttonDangerHover, buttonTokens.buttonDangerActive, borderStyle);
94
106
  break;
95
107
  }
108
+ case "warning": {
109
+ colorStyle = getOutlinedColorStyle(buttonTokens.buttonWarning, buttonTokens.buttonWarning, buttonTokens.buttonWarningHover, buttonTokens.buttonWarningActive, borderStyle);
110
+ break;
111
+ }
112
+ case "positive": {
113
+ colorStyle = getOutlinedColorStyle(buttonTokens.buttonPositive, buttonTokens.buttonPositive, buttonTokens.buttonPositiveHover, buttonTokens.buttonPositiveActive, borderStyle);
114
+ break;
115
+ }
116
+ case "info": {
117
+ colorStyle = getOutlinedColorStyle(buttonTokens.buttonInfo, buttonTokens.buttonInfo, buttonTokens.buttonInfoHover, buttonTokens.buttonInfoActive, borderStyle);
118
+ break;
119
+ }
96
120
  case "remove": {
97
121
  colorStyle = getOutlinedColorStyle(buttonTokens.buttonDefaultBorder, buttonTokens.buttonDefaultText, buttonTokens.buttonDangerHover, buttonTokens.buttonDangerActive, borderStyle);
98
122
  break;
@@ -131,6 +155,18 @@ const getWrapperTextStyle = (theme, color, disabled) => {
131
155
  colorStyle = getTextColorStyle("none", buttonTokens.buttonTextDangerBgHover, buttonTokens.buttonTextDangerBgActive, buttonTokens.buttonDanger);
132
156
  break;
133
157
  }
158
+ case "warning": {
159
+ colorStyle = getTextColorStyle("none", buttonTokens.buttonTextWarningBgHover, buttonTokens.buttonTextWarningBgActive, buttonTokens.buttonWarning);
160
+ break;
161
+ }
162
+ case "positive": {
163
+ colorStyle = getTextColorStyle("none", buttonTokens.buttonTextPositiveBgHover, buttonTokens.buttonTextPositiveBgActive, buttonTokens.buttonPositive);
164
+ break;
165
+ }
166
+ case "info": {
167
+ colorStyle = getTextColorStyle("none", buttonTokens.buttonTextInfoBgHover, buttonTokens.buttonTextInfoBgActive, buttonTokens.buttonInfo);
168
+ break;
169
+ }
134
170
  case "remove": {
135
171
  colorStyle = getTextColorStyle("none", buttonTokens.buttonTextDefaultBgHover, buttonTokens.buttonTextDefaultBgActive, buttonTokens.buttonDefaultText, buttonTokens.buttonDanger);
136
172
  break;
@@ -6,6 +6,15 @@ export declare const getButtonTokens: (theme: Theme) => {
6
6
  buttonDanger: "#FF4D4F";
7
7
  buttonDangerHover: "#FF7875";
8
8
  buttonDangerActive: "#CF1322";
9
+ buttonWarning: "#FA8C16";
10
+ buttonWarningHover: "#FFA940";
11
+ buttonWarningActive: "#D46B08";
12
+ buttonPositive: "#52C41A";
13
+ buttonPositiveHover: "#73D13D";
14
+ buttonPositiveActive: "#389E0D";
15
+ buttonInfo: "#1677FF";
16
+ buttonInfoHover: "#4096FF";
17
+ buttonInfoActive: "#0958D9";
9
18
  buttonDefaultText: "#262626";
10
19
  buttonDefaultBorder: "#D9D9D9";
11
20
  buttonSolidText: "#FFFFFF";
@@ -19,6 +28,12 @@ export declare const getButtonTokens: (theme: Theme) => {
19
28
  buttonTextPrimaryBgActive: "#A3E6DD";
20
29
  buttonTextDangerBgHover: "#FFF1F0";
21
30
  buttonTextDangerBgActive: "#FFCCC7";
31
+ buttonTextWarningBgHover: "#FFF7E6";
32
+ buttonTextWarningBgActive: "#FFE7BA";
33
+ buttonTextPositiveBgHover: "#F6FFED";
34
+ buttonTextPositiveBgActive: "#D9F7BE";
35
+ buttonTextInfoBgHover: "#E6F4FF";
36
+ buttonTextInfoBgActive: "#BAE0FF";
22
37
  buttonDisabledText: "#8C8C8C";
23
38
  buttonDisabledBg: "#F0F0F0";
24
39
  buttonPaddingVertical: 4;
@@ -5,6 +5,15 @@ const getButtonTokens = (theme) => ({
5
5
  buttonDanger: theme.dangerBase,
6
6
  buttonDangerHover: theme.dangerHover,
7
7
  buttonDangerActive: theme.dangerActive,
8
+ buttonWarning: theme.warningBase,
9
+ buttonWarningHover: theme.warningHover,
10
+ buttonWarningActive: theme.warningActive,
11
+ buttonPositive: theme.positiveBase,
12
+ buttonPositiveHover: theme.positiveHover,
13
+ buttonPositiveActive: theme.positiveActive,
14
+ buttonInfo: theme.infoBase,
15
+ buttonInfoHover: theme.infoHover,
16
+ buttonInfoActive: theme.infoActive,
8
17
  buttonDefaultText: theme.textPrimary,
9
18
  buttonDefaultBorder: theme.lineBorder,
10
19
  buttonSolidText: theme.textContrast,
@@ -18,6 +27,12 @@ const getButtonTokens = (theme) => ({
18
27
  buttonTextPrimaryBgActive: theme.primaryActiveInverse,
19
28
  buttonTextDangerBgHover: theme.dangerHoverInverse,
20
29
  buttonTextDangerBgActive: theme.dangerActiveInverse,
30
+ buttonTextWarningBgHover: theme.warningHoverInverse,
31
+ buttonTextWarningBgActive: theme.warningActiveInverse,
32
+ buttonTextPositiveBgHover: theme.positiveHoverInverse,
33
+ buttonTextPositiveBgActive: theme.positiveActiveInverse,
34
+ buttonTextInfoBgHover: theme.infoHoverInverse,
35
+ buttonTextInfoBgActive: theme.infoActiveInverse,
21
36
  buttonDisabledText: theme.textDisabled,
22
37
  buttonDisabledBg: theme.bgContainerDisabled,
23
38
  buttonPaddingVertical: theme.x1,
@@ -3,7 +3,7 @@ import { ButtonHTMLAttributes, MouseEvent, ReactNode } from 'react';
3
3
  import { Theme } from '../../themes';
4
4
  import { TooltipProps } from '../Tooltip';
5
5
  export type ButtonVariant = "solid" | "outlined" | "dashed" | "text" | "link";
6
- export type ButtonColor = "default" | "primary" | "danger" | "remove";
6
+ export type ButtonColor = "default" | "primary" | "danger" | "warning" | "positive" | "info" | "remove";
7
7
  export type ButtonIconPosition = "start" | "end";
8
8
  export type ButtonType = "default" | "primary" | "dashed" | "text" | "link";
9
9
  export interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "type"> {
@@ -0,0 +1,2 @@
1
+ import { CollapseProps } from './Collapse.types';
2
+ export declare const Collapse: import('react').NamedExoticComponent<CollapseProps>;
@@ -0,0 +1,49 @@
1
+ import { jsx } from "@emotion/react/jsx-runtime";
2
+ import { memo, useMemo, useCallback } from "react";
3
+ import { getCollapseTokens } from "./Collapse.tokens.js";
4
+ import { getCollapseContainerStyle } from "./Collapse.styles.js";
5
+ import { CollapsePanel } from "./components/CollapsePanel/CollapsePanel.js";
6
+ import { useTheme } from "../../hooks/useTheme/useTheme.js";
7
+ import { useControlledState } from "../../hooks/useControlledState/useControlledState.js";
8
+ const normalizeKeys = (key) => {
9
+ if (key === void 0) return [];
10
+ return Array.isArray(key) ? key : [key];
11
+ };
12
+ const CollapseComponent = (props) => {
13
+ const {
14
+ items,
15
+ activeKey,
16
+ defaultActiveKey,
17
+ accordion = false,
18
+ bordered = true,
19
+ collapsible = "header",
20
+ expandIcon,
21
+ inline = false,
22
+ size = "middle",
23
+ onChange,
24
+ destroyOnHidden = false,
25
+ styles,
26
+ "test-id": testId
27
+ } = props;
28
+ const theme = useTheme();
29
+ const tokens = getCollapseTokens(theme);
30
+ const normalizedActiveKey = useMemo(() => activeKey !== void 0 ? normalizeKeys(activeKey) : void 0, [activeKey]);
31
+ const [activeKeys, setActiveKeys] = useControlledState(normalizeKeys(defaultActiveKey), normalizedActiveKey);
32
+ const handleToggle = useCallback((key) => {
33
+ if (collapsible === "disabled") return;
34
+ let newActiveKeys;
35
+ if (accordion) {
36
+ newActiveKeys = (activeKeys == null ? void 0 : activeKeys.includes(key)) ? [] : [key];
37
+ } else {
38
+ newActiveKeys = (activeKeys == null ? void 0 : activeKeys.includes(key)) ? activeKeys.filter((k) => k !== key) : [...activeKeys || [], key];
39
+ }
40
+ setActiveKeys(newActiveKeys);
41
+ onChange == null ? void 0 : onChange(newActiveKeys);
42
+ }, [activeKeys, accordion, collapsible, onChange, setActiveKeys]);
43
+ const effectiveInline = inline && !bordered;
44
+ return /* @__PURE__ */ jsx("div", { css: getCollapseContainerStyle(tokens, bordered, size)(theme), "test-id": testId, children: items.map((item, index) => /* @__PURE__ */ jsx(CollapsePanel, { item, isActive: (activeKeys == null ? void 0 : activeKeys.includes(item.key)) || false, isLast: index === items.length - 1, bordered, inline: effectiveInline, size, collapsible, expandIcon, destroyOnHidden, styles, onToggle: handleToggle }, item.key)) });
45
+ };
46
+ const Collapse = memo(CollapseComponent);
47
+ export {
48
+ Collapse
49
+ };
@@ -0,0 +1,16 @@
1
+ import { Theme } from '../../themes';
2
+ import { CollapseTokens } from './Collapse.tokens';
3
+ import { CollapseSize } from './Collapse.types';
4
+ export declare const getCollapseContainerStyle: (tokens: CollapseTokens, bordered: boolean, size: CollapseSize) => (theme: Theme) => {
5
+ "& > *:first-child > *:first-child": {
6
+ borderTopLeftRadius: 4 | 8;
7
+ borderTopRightRadius: 4 | 8;
8
+ };
9
+ border?: string | undefined;
10
+ color: "#262626";
11
+ width: string;
12
+ borderRadius: 4 | 8;
13
+ fontFamily: "Roboto";
14
+ fontSize: 14;
15
+ lineHeight: "20px";
16
+ };
@@ -0,0 +1,19 @@
1
+ const getCollapseContainerStyle = (tokens, bordered, size) => (theme) => {
2
+ const radius = size === "small" ? theme.borderRadiusM : theme.borderRadiusL;
3
+ return {
4
+ ...theme.typography.body2,
5
+ color: tokens.collapseText,
6
+ width: "100%",
7
+ borderRadius: radius,
8
+ ...bordered ? {
9
+ border: `1px solid ${tokens.collapseBorder}`
10
+ } : {},
11
+ "& > *:first-child > *:first-child": {
12
+ borderTopLeftRadius: radius,
13
+ borderTopRightRadius: radius
14
+ }
15
+ };
16
+ };
17
+ export {
18
+ getCollapseContainerStyle
19
+ };
@@ -0,0 +1,8 @@
1
+ import { Theme } from '../../themes';
2
+ export declare const getCollapseTokens: (theme: Theme) => {
3
+ readonly collapseText: "#262626";
4
+ readonly collapseBorder: "#D9D9D9";
5
+ readonly collapseBg: "#FFFFFF";
6
+ readonly collapseItemHeaderBgHover: `rgba(${number}, ${number}, ${number}, 0.08)`;
7
+ };
8
+ export type CollapseTokens = ReturnType<typeof getCollapseTokens>;
@@ -0,0 +1,9 @@
1
+ const getCollapseTokens = (theme) => ({
2
+ collapseText: theme.textPrimary,
3
+ collapseBorder: theme.lineBorder,
4
+ collapseBg: theme.bgContainer,
5
+ collapseItemHeaderBgHover: theme.bgContainerHover
6
+ });
7
+ export {
8
+ getCollapseTokens
9
+ };
@@ -0,0 +1,49 @@
1
+ import { CSSProperties, HTMLAttributes, ReactNode } from 'react';
2
+ import { Interpolation } from '@emotion/react';
3
+ import { Theme } from '../../themes';
4
+ import { CollapseTokens } from './Collapse.tokens';
5
+ export type GetStyle = (collapseTokens: CollapseTokens, theme: Theme) => Interpolation;
6
+ export type CollapseKey = string | number;
7
+ export type CollapseSize = "small" | "middle";
8
+ export type CollapseCollapsible = "header" | "icon" | "disabled";
9
+ export interface CollapseExpandIconProps {
10
+ isActive: boolean;
11
+ panelKey: CollapseKey;
12
+ }
13
+ export interface CollapseItemType extends Pick<HTMLAttributes<HTMLDivElement>, "onClick"> {
14
+ key: CollapseKey;
15
+ label: ReactNode;
16
+ children: ReactNode;
17
+ extra?: ReactNode;
18
+ showArrow?: boolean;
19
+ forceRender?: boolean;
20
+ styles?: {
21
+ header?: CSSProperties;
22
+ body?: CSSProperties;
23
+ };
24
+ }
25
+ export interface CollapseProps {
26
+ items: CollapseItemType[];
27
+ activeKey?: CollapseKey | CollapseKey[];
28
+ defaultActiveKey?: CollapseKey | CollapseKey[];
29
+ /** @default false */
30
+ accordion?: boolean;
31
+ /** @default true */
32
+ bordered?: boolean;
33
+ /** @default 'header' */
34
+ collapsible?: CollapseCollapsible;
35
+ expandIcon?: (props: CollapseExpandIconProps) => ReactNode;
36
+ /** @default false */
37
+ inline?: boolean;
38
+ /** @default 'middle' */
39
+ size?: CollapseSize;
40
+ onChange?: (key: CollapseKey[]) => void;
41
+ /** @default false */
42
+ destroyOnHidden?: boolean;
43
+ styles?: {
44
+ panelHeader?: GetStyle;
45
+ panelHeaderText?: GetStyle;
46
+ panelBody?: GetStyle;
47
+ };
48
+ "test-id"?: string;
49
+ }
@@ -0,0 +1,2 @@
1
+ import { CollapsePanelProps } from './CollapsePanel.types';
2
+ export declare const CollapsePanel: import('react').NamedExoticComponent<CollapsePanelProps>;
@@ -0,0 +1,86 @@
1
+ import { jsx, jsxs } from "@emotion/react/jsx-runtime";
2
+ import { memo, useRef } from "react";
3
+ import { CaretRightOutlined } from "@infomaximum/icons";
4
+ import { getCollapseTokens } from "../../Collapse.tokens.js";
5
+ import { getLastPanelEndStyle, getCollapsePanelHeaderStyle, getCollapsePanelIconStyle, collapsePanelLabelStyle, collapsePanelExtraStyle, getCollapsePanelBodyStyle } from "./CollapsePanel.styles.js";
6
+ import { useTheme } from "../../../../hooks/useTheme/useTheme.js";
7
+ const isActivationKey = (key) => key === "Enter" || key === " ";
8
+ const CollapsePanelComponent = (props) => {
9
+ var _a, _b, _c, _d, _e;
10
+ const {
11
+ item,
12
+ isActive,
13
+ isLast,
14
+ bordered,
15
+ inline,
16
+ size,
17
+ collapsible,
18
+ expandIcon,
19
+ destroyOnHidden,
20
+ styles,
21
+ onToggle
22
+ } = props;
23
+ const theme = useTheme();
24
+ const tokens = getCollapseTokens(theme);
25
+ const hasRenderedRef = useRef(item.forceRender ?? false);
26
+ if (isActive) hasRenderedRef.current = true;
27
+ const shouldRender = destroyOnHidden ? isActive : hasRenderedRef.current;
28
+ const lastPanelEndStyle = isLast ? getLastPanelEndStyle({
29
+ size,
30
+ bordered
31
+ })(theme) : void 0;
32
+ const handleHeaderClick = () => {
33
+ if (collapsible === "header") {
34
+ onToggle(item.key);
35
+ }
36
+ };
37
+ const handleHeaderKeyDown = (e) => {
38
+ if (collapsible === "header" && isActivationKey(e.key)) {
39
+ e.preventDefault();
40
+ onToggle(item.key);
41
+ }
42
+ };
43
+ const handleIconClick = (e) => {
44
+ if (collapsible === "icon") {
45
+ e.stopPropagation();
46
+ onToggle(item.key);
47
+ }
48
+ };
49
+ const handleIconKeyDown = (e) => {
50
+ if (collapsible === "icon" && isActivationKey(e.key)) {
51
+ e.preventDefault();
52
+ e.stopPropagation();
53
+ onToggle(item.key);
54
+ }
55
+ };
56
+ const iconNode = expandIcon ? expandIcon({
57
+ isActive,
58
+ panelKey: item.key
59
+ }) : /* @__PURE__ */ jsx(CaretRightOutlined, {});
60
+ const showArrow = item.showArrow !== false;
61
+ return /* @__PURE__ */ jsxs("div", { onClick: item.onClick, children: [
62
+ /* @__PURE__ */ jsxs("div", { css: [getCollapsePanelHeaderStyle({
63
+ tokens,
64
+ size,
65
+ bordered,
66
+ inline,
67
+ collapsible
68
+ })(theme), (_a = styles == null ? void 0 : styles.panelHeader) == null ? void 0 : _a.call(styles, tokens, theme), !isActive && lastPanelEndStyle, process.env.NODE_ENV === "production" ? "" : ";label:CollapsePanelComponent;", process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9idWlsZHMvZnJvbnRlbmQvbGlicy91aS1raXQvc3JjL2NvbXBvbmVudHMvQ29sbGFwc2UvY29tcG9uZW50cy9Db2xsYXBzZVBhbmVsL0NvbGxhcHNlUGFuZWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStFUSIsImZpbGUiOiIvYnVpbGRzL2Zyb250ZW5kL2xpYnMvdWkta2l0L3NyYy9jb21wb25lbnRzL0NvbGxhcHNlL2NvbXBvbmVudHMvQ29sbGFwc2VQYW5lbC9Db2xsYXBzZVBhbmVsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1lbW8sIHVzZVJlZiwgdHlwZSBGQywgdHlwZSBLZXlib2FyZEV2ZW50LCB0eXBlIE1vdXNlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENhcmV0UmlnaHRPdXRsaW5lZCB9IGZyb20gXCJAaW5mb21heGltdW0vaWNvbnNcIjtcbmltcG9ydCB7IHVzZVRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2hvb2tzL3VzZVRoZW1lXCI7XG5pbXBvcnQgeyBnZXRDb2xsYXBzZVRva2VucyB9IGZyb20gXCIuLi8uLi9Db2xsYXBzZS50b2tlbnNcIjtcbmltcG9ydCB0eXBlIHsgQ29sbGFwc2VQYW5lbFByb3BzIH0gZnJvbSBcIi4vQ29sbGFwc2VQYW5lbC50eXBlc1wiO1xuaW1wb3J0IHtcbiAgZ2V0TGFzdFBhbmVsRW5kU3R5bGUsXG4gIGdldENvbGxhcHNlUGFuZWxCb2R5U3R5bGUsXG4gIGdldENvbGxhcHNlUGFuZWxIZWFkZXJTdHlsZSxcbiAgZ2V0Q29sbGFwc2VQYW5lbEljb25TdHlsZSxcbiAgY29sbGFwc2VQYW5lbEV4dHJhU3R5bGUsXG4gIGNvbGxhcHNlUGFuZWxMYWJlbFN0eWxlLFxufSBmcm9tIFwiLi9Db2xsYXBzZVBhbmVsLnN0eWxlc1wiO1xuXG5jb25zdCBpc0FjdGl2YXRpb25LZXkgPSAoa2V5OiBzdHJpbmcpID0+IGtleSA9PT0gXCJFbnRlclwiIHx8IGtleSA9PT0gXCIgXCI7XG5cbmNvbnN0IENvbGxhcHNlUGFuZWxDb21wb25lbnQ6IEZDPENvbGxhcHNlUGFuZWxQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGl0ZW0sXG4gICAgaXNBY3RpdmUsXG4gICAgaXNMYXN0LFxuICAgIGJvcmRlcmVkLFxuICAgIGlubGluZSxcbiAgICBzaXplLFxuICAgIGNvbGxhcHNpYmxlLFxuICAgIGV4cGFuZEljb24sXG4gICAgZGVzdHJveU9uSGlkZGVuLFxuICAgIHN0eWxlcyxcbiAgICBvblRvZ2dsZSxcbiAgfSA9IHByb3BzO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IHRva2VucyA9IGdldENvbGxhcHNlVG9rZW5zKHRoZW1lKTtcblxuICBjb25zdCBoYXNSZW5kZXJlZFJlZiA9IHVzZVJlZihpdGVtLmZvcmNlUmVuZGVyID8/IGZhbHNlKTtcbiAgaWYgKGlzQWN0aXZlKSBoYXNSZW5kZXJlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcblxuICBjb25zdCBzaG91bGRSZW5kZXIgPSBkZXN0cm95T25IaWRkZW4gPyBpc0FjdGl2ZSA6IGhhc1JlbmRlcmVkUmVmLmN1cnJlbnQ7XG5cbiAgY29uc3QgbGFzdFBhbmVsRW5kU3R5bGUgPSBpc0xhc3QgPyBnZXRMYXN0UGFuZWxFbmRTdHlsZSh7IHNpemUsIGJvcmRlcmVkIH0pKHRoZW1lKSA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBoYW5kbGVIZWFkZXJDbGljayA9ICgpID0+IHtcbiAgICBpZiAoY29sbGFwc2libGUgPT09IFwiaGVhZGVyXCIpIHtcbiAgICAgIG9uVG9nZ2xlKGl0ZW0ua2V5KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlSGVhZGVyS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGlmIChjb2xsYXBzaWJsZSA9PT0gXCJoZWFkZXJcIiAmJiBpc0FjdGl2YXRpb25LZXkoZS5rZXkpKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBvblRvZ2dsZShpdGVtLmtleSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUljb25DbGljayA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKGNvbGxhcHNpYmxlID09PSBcImljb25cIikge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIG9uVG9nZ2xlKGl0ZW0ua2V5KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlSWNvbktleURvd24gPSAoZTogS2V5Ym9hcmRFdmVudDxIVE1MU3BhbkVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGNvbGxhcHNpYmxlID09PSBcImljb25cIiAmJiBpc0FjdGl2YXRpb25LZXkoZS5rZXkpKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgb25Ub2dnbGUoaXRlbS5rZXkpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBpY29uTm9kZSA9IGV4cGFuZEljb24gPyAoXG4gICAgZXhwYW5kSWNvbih7IGlzQWN0aXZlLCBwYW5lbEtleTogaXRlbS5rZXkgfSlcbiAgKSA6IChcbiAgICA8Q2FyZXRSaWdodE91dGxpbmVkIC8+XG4gICk7XG5cbiAgY29uc3Qgc2hvd0Fycm93ID0gaXRlbS5zaG93QXJyb3cgIT09IGZhbHNlO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBvbkNsaWNrPXtpdGVtLm9uQ2xpY2t9PlxuICAgICAgPGRpdlxuICAgICAgICBjc3M9e1tcbiAgICAgICAgICBnZXRDb2xsYXBzZVBhbmVsSGVhZGVyU3R5bGUoeyB0b2tlbnMsIHNpemUsIGJvcmRlcmVkLCBpbmxpbmUsIGNvbGxhcHNpYmxlIH0pKHRoZW1lKSxcbiAgICAgICAgICBzdHlsZXM/LnBhbmVsSGVhZGVyPy4odG9rZW5zLCB0aGVtZSksXG4gICAgICAgICAgIWlzQWN0aXZlICYmIGxhc3RQYW5lbEVuZFN0eWxlLFxuICAgICAgICBdfVxuICAgICAgICBzdHlsZT17aXRlbS5zdHlsZXM/LmhlYWRlcn1cbiAgICAgICAgcm9sZT17Y29sbGFwc2libGUgIT09IFwiZGlzYWJsZWRcIiA/IFwiYnV0dG9uXCIgOiB1bmRlZmluZWR9XG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9e2lzQWN0aXZlfVxuICAgICAgICBhcmlhLWRpc2FibGVkPXtjb2xsYXBzaWJsZSA9PT0gXCJkaXNhYmxlZFwiIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgdGFiSW5kZXg9e2NvbGxhcHNpYmxlID09PSBcImhlYWRlclwiID8gMCA6IHVuZGVmaW5lZH1cbiAgICAgICAgb25DbGljaz17aGFuZGxlSGVhZGVyQ2xpY2t9XG4gICAgICAgIG9uS2V5RG93bj17aGFuZGxlSGVhZGVyS2V5RG93bn1cbiAgICAgICAgdGVzdC1pZD17YGNvbGxhcHNlLXBhbmVsLWhlYWRlci0ke2l0ZW0ua2V5fWB9XG4gICAgICA+XG4gICAgICAgIHtzaG93QXJyb3cgJiYgKFxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjc3M9e2dldENvbGxhcHNlUGFuZWxJY29uU3R5bGUoaXNBY3RpdmUsIGNvbGxhcHNpYmxlKSh0aGVtZSl9XG4gICAgICAgICAgICByb2xlPXtjb2xsYXBzaWJsZSA9PT0gXCJpY29uXCIgPyBcImJ1dHRvblwiIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgdGFiSW5kZXg9e2NvbGxhcHNpYmxlID09PSBcImljb25cIiA/IDAgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVJY29uQ2xpY2t9XG4gICAgICAgICAgICBvbktleURvd249e2hhbmRsZUljb25LZXlEb3dufVxuICAgICAgICAgICAgdGVzdC1pZD17YGNvbGxhcHNlLXBhbmVsLWljb24tJHtpdGVtLmtleX1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtpY29uTm9kZX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICl9XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY3NzPXtbY29sbGFwc2VQYW5lbExhYmVsU3R5bGUsIHN0eWxlcz8ucGFuZWxIZWFkZXJUZXh0Py4odG9rZW5zLCB0aGVtZSldfVxuICAgICAgICAgIHRlc3QtaWQ9e2Bjb2xsYXBzZS1wYW5lbC1oZWFkZXItdGV4dC0ke2l0ZW0ua2V5fWB9XG4gICAgICAgID5cbiAgICAgICAgICB7aXRlbS5sYWJlbH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7aXRlbS5leHRyYSAhPT0gdW5kZWZpbmVkICYmIDxzcGFuIGNzcz17Y29sbGFwc2VQYW5lbEV4dHJhU3R5bGUodGhlbWUpfT57aXRlbS5leHRyYX08L3NwYW4+fVxuICAgICAgPC9kaXY+XG4gICAgICB7c2hvdWxkUmVuZGVyICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17W1xuICAgICAgICAgICAgZ2V0Q29sbGFwc2VQYW5lbEJvZHlTdHlsZSh7IHRva2Vucywgc2l6ZSwgYm9yZGVyZWQsIGlubGluZSB9KSh0aGVtZSksXG4gICAgICAgICAgICBzdHlsZXM/LnBhbmVsQm9keT8uKHRva2VucywgdGhlbWUpLFxuICAgICAgICAgICAgaXNBY3RpdmUgJiYgbGFzdFBhbmVsRW5kU3R5bGUsXG4gICAgICAgICAgICAhaXNBY3RpdmUgJiYgeyBkaXNwbGF5OiBcIm5vbmVcIiB9LFxuICAgICAgICAgIF19XG4gICAgICAgICAgc3R5bGU9e2l0ZW0uc3R5bGVzPy5ib2R5fVxuICAgICAgICAgIHRlc3QtaWQ9e2Bjb2xsYXBzZS1wYW5lbC1ib2R5LSR7aXRlbS5rZXl9YH1cbiAgICAgICAgPlxuICAgICAgICAgIHtpdGVtLmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgQ29sbGFwc2VQYW5lbCA9IG1lbW8oQ29sbGFwc2VQYW5lbENvbXBvbmVudCk7XG4iXX0= */"], style: (_b = item.styles) == null ? void 0 : _b.header, role: collapsible !== "disabled" ? "button" : void 0, "aria-expanded": isActive, "aria-disabled": collapsible === "disabled" || void 0, tabIndex: collapsible === "header" ? 0 : void 0, onClick: handleHeaderClick, onKeyDown: handleHeaderKeyDown, "test-id": `collapse-panel-header-${item.key}`, children: [
69
+ showArrow && /* @__PURE__ */ jsx("span", { css: getCollapsePanelIconStyle(isActive, collapsible)(theme), role: collapsible === "icon" ? "button" : void 0, tabIndex: collapsible === "icon" ? 0 : void 0, onClick: handleIconClick, onKeyDown: handleIconKeyDown, "test-id": `collapse-panel-icon-${item.key}`, children: iconNode }),
70
+ /* @__PURE__ */ jsx("span", { css: [collapsePanelLabelStyle, (_c = styles == null ? void 0 : styles.panelHeaderText) == null ? void 0 : _c.call(styles, tokens, theme), process.env.NODE_ENV === "production" ? "" : ";label:CollapsePanelComponent;", process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9idWlsZHMvZnJvbnRlbmQvbGlicy91aS1raXQvc3JjL2NvbXBvbmVudHMvQ29sbGFwc2UvY29tcG9uZW50cy9Db2xsYXBzZVBhbmVsL0NvbGxhcHNlUGFuZWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTBHVSIsImZpbGUiOiIvYnVpbGRzL2Zyb250ZW5kL2xpYnMvdWkta2l0L3NyYy9jb21wb25lbnRzL0NvbGxhcHNlL2NvbXBvbmVudHMvQ29sbGFwc2VQYW5lbC9Db2xsYXBzZVBhbmVsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1lbW8sIHVzZVJlZiwgdHlwZSBGQywgdHlwZSBLZXlib2FyZEV2ZW50LCB0eXBlIE1vdXNlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENhcmV0UmlnaHRPdXRsaW5lZCB9IGZyb20gXCJAaW5mb21heGltdW0vaWNvbnNcIjtcbmltcG9ydCB7IHVzZVRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2hvb2tzL3VzZVRoZW1lXCI7XG5pbXBvcnQgeyBnZXRDb2xsYXBzZVRva2VucyB9IGZyb20gXCIuLi8uLi9Db2xsYXBzZS50b2tlbnNcIjtcbmltcG9ydCB0eXBlIHsgQ29sbGFwc2VQYW5lbFByb3BzIH0gZnJvbSBcIi4vQ29sbGFwc2VQYW5lbC50eXBlc1wiO1xuaW1wb3J0IHtcbiAgZ2V0TGFzdFBhbmVsRW5kU3R5bGUsXG4gIGdldENvbGxhcHNlUGFuZWxCb2R5U3R5bGUsXG4gIGdldENvbGxhcHNlUGFuZWxIZWFkZXJTdHlsZSxcbiAgZ2V0Q29sbGFwc2VQYW5lbEljb25TdHlsZSxcbiAgY29sbGFwc2VQYW5lbEV4dHJhU3R5bGUsXG4gIGNvbGxhcHNlUGFuZWxMYWJlbFN0eWxlLFxufSBmcm9tIFwiLi9Db2xsYXBzZVBhbmVsLnN0eWxlc1wiO1xuXG5jb25zdCBpc0FjdGl2YXRpb25LZXkgPSAoa2V5OiBzdHJpbmcpID0+IGtleSA9PT0gXCJFbnRlclwiIHx8IGtleSA9PT0gXCIgXCI7XG5cbmNvbnN0IENvbGxhcHNlUGFuZWxDb21wb25lbnQ6IEZDPENvbGxhcHNlUGFuZWxQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGl0ZW0sXG4gICAgaXNBY3RpdmUsXG4gICAgaXNMYXN0LFxuICAgIGJvcmRlcmVkLFxuICAgIGlubGluZSxcbiAgICBzaXplLFxuICAgIGNvbGxhcHNpYmxlLFxuICAgIGV4cGFuZEljb24sXG4gICAgZGVzdHJveU9uSGlkZGVuLFxuICAgIHN0eWxlcyxcbiAgICBvblRvZ2dsZSxcbiAgfSA9IHByb3BzO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IHRva2VucyA9IGdldENvbGxhcHNlVG9rZW5zKHRoZW1lKTtcblxuICBjb25zdCBoYXNSZW5kZXJlZFJlZiA9IHVzZVJlZihpdGVtLmZvcmNlUmVuZGVyID8/IGZhbHNlKTtcbiAgaWYgKGlzQWN0aXZlKSBoYXNSZW5kZXJlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcblxuICBjb25zdCBzaG91bGRSZW5kZXIgPSBkZXN0cm95T25IaWRkZW4gPyBpc0FjdGl2ZSA6IGhhc1JlbmRlcmVkUmVmLmN1cnJlbnQ7XG5cbiAgY29uc3QgbGFzdFBhbmVsRW5kU3R5bGUgPSBpc0xhc3QgPyBnZXRMYXN0UGFuZWxFbmRTdHlsZSh7IHNpemUsIGJvcmRlcmVkIH0pKHRoZW1lKSA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBoYW5kbGVIZWFkZXJDbGljayA9ICgpID0+IHtcbiAgICBpZiAoY29sbGFwc2libGUgPT09IFwiaGVhZGVyXCIpIHtcbiAgICAgIG9uVG9nZ2xlKGl0ZW0ua2V5KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlSGVhZGVyS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGlmIChjb2xsYXBzaWJsZSA9PT0gXCJoZWFkZXJcIiAmJiBpc0FjdGl2YXRpb25LZXkoZS5rZXkpKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBvblRvZ2dsZShpdGVtLmtleSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUljb25DbGljayA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKGNvbGxhcHNpYmxlID09PSBcImljb25cIikge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIG9uVG9nZ2xlKGl0ZW0ua2V5KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlSWNvbktleURvd24gPSAoZTogS2V5Ym9hcmRFdmVudDxIVE1MU3BhbkVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGNvbGxhcHNpYmxlID09PSBcImljb25cIiAmJiBpc0FjdGl2YXRpb25LZXkoZS5rZXkpKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgb25Ub2dnbGUoaXRlbS5rZXkpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBpY29uTm9kZSA9IGV4cGFuZEljb24gPyAoXG4gICAgZXhwYW5kSWNvbih7IGlzQWN0aXZlLCBwYW5lbEtleTogaXRlbS5rZXkgfSlcbiAgKSA6IChcbiAgICA8Q2FyZXRSaWdodE91dGxpbmVkIC8+XG4gICk7XG5cbiAgY29uc3Qgc2hvd0Fycm93ID0gaXRlbS5zaG93QXJyb3cgIT09IGZhbHNlO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBvbkNsaWNrPXtpdGVtLm9uQ2xpY2t9PlxuICAgICAgPGRpdlxuICAgICAgICBjc3M9e1tcbiAgICAgICAgICBnZXRDb2xsYXBzZVBhbmVsSGVhZGVyU3R5bGUoeyB0b2tlbnMsIHNpemUsIGJvcmRlcmVkLCBpbmxpbmUsIGNvbGxhcHNpYmxlIH0pKHRoZW1lKSxcbiAgICAgICAgICBzdHlsZXM/LnBhbmVsSGVhZGVyPy4odG9rZW5zLCB0aGVtZSksXG4gICAgICAgICAgIWlzQWN0aXZlICYmIGxhc3RQYW5lbEVuZFN0eWxlLFxuICAgICAgICBdfVxuICAgICAgICBzdHlsZT17aXRlbS5zdHlsZXM/LmhlYWRlcn1cbiAgICAgICAgcm9sZT17Y29sbGFwc2libGUgIT09IFwiZGlzYWJsZWRcIiA/IFwiYnV0dG9uXCIgOiB1bmRlZmluZWR9XG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9e2lzQWN0aXZlfVxuICAgICAgICBhcmlhLWRpc2FibGVkPXtjb2xsYXBzaWJsZSA9PT0gXCJkaXNhYmxlZFwiIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgdGFiSW5kZXg9e2NvbGxhcHNpYmxlID09PSBcImhlYWRlclwiID8gMCA6IHVuZGVmaW5lZH1cbiAgICAgICAgb25DbGljaz17aGFuZGxlSGVhZGVyQ2xpY2t9XG4gICAgICAgIG9uS2V5RG93bj17aGFuZGxlSGVhZGVyS2V5RG93bn1cbiAgICAgICAgdGVzdC1pZD17YGNvbGxhcHNlLXBhbmVsLWhlYWRlci0ke2l0ZW0ua2V5fWB9XG4gICAgICA+XG4gICAgICAgIHtzaG93QXJyb3cgJiYgKFxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjc3M9e2dldENvbGxhcHNlUGFuZWxJY29uU3R5bGUoaXNBY3RpdmUsIGNvbGxhcHNpYmxlKSh0aGVtZSl9XG4gICAgICAgICAgICByb2xlPXtjb2xsYXBzaWJsZSA9PT0gXCJpY29uXCIgPyBcImJ1dHRvblwiIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgdGFiSW5kZXg9e2NvbGxhcHNpYmxlID09PSBcImljb25cIiA/IDAgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVJY29uQ2xpY2t9XG4gICAgICAgICAgICBvbktleURvd249e2hhbmRsZUljb25LZXlEb3dufVxuICAgICAgICAgICAgdGVzdC1pZD17YGNvbGxhcHNlLXBhbmVsLWljb24tJHtpdGVtLmtleX1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtpY29uTm9kZX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICl9XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY3NzPXtbY29sbGFwc2VQYW5lbExhYmVsU3R5bGUsIHN0eWxlcz8ucGFuZWxIZWFkZXJUZXh0Py4odG9rZW5zLCB0aGVtZSldfVxuICAgICAgICAgIHRlc3QtaWQ9e2Bjb2xsYXBzZS1wYW5lbC1oZWFkZXItdGV4dC0ke2l0ZW0ua2V5fWB9XG4gICAgICAgID5cbiAgICAgICAgICB7aXRlbS5sYWJlbH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7aXRlbS5leHRyYSAhPT0gdW5kZWZpbmVkICYmIDxzcGFuIGNzcz17Y29sbGFwc2VQYW5lbEV4dHJhU3R5bGUodGhlbWUpfT57aXRlbS5leHRyYX08L3NwYW4+fVxuICAgICAgPC9kaXY+XG4gICAgICB7c2hvdWxkUmVuZGVyICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17W1xuICAgICAgICAgICAgZ2V0Q29sbGFwc2VQYW5lbEJvZHlTdHlsZSh7IHRva2Vucywgc2l6ZSwgYm9yZGVyZWQsIGlubGluZSB9KSh0aGVtZSksXG4gICAgICAgICAgICBzdHlsZXM/LnBhbmVsQm9keT8uKHRva2VucywgdGhlbWUpLFxuICAgICAgICAgICAgaXNBY3RpdmUgJiYgbGFzdFBhbmVsRW5kU3R5bGUsXG4gICAgICAgICAgICAhaXNBY3RpdmUgJiYgeyBkaXNwbGF5OiBcIm5vbmVcIiB9LFxuICAgICAgICAgIF19XG4gICAgICAgICAgc3R5bGU9e2l0ZW0uc3R5bGVzPy5ib2R5fVxuICAgICAgICAgIHRlc3QtaWQ9e2Bjb2xsYXBzZS1wYW5lbC1ib2R5LSR7aXRlbS5rZXl9YH1cbiAgICAgICAgPlxuICAgICAgICAgIHtpdGVtLmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgQ29sbGFwc2VQYW5lbCA9IG1lbW8oQ29sbGFwc2VQYW5lbENvbXBvbmVudCk7XG4iXX0= */"], "test-id": `collapse-panel-header-text-${item.key}`, children: item.label }),
71
+ item.extra !== void 0 && /* @__PURE__ */ jsx("span", { css: collapsePanelExtraStyle(theme), children: item.extra })
72
+ ] }),
73
+ shouldRender && /* @__PURE__ */ jsx("div", { css: [getCollapsePanelBodyStyle({
74
+ tokens,
75
+ size,
76
+ bordered,
77
+ inline
78
+ })(theme), (_d = styles == null ? void 0 : styles.panelBody) == null ? void 0 : _d.call(styles, tokens, theme), isActive && lastPanelEndStyle, !isActive && {
79
+ display: "none"
80
+ }, process.env.NODE_ENV === "production" ? "" : ";label:CollapsePanelComponent;", process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9idWlsZHMvZnJvbnRlbmQvbGlicy91aS1raXQvc3JjL2NvbXBvbmVudHMvQ29sbGFwc2UvY29tcG9uZW50cy9Db2xsYXBzZVBhbmVsL0NvbGxhcHNlUGFuZWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1IVSIsImZpbGUiOiIvYnVpbGRzL2Zyb250ZW5kL2xpYnMvdWkta2l0L3NyYy9jb21wb25lbnRzL0NvbGxhcHNlL2NvbXBvbmVudHMvQ29sbGFwc2VQYW5lbC9Db2xsYXBzZVBhbmVsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1lbW8sIHVzZVJlZiwgdHlwZSBGQywgdHlwZSBLZXlib2FyZEV2ZW50LCB0eXBlIE1vdXNlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENhcmV0UmlnaHRPdXRsaW5lZCB9IGZyb20gXCJAaW5mb21heGltdW0vaWNvbnNcIjtcbmltcG9ydCB7IHVzZVRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2hvb2tzL3VzZVRoZW1lXCI7XG5pbXBvcnQgeyBnZXRDb2xsYXBzZVRva2VucyB9IGZyb20gXCIuLi8uLi9Db2xsYXBzZS50b2tlbnNcIjtcbmltcG9ydCB0eXBlIHsgQ29sbGFwc2VQYW5lbFByb3BzIH0gZnJvbSBcIi4vQ29sbGFwc2VQYW5lbC50eXBlc1wiO1xuaW1wb3J0IHtcbiAgZ2V0TGFzdFBhbmVsRW5kU3R5bGUsXG4gIGdldENvbGxhcHNlUGFuZWxCb2R5U3R5bGUsXG4gIGdldENvbGxhcHNlUGFuZWxIZWFkZXJTdHlsZSxcbiAgZ2V0Q29sbGFwc2VQYW5lbEljb25TdHlsZSxcbiAgY29sbGFwc2VQYW5lbEV4dHJhU3R5bGUsXG4gIGNvbGxhcHNlUGFuZWxMYWJlbFN0eWxlLFxufSBmcm9tIFwiLi9Db2xsYXBzZVBhbmVsLnN0eWxlc1wiO1xuXG5jb25zdCBpc0FjdGl2YXRpb25LZXkgPSAoa2V5OiBzdHJpbmcpID0+IGtleSA9PT0gXCJFbnRlclwiIHx8IGtleSA9PT0gXCIgXCI7XG5cbmNvbnN0IENvbGxhcHNlUGFuZWxDb21wb25lbnQ6IEZDPENvbGxhcHNlUGFuZWxQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGl0ZW0sXG4gICAgaXNBY3RpdmUsXG4gICAgaXNMYXN0LFxuICAgIGJvcmRlcmVkLFxuICAgIGlubGluZSxcbiAgICBzaXplLFxuICAgIGNvbGxhcHNpYmxlLFxuICAgIGV4cGFuZEljb24sXG4gICAgZGVzdHJveU9uSGlkZGVuLFxuICAgIHN0eWxlcyxcbiAgICBvblRvZ2dsZSxcbiAgfSA9IHByb3BzO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IHRva2VucyA9IGdldENvbGxhcHNlVG9rZW5zKHRoZW1lKTtcblxuICBjb25zdCBoYXNSZW5kZXJlZFJlZiA9IHVzZVJlZihpdGVtLmZvcmNlUmVuZGVyID8/IGZhbHNlKTtcbiAgaWYgKGlzQWN0aXZlKSBoYXNSZW5kZXJlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcblxuICBjb25zdCBzaG91bGRSZW5kZXIgPSBkZXN0cm95T25IaWRkZW4gPyBpc0FjdGl2ZSA6IGhhc1JlbmRlcmVkUmVmLmN1cnJlbnQ7XG5cbiAgY29uc3QgbGFzdFBhbmVsRW5kU3R5bGUgPSBpc0xhc3QgPyBnZXRMYXN0UGFuZWxFbmRTdHlsZSh7IHNpemUsIGJvcmRlcmVkIH0pKHRoZW1lKSA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBoYW5kbGVIZWFkZXJDbGljayA9ICgpID0+IHtcbiAgICBpZiAoY29sbGFwc2libGUgPT09IFwiaGVhZGVyXCIpIHtcbiAgICAgIG9uVG9nZ2xlKGl0ZW0ua2V5KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlSGVhZGVyS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGlmIChjb2xsYXBzaWJsZSA9PT0gXCJoZWFkZXJcIiAmJiBpc0FjdGl2YXRpb25LZXkoZS5rZXkpKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBvblRvZ2dsZShpdGVtLmtleSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUljb25DbGljayA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKGNvbGxhcHNpYmxlID09PSBcImljb25cIikge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIG9uVG9nZ2xlKGl0ZW0ua2V5KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlSWNvbktleURvd24gPSAoZTogS2V5Ym9hcmRFdmVudDxIVE1MU3BhbkVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGNvbGxhcHNpYmxlID09PSBcImljb25cIiAmJiBpc0FjdGl2YXRpb25LZXkoZS5rZXkpKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgb25Ub2dnbGUoaXRlbS5rZXkpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBpY29uTm9kZSA9IGV4cGFuZEljb24gPyAoXG4gICAgZXhwYW5kSWNvbih7IGlzQWN0aXZlLCBwYW5lbEtleTogaXRlbS5rZXkgfSlcbiAgKSA6IChcbiAgICA8Q2FyZXRSaWdodE91dGxpbmVkIC8+XG4gICk7XG5cbiAgY29uc3Qgc2hvd0Fycm93ID0gaXRlbS5zaG93QXJyb3cgIT09IGZhbHNlO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBvbkNsaWNrPXtpdGVtLm9uQ2xpY2t9PlxuICAgICAgPGRpdlxuICAgICAgICBjc3M9e1tcbiAgICAgICAgICBnZXRDb2xsYXBzZVBhbmVsSGVhZGVyU3R5bGUoeyB0b2tlbnMsIHNpemUsIGJvcmRlcmVkLCBpbmxpbmUsIGNvbGxhcHNpYmxlIH0pKHRoZW1lKSxcbiAgICAgICAgICBzdHlsZXM/LnBhbmVsSGVhZGVyPy4odG9rZW5zLCB0aGVtZSksXG4gICAgICAgICAgIWlzQWN0aXZlICYmIGxhc3RQYW5lbEVuZFN0eWxlLFxuICAgICAgICBdfVxuICAgICAgICBzdHlsZT17aXRlbS5zdHlsZXM/LmhlYWRlcn1cbiAgICAgICAgcm9sZT17Y29sbGFwc2libGUgIT09IFwiZGlzYWJsZWRcIiA/IFwiYnV0dG9uXCIgOiB1bmRlZmluZWR9XG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9e2lzQWN0aXZlfVxuICAgICAgICBhcmlhLWRpc2FibGVkPXtjb2xsYXBzaWJsZSA9PT0gXCJkaXNhYmxlZFwiIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgdGFiSW5kZXg9e2NvbGxhcHNpYmxlID09PSBcImhlYWRlclwiID8gMCA6IHVuZGVmaW5lZH1cbiAgICAgICAgb25DbGljaz17aGFuZGxlSGVhZGVyQ2xpY2t9XG4gICAgICAgIG9uS2V5RG93bj17aGFuZGxlSGVhZGVyS2V5RG93bn1cbiAgICAgICAgdGVzdC1pZD17YGNvbGxhcHNlLXBhbmVsLWhlYWRlci0ke2l0ZW0ua2V5fWB9XG4gICAgICA+XG4gICAgICAgIHtzaG93QXJyb3cgJiYgKFxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjc3M9e2dldENvbGxhcHNlUGFuZWxJY29uU3R5bGUoaXNBY3RpdmUsIGNvbGxhcHNpYmxlKSh0aGVtZSl9XG4gICAgICAgICAgICByb2xlPXtjb2xsYXBzaWJsZSA9PT0gXCJpY29uXCIgPyBcImJ1dHRvblwiIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgdGFiSW5kZXg9e2NvbGxhcHNpYmxlID09PSBcImljb25cIiA/IDAgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVJY29uQ2xpY2t9XG4gICAgICAgICAgICBvbktleURvd249e2hhbmRsZUljb25LZXlEb3dufVxuICAgICAgICAgICAgdGVzdC1pZD17YGNvbGxhcHNlLXBhbmVsLWljb24tJHtpdGVtLmtleX1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtpY29uTm9kZX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICl9XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY3NzPXtbY29sbGFwc2VQYW5lbExhYmVsU3R5bGUsIHN0eWxlcz8ucGFuZWxIZWFkZXJUZXh0Py4odG9rZW5zLCB0aGVtZSldfVxuICAgICAgICAgIHRlc3QtaWQ9e2Bjb2xsYXBzZS1wYW5lbC1oZWFkZXItdGV4dC0ke2l0ZW0ua2V5fWB9XG4gICAgICAgID5cbiAgICAgICAgICB7aXRlbS5sYWJlbH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7aXRlbS5leHRyYSAhPT0gdW5kZWZpbmVkICYmIDxzcGFuIGNzcz17Y29sbGFwc2VQYW5lbEV4dHJhU3R5bGUodGhlbWUpfT57aXRlbS5leHRyYX08L3NwYW4+fVxuICAgICAgPC9kaXY+XG4gICAgICB7c2hvdWxkUmVuZGVyICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17W1xuICAgICAgICAgICAgZ2V0Q29sbGFwc2VQYW5lbEJvZHlTdHlsZSh7IHRva2Vucywgc2l6ZSwgYm9yZGVyZWQsIGlubGluZSB9KSh0aGVtZSksXG4gICAgICAgICAgICBzdHlsZXM/LnBhbmVsQm9keT8uKHRva2VucywgdGhlbWUpLFxuICAgICAgICAgICAgaXNBY3RpdmUgJiYgbGFzdFBhbmVsRW5kU3R5bGUsXG4gICAgICAgICAgICAhaXNBY3RpdmUgJiYgeyBkaXNwbGF5OiBcIm5vbmVcIiB9LFxuICAgICAgICAgIF19XG4gICAgICAgICAgc3R5bGU9e2l0ZW0uc3R5bGVzPy5ib2R5fVxuICAgICAgICAgIHRlc3QtaWQ9e2Bjb2xsYXBzZS1wYW5lbC1ib2R5LSR7aXRlbS5rZXl9YH1cbiAgICAgICAgPlxuICAgICAgICAgIHtpdGVtLmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgQ29sbGFwc2VQYW5lbCA9IG1lbW8oQ29sbGFwc2VQYW5lbENvbXBvbmVudCk7XG4iXX0= */"], style: (_e = item.styles) == null ? void 0 : _e.body, "test-id": `collapse-panel-body-${item.key}`, children: item.children })
81
+ ] });
82
+ };
83
+ const CollapsePanel = memo(CollapsePanelComponent);
84
+ export {
85
+ CollapsePanel
86
+ };
@@ -0,0 +1,87 @@
1
+ import { Theme } from '../../../../themes';
2
+ import { CollapseTokens } from '../../Collapse.tokens';
3
+ import { CollapseCollapsible, CollapseSize } from '../../Collapse.types';
4
+ export declare const getLastPanelEndStyle: ({ size, bordered }: {
5
+ size: CollapseSize;
6
+ bordered: boolean;
7
+ }) => (theme: Theme) => {
8
+ borderBottom?: string | undefined;
9
+ paddingBlockEnd?: 4 | 8 | undefined;
10
+ borderBottomLeftRadius: 4 | 8;
11
+ borderBottomRightRadius: 4 | 8;
12
+ };
13
+ export declare const getCollapsePanelHeaderStyle: ({ tokens, size, bordered, inline, collapsible, }: {
14
+ tokens: CollapseTokens;
15
+ size: CollapseSize;
16
+ bordered: boolean;
17
+ inline: boolean;
18
+ collapsible: CollapseCollapsible;
19
+ }) => (theme: Theme) => {
20
+ ":hover"?: {
21
+ backgroundColor: `rgba(${number}, ${number}, ${number}, 0.08)`;
22
+ } | undefined;
23
+ gap: 8 | 12;
24
+ backgroundColor: "#FFFFFF";
25
+ cursor: string;
26
+ userSelect: "none";
27
+ borderBottom?: string | undefined;
28
+ paddingBlockStart: 4 | 8;
29
+ paddingBlockEnd: number;
30
+ paddingInline: number;
31
+ fontFamily: "Roboto";
32
+ fontSize: 14;
33
+ lineHeight: "20px";
34
+ display: string;
35
+ alignItems: string;
36
+ } | {
37
+ ":hover"?: {
38
+ backgroundColor: `rgba(${number}, ${number}, ${number}, 0.08)`;
39
+ } | undefined;
40
+ gap: 8 | 12;
41
+ backgroundColor: "#FFFFFF";
42
+ cursor: string;
43
+ userSelect: "none";
44
+ borderBottom?: string | undefined;
45
+ paddingBlockStart: 4 | 8;
46
+ paddingBlockEnd: number;
47
+ paddingInline: number;
48
+ fontFamily: "Roboto";
49
+ fontSize: 12;
50
+ lineHeight: "20px";
51
+ display: string;
52
+ alignItems: string;
53
+ };
54
+ export declare const collapsePanelLabelStyle: {
55
+ flex: number;
56
+ minWidth: number;
57
+ overflow: "hidden";
58
+ textOverflow: "ellipsis";
59
+ whiteSpace: "nowrap";
60
+ };
61
+ export declare const collapsePanelExtraStyle: (theme: Theme) => {
62
+ display: string;
63
+ alignItems: string;
64
+ flexShrink: number;
65
+ fontSize: 16;
66
+ };
67
+ export declare const getCollapsePanelIconStyle: (isActive: boolean, collapsible: CollapseCollapsible) => (theme: Theme) => {
68
+ cursor?: string | undefined;
69
+ display: string;
70
+ alignItems: string;
71
+ fontSize: 12;
72
+ lineHeight: number;
73
+ flexShrink: number;
74
+ transform: string;
75
+ };
76
+ export declare const getCollapsePanelBodyStyle: ({ tokens, size, bordered, inline, }: {
77
+ tokens: CollapseTokens;
78
+ size: CollapseSize;
79
+ bordered: boolean;
80
+ inline: boolean;
81
+ }) => (theme: Theme) => {
82
+ backgroundColor: string;
83
+ borderBottom?: string | undefined;
84
+ paddingBlockStart: 4 | 8;
85
+ paddingBlockEnd: number;
86
+ paddingInline: number;
87
+ };
@@ -0,0 +1,102 @@
1
+ const getPanelSectionCommonStyle = ({
2
+ size,
3
+ bordered,
4
+ inline,
5
+ tokens,
6
+ theme
7
+ }) => ({
8
+ paddingBlockStart: size === "small" ? theme.x1 : theme.x2,
9
+ paddingBlockEnd: (size === "small" ? theme.x1 : theme.x2) - (bordered ? 1 : 0),
10
+ paddingInline: inline ? 0 : size === "small" ? theme.x2 : theme.x3,
11
+ ...bordered ? {
12
+ borderBottom: `1px solid ${tokens.collapseBorder}`
13
+ } : {}
14
+ });
15
+ const getLastPanelEndStyle = ({
16
+ size,
17
+ bordered
18
+ }) => (theme) => {
19
+ const radius = size === "small" ? theme.borderRadiusM : theme.borderRadiusL;
20
+ return {
21
+ borderBottomLeftRadius: radius,
22
+ borderBottomRightRadius: radius,
23
+ ...bordered ? {
24
+ borderBottom: "none",
25
+ paddingBlockEnd: size === "small" ? theme.x1 : theme.x2
26
+ } : {}
27
+ };
28
+ };
29
+ const getCollapsePanelHeaderStyle = ({
30
+ tokens,
31
+ size,
32
+ bordered,
33
+ inline,
34
+ collapsible
35
+ }) => (theme) => ({
36
+ display: "flex",
37
+ alignItems: "center",
38
+ ...size === "small" ? theme.typography.body3 : theme.typography.body2,
39
+ ...getPanelSectionCommonStyle({
40
+ size,
41
+ bordered,
42
+ inline,
43
+ tokens,
44
+ theme
45
+ }),
46
+ gap: size === "small" ? theme.spaceM : theme.spaceL,
47
+ backgroundColor: tokens.collapseBg,
48
+ cursor: collapsible === "header" ? "pointer" : collapsible === "disabled" ? "not-allowed" : "default",
49
+ userSelect: "none",
50
+ ...collapsible === "header" ? {
51
+ ":hover": {
52
+ backgroundColor: tokens.collapseItemHeaderBgHover
53
+ }
54
+ } : {}
55
+ });
56
+ const collapsePanelLabelStyle = {
57
+ flex: 1,
58
+ minWidth: 0,
59
+ overflow: "hidden",
60
+ textOverflow: "ellipsis",
61
+ whiteSpace: "nowrap"
62
+ };
63
+ const collapsePanelExtraStyle = (theme) => ({
64
+ display: "flex",
65
+ alignItems: "center",
66
+ flexShrink: 0,
67
+ fontSize: theme.iconM
68
+ });
69
+ const getCollapsePanelIconStyle = (isActive, collapsible) => (theme) => ({
70
+ display: "flex",
71
+ alignItems: "center",
72
+ fontSize: theme.iconS,
73
+ lineHeight: 1,
74
+ flexShrink: 0,
75
+ transform: isActive ? "rotate(90deg)" : "rotate(0deg)",
76
+ ...collapsible === "icon" ? {
77
+ cursor: "pointer"
78
+ } : {}
79
+ });
80
+ const getCollapsePanelBodyStyle = ({
81
+ tokens,
82
+ size,
83
+ bordered,
84
+ inline
85
+ }) => (theme) => ({
86
+ ...getPanelSectionCommonStyle({
87
+ size,
88
+ bordered,
89
+ inline,
90
+ tokens,
91
+ theme
92
+ }),
93
+ backgroundColor: bordered ? tokens.collapseBg : "transparent"
94
+ });
95
+ export {
96
+ collapsePanelExtraStyle,
97
+ collapsePanelLabelStyle,
98
+ getCollapsePanelBodyStyle,
99
+ getCollapsePanelHeaderStyle,
100
+ getCollapsePanelIconStyle,
101
+ getLastPanelEndStyle
102
+ };
@@ -0,0 +1,7 @@
1
+ import { CollapseItemType, CollapseKey, CollapseProps } from '../../Collapse.types';
2
+ export interface CollapsePanelProps extends Required<Pick<CollapseProps, "bordered" | "inline" | "size" | "collapsible">>, Pick<CollapseProps, "expandIcon" | "styles" | "destroyOnHidden"> {
3
+ item: CollapseItemType;
4
+ isActive: boolean;
5
+ isLast: boolean;
6
+ onToggle: (key: CollapseKey) => void;
7
+ }
@@ -0,0 +1,2 @@
1
+ export { Collapse } from './Collapse';
2
+ export type { CollapseProps, CollapseItemType, CollapseKey, CollapseExpandIconProps, } from './Collapse.types';
package/dist/index.d.ts CHANGED
@@ -50,4 +50,5 @@ export { type SegmentedProps, type SegmentedLabeledOption, Segmented, } from './
50
50
  export { ContextIsolator } from './components/ContextIsolator';
51
51
  export { type SpinProps, Spin } from './components/Spin';
52
52
  export { type TableProps, type DefaultRecord, type RenderFn, type Column, type ColumnWithChildren, Table, } from './components/Table';
53
+ export { Collapse, type CollapseProps, type CollapseItemType, type CollapseKey, type CollapseExpandIconProps, } from './components/Collapse';
53
54
  export * from 'react-intersection-observer/test-utils';
package/dist/index.js CHANGED
@@ -39,12 +39,14 @@ import { Segmented } from "./components/Segmented/Segmented.js";
39
39
  import { ContextIsolator } from "./components/ContextIsolator/ContextIsolator.js";
40
40
  import { Spin } from "./components/Spin/Spin.js";
41
41
  import { Table } from "./components/Table/Table.js";
42
+ import { Collapse } from "./components/Collapse/Collapse.js";
42
43
  export {
43
44
  Alert,
44
45
  Avatar,
45
46
  Breadcrumb,
46
47
  Button,
47
48
  Checkbox,
49
+ Collapse,
48
50
  ConfigProvider,
49
51
  ContextIsolator,
50
52
  DatePicker,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@infomaximum/ui-kit",
3
3
  "license": "Apache-2.0",
4
- "version": "0.17.4",
4
+ "version": "0.18.0",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.js",