@dxc-technology/halstack-react 0.0.0-89de434 → 0.0.0-8a597df

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 (136) hide show
  1. package/accordion/Accordion.accessibility.test.js +71 -0
  2. package/accordion/Accordion.js +8 -21
  3. package/accordion/Accordion.stories.tsx +4 -36
  4. package/accordion/types.d.ts +1 -1
  5. package/accordion-group/AccordionGroup.accessibility.test.js +88 -0
  6. package/accordion-group/AccordionGroup.d.ts +2 -3
  7. package/accordion-group/AccordionGroup.js +3 -3
  8. package/accordion-group/AccordionGroupAccordion.js +2 -2
  9. package/accordion-group/AccordionGroupContext.d.ts +3 -0
  10. package/accordion-group/AccordionGroupContext.js +8 -0
  11. package/accordion-group/types.d.ts +1 -1
  12. package/action-icon/ActionIcon.accessibility.test.js +63 -0
  13. package/action-icon/ActionIcon.js +4 -3
  14. package/action-icon/ActionIcon.stories.tsx +3 -3
  15. package/action-icon/types.d.ts +1 -1
  16. package/alert/Alert.accessibility.test.js +95 -0
  17. package/alert/Alert.js +15 -69
  18. package/badge/Badge.accessibility.test.js +129 -0
  19. package/badge/Badge.js +6 -4
  20. package/badge/Badge.stories.tsx +11 -11
  21. package/badge/types.d.ts +1 -1
  22. package/box/Box.accessibility.test.js +33 -0
  23. package/bulleted-list/BulletedList.accessibility.test.js +107 -0
  24. package/bulleted-list/BulletedList.js +6 -3
  25. package/bulleted-list/BulletedList.stories.tsx +1 -1
  26. package/button/Button.accessibility.test.js +127 -0
  27. package/button/Button.js +4 -3
  28. package/button/Button.stories.tsx +32 -51
  29. package/button/types.d.ts +1 -1
  30. package/card/Card.accessibility.test.js +36 -0
  31. package/checkbox/Checkbox.accessibility.test.js +87 -0
  32. package/chip/Chip.accessibility.test.js +67 -0
  33. package/chip/Chip.js +8 -5
  34. package/chip/Chip.stories.tsx +5 -24
  35. package/chip/Chip.test.js +4 -4
  36. package/contextual-menu/ContextualMenu.accessibility.test.js +86 -0
  37. package/date-input/DateInput.accessibility.test.js +216 -0
  38. package/date-input/DateInput.js +1 -2
  39. package/date-input/DatePicker.js +12 -6
  40. package/dialog/Dialog.accessibility.test.js +69 -0
  41. package/dialog/Dialog.test.js +1 -1
  42. package/divider/Divider.accessibility.test.js +33 -0
  43. package/divider/types.d.ts +3 -1
  44. package/dropdown/Dropdown.accessibility.test.js +180 -0
  45. package/dropdown/Dropdown.js +12 -29
  46. package/dropdown/Dropdown.stories.tsx +5 -16
  47. package/dropdown/DropdownMenuItem.js +6 -3
  48. package/dropdown/types.d.ts +2 -4
  49. package/file-input/FileInput.accessibility.test.js +160 -0
  50. package/file-input/FileInput.js +3 -39
  51. package/file-input/FileInput.test.js +7 -84
  52. package/file-input/FileItem.js +13 -27
  53. package/footer/Footer.accessibility.test.js +117 -0
  54. package/footer/Footer.js +7 -5
  55. package/footer/Footer.stories.tsx +28 -3
  56. package/footer/types.d.ts +1 -1
  57. package/header/Header.accessibility.test.js +84 -0
  58. package/header/Header.js +9 -20
  59. package/heading/Heading.accessibility.test.js +33 -0
  60. package/icon/Icon.accessibility.test.js +30 -0
  61. package/icon/Icon.js +1 -1
  62. package/icon/Icon.stories.tsx +5 -3
  63. package/image/Image.accessibility.test.js +56 -0
  64. package/layout/ApplicationLayout.js +1 -1
  65. package/layout/Icons.js +0 -2
  66. package/link/Link.accessibility.test.js +112 -0
  67. package/link/Link.js +7 -5
  68. package/link/Link.stories.tsx +2 -2
  69. package/link/types.d.ts +1 -1
  70. package/nav-tabs/NavTabs.accessibility.test.js +44 -0
  71. package/nav-tabs/NavTabs.d.ts +1 -2
  72. package/nav-tabs/NavTabs.js +3 -3
  73. package/nav-tabs/NavTabs.stories.tsx +26 -23
  74. package/nav-tabs/NavTabs.test.js +1 -2
  75. package/nav-tabs/NavTabsContext.d.ts +3 -0
  76. package/nav-tabs/NavTabsContext.js +8 -0
  77. package/nav-tabs/Tab.js +13 -14
  78. package/nav-tabs/types.d.ts +1 -1
  79. package/number-input/NumberInput.accessibility.test.js +228 -0
  80. package/number-input/NumberInput.d.ts +0 -7
  81. package/number-input/NumberInput.js +3 -3
  82. package/number-input/NumberInputContext.d.ts +3 -0
  83. package/number-input/NumberInputContext.js +8 -0
  84. package/number-input/types.d.ts +6 -0
  85. package/package.json +11 -11
  86. package/paginator/Paginator.accessibility.test.js +79 -0
  87. package/paragraph/Paragraph.accessibility.test.js +28 -0
  88. package/password-input/PasswordInput.accessibility.test.js +153 -0
  89. package/progress-bar/ProgressBar.accessibility.test.js +35 -0
  90. package/quick-nav/QuickNav.accessibility.test.js +57 -0
  91. package/radio-group/RadioGroup.accessibility.test.js +97 -0
  92. package/resultset-table/ResultsetTable.accessibility.test.js +274 -0
  93. package/resultset-table/ResultsetTable.d.ts +1 -1
  94. package/resultset-table/ResultsetTable.js +10 -6
  95. package/resultset-table/ResultsetTable.stories.tsx +5 -1
  96. package/resultset-table/ResultsetTable.test.js +14 -4
  97. package/resultset-table/types.d.ts +38 -11
  98. package/select/Select.accessibility.test.js +217 -0
  99. package/select/Select.stories.tsx +0 -1
  100. package/sidenav/Sidenav.accessibility.test.js +59 -0
  101. package/sidenav/Sidenav.js +16 -12
  102. package/sidenav/Sidenav.stories.tsx +4 -9
  103. package/sidenav/types.d.ts +2 -2
  104. package/slider/Slider.accessibility.test.js +104 -0
  105. package/spinner/Spinner.accessibility.test.js +96 -0
  106. package/status-light/StatusLight.accessibility.test.js +157 -0
  107. package/switch/Switch.accessibility.test.js +89 -0
  108. package/table/Table.accessibility.test.js +82 -0
  109. package/table/Table.js +1 -10
  110. package/table/Table.stories.tsx +2 -9
  111. package/table/types.d.ts +1 -15
  112. package/tabs/Tabs.accessibility.test.js +56 -0
  113. package/tag/Tag.accessibility.test.js +69 -0
  114. package/tag/Tag.js +6 -6
  115. package/tag/Tag.stories.tsx +4 -7
  116. package/tag/Tag.test.js +4 -12
  117. package/tag/types.d.ts +2 -2
  118. package/text-input/Suggestions.js +5 -3
  119. package/text-input/TextInput.accessibility.test.js +321 -0
  120. package/text-input/TextInput.js +10 -8
  121. package/text-input/TextInput.stories.tsx +1 -1
  122. package/textarea/Textarea.accessibility.test.js +155 -0
  123. package/toggle-group/ToggleGroup.accessibility.test.js +107 -0
  124. package/toggle-group/ToggleGroup.js +4 -3
  125. package/toggle-group/ToggleGroup.stories.tsx +3 -3
  126. package/toggle-group/types.d.ts +2 -2
  127. package/typography/Typography.accessibility.test.js +339 -0
  128. package/wizard/Wizard.accessibility.test.js +55 -0
  129. package/date-input/Icons.d.ts +0 -6
  130. package/date-input/Icons.js +0 -58
  131. package/sidenav/Icons.d.ts +0 -7
  132. package/sidenav/Icons.js +0 -47
  133. package/text-input/Icons.d.ts +0 -8
  134. package/text-input/Icons.js +0 -56
  135. /package/{layout → sidenav}/SidenavContext.d.ts +0 -0
  136. /package/{layout → sidenav}/SidenavContext.js +0 -0
