@dxc-technology/halstack-react 0.0.0-f54247d → 0.0.0-f6d6be5

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 (220) hide show
  1. package/BackgroundColorContext.d.ts +2 -2
  2. package/BackgroundColorContext.js +1 -1
  3. package/HalstackContext.d.ts +1337 -5
  4. package/HalstackContext.js +113 -72
  5. package/README.md +47 -0
  6. package/accordion/Accordion.d.ts +1 -1
  7. package/accordion/Accordion.js +14 -37
  8. package/accordion/Accordion.stories.tsx +104 -113
  9. package/accordion/Accordion.test.js +1 -1
  10. package/accordion/types.d.ts +2 -14
  11. package/accordion-group/AccordionGroup.d.ts +4 -3
  12. package/accordion-group/AccordionGroup.js +23 -44
  13. package/accordion-group/AccordionGroup.stories.tsx +77 -76
  14. package/accordion-group/AccordionGroup.test.js +7 -17
  15. package/accordion-group/AccordionGroupAccordion.d.ts +4 -0
  16. package/accordion-group/AccordionGroupAccordion.js +43 -0
  17. package/accordion-group/types.d.ts +2 -14
  18. package/alert/Alert.js +4 -8
  19. package/alert/Alert.stories.tsx +28 -0
  20. package/alert/Alert.test.js +1 -1
  21. package/bleed/Bleed.stories.tsx +1 -0
  22. package/box/Box.d.ts +1 -1
  23. package/box/Box.js +7 -26
  24. package/box/Box.stories.tsx +38 -51
  25. package/box/Box.test.js +1 -1
  26. package/box/types.d.ts +0 -12
  27. package/bulleted-list/BulletedList.js +4 -2
  28. package/bulleted-list/BulletedList.stories.tsx +7 -1
  29. package/bulleted-list/types.d.ts +31 -4
  30. package/button/Button.d.ts +1 -1
  31. package/button/Button.js +48 -60
  32. package/button/Button.stories.tsx +151 -9
  33. package/button/Button.test.js +12 -1
  34. package/button/types.d.ts +7 -3
  35. package/card/Card.d.ts +1 -1
  36. package/card/Card.js +27 -45
  37. package/card/Card.stories.tsx +12 -42
  38. package/card/Card.test.js +1 -1
  39. package/card/types.d.ts +1 -7
  40. package/checkbox/Checkbox.js +3 -3
  41. package/checkbox/Checkbox.stories.tsx +52 -0
  42. package/checkbox/Checkbox.test.js +1 -1
  43. package/checkbox/types.d.ts +2 -2
  44. package/chip/Chip.js +28 -49
  45. package/chip/Chip.stories.tsx +121 -26
  46. package/chip/Chip.test.js +3 -5
  47. package/common/OpenSans.css +68 -80
  48. package/common/coreTokens.d.ts +146 -0
  49. package/common/coreTokens.js +167 -0
  50. package/common/utils.d.ts +1 -0
  51. package/common/utils.js +4 -4
  52. package/common/variables.d.ts +1490 -0
  53. package/common/variables.js +984 -1127
  54. package/date-input/Calendar.d.ts +1 -1
  55. package/date-input/Calendar.js +45 -45
  56. package/date-input/DateInput.js +74 -32
  57. package/date-input/DateInput.stories.tsx +183 -30
  58. package/date-input/DateInput.test.js +120 -37
  59. package/date-input/DatePicker.js +38 -52
  60. package/date-input/Icons.d.ts +6 -0
  61. package/date-input/Icons.js +75 -0
  62. package/date-input/YearPicker.d.ts +1 -1
  63. package/date-input/YearPicker.js +23 -12
  64. package/date-input/types.d.ts +6 -8
  65. package/dialog/Dialog.d.ts +1 -1
  66. package/dialog/Dialog.js +55 -86
  67. package/dialog/Dialog.stories.tsx +145 -217
  68. package/dialog/Dialog.test.js +302 -3
  69. package/dialog/types.d.ts +0 -13
  70. package/dropdown/Dropdown.js +5 -8
  71. package/dropdown/Dropdown.stories.tsx +210 -84
  72. package/dropdown/Dropdown.test.js +3 -2
  73. package/dropdown/DropdownMenu.js +12 -18
  74. package/dropdown/DropdownMenuItem.js +4 -17
  75. package/dropdown/types.d.ts +3 -3
  76. package/file-input/FileInput.js +4 -8
  77. package/file-input/FileInput.stories.tsx +85 -2
  78. package/file-input/FileInput.test.js +1 -42
  79. package/file-input/FileItem.js +3 -2
  80. package/file-input/types.d.ts +1 -1
  81. package/flex/Flex.js +4 -2
  82. package/flex/Flex.stories.tsx +35 -26
  83. package/flex/types.d.ts +70 -5
  84. package/footer/Footer.d.ts +1 -1
  85. package/footer/Footer.js +44 -64
  86. package/footer/Footer.stories.tsx +36 -21
  87. package/footer/Footer.test.js +16 -26
  88. package/footer/types.d.ts +10 -12
  89. package/grid/Grid.d.ts +7 -0
  90. package/grid/Grid.js +91 -0
  91. package/grid/Grid.stories.tsx +219 -0
  92. package/grid/types.d.ts +115 -0
  93. package/header/Header.d.ts +4 -3
  94. package/header/Header.js +20 -49
  95. package/header/Header.stories.tsx +115 -36
  96. package/header/Header.test.js +2 -2
  97. package/header/types.d.ts +1 -15
  98. package/heading/Heading.js +1 -1
  99. package/heading/Heading.test.js +1 -1
  100. package/image/Image.d.ts +4 -0
  101. package/image/Image.js +85 -0
  102. package/image/Image.stories.tsx +127 -0
  103. package/image/types.d.ts +72 -0
  104. package/inset/Inset.stories.tsx +2 -1
  105. package/layout/ApplicationLayout.d.ts +5 -5
  106. package/layout/ApplicationLayout.js +15 -12
  107. package/layout/ApplicationLayout.stories.tsx +1 -1
  108. package/layout/Icons.d.ts +7 -4
  109. package/layout/Icons.js +52 -56
  110. package/layout/types.d.ts +2 -3
  111. package/link/Link.js +3 -3
  112. package/link/Link.stories.tsx +60 -0
  113. package/link/Link.test.js +2 -4
  114. package/link/types.d.ts +2 -2
  115. package/main.d.ts +4 -2
  116. package/main.js +17 -1
  117. package/{tabs-nav → nav-tabs}/NavTabs.d.ts +2 -2
  118. package/{tabs-nav → nav-tabs}/NavTabs.js +8 -11
  119. package/{tabs-nav → nav-tabs}/NavTabs.stories.tsx +110 -6
  120. package/{tabs-nav → nav-tabs}/NavTabs.test.js +1 -1
  121. package/{tabs-nav → nav-tabs}/Tab.js +48 -32
  122. package/{tabs-nav → nav-tabs}/types.d.ts +8 -9
  123. package/nav-tabs/types.js +5 -0
  124. package/number-input/NumberInput.d.ts +7 -0
  125. package/number-input/NumberInput.js +6 -4
  126. package/number-input/NumberInput.test.js +279 -96
  127. package/package.json +3 -3
  128. package/paginator/Icons.d.ts +5 -0
  129. package/paginator/Icons.js +16 -28
  130. package/paginator/Paginator.js +7 -15
  131. package/paginator/Paginator.stories.tsx +24 -0
  132. package/paginator/Paginator.test.js +57 -47
  133. package/paragraph/Paragraph.d.ts +3 -4
  134. package/paragraph/Paragraph.js +5 -5
  135. package/password-input/Icons.d.ts +6 -0
  136. package/password-input/Icons.js +39 -0
  137. package/password-input/PasswordInput.js +35 -82
  138. package/password-input/PasswordInput.stories.tsx +1 -0
  139. package/password-input/PasswordInput.test.js +28 -35
  140. package/progress-bar/ProgressBar.d.ts +2 -2
  141. package/progress-bar/ProgressBar.js +5 -5
  142. package/progress-bar/ProgressBar.stories.jsx +35 -2
  143. package/progress-bar/ProgressBar.test.js +1 -1
  144. package/progress-bar/types.d.ts +4 -3
  145. package/quick-nav/QuickNav.stories.tsx +14 -0
  146. package/radio-group/Radio.js +10 -10
  147. package/radio-group/RadioGroup.js +8 -10
  148. package/radio-group/RadioGroup.stories.tsx +131 -18
  149. package/radio-group/RadioGroup.test.js +1 -1
  150. package/resultsetTable/ResultsetTable.js +2 -2
  151. package/resultsetTable/ResultsetTable.test.js +18 -23
  152. package/resultsetTable/types.d.ts +3 -3
  153. package/select/Listbox.d.ts +1 -1
  154. package/select/Listbox.js +5 -34
  155. package/select/Option.js +11 -24
  156. package/select/Select.js +56 -35
  157. package/select/Select.stories.tsx +495 -148
  158. package/select/Select.test.js +80 -85
  159. package/select/types.d.ts +2 -2
  160. package/sidenav/Icons.d.ts +7 -0
  161. package/sidenav/Icons.js +51 -0
  162. package/sidenav/Sidenav.d.ts +2 -2
  163. package/sidenav/Sidenav.js +66 -96
  164. package/sidenav/Sidenav.stories.tsx +165 -63
  165. package/sidenav/types.d.ts +21 -18
  166. package/slider/Slider.js +6 -7
  167. package/slider/Slider.stories.tsx +57 -0
  168. package/slider/Slider.test.js +1 -1
  169. package/slider/types.d.ts +2 -2
  170. package/spinner/Spinner.js +17 -23
  171. package/spinner/Spinner.stories.jsx +53 -27
  172. package/spinner/Spinner.test.js +1 -1
  173. package/switch/Switch.js +3 -3
  174. package/switch/Switch.stories.tsx +33 -0
  175. package/switch/Switch.test.js +1 -1
  176. package/switch/types.d.ts +2 -2
  177. package/table/Table.js +2 -2
  178. package/table/Table.stories.jsx +80 -1
  179. package/table/Table.test.js +1 -1
  180. package/tabs/Tab.js +12 -15
  181. package/tabs/Tabs.js +11 -17
  182. package/tabs/Tabs.stories.tsx +45 -5
  183. package/tabs/Tabs.test.js +4 -5
  184. package/tabs/types.d.ts +2 -2
  185. package/tag/Tag.js +7 -9
  186. package/tag/Tag.stories.tsx +14 -1
  187. package/tag/Tag.test.js +1 -1
  188. package/text-input/Suggestion.js +34 -7
  189. package/text-input/TextInput.js +71 -91
  190. package/text-input/TextInput.stories.tsx +93 -5
  191. package/text-input/TextInput.test.js +125 -26
  192. package/textarea/Textarea.js +3 -4
  193. package/textarea/Textarea.stories.jsx +60 -1
  194. package/textarea/Textarea.test.js +2 -4
  195. package/toggle-group/ToggleGroup.d.ts +2 -2
  196. package/toggle-group/ToggleGroup.js +85 -59
  197. package/toggle-group/ToggleGroup.stories.tsx +48 -3
  198. package/toggle-group/ToggleGroup.test.js +38 -24
  199. package/toggle-group/types.d.ts +22 -13
  200. package/typography/Typography.d.ts +2 -2
  201. package/typography/Typography.js +14 -113
  202. package/typography/Typography.stories.tsx +1 -1
  203. package/useTheme.d.ts +1242 -1
  204. package/useTheme.js +1 -1
  205. package/useTranslatedLabels.d.ts +84 -1
  206. package/utils/BaseTypography.d.ts +21 -0
  207. package/utils/BaseTypography.js +108 -0
  208. package/utils/FocusLock.d.ts +13 -0
  209. package/utils/FocusLock.js +138 -0
  210. package/wizard/Wizard.js +2 -2
  211. package/wizard/Wizard.stories.tsx +20 -0
  212. package/wizard/Wizard.test.js +1 -1
  213. package/wizard/types.d.ts +5 -6
  214. package/card/ice-cream.jpg +0 -0
  215. package/number-input/NumberInputContext.d.ts +0 -4
  216. package/number-input/NumberInputContext.js +0 -19
  217. package/number-input/numberInputContextTypes.d.ts +0 -19
  218. /package/{tabs-nav → grid}/types.js +0 -0
  219. /package/{number-input/numberInputContextTypes.js → image/types.js} +0 -0
  220. /package/{tabs-nav → nav-tabs}/Tab.d.ts +0 -0
