@salutejs/plasma-new-hope 0.171.0-canary.1492.11402523696.0 → 0.171.0-dev.0
Sign up to get free protection for your applications and to get access to all the features.
- package/cjs/components/Accordion/ui/AccordionItem/AccordionItem.js +19 -13
- package/cjs/components/Accordion/ui/AccordionItem/AccordionItem.js.map +1 -1
- package/cjs/components/TextArea/TextArea.js +1 -1
- package/cjs/components/TextArea/TextArea.js.map +1 -1
- package/cjs/components/TextArea/hooks/useAutoResize.js +2 -2
- package/cjs/components/TextArea/hooks/useAutoResize.js.map +1 -1
- package/emotion/cjs/components/Accordion/Accordion.template-doc.mdx +32 -0
- package/emotion/cjs/components/Accordion/ui/AccordionItem/AccordionItem.js +19 -13
- package/emotion/cjs/components/TextArea/TextArea.js +2 -2
- package/emotion/cjs/components/TextArea/hooks/useAutoResize.js +2 -2
- package/emotion/cjs/examples/plasma_b2c/components/Accordion/Accordion.stories.tsx +63 -1
- package/emotion/cjs/examples/plasma_web/components/Accordion/Accordion.stories.tsx +63 -1
- package/emotion/es/components/Accordion/Accordion.template-doc.mdx +32 -0
- package/emotion/es/components/Accordion/ui/AccordionItem/AccordionItem.js +20 -14
- package/emotion/es/components/TextArea/TextArea.js +2 -2
- package/emotion/es/components/TextArea/hooks/useAutoResize.js +2 -2
- package/emotion/es/examples/plasma_b2c/components/Accordion/Accordion.stories.tsx +63 -1
- package/emotion/es/examples/plasma_web/components/Accordion/Accordion.stories.tsx +63 -1
- package/es/components/Accordion/ui/AccordionItem/AccordionItem.js +20 -14
- package/es/components/Accordion/ui/AccordionItem/AccordionItem.js.map +1 -1
- package/es/components/TextArea/TextArea.js +1 -1
- package/es/components/TextArea/TextArea.js.map +1 -1
- package/es/components/TextArea/hooks/useAutoResize.js +2 -2
- package/es/components/TextArea/hooks/useAutoResize.js.map +1 -1
- package/package.json +2 -2
- package/styled-components/cjs/components/Accordion/Accordion.template-doc.mdx +32 -0
- package/styled-components/cjs/components/Accordion/ui/AccordionItem/AccordionItem.js +19 -13
- package/styled-components/cjs/components/TextArea/TextArea.js +1 -1
- package/styled-components/cjs/components/TextArea/hooks/useAutoResize.js +2 -2
- package/styled-components/cjs/examples/plasma_b2c/components/Accordion/Accordion.stories.tsx +63 -1
- package/styled-components/cjs/examples/plasma_web/components/Accordion/Accordion.stories.tsx +63 -1
- package/styled-components/es/components/Accordion/Accordion.template-doc.mdx +32 -0
- package/styled-components/es/components/Accordion/ui/AccordionItem/AccordionItem.js +20 -14
- package/styled-components/es/components/TextArea/TextArea.js +1 -1
- package/styled-components/es/components/TextArea/hooks/useAutoResize.js +2 -2
- package/styled-components/es/examples/plasma_b2c/components/Accordion/Accordion.stories.tsx +63 -1
- package/styled-components/es/examples/plasma_web/components/Accordion/Accordion.stories.tsx +63 -1
- package/types/components/Accordion/ui/AccordionItem/AccordionItem.d.ts +17 -2
- package/types/components/Accordion/ui/AccordionItem/AccordionItem.d.ts.map +1 -1
- package/types/components/Accordion/ui/AccordionItem/AccordionItem.types.d.ts +17 -9
- package/types/components/Accordion/ui/AccordionItem/AccordionItem.types.d.ts.map +1 -1
- package/types/components/TextArea/hooks/useAutoResize.d.ts +1 -1
- package/types/components/TextArea/hooks/useAutoResize.d.ts.map +1 -1
package/styled-components/cjs/examples/plasma_web/components/Accordion/Accordion.stories.tsx
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import React from 'react';
|
1
|
+
import React, { useState } from 'react';
|
2
2
|
import type { ComponentProps, ReactNode } from 'react';
|
3
3
|
import type { StoryObj, Meta } from '@storybook/react';
|
4
4
|
import { disableProps } from '@salutejs/plasma-sb-utils';
|
@@ -7,6 +7,8 @@ import { mergeConfig } from '../../../../engines';
|
|
7
7
|
import { WithTheme, argTypesFromConfig } from '../../../_helpers';
|
8
8
|
import { accordionConfig } from '../../../../components/Accordion';
|
9
9
|
import { Pin } from '../../../../utils/roundness';
|
10
|
+
import { IconButton } from '../IconButton/IconButton';
|
11
|
+
import { IconPlus } from '../../../../components/_Icon';
|
10
12
|
|
11
13
|
import { config } from './Accordion.config';
|
12
14
|
import { Accordion, AccordionItem } from './Accordion';
|
@@ -91,3 +93,63 @@ export const Default: StoryObj<AccordionProps> = {
|
|
91
93
|
);
|
92
94
|
},
|
93
95
|
};
|
96
|
+
|
97
|
+
const getSizeForIcon = (size) => (size === 'xs' ? 'xs' : 's');
|
98
|
+
|
99
|
+
const ControlledAccordion = (props: AccordionProps) => {
|
100
|
+
const args = { ...props, text: undefined };
|
101
|
+
const [activeFirst, setActiveFirst] = useState(false);
|
102
|
+
const [activeSecond, setActiveSecond] = useState(false);
|
103
|
+
const [activeThree, setActiveThree] = useState(false);
|
104
|
+
|
105
|
+
return (
|
106
|
+
<Accordion {...args}>
|
107
|
+
<AccordionItem
|
108
|
+
contentRight={
|
109
|
+
<IconButton view="secondary" size={args.size} onClick={() => setActiveFirst(!activeFirst)}>
|
110
|
+
<IconPlus size={getSizeForIcon(args.size)} />
|
111
|
+
</IconButton>
|
112
|
+
}
|
113
|
+
alignWithTitle={args.alignWithTitle}
|
114
|
+
type={args.type}
|
115
|
+
pin={args.pin}
|
116
|
+
title={args.title}
|
117
|
+
opened={activeFirst}
|
118
|
+
>
|
119
|
+
{args.body}
|
120
|
+
</AccordionItem>
|
121
|
+
<AccordionItem
|
122
|
+
contentRight={
|
123
|
+
<IconButton view="secondary" size={args.size} onClick={() => setActiveSecond(!activeSecond)}>
|
124
|
+
<IconPlus size={getSizeForIcon(args.size)} />
|
125
|
+
</IconButton>
|
126
|
+
}
|
127
|
+
alignWithTitle={args.alignWithTitle}
|
128
|
+
type={args.type}
|
129
|
+
pin={args.pin}
|
130
|
+
title={args.title}
|
131
|
+
opened={activeSecond}
|
132
|
+
>
|
133
|
+
{args.body}
|
134
|
+
</AccordionItem>
|
135
|
+
<AccordionItem
|
136
|
+
contentRight={
|
137
|
+
<IconButton view="secondary" size={args.size} onClick={() => setActiveThree(!activeThree)}>
|
138
|
+
<IconPlus size={getSizeForIcon(args.size)} />
|
139
|
+
</IconButton>
|
140
|
+
}
|
141
|
+
alignWithTitle={args.alignWithTitle}
|
142
|
+
type={args.type}
|
143
|
+
pin={args.pin}
|
144
|
+
title={args.title}
|
145
|
+
opened={activeThree}
|
146
|
+
>
|
147
|
+
{args.body}
|
148
|
+
</AccordionItem>
|
149
|
+
</Accordion>
|
150
|
+
);
|
151
|
+
};
|
152
|
+
|
153
|
+
export const Controlled: StoryObj<AccordionProps> = {
|
154
|
+
render: (props: AccordionProps) => ControlledAccordion(props),
|
155
|
+
};
|
@@ -135,6 +135,38 @@ import TabItem from '@theme/TabItem';
|
|
135
135
|
</TabItem>
|
136
136
|
</Tabs>
|
137
137
|
|
138
|
+
### Использование Accordion в Controlled варианте
|
139
|
+
|
140
|
+
```tsx live
|
141
|
+
import React, { useState } from 'react';
|
142
|
+
import { Accordion, AccordionItem, IconButton } from '@salutejs/{{ package }}';
|
143
|
+
import { IconPlus } from '@salutejs/plasma-icons';
|
144
|
+
|
145
|
+
export function App() {
|
146
|
+
const [activeFirst, setActiveFirst] = useState(false);
|
147
|
+
const [activeSecond, setActiveSecond] = useState(false);
|
148
|
+
const [activeThree, setActiveThree] = useState(false);
|
149
|
+
|
150
|
+
const contentRight = (active, setActive) => {
|
151
|
+
return (
|
152
|
+
<IconButton view="secondary" size="s" onClick={() => setActive(!active)}>
|
153
|
+
<IconPlus size="xs" />
|
154
|
+
</IconButton>
|
155
|
+
)
|
156
|
+
}
|
157
|
+
|
158
|
+
return (
|
159
|
+
<div>
|
160
|
+
<Accordion size="s" singleActive={true}>
|
161
|
+
<AccordionItem opened={activeFirst} contentRight={contentRight(activeFirst, setActiveFirst)} type="arrow" title="Как оплатить заправку бонусами СберСпасибо?">После указания деталей заправки нажмите кнопку «К оплате». Откроется окно оплаты, где вы сможете списать бонусы и оплатить ими до 99% стоимости топлива</AccordionItem>
|
162
|
+
<AccordionItem opened={activeSecond} contentRight={contentRight(activeSecond, setActiveSecond)} type="arrow" title="Как оплатить заправку бонусами СберСпасибо?">После указания деталей заправки нажмите кнопку «К оплате». Откроется окно оплаты, где вы сможете списать бонусы и оплатить ими до 99% стоимости топлива</AccordionItem>
|
163
|
+
<AccordionItem opened={activeThree} contentRight={contentRight(activeThree, setActiveThree)} type="arrow" title="Как оплатить заправку бонусами СберСпасибо?">После указания деталей заправки нажмите кнопку «К оплате». Откроется окно оплаты, где вы сможете списать бонусы и оплатить ими до 99% стоимости топлива</AccordionItem>
|
164
|
+
</Accordion>
|
165
|
+
</div>
|
166
|
+
);
|
167
|
+
}
|
168
|
+
```
|
169
|
+
|
138
170
|
### Использование Accordion SingleActive
|
139
171
|
|
140
172
|
```tsx live
|
@@ -11,12 +11,12 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
|
|
11
11
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
12
12
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
13
13
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
14
|
-
import React, { useState, useRef, useEffect } from 'react';
|
14
|
+
import React, { useState, useRef, forwardRef, useEffect } from 'react';
|
15
15
|
import { convertRoundnessMatrix } from '../../../../utils/roundness';
|
16
16
|
import { classes, tokens } from '../../Accordion.tokens';
|
17
17
|
import { cx } from '../../../../utils';
|
18
18
|
import { StyledAccordionItem, StyledAccordionHeader, StyledAccordionBody, StyledAccordionTitle, StyledAccordionContentLeft, StyledAccordionHeaderLeft, StyledAccordionContentRight, StyledArrow, StyledMinus, StyledPlus, StyledAccordionBodyAnimate } from './AccordionItem.styles';
|
19
|
-
export var AccordionItem = function
|
19
|
+
export var AccordionItem = /*#__PURE__*/forwardRef(function (_ref, outerRef) {
|
20
20
|
var _ref2;
|
21
21
|
var value = _ref.value,
|
22
22
|
contentRight = _ref.contentRight,
|
@@ -34,8 +34,10 @@ export var AccordionItem = function AccordionItem(_ref) {
|
|
34
34
|
disabled = _ref.disabled,
|
35
35
|
_ref$alignWithTitle = _ref.alignWithTitle,
|
36
36
|
alignWithTitle = _ref$alignWithTitle === void 0 ? true : _ref$alignWithTitle,
|
37
|
+
opened = _ref.opened,
|
37
38
|
view = _ref.view,
|
38
|
-
onChange = _ref.onChange
|
39
|
+
onChange = _ref.onChange,
|
40
|
+
onClick = _ref.onClick;
|
39
41
|
var key = (_ref2 = eventKey !== null && eventKey !== void 0 ? eventKey : index) !== null && _ref2 !== void 0 ? _ref2 : 0;
|
40
42
|
var _useState = useState(),
|
41
43
|
_useState2 = _slicedToArray(_useState, 2),
|
@@ -48,6 +50,9 @@ export var AccordionItem = function AccordionItem(_ref) {
|
|
48
50
|
if (onChange) {
|
49
51
|
onChange(key, !value);
|
50
52
|
}
|
53
|
+
if (onClick) {
|
54
|
+
onClick(key, !value);
|
55
|
+
}
|
51
56
|
};
|
52
57
|
var leftContentRef = useRef(null);
|
53
58
|
useEffect(function () {
|
@@ -56,11 +61,11 @@ export var AccordionItem = function AccordionItem(_ref) {
|
|
56
61
|
var leftPaddingBody = leftContentWidth && (alignWithTitle || view === 'clear') ? "calc(".concat(leftContentWidth, "px + var(").concat(tokens.accordionItemGap, "))") : 0;
|
57
62
|
setLeftPadding(leftPaddingBody);
|
58
63
|
}, [value, type, leftContentRef, setLeftPadding]);
|
59
|
-
var openedBodyClass = value ? classes.accordionItemShowBody : undefined;
|
60
|
-
var
|
64
|
+
var openedBodyClass = (opened !== null && opened !== void 0 ? opened : value) ? classes.accordionItemShowBody : undefined;
|
65
|
+
var StyledAnimationPlus = function StyledAnimationPlus() {
|
61
66
|
return /*#__PURE__*/React.createElement(StyledPlus, null, _StyledMinus || (_StyledMinus = /*#__PURE__*/React.createElement(StyledMinus, {
|
62
67
|
size: "xs",
|
63
|
-
color: "
|
68
|
+
color: "inherit"
|
64
69
|
})), /*#__PURE__*/React.createElement(StyledMinus, {
|
65
70
|
size: "xs",
|
66
71
|
color: "inhert",
|
@@ -71,14 +76,15 @@ export var AccordionItem = function AccordionItem(_ref) {
|
|
71
76
|
var disabledClass = disabled ? classes.accordionDisabled : '';
|
72
77
|
var leftContent = contentLeft !== null && contentLeft !== void 0 ? contentLeft : type === 'arrow' ? _StyledArrow || (_StyledArrow = /*#__PURE__*/React.createElement(StyledArrow, {
|
73
78
|
size: "xs",
|
74
|
-
color: "
|
79
|
+
color: "inherit"
|
75
80
|
})) : undefined;
|
76
|
-
var leftContentRotate = type === 'arrow' && value ? classes.accordionItemShowBody : undefined;
|
77
|
-
var rightContent = contentRight !== null && contentRight !== void 0 ? contentRight : type === 'sign' ? /*#__PURE__*/React.createElement(
|
78
|
-
var rightContentRotate = type === 'sign' && value ? classes.accordionItemShowBody : undefined;
|
81
|
+
var leftContentRotate = type === 'arrow' && (opened !== null && opened !== void 0 ? opened : value) ? classes.accordionItemShowBody : undefined;
|
82
|
+
var rightContent = contentRight !== null && contentRight !== void 0 ? contentRight : type === 'sign' ? /*#__PURE__*/React.createElement(StyledAnimationPlus, null) : undefined;
|
83
|
+
var rightContentRotate = type === 'sign' && (opened !== null && opened !== void 0 ? opened : value) ? classes.accordionItemShowBody : undefined;
|
79
84
|
return /*#__PURE__*/React.createElement(StyledAccordionItem, {
|
80
85
|
className: cx(classes.accordionItem, className, disabledClass),
|
81
86
|
key: key,
|
87
|
+
ref: outerRef,
|
82
88
|
style: _objectSpread({
|
83
89
|
borderRadius: accordionBorderRadius
|
84
90
|
}, style)
|
@@ -86,17 +92,17 @@ export var AccordionItem = function AccordionItem(_ref) {
|
|
86
92
|
role: "tab",
|
87
93
|
tabIndex: 0,
|
88
94
|
onClick: handleOpen,
|
89
|
-
"aria-expanded": value,
|
95
|
+
"aria-expanded": opened !== null && opened !== void 0 ? opened : value,
|
90
96
|
"aria-controls": "accordion-item-section".concat(key),
|
91
97
|
id: "accordion-item-".concat(key)
|
92
98
|
}, /*#__PURE__*/React.createElement(StyledAccordionHeaderLeft, null, leftContent && /*#__PURE__*/React.createElement(StyledAccordionContentLeft, {
|
93
99
|
ref: leftContentRef,
|
94
100
|
className: leftContentRotate
|
95
|
-
}, leftContent), /*#__PURE__*/React.createElement(StyledAccordionTitle, null, title)), /*#__PURE__*/React.createElement(StyledAccordionContentRight, {
|
101
|
+
}, leftContent), /*#__PURE__*/React.createElement(StyledAccordionTitle, null, title)), contentRight || /*#__PURE__*/React.createElement(StyledAccordionContentRight, {
|
96
102
|
className: rightContentRotate
|
97
103
|
}, rightContent && rightContent)), /*#__PURE__*/React.createElement(StyledAccordionBodyAnimate, {
|
98
104
|
"aria-labelledby": "accordion-item-".concat(key),
|
99
|
-
"aria-hidden": !value,
|
105
|
+
"aria-hidden": !(opened !== null && opened !== void 0 ? opened : value),
|
100
106
|
id: "accordion-item-section".concat(key),
|
101
107
|
className: cx(openedBodyClass),
|
102
108
|
style: {
|
@@ -105,4 +111,4 @@ export var AccordionItem = function AccordionItem(_ref) {
|
|
105
111
|
}, /*#__PURE__*/React.createElement(StyledAccordionBody, {
|
106
112
|
className: classes.accordionItemBody
|
107
113
|
}, children)));
|
108
|
-
};
|
114
|
+
});
|
@@ -142,7 +142,7 @@ export var textAreaRoot = function textAreaRoot(Root) {
|
|
142
142
|
setHelperWidth("".concat(elementWidth / ROOT_FONT_SIZE, "rem"));
|
143
143
|
}
|
144
144
|
});
|
145
|
-
useAutoResize(autoResize || Boolean(clear), outerRef, value, minAuto, maxAuto
|
145
|
+
useAutoResize(autoResize || Boolean(clear), outerRef, value, minAuto, maxAuto);
|
146
146
|
var onFocusHandler = useCallback(function () {
|
147
147
|
setFocused(true);
|
148
148
|
}, []);
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
2
2
|
export var ROOT_FONT_SIZE = 16;
|
3
|
-
export var useAutoResize = function useAutoResize(active, ref, value, minAuto, maxAuto
|
3
|
+
export var useAutoResize = function useAutoResize(active, ref, value, minAuto, maxAuto) {
|
4
4
|
var isManualResize = useRef(false);
|
5
5
|
var previousHeight = useRef();
|
6
6
|
useEffect(function () {
|
@@ -23,5 +23,5 @@ export var useAutoResize = function useAutoResize(active, ref, value, minAuto, m
|
|
23
23
|
ref.current.style.height = "".concat(newHeight, "rem");
|
24
24
|
previousHeight.current = newHeight;
|
25
25
|
}
|
26
|
-
}, [ref, active, value
|
26
|
+
}, [ref, active, value]);
|
27
27
|
};
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import React from 'react';
|
1
|
+
import React, { useState } from 'react';
|
2
2
|
import type { ComponentProps, ReactNode } from 'react';
|
3
3
|
import type { StoryObj, Meta } from '@storybook/react';
|
4
4
|
import { disableProps } from '@salutejs/plasma-sb-utils';
|
@@ -7,6 +7,8 @@ import { mergeConfig } from '../../../../engines';
|
|
7
7
|
import { WithTheme, argTypesFromConfig } from '../../../_helpers';
|
8
8
|
import { accordionConfig } from '../../../../components/Accordion';
|
9
9
|
import { Pin } from '../../../../utils/roundness';
|
10
|
+
import { IconButton } from '../IconButton/IconButton';
|
11
|
+
import { IconPlus } from '../../../../components/_Icon';
|
10
12
|
|
11
13
|
import { config } from './Accordion.config';
|
12
14
|
import { Accordion, AccordionItem } from './Accordion';
|
@@ -91,3 +93,63 @@ export const Default: StoryObj<AccordionProps> = {
|
|
91
93
|
);
|
92
94
|
},
|
93
95
|
};
|
96
|
+
|
97
|
+
const getSizeForIcon = (size) => (size === 'xs' ? 'xs' : 's');
|
98
|
+
|
99
|
+
const ControlledAccordion = (props: AccordionProps) => {
|
100
|
+
const args = { ...props, text: undefined };
|
101
|
+
const [activeFirst, setActiveFirst] = useState(false);
|
102
|
+
const [activeSecond, setActiveSecond] = useState(false);
|
103
|
+
const [activeThree, setActiveThree] = useState(false);
|
104
|
+
|
105
|
+
return (
|
106
|
+
<Accordion {...args}>
|
107
|
+
<AccordionItem
|
108
|
+
contentRight={
|
109
|
+
<IconButton view="secondary" size={args.size} onClick={() => setActiveFirst(!activeFirst)}>
|
110
|
+
<IconPlus size={getSizeForIcon(args.size)} />
|
111
|
+
</IconButton>
|
112
|
+
}
|
113
|
+
alignWithTitle={args.alignWithTitle}
|
114
|
+
type={args.type}
|
115
|
+
pin={args.pin}
|
116
|
+
title={args.title}
|
117
|
+
opened={activeFirst}
|
118
|
+
>
|
119
|
+
{args.body}
|
120
|
+
</AccordionItem>
|
121
|
+
<AccordionItem
|
122
|
+
contentRight={
|
123
|
+
<IconButton view="secondary" size={args.size} onClick={() => setActiveSecond(!activeSecond)}>
|
124
|
+
<IconPlus size={getSizeForIcon(args.size)} />
|
125
|
+
</IconButton>
|
126
|
+
}
|
127
|
+
alignWithTitle={args.alignWithTitle}
|
128
|
+
type={args.type}
|
129
|
+
pin={args.pin}
|
130
|
+
title={args.title}
|
131
|
+
opened={activeSecond}
|
132
|
+
>
|
133
|
+
{args.body}
|
134
|
+
</AccordionItem>
|
135
|
+
<AccordionItem
|
136
|
+
contentRight={
|
137
|
+
<IconButton view="secondary" size={args.size} onClick={() => setActiveThree(!activeThree)}>
|
138
|
+
<IconPlus size={getSizeForIcon(args.size)} />
|
139
|
+
</IconButton>
|
140
|
+
}
|
141
|
+
alignWithTitle={args.alignWithTitle}
|
142
|
+
type={args.type}
|
143
|
+
pin={args.pin}
|
144
|
+
title={args.title}
|
145
|
+
opened={activeThree}
|
146
|
+
>
|
147
|
+
{args.body}
|
148
|
+
</AccordionItem>
|
149
|
+
</Accordion>
|
150
|
+
);
|
151
|
+
};
|
152
|
+
|
153
|
+
export const Controlled: StoryObj<AccordionProps> = {
|
154
|
+
render: (props: AccordionProps) => ControlledAccordion(props),
|
155
|
+
};
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import React from 'react';
|
1
|
+
import React, { useState } from 'react';
|
2
2
|
import type { ComponentProps, ReactNode } from 'react';
|
3
3
|
import type { StoryObj, Meta } from '@storybook/react';
|
4
4
|
import { disableProps } from '@salutejs/plasma-sb-utils';
|
@@ -7,6 +7,8 @@ import { mergeConfig } from '../../../../engines';
|
|
7
7
|
import { WithTheme, argTypesFromConfig } from '../../../_helpers';
|
8
8
|
import { accordionConfig } from '../../../../components/Accordion';
|
9
9
|
import { Pin } from '../../../../utils/roundness';
|
10
|
+
import { IconButton } from '../IconButton/IconButton';
|
11
|
+
import { IconPlus } from '../../../../components/_Icon';
|
10
12
|
|
11
13
|
import { config } from './Accordion.config';
|
12
14
|
import { Accordion, AccordionItem } from './Accordion';
|
@@ -91,3 +93,63 @@ export const Default: StoryObj<AccordionProps> = {
|
|
91
93
|
);
|
92
94
|
},
|
93
95
|
};
|
96
|
+
|
97
|
+
const getSizeForIcon = (size) => (size === 'xs' ? 'xs' : 's');
|
98
|
+
|
99
|
+
const ControlledAccordion = (props: AccordionProps) => {
|
100
|
+
const args = { ...props, text: undefined };
|
101
|
+
const [activeFirst, setActiveFirst] = useState(false);
|
102
|
+
const [activeSecond, setActiveSecond] = useState(false);
|
103
|
+
const [activeThree, setActiveThree] = useState(false);
|
104
|
+
|
105
|
+
return (
|
106
|
+
<Accordion {...args}>
|
107
|
+
<AccordionItem
|
108
|
+
contentRight={
|
109
|
+
<IconButton view="secondary" size={args.size} onClick={() => setActiveFirst(!activeFirst)}>
|
110
|
+
<IconPlus size={getSizeForIcon(args.size)} />
|
111
|
+
</IconButton>
|
112
|
+
}
|
113
|
+
alignWithTitle={args.alignWithTitle}
|
114
|
+
type={args.type}
|
115
|
+
pin={args.pin}
|
116
|
+
title={args.title}
|
117
|
+
opened={activeFirst}
|
118
|
+
>
|
119
|
+
{args.body}
|
120
|
+
</AccordionItem>
|
121
|
+
<AccordionItem
|
122
|
+
contentRight={
|
123
|
+
<IconButton view="secondary" size={args.size} onClick={() => setActiveSecond(!activeSecond)}>
|
124
|
+
<IconPlus size={getSizeForIcon(args.size)} />
|
125
|
+
</IconButton>
|
126
|
+
}
|
127
|
+
alignWithTitle={args.alignWithTitle}
|
128
|
+
type={args.type}
|
129
|
+
pin={args.pin}
|
130
|
+
title={args.title}
|
131
|
+
opened={activeSecond}
|
132
|
+
>
|
133
|
+
{args.body}
|
134
|
+
</AccordionItem>
|
135
|
+
<AccordionItem
|
136
|
+
contentRight={
|
137
|
+
<IconButton view="secondary" size={args.size} onClick={() => setActiveThree(!activeThree)}>
|
138
|
+
<IconPlus size={getSizeForIcon(args.size)} />
|
139
|
+
</IconButton>
|
140
|
+
}
|
141
|
+
alignWithTitle={args.alignWithTitle}
|
142
|
+
type={args.type}
|
143
|
+
pin={args.pin}
|
144
|
+
title={args.title}
|
145
|
+
opened={activeThree}
|
146
|
+
>
|
147
|
+
{args.body}
|
148
|
+
</AccordionItem>
|
149
|
+
</Accordion>
|
150
|
+
);
|
151
|
+
};
|
152
|
+
|
153
|
+
export const Controlled: StoryObj<AccordionProps> = {
|
154
|
+
render: (props: AccordionProps) => ControlledAccordion(props),
|
155
|
+
};
|
@@ -1,4 +1,19 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
|
3
|
-
|
2
|
+
export declare const AccordionItem: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLElement>, "title" | "onChange"> & {
|
3
|
+
value?: boolean | undefined;
|
4
|
+
type?: "arrow" | "clear" | "sign" | undefined;
|
5
|
+
contentLeft?: React.ReactNode;
|
6
|
+
alignWithTitle?: boolean | undefined;
|
7
|
+
contentRight?: React.ReactNode;
|
8
|
+
pin?: "square-square" | "square-clear" | "clear-square" | "clear-clear" | "clear-circle" | "circle-clear" | "circle-circle" | undefined;
|
9
|
+
title?: React.ReactNode;
|
10
|
+
children: React.ReactNode;
|
11
|
+
onChange?: ((index: number, value: boolean) => void) | undefined;
|
12
|
+
onClick?: ((index: number, value: boolean) => void) | undefined;
|
13
|
+
disabled?: boolean | undefined;
|
14
|
+
opened?: boolean | undefined;
|
15
|
+
eventKey?: number | undefined;
|
16
|
+
index?: number | undefined;
|
17
|
+
view?: string | undefined;
|
18
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
4
19
|
//# sourceMappingURL=AccordionItem.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"AccordionItem.d.ts","sourceRoot":"","sources":["../../../../../src/components/Accordion/ui/AccordionItem/AccordionItem.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
1
|
+
{"version":3,"file":"AccordionItem.d.ts","sourceRoot":"","sources":["../../../../../src/components/Accordion/ui/AccordionItem/AccordionItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAqBvE,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;wCAkHzB,CAAC"}
|
@@ -2,7 +2,7 @@ import type { ReactNode, HTMLAttributes } from 'react';
|
|
2
2
|
import type { Pin } from '../../../../utils/roundness';
|
3
3
|
declare type Props = {
|
4
4
|
/**
|
5
|
-
* Значение раскрытия accordion
|
5
|
+
* Значение раскрытия элемента accordion
|
6
6
|
*/
|
7
7
|
value?: boolean;
|
8
8
|
/**
|
@@ -22,31 +22,39 @@ declare type Props = {
|
|
22
22
|
*/
|
23
23
|
contentRight?: ReactNode;
|
24
24
|
/**
|
25
|
-
* Скругление accordion
|
25
|
+
* Скругление элемента accordion
|
26
26
|
*/
|
27
27
|
pin?: Pin;
|
28
28
|
/**
|
29
|
-
* Заголовок accordion
|
29
|
+
* Заголовок элемента accordion
|
30
30
|
*/
|
31
|
-
title
|
31
|
+
title?: ReactNode | string;
|
32
32
|
/**
|
33
|
-
* Контент
|
33
|
+
* Контент элемента accordion
|
34
34
|
*/
|
35
35
|
children: ReactNode;
|
36
36
|
/**
|
37
|
-
* @deprecated Внутренняя функция при открытии accordion (будет удалена в ближайшее время)
|
37
|
+
* @deprecated Внутренняя функция при открытии accordion (будет удалена в ближайшее время), использовать onClick
|
38
38
|
*/
|
39
39
|
onChange?: (index: number, value: boolean) => void;
|
40
40
|
/**
|
41
|
-
*
|
41
|
+
* Функция при открытии accordion
|
42
|
+
*/
|
43
|
+
onClick?: (index: number, value: boolean) => void;
|
44
|
+
/**
|
45
|
+
* Блокировка элемента accordion
|
42
46
|
*/
|
43
47
|
disabled?: boolean;
|
44
48
|
/**
|
45
|
-
*
|
49
|
+
* Контроль элемента accordion из вне
|
50
|
+
*/
|
51
|
+
opened?: boolean;
|
52
|
+
/**
|
53
|
+
* Индекс элемента accordion, который необходимо автоматически открыть
|
46
54
|
*/
|
47
55
|
eventKey?: number;
|
48
56
|
/**
|
49
|
-
* @deprecated Внутреннее свойство индекс элемента (будет удалено в ближайшее время)
|
57
|
+
* @deprecated Внутреннее свойство индекс элемента accordion (будет удалено в ближайшее время)
|
50
58
|
*/
|
51
59
|
index?: number;
|
52
60
|
/**
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"AccordionItem.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/Accordion/ui/AccordionItem/AccordionItem.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAEvD,aAAK,KAAK,GAAG;IACT;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IAElC;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IAEzB;;OAEG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC;IAEV;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;
|
1
|
+
{"version":3,"file":"AccordionItem.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/Accordion/ui/AccordionItem/AccordionItem.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAEvD,aAAK,KAAK,GAAG;IACT;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IAElC;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IAEzB;;OAEG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC;IAEV;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAE3B;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAEnD;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAElD;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAMjB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,oBAAY,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC"}
|
@@ -1,4 +1,4 @@
|
|
1
1
|
import { MutableRefObject } from 'react';
|
2
2
|
export declare const ROOT_FONT_SIZE = 16;
|
3
|
-
export declare const useAutoResize: <T extends HTMLTextAreaElement>(active: boolean, ref: MutableRefObject<T | null>, value?: string | number | readonly string[] | undefined, minAuto?: number | undefined, maxAuto?: number | undefined
|
3
|
+
export declare const useAutoResize: <T extends HTMLTextAreaElement>(active: boolean, ref: MutableRefObject<T | null>, value?: string | number | readonly string[] | undefined, minAuto?: number | undefined, maxAuto?: number | undefined) => void;
|
4
4
|
//# sourceMappingURL=useAutoResize.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useAutoResize.d.ts","sourceRoot":"","sources":["../../../../src/components/TextArea/hooks/useAutoResize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAE5D,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC,eAAO,MAAM,aAAa,0CACd,OAAO,+
|
1
|
+
{"version":3,"file":"useAutoResize.d.ts","sourceRoot":"","sources":["../../../../src/components/TextArea/hooks/useAutoResize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAE5D,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC,eAAO,MAAM,aAAa,0CACd,OAAO,+JAoClB,CAAC"}
|