@salutejs/plasma-new-hope 0.167.0-dev.0 → 0.168.0-canary.1484.11355807813.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. package/cjs/components/Accordion/ui/AccordionItem/AccordionItem.css +12 -11
  2. package/cjs/components/Accordion/ui/AccordionItem/AccordionItem.js +6 -4
  3. package/cjs/components/Accordion/ui/AccordionItem/AccordionItem.js.map +1 -1
  4. package/cjs/components/Accordion/ui/AccordionItem/AccordionItem.styles.js +18 -12
  5. package/cjs/components/Accordion/ui/AccordionItem/AccordionItem.styles.js.map +1 -1
  6. package/cjs/components/Accordion/ui/AccordionItem/{AccordionItem.styles_aus2x3.css → AccordionItem.styles_t0tdpe.css} +8 -7
  7. package/cjs/index.css +12 -11
  8. package/emotion/cjs/components/Accordion/ui/AccordionItem/AccordionItem.js +6 -4
  9. package/emotion/cjs/components/Accordion/ui/AccordionItem/AccordionItem.styles.js +20 -16
  10. package/emotion/cjs/examples/plasma_b2c/components/Accordion/Accordion.stories.tsx +80 -1
  11. package/emotion/cjs/examples/plasma_web/components/Accordion/Accordion.stories.tsx +80 -1
  12. package/emotion/es/components/Accordion/ui/AccordionItem/AccordionItem.js +8 -6
  13. package/emotion/es/components/Accordion/ui/AccordionItem/AccordionItem.styles.js +19 -15
  14. package/emotion/es/examples/plasma_b2c/components/Accordion/Accordion.stories.tsx +80 -1
  15. package/emotion/es/examples/plasma_web/components/Accordion/Accordion.stories.tsx +80 -1
  16. package/es/components/Accordion/ui/AccordionItem/AccordionItem.css +12 -11
  17. package/es/components/Accordion/ui/AccordionItem/AccordionItem.js +8 -6
  18. package/es/components/Accordion/ui/AccordionItem/AccordionItem.js.map +1 -1
  19. package/es/components/Accordion/ui/AccordionItem/AccordionItem.styles.js +18 -13
  20. package/es/components/Accordion/ui/AccordionItem/AccordionItem.styles.js.map +1 -1
  21. package/es/components/Accordion/ui/AccordionItem/{AccordionItem.styles_aus2x3.css → AccordionItem.styles_t0tdpe.css} +8 -7
  22. package/es/index.css +12 -11
  23. package/package.json +2 -2
  24. package/styled-components/cjs/components/Accordion/ui/AccordionItem/AccordionItem.js +6 -4
  25. package/styled-components/cjs/components/Accordion/ui/AccordionItem/AccordionItem.styles.js +11 -8
  26. package/styled-components/cjs/examples/plasma_b2c/components/Accordion/Accordion.stories.tsx +80 -1
  27. package/styled-components/cjs/examples/plasma_web/components/Accordion/Accordion.stories.tsx +80 -1
  28. package/styled-components/es/components/Accordion/ui/AccordionItem/AccordionItem.js +8 -6
  29. package/styled-components/es/components/Accordion/ui/AccordionItem/AccordionItem.styles.js +10 -7
  30. package/styled-components/es/examples/plasma_b2c/components/Accordion/Accordion.stories.tsx +80 -1
  31. package/styled-components/es/examples/plasma_web/components/Accordion/Accordion.stories.tsx +80 -1
  32. package/types/components/Accordion/ui/AccordionItem/AccordionItem.d.ts +16 -2
  33. package/types/components/Accordion/ui/AccordionItem/AccordionItem.d.ts.map +1 -1
  34. package/types/components/Accordion/ui/AccordionItem/AccordionItem.styles.d.ts +1 -0
  35. package/types/components/Accordion/ui/AccordionItem/AccordionItem.styles.d.ts.map +1 -1
  36. package/types/components/Accordion/ui/AccordionItem/AccordionItem.types.d.ts +5 -1
  37. package/types/components/Accordion/ui/AccordionItem/AccordionItem.types.d.ts.map +1 -1
@@ -24,7 +24,7 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
24
24
  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; }
25
25
  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; } }