@@ -19,7 +19,7 @@ export type TabProps = {
19
19
  */
20
20
  href?: string;
21
21
  /**
22
- * Element or path used as the icon that will be displayed in the tab.
22
+ * Material Symbol name or SVG element used as the icon that will be displayed in the tab.
23
23
  */
24
24
  icon?: string | SVG;
25
25
  /**
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
5
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
6
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
7
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _react2 = require("@testing-library/react");
10
+ var _jestAxe = require("jest-axe");
11
+ var _NumberInput = _interopRequireDefault(require("./NumberInput.tsx"));
12
+ // Mocking DOMRect for Radix Primitive Popover
13
+ global.globalThis = global;
14
+ global.DOMRect = {
15
+ fromRect: function fromRect() {
16
+ return {
17
+ top: 0,
18
+ left: 0,
19
+ bottom: 0,
20
+ right: 0,
21
+ width: 0,
22
+ height: 0
23
+ };
24
+ }
25
+ };
26
+ global.ResizeObserver = /*#__PURE__*/function () {
27
+ function ResizeObserver() {
28
+ (0, _classCallCheck2["default"])(this, ResizeObserver);
29
+ }
30
+ (0, _createClass2["default"])(ResizeObserver, [{
31
+ key: "observe",
32
+ value: function observe() {}
33
+ }, {
34
+ key: "unobserve",
35
+ value: function unobserve() {}
36
+ }, {
37
+ key: "disconnect",
38
+ value: function disconnect() {}
39
+ }]);
40
+ return ResizeObserver;
41
+ }();
42
+ describe("Number input component accessibility tests", function () {
43
+ it("Should not have basic accessibility issues", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
44
+ var _render, container, results;
45
+ return _regenerator["default"].wrap(function _callee$(_context) {
46
+ while (1) switch (_context.prev = _context.next) {
47
+ case 0:
48
+ _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_NumberInput["default"], {
49
+ label: "Number input label",
50
+ helperText: "Helper text",
51
+ placeholder: "Placeholder",
52
+ defaultValue: "10",
53
+ margin: "medium",
54
+ min: 0,
55
+ max: 100,
56
+ suffix: "Suffix",
57
+ prefix: "Prefix",
58
+ name: "Name",
59
+ size: "medium",
60
+ step: 1
61
+ })), container = _render.container;
62
+ _context.next = 3;
63
+ return (0, _jestAxe.axe)(container);
64
+ case 3:
65
+ results = _context.sent;
66
+ expect(results).toHaveNoViolations();
67
+ case 5:
68
+ case "end":
69
+ return _context.stop();
70
+ }
71
+ }, _callee);
72
+ })));
73
+ it("Should not have basic accessibility issues for optional mode", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
74
+ var _render2, container, results;
75
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
76
+ while (1) switch (_context2.prev = _context2.next) {
77
+ case 0:
78
+ _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_NumberInput["default"], {
79
+ label: "Number input label",
80
+ helperText: "Helper text",
81
+ placeholder: "Placeholder",
82
+ defaultValue: "10",
83
+ margin: "medium",
84
+ min: 0,
85
+ max: 100,
86
+ suffix: "Suffix",
87
+ prefix: "Prefix",
88
+ name: "Name",
89
+ size: "medium",
90
+ step: 1,
91
+ optional: true
92
+ })), container = _render2.container;
93
+ _context2.next = 3;
94
+ return (0, _jestAxe.axe)(container);
95
+ case 3:
96
+ results = _context2.sent;
97
+ expect(results).toHaveNoViolations();
98
+ case 5:
99
+ case "end":
100
+ return _context2.stop();
101
+ }
102
+ }, _callee2);
103
+ })));
104
+ it("Should not have basic accessibility issues for error mode", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
105
+ var _render3, container, results;
106
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
107
+ while (1) switch (_context3.prev = _context3.next) {
108
+ case 0:
109
+ _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_NumberInput["default"], {
110
+ label: "Number input label",
111
+ helperText: "Helper text",
112
+ placeholder: "Placeholder",
113
+ defaultValue: "10",
114
+ margin: "medium",
115
+ min: 0,
116
+ max: 100,
117
+ suffix: "Suffix",
118
+ prefix: "Prefix",
119
+ name: "Name",
120
+ error: "Input error",
121
+ size: "medium",
122
+ step: 1
123
+ })), container = _render3.container;
124
+ _context3.next = 3;
125
+ return (0, _jestAxe.axe)(container);
126
+ case 3:
127
+ results = _context3.sent;
128
+ expect(results).toHaveNoViolations();
129
+ case 5:
130
+ case "end":
131
+ return _context3.stop();
132
+ }
133
+ }, _callee3);
134
+ })));
135
+ it("Should not have basic accessibility issues for disabled mode", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
136
+ var _render4, container, results;
137
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
138
+ while (1) switch (_context4.prev = _context4.next) {
139
+ case 0:
140
+ _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_NumberInput["default"], {
141
+ label: "Number input label",
142
+ helperText: "Helper text",
143
+ placeholder: "Placeholder",
144
+ defaultValue: "10",
145
+ margin: "medium",
146
+ min: 0,
147
+ max: 100,
148
+ suffix: "Suffix",
149
+ prefix: "Prefix",
150
+ name: "Name",
151
+ size: "medium",
152
+ step: 1,
153
+ disabled: true
154
+ })), container = _render4.container;
155
+ _context4.next = 3;
156
+ return (0, _jestAxe.axe)(container);
157
+ case 3:
158
+ results = _context4.sent;
159
+ expect(results).toHaveNoViolations();
160
+ case 5:
161
+ case "end":
162
+ return _context4.stop();
163
+ }
164
+ }, _callee4);
165
+ })));
166
+ it("Should not have basic accessibility issues for read-only mode", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
167
+ var _render5, container, results;
168
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
169
+ while (1) switch (_context5.prev = _context5.next) {
170
+ case 0:
171
+ _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_NumberInput["default"], {
172
+ label: "Number input label",
173
+ helperText: "Helper text",
174
+ placeholder: "Placeholder",
175
+ defaultValue: "10",
176
+ margin: "medium",
177
+ min: 0,
178
+ max: 100,
179
+ suffix: "Suffix",
180
+ prefix: "Prefix",
181
+ name: "Name",
182
+ size: "medium",
183
+ step: 1,
184
+ readOnly: true
185
+ })), container = _render5.container;
186
+ _context5.next = 3;
187
+ return (0, _jestAxe.axe)(container);
188
+ case 3:
189
+ results = _context5.sent;
190
+ expect(results).toHaveNoViolations();
191
+ case 5:
192
+ case "end":
193
+ return _context5.stop();
194
+ }
195
+ }, _callee5);
196
+ })));
197
+ it("Should not have basic accessibility issues for autocomplete mode", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
198
+ var _render6, container, results;
199
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
200
+ while (1) switch (_context6.prev = _context6.next) {
201
+ case 0:
202
+ _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_NumberInput["default"], {
203
+ label: "Number input label",
204
+ helperText: "Helper text",
205
+ placeholder: "Placeholder",
206
+ defaultValue: "10",
207
+ margin: "medium",
208
+ min: 0,
209
+ max: 100,
210
+ suffix: "Suffix",
211
+ prefix: "Prefix",
212
+ name: "Name",
213
+ size: "medium",
214
+ step: 1,
215
+ autocomplete: "on"
216
+ })), container = _render6.container;
217
+ _context6.next = 3;
218
+ return (0, _jestAxe.axe)(container);
219
+ case 3:
220
+ results = _context6.sent;
221
+ expect(results).toHaveNoViolations();
222
+ case 5:
223
+ case "end":
224
+ return _context6.stop();
225
+ }
226
+ }, _callee6);
227
+ })));
228
+ });
@@ -1,11 +1,4 @@
1
1
  import React from "react";
