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

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 (152) hide show
  1. package/accordion/Accordion.js +122 -103
  2. package/accordion/Accordion.stories.tsx +2 -3
  3. package/accordion/Accordion.test.js +9 -10
  4. package/accordion/types.d.ts +5 -4
  5. package/accordion-group/AccordionGroup.js +2 -21
  6. package/accordion-group/AccordionGroup.stories.tsx +27 -1
  7. package/accordion-group/AccordionGroup.test.js +20 -45
  8. package/accordion-group/types.d.ts +10 -3
  9. package/alert/Alert.js +1 -1
  10. package/bleed/Bleed.js +1 -34
  11. package/bleed/Bleed.stories.tsx +94 -95
  12. package/bleed/types.d.ts +1 -1
  13. package/box/Box.js +1 -1
  14. package/box/types.d.ts +1 -0
  15. package/bulleted-list/BulletedList.d.ts +7 -0
  16. package/bulleted-list/BulletedList.js +123 -0
  17. package/bulleted-list/BulletedList.stories.tsx +200 -0
  18. package/bulleted-list/types.d.ts +11 -0
  19. package/{list → bulleted-list}/types.js +0 -0
  20. package/button/Button.js +43 -61
  21. package/button/Button.stories.tsx +9 -0
  22. package/button/types.d.ts +7 -7
  23. package/card/Card.js +34 -36
  24. package/card/types.d.ts +1 -0
  25. package/checkbox/Checkbox.js +87 -95
  26. package/checkbox/Checkbox.test.js +93 -16
  27. package/checkbox/types.d.ts +2 -2
  28. package/chip/types.d.ts +1 -1
  29. package/common/variables.js +56 -18
  30. package/date-input/DateInput.js +3 -3
  31. package/dialog/Dialog.js +52 -28
  32. package/dialog/Dialog.stories.tsx +57 -2
  33. package/dialog/Dialog.test.js +34 -4
  34. package/dialog/types.d.ts +3 -2
  35. package/dropdown/Dropdown.d.ts +1 -1
  36. package/dropdown/Dropdown.js +244 -247
  37. package/dropdown/Dropdown.stories.tsx +126 -63
  38. package/dropdown/Dropdown.test.js +509 -108
  39. package/dropdown/DropdownMenu.d.ts +4 -0
  40. package/dropdown/DropdownMenu.js +80 -0
  41. package/dropdown/DropdownMenuItem.d.ts +4 -0
  42. package/dropdown/DropdownMenuItem.js +92 -0
  43. package/dropdown/types.d.ts +25 -5
  44. package/flex/Flex.d.ts +4 -0
  45. package/flex/Flex.js +69 -0
  46. package/flex/Flex.stories.tsx +103 -0
  47. package/flex/types.d.ts +32 -0
  48. package/{row → flex}/types.js +0 -0
  49. package/footer/Footer.stories.tsx +8 -1
  50. package/footer/Icons.js +1 -1
  51. package/footer/types.d.ts +2 -1
  52. package/header/Header.js +74 -72
  53. package/header/Header.stories.tsx +4 -4
  54. package/header/Icons.js +2 -2
  55. package/header/types.d.ts +3 -2
  56. package/inset/Inset.js +1 -34
  57. package/inset/Inset.stories.tsx +36 -36
  58. package/inset/types.d.ts +1 -1
  59. package/layout/ApplicationLayout.d.ts +15 -6
  60. package/layout/ApplicationLayout.js +37 -65
  61. package/layout/ApplicationLayout.stories.tsx +80 -44
  62. package/layout/types.d.ts +17 -27
  63. package/link/Link.js +1 -1
  64. package/link/Link.stories.tsx +13 -6
  65. package/link/types.d.ts +1 -1
  66. package/main.d.ts +5 -8
  67. package/main.js +28 -52
  68. package/number-input/NumberInput.test.js +1 -1
  69. package/package.json +10 -9
  70. package/paginator/Paginator.test.js +42 -0
  71. package/paragraph/Paragraph.d.ts +6 -0
  72. package/paragraph/Paragraph.js +38 -0
  73. package/paragraph/Paragraph.stories.tsx +44 -0
  74. package/password-input/PasswordInput.test.js +13 -12
  75. package/progress-bar/ProgressBar.d.ts +2 -2
  76. package/progress-bar/ProgressBar.js +56 -50
  77. package/progress-bar/ProgressBar.stories.jsx +3 -1
  78. package/progress-bar/ProgressBar.test.js +67 -22
  79. package/progress-bar/types.d.ts +3 -4
  80. package/quick-nav/QuickNav.js +25 -20
  81. package/quick-nav/QuickNav.stories.tsx +131 -26
  82. package/radio-group/Radio.d.ts +1 -1
  83. package/radio-group/Radio.js +43 -28
  84. package/radio-group/RadioGroup.js +26 -29
  85. package/radio-group/RadioGroup.stories.tsx +1 -0
  86. package/radio-group/RadioGroup.test.js +28 -58
  87. package/radio-group/types.d.ts +2 -2
  88. package/resultsetTable/ResultsetTable.test.js +42 -0
  89. package/select/Listbox.d.ts +1 -1
  90. package/select/Listbox.js +53 -7
  91. package/select/Select.js +42 -43
  92. package/select/Select.stories.tsx +131 -98
  93. package/select/Select.test.js +105 -50
  94. package/select/types.d.ts +2 -5
  95. package/sidenav/Sidenav.d.ts +6 -5
  96. package/sidenav/Sidenav.js +176 -55
  97. package/sidenav/Sidenav.stories.tsx +154 -156
  98. package/sidenav/Sidenav.test.js +25 -37
  99. package/sidenav/types.d.ts +50 -27
  100. package/slider/Slider.js +116 -92
  101. package/slider/Slider.stories.tsx +7 -1
  102. package/slider/Slider.test.js +121 -21
  103. package/slider/types.d.ts +2 -2
  104. package/switch/Switch.d.ts +1 -1
  105. package/switch/Switch.js +132 -66
  106. package/switch/Switch.stories.tsx +8 -30
  107. package/switch/Switch.test.js +144 -17
  108. package/switch/types.d.ts +3 -4
  109. package/tabs/Tab.d.ts +4 -0
  110. package/tabs/Tab.js +135 -0
  111. package/tabs/Tabs.js +360 -104
  112. package/tabs/Tabs.stories.tsx +74 -0
  113. package/tabs/Tabs.test.js +217 -6
  114. package/tabs/types.d.ts +15 -5
  115. package/tabs-nav/NavTabs.js +5 -5
  116. package/tabs-nav/Tab.js +3 -5
  117. package/tabs-nav/types.d.ts +1 -1
  118. package/tag/Tag.js +1 -1
  119. package/tag/types.d.ts +1 -1
  120. package/text-input/Icons.d.ts +8 -0
  121. package/text-input/Icons.js +60 -0
  122. package/text-input/Suggestion.js +7 -5
  123. package/text-input/Suggestions.d.ts +4 -0
  124. package/text-input/Suggestions.js +134 -0
  125. package/text-input/TextInput.js +181 -278
  126. package/text-input/TextInput.stories.tsx +189 -182
  127. package/text-input/TextInput.test.js +165 -163
  128. package/text-input/types.d.ts +22 -3
  129. package/toggle-group/types.d.ts +1 -1
  130. package/typography/Typography.d.ts +4 -0
  131. package/typography/Typography.js +131 -0
  132. package/typography/Typography.stories.tsx +198 -0
  133. package/typography/types.d.ts +18 -0
  134. package/{stack → typography}/types.js +0 -0
  135. package/wizard/Wizard.js +9 -16
  136. package/wizard/Wizard.stories.tsx +20 -1
  137. package/wizard/types.d.ts +5 -4
  138. package/list/List.d.ts +0 -4
  139. package/list/List.js +0 -47
  140. package/list/List.stories.tsx +0 -95
  141. package/list/types.d.ts +0 -7
  142. package/row/Row.d.ts +0 -3
  143. package/row/Row.js +0 -127
  144. package/row/Row.stories.tsx +0 -237
  145. package/row/types.d.ts +0 -28
  146. package/stack/Stack.d.ts +0 -3
  147. package/stack/Stack.js +0 -97
  148. package/stack/Stack.stories.tsx +0 -164
  149. package/stack/types.d.ts +0 -24
  150. package/text/Text.d.ts +0 -7
  151. package/text/Text.js +0 -30
  152. package/text/Text.stories.tsx +0 -19
