@dxc-technology/halstack-react 11.0.0 → 12.0.0

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 (276) hide show
  1. package/BackgroundColorContext.d.ts +1 -10
  2. package/BackgroundColorContext.js +3 -8
  3. package/HalstackContext.d.ts +32 -142
  4. package/HalstackContext.js +2 -2
  5. package/accordion/Accordion.accessibility.test.js +71 -0
  6. package/accordion/Accordion.js +13 -27
  7. package/accordion/Accordion.stories.tsx +7 -49
  8. package/accordion/types.d.ts +1 -1
  9. package/accordion-group/AccordionGroup.accessibility.test.js +88 -0
  10. package/accordion-group/AccordionGroup.d.ts +2 -3
  11. package/accordion-group/AccordionGroup.js +4 -4
  12. package/accordion-group/AccordionGroup.stories.tsx +23 -23
  13. package/accordion-group/AccordionGroupAccordion.js +3 -3
  14. package/accordion-group/AccordionGroupContext.d.ts +3 -0
  15. package/accordion-group/AccordionGroupContext.js +8 -0
  16. package/accordion-group/types.d.ts +1 -1
  17. package/action-icon/ActionIcon.accessibility.test.js +63 -0
  18. package/action-icon/ActionIcon.d.ts +4 -0
  19. package/action-icon/ActionIcon.js +48 -0
  20. package/action-icon/ActionIcon.stories.tsx +41 -0
  21. package/action-icon/ActionIcon.test.js +64 -0
  22. package/action-icon/types.d.ts +26 -0
  23. package/action-icon/types.js +5 -0
  24. package/alert/Alert.accessibility.test.js +95 -0
  25. package/alert/Alert.js +21 -75
  26. package/badge/Badge.accessibility.test.js +129 -0
  27. package/badge/Badge.d.ts +1 -1
  28. package/badge/Badge.js +141 -28
  29. package/badge/Badge.stories.tsx +210 -0
  30. package/badge/Badge.test.js +30 -0
  31. package/badge/types.d.ts +52 -3
  32. package/box/Box.accessibility.test.js +33 -0
  33. package/box/Box.js +2 -5
  34. package/breadcrumbs/Breadcrumbs.accessibility.test.d.ts +1 -0
  35. package/breadcrumbs/Breadcrumbs.accessibility.test.js +96 -0
  36. package/breadcrumbs/Breadcrumbs.d.ts +4 -0
  37. package/breadcrumbs/Breadcrumbs.js +79 -0
  38. package/breadcrumbs/Breadcrumbs.stories.tsx +194 -0
  39. package/breadcrumbs/Breadcrumbs.test.d.ts +1 -0
  40. package/breadcrumbs/Breadcrumbs.test.js +169 -0
  41. package/breadcrumbs/Item.d.ts +4 -0
  42. package/breadcrumbs/Item.js +52 -0
  43. package/breadcrumbs/dropdownTheme.d.ts +53 -0
  44. package/breadcrumbs/dropdownTheme.js +62 -0
  45. package/breadcrumbs/types.d.ts +16 -0
  46. package/breadcrumbs/types.js +5 -0
  47. package/bulleted-list/BulletedList.accessibility.test.js +119 -0
  48. package/bulleted-list/BulletedList.js +16 -23
  49. package/bulleted-list/BulletedList.stories.tsx +1 -2
  50. package/button/Button.accessibility.test.js +127 -0
  51. package/button/Button.js +16 -16
  52. package/button/Button.stories.tsx +34 -53
  53. package/button/Button.test.js +3 -1
  54. package/button/types.d.ts +1 -1
  55. package/card/Card.accessibility.test.js +36 -0
  56. package/card/Card.js +3 -2
  57. package/checkbox/Checkbox.accessibility.test.js +87 -0
  58. package/checkbox/Checkbox.js +31 -36
  59. package/chip/Chip.accessibility.test.js +67 -0
  60. package/chip/Chip.js +11 -6
  61. package/chip/Chip.stories.tsx +10 -25
  62. package/chip/Chip.test.js +4 -4
  63. package/common/coreTokens.d.ts +105 -14
  64. package/common/coreTokens.js +40 -22
  65. package/common/variables.d.ts +31 -138
  66. package/common/variables.js +103 -210
  67. package/container/Container.d.ts +4 -0
  68. package/container/Container.js +194 -0
  69. package/container/Container.stories.tsx +214 -0
  70. package/container/types.d.ts +74 -0
  71. package/container/types.js +5 -0
  72. package/contextual-menu/ContextualMenu.accessibility.test.js +97 -0
  73. package/contextual-menu/ContextualMenu.d.ts +5 -0
  74. package/contextual-menu/ContextualMenu.js +88 -0
  75. package/contextual-menu/ContextualMenu.stories.tsx +232 -0
  76. package/contextual-menu/ContextualMenu.test.js +205 -0
  77. package/contextual-menu/GroupItem.d.ts +4 -0
  78. package/contextual-menu/GroupItem.js +67 -0
  79. package/contextual-menu/ItemAction.d.ts +4 -0
  80. package/contextual-menu/ItemAction.js +51 -0
  81. package/contextual-menu/MenuItem.d.ts +4 -0
  82. package/contextual-menu/MenuItem.js +29 -0
  83. package/contextual-menu/SingleItem.d.ts +4 -0
  84. package/contextual-menu/SingleItem.js +38 -0
  85. package/contextual-menu/types.d.ts +58 -0
  86. package/contextual-menu/types.js +5 -0
  87. package/date-input/Calendar.js +1 -1
  88. package/date-input/DateInput.accessibility.test.js +228 -0
  89. package/date-input/DateInput.js +4 -5
  90. package/date-input/DateInput.stories.tsx +15 -8
  91. package/date-input/DatePicker.js +13 -7
  92. package/date-input/YearPicker.js +1 -1
  93. package/date-input/types.d.ts +2 -2
  94. package/dialog/Dialog.accessibility.test.js +69 -0
  95. package/dialog/Dialog.js +11 -25
  96. package/dialog/Dialog.stories.tsx +176 -0
  97. package/dialog/Dialog.test.js +1 -1
  98. package/divider/Divider.accessibility.test.js +33 -0
  99. package/divider/Divider.d.ts +4 -0
  100. package/divider/Divider.js +36 -0
  101. package/divider/Divider.stories.tsx +223 -0
  102. package/divider/Divider.test.js +38 -0
  103. package/divider/types.d.ts +21 -0
  104. package/divider/types.js +5 -0
  105. package/dropdown/Dropdown.accessibility.test.js +180 -0
  106. package/dropdown/Dropdown.js +26 -39
  107. package/dropdown/Dropdown.stories.tsx +15 -26
  108. package/dropdown/Dropdown.test.js +18 -18
  109. package/dropdown/DropdownMenu.js +4 -4
  110. package/dropdown/DropdownMenuItem.js +8 -4
  111. package/dropdown/types.d.ts +3 -5
  112. package/file-input/FileInput.accessibility.test.js +160 -0
  113. package/file-input/FileInput.js +126 -141
  114. package/file-input/FileInput.test.js +84 -110
  115. package/file-input/FileItem.js +18 -28
  116. package/file-input/types.d.ts +1 -1
  117. package/footer/Footer.accessibility.test.js +125 -0
  118. package/footer/Footer.d.ts +1 -1
  119. package/footer/Footer.js +36 -31
  120. package/footer/Footer.stories.tsx +58 -2
  121. package/footer/Icons.d.ts +1 -0
  122. package/footer/Icons.js +52 -16
  123. package/footer/types.d.ts +8 -8
  124. package/header/Header.accessibility.test.js +93 -0
  125. package/header/Header.js +20 -41
  126. package/header/Header.stories.tsx +16 -0
  127. package/header/Icons.js +1 -6
  128. package/header/types.d.ts +4 -3
  129. package/heading/Heading.accessibility.test.js +33 -0
  130. package/heading/Heading.js +1 -1
  131. package/icon/Icon.accessibility.test.js +30 -0
  132. package/icon/Icon.d.ts +4 -0
  133. package/icon/Icon.js +33 -0
  134. package/icon/Icon.stories.tsx +28 -0
  135. package/icon/types.d.ts +4 -0
  136. package/icon/types.js +5 -0
  137. package/image/Image.accessibility.test.js +56 -0
  138. package/image/Image.js +1 -1
  139. package/image/Image.stories.tsx +3 -1
  140. package/layout/ApplicationLayout.d.ts +1 -1
  141. package/layout/ApplicationLayout.js +10 -7
  142. package/layout/Icons.d.ts +0 -1
  143. package/layout/Icons.js +1 -11
  144. package/link/Link.accessibility.test.js +108 -0
  145. package/link/Link.js +8 -6
  146. package/link/Link.stories.tsx +4 -4
  147. package/link/types.d.ts +1 -1
  148. package/main.d.ts +7 -3
  149. package/main.js +37 -9
  150. package/nav-tabs/NavTabs.accessibility.test.js +44 -0
  151. package/nav-tabs/NavTabs.d.ts +1 -2
  152. package/nav-tabs/NavTabs.js +10 -7
  153. package/nav-tabs/NavTabs.stories.tsx +29 -24
  154. package/nav-tabs/NavTabs.test.js +11 -9
  155. package/nav-tabs/NavTabsContext.d.ts +3 -0
  156. package/nav-tabs/NavTabsContext.js +8 -0
  157. package/nav-tabs/Tab.js +23 -23
  158. package/nav-tabs/types.d.ts +1 -1
  159. package/number-input/NumberInput.accessibility.test.js +228 -0
  160. package/number-input/NumberInput.d.ts +0 -7
  161. package/number-input/NumberInput.js +24 -5
  162. package/number-input/NumberInput.test.js +165 -6
  163. package/number-input/NumberInputContext.d.ts +3 -0
  164. package/number-input/NumberInputContext.js +8 -0
  165. package/number-input/types.d.ts +6 -0
  166. package/package.json +16 -14
  167. package/paginator/Paginator.accessibility.test.js +79 -0
  168. package/paginator/Paginator.js +14 -14
  169. package/paragraph/Paragraph.accessibility.test.js +28 -0
  170. package/paragraph/Paragraph.js +2 -7
  171. package/password-input/PasswordInput.accessibility.test.js +153 -0
  172. package/password-input/PasswordInput.js +7 -7
  173. package/password-input/PasswordInput.stories.tsx +0 -1
  174. package/password-input/PasswordInput.test.js +4 -4
  175. package/progress-bar/ProgressBar.accessibility.test.js +35 -0
  176. package/progress-bar/ProgressBar.js +11 -15
  177. package/quick-nav/QuickNav.accessibility.test.js +57 -0
  178. package/quick-nav/QuickNav.js +1 -1
  179. package/radio-group/Radio.js +1 -1
  180. package/radio-group/RadioGroup.accessibility.test.js +97 -0
  181. package/radio-group/RadioGroup.js +3 -2
  182. package/resultset-table/ResultsetTable.accessibility.test.js +285 -0
  183. package/resultset-table/ResultsetTable.d.ts +4 -1
  184. package/resultset-table/ResultsetTable.js +25 -13
  185. package/resultset-table/ResultsetTable.stories.tsx +118 -5
  186. package/resultset-table/ResultsetTable.test.js +76 -0
  187. package/resultset-table/types.d.ts +40 -7
  188. package/select/Listbox.js +28 -16
  189. package/select/Option.js +19 -10
  190. package/select/Select.accessibility.test.js +228 -0
  191. package/select/Select.js +57 -37
  192. package/select/Select.stories.tsx +59 -111
  193. package/select/Select.test.js +387 -456
  194. package/select/types.d.ts +3 -3
  195. package/sidenav/Sidenav.accessibility.test.js +59 -0
  196. package/sidenav/Sidenav.js +21 -19
  197. package/sidenav/Sidenav.stories.tsx +4 -9
  198. package/sidenav/types.d.ts +2 -2
  199. package/slider/Slider.accessibility.test.js +104 -0
  200. package/slider/Slider.js +40 -48
  201. package/spinner/Spinner.accessibility.test.js +96 -0
  202. package/spinner/Spinner.js +12 -16
  203. package/status-light/StatusLight.accessibility.test.js +157 -0
  204. package/status-light/StatusLight.d.ts +4 -0
  205. package/status-light/StatusLight.js +51 -0
  206. package/status-light/StatusLight.stories.tsx +74 -0
  207. package/status-light/StatusLight.test.js +25 -0
  208. package/status-light/types.d.ts +17 -0
  209. package/status-light/types.js +5 -0
  210. package/switch/Switch.accessibility.test.js +98 -0
  211. package/switch/Switch.js +24 -29
  212. package/switch/Switch.stories.tsx +12 -0
  213. package/table/DropdownTheme.js +62 -0
  214. package/table/Table.accessibility.test.js +93 -0
  215. package/table/Table.d.ts +6 -2
  216. package/table/Table.js +74 -12
  217. package/table/Table.stories.tsx +309 -2
  218. package/table/Table.test.js +92 -0
  219. package/table/types.d.ts +28 -0
  220. package/tabs/Tab.js +13 -9
  221. package/tabs/Tabs.accessibility.test.js +56 -0
  222. package/tabs/Tabs.js +12 -24
  223. package/tabs/Tabs.stories.tsx +8 -4
  224. package/tabs/Tabs.test.js +19 -37
  225. package/tabs/types.d.ts +2 -2
  226. package/tag/Tag.accessibility.test.js +69 -0
  227. package/tag/Tag.js +7 -7
  228. package/tag/Tag.stories.tsx +4 -7
  229. package/tag/Tag.test.js +4 -12
  230. package/tag/types.d.ts +2 -2
  231. package/text-input/Suggestion.js +1 -1
  232. package/text-input/Suggestions.js +19 -14
  233. package/text-input/TextInput.accessibility.test.js +321 -0
  234. package/text-input/TextInput.js +84 -105
  235. package/text-input/TextInput.stories.tsx +17 -8
  236. package/text-input/TextInput.test.js +96 -79
  237. package/textarea/Textarea.accessibility.test.js +155 -0
  238. package/textarea/Textarea.js +12 -17
  239. package/textarea/Textarea.stories.tsx +0 -1
  240. package/toggle-group/ToggleGroup.accessibility.test.js +107 -0
  241. package/toggle-group/ToggleGroup.js +6 -8
  242. package/toggle-group/ToggleGroup.stories.tsx +3 -3
  243. package/toggle-group/types.d.ts +2 -2
  244. package/typography/Typography.accessibility.test.js +339 -0
  245. package/useTheme.d.ts +31 -138
  246. package/utils/BaseTypography.js +1 -1
  247. package/utils/FocusLock.js +16 -6
  248. package/wizard/Wizard.accessibility.test.js +55 -0
  249. package/wizard/Wizard.js +14 -25
  250. package/wizard/Wizard.stories.tsx +19 -0
  251. package/wizard/types.d.ts +2 -2
  252. package/common/OpenSans.css +0 -69
  253. package/common/fonts/OpenSans-Bold.ttf +0 -0
  254. package/common/fonts/OpenSans-BoldItalic.ttf +0 -0
  255. package/common/fonts/OpenSans-ExtraBold.ttf +0 -0
  256. package/common/fonts/OpenSans-ExtraBoldItalic.ttf +0 -0
  257. package/common/fonts/OpenSans-Italic.ttf +0 -0
  258. package/common/fonts/OpenSans-Light.ttf +0 -0
  259. package/common/fonts/OpenSans-LightItalic.ttf +0 -0
  260. package/common/fonts/OpenSans-Regular.ttf +0 -0
  261. package/common/fonts/OpenSans-SemiBold.ttf +0 -0
  262. package/common/fonts/OpenSans-SemiBoldItalic.ttf +0 -0
  263. package/date-input/Icons.d.ts +0 -6
  264. package/date-input/Icons.js +0 -58
  265. package/paginator/Icons.d.ts +0 -5
  266. package/paginator/Icons.js +0 -40
  267. package/password-input/Icons.d.ts +0 -6
  268. package/password-input/Icons.js +0 -35
  269. package/select/Icons.d.ts +0 -10
  270. package/select/Icons.js +0 -89
  271. package/sidenav/Icons.d.ts +0 -7
  272. package/sidenav/Icons.js +0 -47
  273. package/text-input/Icons.d.ts +0 -8
  274. package/text-input/Icons.js +0 -56
  275. /package/{layout → sidenav}/SidenavContext.d.ts +0 -0
  276. /package/{layout → sidenav}/SidenavContext.js +0 -0
