@dxc-technology/halstack-react 0.0.0-2c3a5e1 → 0.0.0-2d5bb6f

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. package/BackgroundColorContext.d.ts +2 -2
  2. package/BackgroundColorContext.js +1 -11
  3. package/HalstackContext.d.ts +13 -0
  4. package/HalstackContext.js +318 -0
  5. package/accordion/Accordion.d.ts +1 -1
  6. package/accordion/Accordion.js +123 -167
  7. package/accordion/Accordion.stories.tsx +115 -27
  8. package/accordion/Accordion.test.js +56 -0
  9. package/accordion/types.d.ts +10 -5
  10. package/accordion-group/AccordionGroup.d.ts +1 -1
  11. package/accordion-group/AccordionGroup.js +28 -77
  12. package/accordion-group/AccordionGroup.stories.tsx +28 -2
  13. package/accordion-group/AccordionGroup.test.js +108 -0
  14. package/accordion-group/types.d.ts +17 -6
  15. package/alert/Alert.js +18 -46
  16. package/alert/Alert.stories.tsx +28 -0
  17. package/alert/Alert.test.js +75 -0
  18. package/alert/types.d.ts +3 -3
  19. package/badge/Badge.d.ts +4 -0
  20. package/badge/Badge.js +6 -16
  21. package/badge/types.d.ts +5 -0
  22. package/bleed/Bleed.js +14 -55
  23. package/bleed/Bleed.stories.tsx +94 -95
  24. package/bleed/types.d.ts +26 -2
  25. package/box/Box.js +34 -63
  26. package/box/Box.stories.tsx +15 -0
  27. package/box/Box.test.js +13 -0
  28. package/box/types.d.ts +5 -4
  29. package/bulleted-list/BulletedList.d.ts +7 -0
  30. package/bulleted-list/BulletedList.js +98 -0
  31. package/bulleted-list/BulletedList.stories.tsx +200 -0
  32. package/bulleted-list/types.d.ts +11 -0
  33. package/button/Button.js +61 -100
  34. package/button/Button.stories.tsx +159 -8
  35. package/button/Button.test.js +26 -0
  36. package/button/types.d.ts +8 -8
  37. package/card/Card.js +44 -70
  38. package/card/Card.test.js +39 -0
  39. package/card/types.d.ts +4 -3
  40. package/checkbox/Checkbox.d.ts +2 -2
  41. package/checkbox/Checkbox.js +115 -162
  42. package/checkbox/Checkbox.stories.tsx +198 -130
  43. package/checkbox/Checkbox.test.js +128 -0
  44. package/checkbox/types.d.ts +14 -6
  45. package/chip/Chip.js +26 -50
  46. package/chip/Chip.stories.tsx +96 -9
  47. package/chip/Chip.test.js +42 -0
  48. package/chip/types.d.ts +4 -4
  49. package/common/utils.js +1 -6
  50. package/common/variables.d.ts +1431 -0
  51. package/common/variables.js +480 -553
  52. package/date-input/Calendar.d.ts +4 -0
  53. package/date-input/Calendar.js +215 -0
  54. package/date-input/DateInput.js +164 -300
  55. package/date-input/DateInput.stories.tsx +199 -33
  56. package/date-input/DateInput.test.js +648 -0
  57. package/date-input/DatePicker.d.ts +4 -0
  58. package/date-input/DatePicker.js +116 -0
  59. package/date-input/Icons.d.ts +6 -0
  60. package/date-input/Icons.js +63 -0
  61. package/date-input/YearPicker.d.ts +4 -0
  62. package/date-input/YearPicker.js +101 -0
  63. package/date-input/types.d.ts +71 -13
  64. package/dialog/Dialog.js +52 -84
  65. package/dialog/Dialog.stories.tsx +99 -22
  66. package/dialog/Dialog.test.js +56 -0
  67. package/dialog/types.d.ts +4 -3
  68. package/dropdown/Dropdown.d.ts +1 -1
  69. package/dropdown/Dropdown.js +239 -300
  70. package/dropdown/Dropdown.stories.tsx +245 -56
  71. package/dropdown/Dropdown.test.js +479 -0
  72. package/dropdown/DropdownMenu.d.ts +4 -0
  73. package/dropdown/DropdownMenu.js +60 -0
  74. package/dropdown/DropdownMenuItem.d.ts +4 -0
  75. package/dropdown/DropdownMenuItem.js +70 -0
  76. package/dropdown/types.d.ts +26 -6
  77. package/file-input/FileInput.d.ts +2 -2
  78. package/file-input/FileInput.js +224 -351
  79. package/file-input/FileInput.stories.tsx +122 -11
  80. package/file-input/FileInput.test.js +445 -0
  81. package/file-input/FileItem.d.ts +4 -14
  82. package/file-input/FileItem.js +48 -97
  83. package/file-input/types.d.ts +24 -7
  84. package/flex/Flex.d.ts +4 -0
  85. package/flex/Flex.js +57 -0
  86. package/flex/Flex.stories.tsx +103 -0
  87. package/flex/types.d.ts +32 -0
  88. package/footer/Footer.js +28 -133
  89. package/footer/Footer.stories.tsx +99 -1
  90. package/footer/Footer.test.js +92 -0
  91. package/footer/Icons.js +1 -5
  92. package/footer/types.d.ts +7 -6
  93. package/header/Header.js +112 -177
  94. package/header/Header.stories.tsx +189 -36
  95. package/header/Header.test.js +66 -0
  96. package/header/Icons.js +2 -6
  97. package/header/types.d.ts +4 -3
  98. package/heading/Heading.js +8 -29
  99. package/heading/Heading.test.js +169 -0
  100. package/heading/types.d.ts +3 -3
  101. package/inset/Inset.js +14 -55
  102. package/inset/Inset.stories.tsx +36 -36
  103. package/inset/types.d.ts +26 -2
  104. package/layout/ApplicationLayout.d.ts +16 -6
  105. package/layout/ApplicationLayout.js +71 -164
  106. package/layout/ApplicationLayout.stories.tsx +84 -93
  107. package/layout/Icons.d.ts +5 -0
  108. package/layout/Icons.js +11 -10
  109. package/layout/SidenavContext.d.ts +5 -0
  110. package/layout/SidenavContext.js +15 -0
  111. package/layout/types.d.ts +18 -33
  112. package/link/Link.d.ts +3 -2
  113. package/link/Link.js +61 -106
  114. package/link/Link.stories.tsx +159 -52
  115. package/link/Link.test.js +65 -0
  116. package/link/types.d.ts +9 -29
  117. package/main.d.ts +10 -15
  118. package/main.js +43 -124
  119. package/nav-tabs/NavTabs.d.ts +8 -0
  120. package/nav-tabs/NavTabs.js +95 -0
  121. package/nav-tabs/NavTabs.stories.tsx +260 -0
  122. package/nav-tabs/NavTabs.test.js +75 -0
  123. package/nav-tabs/Tab.d.ts +4 -0
  124. package/nav-tabs/Tab.js +120 -0
  125. package/nav-tabs/types.d.ts +53 -0
  126. package/number-input/NumberInput.js +21 -38
  127. package/number-input/NumberInput.stories.tsx +5 -5
  128. package/number-input/NumberInput.test.js +406 -0
  129. package/number-input/NumberInputContext.js +0 -5
  130. package/number-input/numberInputContextTypes.d.ts +1 -1
  131. package/number-input/types.d.ts +21 -14
  132. package/package.json +22 -25
  133. package/paginator/Icons.d.ts +5 -0
  134. package/paginator/Icons.js +16 -38
  135. package/paginator/Paginator.js +31 -82
  136. package/paginator/Paginator.stories.tsx +24 -0
  137. package/paginator/Paginator.test.js +266 -0
  138. package/paginator/types.d.ts +1 -1
  139. package/paragraph/Paragraph.d.ts +6 -0
  140. package/paragraph/Paragraph.js +28 -0
  141. package/paragraph/Paragraph.stories.tsx +44 -0
  142. package/password-input/PasswordInput.js +28 -54
  143. package/password-input/PasswordInput.test.js +138 -0
  144. package/password-input/types.d.ts +18 -15
  145. package/progress-bar/ProgressBar.d.ts +2 -2
  146. package/progress-bar/ProgressBar.js +65 -84
  147. package/progress-bar/ProgressBar.stories.jsx +47 -12
  148. package/progress-bar/ProgressBar.test.js +93 -0
  149. package/progress-bar/types.d.ts +3 -4
  150. package/quick-nav/QuickNav.d.ts +4 -0
  151. package/quick-nav/QuickNav.js +95 -0
  152. package/quick-nav/QuickNav.stories.tsx +356 -0
  153. package/quick-nav/types.d.ts +21 -0
  154. package/quick-nav/types.js +5 -0
  155. package/radio-group/Radio.d.ts +1 -1
  156. package/radio-group/Radio.js +55 -70
  157. package/radio-group/RadioGroup.js +91 -126
  158. package/radio-group/RadioGroup.stories.tsx +171 -36
  159. package/radio-group/RadioGroup.test.js +529 -157
  160. package/radio-group/types.d.ts +86 -8
  161. package/resultsetTable/Icons.d.ts +7 -0
  162. package/resultsetTable/Icons.js +48 -0
  163. package/resultsetTable/ResultsetTable.js +66 -157
  164. package/resultsetTable/ResultsetTable.stories.tsx +50 -25
  165. package/resultsetTable/ResultsetTable.test.js +292 -0
  166. package/resultsetTable/types.d.ts +5 -5
  167. package/select/Icons.d.ts +10 -0
  168. package/select/Icons.js +90 -0
  169. package/select/Listbox.d.ts +4 -0
  170. package/select/Listbox.js +144 -0
  171. package/select/Option.d.ts +4 -0
  172. package/select/Option.js +81 -0
  173. package/select/Select.js +201 -485
  174. package/select/Select.stories.tsx +600 -201
  175. package/select/Select.test.js +1845 -0
  176. package/select/types.d.ts +62 -22
  177. package/sidenav/Sidenav.d.ts +6 -5
  178. package/sidenav/Sidenav.js +164 -74
  179. package/sidenav/Sidenav.stories.tsx +249 -149
  180. package/sidenav/Sidenav.test.js +37 -0
  181. package/sidenav/types.d.ts +50 -27
  182. package/slider/Slider.d.ts +2 -2
  183. package/slider/Slider.js +143 -164
  184. package/slider/Slider.stories.tsx +72 -9
  185. package/slider/Slider.test.js +222 -0
  186. package/slider/types.d.ts +11 -3
  187. package/spinner/Spinner.js +12 -41
  188. package/spinner/Spinner.stories.jsx +27 -1
  189. package/spinner/Spinner.test.js +55 -0
  190. package/spinner/types.d.ts +3 -3
  191. package/switch/Switch.d.ts +2 -2
  192. package/switch/Switch.js +148 -107
  193. package/switch/Switch.stories.tsx +53 -42
  194. package/switch/Switch.test.js +180 -0
  195. package/switch/types.d.ts +13 -5
  196. package/table/Table.js +5 -23
  197. package/table/Table.stories.jsx +80 -1
  198. package/table/Table.test.js +21 -0
  199. package/table/types.d.ts +3 -3
  200. package/tabs/Tab.d.ts +4 -0
  201. package/tabs/Tab.js +115 -0
  202. package/tabs/Tabs.d.ts +1 -1
  203. package/tabs/Tabs.js +318 -139
  204. package/tabs/Tabs.stories.tsx +119 -13
  205. package/tabs/Tabs.test.js +295 -0
  206. package/tabs/types.d.ts +21 -7
  207. package/tag/Tag.js +34 -68
  208. package/tag/Tag.stories.tsx +25 -8
  209. package/tag/Tag.test.js +49 -0
  210. package/tag/types.d.ts +7 -7
  211. package/text-input/Icons.d.ts +8 -0
  212. package/text-input/Icons.js +57 -0
  213. package/text-input/Suggestion.d.ts +4 -0
  214. package/text-input/Suggestion.js +68 -0
  215. package/text-input/Suggestions.d.ts +4 -0
  216. package/text-input/Suggestions.js +109 -0
  217. package/text-input/TextInput.js +232 -438
  218. package/text-input/TextInput.stories.tsx +310 -197
  219. package/text-input/TextInput.test.js +1404 -0
  220. package/text-input/types.d.ts +55 -17
  221. package/textarea/Textarea.js +53 -96
  222. package/textarea/Textarea.stories.jsx +93 -13
  223. package/textarea/Textarea.test.js +360 -0
  224. package/textarea/types.d.ts +22 -15
  225. package/toggle-group/ToggleGroup.d.ts +1 -1
  226. package/toggle-group/ToggleGroup.js +23 -57
  227. package/toggle-group/ToggleGroup.stories.tsx +46 -4
  228. package/toggle-group/ToggleGroup.test.js +124 -0
  229. package/toggle-group/types.d.ts +19 -11
  230. package/translatedLabelsType.d.ts +82 -0
  231. package/translatedLabelsType.js +5 -0
  232. package/typography/Typography.d.ts +4 -0
  233. package/typography/Typography.js +119 -0
  234. package/typography/Typography.stories.tsx +198 -0
  235. package/typography/types.d.ts +18 -0
  236. package/typography/types.js +5 -0
  237. package/useTheme.d.ts +1 -1
  238. package/useTheme.js +3 -9
  239. package/useTranslatedLabels.d.ts +3 -0
  240. package/useTranslatedLabels.js +15 -0
  241. package/wizard/Wizard.d.ts +1 -1
  242. package/wizard/Wizard.js +68 -98
  243. package/wizard/Wizard.stories.tsx +48 -19
  244. package/wizard/Wizard.test.js +114 -0
  245. package/wizard/types.d.ts +12 -7
  246. package/ThemeContext.d.ts +0 -15
  247. package/ThemeContext.js +0 -243
  248. package/V3Select/V3Select.js +0 -455
  249. package/V3Select/index.d.ts +0 -27
  250. package/V3Textarea/V3Textarea.js +0 -260
  251. package/V3Textarea/index.d.ts +0 -27
  252. package/common/RequiredComponent.js +0 -32
  253. package/date/Date.js +0 -373
  254. package/date/index.d.ts +0 -27
  255. package/input-text/Icons.js +0 -22
  256. package/input-text/InputText.js +0 -611
  257. package/input-text/index.d.ts +0 -36
  258. package/list/List.d.ts +0 -4
  259. package/list/List.js +0 -47
  260. package/list/List.stories.tsx +0 -95
  261. package/list/types.d.ts +0 -7
  262. package/radio/Radio.d.ts +0 -4
  263. package/radio/Radio.js +0 -174
  264. package/radio/Radio.stories.tsx +0 -192
  265. package/radio/types.d.ts +0 -54
  266. package/row/Row.d.ts +0 -3
  267. package/row/Row.js +0 -127
  268. package/row/Row.stories.tsx +0 -237
  269. package/row/types.d.ts +0 -10
  270. package/stack/Stack.d.ts +0 -3
  271. package/stack/Stack.js +0 -97
  272. package/stack/Stack.stories.tsx +0 -164
  273. package/stack/types.d.ts +0 -9
  274. package/text/Text.d.ts +0 -7
  275. package/text/Text.js +0 -30
  276. package/text/Text.stories.tsx +0 -19
  277. package/toggle/Toggle.js +0 -186
  278. package/toggle/index.d.ts +0 -21
  279. package/upload/Upload.js +0 -201
  280. package/upload/buttons-upload/ButtonsUpload.js +0 -111
  281. package/upload/buttons-upload/Icons.js +0 -40
  282. package/upload/dragAndDropArea/DragAndDropArea.js +0 -225
  283. package/upload/dragAndDropArea/Icons.js +0 -39
  284. package/upload/file-upload/FileToUpload.js +0 -115
  285. package/upload/file-upload/Icons.js +0 -66
  286. package/upload/files-upload/FilesToUpload.js +0 -109
  287. package/upload/index.d.ts +0 -15
  288. package/upload/transaction/Icons.js +0 -160
  289. package/upload/transaction/Transaction.js +0 -104
  290. package/upload/transactions/Transactions.js +0 -94
  291. /package/{list → badge}/types.js +0 -0
  292. /package/{radio → bulleted-list}/types.js +0 -0
  293. /package/{row → flex}/types.js +0 -0
  294. /package/{stack → nav-tabs}/types.js +0 -0
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _react = _interopRequireDefault(require("react"));
5
+ var _react2 = require("@testing-library/react");
6
+ var _Accordion = _interopRequireDefault(require("./Accordion"));
7
+ describe("Accordion component tests", function () {
8
+ test("Renders with correct aria accessibility attributes", function () {
9
+ var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Accordion["default"], {
10
+ label: "Accordion",
11
+ defaultIsExpanded: true
12
+ }, /*#__PURE__*/_react["default"].createElement("div", null, "test-expanded"))),
13
+ getByRole = _render.getByRole;
14
+ var accordion = getByRole("button");
15
+ var panel = getByRole("region");
16
+ expect(accordion.getAttribute("aria-controls")).toBe(panel.id);
17
+ expect(panel.getAttribute("aria-labelledby")).toBe(accordion.id);
18
+ });
19
+ test("Renders expanded by default when it is uncontrolled", function () {
20
+ var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Accordion["default"], {
21
+ label: "Accordion",
22
+ defaultIsExpanded: true
23
+ }, /*#__PURE__*/_react["default"].createElement("div", null, "test-expanded"))),
24
+ getByRole = _render2.getByRole;
25
+ var accordion = getByRole("button");
26
+ expect(accordion.getAttribute("aria-expanded")).toBe("true");
27
+ });
28
+ test("Calls correct function on click", function () {
29
+ var onChange = jest.fn();
30
+ var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Accordion["default"], {
31
+ label: "Accordion",
32
+ onChange: onChange
33
+ })),
34
+ getByText = _render3.getByText;
35
+ _react2.fireEvent.click(getByText("Accordion"));
36
+ expect(onChange).toHaveBeenCalled();
37
+ });
38
+ test("Controlled accordion", function () {
39
+ var onChange = jest.fn();
40
+ var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Accordion["default"], {
41
+ label: "Accordion",
42
+ onChange: onChange,
43
+ isExpanded: true
44
+ })),
45
+ getByText = _render4.getByText,
46
+ getByRole = _render4.getByRole;
47
+ expect(getByRole("button").getAttribute("aria-expanded")).toBe("true");
48
+ _react2.fireEvent.click(getByText("Accordion"));
49
+ _react2.fireEvent.click(getByText("Accordion"));
50
+ _react2.fireEvent.click(getByText("Accordion"));
51
+ expect(onChange).toHaveBeenCalledTimes(3);
52
+ expect(onChange.mock.calls[0][0]).toBe(false);
53
+ expect(onChange.mock.calls[1][0]).toBe(false);
54
+ expect(onChange.mock.calls[2][0]).toBe(false);
55
+ });
56
+ });
@@ -1,23 +1,27 @@
1
1
  /// <reference types="react" />