package/switch/Switch.js CHANGED
@@ -19,8 +19,6 @@ 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
22
  var _uuid = require("uuid");
25
23
 
26
24
  var _variables = require("../common/variables.js");
@@ -33,7 +31,7 @@ var _useTranslatedLabels = _interopRequireDefault(require("../useTranslatedLabel
33
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
 
@@ -74,47 +72,67 @@ var DxcSwitch = function DxcSwitch(_ref) {
74
72
  var colorsTheme = (0, _useTheme["default"])();
75
73
  var translatedLabels = (0, _useTranslatedLabels["default"])();
76
74
  var backgroundType = (0, _react.useContext)(_BackgroundColorContext["default"]);
75
+ var refTrack = (0, _react.useRef)(null);
76
+
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
+ };
77
90
 
78
91
  var handlerSwitchChange = function handlerSwitchChange(event) {
79
- if (checked === undefined) {
80
- var _event$target$checked;
81
-
82
- var isChecked = (_event$target$checked = event.target.checked) !== null && _event$target$checked !== void 0 ? _event$target$checked : !innerChecked;
83
- setInnerChecked(isChecked);
84
- onChange === null || onChange === void 0 ? void 0 : onChange(isChecked);
85
- } else onChange === null || onChange === void 0 ? void 0 : onChange(!checked);
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);
86
96
  };
87
97
 
88
- var labelComponent = /*#__PURE__*/_react["default"].createElement(LabelContainer, {
89
- id: labelId,
90
- labelPosition: labelPosition,
91
- onClick: !disabled && handlerSwitchChange,
92
- disabled: disabled,
93
- backgroundType: backgroundType
94
- }, labelPosition === "before" ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, label, " ", optional && /*#__PURE__*/_react["default"].createElement("span", null, translatedLabels.formFields.optionalLabel)) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, optional && /*#__PURE__*/_react["default"].createElement("span", null, translatedLabels.formFields.optionalLabel), " ", label));
95
-
96
98
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
97
99
  theme: colorsTheme["switch"]