@@ -21,11 +21,15 @@ var _styledComponents = _interopRequireWildcard(require("styled-components"));
21
21
 
22
22
  var _uuid = require("uuid");
23
23
 
24
- var _variables = require("../common/variables.js");
24
+ var _variables = require("../common/variables");
25
25
 
26
26
  var _useTheme = _interopRequireDefault(require("../useTheme"));
27
27
 
28
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9;
28
+ var _BackgroundColorContext = _interopRequireDefault(require("../BackgroundColorContext"));
29
+
30
+ var _Flex = _interopRequireDefault(require("../flex/Flex"));
31
+
32
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7;
29
33
 
30
34
  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); }
31
35
 
@@ -45,16 +49,18 @@ var DxcToggleGroup = function DxcToggleGroup(_ref) {
45
49
  multiple = _ref$multiple === void 0 ? false : _ref$multiple,
46
50
  _ref$tabIndex = _ref.tabIndex,
47
51
  tabIndex = _ref$tabIndex === void 0 ? 0 : _ref$tabIndex;
48
- var colorsTheme = (0, _useTheme["default"])();
49
52
 
50
- var _useState = (0, _react.useState)(defaultValue !== null && defaultValue !== void 0 ? defaultValue : multiple ? [] : -1),
51
- _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
52
- selectedValue = _useState2[0],
53
- setSelectedValue = _useState2[1];
53
+ var _useState = (0, _react.useState)("label-toggle-group-".concat((0, _uuid.v4)())),
54
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 1),
55
+ toggleGroupLabelId = _useState2[0];
54
56
 