26
26
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
27
- var AccordionItem = exports.AccordionItem = function AccordionItem(_ref) {
27
+ var AccordionItem = exports.AccordionItem = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, outerRef) {
28
28
  var _ref2;
29
29
  var value = _ref.value,
30
30
  contentRight = _ref.contentRight,
@@ -42,6 +42,7 @@ var AccordionItem = exports.AccordionItem = function AccordionItem(_ref) {
42
42
  disabled = _ref.disabled,
43
43
  _ref$alignWithTitle = _ref.alignWithTitle,
44
44
  alignWithTitle = _ref$alignWithTitle === void 0 ? true : _ref$alignWithTitle,
45
+ opened = _ref.opened,
45
46
  view = _ref.view,
46
47
  onChange = _ref.onChange;
47
48
  var key = (_ref2 = eventKey !== null && eventKey !== void 0 ? eventKey : index) !== null && _ref2 !== void 0 ? _ref2 : 0;
@@ -64,7 +65,7 @@ var AccordionItem = exports.AccordionItem = function AccordionItem(_ref) {
64
65
  var leftPaddingBody = leftContentWidth && (alignWithTitle || view === 'clear') ? "calc(".concat(leftContentWidth, "px + var(").concat(_Accordion.tokens.accordionItemGap, "))") : 0;
65
66
  setLeftPadding(leftPaddingBody);
66
67
  }, [value, type, leftContentRef, setLeftPadding]);
67
- var openedBodyClass = value ? _Accordion.classes.accordionItemShowBody : undefined;
68
+ var openedBodyClass = (opened !== null && opened !== void 0 ? opened : value) ? _Accordion.classes.accordionItemShowBody : undefined;
68
69
  var StyledAnimationPLus = function StyledAnimationPLus() {
69
70
  return /*#__PURE__*/_react["default"].createElement(_AccordionItem.StyledPlus, null, _StyledMinus || (_StyledMinus = /*#__PURE__*/_react["default"].createElement(_AccordionItem.StyledMinus, {
70
71
  size: "xs",
@@ -87,6 +88,7 @@ var AccordionItem = exports.AccordionItem = function AccordionItem(_ref) {
87
88
  return /*#__PURE__*/_react["default"].createElement(_AccordionItem.StyledAccordionItem, {
88
89
  className: (0, _utils.cx)(_Accordion.classes.accordionItem, className, disabledClass),
89
90
  key: key,
91
+ ref: outerRef,
90
92
  style: _objectSpread({
91
93
  borderRadius: accordionBorderRadius
92
94
  }, style)
@@ -100,7 +102,7 @@ var AccordionItem = exports.AccordionItem = function AccordionItem(_ref) {
100
102
  }, /*#__PURE__*/_react["default"].createElement(_AccordionItem.StyledAccordionHeaderLeft, null, leftContent && /*#__PURE__*/_react["default"].createElement(_AccordionItem.StyledAccordionContentLeft, {
101
103
  ref: leftContentRef,
102
104
  className: leftContentRotate
103
- }, leftContent), /*#__PURE__*/_react["default"].createElement(_AccordionItem.StyledAccordionTitle, null, title)), /*#__PURE__*/_react["default"].createElement(_AccordionItem.StyledAccordionContentRight, {
105
+ }, leftContent), /*#__PURE__*/_react["default"].createElement(_AccordionItem.StyledAccordionTitle, null, title)), contentRight ? /*#__PURE__*/_react["default"].createElement(_AccordionItem.StyledAccordionContentRightDefault, null, contentRight) : /*#__PURE__*/_react["default"].createElement(_AccordionItem.StyledAccordionContentRight, {
104
106
  className: rightContentRotate
105
107
  }, rightContent && rightContent)), /*#__PURE__*/_react["default"].createElement(_AccordionItem.StyledAccordionBodyAnimate, {
106
108
  "aria-labelledby": "accordion-item-".concat(key),
@@ -113,4 +115,4 @@ var AccordionItem = exports.AccordionItem = function AccordionItem(_ref) {
113
115
  }, /*#__PURE__*/_react["default"].createElement(_AccordionItem.StyledAccordionBody, {
114
116
  className: _Accordion.classes.accordionItemBody
115
117
  }, children)));
116
- };
118
+ });
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.StyledPlus = exports.StyledMinus = exports.StyledArrow = exports.StyledAccordionTitle = exports.StyledAccordionItem = exports.StyledAccordionHeaderLeft = exports.StyledAccordionHeader = exports.StyledAccordionContentRight = exports.StyledAccordionContentLeft = exports.StyledAccordionBodyAnimate = exports.StyledAccordionBody = void 0;
6
+ exports.StyledPlus = exports.StyledMinus = exports.StyledArrow = exports.StyledAccordionTitle = exports.StyledAccordionItem = exports.StyledAccordionHeaderLeft = exports.StyledAccordionHeader = exports.StyledAccordionContentRightDefault = exports.StyledAccordionContentRight = exports.StyledAccordionContentLeft = exports.StyledAccordionBodyAnimate = exports.StyledAccordionBody = void 0;
7
7
  var _styledComponents = /*#__PURE__*/_interopRequireDefault( /*#__PURE__*/require("styled-components"));
8
8
  var _Icon = /*#__PURE__*/require("../../../_Icon");
9
9
  var _Accordion = /*#__PURE__*/require("../../Accordion.tokens");
@@ -26,24 +26,27 @@ var StyledAccordionHeaderLeft = exports.StyledAccordionHeaderLeft = /*#__PURE__*
26
26
  var StyledAccordionContentRight = exports.StyledAccordionContentRight = /*#__PURE__*/_styledComponents["default"].div.withConfig({
27
27
  componentId: "plasma-new-hope__sc-20ij9z-3"
28
28
  })(["transition:0.2s;transform:rotate(90deg);&.", "{transition:0.2s;transform:rotate(0deg);}"], _Accordion.classes.accordionItemShowBody);
29
- var StyledAccordionContentLeft = exports.StyledAccordionContentLeft = /*#__PURE__*/_styledComponents["default"].div.withConfig({
29
+ var StyledAccordionContentRightDefault = exports.StyledAccordionContentRightDefault = /*#__PURE__*/_styledComponents["default"].div.withConfig({
30
30
  componentId: "plasma-new-hope__sc-20ij9z-4"
31
+ })(["margin-top:calc(0px - var(", "));margin-right:calc(0px - var(", "));margin-bottom:calc(0px - var(", "));"], _Accordion.tokens.accordionItemPaddingVertical, _Accordion.tokens.accordionItemPaddingHorizontalLeft, _Accordion.tokens.accordionItemPaddingVertical);
32
+ var StyledAccordionContentLeft = exports.StyledAccordionContentLeft = /*#__PURE__*/_styledComponents["default"].div.withConfig({
33
+ componentId: "plasma-new-hope__sc-20ij9z-5"
31
34
  })(["transition:0.2s;display:flex;align-items:center;&.", "{transition:0.2s;transform:rotate(180deg);}"], _Accordion.classes.accordionItemShowBody);
32
35
  var StyledAccordionTitle = exports.StyledAccordionTitle = /*#__PURE__*/_styledComponents["default"].div.withConfig({
33
- componentId: "plasma-new-hope__sc-20ij9z-5"
36
+ componentId: "plasma-new-hope__sc-20ij9z-6"
34
37
  })(["color:var(", ");font-family:var(", ");font-size:var(", ");font-weight:var(", ");font-style:var(", ");letter-spacing:var(", ");line-height:var(", ");text-align:left;"], _Accordion.tokens.accordionItemTitleColor, _Accordion.tokens.accordionItemTitleFontFamily, _Accordion.tokens.accordionItemTitleFontSize, _Accordion.tokens.accordionItemTitleFontWeight, _Accordion.tokens.accordionItemTitleFontStyle, _Accordion.tokens.accordionItemTitleLetterSpacing, _Accordion.tokens.accordionItemTitleLineHeight);
35
38
  var StyledAccordionBodyAnimate = exports.StyledAccordionBodyAnimate = /*#__PURE__*/_styledComponents["default"].div.withConfig({
36
- componentId: "plasma-new-hope__sc-20ij9z-6"
39
+ componentId: "plasma-new-hope__sc-20ij9z-7"
37
40
  })(["display:grid;grid-template-rows:0fr;transition:grid-template-rows 0.2s ease-out;overflow:hidden;&.", "{grid-template-rows:1fr;padding-bottom:var(", ");&.", "{transition:0.2s;transform:rotate(0deg);}}"], _Accordion.classes.accordionItemShowBody, _Accordion.tokens.accordionItemPaddingVertical, _Accordion.classes.accordionPlusAnimationElement);
38
41
  var StyledAccordionBody = exports.StyledAccordionBody = /*#__PURE__*/_styledComponents["default"].div.withConfig({
39
- componentId: "plasma-new-hope__sc-20ij9z-7"
42
+ componentId: "plasma-new-hope__sc-20ij9z-8"
40
43
  })(["color:var(", ");font-family:var(", ");font-size:var(", ");font-weight:var(", ");font-style:var(", ");letter-spacing:var(", ");line-height:var(", ");overflow:hidden;padding-right:var(", ");padding-left:var(", ");text-align:left;"], _Accordion.tokens.accordionItemTextColor, _Accordion.tokens.accordionItemTextFontFamily, _Accordion.tokens.accordionItemTextFontSize, _Accordion.tokens.accordionItemTextFontWeight, _Accordion.tokens.accordionItemTextFontStyle, _Accordion.tokens.accordionItemTextLetterSpacing, _Accordion.tokens.accordionItemTextLineHeight, _Accordion.tokens.accordionItemPaddingHorizontal, _Accordion.tokens.accordionItemPaddingHorizontalLeft);
41
44
  var StyledArrow = exports.StyledArrow = /*#__PURE__*/(0, _styledComponents["default"])(_Icon.IconChevronDownFill).withConfig({
42
- componentId: "plasma-new-hope__sc-20ij9z-8"
45
+ componentId: "plasma-new-hope__sc-20ij9z-9"
43
46
  })(["pointer-events:none;user-select:none;color:var(", ");"], _Accordion.tokens.accordionItemIconColor);
44
47
  var StyledMinus = exports.StyledMinus = /*#__PURE__*/(0, _styledComponents["default"])(_Icon.IconMinus).withConfig({
45
- componentId: "plasma-new-hope__sc-20ij9z-9"
48
+ componentId: "plasma-new-hope__sc-20ij9z-10"
46
49
  })(["pointer-events:none;user-select:none;color:var(", ");display:flex;align-items:center;position:absolute;top:0;left:0;&.", "{transition:0.2s;transform:rotate(90deg);}&.", "{transition:0.2s;transform:rotate(0deg);}"], _Accordion.tokens.accordionItemIconColor, _Accordion.classes.accordionPlusAnimationElement, _Accordion.classes.accordionItemShowBody);
47
50
  var StyledPlus = exports.StyledPlus = /*#__PURE__*/_styledComponents["default"].div.withConfig({
48
- componentId: "plasma-new-hope__sc-20ij9z-10"
51
+ componentId: "plasma-new-hope__sc-20ij9z-11"
49
52
  })(["position:relative;height:1rem;display:flex;align-items:center;justify-content:center;width:1rem;"]);
@@ -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,80 @@ export const Default: StoryObj<AccordionProps> = {
91
93
  );
92
94
  },
93
95
  };
96
+
97
+ const getSizeForIcon = (size) => {
98
+ const map = {
99
+ mr: 's',
100
+ lr: 's',
101
+ m: 's',
102
+ l: 's',
103
+ sr: 's',
104
+ xsr: 'xs',
105
+ };
106
+ if (map[size]) {
107
+ return map[size];
108
+ }
109
+
110
+ return size;
111
+ };
112
+
113
+ const ControlledAccordion = (props: AccordionProps) => {
114
+ const args = { ...props, text: undefined };
115
+ // eslint-disable-next-line react-hooks/rules-of-hooks
116
+ const [activeFirst, setActiveFirst] = useState(false);
117
+ // eslint-disable-next-line react-hooks/rules-of-hooks
118
+ const [activeSecond, setActiveSecond] = useState(false);
119
+ // eslint-disable-next-line react-hooks/rules-of-hooks
120
+ const [activeThree, setActiveThree] = useState(false);
121
+
122
+ return (
123
+ <Accordion {...args}>
124
+ <AccordionItem
125
+ contentRight={
126
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveFirst(!activeFirst)}>
127
+ <IconPlus size={getSizeForIcon(args.size)} />
128
+ </IconButton>
129
+ }
130
+ alignWithTitle={args.alignWithTitle}
131
+ type={args.type}
132
+ pin={args.pin}
133
+ title={args.title}
134
+ opened={activeFirst}
135
+ >
136
+ {args.body}
137
+ </AccordionItem>
138
+ <AccordionItem
139
+ contentRight={
140
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveSecond(!activeSecond)}>
141
+ <IconPlus size={getSizeForIcon(args.size)} />
142
+ </IconButton>
143
+ }
144
+ alignWithTitle={args.alignWithTitle}
145
+ type={args.type}
146
+ pin={args.pin}
147
+ title={args.title}
148
+ opened={activeSecond}
149
+ >
150
+ {args.body}
151
+ </AccordionItem>
152
+ <AccordionItem
153
+ contentRight={
154
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveThree(!activeThree)}>
155
+ <IconPlus size={getSizeForIcon(args.size)} />
156
+ </IconButton>
157
+ }
158
+ alignWithTitle={args.alignWithTitle}
159
+ type={args.type}
160
+ pin={args.pin}
161
+ title={args.title}
162
+ opened={activeThree}
163
+ >
164
+ {args.body}
165
+ </AccordionItem>
166
+ </Accordion>
167
+ );
168
+ };
169
+
170
+ export const Controlled: StoryObj<AccordionProps> = {
171
+ render: (props: AccordionProps) => ControlledAccordion(props),
172
+ };
@@ -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,80 @@ export const Default: StoryObj<AccordionProps> = {
91
93
  );
92
94
  },