2
2
  import NumberInputPropsType from "./types";
3
- type NumberInputContextProps = {
4
- typeNumber?: string;
5
- minNumber?: number;
6
- maxNumber?: number;
7
- stepNumber?: number;
8
- };
9
- export declare const NumberInputContext: React.Context<NumberInputContextProps>;
10
3
  declare const DxcNumberInput: React.ForwardRefExoticComponent<NumberInputPropsType & React.RefAttributes<HTMLDivElement>>;
11
4
  export default DxcNumberInput;
@@ -5,15 +5,15 @@ var _typeof = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports["default"] = exports.NumberInputContext = void 0;
8
+ exports["default"] = void 0;
9
9
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
10
10
  var _react = _interopRequireWildcard(require("react"));
11
11
  var _styledComponents = _interopRequireDefault(require("styled-components"));
12
12
  var _TextInput = _interopRequireDefault(require("../text-input/TextInput"));
13
+ var _NumberInputContext = require("./NumberInputContext");
13
14
  var _templateObject;
14
15
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
15
16
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
16
- var NumberInputContext = exports.NumberInputContext = /*#__PURE__*/_react["default"].createContext(null);
17
17
  var DxcNumberInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
18
18
  var label = _ref.label,
19
19
  name = _ref.name,
@@ -51,7 +51,7 @@ var DxcNumberInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, r
51
51
  input === null || input === void 0 ? void 0 : input.removeEventListener("wheel", preventDefault);