@@ -8,6 +8,7 @@ exports["default"] = void 0;
8
8
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
9
9
  var _react = _interopRequireDefault(require("react"));
10
10
  var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+ var _Icon = _interopRequireDefault(require("../icon/Icon"));
11
12
  var _templateObject, _templateObject2, _templateObject3;
12
13
  var DropdownMenuItem = function DropdownMenuItem(_ref) {
13
14
  var id = _ref.id,
@@ -24,9 +25,10 @@ var DropdownMenuItem = function DropdownMenuItem(_ref) {
24
25
  role: "menuitem",
25
26
  tabIndex: -1
26
27
  }, iconPosition === "after" && /*#__PURE__*/_react["default"].createElement(DropdownMenuItemLabel, null, option.label), option.icon && /*#__PURE__*/_react["default"].createElement(DropdownMenuItemIcon, {
27
- role: typeof option.icon === "string" ? undefined : "img"
28
- }, typeof option.icon === "string" ? /*#__PURE__*/_react["default"].createElement("img", {
29
- src: option.icon
28
+ role: typeof option.icon === "string" ? undefined : "img",
29
+ "aria-hidden": true
30
+ }, typeof option.icon === "string" ? /*#__PURE__*/_react["default"].createElement(_Icon["default"], {
31
+ icon: option.icon
30
32
  }) : option.icon), iconPosition === "before" && /*#__PURE__*/_react["default"].createElement(DropdownMenuItemLabel, null, option.label));
31
33
  };
