@dxc-technology/halstack-react 0.0.0-31c6b1f → 0.0.0-3216581

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 (178) hide show
  1. package/HalstackContext.d.ts +12 -0
  2. package/HalstackContext.js +295 -0
  3. package/accordion/Accordion.js +122 -103
  4. package/accordion/Accordion.stories.tsx +5 -6
  5. package/accordion/Accordion.test.js +9 -10
  6. package/accordion/types.d.ts +4 -4
  7. package/accordion-group/AccordionGroup.js +2 -21
  8. package/accordion-group/AccordionGroup.stories.tsx +27 -1
  9. package/accordion-group/AccordionGroup.test.js +20 -45
  10. package/accordion-group/types.d.ts +9 -3
  11. package/alert/Alert.js +4 -1
  12. package/badge/Badge.d.ts +1 -1
  13. package/badge/Badge.js +5 -3
  14. package/badge/types.d.ts +1 -0
  15. package/bleed/Bleed.js +1 -34
  16. package/bleed/Bleed.stories.tsx +94 -95
  17. package/bleed/types.d.ts +1 -1
  18. package/box/Box.js +22 -32
  19. package/bulleted-list/BulletedList.d.ts +7 -0
  20. package/bulleted-list/BulletedList.js +123 -0
  21. package/bulleted-list/BulletedList.stories.tsx +200 -0
  22. package/bulleted-list/types.d.ts +11 -0
  23. package/{list → bulleted-list}/types.js +0 -0
  24. package/button/Button.js +46 -62
  25. package/button/Button.stories.tsx +9 -0
  26. package/button/types.d.ts +7 -7
  27. package/card/Card.js +34 -36
  28. package/checkbox/Checkbox.js +88 -94
  29. package/checkbox/Checkbox.test.js +93 -16
  30. package/checkbox/types.d.ts +2 -2
  31. package/chip/types.d.ts +1 -1
  32. package/common/variables.js +232 -96
  33. package/date-input/DateInput.js +19 -16
  34. package/dialog/Dialog.js +52 -28
  35. package/dialog/Dialog.stories.tsx +1 -2
  36. package/dialog/Dialog.test.js +34 -4
  37. package/dialog/types.d.ts +2 -2
  38. package/dropdown/Dropdown.d.ts +1 -1
  39. package/dropdown/Dropdown.js +242 -246
  40. package/dropdown/Dropdown.stories.tsx +126 -63
  41. package/dropdown/Dropdown.test.js +510 -108
  42. package/dropdown/DropdownMenu.d.ts +4 -0
  43. package/dropdown/DropdownMenu.js +80 -0
  44. package/dropdown/DropdownMenuItem.d.ts +4 -0
  45. package/dropdown/DropdownMenuItem.js +92 -0
  46. package/dropdown/types.d.ts +25 -5
  47. package/file-input/FileInput.js +9 -6
  48. package/file-input/FileItem.js +7 -5
  49. package/flex/Flex.d.ts +4 -0
  50. package/flex/Flex.js +57 -0
  51. package/flex/Flex.stories.tsx +103 -0
  52. package/flex/types.d.ts +21 -0
  53. package/{radio → flex}/types.js +0 -0
  54. package/footer/Footer.js +7 -5
  55. package/footer/Footer.stories.tsx +8 -1
  56. package/footer/Icons.js +1 -1
  57. package/footer/types.d.ts +1 -1
  58. package/header/Header.js +80 -75
  59. package/header/Header.stories.tsx +4 -4
  60. package/header/Icons.js +2 -2
  61. package/header/types.d.ts +2 -2
  62. package/inset/Inset.js +1 -34
  63. package/inset/Inset.stories.tsx +36 -36
  64. package/inset/types.d.ts +1 -1
  65. package/layout/ApplicationLayout.d.ts +16 -6
  66. package/layout/ApplicationLayout.js +70 -117
  67. package/layout/ApplicationLayout.stories.tsx +84 -93
  68. package/layout/Icons.d.ts +5 -0
  69. package/layout/Icons.js +13 -2
  70. package/layout/SidenavContext.d.ts +5 -0
  71. package/layout/SidenavContext.js +19 -0
  72. package/layout/types.d.ts +18 -33
  73. package/link/Link.d.ts +3 -2
  74. package/link/Link.js +57 -70
  75. package/link/Link.stories.tsx +95 -53
  76. package/link/Link.test.js +7 -15
  77. package/link/types.d.ts +7 -23
  78. package/main.d.ts +7 -10
  79. package/main.js +43 -61
  80. package/number-input/types.d.ts +1 -1
  81. package/package.json +12 -11
  82. package/paginator/Paginator.js +17 -38
  83. package/paginator/Paginator.test.js +42 -0
  84. package/paragraph/Paragraph.d.ts +6 -0
  85. package/paragraph/Paragraph.js +38 -0
  86. package/paragraph/Paragraph.stories.tsx +44 -0
  87. package/password-input/PasswordInput.js +7 -4
  88. package/password-input/PasswordInput.test.js +1 -2
  89. package/password-input/types.d.ts +1 -1
  90. package/progress-bar/ProgressBar.d.ts +2 -2
  91. package/progress-bar/ProgressBar.js +57 -51
  92. package/progress-bar/ProgressBar.stories.jsx +13 -11
  93. package/progress-bar/ProgressBar.test.js +67 -22
  94. package/progress-bar/types.d.ts +3 -4
  95. package/quick-nav/QuickNav.js +74 -20
  96. package/quick-nav/QuickNav.stories.tsx +43 -16
  97. package/quick-nav/types.d.ts +4 -4
  98. package/radio-group/Radio.js +1 -1
  99. package/radio-group/RadioGroup.js +21 -20
  100. package/resultsetTable/ResultsetTable.test.js +42 -0
  101. package/select/Listbox.d.ts +1 -1
  102. package/select/Listbox.js +59 -8
  103. package/select/Select.js +78 -90
  104. package/select/Select.stories.tsx +145 -100
  105. package/select/Select.test.js +362 -244
  106. package/select/types.d.ts +2 -5
  107. package/sidenav/Sidenav.d.ts +6 -5
  108. package/sidenav/Sidenav.js +184 -52
  109. package/sidenav/Sidenav.stories.tsx +154 -156
  110. package/sidenav/Sidenav.test.js +25 -37
  111. package/sidenav/types.d.ts +50 -27
  112. package/slider/Slider.js +114 -93
  113. package/slider/Slider.stories.tsx +7 -1
  114. package/slider/Slider.test.js +121 -21
  115. package/slider/types.d.ts +2 -2
  116. package/spinner/Spinner.js +1 -1
  117. package/switch/Switch.d.ts +1 -1
  118. package/switch/Switch.js +113 -54
  119. package/switch/Switch.stories.tsx +8 -30
  120. package/switch/Switch.test.js +122 -8
  121. package/switch/types.d.ts +3 -4
  122. package/tabs/Tab.d.ts +4 -0
  123. package/tabs/Tab.js +135 -0
  124. package/tabs/Tabs.js +360 -104
  125. package/tabs/Tabs.stories.tsx +74 -6
  126. package/tabs/Tabs.test.js +217 -6
  127. package/tabs/types.d.ts +15 -5
  128. package/tabs-nav/NavTabs.d.ts +8 -0
  129. package/tabs-nav/NavTabs.js +125 -0
  130. package/tabs-nav/NavTabs.stories.tsx +170 -0
  131. package/tabs-nav/NavTabs.test.js +82 -0
  132. package/tabs-nav/Tab.d.ts +4 -0
  133. package/tabs-nav/Tab.js +130 -0
  134. package/tabs-nav/types.d.ts +53 -0
  135. package/{row → tabs-nav}/types.js +0 -0
  136. package/tag/types.d.ts +1 -1
  137. package/text-input/Suggestion.d.ts +4 -0
  138. package/text-input/Suggestion.js +55 -0
  139. package/text-input/TextInput.js +58 -93
  140. package/text-input/TextInput.stories.tsx +1 -2
  141. package/text-input/TextInput.test.js +1 -1
  142. package/text-input/types.d.ts +14 -2
  143. package/textarea/Textarea.js +10 -19
  144. package/textarea/types.d.ts +1 -1
  145. package/toggle-group/types.d.ts +1 -1
  146. package/typography/Typography.d.ts +4 -0
  147. package/typography/Typography.js +131 -0
  148. package/typography/Typography.stories.tsx +198 -0
  149. package/typography/types.d.ts +18 -0
  150. package/{stack → typography}/types.js +0 -0
  151. package/useTheme.js +2 -2
  152. package/useTranslatedLabels.d.ts +2 -0
  153. package/useTranslatedLabels.js +20 -0
  154. package/wizard/Wizard.js +36 -41
  155. package/wizard/Wizard.stories.tsx +20 -1
  156. package/wizard/types.d.ts +5 -4
  157. package/ThemeContext.d.ts +0 -10
  158. package/ThemeContext.js +0 -243
  159. package/list/List.d.ts +0 -4
  160. package/list/List.js +0 -47
  161. package/list/List.stories.tsx +0 -95
  162. package/list/types.d.ts +0 -7
  163. package/radio/Radio.d.ts +0 -4
  164. package/radio/Radio.js +0 -173
  165. package/radio/Radio.stories.tsx +0 -192
  166. package/radio/Radio.test.js +0 -71
  167. package/radio/types.d.ts +0 -54
  168. package/row/Row.d.ts +0 -3
  169. package/row/Row.js +0 -127
  170. package/row/Row.stories.tsx +0 -237
  171. package/row/types.d.ts +0 -28
  172. package/stack/Stack.d.ts +0 -3
  173. package/stack/Stack.js +0 -97
  174. package/stack/Stack.stories.tsx +0 -164
  175. package/stack/types.d.ts +0 -24
  176. package/text/Text.d.ts +0 -7
  177. package/text/Text.js +0 -30
  178. package/text/Text.stories.tsx +0 -19