98
100
  }, /*#__PURE__*/_react["default"].createElement(SwitchContainer, {
99
101
  margin: margin,
102
+ size: size,
103
+ onKeyDown: handleOnKeyDown,
100
104
  disabled: disabled,
105
+ onClick: !disabled ? handlerSwitchChange : undefined
106
+ }, labelPosition === "before" && label && /*#__PURE__*/_react["default"].createElement(LabelContainer, {
107
+ id: labelId,
101
108
  labelPosition: labelPosition,
102
- size: size,
103
- backgroundType: backgroundType
104
- }, labelPosition === "before" && labelComponent, /*#__PURE__*/_react["default"].createElement(_core.Switch, {
105
- checked: checked !== null && checked !== void 0 ? checked : innerChecked,
106
- inputProps: {
107
- name: name,
108
- "aria-labelledby": labelId,
109
- role: "switch",
110
- "aria-checked": checked !== null && checked !== void 0 ? checked : innerChecked,
111
- tabIndex: tabIndex
112
- },
113
- onChange: handlerSwitchChange,
109
+ disabled: disabled,
110
+ backgroundType: backgroundType,
111
+ label: label
112
+ }, label, " ", optional && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, translatedLabels.formFields.optionalLabel)), /*#__PURE__*/_react["default"].createElement(ValueInput, {
113
+ type: "checkbox",
114
+ name: name,
115
+ "aria-hidden": true,
114
116
  value: value,
115
117
  disabled: disabled,
116
- disableRipple: true
117
- }), labelPosition === "after" && labelComponent));
118
+ checked: checked !== null && checked !== void 0 ? checked : innerChecked,
119
+ readOnly: true
120
+ }), /*#__PURE__*/_react["default"].createElement(SwitchBase, null, /*#__PURE__*/_react["default"].createElement(SwitchTrack, {
121
+ role: "switch",
122
+ backgroundType: backgroundType,
123
+ "aria-checked": checked !== null && checked !== void 0 ? checked : innerChecked,
124
+ "aria-disabled": disabled,
125
+ disabled: disabled,
126
+ "aria-labelledby": labelId,
127
+ tabIndex: !disabled ? tabIndex : -1,
128
+ ref: refTrack
129
+ })), labelPosition === "after" && label && /*#__PURE__*/_react["default"].createElement(LabelContainer, {
130
+ id: labelId,
131
+ labelPosition: labelPosition,
132
+ disabled: disabled,
133
+ backgroundType: backgroundType,
134
+ label: label
135
+ }, optional && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, translatedLabels.formFields.optionalLabel), " ", label)));
118
136
  };
