@dxc-technology/halstack-react 0.0.0-2b773b3 → 0.0.0-2bca710

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 (290) hide show
  1. package/BackgroundColorContext.d.ts +2 -2
  2. package/BackgroundColorContext.js +1 -1
  3. package/HalstackContext.d.ts +1348 -0
  4. package/HalstackContext.js +335 -0
  5. package/README.md +47 -0
  6. package/accordion/Accordion.d.ts +1 -1
  7. package/accordion/Accordion.js +108 -134
  8. package/accordion/Accordion.stories.tsx +108 -118
  9. package/accordion/Accordion.test.js +10 -11
  10. package/accordion/types.d.ts +1 -12
  11. package/accordion-group/AccordionGroup.d.ts +4 -3
  12. package/accordion-group/AccordionGroup.js +25 -65
  13. package/accordion-group/AccordionGroup.stories.tsx +93 -66
  14. package/accordion-group/AccordionGroup.test.js +27 -62
  15. package/accordion-group/AccordionGroupAccordion.d.ts +4 -0
  16. package/accordion-group/AccordionGroupAccordion.js +43 -0
  17. package/accordion-group/types.d.ts +7 -12
  18. package/alert/Alert.js +9 -10
  19. package/alert/Alert.stories.tsx +28 -0
  20. package/alert/Alert.test.js +1 -1
  21. package/badge/Badge.d.ts +1 -1
  22. package/badge/Badge.js +5 -3
  23. package/badge/types.d.ts +1 -0
  24. package/bleed/Bleed.js +1 -34
  25. package/bleed/Bleed.stories.tsx +95 -95
  26. package/bleed/types.d.ts +1 -1
  27. package/box/Box.d.ts +1 -1
  28. package/box/Box.js +19 -48
  29. package/box/Box.stories.tsx +38 -51
  30. package/box/Box.test.js +1 -1
  31. package/box/types.d.ts +0 -11
  32. package/bulleted-list/BulletedList.d.ts +7 -0
  33. package/bulleted-list/BulletedList.js +125 -0
  34. package/bulleted-list/BulletedList.stories.tsx +206 -0
  35. package/bulleted-list/types.d.ts +38 -0
  36. package/button/Button.d.ts +1 -1
  37. package/button/Button.js +44 -71
  38. package/button/Button.stories.tsx +159 -8
  39. package/button/Button.test.js +12 -1
  40. package/button/types.d.ts +9 -5
  41. package/card/Card.d.ts +1 -1
  42. package/card/Card.js +37 -58
  43. package/card/Card.stories.tsx +12 -42
  44. package/card/Card.test.js +1 -1
  45. package/card/types.d.ts +1 -6
  46. package/checkbox/Checkbox.d.ts +2 -2
  47. package/checkbox/Checkbox.js +104 -101
  48. package/checkbox/Checkbox.stories.tsx +198 -130
  49. package/checkbox/Checkbox.test.js +94 -17
  50. package/checkbox/types.d.ts +7 -3
  51. package/chip/Chip.js +28 -49
  52. package/chip/Chip.stories.tsx +121 -26
  53. package/chip/Chip.test.js +3 -5
  54. package/chip/types.d.ts +1 -1
  55. package/common/OpenSans.css +68 -80
  56. package/common/coreTokens.d.ts +146 -0
  57. package/common/coreTokens.js +167 -0
  58. package/common/utils.d.ts +1 -0
  59. package/common/utils.js +4 -4
  60. package/common/variables.d.ts +1494 -0
  61. package/common/variables.js +1111 -1111
  62. package/date-input/Calendar.d.ts +4 -0
  63. package/date-input/Calendar.js +258 -0
  64. package/date-input/DateInput.js +140 -238
  65. package/date-input/DateInput.stories.tsx +209 -33
  66. package/date-input/DateInput.test.js +519 -149
  67. package/date-input/DatePicker.d.ts +4 -0
  68. package/date-input/DatePicker.js +146 -0
  69. package/date-input/Icons.d.ts +6 -0
  70. package/date-input/Icons.js +75 -0
  71. package/date-input/YearPicker.d.ts +4 -0
  72. package/date-input/YearPicker.js +126 -0
  73. package/date-input/types.d.ts +55 -0
  74. package/dialog/Dialog.d.ts +1 -1
  75. package/dialog/Dialog.js +68 -103
  76. package/dialog/Dialog.stories.tsx +154 -171
  77. package/dialog/Dialog.test.js +334 -5
  78. package/dialog/types.d.ts +0 -12
  79. package/dropdown/Dropdown.d.ts +1 -1
  80. package/dropdown/Dropdown.js +246 -253
  81. package/dropdown/Dropdown.stories.tsx +245 -56
  82. package/dropdown/Dropdown.test.js +507 -110
  83. package/dropdown/DropdownMenu.d.ts +4 -0
  84. package/dropdown/DropdownMenu.js +74 -0
  85. package/dropdown/DropdownMenuItem.d.ts +4 -0
  86. package/dropdown/DropdownMenuItem.js +79 -0
  87. package/dropdown/types.d.ts +23 -3
  88. package/file-input/FileInput.d.ts +2 -2
  89. package/file-input/FileInput.js +180 -223
  90. package/file-input/FileInput.stories.tsx +122 -11
  91. package/file-input/FileInput.test.js +14 -14
  92. package/file-input/FileItem.d.ts +4 -14
  93. package/file-input/FileItem.js +44 -66
  94. package/file-input/types.d.ts +18 -1
  95. package/flex/Flex.d.ts +4 -0
  96. package/flex/Flex.js +71 -0
  97. package/flex/Flex.stories.tsx +112 -0
  98. package/flex/types.d.ts +97 -0
  99. package/footer/Footer.d.ts +1 -1
  100. package/footer/Footer.js +49 -142
  101. package/footer/Footer.stories.tsx +41 -19
  102. package/footer/Footer.test.js +16 -26
  103. package/footer/Icons.js +1 -1
  104. package/footer/types.d.ts +11 -12
  105. package/grid/Grid.d.ts +7 -0
  106. package/grid/Grid.js +91 -0
  107. package/grid/Grid.stories.tsx +219 -0
  108. package/grid/types.d.ts +115 -0
  109. package/header/Header.d.ts +4 -3
  110. package/header/Header.js +102 -150
  111. package/header/Header.stories.tsx +152 -63
  112. package/header/Header.test.js +20 -4
  113. package/header/Icons.js +2 -2
  114. package/header/types.d.ts +0 -13
  115. package/heading/Heading.js +1 -1
  116. package/heading/Heading.test.js +1 -1
  117. package/image/Image.d.ts +4 -0
  118. package/image/Image.js +85 -0
  119. package/image/Image.stories.tsx +127 -0
  120. package/image/types.d.ts +72 -0
  121. package/inset/Inset.js +1 -34
  122. package/inset/Inset.stories.tsx +37 -36
  123. package/inset/types.d.ts +1 -1
  124. package/layout/ApplicationLayout.d.ts +16 -6
  125. package/layout/ApplicationLayout.js +81 -138
  126. package/layout/ApplicationLayout.stories.tsx +85 -94
  127. package/layout/Icons.d.ts +8 -0
  128. package/layout/Icons.js +52 -45
  129. package/layout/SidenavContext.d.ts +5 -0
  130. package/layout/SidenavContext.js +19 -0
  131. package/layout/types.d.ts +19 -35
  132. package/link/Link.d.ts +3 -2
  133. package/link/Link.js +60 -77
  134. package/link/Link.stories.tsx +155 -53
  135. package/link/Link.test.js +9 -19
  136. package/link/types.d.ts +5 -21
  137. package/main.d.ts +9 -10
  138. package/main.js +55 -57
  139. package/nav-tabs/NavTabs.d.ts +8 -0
  140. package/nav-tabs/NavTabs.js +122 -0
  141. package/nav-tabs/NavTabs.stories.tsx +274 -0
  142. package/nav-tabs/NavTabs.test.js +82 -0
  143. package/nav-tabs/Tab.d.ts +4 -0
  144. package/nav-tabs/Tab.js +146 -0
  145. package/nav-tabs/types.d.ts +52 -0
  146. package/number-input/NumberInput.d.ts +7 -0
  147. package/number-input/NumberInput.js +6 -4
  148. package/number-input/NumberInput.test.js +319 -102
  149. package/number-input/types.d.ts +13 -10
  150. package/package.json +19 -23
  151. package/paginator/Icons.d.ts +5 -0
  152. package/paginator/Icons.js +16 -28
  153. package/paginator/Paginator.js +20 -49
  154. package/paginator/Paginator.stories.tsx +24 -0
  155. package/paginator/Paginator.test.js +91 -39
  156. package/paragraph/Paragraph.d.ts +5 -0
  157. package/paragraph/Paragraph.js +38 -0
  158. package/paragraph/Paragraph.stories.tsx +44 -0
  159. package/password-input/Icons.d.ts +6 -0
  160. package/password-input/Icons.js +39 -0
  161. package/password-input/PasswordInput.js +36 -80
  162. package/password-input/PasswordInput.stories.tsx +1 -0
  163. package/password-input/PasswordInput.test.js +36 -45
  164. package/password-input/types.d.ts +14 -11
  165. package/progress-bar/ProgressBar.js +61 -55
  166. package/progress-bar/ProgressBar.stories.jsx +47 -12
  167. package/progress-bar/ProgressBar.test.js +68 -23
  168. package/quick-nav/QuickNav.js +77 -26
  169. package/quick-nav/QuickNav.stories.tsx +145 -26
  170. package/quick-nav/types.d.ts +4 -4
  171. package/radio-group/Radio.d.ts +1 -1
  172. package/radio-group/Radio.js +46 -31
  173. package/radio-group/RadioGroup.js +37 -36
  174. package/radio-group/RadioGroup.stories.tsx +132 -18
  175. package/radio-group/RadioGroup.test.js +124 -97
  176. package/radio-group/types.d.ts +2 -2
  177. package/resultsetTable/Icons.d.ts +7 -0
  178. package/resultsetTable/Icons.js +51 -0
  179. package/resultsetTable/ResultsetTable.js +49 -108
  180. package/resultsetTable/ResultsetTable.stories.tsx +50 -25
  181. package/resultsetTable/ResultsetTable.test.js +61 -42
  182. package/resultsetTable/types.d.ts +1 -1
  183. package/select/Listbox.d.ts +4 -0
  184. package/select/Listbox.js +169 -0
  185. package/select/Option.js +11 -24
  186. package/select/Select.js +148 -214
  187. package/select/Select.stories.tsx +525 -136
  188. package/select/Select.test.js +478 -307
  189. package/select/types.d.ts +20 -4
  190. package/sidenav/Icons.d.ts +7 -0
  191. package/sidenav/Icons.js +51 -0
  192. package/sidenav/Sidenav.d.ts +6 -5
  193. package/sidenav/Sidenav.js +146 -44
  194. package/sidenav/Sidenav.stories.tsx +251 -151
  195. package/sidenav/Sidenav.test.js +25 -37
  196. package/sidenav/types.d.ts +52 -26
  197. package/slider/Slider.d.ts +2 -2
  198. package/slider/Slider.js +121 -97
  199. package/slider/Slider.stories.tsx +64 -1
  200. package/slider/Slider.test.js +122 -22
  201. package/slider/types.d.ts +4 -0
  202. package/spinner/Spinner.js +18 -24
  203. package/spinner/Spinner.stories.jsx +53 -27
  204. package/spinner/Spinner.test.js +1 -1
  205. package/switch/Switch.d.ts +2 -2
  206. package/switch/Switch.js +138 -68
  207. package/switch/Switch.stories.tsx +49 -38
  208. package/switch/Switch.test.js +145 -18
  209. package/switch/types.d.ts +6 -2
  210. package/table/Table.js +3 -3
  211. package/table/Table.stories.jsx +80 -1
  212. package/table/Table.test.js +2 -2
  213. package/tabs/Tab.d.ts +4 -0
  214. package/tabs/Tab.js +132 -0
  215. package/tabs/Tabs.js +358 -108
  216. package/tabs/Tabs.stories.tsx +119 -11
  217. package/tabs/Tabs.test.js +220 -10
  218. package/tabs/types.d.ts +13 -3
  219. package/tag/Tag.js +12 -17
  220. package/tag/Tag.stories.tsx +14 -1
  221. package/tag/Tag.test.js +1 -1
  222. package/tag/types.d.ts +1 -1
  223. package/text-input/Icons.d.ts +8 -0
  224. package/text-input/Icons.js +60 -0
  225. package/text-input/Suggestion.d.ts +4 -0
  226. package/text-input/Suggestion.js +84 -0
  227. package/text-input/Suggestions.d.ts +4 -0
  228. package/text-input/Suggestions.js +134 -0
  229. package/text-input/TextInput.js +260 -399
  230. package/text-input/TextInput.stories.tsx +319 -185
  231. package/text-input/TextInput.test.js +846 -759
  232. package/text-input/types.d.ts +50 -12
  233. package/textarea/Textarea.js +37 -45
  234. package/textarea/Textarea.stories.jsx +68 -1
  235. package/textarea/Textarea.test.js +61 -19
  236. package/textarea/types.d.ts +14 -7
  237. package/toggle-group/ToggleGroup.d.ts +2 -2
  238. package/toggle-group/ToggleGroup.js +85 -59
  239. package/toggle-group/ToggleGroup.stories.tsx +48 -3
  240. package/toggle-group/ToggleGroup.test.js +38 -24
  241. package/toggle-group/types.d.ts +23 -14
  242. package/typography/Typography.d.ts +4 -0
  243. package/typography/Typography.js +32 -0
  244. package/typography/Typography.stories.tsx +198 -0
  245. package/typography/types.d.ts +18 -0
  246. package/typography/types.js +5 -0
  247. package/useTheme.d.ts +1246 -1
  248. package/useTheme.js +3 -3
  249. package/useTranslatedLabels.d.ts +85 -0
  250. package/useTranslatedLabels.js +20 -0
  251. package/utils/BaseTypography.d.ts +21 -0
  252. package/utils/BaseTypography.js +108 -0
  253. package/utils/FocusLock.d.ts +13 -0
  254. package/utils/FocusLock.js +138 -0
  255. package/wizard/Wizard.js +44 -45
  256. package/wizard/Wizard.stories.tsx +40 -1
  257. package/wizard/Wizard.test.js +1 -1
  258. package/wizard/types.d.ts +3 -3
  259. package/ThemeContext.d.ts +0 -10
  260. package/ThemeContext.js +0 -243
  261. package/card/ice-cream.jpg +0 -0
  262. package/common/RequiredComponent.js +0 -32
  263. package/list/List.d.ts +0 -4
  264. package/list/List.js +0 -47
  265. package/list/List.stories.tsx +0 -95
  266. package/list/types.d.ts +0 -7
  267. package/number-input/NumberInputContext.d.ts +0 -4
  268. package/number-input/NumberInputContext.js +0 -19
  269. package/number-input/numberInputContextTypes.d.ts +0 -19
  270. package/radio/Radio.d.ts +0 -4
  271. package/radio/Radio.js +0 -174
  272. package/radio/Radio.stories.tsx +0 -192
  273. package/radio/Radio.test.js +0 -71
  274. package/radio/types.d.ts +0 -54
  275. package/row/Row.d.ts +0 -3
  276. package/row/Row.js +0 -127
  277. package/row/Row.stories.tsx +0 -237
  278. package/row/types.d.ts +0 -28
  279. package/stack/Stack.d.ts +0 -3
  280. package/stack/Stack.js +0 -97
  281. package/stack/Stack.stories.tsx +0 -164
  282. package/stack/types.d.ts +0 -24
  283. package/text/Text.d.ts +0 -7
  284. package/text/Text.js +0 -30
  285. package/text/Text.stories.tsx +0 -19
  286. /package/{list → bulleted-list}/types.js +0 -0
  287. /package/{radio → flex}/types.js +0 -0
  288. /package/{row → grid}/types.js +0 -0
  289. /package/{stack → image}/types.js +0 -0
  290. /package/{number-input/numberInputContextTypes.js → nav-tabs/types.js} +0 -0
