@salutejs/plasma-new-hope 0.169.0-dev.0 → 0.170.0-canary.1484.11368065603.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 +10 -8
  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 +10 -8
  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 +78 -1
  11. package/emotion/cjs/examples/plasma_web/components/Accordion/Accordion.stories.tsx +78 -1
  12. package/emotion/es/components/Accordion/ui/AccordionItem/AccordionItem.js +12 -10
  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 +78 -1
  15. package/emotion/es/examples/plasma_web/components/Accordion/Accordion.stories.tsx +78 -1
  16. package/es/components/Accordion/ui/AccordionItem/AccordionItem.css +12 -11
  17. package/es/components/Accordion/ui/AccordionItem/AccordionItem.js +12 -10
  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 +10 -8
  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 +78 -1
  27. package/styled-components/cjs/examples/plasma_web/components/Accordion/Accordion.stories.tsx +78 -1
  28. package/styled-components/es/components/Accordion/ui/AccordionItem/AccordionItem.js +12 -10
  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 +78 -1
  31. package/styled-components/es/examples/plasma_web/components/Accordion/Accordion.stories.tsx +78 -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 +12 -8
  37. package/types/components/Accordion/ui/AccordionItem/AccordionItem.types.d.ts.map +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salutejs/plasma-new-hope",
3
- "version": "0.169.0-dev.0",
3
+ "version": "0.170.0-canary.1484.11368065603.0",
4
4
  "description": "Salute Design System blueprint",
5
5
  "main": "cjs/index.js",
6
6
  "module": "es/index.js",
@@ -124,5 +124,5 @@
124
124
  "react-popper": "2.3.0",
125
125
  "storeon": "3.1.5"
126
126
  },
127
- "gitHead": "7e8d5674d0003272dc484e60a2e65a69e26315a7"
127
+ "gitHead": "d331fbc67e140afd73dcef4c657ae08a8f982857"
128
128
  }