119
137
 
120
138
  var sizes = {
@@ -122,15 +140,67 @@ var sizes = {
122
140
  medium: "240px",
123
141
  large: "480px",
124
142
  fillParent: "100%",
125
- fitContent: "unset"
143
+ fitContent: "fit-content"
126
144
  };
127
145
 
128
146
  var calculateWidth = function calculateWidth(margin, size) {
129
147
  return size === "fillParent" ? "calc(".concat(sizes[size], " - ").concat((0, _utils.getMargin)(margin, "left"), " - ").concat((0, _utils.getMargin)(margin, "right"), ")") : sizes[size];
130
148
  };
131
149
 
132
- var SwitchContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n width: ", ";\n display: inline-flex;\n align-items: center;\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) {
150
+ var getDisabledColor = function getDisabledColor(props, element, subelement) {
151
+ switch (element) {
152
+ case "track":
153
+ switch (subelement) {
154
+ case "check":
155
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.disabledCheckedTrackBackgroundColorOnDark : props.theme.disabledCheckedTrackBackgroundColor;
156
+
157
+ case "uncheck":
158
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.disabledUncheckedTrackBackgroundColorOnDark : props.theme.disabledUncheckedTrackBackgroundColor;
159
+ }
160
+
161
+ case "thumb":
162
+ switch (subelement) {
163
+ case "check":
164
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.disabledCheckedThumbBackgroundColorOnDark : props.theme.disabledCheckedThumbBackgroundColor;
165
+
166
+ case "uncheck":
167
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.disabledUncheckedThumbBackgroundColorOnDark : props.theme.disabledUncheckedThumbBackgroundColor;
168
+ }
169
+
170
+ case "label":
171
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.disabledLabelFontColorOnDark : props.theme.disabledLabelFontColor;
172
+ }
173
+ };
174
+
175
+ var getNotDisabledColor = function getNotDisabledColor(props, element, subelement) {
176
+ switch (element) {
177
+ case "track":
178
+ switch (subelement) {
179
+ case "check":
180
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.checkedTrackBackgroundColorOnDark : props.theme.checkedTrackBackgroundColor;
181
+
182
+ case "uncheck":
183
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.uncheckedTrackBackgroundColorOnDark : props.theme.uncheckedTrackBackgroundColor;
184
+ }
185
+
186
+ case "thumb":
187
+ switch (subelement) {
188
+ case "check":
189
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.checkedThumbBackgroundColorOnDark : props.theme.checkedThumbBackgroundColor;
190
+
191
+ case "uncheck":
192
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.uncheckedThumbBackgroundColorOnDark : props.theme.uncheckedThumbBackgroundColor;
193
+ }
194
+
195
+ case "label":
196
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.labelFontColorOnDark : props.theme.labelFontColor;
197
+ }
198
+ };
199
+
200
+ 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) {
133
201
  return calculateWidth(props.margin, props.size);
202
+ }, function (props) {
203
+ return props.disabled === true ? "not-allowed" : "pointer";
134
204
  }, function (props) {
135
205
  return props.margin && (0, _typeof2["default"])(props.margin) !== "object" ? _variables.spaces[props.margin] : "0px";
136
206
  }, function (props) {
@@ -141,54 +211,50 @@ var SwitchContainer = _styledComponents["default"].div(_templateObject || (_temp
141
211
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.bottom ? _variables.spaces[props.margin.bottom] : "";
142
212
  }, function (props) {
143
213
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.left ? _variables.spaces[props.margin.left] : "";
214
+ });
215
+
216
+ 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) {
217
+ return props.disabled ? getDisabledColor(props, "label") : getNotDisabledColor(props, "label");
144
218
  }, function (props) {
145
- return props.disabled ? "not-allowed" : "default";
146
- }, function (props) {
147
- return props.theme.trackWidth;
148
- }, function (props) {
149
- return "".concat(props.backgroundType === "dark" ? props.theme.thumbFocusColorOnDark : props.theme.thumbFocusColor, " solid 2px");
150
- }, function (props) {
151
- return props.backgroundType === "dark" ? props.theme.uncheckedTrackBackgroundColorOnDark : props.theme.uncheckedTrackBackgroundColor;
152
- }, function (props) {
153
- return props.theme.trackHeight;
154
- }, function (props) {
155
- return props.theme.thumbWidth;
156
- }, function (props) {
157
- return props.theme.thumbHeight;
219
+ return props.theme.labelFontFamily;
158
220
  }, function (props) {
159
- return props.backgroundType === "dark" ? props.theme.uncheckedThumbBackgroundColorOnDark : props.theme.uncheckedThumbBackgroundColor;
221
+ return props.theme.labelFontSize;
160
222
  }, function (props) {
161
- return props.backgroundType === "dark" ? props.theme.disabledUncheckedThumbBackgroundColorOnDark : props.theme.disabledUncheckedThumbBackgroundColor;
223
+ return props.disabled ? props.theme.disabledLabelFontStyle : props.theme.labelFontStyle;
162
224
  }, function (props) {
163
- return props.backgroundType === "dark" ? props.theme.disabledUncheckedTrackBackgroundColorOnDark : props.theme.disabledUncheckedTrackBackgroundColor;
225
+ return props.theme.labelFontWeight;
164
226
  }, function (props) {
165
- return props.backgroundType === "dark" ? props.theme.disabledCheckedThumbBackgroundColorOnDark : props.theme.disabledCheckedThumbBackgroundColor;
227
+ return !props.label ? "margin: 0px;" : props.labelPosition === "after" ? "margin-left: ".concat(props.theme.spaceBetweenLabelSwitch, ";") : "margin-right: ".concat(props.theme.spaceBetweenLabelSwitch, ";");
166
228
  }, function (props) {
167
- return props.backgroundType === "dark" ? props.theme.disabledCheckedTrackBackgroundColorOnDark : props.theme.disabledCheckedTrackBackgroundColor;
229
+ return props.labelPosition === "before" && "order: -1";
230
+ });
231
+
232
+ 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"])));
233
+
234
+ var ValueInput = _styledComponents["default"].input(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: none;\n"])));
235
+
236
+ 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 z-index: 1;\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) {
237
+ return props.theme.trackWidth;
168
238
  }, function (props) {
169
- return props.backgroundType === "dark" ? props.theme.checkedThumbBackgroundColorOnDark : props.theme.checkedThumbBackgroundColor;
239
+ return props.theme.trackHeight;
170
240
  }, function (props) {
171
- return props.theme.thumbShift;
241
+ return props.disabled ? "not-allowed" : "pointer";
172
242
  }, function (props) {
173
- return props.backgroundType === "dark" ? props.theme.checkedTrackBackgroundColorOnDark : props.theme.checkedTrackBackgroundColor;
174
- });
175
-
176
- 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\n ", "\n"])), function (props) {
177
- return props.disabled ? props.backgroundType === "dark" ? props.theme.disabledLabelFontColorOnDark : props.theme.disabledLabelFontColor : props.backgroundType === "dark" ? props.theme.labelFontColorOnDark : props.theme.labelFontColor;
243
+ return "".concat(props.backgroundType === "dark" ? props.theme.thumbFocusColorOnDark : props.theme.thumbFocusColor, " solid 2px");
178
244
  }, function (props) {
179
- return props.theme.labelFontFamily;
245
+ return props.theme.thumbWidth;
180
246
  }, function (props) {
181
- return props.theme.labelFontSize;
247
+ return props.theme.thumbHeight;
182
248
  }, function (props) {
183
- return props.disabled ? props.theme.disabledLabelFontStyle : props.theme.labelFontStyle;
249
+ return props.disabled ? getDisabledColor(props, "thumb", "uncheck") : getNotDisabledColor(props, "thumb", "uncheck");
184
250
  }, function (props) {
185
- return props.theme.labelFontWeight;
251
+ return props.disabled ? getDisabledColor(props, "track", "uncheck") : getNotDisabledColor(props, "track", "uncheck");
186
252
  }, function (props) {
187
- return props.disabled === true ? "not-allowed" : "pointer";
253
+ return props.disabled ? getDisabledColor(props, "track", "check") : getNotDisabledColor(props, "track", "check");
188
254
  }, function (props) {
189
- return props.labelPosition === "after" ? "margin-left: ".concat(props.theme.spaceBetweenLabelSwitch, ";") : "margin-right: ".concat(props.theme.spaceBetweenLabelSwitch, ";");
255
+ return props.theme.thumbShift;
190
256
  }, function (props) {
191
- return props.labelPosition === "before" && "order: -1";
257
+ return props.disabled ? getDisabledColor(props, "thumb", "check") : getNotDisabledColor(props, "thumb", "check");
192
258
  });