2
- declare type Space = "xxsmall" | "xsmall" | "small" | "medium" | "large" | "xlarge" | "xxlarge";
3
- declare type Margin = {
2
+ export type Space = "xxsmall" | "xsmall" | "small" | "medium" | "large" | "xlarge" | "xxlarge";
3
+ export type Margin = {
4
4
  top?: Space;
5
5
  bottom?: Space;
6
6
  left?: Space;
7
7
  right?: Space;
8
8
  };
9
- declare type Padding = {
9
+ export type Padding = {
10
10
  top?: Space;
11
11
  bottom?: Space;
12
12
  left?: Space;
13
13
  right?: Space;
14
14
  };
15
- declare type SVG = React.SVGProps<SVGSVGElement>;
16
- declare type Props = {
15
+ type SVG = React.ReactNode & React.SVGProps<SVGSVGElement>;
16
+ type Props = {
17
17
  /**
18
18
  * The panel label.
19
19
  */
20
20
  label: string;
21
+ /**
22
+ * Initial state of the panel, only when it is uncontrolled.
23
+ */
24
+ defaultIsExpanded?: boolean;
21
25
  /**
22
26
  * Represents the state of the panel. When true, the component will be
23
27
  * expanded. If undefined, the component will be uncontrolled and its
@@ -52,6 +56,7 @@ declare type Props = {
52
56
  */
53
57
  margin?: Space | Margin;
54
58
  /**
59
+ * @deprecated This prop will be removed shortly, consider using the Inset component for this purpose.
55
60
  * Size of the padding to be applied to the custom area ('xxsmall' | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'xxlarge').
56
61
  * You can pass an object with 'top', 'bottom', 'left' and 'right' properties in order to specify different padding sizes.
57
62
  */
@@ -1,7 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  import AccordionGroupPropsType, { AccordionPropsType } from "./types";
3
3
  declare const DxcAccordionGroup: {
4
- ({ indexActive, disabled, onActiveChange, margin, children, }: AccordionGroupPropsType): JSX.Element;
4
+ ({ defaultIndexActive, indexActive, disabled, onActiveChange, margin, children, }: AccordionGroupPropsType): JSX.Element;
5
5
  Accordion: ({ ...childProps }: AccordionPropsType) => JSX.Element;
6
6
  };
7
7
  export default DxcAccordionGroup;
@@ -1,98 +1,72 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  var _typeof3 = require("@babel/runtime/helpers/typeof");
6
-
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
8
  exports["default"] = void 0;
11
-
12
9
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
13
-
14
10
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
15
-
16
11
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
-
18
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
19
-
13
+ var _objectDestructuringEmpty2 = _interopRequireDefault(require("@babel/runtime/helpers/objectDestructuringEmpty"));
20
14
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
21
-
22
15
  var _react = _interopRequireWildcard(require("react"));
23
-
24
16
  var _styledComponents = _interopRequireWildcard(require("styled-components"));
25
-
26
17
  var _Accordion = _interopRequireDefault(require("../accordion/Accordion"));
27
-
28
18
  var _utils = require("../common/utils.js");
29
-
30
- var _variables = require("../common/variables.js");
31
-
19
+ var _variables = require("../common/variables");
32
20
  var _useTheme = _interopRequireDefault(require("../useTheme"));
33
-
34
21
  var _templateObject;
35
-
36
22
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
37
-
38
23
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
39
-
40
24
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
41
-
42
25
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
43
-
44
26
  var AccordionGroupAccordionContext = /*#__PURE__*/(0, _react.createContext)(null);
45
-
46
27
  var AccordionGroupAccordion = function AccordionGroupAccordion(_ref) {
47
- var childProps = (0, _extends2["default"])({}, _ref);
48
-
28
+ var childProps = (0, _extends2["default"])({}, ((0, _objectDestructuringEmpty2["default"])(_ref), _ref));
49
29
  var _useContext = (0, _react.useContext)(AccordionGroupAccordionContext),
50
- innerIsExpanded = _useContext.innerIsExpanded,
51
- handlerActiveChange = _useContext.handlerActiveChange,
52
- disabled = _useContext.disabled,
53
- index = _useContext.index;
54
-
30
+ activeIndex = _useContext.activeIndex,
31
+ handlerActiveChange = _useContext.handlerActiveChange,
32
+ disabled = _useContext.disabled,
33
+ index = _useContext.index;
55
34
  return /*#__PURE__*/_react["default"].createElement(_Accordion["default"], (0, _extends2["default"])({
56
- isExpanded: innerIsExpanded === index,
35
+ isExpanded: activeIndex === index,
57
36
  onChange: function onChange() {
58
37
  handlerActiveChange(index);
59
38
  },
60
39
  disabled: disabled
61
40
  }, childProps), childProps.children);
62
41
  };
63
-
64
42
  var DxcAccordionGroup = function DxcAccordionGroup(_ref2) {
65
- var indexActive = _ref2.indexActive,
66
- _ref2$disabled = _ref2.disabled,
67
- disabled = _ref2$disabled === void 0 ? false : _ref2$disabled,
68
- onActiveChange = _ref2.onActiveChange,
69
- margin = _ref2.margin,
70
- children = _ref2.children;
43
+ var defaultIndexActive = _ref2.defaultIndexActive,
44
+ indexActive = _ref2.indexActive,
45
+ _ref2$disabled = _ref2.disabled,
46
+ disabled = _ref2$disabled === void 0 ? false : _ref2$disabled,
47
+ onActiveChange = _ref2.onActiveChange,
48
+ margin = _ref2.margin,
49
+ children = _ref2.children;
71
50
  var colorsTheme = (0, _useTheme["default"])();
72
-
73
- var _useState = (0, _react.useState)(0),
74
- _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
75
- innerIsExpanded = _useState2[0],
76
- setInnerIsExpanded = _useState2[1];
77
-
51
+ var _useState = (0, _react.useState)(defaultIndexActive !== null && defaultIndexActive !== void 0 ? defaultIndexActive : -1),
52
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
53
+ innerIndexActive = _useState2[0],
54
+ setInnerIndexActive = _useState2[1];
78
55
  var handlerActiveChange = (0, _react.useCallback)(function (index) {
79
- indexActive === undefined ? setInnerIsExpanded(function (prev) {
56
+ indexActive !== null && indexActive !== void 0 ? indexActive : setInnerIndexActive(function (prev) {
80
57
  return index === prev ? -1 : index;
81
- }) : setInnerIsExpanded(indexActive);
58
+ });
82
59
  !disabled && (onActiveChange === null || onActiveChange === void 0 ? void 0 : onActiveChange(index));
83
60
  }, [disabled, indexActive, onActiveChange]);
84
- var value = (0, _react.useMemo)(function () {
61
+ var contextValue = (0, _react.useMemo)(function () {
85
62
  return {
86
- innerIsExpanded: innerIsExpanded,
63
+ activeIndex: indexActive !== null && indexActive !== void 0 ? indexActive : innerIndexActive,
87
64
  handlerActiveChange: handlerActiveChange,
88
65
  disabled: disabled
89
66
  };
90
- }, [innerIsExpanded, disabled]);
91
- (0, _react.useEffect)(function () {
92
- setInnerIsExpanded(indexActive);
93
- }, [indexActive]);
67
+ }, [indexActive, innerIndexActive, handlerActiveChange, disabled]);
94
68
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
95
- theme: colorsTheme.accordion
69
+ theme: colorsTheme["accordion"]
96
70
  }, /*#__PURE__*/_react["default"].createElement(AccordionGroupContainer, {
97
71
  margin: margin,
98
72
  disabled: disabled
@@ -100,20 +74,18 @@ var DxcAccordionGroup = function DxcAccordionGroup(_ref2) {
100
74
  return child.type === AccordionGroupAccordion;
101
75
  }).map(function (accordion, index) {
102
76
  return /*#__PURE__*/_react["default"].createElement(AccordionGroupAccordionContext.Provider, {
77
+ key: "accordion-".concat(index),
103
78
  value: _objectSpread({
104
79
  index: index
105
- }, value)
80
+ }, contextValue)
106
81
  }, accordion);
107
82
  })));
108
83
  };