package/switch/Switch.js CHANGED
@@ -19,27 +19,25 @@ var _react = _interopRequireWildcard(require("react"));
19
19
 
20
20
  var _styledComponents = _interopRequireWildcard(require("styled-components"));
21
21
 
22
- var _core = require("@material-ui/core");
23
-
24
- var _RequiredComponent = _interopRequireDefault(require("../common/RequiredComponent"));
25
-
26
22
  var _uuid = require("uuid");
27
23
 
28
- var _variables = require("../common/variables.js");
24
+ var _variables = require("../common/variables");
29
25
 
30
- var _utils = require("../common/utils.js");
26
+ var _utils = require("../common/utils");
31
27
 
32
28
  var _useTheme = _interopRequireDefault(require("../useTheme"));
33
29
 
30
+ var _useTranslatedLabels = _interopRequireDefault(require("../useTranslatedLabels"));
31
+
34
32
  var _BackgroundColorContext = _interopRequireDefault(require("../BackgroundColorContext"));
35
33
 
36
- var _templateObject, _templateObject2;
34
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
37
35
 
38
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); }
39
37
 
40
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; }
41
39
 
42
- var DxcSwitch = function DxcSwitch(_ref) {
40
+ var DxcSwitch = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
43
41
  var defaultChecked = _ref.defaultChecked,
44
42
  checked = _ref.checked,
45
43
  value = _ref.value,
@@ -51,9 +49,9 @@ var DxcSwitch = function DxcSwitch(_ref) {
51
49
  name = _ref$name === void 0 ? "" : _ref$name,
52
50
  _ref$disabled = _ref.disabled,
53
51
  disabled = _ref$disabled === void 0 ? false : _ref$disabled,
52
+ _ref$optional = _ref.optional,
53
+ optional = _ref$optional === void 0 ? false : _ref$optional,
54
54
  onChange = _ref.onChange,
55
- _ref$required = _ref.required,
56
- required = _ref$required === void 0 ? false : _ref$required,
57
55
  margin = _ref.margin,
58
56
  _ref$size = _ref.size,
59
57
  size = _ref$size === void 0 ? "fitContent" : _ref$size,
@@ -72,64 +70,138 @@ var DxcSwitch = function DxcSwitch(_ref) {
72
70
  setInnerChecked = _useState4[1];
73
71
 
74
72
  var colorsTheme = (0, _useTheme["default"])();
73
+ var translatedLabels = (0, _useTranslatedLabels["default"])();
75
74
  var backgroundType = (0, _react.useContext)(_BackgroundColorContext["default"]);
75
+ var refTrack = (0, _react.useRef)(null);
76
76
 
77
- var handlerSwitchChange = function handlerSwitchChange(event) {
78
- if (checked === undefined) {
79
- var _event$target$checked;
77
+ var handleOnKeyDown = function handleOnKeyDown(event) {
78
+ switch (event.key) {
79
+ case "Enter":
80
+ case " ":
81
+ //Space
82
+ event.preventDefault();
83
+ refTrack.current.focus();
84
+ var isChecked = !(checked !== null && checked !== void 0 ? checked : innerChecked);
85
+ setInnerChecked(isChecked);
86
+ onChange === null || onChange === void 0 ? void 0 : onChange(isChecked);
87
+ break;
88
+ }
89
+ };
80
90
 
81
- var isChecked = (_event$target$checked = event.target.checked) !== null && _event$target$checked !== void 0 ? _event$target$checked : !innerChecked;
82
- setInnerChecked(isChecked);
83
- onChange === null || onChange === void 0 ? void 0 : onChange(isChecked);
84
- } else onChange === null || onChange === void 0 ? void 0 : onChange(!checked);
91
+ var handlerSwitchChange = function handlerSwitchChange(event) {
92
+ checked !== null && checked !== void 0 ? checked : setInnerChecked(function (innerChecked) {
93
+ return !innerChecked;
94
+ });
95
+ onChange === null || onChange === void 0 ? void 0 : onChange(checked ? !checked : !innerChecked);
85
96
  };
86
97
 
87
98
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
88
99
  theme: colorsTheme["switch"]
89
100
  }, /*#__PURE__*/_react["default"].createElement(SwitchContainer, {
90
101
  margin: margin,
102
+ size: size,
103
+ onKeyDown: handleOnKeyDown,
91
104
  disabled: disabled,
105
+ onClick: !disabled ? handlerSwitchChange : undefined,
106
+ ref: ref
107
+ }, labelPosition === "before" && label && /*#__PURE__*/_react["default"].createElement(LabelContainer, {
108
+ id: labelId,
92
109
  labelPosition: labelPosition,
93
- size: size,
94
- backgroundType: backgroundType
95
- }, /*#__PURE__*/_react["default"].createElement(_core.Switch, {
96
- checked: checked !== null && checked !== void 0 ? checked : innerChecked,
97
- inputProps: {
98
- name: name,
99
- "aria-labelledby": labelId,
100
- role: "switch",
101
- "aria-checked": checked !== null && checked !== void 0 ? checked : innerChecked,
102
- tabIndex: tabIndex
103
- },
104
- onChange: handlerSwitchChange,
110
+ disabled: disabled,
111
+ backgroundType: backgroundType,
112
+ label: label
113
+ }, label, " ", optional && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, translatedLabels.formFields.optionalLabel)), /*#__PURE__*/_react["default"].createElement(ValueInput, {
114
+ type: "checkbox",
115
+ name: name,
116
+ "aria-hidden": true,
105
117
  value: value,
106
118
  disabled: disabled,
107
- disableRipple: true
108
- }), /*#__PURE__*/_react["default"].createElement(LabelContainer, {
119
+ checked: checked !== null && checked !== void 0 ? checked : innerChecked,
120
+ readOnly: true
121
+ }), /*#__PURE__*/_react["default"].createElement(SwitchBase, null, /*#__PURE__*/_react["default"].createElement(SwitchTrack, {
122
+ role: "switch",
123
+ backgroundType: backgroundType,
124
+ "aria-checked": checked !== null && checked !== void 0 ? checked : innerChecked,
125
+ "aria-disabled": disabled,
126
+ disabled: disabled,
127
+ "aria-labelledby": labelId,
128
+ tabIndex: !disabled ? tabIndex : -1,
129
+ ref: refTrack
130
+ })), labelPosition === "after" && label && /*#__PURE__*/_react["default"].createElement(LabelContainer, {
109
131
  id: labelId,
110
132
  labelPosition: labelPosition,
111
- onClick: !disabled && handlerSwitchChange,
112
133
  disabled: disabled,
113
- backgroundType: backgroundType
114
- }, required && /*#__PURE__*/_react["default"].createElement(_RequiredComponent["default"], null), label)));
115
- };
134
+ backgroundType: backgroundType,
135
+ label: label
136
+ }, optional && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, translatedLabels.formFields.optionalLabel), " ", label)));
137
+ });
116
138
 