32
34
  var DropdownMenuItemContainer = _styledComponents["default"].li(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: ", ";\n min-height: 36px;\n padding-top: ", ";\n padding-bottom: ", ";\n padding-left: ", ";\n padding-right: ", ";\n cursor: pointer;\n\n ", "\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n"])), function (props) {
@@ -57,11 +59,13 @@ var DropdownMenuItemLabel = _styledComponents["default"].span(_templateObject2 |
57
59
  }, function (props) {
58
60
  return props.theme.optionFontColor;
59
61
  });
60
- var DropdownMenuItemIcon = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n color: ", ";\n\n img,\n svg {\n width: ", ";\n height: ", ";\n }\n"])), function (props) {
62
+ var DropdownMenuItemIcon = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n color: ", ";\n font-size: ", ";\n\n svg {\n width: ", ";\n height: ", ";\n }\n"])), function (props) {
61
63
  return props.theme.optionIconColor;
62
64
  }, function (props) {
63
65
  return props.theme.optionIconSize;
64
66
  }, function (props) {
65
67
  return props.theme.optionIconSize;
68
+ }, function (props) {
69
+ return props.theme.optionIconSize;
66
70
  });
67
71
  var _default = exports["default"] = /*#__PURE__*/_react["default"].memo(DropdownMenuItem);