109
-
110
84
  DxcAccordionGroup.Accordion = AccordionGroupAccordion;
111
-
112
85
  var calculateWidth = function calculateWidth(margin) {
113
86
  return "calc(100% - ".concat((0, _utils.getMargin)(margin, "left"), " - ").concat((0, _utils.getMargin)(margin, "right"), ")");
114
87
  };
115
-
116
- var AccordionGroupContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-block;\n width: ", ";\n\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n\n cursor: ", ";\n\n & > :not(div:last-child) {\n & > div:first-child {\n border-radius: 0;\n border-bottom: ", ";\n border-color: ", ";\n\n & > .Mui-expanded {\n border-radius: 0;\n }\n & > .MuiButtonBase-root {\n border-radius: 0;\n }\n }\n }\n\n & > div:first-child {\n & > div:first-child {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-top-left-radius: ", ";\n border-top-right-radius: ", ";\n border-bottom: ", ";\n border-color: ", ";\n\n & > .Mui-expanded {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-top-left-radius: ", ";\n border-top-right-radius: ", ";\n }\n & > .MuiButtonBase-root {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-top-left-radius: ", ";\n border-top-right-radius: ", ";\n }\n }\n }\n\n & > div:last-child {\n & > div:first-child {\n border-bottom-left-radius: ", ";\n border-bottom-right-radius: ", ";\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n\n & > .Mui-expanded {\n border-bottom-left-radius: ", ";\n border-bottom-right-radius: ", ";\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n & > .MuiButtonBase-root {\n border-bottom-left-radius: ", ";\n border-bottom-right-radius: ", ";\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n }\n }\n"])), function (props) {
88
+ var AccordionGroupContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n width: ", ";\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n cursor: ", ";\n\n > div:not(:last-of-type):not(:only-of-type) {\n border-bottom: ", ";\n border-color: ", ";\n }\n > div:not(:first-of-type):not(:last-of-type):not(:only-of-type) {\n border-radius: 0;\n & > h3 > button {\n border-radius: 0;\n }\n }\n > div:first-of-type:not(:only-of-type) {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-top-left-radius: ", ";\n border-top-right-radius: ", ";\n\n & > h3 > button {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n > div:last-of-type:not(:only-of-type) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-left-radius: ", ";\n border-bottom-right-radius: ", ";\n\n & > h3 > button {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n }\n"])), function (props) {
117
89
  return calculateWidth(props.margin);
118
90
  }, function (_ref3) {
119
91
  var margin = _ref3.margin;
@@ -140,31 +112,10 @@ var AccordionGroupContainer = _styledComponents["default"].div(_templateObject |
140
112
  return props.theme.borderRadius;
141
113
  }, function (props) {
142
114
  return props.theme.borderRadius;
143
- }, function (props) {
144
- return "".concat(props.theme.accordionGroupSeparatorBorderThickness, " ").concat(props.theme.accordionGroupSeparatorBorderStyle);
145
- }, function (props) {
146
- return props.theme.accordionGroupSeparatorBorderColor;
147
- }, function (props) {
148
- return props.theme.borderRadius;
149
- }, function (props) {
150
- return props.theme.borderRadius;
151
- }, function (props) {
152
- return props.theme.borderRadius;
153
- }, function (props) {
154
- return props.theme.borderRadius;
155
- }, function (props) {
156
- return props.theme.borderRadius;
157
- }, function (props) {
158
- return props.theme.borderRadius;
159
- }, function (props) {
160
- return props.theme.borderRadius;
161
- }, function (props) {
162
- return props.theme.borderRadius;
163
115
  }, function (props) {
164
116
  return props.theme.borderRadius;
165
117
  }, function (props) {
166
118
  return props.theme.borderRadius;
167
119
  });
168
-
169
120
  var _default = DxcAccordionGroup;
170
121
  exports["default"] = _default;
@@ -36,7 +36,7 @@ export const Chromatic = () => (
36
36
  </ExampleContainer>
37
37
  <ExampleContainer>
38
38
  <Title title="Expanded" theme="light" level={4} />
39
- <DxcAccordionGroup indexActive={1}>
39
+ <DxcAccordionGroup defaultIndexActive={1}>
40
40
  <DxcAccordionGroup.Accordion label="Accordion1" padding="medium">
41
41
  <div>
42
42
  Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
@@ -80,6 +80,32 @@ export const Chromatic = () => (
80
80
  </DxcAccordionGroup.Accordion>
81
81
  </DxcAccordionGroup>
82
82
  </ExampleContainer>
83
+ <ExampleContainer pseudoState="pseudo-focus">
84
+ <Title title="Focused" theme="light" level={4} />
85
+ <DxcAccordionGroup defaultIndexActive={2}>
86
+ <DxcAccordionGroup.Accordion label="Accordion1" padding="medium">
87
+ <div>
88
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
89
+ dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
90
+ ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat
91
+ nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit
92
+ anim id est laborum.
93
+ </div>
94
+ </DxcAccordionGroup.Accordion>
95
+ <DxcAccordionGroup.Accordion label="Accordion2" padding="medium">
96
+ <div>
97
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex, sit amet blandit
98
+ leo lobortis eget.
99
+ </div>
100
+ </DxcAccordionGroup.Accordion>
101
+ <DxcAccordionGroup.Accordion label="Accordion2" padding="medium">
102
+ <div>
103
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex, sit amet blandit
104
+ leo lobortis eget.
105
+ </div>
106
+ </DxcAccordionGroup.Accordion>
107
+ </DxcAccordionGroup>
108
+ </ExampleContainer>
83
109
  <Title title="Margins" theme="light" level={2} />
84
110
  <ExampleContainer>
85
111
  <Title title="Xxsmall" theme="light" level={4} />
@@ -222,4 +248,4 @@ export const Chromatic = () => (
222
248
  </DxcAccordionGroup>
223
249
  </ExampleContainer>
224
250
  </>
225
- );
251
+ );
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _react = _interopRequireDefault(require("react"));
5
+ var _react2 = require("@testing-library/react");
6
+ var _AccordionGroup = _interopRequireDefault(require("./AccordionGroup"));
7
+ describe("Accordion component tests", function () {
8
+ test("Uncontrolled accordion group calls correct function on click", function () {
9
+ var onActiveChange = jest.fn();
10
+ var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_AccordionGroup["default"], {
11
+ margin: "large",
12
+ onActiveChange: onActiveChange
13
+ }, /*#__PURE__*/_react["default"].createElement(_AccordionGroup["default"].Accordion, {
14
+ label: "Accordion1",
15
+ padding: "medium",
16
+ margin: "large"
17
+ }, /*#__PURE__*/_react["default"].createElement("div", null, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex, sit amet blandit leo lobortis eget.")), /*#__PURE__*/_react["default"].createElement(_AccordionGroup["default"].Accordion, {
18
+ label: "Accordion2",
19
+ padding: "medium"
20
+ }, /*#__PURE__*/_react["default"].createElement("div", null, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex, sit amet blandit leo lobortis eget.")))),
21
+ getByText = _render.getByText,
22
+ getAllByRole = _render.getAllByRole;
23
+ expect(getAllByRole("button")[0].getAttribute("aria-expanded")).toBe("false");
24
+ expect(getAllByRole("button")[1].getAttribute("aria-expanded")).toBe("false");
25
+ _react2.fireEvent.click(getByText("Accordion1"));
26
+ expect(onActiveChange).toHaveBeenCalled();
27
+ expect(getAllByRole("button")[0].getAttribute("aria-expanded")).toBe("true");
28
+ expect(getAllByRole("button")[1].getAttribute("aria-expanded")).toBe("false");
29
+ });
30
+ test("Uncontrolled accordion group renders initially with an accordion expanded using defaultIndexActive", function () {
31
+ var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_AccordionGroup["default"], {
32
+ defaultIndexActive: 1
33
+ }, /*#__PURE__*/_react["default"].createElement(_AccordionGroup["default"].Accordion, {
34
+ label: "Accordion1",
35
+ padding: "medium"
36
+ }, /*#__PURE__*/_react["default"].createElement("div", null, "First accordion")), /*#__PURE__*/_react["default"].createElement(_AccordionGroup["default"].Accordion, {
37
+ label: "Accordion2",
38
+ padding: "medium"
39
+ }, /*#__PURE__*/_react["default"].createElement("div", null, "Second accordion")))),
40
+ queryByText = _render2.queryByText,
41
+ getByText = _render2.getByText,
42
+ getAllByRole = _render2.getAllByRole;
43
+ expect(getAllByRole("button")[0].getAttribute("aria-expanded")).toBe("false");
44
+ expect(getAllByRole("button")[1].getAttribute("aria-expanded")).toBe("true");
45
+ expect(getByText("Second accordion")).toBeTruthy();
46
+ expect(queryByText("First accordion")).toBeFalsy();
47
+ });
48
+ test("Controlled accordion with indexActive change", function () {
49
+ var onActiveChange = jest.fn();
50
+ var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_AccordionGroup["default"], {
51
+ margin: "large",
52
+ indexActive: 1,
53
+ onActiveChange: onActiveChange
54
+ }, /*#__PURE__*/_react["default"].createElement(_AccordionGroup["default"].Accordion, {
55
+ label: "Accordion1",
56
+ padding: "medium",
57
+ margin: "large"
58
+ }, /*#__PURE__*/_react["default"].createElement("div", null, "Text1")), /*#__PURE__*/_react["default"].createElement(_AccordionGroup["default"].Accordion, {
59
+ label: "Accordion2",
60
+ padding: "medium"
61
+ }, /*#__PURE__*/_react["default"].createElement("div", null, "Text2")))),
62
+ queryByText = _render3.queryByText,
63
+ getByText = _render3.getByText,
64
+ getAllByRole = _render3.getAllByRole,
65
+ rerender = _render3.rerender;
66
+ expect(queryByText("Text1")).toBeFalsy();
67
+ expect(getByText("Text2")).toBeTruthy();
68
+ _react2.fireEvent.click(getByText("Accordion1"));
69
+ _react2.fireEvent.click(getByText("Accordion2"));
70
+ expect(onActiveChange.mock.calls[0][0]).toBe(0);
71
+ expect(onActiveChange.mock.calls[1][0]).toBe(1);
72
+ expect(getAllByRole("button")[0].getAttribute("aria-expanded")).toBe("false");
73
+ expect(getAllByRole("button")[1].getAttribute("aria-expanded")).toBe("true");
74
+ rerender( /*#__PURE__*/_react["default"].createElement(_AccordionGroup["default"], {
75
+ margin: "large",
76
+ indexActive: 0,
77
+ onActiveChange: onActiveChange
78
+ }, /*#__PURE__*/_react["default"].createElement(_AccordionGroup["default"].Accordion, {
79
+ label: "Accordion1",
80
+ padding: "medium",
81
+ margin: "large"
82
+ }, /*#__PURE__*/_react["default"].createElement("div", null, "Text1")), /*#__PURE__*/_react["default"].createElement(_AccordionGroup["default"].Accordion, {
83
+ label: "Accordion2",
84
+ padding: "medium"
85
+ }, /*#__PURE__*/_react["default"].createElement("div", null, "Text2"))));
86
+ expect(getAllByRole("button")[0].getAttribute("aria-expanded")).toBe("true");
87
+ expect(getAllByRole("button")[1].getAttribute("aria-expanded")).toBe("false");
88
+ });
89
+ test("Disabled uncontrolled accordion group", function () {
90
+ var onActiveChange = jest.fn();
91
+ var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_AccordionGroup["default"], {
92
+ margin: "large",
93
+ onActiveChange: onActiveChange,
94
+ disabled: true
95
+ }, /*#__PURE__*/_react["default"].createElement(_AccordionGroup["default"].Accordion, {
96
+ label: "Accordion1",
97
+ padding: "medium",
98
+ margin: "large"
99
+ }, /*#__PURE__*/_react["default"].createElement("div", null, "Text1")), /*#__PURE__*/_react["default"].createElement(_AccordionGroup["default"].Accordion, {
100
+ label: "Accordion2",
101
+ padding: "medium"
102
+ }, /*#__PURE__*/_react["default"].createElement("div", null, "Text2")))),
103
+ getByText = _render4.getByText;
104
+ _react2.fireEvent.click(getByText("Accordion1"));
105
+ _react2.fireEvent.click(getByText("Accordion2"));
106
+ expect(onActiveChange).toHaveBeenCalledTimes(0);
107
+ });
108
+ });
@@ -1,19 +1,19 @@
1
1
  /// <reference types="react" />