@@ -19,8 +19,6 @@ var _react = _interopRequireWildcard(require("react"));
19
19
 
20
20
  var _styledComponents = _interopRequireWildcard(require("styled-components"));
21
21
 
22
- var _Checkbox = _interopRequireDefault(require("@material-ui/core/Checkbox"));
23
-
24
22
  var _variables = require("../common/variables.js");
25
23
 
26
24
  var _utils = require("../common/utils.js");
@@ -29,14 +27,25 @@ var _uuid = require("uuid");
29
27
 
30
28
  var _useTheme = _interopRequireDefault(require("../useTheme"));
31
29
 
30
+ var _useTranslatedLabels = _interopRequireDefault(require("../useTranslatedLabels"));
31
+
32
32
  var _BackgroundColorContext = _interopRequireDefault(require("../BackgroundColorContext"));
33
33
 
34
- var _templateObject, _templateObject2, _templateObject3;
34
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
35
35
 
36
36
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
37
37
 
38
38
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
39
39
 
40
+ var checkedIcon = /*#__PURE__*/_react["default"].createElement("svg", {
41
+ fill: "currentColor",
42
+ focusable: "false",
43
+ "aria-hidden": "true",
44
+ viewBox: "0 0 24 24"
45
+ }, /*#__PURE__*/_react["default"].createElement("path", {
46
+ d: "M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"
47
+ }));
48
+
40
49
  var DxcCheckbox = function DxcCheckbox(_ref) {
41
50
  var checked = _ref.checked,
42
51
  _ref$defaultChecked = _ref.defaultChecked,
@@ -59,87 +68,78 @@ var DxcCheckbox = function DxcCheckbox(_ref) {
59
68
  _ref$tabIndex = _ref.tabIndex,
60
69
  tabIndex = _ref$tabIndex === void 0 ? 0 : _ref$tabIndex;
61
70
 
62
- var _useState = (0, _react.useState)("checkbox-".concat((0, _uuid.v4)())),
71
+ var _useState = (0, _react.useState)("label-checkbox-".concat((0, _uuid.v4)())),
63
72
  _useState2 = (0, _slicedToArray2["default"])(_useState, 1),
64
- switchId = _useState2[0];
65
-
66
- var labelId = "label-".concat(switchId);
73
+ labelId = _useState2[0];
67
74
 
68
75
  var _useState3 = (0, _react.useState)(defaultChecked),
69
76
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
70
77
  innerChecked = _useState4[0],
71
78
  setInnerChecked = _useState4[1];
72
79
 
73
- var _useState5 = (0, _react.useState)(false),
74
- _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
75
- isLabelHovered = _useState6[0],
76
- setIsLabelHovered = _useState6[1];
77
-
80
+ var checkboxRef = (0, _react.useRef)(null);
78
81
  var colorsTheme = (0, _useTheme["default"])();
79
82
  var backgroundType = (0, _react.useContext)(_BackgroundColorContext["default"]);
83
+ var translatedLabels = (0, _useTranslatedLabels["default"])();
80
84
 
81
- var handlerCheckboxChange = function handlerCheckboxChange(checkboxValue) {
82
- if (checked === undefined) {
83
- var isChecked = checkboxValue.target.checked === undefined ? !innerChecked : checkboxValue.target.checked;
84
- setInnerChecked(isChecked);
85
-
86
- if (typeof onChange === "function") {
87
- onChange(isChecked);
88
- }
89
- } else {
90
- if (typeof onChange === "function") {
91
- onChange(!checked);
92
- }
93
- }
94
- };
85
+ var handleCheckboxChange = function handleCheckboxChange() {
86
+ var _checkboxRef$current;
95
87
 
96
- var handleLabelHover = function handleLabelHover() {
97
- setIsLabelHovered(!isLabelHovered);
88
+ if (document.activeElement !== (checkboxRef === null || checkboxRef === void 0 ? void 0 : checkboxRef.current) && tabIndex > -1) checkboxRef === null || checkboxRef === void 0 ? void 0 : (_checkboxRef$current = checkboxRef.current) === null || _checkboxRef$current === void 0 ? void 0 : _checkboxRef$current.focus();
89
+ var newChecked = checked !== null && checked !== void 0 ? checked : innerChecked;
90
+ checked !== null && checked !== void 0 ? checked : setInnerChecked(function (innerChecked) {
91
+ return !innerChecked;
92
+ });
93
+ onChange === null || onChange === void 0 ? void 0 : onChange(!newChecked);
98
94
  };
99
95
 
100
- var labelComponent = /*#__PURE__*/_react["default"].createElement(LabelContainer, {
101
- id: labelId,
102
- labelPosition: labelPosition,
103
- onClick: disabled === true ? function () {} : handlerCheckboxChange,
104
- disabled: disabled,
105
- className: "labelContainer",
106
- backgroundType: backgroundType,
107
- onMouseOver: handleLabelHover,
108
- onMouseOut: handleLabelHover
109
- }, labelPosition === "before" ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, label, " ", optional && /*#__PURE__*/_react["default"].createElement("span", null, "(Optional)")) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, optional && /*#__PURE__*/_react["default"].createElement("span", null, "(Optional)"), " ", label));
96
+ var handleKeyboard = function handleKeyboard(event) {
97
+ switch (event.key) {
98
+ case " ":
99
+ case "Space":
100
+ event.preventDefault();
101
+ handleCheckboxChange();
102
+ }
103
+ };
110
104
 
111
105
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
112
106
  theme: colorsTheme.checkbox
113
- }, /*#__PURE__*/_react["default"].createElement(CheckboxContainer, {
114
- id: name,
115
- brightness: _variables.componentTokens,
116
- label: label,
117
- labelPosition: labelPosition,
107
+ }, /*#__PURE__*/_react["default"].createElement(MainContainer, {
118
108
  disabled: disabled,
109
+ onClick: disabled ? undefined : handleCheckboxChange,
119
110
  margin: margin,
120
111
  size: size,
121
- backgroundType: backgroundType,
122
- isLabelHovered: isLabelHovered
123
- }, label && labelPosition === "before" && labelComponent, /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
124
112
  checked: checked !== null && checked !== void 0 ? checked : innerChecked,
125
- inputProps: {
126
- name: name,
127
- "aria-labelledby": labelId,
128
- role: "checkbox",
129
- "aria-checked": checked !== null && checked !== void 0 ? checked : innerChecked
130
- },
131
- onChange: handlerCheckboxChange,
132
- value: value,
113
+ backgroundType: backgroundType
114
+ }, label && labelPosition === "before" && /*#__PURE__*/_react["default"].createElement(LabelContainer, {
115
+ id: labelId,
133
116
  disabled: disabled,
134
- disableRipple: true,
135
- className: "test",
136
- tabIndex: tabIndex
137
- }), /*#__PURE__*/_react["default"].createElement(CheckboxBlackBack, {
138
- labelPosition: labelPosition,
117
+ backgroundType: backgroundType
118
+ }, label, optional && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, " ".concat(translatedLabels.formFields.optionalLabel))), /*#__PURE__*/_react["default"].createElement(ValueInput, {
119
+ type: "checkbox",
120
+ checked: checked !== null && checked !== void 0 ? checked : innerChecked,
121
+ name: name,
122
+ "aria-hidden": "true",
123
+ value: value,
139
124
  disabled: disabled,
125
+ readOnly: true
126
+ }), /*#__PURE__*/_react["default"].createElement(CheckboxContainer, null, /*#__PURE__*/_react["default"].createElement(Checkbox, {
127
+ onKeyDown: handleKeyboard,
128
+ role: "checkbox",
129
+ tabIndex: disabled ? -1 : tabIndex,
130
+ "aria-checked": checked !== null && checked !== void 0 ? checked : innerChecked,
131
+ "aria-disabled": disabled,
132
+ "aria-required": !disabled && !optional,
133
+ "aria-labelledby": labelId,
134
+ backgroundType: backgroundType,
140
135
  checked: checked !== null && checked !== void 0 ? checked : innerChecked,
136
+ disabled: disabled,
137
+ ref: checkboxRef
138
+ }, (checked !== null && checked !== void 0 ? checked : innerChecked) && checkedIcon)), label && labelPosition === "after" && /*#__PURE__*/_react["default"].createElement(LabelContainer, {
139
+ id: labelId,
140
+ disabled: disabled,
141
141
  backgroundType: backgroundType
142
- }), label && labelPosition === "after" && labelComponent));
142
+ }, optional && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, "".concat(translatedLabels.formFields.optionalLabel, " ")), label)));
143
143
  };