117
139
  var sizes = {
118
140
  small: "60px",
119
141
  medium: "240px",
120
142
  large: "480px",
121
143
  fillParent: "100%",
122
- fitContent: "unset"
144
+ fitContent: "fit-content"
123
145
  };
124
146
 
125
147
  var calculateWidth = function calculateWidth(margin, size) {
126
148
  return size === "fillParent" ? "calc(".concat(sizes[size], " - ").concat((0, _utils.getMargin)(margin, "left"), " - ").concat((0, _utils.getMargin)(margin, "right"), ")") : sizes[size];
127
149
  };
128
150
 
129
- var SwitchContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n width: ", ";\n display: inline-flex;\n align-items: center;\n flex-direction: ", ";\n\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n cursor: ", ";\n\n .MuiSwitch-root {\n align-items: center;\n width: ", ";\n height: 45px;\n margin: 3px;\n\n .Mui-focusVisible {\n outline: ", ";\n outline-offset: -3px;\n }\n\n .MuiSwitch-track {\n /*Enabled and unchecked bar*/\n background-color: ", ";\n height: ", ";\n }\n\n .MuiSwitch-switchBase + .MuiSwitch-track {\n opacity: 1;\n }\n\n .MuiIconButton-root {\n /*Enabled and unchecked*/\n top: unset;\n .MuiSwitch-thumb {\n /*Only for thumb in all states*/\n width: ", ";\n height: ", ";\n }\n color: ", ";\n &:hover {\n background-color: transparent;\n }\n &.Mui-disabled {\n /*Disabled and unchecked*/\n color: ", ";\n + .MuiSwitch-track {\n /*Disabled and unchecked bar*/\n background-color: ", ";\n }\n }\n &.Mui-disabled.Mui-checked {\n /*Disabled and checked*/\n color: ", ";\n + .MuiSwitch-track {\n /*Disabled and checked bar*/\n background-color: ", ";\n }\n }\n &.Mui-checked {\n /*Enabled and checked*/\n color: ", ";\n transform: translateX(", ");\n &:hover {\n background-color: transparent;\n }\n + .MuiSwitch-track {\n /*Enabled and checked bar*/\n background-color: ", ";\n }\n }\n }\n }\n"])), function (props) {
151
+ var getDisabledColor = function getDisabledColor(props, element, subelement) {
152
+ switch (element) {
153
+ case "track":
154
+ switch (subelement) {
155
+ case "check":
156
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.disabledCheckedTrackBackgroundColorOnDark : props.theme.disabledCheckedTrackBackgroundColor;
157
+
158
+ case "uncheck":
159
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.disabledUncheckedTrackBackgroundColorOnDark : props.theme.disabledUncheckedTrackBackgroundColor;
160
+ }
161
+
162
+ case "thumb":
163
+ switch (subelement) {
164
+ case "check":
165
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.disabledCheckedThumbBackgroundColorOnDark : props.theme.disabledCheckedThumbBackgroundColor;
166
+
167
+ case "uncheck":
168
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.disabledUncheckedThumbBackgroundColorOnDark : props.theme.disabledUncheckedThumbBackgroundColor;
169
+ }
170
+
171
+ case "label":
172
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.disabledLabelFontColorOnDark : props.theme.disabledLabelFontColor;
173
+ }
174
+ };
175
+
176
+ var getNotDisabledColor = function getNotDisabledColor(props, element, subelement) {
177
+ switch (element) {
178
+ case "track":
179
+ switch (subelement) {
180
+ case "check":
181
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.checkedTrackBackgroundColorOnDark : props.theme.checkedTrackBackgroundColor;
182
+
183
+ case "uncheck":
184
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.uncheckedTrackBackgroundColorOnDark : props.theme.uncheckedTrackBackgroundColor;
185
+ }
186
+
187
+ case "thumb":
188
+ switch (subelement) {
189
+ case "check":
190
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.checkedThumbBackgroundColorOnDark : props.theme.checkedThumbBackgroundColor;
191
+
192
+ case "uncheck":
193
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.uncheckedThumbBackgroundColorOnDark : props.theme.uncheckedThumbBackgroundColor;
194
+ }
195
+
196
+ case "label":
197
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.labelFontColorOnDark : props.theme.labelFontColor;
198
+ }
199
+ };
200
+
201
+ var SwitchContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n align-items: center;\n width: ", ";\n height: 40px;\n cursor: ", ";\n\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n"])), function (props) {
130
202
  return calculateWidth(props.margin, props.size);
