@dxc-technology/halstack-react 0.0.0-1e57e26 → 0.0.0-1e5db1e

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 (135) hide show
  1. package/HalstackContext.d.ts +12 -0
  2. package/HalstackContext.js +295 -0
  3. package/accordion/Accordion.d.ts +1 -1
  4. package/accordion/Accordion.js +7 -28
  5. package/accordion/Accordion.stories.tsx +11 -11
  6. package/accordion/Accordion.test.js +19 -4
  7. package/accordion/types.d.ts +4 -0
  8. package/accordion-group/AccordionGroup.d.ts +1 -1
  9. package/accordion-group/AccordionGroup.js +13 -15
  10. package/accordion-group/AccordionGroup.stories.tsx +1 -1
  11. package/accordion-group/AccordionGroup.test.js +24 -6
  12. package/accordion-group/types.d.ts +4 -0
  13. package/alert/Alert.js +4 -1
  14. package/badge/Badge.d.ts +1 -1
  15. package/badge/Badge.js +5 -3
  16. package/badge/types.d.ts +1 -0
  17. package/bleed/types.d.ts +24 -0
  18. package/box/Box.js +22 -32
  19. package/button/Button.js +14 -11
  20. package/card/Card.js +27 -28
  21. package/checkbox/Checkbox.d.ts +1 -1
  22. package/checkbox/Checkbox.js +43 -39
  23. package/checkbox/Checkbox.stories.tsx +124 -128
  24. package/checkbox/Checkbox.test.js +13 -0
  25. package/checkbox/types.d.ts +7 -3
  26. package/common/variables.js +181 -84
  27. package/date-input/DateInput.js +53 -39
  28. package/date-input/DateInput.stories.tsx +7 -7
  29. package/date-input/DateInput.test.js +69 -59
  30. package/date-input/types.d.ts +16 -9
  31. package/dialog/Dialog.js +4 -32
  32. package/dropdown/Dropdown.js +13 -17
  33. package/file-input/FileInput.js +9 -6
  34. package/file-input/FileItem.js +7 -5
  35. package/footer/Footer.js +15 -88
  36. package/header/Header.js +27 -48
  37. package/header/Header.stories.tsx +46 -36
  38. package/header/Header.test.js +18 -2
  39. package/inset/types.d.ts +24 -0
  40. package/layout/ApplicationLayout.d.ts +4 -3
  41. package/layout/ApplicationLayout.js +78 -114
  42. package/layout/ApplicationLayout.stories.tsx +14 -59
  43. package/layout/Icons.d.ts +5 -0
  44. package/layout/Icons.js +13 -2
  45. package/layout/SidenavContext.d.ts +5 -0
  46. package/layout/SidenavContext.js +19 -0
  47. package/layout/types.d.ts +4 -10
  48. package/link/Link.d.ts +3 -2
  49. package/link/Link.js +57 -74
  50. package/link/Link.stories.tsx +87 -52
  51. package/link/Link.test.js +7 -15
  52. package/link/types.d.ts +7 -23
  53. package/main.d.ts +4 -3
  54. package/main.js +23 -9
  55. package/number-input/NumberInput.js +11 -18
  56. package/number-input/NumberInput.stories.tsx +5 -5
  57. package/number-input/NumberInput.test.js +2 -4
  58. package/number-input/types.d.ts +17 -10
  59. package/package.json +6 -5
  60. package/paginator/Paginator.js +17 -38
  61. package/password-input/PasswordInput.js +7 -4
  62. package/password-input/PasswordInput.test.js +3 -6
  63. package/password-input/types.d.ts +14 -11
  64. package/progress-bar/ProgressBar.js +1 -1
  65. package/progress-bar/ProgressBar.stories.jsx +11 -11
  66. package/quick-nav/QuickNav.d.ts +4 -0
  67. package/quick-nav/QuickNav.js +112 -0
  68. package/quick-nav/QuickNav.stories.tsx +237 -0
  69. package/quick-nav/types.d.ts +21 -0
  70. package/{radio → quick-nav}/types.js +0 -0
  71. package/radio-group/Radio.js +1 -1
  72. package/radio-group/RadioGroup.js +8 -6
  73. package/row/types.d.ts +18 -0
  74. package/select/Listbox.d.ts +4 -0
  75. package/select/Listbox.js +152 -0
  76. package/select/Option.js +1 -1
  77. package/select/Select.js +66 -161
  78. package/select/Select.stories.tsx +14 -2
  79. package/select/Select.test.js +335 -231
  80. package/select/types.d.ts +33 -11
  81. package/sidenav/Sidenav.d.ts +1 -1
  82. package/sidenav/Sidenav.js +20 -9
  83. package/slider/Slider.d.ts +1 -1
  84. package/slider/Slider.js +2 -1
  85. package/slider/Slider.stories.tsx +8 -8
  86. package/slider/Slider.test.js +31 -10
  87. package/slider/types.d.ts +4 -0
  88. package/spinner/Spinner.js +1 -1
  89. package/switch/Switch.d.ts +1 -1
  90. package/switch/Switch.js +35 -19
  91. package/switch/Switch.stories.tsx +14 -14
  92. package/switch/Switch.test.js +25 -0
  93. package/switch/types.d.ts +6 -2
  94. package/tabs/Tabs.d.ts +1 -1
  95. package/tabs/Tabs.js +9 -11
  96. package/tabs/Tabs.stories.tsx +0 -8
  97. package/tabs/Tabs.test.js +26 -9
  98. package/tabs/types.d.ts +4 -0
  99. package/tabs-nav/NavTabs.d.ts +8 -0
  100. package/tabs-nav/NavTabs.js +125 -0
  101. package/tabs-nav/NavTabs.stories.tsx +170 -0
  102. package/tabs-nav/NavTabs.test.js +82 -0
  103. package/tabs-nav/Tab.d.ts +4 -0
  104. package/tabs-nav/Tab.js +132 -0
  105. package/tabs-nav/types.d.ts +53 -0
  106. package/tabs-nav/types.js +5 -0
  107. package/tag/Tag.js +5 -8
  108. package/text-input/Suggestion.d.ts +4 -0
  109. package/text-input/Suggestion.js +55 -0
  110. package/text-input/TextInput.js +48 -76
  111. package/text-input/TextInput.test.js +22 -35
  112. package/text-input/types.d.ts +27 -12
  113. package/textarea/Textarea.js +12 -23
  114. package/textarea/Textarea.test.js +10 -20
  115. package/textarea/types.d.ts +14 -11
  116. package/toggle-group/ToggleGroup.d.ts +1 -1
  117. package/toggle-group/ToggleGroup.js +5 -4
  118. package/toggle-group/ToggleGroup.stories.tsx +4 -4
  119. package/toggle-group/ToggleGroup.test.js +35 -4
  120. package/toggle-group/types.d.ts +8 -0
  121. package/useTheme.js +2 -2
  122. package/useTranslatedLabels.d.ts +2 -0
  123. package/useTranslatedLabels.js +20 -0
  124. package/wizard/Wizard.d.ts +1 -1
  125. package/wizard/Wizard.js +55 -44
  126. package/wizard/Wizard.stories.tsx +13 -23
  127. package/wizard/Wizard.test.js +36 -23
  128. package/wizard/types.d.ts +6 -2
  129. package/ThemeContext.d.ts +0 -10
  130. package/ThemeContext.js +0 -243
  131. package/radio/Radio.d.ts +0 -4
  132. package/radio/Radio.js +0 -174
  133. package/radio/Radio.stories.tsx +0 -192
  134. package/radio/Radio.test.js +0 -71
  135. package/radio/types.d.ts +0 -54