144
144
 
145
145
  var sizes = {
@@ -182,15 +182,21 @@ var getNotDisabledColor = function getNotDisabledColor(props, element) {
182
182
  case "background":
183
183
  return props.backgroundType && props.backgroundType === "dark" ? props.theme.backgroundColorCheckedOnDark : props.theme.backgroundColorChecked;
184
184
 
185
+ case "hoverBackground":
186
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.hoverBackgroundColorCheckedOnDark : props.theme.hoverBackgroundColorChecked;
187
+
185
188
  case "border":
186
189
  return props.backgroundType && props.backgroundType === "dark" ? props.theme.borderColorOnDark : props.theme.borderColor;
187
190
 
191
+ case "hoverBorder":
192
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.hoverBorderColorOnDark : props.theme.hoverBorderColor;
193
+
188
194
  case "label":
189
195
  return props.backgroundType && props.backgroundType === "dark" ? props.theme.fontColorOnDark : props.theme.fontColor;
190
196
  }
191
197
  };
192
198
 
193
- var LabelContainer = _styledComponents["default"].span(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-weight: ", ";\n cursor: ", ";\n"])), function (props) {
199
+ var LabelContainer = _styledComponents["default"].span(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-weight: ", ";\n"])), function (props) {
194
200
  return props.disabled ? getDisabledColor(props, "label") : getNotDisabledColor(props, "label");
195
201
  }, function (props) {
196
202
  return props.theme.fontFamily;
@@ -198,11 +204,25 @@ var LabelContainer = _styledComponents["default"].span(_templateObject || (_temp
198
204
  return props.theme.fontSize;
199
205
  }, function (props) {
200
206
  return props.theme.fontWeight;
207
+ });
208
+
209
+ var ValueInput = _styledComponents["default"].input(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: none;\n"])));
210
+
211
+ var CheckboxContainer = _styledComponents["default"].span(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n justify-content: center;\n height: 24px;\n width: 24px;\n"])));
212
+
213
+ var Checkbox = _styledComponents["default"].span(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 18px;\n width: 18px;\n border-radius: 2px;\n border: solid 2px\n ", ";\n background-color: ", ";\n color: ", ";\n\n &:focus {\n outline: 2px solid\n ", ";\n outline-offset: 2px;\n }\n svg {\n position: absolute;\n width: 22px;\n height: 22px;\n }\n"])), function (props) {
214
+ return props.disabled ? getDisabledColor(props, "border") : getNotDisabledColor(props, "border");
201
215
  }, function (props) {
202
- return props.disabled ? "not-allowed" : "pointer";
216
+ return props.checked ? props.disabled ? getDisabledColor(props, "check") : getNotDisabledColor(props, "check") : "transparent";
217
+ }, function (props) {
218
+ return props.disabled ? getDisabledColor(props, "background") : getNotDisabledColor(props, "background");
219
+ }, function (props) {
220
+ return props.backgroundType === "dark" ? props.theme.focusColorOnDark : props.theme.focusColor;
203
221
  });
204
222
 
205
- var CheckboxContainer = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n width: ", ";\n display: inline-flex;\n align-items: center;\n cursor: ", ";\n position: relative;\n .MuiCheckbox-colorSecondary {\n .MuiIconButton-label {\n & > .MuiSvgIcon-root {\n color: ", ";\n }\n }\n &.Mui-disabled {\n .MuiIconButton-label {\n & > .MuiSvgIcon-root {\n color: ", ";\n opacity: 0.34;\n }\n }\n }\n &.Mui-checked {\n .MuiIconButton-label {\n & > .MuiSvgIcon-root {\n color: ", ";\n }\n }\n\n &:hover {\n background-color: transparent;\n .MuiIconButton-label {\n & > .MuiSvgIcon-root {\n background-color: transparent;\n color: ", ";\n }\n }\n }\n }\n .MuiIconButton-label {\n & > .MuiSvgIcon-root {\n width: 24px;\n height: 24px;\n }\n }\n }\n\n .MuiIconButton-colorSecondary {\n &:hover {\n background-color: transparent;\n }\n }\n .MuiButtonBase-root {\n &:hover {\n .MuiIconButton-label {\n & > .MuiSvgIcon-root {\n color: ", ";\n }\n }\n }\n\n &.Mui-focusVisible {\n .MuiIconButton-label {\n border-radius: 2px;\n outline: 2px solid\n ", ";\n outline-offset: -1px;\n }\n }\n z-index: 1;\n margin-left: ", ";\n margin-right: ", ";\n padding: 0px;\n left: ", ";\n right: ", ";\n }\n"])), function (props) {
223
+ var MainContainer = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n width: ", ";\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n\n display: inline-flex;\n align-items: center;\n cursor: ", ";\n gap: ", ";\n\n &:hover ", " {\n border: 2px solid\n ", ";\n background-color: ", ";\n color: ", ";\n }\n"])), function (props) {
224
+ return calculateWidth(props.margin, props.size);
225
+ }, function (props) {
206
226
  return props.margin && (0, _typeof2["default"])(props.margin) !== "object" ? _variables.spaces[props.margin] : "0px";
207
227
  }, function (props) {
208
228
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.top ? _variables.spaces[props.margin.top] : "";
@@ -212,42 +232,16 @@ var CheckboxContainer = _styledComponents["default"].span(_templateObject2 || (_
212
232
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.bottom ? _variables.spaces[props.margin.bottom] : "";
213
233
  }, function (props) {
214
234
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.left ? _variables.spaces[props.margin.left] : "";
215
- }, function (props) {
216
- return calculateWidth(props.margin, props.size);
217
235
  }, function (props) {
218
236
  return props.disabled ? "not-allowed" : "pointer";
219
237
  }, function (props) {
220
- return props.isLabelHovered ? props.backgroundType === "dark" ? props.theme.hoverBorderColorOnDark : props.theme.hoverBorderColor : getNotDisabledColor(props, "border");
221
- }, function (props) {
222
- return getDisabledColor(props, "border");
223
- }, function (props) {
224
- return props.disabled ? getDisabledColor(props, "background") : getNotDisabledColor(props, "background");
225
- }, function (props) {
226
- return props.backgroundType === "dark" ? props.theme.hoverBackgroundColorCheckedOnDark : props.theme.hoverBackgroundColorChecked;
227
- }, function (props) {
228
- return props.backgroundType === "dark" ? props.theme.hoverBorderColorOnDark : props.theme.hoverBorderColor;
229
- }, function (props) {
230
- return props.backgroundType === "dark" ? props.theme.focusColorOnDark : props.theme.focusColor;
231
- }, function (props) {
232
- return props.labelPosition === "before" && props.label ? props.theme.checkLabelSpacing : "0";
233
- }, function (props) {
234
- return props.labelPosition === "after" && props.label ? props.theme.checkLabelSpacing : "0";
235
- }, function (props) {
236
- return props.labelPosition === "before" ? "unset" : "1px";
237
- }, function (props) {
238
- return props.labelPosition === "before" ? "1px" : "unset";
239
- });
240
-
241
- var CheckboxBlackBack = _styledComponents["default"].span(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n width: 16px;\n height: 16px;\n position: absolute;\n left: ", ";\n right: ", ";\n z-index: 0;\n margin-left: ", ";\n margin-right: ", ";\n"])), function (props) {
242
- return !props.checked ? "transparent" : props.disabled ? getDisabledColor(props, "check") : getNotDisabledColor(props, "check");
243
- }, function (props) {
244
- return props.labelPosition === "before" ? "unset" : "5px";
245
- }, function (props) {
246
- return props.labelPosition === "before" ? "5px" : "unset";
238
+ return props.theme.checkLabelSpacing;
239
+ }, Checkbox, function (props) {
240
+ return props.disabled ? getDisabledColor(props, "border") : getNotDisabledColor(props, "hoverBorder");
247
241
  }, function (props) {
248
- return props.labelPosition === "after" ? "0px" : "";
242
+ return props.checked ? props.disabled ? getDisabledColor(props, "check") : getNotDisabledColor(props, "check") : "transparent";
249
243
  }, function (props) {
250
- return props.labelPosition === "before" ? "0px" : "";
244
+ return props.disabled ? getDisabledColor(props, "background") : getNotDisabledColor(props, "hoverBackground");
251
245
  });
252
246
 
253
247
  var _default = DxcCheckbox;
@@ -6,25 +6,39 @@ var _react = _interopRequireDefault(require("react"));
6
6
 
7
7
  var _react2 = require("@testing-library/react");
8
8
 
9
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
10
+
9
11
  var _Checkbox = _interopRequireDefault(require("./Checkbox"));
10
12
 
11
13
  describe("Checkbox component tests", function () {
12
- test("Checkbox renders with correct text", function () {
14
+ test("Checkbox renders with correct aria-labelledby and aria-required", function () {
13
15
  var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
14
16
  label: "Checkbox"
15
17
  })),
16
- getByText = _render.getByText;
18
+ getByText = _render.getByText,
19
+ getByRole = _render.getByRole;
17
20
 
18
- expect(getByText("Checkbox")).toBeTruthy();
21
+ var labelId = getByText("Checkbox").getAttribute("id");
22
+ expect(getByRole("checkbox").getAttribute("aria-labelledby")).toBe(labelId);
23
+ expect(getByRole("checkbox").getAttribute("aria-required")).toBe("true");
24
+ });
25
+ test("Optional checkbox renders with correct aria-required", function () {
26
+ var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
27
+ label: "Checkbox",
28
+ optional: true
29
+ })),
30
+ getByRole = _render2.getByRole;
31
+
32
+ expect(getByRole("checkbox").getAttribute("aria-required")).toBe("false");
19
33
  });