93
95
  };
96
+
97
+ const getSizeForIcon = (size) => {
98
+ const map = {
99
+ mr: 's',
100
+ lr: 's',
101
+ m: 's',
102
+ l: 's',
103
+ sr: 's',
104
+ xsr: 'xs',
105
+ };
106
+ if (map[size]) {
107
+ return map[size];
108
+ }
109
+
110
+ return size;
111
+ };
112
+
113
+ const ControlledAccordion = (props: AccordionProps) => {
114
+ const args = { ...props, text: undefined };
115
+ // eslint-disable-next-line react-hooks/rules-of-hooks
116
+ const [activeFirst, setActiveFirst] = useState(false);
117
+ // eslint-disable-next-line react-hooks/rules-of-hooks
118
+ const [activeSecond, setActiveSecond] = useState(false);
119
+ // eslint-disable-next-line react-hooks/rules-of-hooks
120
+ const [activeThree, setActiveThree] = useState(false);
121
+
122
+ return (
123
+ <Accordion {...args}>
124
+ <AccordionItem
125
+ contentRight={
126
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveFirst(!activeFirst)}>
127
+ <IconPlus size={getSizeForIcon(args.size)} />
128
+ </IconButton>
129
+ }
130
+ alignWithTitle={args.alignWithTitle}
131
+ type={args.type}
132
+ pin={args.pin}
133
+ title={args.title}
134
+ opened={activeFirst}
135
+ >
136
+ {args.body}
137
+ </AccordionItem>
138
+ <AccordionItem
139
+ contentRight={
140
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveSecond(!activeSecond)}>
141
+ <IconPlus size={getSizeForIcon(args.size)} />
142
+ </IconButton>
143
+ }
144
+ alignWithTitle={args.alignWithTitle}
145
+ type={args.type}
146
+ pin={args.pin}
147
+ title={args.title}
148
+ opened={activeSecond}
149
+ >
150
+ {args.body}
151
+ </AccordionItem>
152
+ <AccordionItem
153
+ contentRight={
154
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveThree(!activeThree)}>
155
+ <IconPlus size={getSizeForIcon(args.size)} />
156
+ </IconButton>
157
+ }
158
+ alignWithTitle={args.alignWithTitle}
159
+ type={args.type}
160
+ pin={args.pin}
161
+ title={args.title}
162
+ opened={activeThree}
163
+ >
164
+ {args.body}
165
+ </AccordionItem>
166
+ </Accordion>
167
+ );
168
+ };
169
+
170
+ export const Controlled: StoryObj<AccordionProps> = {
171
+ render: (props: AccordionProps) => ControlledAccordion(props),
172
+ };
@@ -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
- import { StyledAccordionItem, StyledAccordionHeader, StyledAccordionBody, StyledAccordionTitle, StyledAccordionContentLeft, StyledAccordionHeaderLeft, StyledAccordionContentRight, StyledArrow, StyledMinus, StyledPlus, StyledAccordionBodyAnimate } from './AccordionItem.styles';
19
- export var AccordionItem = function AccordionItem(_ref) {
18
+ import { StyledAccordionItem, StyledAccordionHeader, StyledAccordionBody, StyledAccordionTitle, StyledAccordionContentLeft, StyledAccordionHeaderLeft, StyledAccordionContentRight, StyledArrow, StyledMinus, StyledPlus, StyledAccordionBodyAnimate, StyledAccordionContentRightDefault } from './AccordionItem.styles';
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,6 +34,7 @@ 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
39
  onChange = _ref.onChange;
39
40
  var key = (_ref2 = eventKey !== null && eventKey !== void 0 ? eventKey : index) !== null && _ref2 !== void 0 ? _ref2 : 0;
@@ -56,7 +57,7 @@ export var AccordionItem = function AccordionItem(_ref) {
56
57
  var leftPaddingBody = leftContentWidth && (alignWithTitle || view === 'clear') ? "calc(".concat(leftContentWidth, "px + var(").concat(tokens.accordionItemGap, "))") : 0;
57
58
  setLeftPadding(leftPaddingBody);
58
59
  }, [value, type, leftContentRef, setLeftPadding]);