52
52
  };
53
53
  }, []);
54
- return /*#__PURE__*/_react["default"].createElement(NumberInputContext.Provider, {
54
+ return /*#__PURE__*/_react["default"].createElement(_NumberInputContext.NumberInputContext.Provider, {
55
55
  value: {
56
56
  typeNumber: "number",
57
57
  minNumber: min,
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { NumberInputContextProps } from "./types";
3
+ export declare const NumberInputContext: import("react").Context<NumberInputContextProps>;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.NumberInputContext = void 0;
7
+ var _react = require("react");
8
+ var NumberInputContext = exports.NumberInputContext = /*#__PURE__*/(0, _react.createContext)(null);
@@ -123,6 +123,12 @@ type Props = {
123
123
  */
124
124
  tabIndex?: number;
125
125
  };
126
+ export type NumberInputContextProps = {
127
+ typeNumber?: string;
128
+ minNumber?: number;
129
+ maxNumber?: number;
130
+ stepNumber?: number;
131
+ };
126
132
  /**
127
133
  * Reference to the component.
128
134
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxc-technology/halstack-react",
3
- "version": "0.0.0-89de434",
3
+ "version": "0.0.0-8a597df",
4
4
  "description": "DXC Halstack React components library",
5
5
  "repository": "dxc-technology/halstack-react",
6
6
  "homepage": "https://developer.dxc.com/halstack",
@@ -25,11 +25,14 @@
25
25
  "uuid": "^8.3.2"
26
26
  },
27
27
  "scripts": {
28
- "test": "jest --env=jsdom",
28
+ "test": "jest --env=jsdom --config=./jest.config.js",
29
+ "test:accessibility": "jest --env=jsdom --config=./jest.config.accessibility.js",
29
30
  "test:watch": "npm test -- --watch --coverage",
30
31
  "build": "babel src --extensions .js,.jsx,.ts,.tsx --out-dir ../dist --copy-files --verbose && node ../scripts/build/copy-package.js && node ../scripts/build/copy-readme.js && tsc ",
31
32
  "build:watch": "babel src --watch --extensions .js,.jsx,.ts,.tsx --out-dir ../dist --copy-files --verbose",
32
33
  "storybook": "storybook dev -p 6006",
34
+ "storybook:accessibility": "test-storybook",
35
+ "storybook:accessibility:ci": "test-storybook --maxWorkers=2",
33
36
  "build-storybook": "storybook build"
34
37
  },
35
38
  "devDependencies": {
@@ -41,12 +44,14 @@
41
44
  "@babel/preset-env": "^7.16.8",
42
45
  "@babel/preset-react": "^7.16.7",
43
46
  "@babel/preset-typescript": "^7.16.7",
47
+ "@storybook/addon-a11y": "^7.6.17",
44
48
  "@storybook/addon-essentials": "^7.5.3",
45
49
  "@storybook/addon-interactions": "^7.5.3",
46
50
  "@storybook/addon-links": "^7.5.3",
47
51
  "@storybook/blocks": "^7.5.3",
48
52
  "@storybook/react": "^7.5.3",
49
53
  "@storybook/react-vite": "^7.5.3",
54
+ "@storybook/test-runner": "^0.16.0",
50
55
  "@storybook/testing-library": "^0.2.2",
51
56
  "@testing-library/react": "^13.0.0",
52
57
  "@testing-library/user-event": "^13.0.0",
@@ -54,6 +59,7 @@
54
59
  "@types/react": "^18.0.18",
55
60
  "@types/styled-components": "5.1.29",
56
61
  "@types/uuid": "^9.0.6",
62
+ "axe-playwright": "^2.0.1",
57
63
  "babel-jest": "^24.8.0",
58
64
  "babel-loader": "^8.0.6",
59
65
  "chromatic": "^8.0.0",
@@ -67,21 +73,15 @@
67
73
  "eslint-plugin-react-hooks": "^4.6.0",
68
74
  "eslint-plugin-storybook": "^0.6.15",
69
75
  "identity-obj-proxy": "^3.0.0",
70
- "jest": "^29.2.2",
76
+ "jest": "^29.7.0",
77
+ "jest-axe": "^8.0.0",
71
78
  "jest-environment-jsdom": "^29.3.1",
79
+ "playwright": "^1.41.2",
72
80
  "react": "^18.2.0",
73
81
  "react-dom": "^18.2.0",
74
82
  "storybook": "^7.5.3",
75
83
  "storybook-addon-pseudo-states": "^2.1.2",
76
84
  "styled-components": "^5.0.1",
77
85
  "typescript": "^5.3.3"
78
- },
79
- "jest": {
80
- "moduleNameMapper": {
81
- "\\.(css|less|scss|sass)$": "identity-obj-proxy",
82
- "\\.(svg)$": "<rootDir>/test/mocks/svgMock.js",
83
- "\\.(png)$": "<rootDir>/test/mocks/pngMock.js",
84
- "^uuid$": "uuid"
85
- }
86
86
  }
87
87
  }
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
5
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
6
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
7
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _react2 = require("@testing-library/react");
10
+ var _jestAxe = require("jest-axe");
11
+ var _Paginator = _interopRequireDefault(require("./Paginator.tsx"));
12
+ // Mocking DOMRect for Radix Primitive Popover
13
+ global.globalThis = global;
14
+ global.DOMRect = {
15
+ fromRect: function fromRect() {
16
+ return {
17
+ top: 0,
18
+ left: 0,
19
+ bottom: 0,
20
+ right: 0,
21
+ width: 0,
22
+ height: 0
23
+ };
24
+ }
25
+ };
26
+ global.ResizeObserver = /*#__PURE__*/function () {
27
+ function ResizeObserver() {
28
+ (0, _classCallCheck2["default"])(this, ResizeObserver);
29
+ }
30
+ (0, _createClass2["default"])(ResizeObserver, [{
31
+ key: "observe",
32
+ value: function observe() {}
33
+ }, {
34
+ key: "unobserve",
35
+ value: function unobserve() {}
36
+ }, {
37
+ key: "disconnect",
38
+ value: function disconnect() {}
39
+ }]);
40
+ return ResizeObserver;
41
+ }();
42
+ global.DOMRect = {
43
+ fromRect: function fromRect() {
44
+ return {
45
+ top: 0,
46
+ left: 0,
47
+ bottom: 0,
48
+ right: 0,
49
+ width: 0,
50
+ height: 0
51
+ };
52
+ }
53
+ };
54
+ describe("Paginator component accessibility tests", function () {
55
+ it("Should not have basic accessibility issues", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
56
+ var _render, container, results;
57
+ return _regenerator["default"].wrap(function _callee$(_context) {
58
+ while (1) switch (_context.prev = _context.next) {
59
+ case 0:
60
+ _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Paginator["default"], {
61
+ currentPage: 1,
62
+ itemsPerPage: 10,
63
+ totalItems: 27,
64
+ onPageChange: function onPageChange() {},
65
+ itemsPerPageOptions: [5, 10, 15],
66
+ showGoToPage: true
67
+ })), container = _render.container;
68
+ _context.next = 3;
69
+ return (0, _jestAxe.axe)(container);
70
+ case 3:
71
+ results = _context.sent;
72
+ expect(results).toHaveNoViolations();
73
+ case 5:
74
+ case "end":
75
+ return _context.stop();
76
+ }
77
+ }, _callee);
78
+ })));
79
+ });
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
5
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
6
+ var _react = _interopRequireDefault(require("react"));
7
+ var _react2 = require("@testing-library/react");
8
+ var _jestAxe = require("jest-axe");
9
+ var _Paragraph = _interopRequireDefault(require("./Paragraph"));
10
+ describe("Paragraph component accessibility tests", function () {
11
+ it("Should not have basic accessibility issues", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
12
+ var _render, container, results;
13
+ return _regenerator["default"].wrap(function _callee$(_context) {
14
+ while (1) switch (_context.prev = _context.next) {
15
+ case 0:
16
+ _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Paragraph["default"], null, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla id tortor sit amet velit auctor cursus id eget nisl. Vivamus luctus egestas eros, at mattis libero eleifend ac. Integer vel urna rutrum, pretium arcu dignissim, fringilla turpis. Nullam luctus odio quis magna finibus, a pharetra magna euismod. Nullam efficitur semper pellentesque. Nulla eget arcu ac diam fringilla vehicula. In imperdiet nisl hendrerit, elementum metus eu, ornare risus. Aenean neque nibh, vestibulum vitae elit vel, imperdiet suscipit leo. Curabitur blandit iaculis pretium. Fusce id imperdiet dui, ut laoreet justo. Sed maximus sollicitudin ipsum, et varius massa condimentum eget. Vivamus id mauris et nisl mattis consequat et id lectus. Quisque mollis lacinia nisl. Suspendisse sed quam tincidunt, commodo dolor vel, tincidunt nisl.")), container = _render.container;
17
+ _context.next = 3;
18
+ return (0, _jestAxe.axe)(container);
19
+ case 3:
20
+ results = _context.sent;
21
+ expect(results).toHaveNoViolations();
22
+ case 5:
23
+ case "end":
24
+ return _context.stop();
25
+ }
26
+ }, _callee);
27
+ })));
28
+ });
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
5
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
6
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
7
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _react2 = require("@testing-library/react");
10
+ var _jestAxe = require("jest-axe");
11
+ var _PasswordInput = _interopRequireDefault(require("./PasswordInput.tsx"));
12
+ // Mocking DOMRect for Radix Primitive Popover
13
+ global.globalThis = global;
14
+ global.DOMRect = {
15
+ fromRect: function fromRect() {
16
+ return {
17
+ top: 0,
18
+ left: 0,
19
+ bottom: 0,
20
+ right: 0,
21
+ width: 0,
22
+ height: 0
23
+ };
24
+ }
25
+ };
26
+ global.ResizeObserver = /*#__PURE__*/function () {
27
+ function ResizeObserver() {
28
+ (0, _classCallCheck2["default"])(this, ResizeObserver);
29
+ }
30
+ (0, _createClass2["default"])(ResizeObserver, [{
31
+ key: "observe",
32
+ value: function observe() {}
33
+ }, {
34
+ key: "unobserve",
35
+ value: function unobserve() {}
36
+ }, {
37
+ key: "disconnect",
38
+ value: function disconnect() {}
39
+ }]);
40
+ return ResizeObserver;
41
+ }();
42
+ describe("Password input component accessibility tests", function () {
43
+ it("Should not have basic accessibility issues", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
44
+ var _render, container, results;
45
+ return _regenerator["default"].wrap(function _callee$(_context) {
46
+ while (1) switch (_context.prev = _context.next) {
47
+ case 0:
48
+ _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_PasswordInput["default"], {
49
+ label: "Password input label",
50
+ helperText: "Helper text",
51
+ margin: "medium",
52
+ name: "Password",
53
+ size: "medium",
54
+ value: "Password",
55
+ minLength: 5,
56
+ maxLength: 10,
57
+ clearable: true
58
+ })), container = _render.container;
59
+ _context.next = 3;
60
+ return (0, _jestAxe.axe)(container);
61
+ case 3:
62
+ results = _context.sent;
63
+ expect(results).toHaveNoViolations();
64
+ case 5:
65
+ case "end":
66
+ return _context.stop();
67
+ }
68
+ }, _callee);
69
+ })));
70
+ it("Should not have basic accessibility issues for pattern mode", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
71
+ var _render2, container, results;
72
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
73
+ while (1) switch (_context2.prev = _context2.next) {
74
+ case 0:
75
+ _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_PasswordInput["default"], {
76
+ label: "Password input label",
77
+ helperText: "Helper text",
78
+ margin: "medium",
79
+ name: "Password",
80
+ size: "medium",
81
+ value: "Password",
82
+ minLength: 5,
83
+ maxLength: 10,
84
+ autocomplete: "on",
85
+ pattern: "^.*(?=.*[a-zA-Z])(?=.*)(?=.*[!&$%&? \"]).*$"
86
+ })), container = _render2.container;
87
+ _context2.next = 3;
88
+ return (0, _jestAxe.axe)(container);
89
+ case 3:
90
+ results = _context2.sent;
91
+ expect(results).toHaveNoViolations();
92
+ case 5:
93
+ case "end":
94
+ return _context2.stop();
95
+ }
96
+ }, _callee2);
97
+ })));
98
+ it("Should not have basic accessibility issues for clearable mode", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
99
+ var _render3, container, results;
100
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
101
+ while (1) switch (_context3.prev = _context3.next) {
102
+ case 0:
103
+ _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_PasswordInput["default"], {
104
+ label: "Password input label",
105
+ helperText: "Helper text",
106
+ margin: "medium",
107
+ name: "Password",
108
+ size: "medium",
109
+ error: "Password error",
110
+ value: "Password",
111
+ minLength: 5,
112
+ maxLength: 10,
113
+ clearable: true
114
+ })), container = _render3.container;
115
+ _context3.next = 3;
116
+ return (0, _jestAxe.axe)(container);
117
+ case 3:
118
+ results = _context3.sent;
119
+ expect(results).toHaveNoViolations();
120
+ case 5:
121
+ case "end":
122
+ return _context3.stop();
123
+ }
124
+ }, _callee3);
125
+ })));
126
+ it("Should not have basic accessibility issues for autocomplete mode", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
127
+ var _render4, container, results;
128
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
129
+ while (1) switch (_context4.prev = _context4.next) {
130
+ case 0:
131
+ _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_PasswordInput["default"], {
132
+ label: "Password input label",
133
+ helperText: "Helper text",
134
+ margin: "medium",
135
+ name: "Password",
136
+ size: "medium",
137
+ value: "Password",
138
+ minLength: 5,
139
+ maxLength: 10,
140
+ autocomplete: "on"
141
+ })), container = _render4.container;
142
+ _context4.next = 3;
143
+ return (0, _jestAxe.axe)(container);
144
+ case 3:
145
+ results = _context4.sent;
146
+ expect(results).toHaveNoViolations();
147
+ case 5:
148
+ case "end":
149
+ return _context4.stop();
150
+ }
151
+ }, _callee4);
152
+ })));
153
+ });