@@ -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,11 +65,11 @@ 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 StyledAnimationPLus = function StyledAnimationPLus() {
68
+ var openedBodyClass = (opened !== null && opened !== void 0 ? opened : value) ? _Accordion.classes.accordionItemShowBody : undefined;
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",
71
- color: "inhert"
72
+ color: "inherit"
72
73
  })), /*#__PURE__*/_react["default"].createElement(_AccordionItem.StyledMinus, {
73
74
  size: "xs",
74
75
  color: "inhert",
@@ -79,14 +80,15 @@ var AccordionItem = exports.AccordionItem = function AccordionItem(_ref) {
79
80
  var disabledClass = disabled ? _Accordion.classes.accordionDisabled : '';
80
81
  var leftContent = contentLeft !== null && contentLeft !== void 0 ? contentLeft : type === 'arrow' ? _StyledArrow || (_StyledArrow = /*#__PURE__*/_react["default"].createElement(_AccordionItem.StyledArrow, {
81
82
  size: "xs",
82
- color: "inhert"
83
+ color: "inherit"
83
84
  })) : undefined;
84
85
  var leftContentRotate = type === 'arrow' && value ? _Accordion.classes.accordionItemShowBody : undefined;
85
- var rightContent = contentRight !== null && contentRight !== void 0 ? contentRight : type === 'sign' ? /*#__PURE__*/_react["default"].createElement(StyledAnimationPLus, null) : undefined;
86
+ var rightContent = contentRight !== null && contentRight !== void 0 ? contentRight : type === 'sign' ? /*#__PURE__*/_react["default"].createElement(StyledAnimationPlus, null) : undefined;
86
87
  var rightContentRotate = type === 'sign' && value ? _Accordion.classes.accordionItemShowBody : undefined;
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,78 @@ export const Default: StoryObj<AccordionProps> = {
91
93
  );
92
94
  },
93
95
  };
96
+
97
+ const map = {
98
+ mr: 's',
99
+ lr: 's',
100
+ m: 's',
101
+ l: 's',
102
+ sr: 's',
103
+ xsr: 'xs',
104
+ };
105
+
106
+ const getSizeForIcon = (size) => {
107
+ if (map[size]) {
108
+ return map[size];
109
+ }
110
+
111
+ return size;
112
+ };
113
+
114
+ const ControlledAccordion = (props: AccordionProps) => {
115
+ const args = { ...props, text: undefined };
116
+ const [activeFirst, setActiveFirst] = useState(false);
117
+ const [activeSecond, setActiveSecond] = useState(false);
118
+ const [activeThree, setActiveThree] = useState(false);
119
+
120
+ return (
121
+ <Accordion {...args}>
122
+ <AccordionItem
123
+ contentRight={
124
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveFirst(!activeFirst)}>
125
+ <IconPlus size={getSizeForIcon(args.size)} />
126
+ </IconButton>
127
+ }
128
+ alignWithTitle={args.alignWithTitle}
129
+ type={args.type}
130
+ pin={args.pin}
131
+ title={args.title}
132
+ opened={activeFirst}
133
+ >
134
+ {args.body}
135
+ </AccordionItem>
136
+ <AccordionItem
137
+ contentRight={
138
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveSecond(!activeSecond)}>
139
+ <IconPlus size={getSizeForIcon(args.size)} />
140
+ </IconButton>
141
+ }
142
+ alignWithTitle={args.alignWithTitle}
143
+ type={args.type}
144
+ pin={args.pin}
145
+ title={args.title}
146
+ opened={activeSecond}
147
+ >
148
+ {args.body}
149
+ </AccordionItem>
150
+ <AccordionItem
151
+ contentRight={
152
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveThree(!activeThree)}>
153
+ <IconPlus size={getSizeForIcon(args.size)} />
154
+ </IconButton>
155
+ }
156
+ alignWithTitle={args.alignWithTitle}
157
+ type={args.type}
158
+ pin={args.pin}
159
+ title={args.title}
160
+ opened={activeThree}
161
+ >
162
+ {args.body}
163
+ </AccordionItem>
164
+ </Accordion>
165
+ );
166
+ };
167
+
168
+ export const Controlled: StoryObj<AccordionProps> = {
169
+ render: (props: AccordionProps) => ControlledAccordion(props),
170
+ };
@@ -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,78 @@ export const Default: StoryObj<AccordionProps> = {
91
93
  );
92
94
  },
93
95
  };