package/select/types.d.ts CHANGED
@@ -79,9 +79,12 @@ declare type CommonProps = {
79
79
  */
80
80
  searchable?: boolean;
81
81
  /**
82
- * If it is defined, the component will change its appearance, showing
83
- * the error below the select component. If it is not defined, the error
84
- * messages will be managed internally, but never displayed on its own.
82
+ * If it is a defined value and also a truthy string, the component will
83
+ * change its appearance, showing the error below the select component.
84
+ * If the defined value is an empty string, it will reserve a space below
85
+ * the component for a future error, but it would not change its look. In
86
+ * case of being undefined or null, both the appearance and the space for
87
+ * the error message would not be modified.
85
88
  */
86
89
  error?: string;
87
90
  /**
@@ -117,21 +120,21 @@ declare type SingleSelect = CommonProps & {
117
120
  /**
118
121
  * This function will be called when the user selects an option.
119
122
  * An object including the current value and the error (if the value entered is not valid)
120
- * will be passed to this function. If there is no error, error will be null.
123
+ * will be passed to this function. If there is no error, error will not be defined.
121
124
  */
122
125
  onChange?: (val: {
123
126
  value: string;
124
- error: string;
127
+ error?: string;
125
128
  }) => void;
126
129
  /**
127
130
  * This function will be called when the select loses the focus. An
128
131
  * object including the value and the error (if the value
129
132
  * selected is not valid) will be passed to this function. If there is no error,
130
- * error will be null.
133
+ * error will not be defined.
131
134
  */
132
135
  onBlur?: (val: {
133
136
  value: string;
134
- error: string;
137
+ error?: string;
135
138
  }) => void;
136
139
  };