@@ -14,8 +14,7 @@ export type Option = {
14
14
  */
15
15
  label?: string;
16
16
  /**
17
- * Element or path used as the icon that will be placed next to the
18
- * option label.
17
+ * Material Symbol name or SVG element as the icon that will be placed next to the label.
19
18
  */
20
19
  icon?: string | SVG;
21
20
  /**
@@ -34,8 +33,7 @@ type Props = {
34
33
  */
35
34
  optionsIconPosition?: "before" | "after";
36
35
  /**
37
- * Element or path used as the icon that will be placed next to the
38
- * dropdown label.
36
+ * Material Symbol name or SVG element as the icon that will be placed next to the label.
39
37
  */
40
38
  icon?: string | SVG;
41
39
  /**
@@ -55,7 +53,7 @@ type Props = {
55
53
  */
56
54
  disabled?: boolean;
57
55
  /**
58
- * If true, the options are showed when the dropdown is hover.
56
+ * If true, the options are shown when the dropdown is hover.
59
57
  */
60
58
  expandOnHover?: boolean;
61
59
  /**
@@ -0,0 +1,160 @@
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 _axeHelper = require("../../test/accessibility/axe-helper.js");
9
+ var _FileInput = _interopRequireDefault(require("./FileInput.tsx"));
10
+ var picPreview = "https://cdn.mos.cms.futurecdn.net/CAZ6JXi6huSuN4QGE627NR.jpg";
11
+ var file1 = new File(["file1"], "file.pdf", {
12
+ type: "text/plain"
13
+ });
14
+ var file2 = new File(["file2"], "file2.mp3", {
15
+ type: "audio"
16
+ });
17
+ var file3 = new File(["file3"], "file3.png", {
18
+ type: "image/png"
19
+ });
20
+ var file4 = new File(["file4"], "file4file4file4file4file4file4file4file4file4.mp4", {
21
+ type: "video"
22
+ });
23
+ var file5 = new File(["file5"], "file5file5file5file5file5file5file5file5file5.mp4", {
24
+ type: "video"
25
+ });
26
+ var filesExamples = [{
27
+ file: file1
28
+ }, {
29
+ file: file2
30
+ }, {
31
+ file: file3,
32
+ preview: picPreview
33
+ }, {
34
+ file: file4
35
+ }, {
36
+ error: "This error message is a multiline paragraph for testing.",
37
+ file: file5
38
+ }, {
39
+ error: "Error message",
40
+ file: file3,
41
+ preview: picPreview
42
+ }];
43
+ describe("FileInput component accessibility tests", function () {
44
+ it("Should not have basic accessibility issues for dropzone mode", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
45
+ var _render, container, results;
46
+ return _regenerator["default"].wrap(function _callee$(_context) {
47
+ while (1) switch (_context.prev = _context.next) {
48
+ case 0:
49
+ _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_FileInput["default"], {
50
+ label: "File input",
51
+ helperText: "Helper Text",
52
+ value: filesExamples,
53
+ buttonLabel: "Button Label",
54
+ dropAreaLabel: "Drop Area",
55
+ margin: "medium",
56
+ mode: "dropzone",
57
+ multiple: true,
58
+ minSize: 1000,
59
+ maxSize: 20000,
60
+ showPreview: true
61
+ })), container = _render.container;
62
+ _context.next = 3;
63
+ return (0, _axeHelper.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 disabled 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(_FileInput["default"], {
79
+ label: "File input",
80
+ helperText: "Helper Text",
81
+ value: filesExamples,
82
+ buttonLabel: "Button Label",
83
+ dropAreaLabel: "Drop Area",
84
+ margin: "medium",
85
+ mode: "dropzone",
86
+ multiple: true,
87
+ minSize: 1000,
88
+ maxSize: 20000,
89
+ disabled: true
90
+ })), container = _render2.container;
91
+ _context2.next = 3;
92
+ return (0, _axeHelper.axe)(container);
93
+ case 3:
94
+ results = _context2.sent;
95
+ expect(results).toHaveNoViolations();
96
+ case 5:
97
+ case "end":
98
+ return _context2.stop();
99
+ }
100
+ }, _callee2);
101
+ })));
102
+ it("Should not have basic accessibility issues for file mode", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
103
+ var _render3, container, results;
104
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
105
+ while (1) switch (_context3.prev = _context3.next) {
106
+ case 0:
107
+ _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_FileInput["default"], {
108
+ label: "File input",
109
+ helperText: "Helper Text",
110
+ value: filesExamples,
111
+ buttonLabel: "Button Label",
112
+ dropAreaLabel: "Drop Area",
113
+ margin: "medium",
114
+ mode: "file",
115
+ multiple: true,
116
+ minSize: 1000,
117
+ maxSize: 20000,
118
+ showPreview: true
119
+ })), container = _render3.container;
120
+ _context3.next = 3;
121
+ return (0, _axeHelper.axe)(container);
122
+ case 3:
123
+ results = _context3.sent;
124
+ expect(results).toHaveNoViolations();
125
+ case 5:
126
+ case "end":
127
+ return _context3.stop();
128
+ }
129
+ }, _callee3);
130
+ })));
131
+ it("Should not have basic accessibility issues for filedrop mode", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
132
+ var _render4, container, results;
133
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
134
+ while (1) switch (_context4.prev = _context4.next) {
135
+ case 0:
136
+ _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_FileInput["default"], {
137
+ label: "File input",
138
+ helperText: "Helper Text",
139
+ value: filesExamples,
140
+ buttonLabel: "Button Label",
141
+ dropAreaLabel: "Drop Area",
142
+ margin: "medium",
143
+ mode: "filedrop",
144
+ multiple: true,
145
+ minSize: 1000,
146
+ maxSize: 20000,
147
+ showPreview: true
148
+ })), container = _render4.container;
149
+ _context4.next = 3;
150
+ return (0, _axeHelper.axe)(container);
151
+ case 3:
152
+ results = _context4.sent;
153
+ expect(results).toHaveNoViolations();
154
+ case 5:
155
+ case "end":
156
+ return _context4.stop();
157
+ }
158
+ }, _callee4);
159
+ })));
160
+ });
@@ -11,8 +11,8 @@ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/hel
11
11
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
12
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
13
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
14
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
14
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
16
16
  var _react = _interopRequireWildcard(require("react"));
17
17
  var _styledComponents = _interopRequireWildcard(require("styled-components"));
18
18
  var _uuid = require("uuid");
@@ -23,79 +23,87 @@ var _Button = _interopRequireDefault(require("../button/Button"));
23
23
  var _FileItem = _interopRequireDefault(require("./FileItem"));
24
24
  var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11;
25
25
  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); }
26
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(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; }
26
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(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 && {}.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; }
27
27
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
28
28
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
29
- var audioIcon = /*#__PURE__*/_react["default"].createElement("svg", {
30
- xmlns: "http://www.w3.org/2000/svg",
31
- width: "24",
32
- height: "24",
33
- viewBox: "0 0 24 24",
34
- fill: "currentColor"
35
- }, /*#__PURE__*/_react["default"].createElement("path", {
36
- fill: "none",
37
- d: "M0 0h24v24H0V0z"
38
- }), /*#__PURE__*/_react["default"].createElement("path", {
39
- d: "M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H3V5h18v14zM8 15c0-1.66 1.34-3 3-3 .35 0 .69.07 1 .18V6h5v2h-3v7.03c-.02 1.64-1.35 2.97-3 2.97-1.66 0-3-1.34-3-3z"
40
- }));
41
- var videoIcon = /*#__PURE__*/_react["default"].createElement("svg", {
42
- xmlns: "http://www.w3.org/2000/svg",
43
- width: "24",
44
- height: "24",
45
- viewBox: "0 0 24 24",
46
- fill: "currentColor"
47
- }, /*#__PURE__*/_react["default"].createElement("path", {
48
- d: "M18 4l2 4h-3l-2-4h-2l2 4h-3l-2-4H8l2 4H7L5 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4h-4z"
49
- }), /*#__PURE__*/_react["default"].createElement("path", {
50
- d: "M0 0h24v24H0z",
51
- fill: "none"
52
- }));
53
- var fileIcon = /*#__PURE__*/_react["default"].createElement("svg", {
54
- xmlns: "http://www.w3.org/2000/svg",
55
- width: "24",
56
- height: "24",
57
- viewBox: "0 0 24 24",
58
- fill: "currentColor"
59
- }, /*#__PURE__*/_react["default"].createElement("path", {
60
- fill: "none",
61
- d: "M0 0h24v24H0V0z"
62
- }), /*#__PURE__*/_react["default"].createElement("path", {
63
- d: "M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zM6 20V4h7v5h5v11H6z"
64
- }));
65
- var getFilePreview = function getFilePreview(file) {
66
- if (file.type.includes("video")) return videoIcon;else if (file.type.includes("audio")) return audioIcon;else if (file.type.includes("image")) return new Promise(function (resolve) {
67
- var reader = new FileReader();
68
- reader.readAsDataURL(file);
69
- reader.onload = function (e) {
70
- resolve(e.target.result);
71
- };
72
- });else return fileIcon;
29
+ var getFilePreview = /*#__PURE__*/function () {
30
+ var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(file) {
31
+ return _regenerator["default"].wrap(function _callee$(_context) {
32
+ while (1) switch (_context.prev = _context.next) {
33
+ case 0:
34
+ if (!file.type.includes("video")) {
35
+ _context.next = 4;
36
+ break;
37
+ }
38
+ return _context.abrupt("return", "filled_movie");
39
+ case 4:
40
+ if (!file.type.includes("audio")) {
41
+ _context.next = 8;
42
+ break;
43
+ }
44
+ return _context.abrupt("return", "music_video");
45
+ case 8:
46
+ if (!file.type.includes("image")) {
47
+ _context.next = 12;
48
+ break;
49
+ }
50
+ return _context.abrupt("return", new Promise(function (resolve) {
51
+ var reader = new FileReader();
52
+ reader.readAsDataURL(file);
53
+ reader.onload = function (e) {
54
+ resolve(e.target.result);
55
+ };
56
+ }));
57
+ case 12:
58
+ return _context.abrupt("return", "draft");
59
+ case 13:
60
+ case "end":
61
+ return _context.stop();
62
+ }
63
+ }, _callee);
64
+ }));
65
+ return function getFilePreview(_x) {
66
+ return _ref.apply(this, arguments);
67
+ };
68
+ }();
69
+ var isFileIncluded = function isFileIncluded(file, fileList) {
70
+ var fileListInfo = fileList.map(function (existingFile) {
71
+ return existingFile.file;
72
+ });
73
+ return fileListInfo.some(function (_ref2) {
74
+ var name = _ref2.name,
75
+ size = _ref2.size,
76
+ type = _ref2.type,
77
+ lastModified = _ref2.lastModified,
78
+ webkitRelativePath = _ref2.webkitRelativePath;
79
+ return name === file.file.name && size === file.file.size && type === file.file.type && lastModified === file.file.lastModified && webkitRelativePath === file.file.webkitRelativePath;
80
+ });
73
81
  };