96
+
97
+ const map = {
98
+ mr: 's',
99
+ lr: 's',
100
+ m: 's',
101
+ l: 's',
102
+ sr: 's',
103
+ xsr: 'xs',
104
+ };
105
+
106
+ const getSizeForIcon = (size) => {
107
+ if (map[size]) {
108
+ return map[size];
109
+ }
110
+
111
+ return size;
112
+ };
113
+
114
+ const ControlledAccordion = (props: AccordionProps) => {
115
+ const args = { ...props, text: undefined };
116
+ const [activeFirst, setActiveFirst] = useState(false);
117
+ const [activeSecond, setActiveSecond] = useState(false);
118
+ const [activeThree, setActiveThree] = useState(false);
119
+
120
+ return (
121
+ <Accordion {...args}>
122
+ <AccordionItem
123
+ contentRight={
124
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveFirst(!activeFirst)}>
125
+ <IconPlus size={getSizeForIcon(args.size)} />
126
+ </IconButton>
127
+ }
128
+ alignWithTitle={args.alignWithTitle}
129
+ type={args.type}
130
+ pin={args.pin}
131
+ title={args.title}
132
+ opened={activeFirst}
133
+ >
134
+ {args.body}
135
+ </AccordionItem>
136
+ <AccordionItem
137
+ contentRight={
138
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveSecond(!activeSecond)}>
139
+ <IconPlus size={getSizeForIcon(args.size)} />
140
+ </IconButton>
141
+ }
142
+ alignWithTitle={args.alignWithTitle}
143
+ type={args.type}
144
+ pin={args.pin}
145
+ title={args.title}
146
+ opened={activeSecond}
147
+ >
148
+ {args.body}
149
+ </AccordionItem>
150
+ <AccordionItem
151
+ contentRight={
152
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveThree(!activeThree)}>
153
+ <IconPlus size={getSizeForIcon(args.size)} />
154
+ </IconButton>
155
+ }
156
+ alignWithTitle={args.alignWithTitle}
157
+ type={args.type}
158
+ pin={args.pin}
159
+ title={args.title}
160
+ opened={activeThree}
161
+ >
162
+ {args.body}
163
+ </AccordionItem>
164
+ </Accordion>
165
+ );
166
+ };
167
+
168
+ export const Controlled: StoryObj<AccordionProps> = {
169
+ render: (props: AccordionProps) => ControlledAccordion(props),
170
+ };
@@ -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,11 +57,11 @@ 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 StyledAnimationPLus = function StyledAnimationPLus() {
60
+ var openedBodyClass = (opened !== null && opened !== void 0 ? opened : value) ? classes.accordionItemShowBody : undefined;
61
+ var StyledAnimationPlus = function StyledAnimationPlus() {
61
62
  return /*#__PURE__*/React.createElement(StyledPlus, null, _StyledMinus || (_StyledMinus = /*#__PURE__*/React.createElement(StyledMinus, {
62
63
  size: "xs",
63
- color: "inhert"
64
+ color: "inherit"
64
65
  })), /*#__PURE__*/React.createElement(StyledMinus, {
65
66
  size: "xs",
66
67
  color: "inhert",
@@ -71,14 +72,15 @@ export var AccordionItem = function AccordionItem(_ref) {
71
72
  var disabledClass = disabled ? classes.accordionDisabled : '';
72
73
  var leftContent = contentLeft !== null && contentLeft !== void 0 ? contentLeft : type === 'arrow' ? _StyledArrow || (_StyledArrow = /*#__PURE__*/React.createElement(StyledArrow, {
73
74
  size: "xs",
74
- color: "inhert"
75
+ color: "inherit"
75
76
  })) : undefined;
76
77
  var leftContentRotate = type === 'arrow' && value ? classes.accordionItemShowBody : undefined;
77
- var rightContent = contentRight !== null && contentRight !== void 0 ? contentRight : type === 'sign' ? /*#__PURE__*/React.createElement(StyledAnimationPLus, null) : undefined;
78
+ var rightContent = contentRight !== null && contentRight !== void 0 ? contentRight : type === 'sign' ? /*#__PURE__*/React.createElement(StyledAnimationPlus, null) : undefined;
78
79
  var rightContentRotate = type === 'sign' && value ? classes.accordionItemShowBody : undefined;
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,78 @@ export const Default: StoryObj<AccordionProps> = {
91
93
  );
92
94
  },
93
95
  };
96
+
97
+ const map = {
98
+ mr: 's',
99
+ lr: 's',
100
+ m: 's',
101
+ l: 's',
102
+ sr: 's',
103
+ xsr: 'xs',
104
+ };
105
+
106
+ const getSizeForIcon = (size) => {
107
+ if (map[size]) {
108
+ return map[size];
109
+ }
110
+
111
+ return size;
112
+ };
113
+
114
+ const ControlledAccordion = (props: AccordionProps) => {
115
+ const args = { ...props, text: undefined };
116
+ const [activeFirst, setActiveFirst] = useState(false);
117
+ const [activeSecond, setActiveSecond] = useState(false);
118
+ const [activeThree, setActiveThree] = useState(false);
119
+
120
+ return (
121
+ <Accordion {...args}>
122
+ <AccordionItem
123
+ contentRight={
124
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveFirst(!activeFirst)}>
125
+ <IconPlus size={getSizeForIcon(args.size)} />
126
+ </IconButton>
127
+ }
128
+ alignWithTitle={args.alignWithTitle}
129
+ type={args.type}
130
+ pin={args.pin}
131
+ title={args.title}
132
+ opened={activeFirst}
133
+ >
134
+ {args.body}
135
+ </AccordionItem>
136
+ <AccordionItem
137
+ contentRight={
138
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveSecond(!activeSecond)}>
139
+ <IconPlus size={getSizeForIcon(args.size)} />
140
+ </IconButton>
141
+ }
142
+ alignWithTitle={args.alignWithTitle}
143
+ type={args.type}
144
+ pin={args.pin}
145
+ title={args.title}
146
+ opened={activeSecond}
147
+ >
148
+ {args.body}
149
+ </AccordionItem>
150
+ <AccordionItem
151
+ contentRight={
152
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveThree(!activeThree)}>
153
+ <IconPlus size={getSizeForIcon(args.size)} />
154
+ </IconButton>
155
+ }
156
+ alignWithTitle={args.alignWithTitle}
157
+ type={args.type}
158
+ pin={args.pin}
159
+ title={args.title}
160
+ opened={activeThree}
161
+ >
162
+ {args.body}
163
+ </AccordionItem>
164
+ </Accordion>
165
+ );
166
+ };
167
+
168
+ export const Controlled: StoryObj<AccordionProps> = {
169
+ render: (props: AccordionProps) => ControlledAccordion(props),
170
+ };
@@ -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,78 @@ export const Default: StoryObj<AccordionProps> = {
91
93
  );
92
94
  },