59
- var openedBodyClass = value ? classes.accordionItemShowBody : undefined;
60
+ var openedBodyClass = (opened !== null && opened !== void 0 ? opened : value) ? classes.accordionItemShowBody : undefined;
60
61
  var StyledAnimationPLus = function StyledAnimationPLus() {
61
62
  return /*#__PURE__*/React.createElement(StyledPlus, null, _StyledMinus || (_StyledMinus = /*#__PURE__*/React.createElement(StyledMinus, {
62
63
  size: "xs",
@@ -79,6 +80,7 @@ export var AccordionItem = function AccordionItem(_ref) {
79
80
  return /*#__PURE__*/React.createElement(StyledAccordionItem, {
80
81
  className: cx(classes.accordionItem, className, disabledClass),
81
82
  key: key,
83
+ ref: outerRef,
82
84
  style: _objectSpread({
83
85
  borderRadius: accordionBorderRadius
84
86
  }, style)
@@ -92,7 +94,7 @@ export var AccordionItem = function AccordionItem(_ref) {
92
94
  }, /*#__PURE__*/React.createElement(StyledAccordionHeaderLeft, null, leftContent && /*#__PURE__*/React.createElement(StyledAccordionContentLeft, {
93
95
  ref: leftContentRef,
94
96
  className: leftContentRotate
95
- }, leftContent), /*#__PURE__*/React.createElement(StyledAccordionTitle, null, title)), /*#__PURE__*/React.createElement(StyledAccordionContentRight, {
97
+ }, leftContent), /*#__PURE__*/React.createElement(StyledAccordionTitle, null, title)), contentRight ? /*#__PURE__*/React.createElement(StyledAccordionContentRightDefault, null, contentRight) : /*#__PURE__*/React.createElement(StyledAccordionContentRight, {
96
98
  className: rightContentRotate
97
99
  }, rightContent && rightContent)), /*#__PURE__*/React.createElement(StyledAccordionBodyAnimate, {
98
100
  "aria-labelledby": "accordion-item-".concat(key),
@@ -105,4 +107,4 @@ export var AccordionItem = function AccordionItem(_ref) {
105
107
  }, /*#__PURE__*/React.createElement(StyledAccordionBody, {
106
108
  className: classes.accordionItemBody
107
109
  }, children)));
108
- };
110
+ });
@@ -19,24 +19,27 @@ export var StyledAccordionHeaderLeft = /*#__PURE__*/styled.div.withConfig({
19
19
  export var StyledAccordionContentRight = /*#__PURE__*/styled.div.withConfig({
20
20
  componentId: "plasma-new-hope__sc-20ij9z-3"
21
21
  })(["transition:0.2s;transform:rotate(90deg);&.", "{transition:0.2s;transform:rotate(0deg);}"], classes.accordionItemShowBody);
22
- export var StyledAccordionContentLeft = /*#__PURE__*/styled.div.withConfig({
22
+ export var StyledAccordionContentRightDefault = /*#__PURE__*/styled.div.withConfig({
23
23
  componentId: "plasma-new-hope__sc-20ij9z-4"
24
+ })(["margin-top:calc(0px - var(", "));margin-right:calc(0px - var(", "));margin-bottom:calc(0px - var(", "));"], tokens.accordionItemPaddingVertical, tokens.accordionItemPaddingHorizontalLeft, tokens.accordionItemPaddingVertical);
25
+ export var StyledAccordionContentLeft = /*#__PURE__*/styled.div.withConfig({
26
+ componentId: "plasma-new-hope__sc-20ij9z-5"
24
27
  })(["transition:0.2s;display:flex;align-items:center;&.", "{transition:0.2s;transform:rotate(180deg);}"], classes.accordionItemShowBody);
25
28
  export var StyledAccordionTitle = /*#__PURE__*/styled.div.withConfig({
26
- componentId: "plasma-new-hope__sc-20ij9z-5"
29
+ componentId: "plasma-new-hope__sc-20ij9z-6"
27
30
  })(["color:var(", ");font-family:var(", ");font-size:var(", ");font-weight:var(", ");font-style:var(", ");letter-spacing:var(", ");line-height:var(", ");text-align:left;"], tokens.accordionItemTitleColor, tokens.accordionItemTitleFontFamily, tokens.accordionItemTitleFontSize, tokens.accordionItemTitleFontWeight, tokens.accordionItemTitleFontStyle, tokens.accordionItemTitleLetterSpacing, tokens.accordionItemTitleLineHeight);
28
31
  export var StyledAccordionBodyAnimate = /*#__PURE__*/styled.div.withConfig({
29
- componentId: "plasma-new-hope__sc-20ij9z-6"
32
+ componentId: "plasma-new-hope__sc-20ij9z-7"
30
33
  })(["display:grid;grid-template-rows:0fr;transition:grid-template-rows 0.2s ease-out;overflow:hidden;&.", "{grid-template-rows:1fr;padding-bottom:var(", ");&.", "{transition:0.2s;transform:rotate(0deg);}}"], classes.accordionItemShowBody, tokens.accordionItemPaddingVertical, classes.accordionPlusAnimationElement);
31
34
  export var StyledAccordionBody = /*#__PURE__*/styled.div.withConfig({
32
- componentId: "plasma-new-hope__sc-20ij9z-7"
35
+ componentId: "plasma-new-hope__sc-20ij9z-8"
33
36
  })(["color:var(", ");font-family:var(", ");font-size:var(", ");font-weight:var(", ");font-style:var(", ");letter-spacing:var(", ");line-height:var(", ");overflow:hidden;padding-right:var(", ");padding-left:var(", ");text-align:left;"], tokens.accordionItemTextColor, tokens.accordionItemTextFontFamily, tokens.accordionItemTextFontSize, tokens.accordionItemTextFontWeight, tokens.accordionItemTextFontStyle, tokens.accordionItemTextLetterSpacing, tokens.accordionItemTextLineHeight, tokens.accordionItemPaddingHorizontal, tokens.accordionItemPaddingHorizontalLeft);
34
37
  export var StyledArrow = /*#__PURE__*/styled(IconChevronDownFill).withConfig({
35
- componentId: "plasma-new-hope__sc-20ij9z-8"
38
+ componentId: "plasma-new-hope__sc-20ij9z-9"
36
39
  })(["pointer-events:none;user-select:none;color:var(", ");"], tokens.accordionItemIconColor);
37
40
  export var StyledMinus = /*#__PURE__*/styled(IconMinus).withConfig({
38
- componentId: "plasma-new-hope__sc-20ij9z-9"
41
+ componentId: "plasma-new-hope__sc-20ij9z-10"
39
42
  })(["pointer-events:none;user-select:none;color:var(", ");display:flex;align-items:center;position:absolute;top:0;left:0;&.", "{transition:0.2s;transform:rotate(90deg);}&.", "{transition:0.2s;transform:rotate(0deg);}"], tokens.accordionItemIconColor, classes.accordionPlusAnimationElement, classes.accordionItemShowBody);
40
43
  export var StyledPlus = /*#__PURE__*/styled.div.withConfig({
41
- componentId: "plasma-new-hope__sc-20ij9z-10"
44
+ componentId: "plasma-new-hope__sc-20ij9z-11"
42
45
  })(["position:relative;height:1rem;display:flex;align-items:center;justify-content:center;width:1rem;"]);
@@ -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,80 @@ export const Default: StoryObj<AccordionProps> = {
91
93
  );
92
94
  },
93
95
  };
96
+
97
+ const getSizeForIcon = (size) => {
98
+ const map = {
99
+ mr: 's',
100
+ lr: 's',
101
+ m: 's',
102
+ l: 's',
103
+ sr: 's',
104
+ xsr: 'xs',
105
+ };
106
+ if (map[size]) {
107
+ return map[size];
108
+ }
109
+
110
+ return size;
111
+ };
112
+
113
+ const ControlledAccordion = (props: AccordionProps) => {
114
+ const args = { ...props, text: undefined };
115
+ // eslint-disable-next-line react-hooks/rules-of-hooks
116
+ const [activeFirst, setActiveFirst] = useState(false);
117
+ // eslint-disable-next-line react-hooks/rules-of-hooks
118
+ const [activeSecond, setActiveSecond] = useState(false);
119
+ // eslint-disable-next-line react-hooks/rules-of-hooks
120
+ const [activeThree, setActiveThree] = useState(false);
121
+
122
+ return (
123
+ <Accordion {...args}>
124
+ <AccordionItem
125
+ contentRight={
126
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveFirst(!activeFirst)}>
127
+ <IconPlus size={getSizeForIcon(args.size)} />
128
+ </IconButton>
129
+ }
130
+ alignWithTitle={args.alignWithTitle}
131
+ type={args.type}
132
+ pin={args.pin}
133
+ title={args.title}
134
+ opened={activeFirst}
135
+ >
136
+ {args.body}
137
+ </AccordionItem>
138
+ <AccordionItem
139
+ contentRight={
140
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveSecond(!activeSecond)}>
141
+ <IconPlus size={getSizeForIcon(args.size)} />
142
+ </IconButton>
143
+ }
144
+ alignWithTitle={args.alignWithTitle}
145
+ type={args.type}
146
+ pin={args.pin}
147
+ title={args.title}
148
+ opened={activeSecond}
149
+ >
150
+ {args.body}
151
+ </AccordionItem>
152
+ <AccordionItem
153
+ contentRight={
154
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveThree(!activeThree)}>
155
+ <IconPlus size={getSizeForIcon(args.size)} />
156
+ </IconButton>
157
+ }
158
+ alignWithTitle={args.alignWithTitle}
159
+ type={args.type}
160
+ pin={args.pin}
161
+ title={args.title}
162
+ opened={activeThree}
163
+ >
164
+ {args.body}
165
+ </AccordionItem>
166
+ </Accordion>
167
+ );
168
+ };
169
+
170
+ export const Controlled: StoryObj<AccordionProps> = {
171
+ render: (props: AccordionProps) => ControlledAccordion(props),
172
+ };
@@ -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,80 @@ export const Default: StoryObj<AccordionProps> = {
91
93
  );
92
94
  },
93
95
  };