2
- declare type Space = "xxsmall" | "xsmall" | "small" | "medium" | "large" | "xlarge" | "xxlarge";
3
- declare type Margin = {
2
+ export type Space = "xxsmall" | "xsmall" | "small" | "medium" | "large" | "xlarge" | "xxlarge";
3
+ export type Margin = {
4
4
  top?: Space;
5
5
  bottom?: Space;
6
6
  left?: Space;
7
7
  right?: Space;
8
8
  };
9
- declare type Padding = {
9
+ type Padding = {
10
10
  top?: Space;
11
11
  bottom?: Space;
12
12
  left?: Space;
13
13
  right?: Space;
14
14
  };
15
- declare type SVG = React.SVGProps<SVGSVGElement>;
16
- export declare type AccordionPropsType = {
15
+ type SVG = React.ReactNode & React.SVGProps<SVGSVGElement>;
16
+ export type AccordionPropsType = {
17
17
  /**
18
18
  * The panel label.
19
19
  */
@@ -31,6 +31,7 @@ export declare type AccordionPropsType = {
31
31
  */
32
32
  disabled?: boolean;
33
33
  /**
34
+ * @deprecated This prop will be removed shortly, consider using the Inset component for this purpose.
34
35
  * Size of the padding to be applied to the custom area ('xxsmall' | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'xxlarge').
35
36
  * You can pass an object with 'top', 'bottom', 'left' and 'right' properties in order to specify different padding sizes.
36
37
  */
@@ -41,7 +42,11 @@ export declare type AccordionPropsType = {
41
42
  */
42
43
  children: React.ReactNode;
43
44
  };
44
- declare type Props = {
45
+ type Props = {
46
+ /**
47
+ * Initially active accordion, only when it is uncontrolled.
48
+ */
49
+ defaultIndexActive?: number;
45
50
  /**
46
51
  * The index of the active accordion. If undefined, the component will be uncontrolled and the active accordion will be managed internally by the component.
47
52
  * If null, the component will be controlled and all accordions will be closed.
@@ -65,4 +70,10 @@ declare type Props = {
65
70
  */
66
71
  children: React.ReactElement<AccordionPropsType>[] | React.ReactElement<AccordionPropsType>;
67
72
  };
73
+ export type AccordionGroupAccordionContextProps = {
74
+ activeIndex: number;
75
+ handlerActiveChange: (index: number) => void;
76
+ disabled: boolean;
77
+ index: number;
78
+ };
68
79
  export default Props;