131
203
  }, function (props) {
132
- return props.labelPosition === "after" ? "row" : "row-reverse";
204
+ return props.disabled === true ? "not-allowed" : "pointer";
133
205
  }, function (props) {
134
206
  return props.margin && (0, _typeof2["default"])(props.margin) !== "object" ? _variables.spaces[props.margin] : "0px";
135
207
  }, function (props) {
@@ -140,52 +212,50 @@ var SwitchContainer = _styledComponents["default"].div(_templateObject || (_temp
140
212
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.bottom ? _variables.spaces[props.margin.bottom] : "";
141
213
  }, function (props) {
142
214
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.left ? _variables.spaces[props.margin.left] : "";
215
+ });
216
+
217
+ var LabelContainer = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: ", ";\n opacity: 1;\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n\n ", ";\n\n ", "\n"])), function (props) {
218
+ return props.disabled ? getDisabledColor(props, "label") : getNotDisabledColor(props, "label");
143
219
  }, function (props) {
144
- return props.disabled ? "not-allowed" : "default";
145
- }, function (props) {
146
- return props.theme.trackWidth;
147
- }, function (props) {
148
- return "".concat(props.backgroundType === "dark" ? props.theme.thumbFocusColorOnDark : props.theme.thumbFocusColor, " solid 2px");
149
- }, function (props) {
150
- return props.backgroundType === "dark" ? props.theme.uncheckedTrackBackgroundColorOnDark : props.theme.uncheckedTrackBackgroundColor;
151
- }, function (props) {
152
- return props.theme.trackHeight;
153
- }, function (props) {
154
- return props.theme.thumbWidth;
220
+ return props.theme.labelFontFamily;
155
221
  }, function (props) {
156
- return props.theme.thumbHeight;
222
+ return props.theme.labelFontSize;
157
223
  }, function (props) {
158
- return props.backgroundType === "dark" ? props.theme.uncheckedThumbBackgroundColorOnDark : props.theme.uncheckedThumbBackgroundColor;
224
+ return props.disabled ? props.theme.disabledLabelFontStyle : props.theme.labelFontStyle;
159
225
  }, function (props) {
160
- return props.backgroundType === "dark" ? props.theme.disabledUncheckedThumbBackgroundColorOnDark : props.theme.disabledUncheckedThumbBackgroundColor;
226
+ return props.theme.labelFontWeight;
161
227
  }, function (props) {
162
- return props.backgroundType === "dark" ? props.theme.disabledUncheckedTrackBackgroundColorOnDark : props.theme.disabledUncheckedTrackBackgroundColor;
228
+ return !props.label ? "margin: 0px;" : props.labelPosition === "after" ? "margin-left: ".concat(props.theme.spaceBetweenLabelSwitch, ";") : "margin-right: ".concat(props.theme.spaceBetweenLabelSwitch, ";");
163
229
  }, function (props) {
164
- return props.backgroundType === "dark" ? props.theme.disabledCheckedThumbBackgroundColorOnDark : props.theme.disabledCheckedThumbBackgroundColor;
230
+ return props.labelPosition === "before" && "order: -1";
231
+ });
232
+
233
+ var SwitchBase = _styledComponents["default"].label(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n margin: 0px 12px;\n"])));
234
+
235
+ var ValueInput = _styledComponents["default"].input(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: none;\n"])));
236
+
237
+ var SwitchTrack = _styledComponents["default"].span(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n border-radius: 15px;\n width: ", ";\n height: ", ";\n position: relative;\n cursor: ", ";\n\n &:focus-visible {\n outline: none;\n ::before {\n outline: ", ";\n outline-offset: 6px;\n }\n }\n\n /* Thumb element */\n ::before {\n content: \"\";\n transform: initial;\n position: absolute;\n width: ", ";\n height: ", ";\n border-radius: 50%;\n box-shadow: 0px 2px 1px -1px rgb(0 0 0 / 20%), 0px 1px 1px 0px rgb(0 0 0 / 14%), 0px 1px 3px 0px rgb(0 0 0 / 12%);\n bottom: -6px;\n left: -4px;\n transform: translateX(0px);\n background-color: ", ";\n }\n\n /* Unchecked */\n background-color: ", ";\n\n /* Checked */\n &[aria-checked=\"true\"] {\n background-color: ", ";\n ::before {\n transform: translateX(", ");\n background-color: ", ";\n }\n }\n"])), function (props) {
238
+ return props.theme.trackWidth;
165
239
  }, function (props) {
166
- return props.backgroundType === "dark" ? props.theme.disabledCheckedTrackBackgroundColorOnDark : props.theme.disabledCheckedTrackBackgroundColor;
240
+ return props.theme.trackHeight;
167
241
  }, function (props) {
168
- return props.backgroundType === "dark" ? props.theme.checkedThumbBackgroundColorOnDark : props.theme.checkedThumbBackgroundColor;
242
+ return props.disabled ? "not-allowed" : "pointer";
169
243
  }, function (props) {
170
- return props.theme.thumbShift;
244
+ return "".concat(props.backgroundType === "dark" ? props.theme.thumbFocusColorOnDark : props.theme.thumbFocusColor, " solid 2px");
171
245
  }, function (props) {
172
- return props.backgroundType === "dark" ? props.theme.checkedTrackBackgroundColorOnDark : props.theme.checkedTrackBackgroundColor;
173
- });
174
-
175
- var LabelContainer = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: ", ";\n opacity: 1;\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n cursor: ", ";\n ", "\n"])), function (props) {
176
- return props.disabled ? props.backgroundType === "dark" ? props.theme.disabledLabelFontColorOnDark : props.theme.disabledLabelFontColor : props.backgroundType === "dark" ? props.theme.labelFontColorOnDark : props.theme.labelFontColor;
246
+ return props.theme.thumbWidth;
177
247
  }, function (props) {
178
- return props.theme.labelFontFamily;
248
+ return props.theme.thumbHeight;
179
249
  }, function (props) {
180
- return props.theme.labelFontSize;
250
+ return props.disabled ? getDisabledColor(props, "thumb", "uncheck") : getNotDisabledColor(props, "thumb", "uncheck");
181
251
  }, function (props) {
182
- return props.disabled ? props.theme.disabledLabelFontStyle : props.theme.labelFontStyle;
252
+ return props.disabled ? getDisabledColor(props, "track", "uncheck") : getNotDisabledColor(props, "track", "uncheck");
183
253
  }, function (props) {
184
- return props.theme.labelFontWeight;
254
+ return props.disabled ? getDisabledColor(props, "track", "check") : getNotDisabledColor(props, "track", "check");
185
255
  }, function (props) {
186
- return props.disabled === true ? "not-allowed" : "pointer";
256
+ return props.theme.thumbShift;
187
257
  }, function (props) {
188
- return props.labelPosition === "after" ? "margin-left: ".concat(props.theme.spaceBetweenLabelSwitch, ";") : "margin-right: ".concat(props.theme.spaceBetweenLabelSwitch, ";");
258
+ return props.disabled ? getDisabledColor(props, "thumb", "check") : getNotDisabledColor(props, "thumb", "check");
189
259
  });
