@dxc-technology/halstack-react 0.0.0-e201636 → 0.0.0-e2a3793

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 (118) hide show
  1. package/accordion/Accordion.stories.tsx +1 -1
  2. package/accordion/types.d.ts +1 -1
  3. package/accordion-group/AccordionGroup.js +1 -0
  4. package/accordion-group/types.d.ts +1 -1
  5. package/bleed/Bleed.js +1 -34
  6. package/bleed/Bleed.stories.tsx +94 -95
  7. package/bleed/types.d.ts +1 -1
  8. package/bulleted-list/BulletedList.d.ts +7 -0
  9. package/bulleted-list/BulletedList.js +123 -0
  10. package/bulleted-list/BulletedList.stories.tsx +200 -0
  11. package/bulleted-list/types.d.ts +11 -0
  12. package/{list → bulleted-list}/types.js +0 -0
  13. package/button/Button.js +43 -61
  14. package/button/Button.stories.tsx +9 -0
  15. package/button/types.d.ts +7 -7
  16. package/card/Card.js +34 -36
  17. package/chip/types.d.ts +1 -1
  18. package/common/variables.js +48 -14
  19. package/date-input/DateInput.js +3 -3
  20. package/dialog/Dialog.js +52 -28
  21. package/dialog/Dialog.stories.tsx +1 -2
  22. package/dialog/Dialog.test.js +34 -4
  23. package/dialog/types.d.ts +2 -2
  24. package/dropdown/Dropdown.d.ts +1 -1
  25. package/dropdown/Dropdown.js +242 -246
  26. package/dropdown/Dropdown.stories.tsx +126 -63
  27. package/dropdown/Dropdown.test.js +510 -108
  28. package/dropdown/DropdownMenu.d.ts +4 -0
  29. package/dropdown/DropdownMenu.js +80 -0
  30. package/dropdown/DropdownMenuItem.d.ts +4 -0
  31. package/dropdown/DropdownMenuItem.js +92 -0
  32. package/dropdown/types.d.ts +25 -5
  33. package/flex/Flex.d.ts +4 -0
  34. package/flex/Flex.js +57 -0
  35. package/flex/Flex.stories.tsx +103 -0
  36. package/flex/types.d.ts +21 -0
  37. package/{row → flex}/types.js +0 -0
  38. package/footer/Icons.js +1 -1
  39. package/footer/types.d.ts +1 -1
  40. package/header/Header.js +74 -72
  41. package/header/Icons.js +2 -2
  42. package/header/types.d.ts +2 -2
  43. package/inset/Inset.js +1 -34
  44. package/inset/Inset.stories.tsx +36 -36
  45. package/inset/types.d.ts +1 -1
  46. package/layout/ApplicationLayout.d.ts +15 -6
  47. package/layout/ApplicationLayout.js +37 -65
  48. package/layout/ApplicationLayout.stories.tsx +79 -44
  49. package/layout/types.d.ts +17 -27
  50. package/link/Link.js +1 -1
  51. package/link/Link.stories.tsx +13 -6
  52. package/link/types.d.ts +1 -1
  53. package/main.d.ts +5 -8
  54. package/main.js +28 -52
  55. package/package.json +8 -7
  56. package/paginator/Paginator.test.js +42 -0
  57. package/paragraph/Paragraph.d.ts +6 -0
  58. package/paragraph/Paragraph.js +38 -0
  59. package/paragraph/Paragraph.stories.tsx +44 -0
  60. package/progress-bar/ProgressBar.d.ts +2 -2
  61. package/progress-bar/ProgressBar.js +56 -50
  62. package/progress-bar/ProgressBar.stories.jsx +3 -1
  63. package/progress-bar/ProgressBar.test.js +67 -22
  64. package/progress-bar/types.d.ts +3 -4
  65. package/quick-nav/QuickNav.js +21 -15
  66. package/quick-nav/QuickNav.stories.tsx +41 -14
  67. package/radio-group/RadioGroup.js +13 -14
  68. package/resultsetTable/ResultsetTable.test.js +42 -0
  69. package/select/Listbox.d.ts +1 -1
  70. package/select/Listbox.js +54 -7
  71. package/select/Select.js +41 -43
  72. package/select/Select.stories.tsx +131 -98
  73. package/select/Select.test.js +105 -50
  74. package/select/types.d.ts +2 -5
  75. package/sidenav/Sidenav.d.ts +6 -5
  76. package/sidenav/Sidenav.js +176 -55
  77. package/sidenav/Sidenav.stories.tsx +154 -156
  78. package/sidenav/Sidenav.test.js +25 -37
  79. package/sidenav/types.d.ts +50 -27
  80. package/slider/Slider.js +3 -3
  81. package/slider/Slider.test.js +37 -0
  82. package/switch/Switch.d.ts +1 -1
  83. package/switch/Switch.js +110 -54
  84. package/switch/Switch.stories.tsx +8 -30
  85. package/switch/Switch.test.js +122 -8
  86. package/switch/types.d.ts +3 -4
  87. package/tabs/types.d.ts +1 -1
  88. package/tabs-nav/NavTabs.js +5 -5
  89. package/tabs-nav/Tab.js +3 -5
  90. package/tabs-nav/types.d.ts +1 -1
  91. package/tag/types.d.ts +1 -1
  92. package/text-input/TextInput.js +12 -21
  93. package/text-input/TextInput.stories.tsx +1 -2
  94. package/text-input/types.d.ts +1 -1
  95. package/toggle-group/types.d.ts +1 -1
  96. package/typography/Typography.d.ts +4 -0
  97. package/typography/Typography.js +131 -0
  98. package/typography/Typography.stories.tsx +198 -0
  99. package/typography/types.d.ts +18 -0
  100. package/{stack → typography}/types.js +0 -0
  101. package/wizard/Wizard.js +9 -16
  102. package/wizard/Wizard.stories.tsx +20 -1
  103. package/wizard/types.d.ts +5 -4
  104. package/list/List.d.ts +0 -4
  105. package/list/List.js +0 -47
  106. package/list/List.stories.tsx +0 -95
  107. package/list/types.d.ts +0 -7
  108. package/row/Row.d.ts +0 -3
  109. package/row/Row.js +0 -127
  110. package/row/Row.stories.tsx +0 -237
  111. package/row/types.d.ts +0 -28
  112. package/stack/Stack.d.ts +0 -3
  113. package/stack/Stack.js +0 -97
  114. package/stack/Stack.stories.tsx +0 -164
  115. package/stack/types.d.ts +0 -24
  116. package/text/Text.d.ts +0 -7
  117. package/text/Text.js +0 -30
  118. package/text/Text.stories.tsx +0 -19