74
- var DxcFileInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
75
- var _ref$name = _ref.name,
76
- name = _ref$name === void 0 ? "" : _ref$name,
77
- _ref$mode = _ref.mode,
78
- mode = _ref$mode === void 0 ? "file" : _ref$mode,
79
- _ref$label = _ref.label,
80
- label = _ref$label === void 0 ? "" : _ref$label,
81
- buttonLabel = _ref.buttonLabel,
82
- dropAreaLabel = _ref.dropAreaLabel,
83
- _ref$helperText = _ref.helperText,
84
- helperText = _ref$helperText === void 0 ? "" : _ref$helperText,
85
- accept = _ref.accept,
86
- minSize = _ref.minSize,
87
- maxSize = _ref.maxSize,
88
- _ref$showPreview = _ref.showPreview,
89
- showPreview = _ref$showPreview === void 0 ? false : _ref$showPreview,
90
- _ref$multiple = _ref.multiple,
91
- multiple = _ref$multiple === void 0 ? true : _ref$multiple,
92
- _ref$disabled = _ref.disabled,
93
- disabled = _ref$disabled === void 0 ? false : _ref$disabled,
94
- callbackFile = _ref.callbackFile,
95
- value = _ref.value,
96
- margin = _ref.margin,
97
- _ref$tabIndex = _ref.tabIndex,
98
- tabIndex = _ref$tabIndex === void 0 ? 0 : _ref$tabIndex;
82
+ var DxcFileInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref3, ref) {
83
+ var _ref3$name = _ref3.name,
84
+ name = _ref3$name === void 0 ? "" : _ref3$name,
85
+ _ref3$mode = _ref3.mode,
86
+ mode = _ref3$mode === void 0 ? "file" : _ref3$mode,
87
+ _ref3$label = _ref3.label,
88
+ label = _ref3$label === void 0 ? "" : _ref3$label,
89
+ buttonLabel = _ref3.buttonLabel,
90
+ dropAreaLabel = _ref3.dropAreaLabel,
91
+ _ref3$helperText = _ref3.helperText,
92
+ helperText = _ref3$helperText === void 0 ? "" : _ref3$helperText,
93
+ accept = _ref3.accept,
94
+ minSize = _ref3.minSize,
95
+ maxSize = _ref3.maxSize,
96
+ _ref3$showPreview = _ref3.showPreview,
97
+ showPreview = _ref3$showPreview === void 0 ? false : _ref3$showPreview,
98
+ _ref3$multiple = _ref3.multiple,
99
+ multiple = _ref3$multiple === void 0 ? true : _ref3$multiple,
100
+ _ref3$disabled = _ref3.disabled,
101
+ disabled = _ref3$disabled === void 0 ? false : _ref3$disabled,
102
+ callbackFile = _ref3.callbackFile,
103
+ value = _ref3.value,
104
+ margin = _ref3.margin,
105
+ _ref3$tabIndex = _ref3.tabIndex,
106
+ tabIndex = _ref3$tabIndex === void 0 ? 0 : _ref3$tabIndex;
99
107
  var _useState = (0, _react.useState)(false),
100
108
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
101
109
  isDragging = _useState2[0],
@@ -113,12 +121,12 @@ var DxcFileInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref
113
121
  if (file.size < minSize) return translatedLabels.fileInput.fileSizeGreaterThanErrorMessage;else if (file.size > maxSize) return translatedLabels.fileInput.fileSizeLessThanErrorMessage;
114
122
  };