137
140
  declare type MultipleSelect = CommonProps & {
@@ -157,7 +160,7 @@ declare type MultipleSelect = CommonProps & {
157
160
  */
158
161
  onChange?: (val: {
159
162
  value: string[];
160
- error: string;
163
+ error?: string;
161
164
  }) => void;
162
165
  /**
163
166
  * This function will be called when the select loses the focus. An
@@ -167,7 +170,7 @@ declare type MultipleSelect = CommonProps & {
167
170
  */
168
171
  onBlur?: (val: {
169
172
  value: string[];
170
- error: string;
173
+ error?: string;
171
174
  }) => void;
172
175
  };
173
176
  declare type Props = SingleSelect | MultipleSelect;
@@ -180,12 +183,31 @@ export declare type OptionProps = {
180
183
  onClick: (option: Option) => void;
181
184
  multiple: boolean;
182
185
  visualFocused: boolean;
183
- isGroupedOption: boolean;
186
+ isGroupedOption?: boolean;
184
187
  isLastOption: boolean;
185
188
  isSelected: boolean;
186
189
  };
187
190
  /**
188
- * Reference to the component.
191
+ * Listbox from the select component.
192
+ */
193
+ export declare type ListboxProps = {
194
+ id: string;
195
+ currentValue: string | string[];
196
+ options: Option[] | OptionGroup[];
197
+ visualFocusIndex: number;
198
+ lastOptionIndex: number;
199
+ multiple: boolean;
200
+ optional: boolean;
201
+ optionalItem: Option;
202
+ searchable: boolean;
203
+ handleOptionOnClick: (option: Option) => void;
204
+ };
205
+ /**
206
+ * Reference to the listbox component.
207
+ */
208
+ export declare type ListboxRefType = HTMLUListElement;
209
+ /**
210
+ * Reference to the select component.
189
211
  */
190
212
  export declare type RefType = HTMLDivElement;
191
213
  export default Props;
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import SidenavPropsType, { SidenavTitlePropsType, SidenavSubtitlePropsType, SidenavLinkPropsType } from "./types.js";
2
+ import SidenavPropsType, { SidenavTitlePropsType, SidenavSubtitlePropsType, SidenavLinkPropsType } from "./types";
3
3
  declare const DxcSidenav: {
4
4
  ({ padding, children }: SidenavPropsType): JSX.Element;
5
5
  Title: ({ children }: SidenavTitlePropsType) => JSX.Element;
@@ -21,6 +21,8 @@ var _useTheme = _interopRequireDefault(require("../useTheme"));
21
21
 
22
22
  var _BackgroundColorContext = require("../BackgroundColorContext");
23
23
 
24
+ var _SidenavContext = require("../layout/SidenavContext");
25
+
24
26
  var _templateObject, _templateObject2, _templateObject3, _templateObject4;
25
27
 
26
28
  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); }