93
95
  };
96
+
97
+ const map = {
98
+ mr: 's',
99
+ lr: 's',
100
+ m: 's',
101
+ l: 's',
102
+ sr: 's',
103
+ xsr: 'xs',
104
+ };
105
+
106
+ const getSizeForIcon = (size) => {
107
+ if (map[size]) {
108
+ return map[size];
109
+ }
110
+
111
+ return size;
112
+ };
113
+
114
+ const ControlledAccordion = (props: AccordionProps) => {
115
+ const args = { ...props, text: undefined };
116
+ const [activeFirst, setActiveFirst] = useState(false);
117
+ const [activeSecond, setActiveSecond] = useState(false);
118
+ const [activeThree, setActiveThree] = useState(false);
119
+
120
+ return (
121
+ <Accordion {...args}>
122
+ <AccordionItem
123
+ contentRight={
124
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveFirst(!activeFirst)}>
125
+ <IconPlus size={getSizeForIcon(args.size)} />
126
+ </IconButton>
127
+ }
128
+ alignWithTitle={args.alignWithTitle}
129
+ type={args.type}
130
+ pin={args.pin}
131
+ title={args.title}
132
+ opened={activeFirst}
133
+ >
134
+ {args.body}
135
+ </AccordionItem>
136
+ <AccordionItem
137
+ contentRight={
138
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveSecond(!activeSecond)}>
139
+ <IconPlus size={getSizeForIcon(args.size)} />
140
+ </IconButton>
141
+ }
142
+ alignWithTitle={args.alignWithTitle}
143
+ type={args.type}
144
+ pin={args.pin}
145
+ title={args.title}
146
+ opened={activeSecond}
147
+ >
148
+ {args.body}
149
+ </AccordionItem>
150
+ <AccordionItem
151
+ contentRight={
152
+ <IconButton view="secondary" size={args.size} onClick={() => setActiveThree(!activeThree)}>
153
+ <IconPlus size={getSizeForIcon(args.size)} />
154
+ </IconButton>
155
+ }
156
+ alignWithTitle={args.alignWithTitle}
157
+ type={args.type}
158
+ pin={args.pin}
159
+ title={args.title}
160
+ opened={activeThree}
161
+ >
162
+ {args.body}
163
+ </AccordionItem>
164
+ </Accordion>
165
+ );
166
+ };
167
+
168
+ export const Controlled: StoryObj<AccordionProps> = {
169
+ render: (props: AccordionProps) => ControlledAccordion(props),
170
+ };
@@ -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"}