193
259
 
194
260
  var _default = DxcSwitch;
@@ -1,5 +1,4 @@
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";
@@ -21,6 +20,10 @@ export const Chromatic = () => (
21
20
  <Title title="Without label" theme="light" level={4} />
22
21
  <DxcSwitch />
23
22
  </ExampleContainer>
23
+ <ExampleContainer pseudoState="pseudo-focus-visible">
24
+ <Title title="Focused" theme="light" level={4} />
25
+ <DxcSwitch label="Switch" labelPosition="after" />
26
+ </ExampleContainer>
24
27
  <ExampleContainer>
25
28
  <Title title="Checked" theme="light" level={4} />
26
29
  <DxcSwitch label="Switch" defaultChecked />
@@ -47,6 +50,10 @@ export const Chromatic = () => (
47
50
  <Title title="With label" theme="dark" level={4} />
48
51
  <DxcSwitch label="Switch" />
49
52
  </ExampleContainer>
53
+ <ExampleContainer pseudoState="pseudo-focus-visible">
54
+ <Title title="Focused" theme="dark" level={4} />
55
+ <DxcSwitch label="Switch" labelPosition="after" />
56
+ </ExampleContainer>
50
57
  <ExampleContainer>
51
58
  <Title title="Checked" theme="dark" level={4} />
52
59
  <DxcSwitch label="Switch" defaultChecked />
@@ -129,32 +136,3 @@ export const Chromatic = () => (
129
136
  </ExampleContainer>
130
137
  </>
131
138
  );
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} />
150
- <DxcSwitch label="Switch" />
151
- </ExampleContainer>
152
- </DarkContainer>
153
- </BackgroundColorProvider>
154
- );
155
-
156
- export const FocusedSwitchOnDark = DarkSwitch.bind({});
157
- FocusedSwitchOnDark.play = async ({ canvasElement }) => {
158
- const canvas = within(canvasElement);
159
- canvas.getByRole("switch").focus();
160
- };
@@ -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
  });
package/switch/types.d.ts CHANGED
@@ -1,11 +1,11 @@
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;
6
6
  right?: Space;
7
7
  };
8
- declare type Props = {
8
+ export declare type SwitchPropsType = {
9
9
  /**
10
10
  * Initial state of the switch, only when it is uncontrolled.
11
11
  */
@@ -59,4 +59,3 @@ declare type Props = {
59
59
  */
60
60
  tabIndex?: number;
61
61
  };
62
- export default Props;
package/tabs/Tab.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { TabProps } from "./types";
3
+ declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponent<TabProps & React.RefAttributes<HTMLButtonElement>>>;
4
+ export default _default;