@@ -9,57 +9,102 @@ var _react2 = require("@testing-library/react");
9
9
  var _ProgressBar = _interopRequireDefault(require("./ProgressBar"));
10
10
 
11
11
  describe("ProgressBar component tests", function () {
12
- test("ProgressBar renders with label", function () {
12
+ test("ProgressBar renders with label and helperText", function () {
13
13
  var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ProgressBar["default"], {
14
- label: "test-label"
14
+ label: "test-label",
15
+ helperText: "helper-text"
15
16
  })),
16
17
  getByText = _render.getByText;
17
18
 
18
19
  expect(getByText("test-label")).toBeTruthy();
20
+ expect(getByText("helper-text")).toBeTruthy();
19
21
  });
20
- test("Overlay progressBar renders with label", function () {
22
+ test("ProgressBar renders with default value", function () {
23
+ var value = 0;
24
+
21
25
  var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ProgressBar["default"], {
22
- label: "test-label",
23
- overlay: true
26
+ showValue: true
24
27
  })),
25
- getByText = _render2.getByText;
28
+ getByText = _render2.getByText,
29
+ getByRole = _render2.getByRole;
26
30
 
27
- expect(getByText("test-label")).toBeTruthy();
31
+ var progressBar = getByRole("progressbar");
32
+ expect(getByText("0 %")).toBeTruthy();
33
+ expect(progressBar.getAttribute("aria-valuenow")).toEqual(value.toString());
28
34
  });
29
- test("ProgressBar renders with default value", function () {
35
+ test("ProgressBar renders with value", function () {
36
+ var value = 25;
37
+
30
38
  var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ProgressBar["default"], {
31
- showValue: true
39
+ showValue: true,
40
+ value: value
32
41
  })),
33
- getByText = _render3.getByText;
42
+ getByText = _render3.getByText,
43
+ getByRole = _render3.getByRole;
34
44
 
35
- expect(getByText("0 %")).toBeTruthy();
45
+ var progressBar = getByRole("progressbar");
46
+ expect(getByText("25 %")).toBeTruthy();
47
+ expect(progressBar.getAttribute("aria-valuenow")).toEqual(value.toString());
36
48
  });
37
- test("Overlay progressBar renders with default value", function () {
49
+ test("ProgressBar renders with negative value", function () {
50
+ var value = 0;
51
+
38
52
  var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ProgressBar["default"], {
39
53
  showValue: true,
40
- overlay: true
54
+ value: -20
41
55
  })),
42
- getByText = _render4.getByText;
56
+ getByText = _render4.getByText,
57
+ getByRole = _render4.getByRole;
43
58
 
59
+ var progressBar = getByRole("progressbar");
44
60
  expect(getByText("0 %")).toBeTruthy();
61
+ expect(progressBar.getAttribute("aria-valuenow")).toEqual(value.toString());
45
62
  });
46
- test("ProgressBar renders with value", function () {
47
- var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ProgressBar["default"], {
63
+ test("ProgressBar renders as indeterminate", function () {
64
+ var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ProgressBar["default"], null)),
65
+ getByRole = _render5.getByRole;
66
+
67
+ var progressBar = getByRole("progressbar");
68
+ expect(progressBar.getAttribute("aria-valuenow")).toBe(null);
69
+ });
70
+ test("Overlay progressBar renders with label and helperText", function () {
71
+ var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ProgressBar["default"], {
72
+ label: "test-label",
73
+ helperText: "helper-text",
74
+ overlay: true
75
+ })),
76
+ getByText = _render6.getByText;
77
+
78
+ expect(getByText("test-label")).toBeTruthy();
79
+ expect(getByText("helper-text")).toBeTruthy();
80
+ });
81
+ test("Overlay progressBar renders with default value", function () {
82
+ var value = 0;
83
+
84
+ var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ProgressBar["default"], {
48
85
  showValue: true,
49
- value: 25
86
+ overlay: true
50
87
  })),
51
- getByText = _render5.getByText;
88
+ getByText = _render7.getByText,
89
+ getByRole = _render7.getByRole;
52
90
 
53
- expect(getByText("25 %")).toBeTruthy();
91
+ var progressBar = getByRole("progressbar");
92
+ expect(getByText("0 %")).toBeTruthy();
93
+ expect(progressBar.getAttribute("aria-valuenow")).toEqual(value.toString());
54
94
  });