96
+
97
+ const getSizeForIcon = (size) => {
98
+ const map = {
99
+ mr: 's',
100
+ lr: 's',
101
+ m: 's',
102
+ l: 's',
103
+ sr: 's',
104
+ xsr: 'xs',
105
+ };
106
+ if (map[size]) {
107
+ return map[size];
108
+ }
109
+
110
+ return size;
111
+ };
112
+
113
+ const ControlledAccordion = (props: AccordionProps) => {
114
+ const args = { ...props, text: undefined };
115
+ // eslint-disable-next-line react-hooks/rules-of-hooks
116
+ const [activeFirst, setActiveFirst] = useState(false);
117
+ // eslint-disable-next-line react-hooks/rules-of-hooks
118
+ const [activeSecond, setActiveSecond] = useState(false);
119
+ // eslint-disable-next-line react-hooks/rules-of-hooks
120
+ const [activeThree, setActiveThree] = useState(false);
121
+
122
+ return (
123
+ <Accordion {...args}>
124
+ <AccordionItem
125
+ contentRight={
126
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveFirst(!activeFirst)}>
127
+ <IconPlus size={getSizeForIcon(args.size)} />
128
+ </IconButton>
129
+ }
130
+ alignWithTitle={args.alignWithTitle}
131
+ type={args.type}
132
+ pin={args.pin}
133
+ title={args.title}
134
+ opened={activeFirst}
135
+ >
136
+ {args.body}
137
+ </AccordionItem>
138
+ <AccordionItem
139
+ contentRight={
140
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveSecond(!activeSecond)}>
141
+ <IconPlus size={getSizeForIcon(args.size)} />
142
+ </IconButton>
143
+ }
144
+ alignWithTitle={args.alignWithTitle}
145
+ type={args.type}
146
+ pin={args.pin}
147
+ title={args.title}
148
+ opened={activeSecond}
149
+ >
150
+ {args.body}
151
+ </AccordionItem>
152
+ <AccordionItem
153
+ contentRight={
154
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveThree(!activeThree)}>
155
+ <IconPlus size={getSizeForIcon(args.size)} />
156
+ </IconButton>
157
+ }
158
+ alignWithTitle={args.alignWithTitle}
159
+ type={args.type}
160
+ pin={args.pin}
161
+ title={args.title}
162
+ opened={activeThree}
163
+ >
164
+ {args.body}
165
+ </AccordionItem>
166
+ </Accordion>
167
+ );
168
+ };
169
+
170
+ export const Controlled: StoryObj<AccordionProps> = {
171
+ render: (props: AccordionProps) => ControlledAccordion(props),
172
+ };
@@ -1,4 +1,18 @@
1
1
  import React from 'react';