20
34
  test("Calls correct function on click", function () {
21
35
  var onChange = jest.fn();
22
36
 
23
- var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
37
+ var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
24
38
  label: "Checkbox",
25
39
  onChange: onChange
26
40
  })),
27
- getByText = _render2.getByText;
41
+ getByText = _render3.getByText;
28
42
 
29
43
  _react2.fireEvent.click(getByText("Checkbox"));
30
44
 
@@ -34,45 +48,108 @@ describe("Checkbox component tests", function () {
34
48
  var onChange = jest.fn();
35
49
  var component = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
36
50
  label: "Checkbox",
37
- onChange: onChange
51
+ onChange: onChange,
52
+ name: "test"
38
53
  }));
39
54
  var visibleCheckbox = component.getByText("Checkbox");
40
55
  var input = component.getByRole("checkbox");
41
- expect(input.checked).toBe(false);
56
+ var submitInput = component.container.querySelector("input[name=\"test\"]");
57
+ expect(input.getAttribute("aria-checked")).toBe("false");
58
+ expect(submitInput.checked).toBe(false);
42
59
 
43
60
  _react2.fireEvent.click(visibleCheckbox);
44
61
 
45
62
  expect(onChange).toHaveBeenCalled();
46
63
  expect(onChange).toHaveBeenCalledWith(true);