115
123
  var getFilesToAdd = /*#__PURE__*/function () {
116
- var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(selectedFiles) {
124
+ var _ref4 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(selectedFiles) {
117
125
  var filesToAdd;
118
- return _regenerator["default"].wrap(function _callee$(_context) {
119
- while (1) switch (_context.prev = _context.next) {
126
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
127
+ while (1) switch (_context2.prev = _context2.next) {
120
128
  case 0:
121
- _context.next = 2;
129
+ _context2.next = 2;
122
130
  return Promise.all(selectedFiles.map(function (selectedFile) {
123
131
  return getFilePreview(selectedFile);
124
132
  })).then(function (previews) {
@@ -132,63 +140,40 @@ var DxcFileInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref
132
140
  });
133
141
  });
134
142
  case 2:
135
- filesToAdd = _context.sent;
136
- return _context.abrupt("return", filesToAdd);
143
+ filesToAdd = _context2.sent;
144
+ return _context2.abrupt("return", filesToAdd.filter(function (file) {
145
+ return !isFileIncluded(file, files);
146
+ }));
137
147
  case 4:
138
148
  case "end":
139
- return _context.stop();
149
+ return _context2.stop();
140
150
  }
141
- }, _callee);
151
+ }, _callee2);
142
152
  }));