190
260
 
191
261
  var _default = DxcSwitch;
@@ -1,16 +1,23 @@
1
1
  import React from "react";
2
- import { userEvent, within } from "@storybook/testing-library";
3
2
  import DxcSwitch from "./Switch";
4
3
  import { BackgroundColorProvider } from "../BackgroundColorContext";
5
4
  import Title from "../../.storybook/components/Title";
6
5
  import ExampleContainer from "../../.storybook/components/ExampleContainer";
7
6
  import DarkContainer from "../../.storybook/components/DarkSection";
7
+ import { HalstackProvider } from "../HalstackContext";
8
8
 
9
9
  export default {
10
10
  title: "Switch",
11
11
  component: DxcSwitch,
12
12
  };
13
13
 
14
+ const opinionatedTheme = {
15
+ switch: {
16
+ checkedBaseColor: "#5f249f",
17
+ fontColor: "#000000",
18
+ },
19
+ };
20
+
14
21
  export const Chromatic = () => (
15
22
  <>
16
23
  <ExampleContainer>
@@ -21,21 +28,25 @@ export const Chromatic = () => (
21
28
  <Title title="Without label" theme="light" level={4} />
22
29
  <DxcSwitch />
23
30
  </ExampleContainer>
31
+ <ExampleContainer pseudoState="pseudo-focus-visible">
32
+ <Title title="Focused" theme="light" level={4} />
33
+ <DxcSwitch label="Switch" labelPosition="after" />
34
+ </ExampleContainer>
24
35
  <ExampleContainer>
25
36
  <Title title="Checked" theme="light" level={4} />
26
37
  <DxcSwitch label="Switch" defaultChecked />
27
38
  </ExampleContainer>
28
39
  <ExampleContainer>
29
- <Title title="Required" theme="light" level={4} />
30
- <DxcSwitch label="Switch" required />
40
+ <Title title="Optional" theme="light" level={4} />
41
+ <DxcSwitch label="Switch" optional />
31
42
  </ExampleContainer>
32
43
  <ExampleContainer>
33
44
  <Title title="Disabled" theme="light" level={4} />
34
45
  <DxcSwitch label="Switch" disabled />
35
46
  </ExampleContainer>
36
47
  <ExampleContainer>
37
- <Title title="Disabled required" theme="light" level={4} />
38
- <DxcSwitch label="Switch" disabled required labelPosition="after" />
48
+ <Title title="Disabled optional" theme="light" level={4} />
49
+ <DxcSwitch label="Switch" disabled optional labelPosition="after" />
39
50
  </ExampleContainer>
40
51
  <ExampleContainer>
41
52
  <Title title="Disabled checked" theme="light" level={4} />
@@ -47,21 +58,25 @@ export const Chromatic = () => (
47
58
  <Title title="With label" theme="dark" level={4} />
48
59
  <DxcSwitch label="Switch" />
49
60
  </ExampleContainer>
61
+ <ExampleContainer pseudoState="pseudo-focus-visible">
62
+ <Title title="Focused" theme="dark" level={4} />
63
+ <DxcSwitch label="Switch" labelPosition="after" />
64
+ </ExampleContainer>
50
65
  <ExampleContainer>
51
66
  <Title title="Checked" theme="dark" level={4} />
52
67
  <DxcSwitch label="Switch" defaultChecked />
53
68
  </ExampleContainer>
54
69
  <ExampleContainer>
55
- <Title title="Required" theme="dark" level={4} />
56
- <DxcSwitch label="Switch" required />
70
+ <Title title="Optional" theme="dark" level={4} />
71
+ <DxcSwitch label="Switch" optional />
57
72
  </ExampleContainer>
58
73
  <ExampleContainer>
59
74
  <Title title="Disabled" theme="dark" level={4} />
60
75
  <DxcSwitch label="Switch" disabled />
61
76
  </ExampleContainer>
62
77
  <ExampleContainer>
63
- <Title title="Disabled required" theme="dark" level={4} />
64
- <DxcSwitch label="Switch" disabled required labelPosition="after" />
78
+ <Title title="Disabled optional" theme="dark" level={4} />
79
+ <DxcSwitch label="Switch" disabled optional labelPosition="after" />
65
80
  </ExampleContainer>
66
81
  <ExampleContainer>
67
82
  <Title title="Disabled checked" theme="dark" level={4} />
@@ -127,34 +142,30 @@ export const Chromatic = () => (
127
142
  <Title title="FitContent size" theme="light" level={4} />
128
143
  <DxcSwitch label="FitContent" size="fitContent" />
129
144
  </ExampleContainer>
130
- </>
131
- );
132
-
133
- const Switch = () => (
134
- <ExampleContainer>
135
- <Title title="Focused" theme="light" level={4} />
136
- <DxcSwitch label="Switch" />
137
- </ExampleContainer>
138
- );
139
- export const FocusedSwitch = Switch.bind({});
140
- FocusedSwitch.play = async ({ canvasElement }) => {
141
- const canvas = within(canvasElement);
142
- canvas.getByRole("switch").focus();
143
- };
144
-
145
- const DarkSwitch = () => (
146
- <BackgroundColorProvider color="#333333">
147
- <DarkContainer>
148
- <ExampleContainer>
149
- <Title title="Focused" theme="dark" level={4} />
145
+ <Title title="Opinionated theme" theme="light" level={2} />
146
+ <ExampleContainer>
147
+ <Title title="Checked" theme="light" level={4} />
148
+ <HalstackProvider theme={opinionatedTheme}>
149
+ <DxcSwitch label="Switch" defaultChecked />
150
+ </HalstackProvider>
151
+ </ExampleContainer>
152
+ <ExampleContainer>
153
+ <Title title="Default" theme="light" level={4} />
154
+ <HalstackProvider theme={opinionatedTheme}>
150
155
  <DxcSwitch label="Switch" />
151
- </ExampleContainer>
152
- </DarkContainer>
153
- </BackgroundColorProvider>
156
+ </HalstackProvider>
157
+ </ExampleContainer>
158
+ <ExampleContainer>
159
+ <Title title="Disabled" theme="light" level={4} />
160
+ <HalstackProvider theme={opinionatedTheme}>
161
+ <DxcSwitch label="Switch" disabled />
162
+ </HalstackProvider>
163
+ </ExampleContainer>
164
+ <ExampleContainer>
165
+ <Title title="Disabled checked" theme="light" level={4} />
166
+ <HalstackProvider theme={opinionatedTheme}>
167
+ <DxcSwitch label="Switch" disabled defaultChecked />
168
+ </HalstackProvider>
169
+ </ExampleContainer>
170
+ </>
154
171
  );
155
-
156
- export const FocusedSwitchOnDark = DarkSwitch.bind({});
157
- FocusedSwitchOnDark.play = async ({ canvasElement }) => {
158
- const canvas = within(canvasElement);
159
- canvas.getByRole("switch").focus();
160
- };
@@ -6,7 +6,7 @@ var _react = _interopRequireDefault(require("react"));
6
6
 
7
7
  var _react2 = require("@testing-library/react");
8
8
 
9
- var _Switch = _interopRequireDefault(require("./Switch"));
9
+ var _Switch = _interopRequireDefault(require("./Switch.tsx"));
10
10
 
11
11
  describe("Switch component tests", function () {
12
12
  test("Switch renders with correct text", function () {
@@ -37,7 +37,7 @@ describe("Switch component tests", function () {
37
37
 
38
38
  expect(onChange).toHaveBeenCalled();
39
39
  });
40
- test("Everytime the user clicks the component the onchange function is called with the correct value CONTROLLED COMPONENT", function () {
40
+ test("Calls correct function on key down", function () {
41
41
  var onChange = jest.fn();
42
42
 
43
43
  var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Switch["default"], {
@@ -47,6 +47,30 @@ describe("Switch component tests", function () {
47
47
  })),
48
48
  getByText = _render3.getByText;
49
49
 
50
+ _react2.fireEvent.focus(getByText("SwitchComponent"));
51
+
52
+ _react2.fireEvent.keyDown(getByText("SwitchComponent"), {
53
+ key: "Enter"
54
+ });
55
+
56
+ expect(onChange).toHaveBeenCalled();
57
+
58
+ _react2.fireEvent.keyDown(getByText("SwitchComponent"), {
59
+ key: " "
60
+ });
61
+
62
+ expect(onChange).toHaveBeenCalled();
63
+ });
64
+ test("Everytime the user clicks the component the onchange function is called with the correct value CONTROLLED COMPONENT", function () {
65
+ var onChange = jest.fn();
66
+
67
+ var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Switch["default"], {
68
+ label: "SwitchComponent",
69
+ checked: false,
70
+ onChange: onChange
71
+ })),
72
+ getByText = _render4.getByText;
73
+
50
74
  _react2.fireEvent.click(getByText("SwitchComponent"));
51
75
 
52
76
  _react2.fireEvent.click(getByText("SwitchComponent"));
@@ -54,14 +78,60 @@ describe("Switch component tests", function () {
54
78
  expect(onChange.mock.calls[0][0]).toBe(true);
55
79
  expect(onChange.mock.calls[1][0]).toBe(true);
56
80
  });
81
+ test("Everytime the user use enter in the component, the onchange function is called with the correct value CONTROLLED COMPONENT", function () {
82
+ var onChange = jest.fn();
83
+
84
+ var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Switch["default"], {
85
+ label: "SwitchComponent",
86
+ checked: false,
87
+ onChange: onChange
88
+ })),
89
+ getByText = _render5.getByText;
90
+
91
+ _react2.fireEvent.focus(getByText("SwitchComponent"));
92
+
93
+ _react2.fireEvent.keyDown(getByText("SwitchComponent"), {
94
+ key: "Enter"
95
+ });
96
+
97
+ _react2.fireEvent.keyDown(getByText("SwitchComponent"), {
98
+ key: "Enter"
99
+ });
100
+
101
+ expect(onChange.mock.calls[0][0]).toBe(true);
102
+ expect(onChange.mock.calls[1][0]).toBe(true);
103
+ });
104
+ test("Everytime the user use space in the component, the onchange function is called with the correct value CONTROLLED COMPONENT", function () {
105
+ var onChange = jest.fn();
106
+
107
+ var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Switch["default"], {
108
+ label: "SwitchComponent",
109
+ checked: false,
110
+ onChange: onChange
111
+ })),
112
+ getByText = _render6.getByText;
113
+
114
+ _react2.fireEvent.focus(getByText("SwitchComponent"));
115
+
116
+ _react2.fireEvent.keyDown(getByText("SwitchComponent"), {
117
+ key: " "
118
+ });
119
+
120
+ _react2.fireEvent.keyDown(getByText("SwitchComponent"), {
121
+ key: " "
122
+ });
123
+
124
+ expect(onChange.mock.calls[0][0]).toBe(true);
125
+ expect(onChange.mock.calls[1][0]).toBe(true);
126
+ });
57
127
  test("Everytime the user clicks the component the onchange function is called with the correct value UNCONTROLLED COMPONENT", function () {
58
128
  var onChange = jest.fn();
59
129
 
60
- var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Switch["default"], {
130
+ var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Switch["default"], {
61
131
  label: "SwitchComponent",
62
132
  onChange: onChange
63
133
  })),
64
- getByText = _render4.getByText;
134
+ getByText = _render7.getByText;
65
135
 
66
136
  _react2.fireEvent.click(getByText("SwitchComponent"));
67
137
 
@@ -70,29 +140,86 @@ describe("Switch component tests", function () {
70
140
  expect(onChange.mock.calls[0][0]).toBe(true);
71
141
  expect(onChange.mock.calls[1][0]).toBe(false);
72
142
  });
143
+ test("Everytime the user use enter in the component, the onchange function is called with the correct value UNCONTROLLED COMPONENT", function () {
144
+ var onChange = jest.fn();
145
+
146
+ var _render8 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Switch["default"], {
147
+ label: "SwitchComponent",
148
+ onChange: onChange
149
+ })),
150
+ getByText = _render8.getByText;
151
+
152
+ _react2.fireEvent.focus(getByText("SwitchComponent"));
153
+
154
+ _react2.fireEvent.keyDown(getByText("SwitchComponent"), {
155
+ key: "Enter"
156
+ });
157
+
158
+ _react2.fireEvent.keyDown(getByText("SwitchComponent"), {
159
+ key: "Enter"
160
+ });
161
+
162
+ expect(onChange.mock.calls[0][0]).toBe(true);
163
+ expect(onChange.mock.calls[1][0]).toBe(false);
164
+ });
165
+ test("Everytime the user use space in the component, the onchange function is called with the correct value UNCONTROLLED COMPONENT", function () {
166
+ var onChange = jest.fn();
167
+
168
+ var _render9 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Switch["default"], {
169
+ label: "SwitchComponent",
170
+ onChange: onChange
171
+ })),
172
+ getByText = _render9.getByText;
173
+
174
+ _react2.fireEvent.focus(getByText("SwitchComponent"));
175
+
176
+ _react2.fireEvent.keyDown(getByText("SwitchComponent"), {
177
+ key: " "
178
+ });
179
+
180
+ _react2.fireEvent.keyDown(getByText("SwitchComponent"), {
181
+ key: " "
182
+ });
183
+
184
+ expect(onChange.mock.calls[0][0]).toBe(true);
185
+ expect(onChange.mock.calls[1][0]).toBe(false);
186
+ });
73
187
  test("Renders with correct initial value and initial state when it is uncontrolled", function () {
74
- var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Switch["default"], {
188
+ var component = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Switch["default"], {
75
189
  label: "Default label",
76
190
  defaultChecked: true,
77
- value: "test-defaultChecked"
78
- })),
79
- getByRole = _render5.getByRole;
80
-
81
- var inputEl = getByRole("switch");
82
- expect(inputEl.checked).toBe(true);
191
+ value: "test-defaultChecked",
192
+ name: "test"
193
+ }));
194
+ var switchEl = component.getByRole("switch");
195
+ var inputEl = component.container.querySelector("input[name=\"test\"]");
83
196
  expect(inputEl.value).toBe("test-defaultChecked");