47
- expect(input.checked).toBe(true);
64
+ expect(input.getAttribute("aria-checked")).toBe("true");
65
+ expect(submitInput.checked).toBe(true);
48
66
  });
49
67
  test("Controlled checkbox", function () {
50
68
  var onChange = jest.fn();
51
69
  var component = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
52
70
  label: "Checkbox",
53
71
  checked: false,
54
- onChange: onChange
72
+ onChange: onChange,
73
+ name: "test"
55
74
  }));
56
75
  var input = component.getByRole("checkbox");
57
76
  var visibleCheckbox = component.getByText("Checkbox");
77
+ var submitInput = component.container.querySelector("input[name=\"test\"]");
58
78
 
59
79
  _react2.fireEvent.click(visibleCheckbox);
60
80
 
61
81
  expect(onChange).toHaveBeenCalled();
62
82
  expect(onChange).toHaveBeenCalledWith(true);
63
- expect(input.checked).toBe(false);
83
+ expect(input.getAttribute("aria-checked")).toBe("false");
84
+ expect(submitInput.checked).toBe(false);
64
85
  });
65
86
  test("Renders with correct initial value and initial state when it is uncontrolled", function () {
66
- var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
87
+ var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
67
88
  label: "Default label",
68
89
  defaultChecked: true,
69
- value: "test-defaultChecked"
90
+ value: "test-defaultChecked",
91
+ name: "test"
92
+ })),
93
+ getByRole = _render4.getByRole,
94
+ container = _render4.container;
95
+
96
+ var checkbox = getByRole("checkbox");
97
+ var submitInput = container.querySelector("input[name=\"test\"]");
98
+ expect(submitInput.value).toBe("test-defaultChecked");
99
+ expect(checkbox.getAttribute("aria-checked")).toBe("true");
100
+ expect(submitInput.checked).toBe(true);
101
+ });
102
+ test("Test disable keyboard and mouse interactions", function () {
103
+ var onChange = jest.fn();
104
+
105
+ var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
106
+ label: "Checkbox",
107
+ onChange: onChange,
108
+ disabled: true,
109
+ name: "test"
70
110
  })),