55
- var _useState3 = (0, _react.useState)("toggle-group-".concat((0, _uuid.v4)())),
56
- _useState4 = (0, _slicedToArray2["default"])(_useState3, 1),
57
- toggleGroupId = _useState4[0];
57
+ var _useState3 = (0, _react.useState)(defaultValue !== null && defaultValue !== void 0 ? defaultValue : multiple ? [] : -1),
58
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
59
+ selectedValue = _useState4[0],
60
+ setSelectedValue = _useState4[1];
61
+
62
+ var colorsTheme = (0, _useTheme["default"])();
63
+ var backgroundType = (0, _react.useContext)(_BackgroundColorContext["default"]);
58
64
 
59
65
  var handleToggleChange = function handleToggleChange(selectedOption) {
60
66
  var newSelectedOptions;
@@ -89,51 +95,67 @@ var DxcToggleGroup = function DxcToggleGroup(_ref) {
89
95
  onChange === null || onChange === void 0 ? void 0 : onChange(multiple ? newSelectedOptions : selectedOption);
90
96
  };
91
97
 
92
- var handleKeyPress = function handleKeyPress(event, optionValue) {
93
- event.preventDefault();
94
- if (!disabled && (event.nativeEvent.code === "Enter" || event.nativeEvent.code === "Space")) handleToggleChange(optionValue);
98
+ var handleOnKeyDown = function handleOnKeyDown(event, optionValue) {
99
+ switch (event.key) {
100
+ case "Enter":
101
+ case " ":
102
+ event.preventDefault();
103
+ handleToggleChange(optionValue);
104
+ }
95
105
  };
96
106
 
97
107
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
98
108
  theme: colorsTheme.toggleGroup
99
109
  }, /*#__PURE__*/_react["default"].createElement(ToggleGroup, {
100
- margin: margin,
101
- disabled: disabled
110
+ margin: margin
102
111
  }, /*#__PURE__*/_react["default"].createElement(Label, {
103
- htmlFor: toggleGroupId,
112
+ id: toggleGroupLabelId,
104
113
  disabled: disabled
105
114
  }, label), /*#__PURE__*/_react["default"].createElement(HelperText, {
106
115
  disabled: disabled
107
116
  }, helperText), /*#__PURE__*/_react["default"].createElement(OptionsContainer, {
108
- id: toggleGroupId,
109
- role: multiple ? "group" : "radiogroup"
117
+ "aria-labelledby": toggleGroupLabelId
110
118
  }, options.map(function (option, i) {
111
- return /*#__PURE__*/_react["default"].createElement(ToggleContainer, {
112
- selected: multiple ? value ? Array.isArray(value) && value.includes(option.value) : Array.isArray(selectedValue) && selectedValue.includes(option.value) : value ? option.value === value : option.value === selectedValue,
113
- role: multiple ? "switch" : "radio",
114
- "aria-checked": multiple ? value ? Array.isArray(value) && value.includes(option.value) : Array.isArray(selectedValue) && selectedValue.includes(option.value) : value ? option.value === value : option.value === selectedValue,
115
- tabIndex: !disabled ? tabIndex : -1,
119
+ return /*#__PURE__*/_react["default"].createElement(ToggleButton, {
120
+ key: "toggle-".concat(i, "-").concat(option.label),
121
+ "aria-label": option.title,
122
+ "aria-pressed": multiple ? value ? Array.isArray(value) && value.includes(option.value) : Array.isArray(selectedValue) && selectedValue.includes(option.value) : value ? option.value === value : option.value === selectedValue,
123
+ disabled: disabled,
116
124
  onClick: function onClick() {
117
- return !disabled && handleToggleChange(option.value);
125
+ handleToggleChange(option.value);
118
126
  },
119
- isFirst: i === 0,
120
- isLast: i === options.length - 1,
121
- isIcon: option.icon,
122
- optionLabel: option.label,
123
- disabled: disabled,
124
- onKeyPress: function onKeyPress(event) {
125
- handleKeyPress(event, option.value);
127
+ onKeyDown: function onKeyDown(event) {
128
+ handleOnKeyDown(event, option.value);
126
129
  },
127
- key: "toggle-".concat(i, "-").concat(option.label)
128
- }, /*#__PURE__*/_react["default"].createElement(OptionContent, null, option.icon && /*#__PURE__*/_react["default"].createElement(IconContainer, {
130
+ tabIndex: !disabled ? tabIndex : -1,
131
+ title: option.title,
132
+ backgroundType: backgroundType,
133
+ hasIcon: option.icon,
134
+ optionLabel: option.label,
135
+ selected: multiple ? value ? Array.isArray(value) && value.includes(option.value) : Array.isArray(selectedValue) && selectedValue.includes(option.value) : value ? option.value === value : option.value === selectedValue
136
+ }, /*#__PURE__*/_react["default"].createElement(_Flex["default"], {
137
+ alignItems: "center"
138
+ }, option.icon && /*#__PURE__*/_react["default"].createElement(IconContainer, {
129
139
  optionLabel: option.label
130
- }, typeof option.icon === "string" ? /*#__PURE__*/_react["default"].createElement(Icon, {
140
+ }, typeof option.icon === "string" ? /*#__PURE__*/_react["default"].createElement("img", {
131
141
  src: option.icon
132
142
  }) : option.icon), option.label && /*#__PURE__*/_react["default"].createElement(LabelContainer, null, option.label)));
133
143
  }))));
134
144
  };
135
145
 
136
- var Label = _styledComponents["default"].label(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n line-height: ", ";\n"])), function (props) {
146
+ var ToggleGroup = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n flex-direction: column;\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n"])), function (props) {
147
+ return props.margin && (0, _typeof2["default"])(props.margin) !== "object" ? _variables.spaces[props.margin] : "0px";
148
+ }, function (props) {
149
+ return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.top ? _variables.spaces[props.margin.top] : "";
150
+ }, function (props) {
151
+ return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.right ? _variables.spaces[props.margin.right] : "";
152
+ }, function (props) {
153
+ return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.bottom ? _variables.spaces[props.margin.bottom] : "";
154
+ }, function (props) {
155
+ return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.left ? _variables.spaces[props.margin.left] : "";
156
+ });
157
+
158
+ var Label = _styledComponents["default"].label(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n line-height: ", ";\n"])), function (props) {
137
159
  return props.disabled ? props.theme.disabledLabelFontColor : props.theme.labelFontColor;
138
160
  }, function (props) {
139
161
  return props.theme.labelFontFamily;
@@ -147,7 +169,7 @@ var Label = _styledComponents["default"].label(_templateObject || (_templateObje
147
169
  return props.theme.labelLineHeight;
148
170
  });
149
171
 
150
- var HelperText = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n line-height: ", ";\n"])), function (props) {
172
+ var HelperText = _styledComponents["default"].span(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n line-height: ", ";\n"])), function (props) {
151
173
  return props.disabled ? props.theme.disabledHelperTextFontcolor : props.theme.helperTextFontColor;
152
174
  }, function (props) {
153
175
  return props.theme.helperTextFontFamily;
@@ -161,19 +183,7 @@ var HelperText = _styledComponents["default"].span(_templateObject2 || (_templat
161
183
  return props.theme.helperTextLineHeight;
162
184
  });
163
185
 
164
- var ToggleGroup = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n flex-direction: column;\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n"])), function (props) {
165
- return props.margin && (0, _typeof2["default"])(props.margin) !== "object" ? _variables.spaces[props.margin] : "0px";
166
- }, function (props) {
167
- return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.top ? _variables.spaces[props.margin.top] : "";
168
- }, function (props) {
169
- return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.right ? _variables.spaces[props.margin.right] : "";
170
- }, function (props) {
171
- return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.bottom ? _variables.spaces[props.margin.bottom] : "";
172
- }, function (props) {
173
- return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.left ? _variables.spaces[props.margin.left] : "";
174
- });
175
-
176
- var OptionsContainer = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: row;\n width: max-content;\n opacity: 1;\n height: calc(48px - 4px - 4px);\n border-width: ", ";\n border-style: ", ";\n border-radius: ", ";\n border-color: ", ";\n background-color: ", ";\n padding: 4px;\n margin-top: ", ";\n"])), function (props) {
186
+ var OptionsContainer = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n gap: 0.25rem;\n width: max-content;\n height: calc(48px - 4px - 4px);\n padding: 0.25rem;\n border-width: ", ";\n border-style: ", ";\n border-radius: ", ";\n border-color: ", ";\n margin-top: ", ";\n background-color: ", ";\n"])), function (props) {
177
187
  return props.theme.containerBorderThickness;
178
188
  }, function (props) {
179
189
  return props.theme.containerBorderStyle;
@@ -181,16 +191,36 @@ var OptionsContainer = _styledComponents["default"].div(_templateObject4 || (_te
181
191
  return props.theme.containerBorderRadius;
182
192
  }, function (props) {
183
193
  return props.theme.containerBorderColor;
184
- }, function (props) {
185
- return props.theme.containerBackgroundColor;
186
194
  }, function (props) {
187
195
  return props.theme.containerMarginTop;
196
+ }, function (props) {
197
+ return props.theme.containerBackgroundColor;
188
198
  });
189
199
 
190
- var ToggleContainer = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin-right: ", ";\n\n ", "\n"])), function (props) {
191
- return !props.isLast && "4px";
200
+ var ToggleButton = _styledComponents["default"].button(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding-left: ", ";\n padding-right: ", ";\n border-width: ", ";\n border-style: ", ";\n border-radius: ", ";\n background-color: ", ";\n color: ", ";\n cursor: pointer;\n\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n color: #ffffff;\n }\n &:focus {\n outline: none;\n box-shadow: ", ";\n }\n &:disabled {\n background-color: ", ";\n color: ", ";\n cursor: not-allowed;\n }\n"])), function (props) {
201
+ return props.optionLabel && props.hasIcon || props.optionLabel && !props.hasIcon ? props.theme.labelPaddingLeft : props.theme.iconPaddingLeft;
192
202
  }, function (props) {
193
- return "\n background-color: ".concat(props.selected ? props.disabled ? props.theme.selectedDisabledBackgroundColor : props.theme.selectedBackgroundColor : props.disabled ? props.theme.unselectedDisabledBackgroundColor : props.theme.unselectedBackgroundColor, ";\n border-width: ").concat(props.theme.optionBorderThickness, ";\n border-style: ").concat(props.theme.optionBorderStyle, ";\n border-radius: ").concat(props.theme.optionBorderRadius, ";\n padding-left: ").concat(props.optionLabel && props.isIcon || props.optionLabel && !props.isIcon ? props.theme.labelPaddingLeft : props.theme.iconPaddingLeft, ";\n padding-right: ").concat(props.optionLabel && props.isIcon || props.optionLabel && !props.isIcon ? props.theme.labelPaddingRight : props.theme.iconPaddingRight, ";\n ").concat(!props.disabled ? ":hover {\n background-color: ".concat(props.selected ? props.theme.selectedHoverBackgroundColor : props.theme.unselectedHoverBackgroundColor, ";\n }\n :active {\n background-color: ").concat(props.selected ? props.theme.selectedActiveBackgroundColor : props.theme.unselectedActiveBackgroundColor, ";\n color: #ffffff;\n } \n :focus {\n border-color: transparent;\n box-shadow: 0 0 0 ").concat(props.theme.optionFocusBorderThickness, " ").concat(props.backgroundType === "dark" ? props.theme.focusColorOnDark : props.theme.focusColor, ";\n }\n &:focus-visible {\n outline: none;\n }\n cursor: pointer;\n color: ").concat(props.selected ? props.theme.selectedFontColor : props.theme.unselectedFontColor, ";\n") : "color: ".concat(props.selected ? props.theme.selectedDisabledFontColor : props.theme.unselectedDisabledFontColor, ";\n cursor: not-allowed;"), "\n ");
203
+ return props.optionLabel && props.hasIcon || props.optionLabel && !props.hasIcon ? props.theme.labelPaddingRight : props.theme.iconPaddingRight;
204
+ }, function (props) {
205
+ return props.theme.optionBorderThickness;
206
+ }, function (props) {
207
+ return props.theme.optionBorderStyle;
208
+ }, function (props) {
209
+ return props.theme.optionBorderRadius;
210
+ }, function (props) {
211
+ return props.selected ? props.theme.selectedBackgroundColor : props.theme.unselectedBackgroundColor;
212
+ }, function (props) {
213
+ return props.selected ? props.theme.selectedFontColor : props.theme.unselectedFontColor;
214
+ }, function (props) {
215
+ return props.selected ? props.theme.selectedHoverBackgroundColor : props.theme.unselectedHoverBackgroundColor;
216
+ }, function (props) {
217
+ return props.selected ? props.theme.selectedActiveBackgroundColor : props.theme.unselectedActiveBackgroundColor;
218
+ }, function (props) {
219
+ return "0 0 0 ".concat(props.theme.optionFocusBorderThickness, " ").concat(props.backgroundType === "dark" ? props.theme.focusColorOnDark : props.theme.focusColor);
220
+ }, function (props) {
221
+ return props.selected ? props.theme.selectedDisabledBackgroundColor : props.theme.unselectedDisabledBackgroundColor;
222
+ }, function (props) {
223
+ return props.selected ? props.theme.selectedDisabledFontColor : props.theme.unselectedDisabledFontColor;
194
224
  });
195
225
 
196
226
  var LabelContainer = _styledComponents["default"].span(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n"])), function (props) {
@@ -203,11 +233,7 @@ var LabelContainer = _styledComponents["default"].span(_templateObject6 || (_tem
203
233
  return props.theme.optionLabelFontWeight;
204
234
  });
205
235
 
206
- var OptionContent = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: row;\n align-items: center;\n"])));
207
-
208
- var Icon = _styledComponents["default"].img(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])([""])));
209
-
210
- var IconContainer = _styledComponents["default"].div(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["\n margin-right: ", ";\n height: 24px;\n width: 24px;\n overflow: hidden;\n display: flex;\n img,\n svg {\n height: 100%;\n width: 100%;\n }\n"])), function (props) {
236
+ var IconContainer = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n height: 24px;\n width: 24px;\n margin-right: ", ";\n overflow: hidden;\n\n img,\n svg {\n height: 100%;\n width: 100%;\n }\n"])), function (props) {
211
237
  return props.optionLabel && props.theme.iconMarginRight;
212
238
  });