143
- return function getFilesToAdd(_x) {
144
- return _ref2.apply(this, arguments);
153
+ return function getFilesToAdd(_x2) {
154
+ return _ref4.apply(this, arguments);
145
155
  };
146
156
  }();
147
157
  var addFile = /*#__PURE__*/function () {
148
- var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(selectedFiles) {
149
- var filesToAdd, finalFiles, fileToAdd;
150
- return _regenerator["default"].wrap(function _callee2$(_context2) {
151
- while (1) switch (_context2.prev = _context2.next) {
158
+ var _ref5 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(selectedFiles) {
159
+ var filesToAdd, finalFiles;
160
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
161
+ while (1) switch (_context3.prev = _context3.next) {
152
162
  case 0:
153
- if (!multiple) {
154
- _context2.next = 8;
155
- break;
156
- }
157
- _context2.next = 3;
158
- return getFilesToAdd(selectedFiles);
159
- case 3:
160
- filesToAdd = _context2.sent;
161
- finalFiles = [].concat((0, _toConsumableArray2["default"])(files), (0, _toConsumableArray2["default"])(filesToAdd));
163
+ _context3.next = 2;
164
+ return getFilesToAdd(multiple ? selectedFiles : selectedFiles.length === 1 ? selectedFiles : [selectedFiles[0]]);
165
+ case 2:
166
+ filesToAdd = _context3.sent;
167
+ finalFiles = multiple ? [].concat((0, _toConsumableArray2["default"])(files), (0, _toConsumableArray2["default"])(filesToAdd)) : filesToAdd;
162
168
  callbackFile === null || callbackFile === void 0 ? void 0 : callbackFile(finalFiles);
163
- _context2.next = 19;
164
- break;
165
- case 8:
166
- if (!(selectedFiles.length === 1)) {
167
- _context2.next = 14;
168
- break;
169
- }
170
- _context2.next = 11;
171
- return getFilesToAdd(selectedFiles);
172
- case 11:
173
- _context2.t0 = _context2.sent;
174
- _context2.next = 17;
175
- break;
176
- case 14:
177
- _context2.next = 16;
178
- return getFilesToAdd([selectedFiles[0]]);
179
- case 16:
180
- _context2.t0 = _context2.sent;
181
- case 17:
182
- fileToAdd = _context2.t0;
183
- callbackFile === null || callbackFile === void 0 ? void 0 : callbackFile(fileToAdd);
184
- case 19:
169
+ case 5:
185
170
  case "end":
186
- return _context2.stop();
171
+ return _context3.stop();
187
172
  }
188
- }, _callee2);
173
+ }, _callee3);
189
174
  }));