84
- expect(inputEl.getAttribute("aria-checked")).toBe("true");
197
+ expect(switchEl.getAttribute("aria-checked")).toBe("true");
85
198
  });
86
199
  test("Renders with correct aria attributes", function () {
87
- var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Switch["default"], {
200
+ var _render10 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Switch["default"], {
88
201
  label: "Default label"
89
202
  })),
90
- getByRole = _render6.getByRole,
91
- getByText = _render6.getByText;
203
+ getByText = _render10.getByText,
204
+ getByRole = _render10.getByRole;
205
+
206
+ var switchEl = getByRole("switch");
207
+ var label = getByText("Default label");
208
+ expect(switchEl.getAttribute("aria-labelledby")).toBe(label.id);
209
+ expect(switchEl.getAttribute("aria-checked")).toBe("false");
210
+ });
211
+ test("Renders disabled switch correctly", function () {
212
+ var _render11 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Switch["default"], {
213
+ label: "Default label",
214
+ disabled: true
215
+ })),
216
+ getByText = _render11.getByText,
217
+ getByRole = _render11.getByRole;
92
218
 
93
- var inputEl = getByRole("switch");
219
+ var switchEl = getByRole("switch");
94
220
  var label = getByText("Default label");
95
- expect(inputEl.getAttribute("aria-labelledby")).toBe(label.id);
96
- expect(inputEl.getAttribute("aria-checked")).toBe("false");
221
+ expect(switchEl.getAttribute("aria-labelledby")).toBe(label.id);
222
+ expect(switchEl.getAttribute("aria-checked")).toBe("false");
223
+ expect(switchEl.getAttribute("aria-disabled")).toBe("true");
97
224
  });
98
225
  });