71
- getByRole = _render3.getByRole;
111
+ getByRole = _render5.getByRole,
112
+ getByText = _render5.getByText,
113
+ container = _render5.container;
72
114
 
73
115
  var input = getByRole("checkbox");
74
- expect(input.checked).toBe(true);
75
- expect(input.value).toBe("test-defaultChecked");
76
- expect(input.getAttribute("aria-checked")).toBe("true");
116
+ var visibleCheckbox = getByText("Checkbox");
117
+ var submitInput = container.querySelector("input[name=\"test\"]");
118
+
119
+ _react2.fireEvent.click(visibleCheckbox);
120
+
121
+ expect(onChange).toHaveBeenCalledTimes(0);
122
+ expect(input.getAttribute("aria-checked")).toBe("false");
123
+ expect(input.getAttribute("aria-disabled")).toBe("true");
124
+ expect(submitInput.checked).toBe(false);
125
+
126
+ _userEvent["default"].tab();
127
+
128
+ expect(document.activeElement === input).toBeFalsy();
129
+ });
130
+ test("Test keyboard interactions", function () {
131
+ var onChange = jest.fn();
132
+
133
+ var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
134
+ label: "Checkbox",
135
+ name: "test",
136
+ onChange: onChange
137
+ })),
138
+ getByRole = _render6.getByRole;
139
+
140
+ var checkbox = getByRole("checkbox");
141
+
142
+ _userEvent["default"].tab();
143
+
144
+ expect(document.activeElement === checkbox).toBeTruthy();
145
+
146
+ _react2.fireEvent.keyDown(checkbox, {
147
+ key: " ",
148
+ code: "Space",
149
+ keyCode: 32,
150
+ charCode: 32
151
+ });
152
+
153
+ expect(onChange).toHaveBeenCalledWith(true);
77
154
  });
78
155
  });
@@ -1,5 +1,5 @@
1
- declare type Space = "xxsmall" | "xsmall" | "small" | "medium" | "large" | "xlarge" | "xxlarge";
2
- declare type Margin = {
1
+ export declare type Space = "xxsmall" | "xsmall" | "small" | "medium" | "large" | "xlarge" | "xxlarge";
2
+ export declare type Margin = {
3
3
  top?: Space;
4
4
  bottom?: Space;
5
5
  left?: Space;
package/chip/types.d.ts CHANGED
@@ -6,7 +6,7 @@ declare type Margin = {
6
6
  left?: Space;
7
7
  right?: Space;
8
8
  };
9
- declare type SVG = React.SVGProps<SVGSVGElement>;
9
+ declare type SVG = React.ReactNode & React.SVGProps<SVGSVGElement>;
10
10
  declare type Props = {
11
11
  /**
12
12
  * Text to be placed on the chip.