213
239
 
@@ -3,6 +3,7 @@ import { userEvent, within } from "@storybook/testing-library";
3
3
  import DxcToggleGroup from "./ToggleGroup";
4
4
  import Title from "../../.storybook/components/Title";
5
5
  import ExampleContainer from "../../.storybook/components/ExampleContainer";
6
+ import { HalstackProvider } from "../HalstackContext";
6
7
 
7
8
  export default {
8
9
  title: "ToggleGroup",
@@ -41,7 +42,7 @@ const options = [
41
42
  },
42
43
  {
43
44
  value: 2,
44
- label: "Twitter",
45
+ label: "X",
45
46
  },
46
47
  {
47
48
  value: 3,
@@ -52,14 +53,17 @@ const optionsWithIcon = [
52
53
  {
53
54
  value: 1,
54
55
  icon: wifiSVG,
56
+ title: "WiFi connection",
55
57
  },
56
58
  {
57
59
  value: 2,
58
60
  icon: ethernetSVG,
61
+ title: "Ethernet connection",
59
62
  },
60
63
  {
61
64
  value: 3,
62
65
  icon: gMobileSVG,
66
+ title: "3G Mobile data connection",
63
67
  },
64
68
  ];
65
69
  const optionsWithIconAndLabel = [
@@ -86,9 +90,19 @@ const twoOptions = [
86
90
  },
87
91
  {
88
92
  value: 2,
89
- label: "Twitter",
93
+ label: "X",
90
94
  },
91
95
  ];
96
+
97
+ const opinionatedTheme = {
98
+ toggleGroup: {
99
+ selectedBaseColor: "#5f249f",
100
+ selectedFontColor: "#ffffff",
101
+ unselectedBaseColor: "#e6e6e6",
102
+ unselectedFontColor: "#000000",
103
+ },
104
+ };
105
+
92
106
  export const Chromatic = () => (
93
107
  <>
94
108
  <ExampleContainer>
@@ -154,6 +168,37 @@ export const Chromatic = () => (
154
168
  <Title title="xxLarge" theme="light" level={4} />
155
169
  <DxcToggleGroup label="xxLarge margin" options={options} margin="xxlarge" />
156
170
  </ExampleContainer>
171
+ <Title title="Opinionated theme" theme="light" level={2} />
172
+ <ExampleContainer>
173
+ <HalstackProvider theme={opinionatedTheme}>
174
+ <Title title="Selected" theme="light" level={4} />
175
+ <DxcToggleGroup label="Selected" helperText="HelperText" defaultValue={2} options={options} />
176
+ </HalstackProvider>
177
+ </ExampleContainer>
178
+ <ExampleContainer>
179
+ <HalstackProvider theme={opinionatedTheme}>
180
+ <Title title="Icons & label toggle group" theme="light" level={4} />
181
+ <DxcToggleGroup label="Icons & label" options={optionsWithIconAndLabel} />
182
+ </HalstackProvider>
183
+ </ExampleContainer>
184
+ <ExampleContainer>
185
+ <HalstackProvider theme={opinionatedTheme}>
186
+ <Title title="Disabled" theme="light" level={4} />
187
+ <DxcToggleGroup label="Disabled" defaultValue={2} options={options} disabled />
188
+ </HalstackProvider>
189
+ </ExampleContainer>
190
+ <ExampleContainer pseudoState="pseudo-hover">
191
+ <Title title="Hovered" theme="light" level={4} />
192
+ <HalstackProvider theme={opinionatedTheme}>
193
+ <DxcToggleGroup label="Hovered" options={twoOptions} defaultValue={2} />
194
+ </HalstackProvider>
195
+ </ExampleContainer>
196
+ <ExampleContainer pseudoState="pseudo-active">
197
+ <Title title="Actived" theme="light" level={4} />
198
+ <HalstackProvider theme={opinionatedTheme}>
199
+ <DxcToggleGroup label="Actived" options={twoOptions} defaultValue={2} />
200
+ </HalstackProvider>
201
+ </ExampleContainer>
157
202
  </>
158
203
  );
159
204
  const OptionSelected = () => <DxcToggleGroup label="Toggle group" helperText="HelperText" options={options} />;
@@ -167,7 +212,7 @@ ToggleGroupSelectedActived.play = async ({ canvasElement }) => {
167
212
  export const ToggleGroupUnselectedActived = OptionSelected.bind({});
168
213
  ToggleGroupUnselectedActived.play = async ({ canvasElement }) => {
169
214
  const canvas = within(canvasElement);
170
- const option = canvas.getByText("Twitter");
215
+ const option = canvas.getByText("X");
171
216
  await userEvent.click(option);
172
217
  userEvent.tab();
173
218
  };
@@ -6,7 +6,7 @@ var _react = _interopRequireDefault(require("react"));
6
6
 
7
7
  var _react2 = require("@testing-library/react");
8
8
 
9
- var _ToggleGroup = _interopRequireDefault(require("./ToggleGroup"));
9
+ var _ToggleGroup = _interopRequireDefault(require("./ToggleGroup.tsx"));
10
10
 
11
11
  var options = [{
12
12
  value: 1,
@@ -37,14 +37,28 @@ describe("Toggle group component tests", function () {
37
37
  expect(getByText("Apple")).toBeTruthy();
38
38
  expect(getByText("Google")).toBeTruthy();
39
39
  });
40
+ test("Toggle group renders with correct aria-label in only-icon scenario", function () {
41
+ var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleGroup["default"], {
42
+ label: "Toggle group label",
43
+ helperText: "Toggle group helper text",
44
+ options: [{
45
+ value: 1,
46
+ icon: "https://cdn.icon-icons.com/icons2/2645/PNG/512/mic_mute_icon_159965.png",
47
+ title: "Mute"
48
+ }]
49
+ })),
50
+ getByRole = _render2.getByRole;
51
+
52
+ expect(getByRole("button").getAttribute("aria-label")).toBe("Mute");
53
+ });
40
54
  test("Uncontrolled toggle group calls correct function on change with value", function () {
41
55
  var onChange = jest.fn();
42
56
 
43
- var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleGroup["default"], {
57
+ var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleGroup["default"], {
44
58
  options: options,
45
59
  onChange: onChange
46
60
  })),
47
- getByText = _render2.getByText;
61
+ getByText = _render3.getByText;
48
62
 
49
63
  var option = getByText("Ebay");
50
64
 
@@ -55,12 +69,12 @@ describe("Toggle group component tests", function () {
55
69
  test("Controlled toggle group calls correct function on change with value", function () {
56
70
  var onChange = jest.fn();
57
71
 
58
- var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleGroup["default"], {
72
+ var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleGroup["default"], {
59
73
  options: options,
60
74
  onChange: onChange,
61
75
  value: 1
62
76
  })),
63
- getByText = _render3.getByText;
77
+ getByText = _render4.getByText;
64
78
 
65
79
  var option = getByText("Ebay");
66
80
 
@@ -71,12 +85,12 @@ describe("Toggle group component tests", function () {
71
85
  test("Function on change is not called when disable", function () {
72
86
  var onChange = jest.fn();
73
87
 
74
- var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleGroup["default"], {
88
+ var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleGroup["default"], {
75
89
  options: options,
76
90
  onChange: onChange,
77
91
  disabled: true
78
92
  })),
79
- getByText = _render4.getByText;
93
+ getByText = _render5.getByText;
80
94
 
81
95
  var option = getByText("Ebay");
82
96
 
@@ -87,14 +101,14 @@ describe("Toggle group component tests", function () {
87
101
  test("Uncontrolled multiple toggle group calls correct function on change with value when is multiple", function () {
88
102
  var onChange = jest.fn();
89
103
 
90
- var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleGroup["default"], {
104
+ var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleGroup["default"], {
91
105
  options: options,
92
106
  onChange: onChange,
93
107
  multiple: true
94
108
  })),
95
- getAllByRole = _render5.getAllByRole;
109
+ getAllByRole = _render6.getAllByRole;
96
110
 
97
- var toggleOptions = getAllByRole("switch");
111
+ var toggleOptions = getAllByRole("button");
98
112
 
99
113
  _react2.fireEvent.click(toggleOptions[0]);
100
114
 
@@ -105,20 +119,20 @@ describe("Toggle group component tests", function () {
105
119
  _react2.fireEvent.click(toggleOptions[3]);
106
120
 
107
121
  expect(onChange).toHaveBeenCalledWith([1, 2, 4]);
108
- expect(toggleOptions[0].getAttribute("aria-checked")).toBe("true");
109
- expect(toggleOptions[1].getAttribute("aria-checked")).toBe("true");
110
- expect(toggleOptions[3].getAttribute("aria-checked")).toBe("true");
122
+ expect(toggleOptions[0].getAttribute("aria-pressed")).toBe("true");
123
+ expect(toggleOptions[1].getAttribute("aria-pressed")).toBe("true");
124
+ expect(toggleOptions[3].getAttribute("aria-pressed")).toBe("true");
111
125
  });
112
126
  test("Controlled multiple toggle returns always same values", function () {
113
127
  var onChange = jest.fn();
114
128
 
115
- var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleGroup["default"], {
129
+ var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleGroup["default"], {
116
130
  options: options,
117
131
  onChange: onChange,
118
132
  value: [1],
119
133
  multiple: true
120
134
  })),
121
- getByText = _render6.getByText;
135
+ getByText = _render7.getByText;
122
136
 
123
137
  var option = getByText("Ebay");
124
138
 
@@ -132,25 +146,25 @@ describe("Toggle group component tests", function () {
132
146
  expect(onChange).toHaveBeenNthCalledWith(2, [1, 4]);
133
147
  });
134
148
  test("Single selection: Renders with correct default value", function () {
135
- var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleGroup["default"], {
149
+ var _render8 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleGroup["default"], {
136
150
  options: options,
137
151
  defaultValue: 2
138
152
  })),
139
- getAllByRole = _render7.getAllByRole;
153
+ getAllByRole = _render8.getAllByRole;
140
154
 
141
- var toggleOptions = getAllByRole("radio");
142
- expect(toggleOptions[1].getAttribute("aria-checked")).toBe("true");
155
+ var toggleOptions = getAllByRole("button");
156
+ expect(toggleOptions[1].getAttribute("aria-pressed")).toBe("true");
143
157
  });
144
158
  test("Multiple selection: Renders with correct default value", function () {
145
- var _render8 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleGroup["default"], {
159
+ var _render9 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ToggleGroup["default"], {
146
160
  options: options,
147
161
  defaultValue: [2, 4],
148
162
  multiple: true
149
163
  })),
150
- getAllByRole = _render8.getAllByRole;
164
+ getAllByRole = _render9.getAllByRole;
151
165
 
152
- var toggleOptions = getAllByRole("switch");
153
- expect(toggleOptions[1].getAttribute("aria-checked")).toBe("true");
154
- expect(toggleOptions[3].getAttribute("aria-checked")).toBe("true");
166
+ var toggleOptions = getAllByRole("button");
167
+ expect(toggleOptions[1].getAttribute("aria-pressed")).toBe("true");
168
+ expect(toggleOptions[3].getAttribute("aria-pressed")).toBe("true");
155
169
  });
156
170
  });
@@ -7,23 +7,22 @@ declare type Margin = {
7
7
  right?: Space;
8
8
  };
9
9
  declare type SVG = React.ReactNode & React.SVGProps<SVGSVGElement>;
10
- declare type OptionCommons = {
11
- /**
12
- * Number with the option inner value.
13
- */
14
- value: number;
15
- };
16
- declare type OptionIcon = OptionCommons & {
10
+ declare type OptionIcon = {
17
11
  /**
18
12
  * String with the option display value.
19
13
  */
20
- label?: string;
14
+ label?: never;
21
15
  /**
22
16
  * Element used as the icon. Icon and label can't be used at same time.
23
17
  */
24
18
  icon: string | SVG;
19
+ /**
20
+ * Value for the HTML properties title and aria-label.
21
+ * When a label is defined, this prop can not be use.
22
+ */
23
+ title: string;
25
24
  };
26
- declare type OptionLabel = OptionCommons & {
25
+ export declare type OptionLabel = {
27
26
  /**
28
27
  * String with the option display value.
29
28
  */
@@ -32,8 +31,18 @@ declare type OptionLabel = OptionCommons & {
32
31
  * Element used as the icon. Icon and label can't be used at same time.
33
32
  */
34
33
  icon?: string | SVG;
34
+ /**
35
+ * Value for the HTML properties title and aria-label.
36
+ * When a label is defined, this prop can not be use.
37
+ */
38
+ title?: never;
35
39
  };
36
- declare type Option = OptionIcon | OptionLabel;
40
+ declare type Option = {
41
+ /**
42
+ * Number with the option inner value.
43
+ */
44
+ value: number;
45
+ } & (OptionIcon | OptionLabel);
37
46
  declare type CommonProps = {
38
47
  /**
39
48
  * Text to be placed above the component.
@@ -61,7 +70,7 @@ declare type CommonProps = {
61
70
  */
62
71
  tabIndex?: number;
63
72
  };
64
- declare type SingleSelectionToggle = CommonProps & {
73
+ declare type SingleSelectionToggleGroup = CommonProps & {
65
74
  /**
66
75
  * If true, the toggle group will support multiple selection. In that case, value must be an array of numbers with the keys of the selected values.
67
76
  */
@@ -81,7 +90,7 @@ declare type SingleSelectionToggle = CommonProps & {
81
90
  */
82
91
  onChange?: (optionIndex: number) => void;
83
92
  };
84
- declare type MultipleSelectionToggle = CommonProps & {
93
+ declare type MultipleSelectionToggleGroup = CommonProps & {
85
94
  /**
86
95
  * If true, the toggle group will support multiple selection. In that case, value must be an array of numbers with the keys of the selected values.
87
96
  */
@@ -101,5 +110,5 @@ declare type MultipleSelectionToggle = CommonProps & {
101
110
  */
102
111
  onChange?: (optionIndex: number[]) => void;
103
112
  };
104
- declare type Props = SingleSelectionToggle | MultipleSelectionToggle;
113
+ declare type Props = SingleSelectionToggleGroup | MultipleSelectionToggleGroup;
105
114
  export default Props;
@@ -1,4 +1,4 @@
1
1
  /// <reference types="react" />
2
2
  import TypographyPropsTypes from "./types";
3
- declare const Typography: ({ as, display, fontFamily, fontSize, fontStyle, fontWeight, letterSpacing, lineHeight, textAlign, color, textDecoration, textOverflow, whiteSpace, children, }: TypographyPropsTypes) => JSX.Element;
4
- export default Typography;
3
+ declare const DxcTypography: ({ textOverflow, whiteSpace, children, ...props }: TypographyPropsTypes) => JSX.Element;
4
+ export default DxcTypography;