190
- return function addFile(_x2) {
191
- return _ref3.apply(this, arguments);
175
+ return function addFile(_x3) {
176
+ return _ref5.apply(this, arguments);
192
177
  };
193
178
  }();
194
179
  var selectFiles = function selectFiles(e) {
@@ -237,56 +222,56 @@ var DxcFileInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref
237
222
  };
238
223
  (0, _react.useEffect)(function () {
239
224
  var getFiles = /*#__PURE__*/function () {
240
- var _ref4 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
225
+ var _ref6 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
241
226
  var valueFiles;
242
- return _regenerator["default"].wrap(function _callee4$(_context4) {
243
- while (1) switch (_context4.prev = _context4.next) {
227
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
228
+ while (1) switch (_context5.prev = _context5.next) {
244
229
  case 0:
245
230
  if (!value) {
246
- _context4.next = 5;
231
+ _context5.next = 5;
247
232
  break;
248
233
  }
249
- _context4.next = 3;
234
+ _context5.next = 3;
250
235
  return Promise.all(value.map( /*#__PURE__*/function () {
251
- var _ref5 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(file) {
236
+ var _ref7 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(file) {
252
237
  var preview;
253
- return _regenerator["default"].wrap(function _callee3$(_context3) {
254
- while (1) switch (_context3.prev = _context3.next) {
238
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
239
+ while (1) switch (_context4.prev = _context4.next) {
255
240
  case 0:
256
241
  if (!file.preview) {
257
- _context3.next = 4;
242
+ _context4.next = 4;
258
243
  break;
259
244
  }
260
- return _context3.abrupt("return", file);
245
+ return _context4.abrupt("return", file);
261
246
  case 4:
262
- _context3.next = 6;
247
+ _context4.next = 6;
263
248
  return getFilePreview(file.file);
264
249
  case 6:
265
- preview = _context3.sent;
266
- return _context3.abrupt("return", _objectSpread(_objectSpread({}, file), {}, {
250
+ preview = _context4.sent;
251
+ return _context4.abrupt("return", _objectSpread(_objectSpread({}, file), {}, {
267
252
  preview: preview
268
253
  }));
269
254
  case 8:
270
255
  case "end":
271
- return _context3.stop();
256
+ return _context4.stop();
272
257
  }
273
- }, _callee3);
258
+ }, _callee4);
274
259
  }));
275
- return function (_x3) {
276
- return _ref5.apply(this, arguments);
260
+ return function (_x4) {
261
+ return _ref7.apply(this, arguments);
277
262
  };
278
263
  }()));
279
264
  case 3:
280
- valueFiles = _context4.sent;
265
+ valueFiles = _context5.sent;
281
266
  setFiles(valueFiles);
282
267
  case 5:
283
268
  case "end":
284
- return _context4.stop();
269
+ return _context5.stop();
285
270
  }
286
- }, _callee4);
271
+ }, _callee5);
287
272
  }));
288
273
  return function getFiles() {
289
- return _ref4.apply(this, arguments);
274
+ return _ref6.apply(this, arguments);
290
275
  };
291
276
  }();
292
277
  getFiles();