2
- import type { AccordionItemProps } from './AccordionItem.types';
3
- export declare const AccordionItem: React.FC<AccordionItemProps>;
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
+ disabled?: boolean | undefined;
13
+ opened?: boolean | undefined;
14
+ eventKey?: number | undefined;
15
+ index?: number | undefined;
16
+ view?: string | undefined;
17
+ } & React.RefAttributes<HTMLDivElement>>;
4
18
  //# 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,KAAsC,MAAM,OAAO,CAAC;AAmB3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAqGtD,CAAC"}
1
+ {"version":3,"file":"AccordionItem.d.ts","sourceRoot":"","sources":["../../../../../src/components/Accordion/ui/AccordionItem/AccordionItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAsBvE,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;wCAgHzB,CAAC"}
@@ -3,6 +3,7 @@ export declare const StyledAccordionItem: import("@linaria/react").StyledCompone
3
3
  export declare const StyledAccordionHeader: import("@linaria/react").StyledComponent<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement> & Record<never, unknown>>;
4
4
  export declare const StyledAccordionHeaderLeft: import("@linaria/react").StyledComponent<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & Record<never, unknown>>;
5
5
  export declare const StyledAccordionContentRight: import("@linaria/react").StyledComponent<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & Record<never, unknown>>;
6
+ export declare const StyledAccordionContentRightDefault: import("@linaria/react").StyledComponent<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & Record<never, unknown>>;
6
7
  export declare const StyledAccordionContentLeft: import("@linaria/react").StyledComponent<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & Record<never, unknown>>;
7
8
  export declare const StyledAccordionTitle: import("@linaria/react").StyledComponent<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & Record<never, unknown>>;
8
9
  export declare const StyledAccordionBodyAnimate: import("@linaria/react").StyledComponent<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & Record<never, unknown>>;
@@ -1 +1 @@
1
- {"version":3,"file":"AccordionItem.styles.d.ts","sourceRoot":"","sources":["../../../../../src/components/Accordion/ui/AccordionItem/AccordionItem.styles.ts"],"names":[],"mappings":";AAMA,eAAO,MAAM,mBAAmB,qKAa/B,CAAC;AAEF,eAAO,MAAM,qBAAqB,iLAsBjC,CAAC;AAEF,eAAO,MAAM,yBAAyB,qKAKrC,CAAC;AAEF,eAAO,MAAM,2BAA2B,qKAQvC,CAAC;AAEF,eAAO,MAAM,0BAA0B,qKAStC,CAAC;AAEF,eAAO,MAAM,oBAAoB,qKAShC,CAAC;AAEF,eAAO,MAAM,0BAA0B,qKAetC,CAAC;AAEF,eAAO,MAAM,mBAAmB,qKAY/B,CAAC;AAEF,eAAO,MAAM,WAAW,uGAIvB,CAAC;AAEF,eAAO,MAAM,WAAW,uGAmBvB,CAAC;AAEF,eAAO,MAAM,UAAU,qKAOtB,CAAC"}
1
+ {"version":3,"file":"AccordionItem.styles.d.ts","sourceRoot":"","sources":["../../../../../src/components/Accordion/ui/AccordionItem/AccordionItem.styles.ts"],"names":[],"mappings":";AAMA,eAAO,MAAM,mBAAmB,qKAa/B,CAAC;AAEF,eAAO,MAAM,qBAAqB,iLAsBjC,CAAC;AAEF,eAAO,MAAM,yBAAyB,qKAKrC,CAAC;AAEF,eAAO,MAAM,2BAA2B,qKAQvC,CAAC;AAEF,eAAO,MAAM,kCAAkC,qKAI9C,CAAC;AAEF,eAAO,MAAM,0BAA0B,qKAStC,CAAC;AAEF,eAAO,MAAM,oBAAoB,qKAShC,CAAC;AAEF,eAAO,MAAM,0BAA0B,qKAetC,CAAC;AAEF,eAAO,MAAM,mBAAmB,qKAY/B,CAAC;AAEF,eAAO,MAAM,WAAW,uGAIvB,CAAC;AAEF,eAAO,MAAM,WAAW,uGAmBvB,CAAC;AAEF,eAAO,MAAM,UAAU,qKAOtB,CAAC"}
@@ -28,7 +28,7 @@ declare type Props = {
28
28
  /**
29
29
  * Заголовок accordion
30
30
  */
31
- title: ReactNode;
31
+ title?: ReactNode | string;
32
32
  /**
33
33
  * Контент аккордеона
34
34
  */
@@ -41,6 +41,10 @@ declare type Props = {
41
41
  * Блокировка элемента
42
42
  */
43
43
  disabled?: boolean;
44
+ /**
45
+ * Контроль элемента из вне
46
+ */
47
+ opened?: boolean;
44
48
  /**
45
49
  * Индекс элемента, который необходимо автоматически открыть
46
50
  */