55
95
  test("Overlay progressBar renders with value", function () {
56
- var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ProgressBar["default"], {
96
+ var value = 25;
97
+
98
+ var _render8 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ProgressBar["default"], {
57
99
  showValue: true,
58
- value: 25,
100
+ value: value,
59
101
  overlay: true
60
102
  })),
61
- getByText = _render6.getByText;
103
+ getByText = _render8.getByText,
104
+ getByRole = _render8.getByRole;
62
105
 
106
+ var progressBar = getByRole("progressbar");
63
107
  expect(getByText("25 %")).toBeTruthy();
108
+ expect(progressBar.getAttribute("aria-valuenow")).toEqual(value.toString());
64
109
  });
65
110
  });
@@ -1,11 +1,11 @@
1
- declare type Space = "xxsmall" | "xsmall" | "small" | "medium" | "large" | "xlarge" | "xxlarge";
2
- declare type Size = {
1
+ export declare type Space = "xxsmall" | "xsmall" | "small" | "medium" | "large" | "xlarge" | "xxlarge";
2
+ export declare type Size = {
3
3
  top?: Space;
4
4
  bottom?: Space;
5
5
  left?: Space;
6
6
  right?: Space;
7
7
  };
8
- declare type Props = {
8
+ export declare type Props = {
9
9
  /**
10
10
  * Text to be placed above the progress bar.
11
11
  */
@@ -34,4 +34,3 @@ declare type Props = {
34
34
  */
35
35
  margin?: Space | Size;
36
36
  };
37
- export default Props;
@@ -21,11 +21,11 @@ var _useTheme = _interopRequireDefault(require("../useTheme"));
21
21
 
22
22
  var _Heading = _interopRequireDefault(require("../heading/Heading"));
23
23
 
24
- var _Stack = _interopRequireDefault(require("../stack/Stack"));
24
+ var _Flex = _interopRequireDefault(require("../flex/Flex"));
25
25
 
26
26
  var _Inset = _interopRequireDefault(require("../inset/Inset"));
27
27
 
28
- var _Text = _interopRequireDefault(require("../text/Text"));
28
+ var _Typography = _interopRequireDefault(require("../typography/Typography"));
29
29
 
30
30
  var _useTranslatedLabels = _interopRequireDefault(require("../useTranslatedLabels"));
31
31
 
@@ -42,26 +42,32 @@ var DxcQuickNav = function DxcQuickNav(_ref) {
42
42
  var colorsTheme = (0, _useTheme["default"])();
43
43
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
44
44
  theme: colorsTheme.quickNav
45
- }, /*#__PURE__*/_react["default"].createElement(QuickNavContainer, null, /*#__PURE__*/_react["default"].createElement(_Stack["default"], {
46
- gutter: "xsmall"
45
+ }, /*#__PURE__*/_react["default"].createElement(QuickNavContainer, null, /*#__PURE__*/_react["default"].createElement(_Flex["default"], {
46
+ direction: "column",
47
+ gap: "0.5rem"
47
48
  }, /*#__PURE__*/_react["default"].createElement(_Heading["default"], {
48
49
  level: 4,
49
50
  text: title || translatedLabels.quickNav.contentTitle
50
- }), /*#__PURE__*/_react["default"].createElement(ListColumn, null, /*#__PURE__*/_react["default"].createElement(_Stack["default"], {
51
- gutter: "xsmall"
51
+ }), /*#__PURE__*/_react["default"].createElement(ListColumn, null, /*#__PURE__*/_react["default"].createElement(_Flex["default"], {
52
+ direction: "column",
53
+ gap: "0.5rem"
52
54
  }, links.map(function (link) {
53
55
  var _link$links;
54
56
 
55
- return /*#__PURE__*/_react["default"].createElement(ListRow, null, /*#__PURE__*/_react["default"].createElement(_Inset["default"], {
56
- space: "xxsmall"
57
- }, /*#__PURE__*/_react["default"].createElement(_Text["default"], null, /*#__PURE__*/_react["default"].createElement(Link, {
57
+ return /*#__PURE__*/_react["default"].createElement(ListRow, {
58
+ key: link.label
59
+ }, /*#__PURE__*/_react["default"].createElement(_Inset["default"], {
60
+ space: "0.25rem"
61
+ }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], null, /*#__PURE__*/_react["default"].createElement(Link, {
58
62
  href: "#".concat((0, _slugify["default"])(link === null || link === void 0 ? void 0 : link.label, {
59
63
  lower: true
60
64
  }))
61
65
  }, link === null || link === void 0 ? void 0 : link.label), (_link$links = link.links) === null || _link$links === void 0 ? void 0 : _link$links.map(function (sublink) {
62
- return /*#__PURE__*/_react["default"].createElement(ListRow, null, /*#__PURE__*/_react["default"].createElement(_Inset["default"], {
63
- horizontal: "xsmall"
64
- }, /*#__PURE__*/_react["default"].createElement(_Text["default"], null, /*#__PURE__*/_react["default"].createElement(Link, {
66
+ return /*#__PURE__*/_react["default"].createElement(ListRow, {
67
+ key: sublink.label
68
+ }, /*#__PURE__*/_react["default"].createElement(_Inset["default"], {
69
+ horizontal: "0.5rem"
70
+ }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], null, /*#__PURE__*/_react["default"].createElement(Link, {
65
71
  href: "#".concat((0, _slugify["default"])(sublink === null || sublink === void 0 ? void 0 : sublink.label, {
66
72
  lower: true
67
73
  }))
@@ -82,11 +88,11 @@ var QuickNavContainer = _styledComponents["default"].div(_templateObject || (_te
82
88
  return props.theme.dividerBorderColor;
83
89
  });
84
90
 
85
- var ListColumn = _styledComponents["default"].ul(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n list-style-type: none;\n margin: 0;\n padding: 0;\n"])));
91
+ var ListColumn = _styledComponents["default"].ul(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n list-style-type: none;\n margin: 0;\n padding: 0;\n width: 100%;\n"])));
86
92
 
87
- var ListRow = _styledComponents["default"].li(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])([""])));
93
+ var ListRow = _styledComponents["default"].li(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n width: 100%;\n"])));
88
94
 
89
- var Link = _styledComponents["default"].a(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n text-decoration: none;\n font-size: ", ";\n font-family: ", ";\n font-style: ", ";\n font-weight: ", ";\n color: ", ";\n\n &:hover {\n color: ", ";\n }\n &:focus {\n outline-color: ", ";\n outline-style: ", ";\n outline-width: ", ";\n border-radius: ", ";\n }\n"])), function (props) {
95
+ var Link = _styledComponents["default"].a(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n text-decoration: none;\n font-size: ", ";\n font-family: ", ";\n font-style: ", ";\n font-weight: ", ";\n color: ", ";\n display: block;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n width: fit-content;\n max-width: 100%;\n\n &:hover {\n color: ", ";\n }\n &:focus {\n outline-color: ", ";\n outline-style: ", ";\n outline-width: ", ";\n border-radius: ", ";\n }\n"])), function (props) {
90
96
  return props.theme.fontSize;
91
97
  }, function (props) {
92
98
  return props.theme.fontFamily;
@@ -2,7 +2,7 @@ import React from "react";
2
2
  import styled from "styled-components";
3
3
  import DxcQuickNav from "./QuickNav";
4
4
  import DxcHeading from "../heading/Heading";
5
- import DxcText from "../text/Text";
5
+ import DxcParagraph from "../paragraph/Paragraph";
6
6
  import Title from "../../.storybook/components/Title";
7
7
  import ExampleContainer from "../../.storybook/components/ExampleContainer";
8
8
 
@@ -23,14 +23,24 @@ const links = [
23
23
  ],
24
24
  },
25
25
  {
26
- label: "Principles",
26
+ label: "Principles very very very very very very very very long",
27
27
  id: "principles",
28
28
  links: [
29
- { label: "Color", id: "color" },
30
- { label: "Spacing", id: "spacing" },
29
+ { label: "Color very very very very very very very very long", id: "color" },
30
+ { label: "Spacingveryveryveryveryveryveryveryverylong", id: "spacing" },
31
31
  { label: "Typography", id: "typography" },
32
32
  ],
33
33
  },
34
+ {
35
+ label: "Componentsveryveryveryveryveryveryveryverylong",
36
+ id: "components",
37
+ links: [
38
+ {
39
+ label: "Accordion",
40
+ id: "accordion",
41
+ },
42
+ ],
43
+ },
34
44
  ];
35
45
 
36
46
  export const Chromatic = () => (
@@ -47,13 +57,19 @@ export const Chromatic = () => (
47
57
  <DxcQuickNav links={links}></DxcQuickNav>
48
58
  </QuickNavContainer>
49
59
  </ExampleContainer>
60
+ <ExampleContainer pseudoState="pseudo-focus">
61
+ <Title title="Link focus" level={4} />
62
+ <QuickNavContainer>
63
+ <DxcQuickNav links={links}></DxcQuickNav>
64
+ </QuickNavContainer>
65
+ </ExampleContainer>
50
66
  <ExampleContainer>
51
67
  <Title title="QuickNav with content" level={4} />
52
68
  <Container>
53
69
  <ContentContainer>
54
70
  <Content id="overview">
55
71
  <DxcHeading level={1} text="Overview" margin={{ bottom: "small" }} />
56
- <DxcText>
72
+ <DxcParagraph>
57
73
  Halstack is the DXC Technology's open source design system for insurance products and digital experiences.
58
74
  Our system provides all the tools and resources needed to create superior, beautiful but above all,
59
75
  functional user experiences. Halstack is the DXC Technology's open source design system for insurance
@@ -70,10 +86,10 @@ export const Chromatic = () => (
70
86
  create superior, beautiful but above all, functional user experiences.Halstack is the DXC Technology's
71
87
  open source design system for insurance products and digital experiences. Our system provides all the
72
88
  tools and resources needed to create superior, beautiful but above all, functional user experiences.
73
- </DxcText>
89
+ </DxcParagraph>
74
90
  <Content id="introduction">
75
91
  <DxcHeading level={2} text="Introduction" margin={{ top: "xsmall", bottom: "xsmall" }} />
76
- <DxcText>
92
+ <DxcParagraph>
77
93
  Design principles Halstack design principles are the fundamental part of DXC Technology's approach to
78
94
  provide guidance for development teams in order to deliver delightful and consistent user experiences to
79
95
  our customers: Balance Consistency Visual hierarchy All our components, design tokens, accessibility
@@ -103,14 +119,14 @@ export const Chromatic = () => (
103
119
  to use and contribute back to. We are charmed to receive external contributions to help us find bugs,
104
120
  design new features, or help us improve the project documentation. If you're interested, definitely
105
121
  check out our contribution guidelines.
106
- </DxcText>
122
+ </DxcParagraph>
107
123
  </Content>
108
124
  </Content>
109
125
  <Content id="principles">
110
126
  <DxcHeading level={1} text="Principles" margin={{ top: "small", bottom: "xsmall" }} />
111
127
  <Content id="color">
112
128
  <DxcHeading level={2} text="Color" margin={{ top: "xsmall", bottom: "xsmall" }} />
113
- <DxcText>
129
+ <DxcParagraph>
114
130
  The color palette is an essential asset as a communication resource of our design system. Halstack color
115
131
  palette brings a unified consistency and helps in guiding the user's perception order. Our color palette
116
132
  is based in the HSL model . All our color families are calculated using the lightness value of the
@@ -143,11 +159,11 @@ export const Chromatic = () => (
143
159
  tokens to manage color. Appart from a multi-purpose greyscale family, purple and blue are the core color
144
160
  families used in our set of components. Additional families as red, green and yellow help as feedback
145
161
  role-based color palettes and must not be used outside this context.
146
- </DxcText>
162
+ </DxcParagraph>
147
163
  </Content>
148
164
  <Content id="spacing">
149
165
  <DxcHeading level={2} text="Spacing" margin={{ top: "xsmall", bottom: "xsmall" }} />
150
- <DxcText>
166
+ <DxcParagraph>
151
167
  In the search of consistent alignment between the elements we provide a spacing scale based on a root
152
168
  values of 8px and 4px. The numbers 4 and 8 are easily multiplied, they provide flexible and consistent,
153
169
  yet distinct enough, steps between them.In the search of consistent alignment between the elements we
@@ -165,11 +181,11 @@ export const Chromatic = () => (
165
181
  consistent, yet distinct enough, steps between them.In the search of consistent alignment between the
166
182
  elements we provide a spacing scale based on a root values of 8px and 4px. The numbers 4 and 8 are
167
183
  easily multiplied, they provide flexible and consistent, yet distinct enough, steps between them.
168
- </DxcText>
184
+ </DxcParagraph>
169
185
  </Content>
170
186
  <Content id="typography">
171
187
  <DxcHeading level={2} text="Typography" margin={{ top: "xsmall", bottom: "xsmall" }} />
172
- <DxcText>
188
+ <DxcParagraph>
173
189
  Our selected typography helps in structuring our user's experience based on the visual impact that it
174
190
  has on the user interface content. It defines what is the first noticeable piece of information or data
175
191
  based on the font shape, size, color, or type and it highlights some pieces of text over the rest. Some
@@ -201,7 +217,18 @@ export const Chromatic = () => (
201
217
  Halstack Design System include headers, body, taglines, captions, and labels. Make sure you include all
202
218
  the different typographic variants in order to enhance the application's content structure, including
203
219
  the Heading component which defines different levels of page and section titles.
204
- </DxcText>
220
+ </DxcParagraph>
221
+ </Content>
222
+ </Content>
223
+ <Content id="components">
224
+ <DxcHeading level={1} text="Components" margin={{ top: "small", bottom: "xsmall" }} />
225
+ <Content id="accordion">
226
+ <DxcHeading level={2} text="Accordion" margin={{ top: "xsmall", bottom: "xsmall" }} />
227
+ <DxcParagraph>
228
+ Accordions are used to group similar content and hide or show it depending on user needs or preferences.
229
+ Accordions give users more granular control over the interface and help digest content in stages, rather
230
+ than all at once.
231
+ </DxcParagraph>
205
232
  </Content>
206
233
  </Content>
207
234
  </ContentContainer>
@@ -149,27 +149,25 @@ var DxcRadioGroup = /*#__PURE__*/_react["default"].forwardRef(function (_ref, re
149
149
  };
150
150
 
151
151
  var handleOnKeyDown = function handleOnKeyDown(event) {
152
- switch (event.keyCode) {
153
- case 37: // arrow left
154
-
155
- case 38:
156
- // arrow up
152
+ switch (event.key) {
153
+ case "Left":
154
+ case "ArrowLeft":
155
+ case "Up":
156
+ case "ArrowUp":
157
157
  event.preventDefault();
158
158
  setPreviousRadioChecked();
159
159
  break;
160
160
 
161
- case 39: // arrow right
162
-
163
- case 40:
164
- // arrow down
161
+ case "Right":
162
+ case "ArrowRight":
163
+ case "Down":
164
+ case "ArrowDown":
165
165
  event.preventDefault();
166
166
  setNextRadioChecked();
167
167
  break;
168
168
 
169
- case 13: // enter
170
-
171
- case 32:
172
- // space
169
+ case "Enter":
170
+ case "Space":
173
171
  event.preventDefault();
174
172
  handleOnChange(innerOptions[currentFocusIndex].value);
175
173
  break;
@@ -216,7 +214,8 @@ var DxcRadioGroup = /*#__PURE__*/_react["default"].forwardRef(function (_ref, re
216
214
  disabled: option.disabled || disabled,
217
215
  focused: currentFocusIndex === index,
218
216
  readonly: readonly,
219
- tabIndex: tabIndex
217
+ tabIndex: tabIndex,
218
+ key: "radio-".concat(index)
220
219
  });
221
220
  })), !disabled && typeof error === "string" && /*#__PURE__*/_react["default"].createElement(Error, {
222
221
  id: errorId,
@@ -2,6 +2,10 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
6
+
7
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
8
+
5
9
  var _react = _interopRequireDefault(require("react"));
6
10
 
7
11
  var _react2 = require("@testing-library/react");
@@ -10,6 +14,44 @@ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
10
14
 
11
15
  var _ResultsetTable = _interopRequireDefault(require("./ResultsetTable"));
12
16
 
17
+ // Mocking DOMRect for Radix Primitive Popover
18
+ global.globalThis = global;
19
+
20
+ global.ResizeObserver = /*#__PURE__*/function () {
21
+ function ResizeObserver(cb) {
22
+ (0, _classCallCheck2["default"])(this, ResizeObserver);
23
+ this.cb = cb;
24
+ }
25
+
26
+ (0, _createClass2["default"])(ResizeObserver, [{
27
+ key: "observe",
28
+ value: function observe() {
29
+ this.cb([{
30
+ borderBoxSize: {
31
+ inlineSize: 0,
32
+ blockSize: 0
33
+ }
34
+ }]);
35
+ }
36
+ }, {
37
+ key: "unobserve",
38
+ value: function unobserve() {}
39
+ }]);
40
+ return ResizeObserver;
41
+ }();
42
+
43
+ global.DOMRect = {
44
+ fromRect: function fromRect() {
45
+ return {
46
+ top: 0,
47
+ left: 0,
48
+ bottom: 0,
49
+ right: 0,
50
+ width: 0,
51
+ height: 0
52
+ };
53
+ }
54
+ };
13
55
  var columns = [{
14
56
  displayValue: "Id",
15
57
  isSortable: false
@@ -1,4 +1,4 @@
1
1
  import React from "react";
2
2
  import { ListboxProps } from "./types";
3
- declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponent<ListboxProps & React.RefAttributes<HTMLUListElement>>>;
3
+ declare const _default: React.MemoExoticComponent<({ id, currentValue, options, visualFocusIndex, lastOptionIndex, multiple, optional, optionalItem, searchable, handleOptionOnClick, getSelectWidth, }: ListboxProps) => JSX.Element>;
4
4
  export default _default;
package/select/Listbox.js CHANGED
@@ -11,7 +11,9 @@ exports["default"] = void 0;
11
11
 
12
12
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
13
13
 
14
- var _react = _interopRequireDefault(require("react"));
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+
16
+ var _react = _interopRequireWildcard(require("react"));
15
17
 
16
18
  var _styledComponents = _interopRequireWildcard(require("styled-components"));
17
19
 
@@ -37,7 +39,7 @@ var groupsHaveOptions = function groupsHaveOptions(options) {
37
39
  }) : true;
38
40
  };
39
41
 
40
- var Listbox = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
42
+ var Listbox = function Listbox(_ref) {
41
43
  var id = _ref.id,
42
44
  currentValue = _ref.currentValue,
43
45
  options = _ref.options,
@@ -47,9 +49,17 @@ var Listbox = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
47
49
  optional = _ref.optional,
48
50
  optionalItem = _ref.optionalItem,
49
51
  searchable = _ref.searchable,
50
- handleOptionOnClick = _ref.handleOptionOnClick;
52
+ handleOptionOnClick = _ref.handleOptionOnClick,
53
+ getSelectWidth = _ref.getSelectWidth;
51
54
  var colorsTheme = (0, _useTheme["default"])();
52
55
  var translatedLabels = (0, _useTranslatedLabels["default"])();
56
+ var listboxRef = (0, _react.useRef)(null);
57
+
58
+ var _useState = (0, _react.useState)(null),
59
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
60
+ styles = _useState2[0],
61
+ setStyles = _useState2[1];
62
+
53
63
  var globalIndex = optional && !multiple ? 0 : -1; // index for options, starting from 0 to options.length -1
54
64
 
55
65
  var mapOptionFunc = function mapOptionFunc(option, mapIndex) {
@@ -92,6 +102,42 @@ var Listbox = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
92
102
  }
93
103
  };
94
104
 
105
+ (0, _react.useLayoutEffect)(function () {
106
+ if (currentValue && !multiple) {
107
+ var _listEl$scrollTo;
108
+
109
+ var listEl = listboxRef === null || listboxRef === void 0 ? void 0 : listboxRef.current;
110
+ var selectedListOptionEl = listEl === null || listEl === void 0 ? void 0 : listEl.querySelector("[aria-selected='true']");
111
+ listEl === null || listEl === void 0 ? void 0 : (_listEl$scrollTo = listEl.scrollTo) === null || _listEl$scrollTo === void 0 ? void 0 : _listEl$scrollTo.call(listEl, {
112
+ top: (selectedListOptionEl === null || selectedListOptionEl === void 0 ? void 0 : selectedListOptionEl.offsetTop) - (listEl === null || listEl === void 0 ? void 0 : listEl.clientHeight) / 2
113
+ });
114
+ }
115
+ }, [currentValue, multiple]);
116
+ (0, _react.useLayoutEffect)(function () {
117
+ var _listboxRef$current, _visualFocusedOptionE;
118
+
119
+ var visualFocusedOptionEl = listboxRef === null || listboxRef === void 0 ? void 0 : (_listboxRef$current = listboxRef.current) === null || _listboxRef$current === void 0 ? void 0 : _listboxRef$current.querySelectorAll("[role='option']")[visualFocusIndex];
120
+ visualFocusedOptionEl === null || visualFocusedOptionEl === void 0 ? void 0 : (_visualFocusedOptionE = visualFocusedOptionEl.scrollIntoView) === null || _visualFocusedOptionE === void 0 ? void 0 : _visualFocusedOptionE.call(visualFocusedOptionEl, {
121
+ block: "nearest",
122
+ inline: "start"
123
+ });
124
+ }, [visualFocusIndex]);
125
+
126
+ var handleResize = function handleResize() {
127
+ setStyles({
128
+ width: getSelectWidth()
129
+ });
130
+ };
131
+
132
+ (0, _react.useLayoutEffect)(function () {
133
+ handleResize();
134
+ }, [getSelectWidth]);
135
+ (0, _react.useEffect)(function () {
136
+ window.addEventListener("resize", handleResize);
137
+ return function () {
138
+ window.removeEventListener("resize", handleResize);
139
+ };
140
+ }, [getSelectWidth]);
95
141
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
96
142
  theme: colorsTheme.select
97
143
  }, /*#__PURE__*/_react["default"].createElement(ListboxContainer, {
@@ -102,10 +148,11 @@ var Listbox = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
102
148
  onMouseDown: function onMouseDown(event) {
103
149
  event.preventDefault();
104
150
  },
105
- ref: ref,
151
+ ref: listboxRef,
106
152
  role: "listbox",
107
153
  "aria-multiselectable": multiple,
108
- "aria-orientation": "vertical"
154
+ "aria-orientation": "vertical",
155
+ style: styles
109
156
  }, searchable && (options.length === 0 || !groupsHaveOptions(options)) ? /*#__PURE__*/_react["default"].createElement(OptionsSystemMessage, null, /*#__PURE__*/_react["default"].createElement(NoMatchesFoundIcon, null, _Icons["default"].searchOff), translatedLabels.select.noMatchesErrorMessage) : optional && !multiple && /*#__PURE__*/_react["default"].createElement(_Option["default"], {
110
157
  key: "option-".concat(optionalItem.value),
111
158
  id: "option-".concat(0),
@@ -117,9 +164,9 @@ var Listbox = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
117
164
  isLastOption: lastOptionIndex === 0,
118
165
  isSelected: multiple ? currentValue.includes(optionalItem.value) : currentValue === optionalItem.value
119
166
  }), options.map(mapOptionFunc)));
120
- });
167
+ };
121
168
 
122
- var ListboxContainer = _styledComponents["default"].ul(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n z-index: 1;\n max-height: 304px;\n overflow-y: auto;\n top: calc(100% + 4px);\n left: 0;\n margin: 0;\n padding: 0.25rem 0;\n width: 100%;\n background-color: ", ";\n border: 1px solid ", ";\n border-radius: 0.25rem;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n cursor: default;\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n"])), function (props) {
169
+ var ListboxContainer = _styledComponents["default"].ul(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n box-sizing: border-box;\n max-height: 304px;\n overflow-y: auto;\n margin: 0;\n padding: 0.25rem 0;\n background-color: ", ";\n border: 1px solid ", ";\n border-radius: 0.25rem;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n cursor: default;\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n"])), function (props) {
123
170
  return props.theme.listDialogBackgroundColor;
124
171
  }, function (props) {
125
172
  return props.theme.listDialogBorderColor;