@@ -33,7 +35,7 @@ var DxcSidenav = function DxcSidenav(_ref) {
33
35
  var colorsTheme = (0, _useTheme["default"])();
34
36
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
35
37
  theme: colorsTheme.sidenav
36
- }, /*#__PURE__*/_react["default"].createElement(SideNavContainer, {
38
+ }, /*#__PURE__*/_react["default"].createElement(SidenavContainer, {
37
39
  padding: padding
38
40
  }, /*#__PURE__*/_react["default"].createElement(_BackgroundColorContext.BackgroundColorProvider, {
39
41
  color: colorsTheme.sidenav.backgroundColor
@@ -42,12 +44,12 @@ var DxcSidenav = function DxcSidenav(_ref) {
42
44
 
43
45
  var Title = function Title(_ref2) {
44
46
  var children = _ref2.children;
45
- return /*#__PURE__*/_react["default"].createElement(SideNavMenuTitle, null, children);
47
+ return /*#__PURE__*/_react["default"].createElement(SidenavMenuTitle, null, children);
46
48
  };
47
49
 
48
50
  var Subtitle = function Subtitle(_ref3) {
49
51
  var children = _ref3.children;
50
- return /*#__PURE__*/_react["default"].createElement(SideNavMenuSubTitle, null, children);
52
+ return /*#__PURE__*/_react["default"].createElement(SidenavMenuSubTitle, null, children);
51
53
  };
52
54
 
53
55
  var Link = function Link(_ref4) {
@@ -56,15 +58,24 @@ var Link = function Link(_ref4) {
56
58
  href = _ref4.href,
57
59
  onClick = _ref4.onClick,
58
60
  children = _ref4.children;
59
- return /*#__PURE__*/_react["default"].createElement(SideNavMenuLink, {
61
+ var setIsSidenavVisibleResponsive = (0, _SidenavContext.useResponsiveSidenavVisibility)();
62
+
63
+ var handleClick = function handleClick() {
64
+ onClick === null || onClick === void 0 ? void 0 : onClick();
65
+ setIsSidenavVisibleResponsive === null || setIsSidenavVisibleResponsive === void 0 ? void 0 : setIsSidenavVisibleResponsive(false);
66
+ };
67
+
68
+ return /*#__PURE__*/_react["default"].createElement(SidenavMenuLink, {
60
69
  tabIndex: tabIndex,
61
70
  href: href,
62
- onClick: onClick
71
+ onClick: handleClick
63
72
  }, children);
64
73
  };
65
74
 
66
- var SideNavContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n background-color: ", ";\n max-width: 300px;\n width: ", ";\n padding: ", ";\n\n overflow-y: auto;\n overflow-x: hidden;\n ::-webkit-scrollbar {\n width: 2px;\n }\n ::-webkit-scrollbar-track {\n background-color: ", ";\n border-radius: 3px;\n }\n ::-webkit-scrollbar-thumb {\n background-color: ", ";\n border-radius: 3px;\n }\n"])), function (props) {
75
+ var SidenavContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n background-color: ", ";\n\n @media (max-width: ", "rem) {\n width: ", ";\n }\n\n width: ", ";\n padding: ", ";\n\n overflow-y: auto;\n overflow-x: hidden;\n ::-webkit-scrollbar {\n width: 2px;\n }\n ::-webkit-scrollbar-track {\n background-color: ", ";\n border-radius: 3px;\n }\n ::-webkit-scrollbar-thumb {\n background-color: ", ";\n border-radius: 3px;\n }\n"])), function (props) {
67
76
  return props.theme.backgroundColor;
77
+ }, _variables.responsiveSizes.medium, function (props) {
78
+ return props.padding ? "calc(100vw - ".concat(_variables.spaces[props.padding], " - ").concat(_variables.spaces[props.padding], ")") : "100vw";
68
79
  }, function (props) {
69
80
  return props.padding ? "calc(300px - ".concat(_variables.spaces[props.padding], " - ").concat(_variables.spaces[props.padding], ")") : "300px";
70
81
  }, function (props) {
@@ -75,7 +86,7 @@ var SideNavContainer = _styledComponents["default"].div(_templateObject || (_tem
75
86
  return props.theme.scrollBarThumbColor;
76
87
  });
77
88
 
78
- var SideNavMenuTitle = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n color: ", ";\n letter-spacing: ", ";\n text-transform: ", ";\n margin-bottom: 16px;\n"])), function (props) {
89
+ var SidenavMenuTitle = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n color: ", ";\n letter-spacing: ", ";\n text-transform: ", ";\n margin-bottom: 16px;\n"])), function (props) {
79
90
  return props.theme.titleFontFamily;
80
91
  }, function (props) {
81
92
  return props.theme.titleFontSize;
@@ -91,7 +102,7 @@ var SideNavMenuTitle = _styledComponents["default"].div(_templateObject2 || (_te
91
102
  return props.theme.titleFontTextTransform;
92
103
  });
93
104
 
94
- var SideNavMenuSubTitle = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n color: ", ";\n letter-spacing: ", ";\n text-transform: ", ";\n margin-bottom: 4px;\n"])), function (props) {
105
+ var SidenavMenuSubTitle = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n color: ", ";\n letter-spacing: ", ";\n text-transform: ", ";\n margin-bottom: 4px;\n"])), function (props) {
95
106
  return props.theme.subtitleFontFamily;
96
107
  }, function (props) {
97
108
  return props.theme.subtitleFontSize;
@@ -107,7 +118,7 @@ var SideNavMenuSubTitle = _styledComponents["default"].div(_templateObject3 || (
107
118
  return props.theme.subtitleFontTextTransform;
108
119
  });
109
120
 
110
- var SideNavMenuLink = _styledComponents["default"].a(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n color: ", ";\n letter-spacing: ", ";\n text-transform: ", ";\n text-decoration: ", ";\n margin: ", ";\n cursor: pointer;\n\n :focus-visible {\n outline: 2px solid ", ";\n outline-offset: 1px;\n }\n"])), function (props) {
121
+ var SidenavMenuLink = _styledComponents["default"].a(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n color: ", ";\n letter-spacing: ", ";\n text-transform: ", ";\n text-decoration: ", ";\n margin: ", ";\n cursor: pointer;\n\n :focus-visible {\n outline: 2px solid ", ";\n outline-offset: 1px;\n }\n"])), function (props) {
111
122
  return props.theme.linkFontFamily;
112
123
  }, function (props) {
113
124
  return props.theme.linkFontSize;
@@ -1,4 +1,4 @@
1
1
  /// <reference types="react" />
2
2
  import SliderPropsType from "./types";
3
- declare const DxcSlider: ({ label, name, value, helperText, minValue, maxValue, step, showLimitsValues, showInput, disabled, marks, onChange, onDragEnd, labelFormatCallback, margin, size, }: SliderPropsType) => JSX.Element;
3
+ declare const DxcSlider: ({ label, name, defaultValue, value, helperText, minValue, maxValue, step, showLimitsValues, showInput, disabled, marks, onChange, onDragEnd, labelFormatCallback, margin, size, }: SliderPropsType) => JSX.Element;
4
4
  export default DxcSlider;
package/slider/Slider.js CHANGED
@@ -44,6 +44,7 @@ var DxcSlider = function DxcSlider(_ref) {
44
44
  label = _ref$label === void 0 ? "" : _ref$label,
45
45
  _ref$name = _ref.name,
46
46
  name = _ref$name === void 0 ? "" : _ref$name,
47
+ defaultValue = _ref.defaultValue,
47
48
  value = _ref.value,
48
49
  _ref$helperText = _ref.helperText,
49
50
  helperText = _ref$helperText === void 0 ? "" : _ref$helperText,
@@ -68,7 +69,7 @@ var DxcSlider = function DxcSlider(_ref) {
68
69
  _ref$size = _ref.size,
69
70
  size = _ref$size === void 0 ? "fillParent" : _ref$size;
70
71
 
71
- var _useState = (0, _react.useState)(0),
72
+ var _useState = (0, _react.useState)(defaultValue !== null && defaultValue !== void 0 ? defaultValue : 0),
72
73
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
73
74
  innerValue = _useState2[0],
74
75
  setInnerValue = _useState2[1];
@@ -37,7 +37,7 @@ export const Chromatic = () => (
37
37
  label="Slider"
38
38
  helperText="Help message"
39
39
  disabled
40
- value={40}
40
+ defaultValue={40}
41
41
  minValue={0}
42
42
  maxValue={50}
43
43
  showLimitsValues
@@ -49,16 +49,16 @@ export const Chromatic = () => (
49
49
  <Title title="Variants" theme="light" level={2} />
50
50
  <ExampleContainer>
51
51
  <Title title="Continuous slider" theme="light" level={4} />
52
- <DxcSlider value={65} label="Slider" helperText="Help message" showLimitsValues />
52
+ <DxcSlider defaultValue={65} label="Slider" helperText="Help message" showLimitsValues />
53
53
  </ExampleContainer>
54
54
  <ExampleContainer>
55
55
  <Title title="Discrete slider" theme="light" level={4} />
56
- <DxcSlider value={20} label="Slider" helperText="Help message" showLimitsValues marks step={5} />
56
+ <DxcSlider defaultValue={20} label="Slider" helperText="Help message" showLimitsValues marks step={5} />
57
57
  </ExampleContainer>
58
58
  <ExampleContainer>
59
59
  <Title title="Discrete slider with input" theme="light" level={4} />
60
60
  <DxcSlider
61
- value={20}
61
+ defaultValue={20}
62
62
  minValue={0}
63
63
  maxValue={50}
64
64
  label="Slider"
@@ -94,7 +94,7 @@ export const Chromatic = () => (
94
94
  label="Slider"
95
95
  helperText="Help message"
96
96
  disabled
97
- value={40}
97
+ defaultValue={40}
98
98
  minValue={0}
99
99
  maxValue={50}
100
100
  showLimitsValues
@@ -105,16 +105,16 @@ export const Chromatic = () => (
105
105
  </ExampleContainer>
106
106
  <ExampleContainer>
107
107
  <Title title="Continuous slider" theme="dark" level={4} />
108
- <DxcSlider value={65} label="Slider" helperText="Help message" showLimitsValues />
108
+ <DxcSlider defaultValue={65} label="Slider" helperText="Help message" showLimitsValues />
109
109
  </ExampleContainer>
110
110
  <ExampleContainer>
111
111
  <Title title="Discrete slider" theme="dark" level={4} />
112
- <DxcSlider value={20} label="Slider" helperText="Help message" showLimitsValues marks step={5} />
112
+ <DxcSlider defaultValue={20} label="Slider" helperText="Help message" showLimitsValues marks step={5} />
113
113
  </ExampleContainer>
114
114
  <ExampleContainer>
115
115
  <Title title="Discrete slider with input" theme="dark" level={4} />
116
116
  <DxcSlider
117
- value={20}
117
+ defaultValue={20}
118
118
  minValue={0}
119
119
  maxValue={50}
120
120
  label="Slider"
@@ -20,10 +20,25 @@ describe("Slider component tests", function () {
20
20
  expect(getByText("0")).toBeTruthy();
21
21
  expect(getByText("100")).toBeTruthy();
22
22
  });
23
+ test("Slider renders with correct initial value when it is uncontrolled", function () {
24
+ var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
25
+ defaultValue: 30,
26
+ minValue: 0,
27
+ maxValue: 100,
28
+ showLimitsValues: true,
29
+ showInput: true
30
+ })),
31
+ getByRole = _render2.getByRole;
32
+
33
+ var slider = getByRole("slider");
34
+ var input = getByRole("textbox");
35
+ expect(slider.getAttribute("aria-valuenow")).toBe("30");
36
+ expect(input.value).toBe("30");
37
+ });
23
38
  test("Calls correct function onChange in controlled slider", function () {
24
39
  var onChange = jest.fn();
25
40
 
26
- var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
41
+ var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
27
42
  minValue: 0,
28
43
  maxValue: 100,
29
44
  onChange: onChange,
@@ -31,8 +46,10 @@ describe("Slider component tests", function () {
31
46
  value: 13,
32
47
  showInput: true
33
48
  })),
34
- getByRole = _render2.getByRole;
49
+ getByRole = _render3.getByRole;
35
50
 
51
+ expect(getByRole("slider").getAttribute("aria-valuenow")).toBe("13");
52
+ expect(getByRole("textbox").value).toBe("13");
36
53
  (0, _react2.act)(function () {
37
54
  _react2.fireEvent.change(getByRole("textbox"), {
38
55
  target: {
@@ -41,18 +58,20 @@ describe("Slider component tests", function () {
41
58
  });
42
59
  });
43
60
  expect(onChange).toHaveBeenCalledWith(25);
61
+ expect(getByRole("slider").getAttribute("aria-valuenow")).toBe("13");
62
+ expect(getByRole("textbox").value).toBe("13");
44
63
  });
45
64
  test("Calls correct function onChange in uncontrolled slider", function () {
46
65
  var onChange = jest.fn();
47
66
 
48
- var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
67
+ var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
49
68
  minValue: 0,
50
69
  maxValue: 100,
51
70
  onChange: onChange,
52
71
  showLimitsValues: true,
53
72
  showInput: true
54
73
  })),
55
- getByRole = _render3.getByRole;
74
+ getByRole = _render4.getByRole;
56
75
 
57
76
  (0, _react2.act)(function () {
58
77
  _react2.fireEvent.change(getByRole("textbox"), {
@@ -62,11 +81,13 @@ describe("Slider component tests", function () {
62
81
  });
63
82
  });
64
83
  expect(onChange).toHaveBeenCalledWith(25);
84
+ expect(getByRole("slider").getAttribute("aria-valuenow")).toBe("25");
85
+ expect(getByRole("textbox").value).toBe("25");
65
86
  });
66
87
  test("Disabled slider have disabled input", function () {
67
88
  var onChange = jest.fn();
68
89
 
69
- var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
90
+ var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
70
91
  minValue: 0,
71
92
  maxValue: 100,
72
93
  onChange: onChange,
@@ -75,7 +96,7 @@ describe("Slider component tests", function () {
75
96
  showInput: true,
76
97
  value: 13
77
98
  })),
78
- getByRole = _render4.getByRole;
99
+ getByRole = _render5.getByRole;
79
100
 
80
101
  (0, _react2.act)(function () {
81
102
  _react2.fireEvent.change(getByRole("textbox"), {
@@ -90,7 +111,7 @@ describe("Slider component tests", function () {
90
111
  test("Calls correct function onDragEnd", function () {
91
112
  var onDragEnd = jest.fn();
92
113
 
93
- var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
114
+ var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
94
115
  minValue: 0,
95
116
  maxValue: 100,
96
117
  showLimitsValues: true,
@@ -98,7 +119,7 @@ describe("Slider component tests", function () {
98
119
  onDragEnd: onDragEnd,
99
120
  value: 25
100
121
  })),
101
- getByRole = _render5.getByRole;
122
+ getByRole = _render6.getByRole;
102
123
 
103
124
  (0, _react2.act)(function () {
104
125
  _react2.fireEvent.mouseDown(getByRole("slider"));
@@ -112,7 +133,7 @@ describe("Slider component tests", function () {
112
133
  return "".concat(x, "$");
113
134
  });
114
135
 
115
- var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
136
+ var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
116
137
  minValue: 0,
117
138
  maxValue: 100,
118
139
  showLimitsValues: true,
@@ -120,7 +141,7 @@ describe("Slider component tests", function () {
120
141
  value: 25,
121
142
  labelFormatCallback: labelFormatCallback
122
143
  })),
123
- getByText = _render6.getByText;
144
+ getByText = _render7.getByText;
124
145
 
125
146
  expect(getByText("0$")).toBeTruthy();
126
147
  expect(getByText("100$")).toBeTruthy();
package/slider/types.d.ts CHANGED
@@ -14,6 +14,10 @@ declare type Props = {
14
14
  * Name attribute of the input element.
15
15
  */
16
16
  name?: string;
17
+ /**
18
+ * Initial value of the slider, only when it is uncontrolled.
19
+ */
20
+ defaultValue?: number;
17
21
  /**
18
22
  * The selected value. If undefined, the component will be uncontrolled and the value will be managed internally by the component.
19
23
  */
@@ -199,7 +199,7 @@ var SVGSpinner = _styledComponents["default"].svg(_templateObject8 || (_template
199
199
  var CircleSpinner = _styledComponents["default"].circle(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["\n fill: transparent;\n stroke-linecap: initial;\n vector-effect: non-scaling-stroke;\n animation: ", ";\n stroke: ", ";\n transform-origin: ", ";\n stroke-dasharray: ", ";\n stroke-width: ", ";\n stroke-dashoffset: ", ";\n"])), function (props) {
200
200
  return props.isDeterminated ? "none" : props.mode !== "small" ? "1.4s ease-in-out infinite both svg-circle-large" : "1.4s ease-in-out infinite both svg-circle-small";
201
201
  }, function (props) {
202
- return props.backgroundType === "dark" ? props.theme.trackCircleColorOnDark : props.theme.trackCircleColor;
202
+ return props.backgroundType === "dark" || props.mode === "overlay" ? props.theme.trackCircleColorOverlay : props.theme.trackCircleColor;
203
203
  }, function (props) {
204
204
  return !props.isDeterminated ? "50% 50%" : "";
205
205
  }, function (props) {
@@ -1,4 +1,4 @@
1
1
  /// <reference types="react" />
2
2
  import SwitchPropsType from "./types";
3
- declare const DxcSwitch: ({ checked, value, label, labelPosition, name, disabled, onChange, required, margin, size, tabIndex, }: SwitchPropsType) => JSX.Element;
3
+ declare const DxcSwitch: ({ defaultChecked, checked, value, label, labelPosition, name, disabled, optional, onChange, margin, size, tabIndex, }: SwitchPropsType) => JSX.Element;
4
4
  export default DxcSwitch;
package/switch/Switch.js CHANGED
@@ -21,7 +21,7 @@ var _styledComponents = _interopRequireWildcard(require("styled-components"));
21
21
 
22
22
  var _core = require("@material-ui/core");
23
23
 
24
- var _RequiredComponent = _interopRequireDefault(require("../common/RequiredComponent"));
24
+ var _uuid = require("uuid");
25
25
 
26
26
  var _variables = require("../common/variables.js");
27
27
 
@@ -29,6 +29,8 @@ var _utils = require("../common/utils.js");
29
29
 
30
30
  var _useTheme = _interopRequireDefault(require("../useTheme"));
31
31
 
32
+ var _useTranslatedLabels = _interopRequireDefault(require("../useTranslatedLabels"));
33
+
32
34
  var _BackgroundColorContext = _interopRequireDefault(require("../BackgroundColorContext"));
33
35
 
34
36
  var _templateObject, _templateObject2;
@@ -38,7 +40,8 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
38
40
  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
41
 
40
42
  var DxcSwitch = function DxcSwitch(_ref) {
41
- var checked = _ref.checked,
43
+ var defaultChecked = _ref.defaultChecked,
44
+ checked = _ref.checked,
42
45
  value = _ref.value,
43
46
  _ref$label = _ref.label,
44
47
  label = _ref$label === void 0 ? "" : _ref$label,
@@ -48,21 +51,28 @@ var DxcSwitch = function DxcSwitch(_ref) {
48
51
  name = _ref$name === void 0 ? "" : _ref$name,
49
52
  _ref$disabled = _ref.disabled,
50
53
  disabled = _ref$disabled === void 0 ? false : _ref$disabled,
54
+ _ref$optional = _ref.optional,
55
+ optional = _ref$optional === void 0 ? false : _ref$optional,
51
56
  onChange = _ref.onChange,
52
- _ref$required = _ref.required,
53
- required = _ref$required === void 0 ? false : _ref$required,
54
57
  margin = _ref.margin,
55
58
  _ref$size = _ref.size,
56
59
  size = _ref$size === void 0 ? "fitContent" : _ref$size,
57
60
  _ref$tabIndex = _ref.tabIndex,
58
61
  tabIndex = _ref$tabIndex === void 0 ? 0 : _ref$tabIndex;
59
62
 
60
- var _useState = (0, _react.useState)(false),
61
- _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
62
- innerChecked = _useState2[0],
63
- setInnerChecked = _useState2[1];
63
+ var _useState = (0, _react.useState)("switch-".concat((0, _uuid.v4)())),
64
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 1),
65
+ switchId = _useState2[0];
66
+
67
+ var labelId = "label-".concat(switchId);
68
+
69
+ var _useState3 = (0, _react.useState)(defaultChecked !== null && defaultChecked !== void 0 ? defaultChecked : false),
70
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
71
+ innerChecked = _useState4[0],
72
+ setInnerChecked = _useState4[1];
64
73
 
65
74
  var colorsTheme = (0, _useTheme["default"])();
75
+ var translatedLabels = (0, _useTranslatedLabels["default"])();
66
76
  var backgroundType = (0, _react.useContext)(_BackgroundColorContext["default"]);
67
77
 
68
78
  var handlerSwitchChange = function handlerSwitchChange(event) {
@@ -75,6 +85,14 @@ var DxcSwitch = function DxcSwitch(_ref) {
75
85
  } else onChange === null || onChange === void 0 ? void 0 : onChange(!checked);
76
86
  };
77
87
 
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
+
78
96
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
79
97
  theme: colorsTheme["switch"]
80
98
  }, /*#__PURE__*/_react["default"].createElement(SwitchContainer, {
@@ -83,22 +101,20 @@ var DxcSwitch = function DxcSwitch(_ref) {
83
101
  labelPosition: labelPosition,
84
102
  size: size,
85
103
  backgroundType: backgroundType
86
- }, /*#__PURE__*/_react["default"].createElement(_core.Switch, {
104
+ }, labelPosition === "before" && labelComponent, /*#__PURE__*/_react["default"].createElement(_core.Switch, {
87
105
  checked: checked !== null && checked !== void 0 ? checked : innerChecked,
88
106
  inputProps: {
89
107
  name: name,
108
+ "aria-labelledby": labelId,
109
+ role: "switch",
110
+ "aria-checked": checked !== null && checked !== void 0 ? checked : innerChecked,
90
111
  tabIndex: tabIndex
91
112
  },
92
113
  onChange: handlerSwitchChange,
93
114
  value: value,
94
115
  disabled: disabled,
95
116
  disableRipple: true
96
- }), /*#__PURE__*/_react["default"].createElement(LabelContainer, {
97
- labelPosition: labelPosition,
98
- onClick: !disabled && handlerSwitchChange,
99
- disabled: disabled,
100
- backgroundType: backgroundType
101
- }, required && /*#__PURE__*/_react["default"].createElement(_RequiredComponent["default"], null), label)));
117
+ }), labelPosition === "after" && labelComponent));
102
118
  };
103
119
 
104
120
  var sizes = {
@@ -113,10 +129,8 @@ var calculateWidth = function calculateWidth(margin, size) {
113
129
  return size === "fillParent" ? "calc(".concat(sizes[size], " - ").concat((0, _utils.getMargin)(margin, "left"), " - ").concat((0, _utils.getMargin)(margin, "right"), ")") : sizes[size];
114
130
  };
115
131
 
116
- 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\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) {
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) {
117
133
  return calculateWidth(props.margin, props.size);
118
- }, function (props) {
119
- return props.labelPosition === "after" ? "row" : "row-reverse";
120
134
  }, function (props) {
121
135
  return props.margin && (0, _typeof2["default"])(props.margin) !== "object" ? _variables.spaces[props.margin] : "0px";
122
136
  }, function (props) {
@@ -159,7 +173,7 @@ var SwitchContainer = _styledComponents["default"].div(_templateObject || (_temp
159
173
  return props.backgroundType === "dark" ? props.theme.checkedTrackBackgroundColorOnDark : props.theme.checkedTrackBackgroundColor;
160
174
  });
161
175
 
162
- 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
+ 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) {
163
177
  return props.disabled ? props.backgroundType === "dark" ? props.theme.disabledLabelFontColorOnDark : props.theme.disabledLabelFontColor : props.backgroundType === "dark" ? props.theme.labelFontColorOnDark : props.theme.labelFontColor;
164
178
  }, function (props) {
165
179
  return props.theme.labelFontFamily;
@@ -173,6 +187,8 @@ var LabelContainer = _styledComponents["default"].span(_templateObject2 || (_tem
173
187
  return props.disabled === true ? "not-allowed" : "pointer";
174
188
  }, function (props) {
175
189
  return props.labelPosition === "after" ? "margin-left: ".concat(props.theme.spaceBetweenLabelSwitch, ";") : "margin-right: ".concat(props.theme.spaceBetweenLabelSwitch, ";");
190
+ }, function (props) {
191
+ return props.labelPosition === "before" && "order: -1";
176
192
  });
177
193
 
178
194
  var _default = DxcSwitch;
@@ -23,23 +23,23 @@ export const Chromatic = () => (
23
23
  </ExampleContainer>
24
24
  <ExampleContainer>
25
25
  <Title title="Checked" theme="light" level={4} />
26
- <DxcSwitch label="Switch" checked />
26
+ <DxcSwitch label="Switch" defaultChecked />
27
27
  </ExampleContainer>
28
28
  <ExampleContainer>
29
- <Title title="Required" theme="light" level={4} />
30
- <DxcSwitch label="Switch" required />
29
+ <Title title="Optional" theme="light" level={4} />
30
+ <DxcSwitch label="Switch" optional />
31
31
  </ExampleContainer>
32
32
  <ExampleContainer>
33
33
  <Title title="Disabled" theme="light" level={4} />
34
34
  <DxcSwitch label="Switch" disabled />
35
35
  </ExampleContainer>
36
36
  <ExampleContainer>
37
- <Title title="Disabled required" theme="light" level={4} />
38
- <DxcSwitch label="Switch" disabled required labelPosition="after" />
37
+ <Title title="Disabled optional" theme="light" level={4} />
38
+ <DxcSwitch label="Switch" disabled optional labelPosition="after" />
39
39
  </ExampleContainer>
40
40
  <ExampleContainer>
41
41
  <Title title="Disabled checked" theme="light" level={4} />
42
- <DxcSwitch label="Switch" disabled checked labelPosition="after" />
42
+ <DxcSwitch label="Switch" disabled defaultChecked labelPosition="after" />
43
43
  </ExampleContainer>
44
44
  <BackgroundColorProvider color="#333333">
45
45
  <DarkContainer>
@@ -49,23 +49,23 @@ export const Chromatic = () => (
49
49
  </ExampleContainer>
50
50
  <ExampleContainer>
51
51
  <Title title="Checked" theme="dark" level={4} />
52
- <DxcSwitch label="Switch" checked />
52
+ <DxcSwitch label="Switch" defaultChecked />
53
53
  </ExampleContainer>
54
54
  <ExampleContainer>
55
- <Title title="Required" theme="dark" level={4} />
56
- <DxcSwitch label="Switch" required />
55
+ <Title title="Optional" theme="dark" level={4} />
56
+ <DxcSwitch label="Switch" optional />
57
57
  </ExampleContainer>
58
58
  <ExampleContainer>
59
59
  <Title title="Disabled" theme="dark" level={4} />
60
60
  <DxcSwitch label="Switch" disabled />
61
61
  </ExampleContainer>
62
62
  <ExampleContainer>
63
- <Title title="Disabled required" theme="dark" level={4} />
64
- <DxcSwitch label="Switch" disabled required labelPosition="after" />
63
+ <Title title="Disabled optional" theme="dark" level={4} />
64
+ <DxcSwitch label="Switch" disabled optional labelPosition="after" />
65
65
  </ExampleContainer>
66
66
  <ExampleContainer>
67
67
  <Title title="Disabled checked" theme="dark" level={4} />
68
- <DxcSwitch label="Switch" disabled checked labelPosition="after" />
68
+ <DxcSwitch label="Switch" disabled defaultChecked labelPosition="after" />
69
69
  </ExampleContainer>
70
70
  </DarkContainer>
71
71
  </BackgroundColorProvider>
@@ -139,7 +139,7 @@ const Switch = () => (
139
139
  export const FocusedSwitch = Switch.bind({});
140
140
  FocusedSwitch.play = async ({ canvasElement }) => {
141
141
  const canvas = within(canvasElement);
142
- canvas.getByRole("checkbox").focus();
142
+ canvas.getByRole("switch").focus();
143
143
  };
144
144
 
145
145
  const DarkSwitch = () => (
@@ -156,5 +156,5 @@ const DarkSwitch = () => (
156
156
  export const FocusedSwitchOnDark = DarkSwitch.bind({});
157
157
  FocusedSwitchOnDark.play = async ({ canvasElement }) => {
158
158
  const canvas = within(canvasElement);
159
- canvas.getByRole("checkbox").focus();
159
+ canvas.getByRole("switch").focus();
160
160
  };