@dxc-technology/halstack-react 0.0.0-f4755a1 → 0.0.0-f53e801

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 (256) 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 +13 -45
  5. package/accordion/Accordion.stories.tsx +20 -13
  6. package/accordion/Accordion.test.js +72 -0
  7. package/accordion/types.d.ts +7 -7
  8. package/accordion-group/AccordionGroup.d.ts +1 -1
  9. package/accordion-group/AccordionGroup.js +14 -15
  10. package/accordion-group/AccordionGroup.stories.tsx +1 -1
  11. package/accordion-group/AccordionGroup.test.js +151 -0
  12. package/accordion-group/types.d.ts +7 -7
  13. package/alert/Alert.js +4 -1
  14. package/alert/Alert.test.js +92 -0
  15. package/badge/Badge.d.ts +4 -0
  16. package/badge/Badge.js +5 -3
  17. package/badge/types.d.ts +5 -0
  18. package/{radio → badge}/types.js +0 -0
  19. package/bleed/Bleed.d.ts +3 -0
  20. package/bleed/Bleed.js +51 -0
  21. package/bleed/Bleed.stories.tsx +341 -0
  22. package/bleed/types.d.ts +37 -0
  23. package/bleed/types.js +5 -0
  24. package/box/Box.js +22 -32
  25. package/box/Box.test.js +18 -0
  26. package/bulleted-list/BulletedList.d.ts +7 -0
  27. package/bulleted-list/BulletedList.js +123 -0
  28. package/bulleted-list/BulletedList.stories.tsx +200 -0
  29. package/bulleted-list/types.d.ts +11 -0
  30. package/bulleted-list/types.js +5 -0
  31. package/button/Button.d.ts +1 -1
  32. package/button/Button.js +57 -80
  33. package/button/Button.stories.tsx +15 -8
  34. package/button/Button.test.js +35 -0
  35. package/button/types.d.ts +8 -12
  36. package/card/Card.js +24 -27
  37. package/card/Card.stories.tsx +1 -1
  38. package/card/Card.test.js +50 -0
  39. package/checkbox/Checkbox.d.ts +1 -1
  40. package/checkbox/Checkbox.js +43 -39
  41. package/checkbox/Checkbox.stories.tsx +124 -128
  42. package/checkbox/Checkbox.test.js +78 -0
  43. package/checkbox/types.d.ts +7 -3
  44. package/chip/Chip.d.ts +1 -1
  45. package/chip/Chip.js +14 -52
  46. package/chip/Chip.stories.tsx +6 -8
  47. package/chip/Chip.test.js +56 -0
  48. package/chip/types.d.ts +5 -13
  49. package/common/variables.js +243 -344
  50. package/date-input/DateInput.js +62 -48
  51. package/date-input/DateInput.stories.tsx +7 -7
  52. package/date-input/DateInput.test.js +479 -0
  53. package/date-input/types.d.ts +16 -9
  54. package/dialog/Dialog.js +46 -50
  55. package/dialog/Dialog.stories.tsx +1 -2
  56. package/dialog/Dialog.test.js +70 -0
  57. package/dialog/types.d.ts +2 -2
  58. package/dropdown/Dropdown.d.ts +1 -1
  59. package/dropdown/Dropdown.js +242 -272
  60. package/dropdown/Dropdown.stories.tsx +144 -79
  61. package/dropdown/Dropdown.test.js +591 -0
  62. package/dropdown/DropdownMenu.d.ts +4 -0
  63. package/dropdown/DropdownMenu.js +80 -0
  64. package/dropdown/DropdownMenuItem.d.ts +4 -0
  65. package/dropdown/DropdownMenuItem.js +92 -0
  66. package/dropdown/types.d.ts +29 -18
  67. package/file-input/FileInput.js +9 -6
  68. package/file-input/FileInput.stories.tsx +1 -0
  69. package/file-input/FileInput.test.js +457 -0
  70. package/file-input/FileItem.js +7 -5
  71. package/flex/Flex.d.ts +4 -0
  72. package/flex/Flex.js +57 -0
  73. package/flex/Flex.stories.tsx +103 -0
  74. package/flex/types.d.ts +21 -0
  75. package/flex/types.js +5 -0
  76. package/footer/Footer.js +24 -99
  77. package/footer/Footer.test.js +109 -0
  78. package/footer/Icons.js +1 -1
  79. package/footer/types.d.ts +1 -1
  80. package/header/Header.js +95 -114
  81. package/header/Header.stories.tsx +46 -36
  82. package/header/Header.test.js +79 -0
  83. package/header/Icons.js +2 -2
  84. package/header/types.d.ts +2 -2
  85. package/heading/Heading.stories.tsx +3 -2
  86. package/heading/Heading.test.js +186 -0
  87. package/inset/Inset.d.ts +3 -0
  88. package/inset/Inset.js +51 -0
  89. package/inset/Inset.stories.tsx +229 -0
  90. package/inset/types.d.ts +37 -0
  91. package/inset/types.js +5 -0
  92. package/layout/ApplicationLayout.d.ts +16 -6
  93. package/layout/ApplicationLayout.js +71 -125
  94. package/layout/ApplicationLayout.stories.tsx +83 -93
  95. package/layout/Icons.d.ts +5 -0
  96. package/layout/Icons.js +13 -2
  97. package/layout/SidenavContext.d.ts +5 -0
  98. package/layout/SidenavContext.js +19 -0
  99. package/layout/types.d.ts +18 -33
  100. package/link/Link.d.ts +3 -2
  101. package/link/Link.js +60 -85
  102. package/link/Link.stories.tsx +99 -52
  103. package/link/Link.test.js +83 -0
  104. package/link/types.d.ts +9 -29
  105. package/main.d.ts +11 -15
  106. package/main.js +53 -79
  107. package/number-input/NumberInput.js +11 -18
  108. package/number-input/NumberInput.stories.tsx +5 -5
  109. package/number-input/NumberInput.test.js +506 -0
  110. package/number-input/types.d.ts +17 -10
  111. package/package.json +12 -10
  112. package/paginator/Paginator.js +17 -38
  113. package/paginator/Paginator.test.js +308 -0
  114. package/paragraph/Paragraph.d.ts +6 -0
  115. package/paragraph/Paragraph.js +38 -0
  116. package/paragraph/Paragraph.stories.tsx +44 -0
  117. package/password-input/PasswordInput.js +7 -4
  118. package/password-input/PasswordInput.stories.tsx +3 -3
  119. package/password-input/PasswordInput.test.js +180 -0
  120. package/password-input/types.d.ts +14 -11
  121. package/progress-bar/ProgressBar.d.ts +2 -2
  122. package/progress-bar/ProgressBar.js +57 -51
  123. package/progress-bar/ProgressBar.stories.jsx +13 -11
  124. package/progress-bar/ProgressBar.test.js +110 -0
  125. package/progress-bar/types.d.ts +3 -4
  126. package/quick-nav/QuickNav.d.ts +4 -0
  127. package/quick-nav/QuickNav.js +118 -0
  128. package/quick-nav/QuickNav.stories.tsx +264 -0
  129. package/quick-nav/types.d.ts +21 -0
  130. package/quick-nav/types.js +5 -0
  131. package/radio-group/Radio.d.ts +1 -1
  132. package/radio-group/Radio.js +64 -32
  133. package/radio-group/RadioGroup.js +148 -33
  134. package/radio-group/RadioGroup.stories.tsx +63 -19
  135. package/radio-group/RadioGroup.test.js +695 -0
  136. package/radio-group/types.d.ts +88 -11
  137. package/resultsetTable/ResultsetTable.js +5 -2
  138. package/resultsetTable/ResultsetTable.stories.tsx +7 -8
  139. package/resultsetTable/ResultsetTable.test.js +348 -0
  140. package/select/Icons.d.ts +10 -0
  141. package/select/Icons.js +93 -0
  142. package/select/Listbox.d.ts +4 -0
  143. package/select/Listbox.js +199 -0
  144. package/select/Option.d.ts +4 -0
  145. package/select/Option.js +110 -0
  146. package/select/Select.js +145 -365
  147. package/select/Select.stories.tsx +231 -176
  148. package/select/Select.test.js +2175 -0
  149. package/select/types.d.ts +52 -12
  150. package/sidenav/Sidenav.d.ts +6 -5
  151. package/sidenav/Sidenav.js +184 -52
  152. package/sidenav/Sidenav.stories.tsx +154 -139
  153. package/sidenav/Sidenav.test.js +44 -0
  154. package/sidenav/types.d.ts +50 -27
  155. package/slider/Slider.d.ts +1 -1
  156. package/slider/Slider.js +5 -4
  157. package/slider/Slider.stories.tsx +8 -8
  158. package/slider/Slider.test.js +187 -0
  159. package/slider/types.d.ts +4 -0
  160. package/spinner/Spinner.js +1 -1
  161. package/spinner/Spinner.stories.jsx +1 -0
  162. package/spinner/Spinner.test.js +64 -0
  163. package/switch/Switch.d.ts +2 -2
  164. package/switch/Switch.js +127 -55
  165. package/switch/Switch.stories.tsx +21 -43
  166. package/switch/Switch.test.js +212 -0
  167. package/switch/types.d.ts +9 -6
  168. package/table/Table.stories.jsx +2 -1
  169. package/table/Table.test.js +26 -0
  170. package/tabs/Tabs.d.ts +1 -1
  171. package/tabs/Tabs.js +16 -18
  172. package/tabs/Tabs.stories.tsx +7 -16
  173. package/tabs/Tabs.test.js +140 -0
  174. package/tabs/types.d.ts +27 -15
  175. package/tabs-nav/NavTabs.d.ts +8 -0
  176. package/tabs-nav/NavTabs.js +125 -0
  177. package/tabs-nav/NavTabs.stories.tsx +170 -0
  178. package/tabs-nav/NavTabs.test.js +82 -0
  179. package/tabs-nav/Tab.d.ts +4 -0
  180. package/tabs-nav/Tab.js +130 -0
  181. package/tabs-nav/types.d.ts +53 -0
  182. package/tabs-nav/types.js +5 -0
  183. package/tag/Tag.d.ts +1 -1
  184. package/tag/Tag.js +17 -27
  185. package/tag/Tag.stories.tsx +26 -29
  186. package/tag/Tag.test.js +60 -0
  187. package/tag/types.d.ts +23 -14
  188. package/text-input/Suggestion.d.ts +4 -0
  189. package/text-input/Suggestion.js +55 -0
  190. package/text-input/TextInput.js +80 -105
  191. package/text-input/TextInput.stories.tsx +35 -18
  192. package/text-input/TextInput.test.js +1712 -0
  193. package/text-input/types.d.ts +32 -13
  194. package/textarea/Textarea.js +20 -27
  195. package/textarea/Textarea.stories.jsx +37 -15
  196. package/textarea/Textarea.test.js +437 -0
  197. package/textarea/types.d.ts +18 -11
  198. package/toggle-group/ToggleGroup.d.ts +1 -1
  199. package/toggle-group/ToggleGroup.js +5 -4
  200. package/toggle-group/ToggleGroup.stories.tsx +4 -4
  201. package/toggle-group/ToggleGroup.test.js +156 -0
  202. package/toggle-group/types.d.ts +9 -1
  203. package/typography/Typography.d.ts +4 -0
  204. package/typography/Typography.js +131 -0
  205. package/typography/Typography.stories.tsx +198 -0
  206. package/typography/types.d.ts +18 -0
  207. package/typography/types.js +5 -0
  208. package/useTheme.js +2 -2
  209. package/useTranslatedLabels.d.ts +2 -0
  210. package/useTranslatedLabels.js +20 -0
  211. package/wizard/Wizard.d.ts +1 -1
  212. package/wizard/Wizard.js +58 -54
  213. package/wizard/Wizard.stories.tsx +33 -24
  214. package/wizard/Wizard.test.js +141 -0
  215. package/wizard/types.d.ts +10 -5
  216. package/ThemeContext.d.ts +0 -15
  217. package/ThemeContext.js +0 -243
  218. package/V3Select/V3Select.js +0 -455
  219. package/V3Select/index.d.ts +0 -27
  220. package/V3Textarea/V3Textarea.js +0 -260
  221. package/V3Textarea/index.d.ts +0 -27
  222. package/date/Date.js +0 -373
  223. package/date/index.d.ts +0 -27
  224. package/input-text/Icons.js +0 -22
  225. package/input-text/InputText.js +0 -611
  226. package/input-text/index.d.ts +0 -36
  227. package/list/List.d.ts +0 -8
  228. package/list/List.js +0 -47
  229. package/list/List.stories.tsx +0 -95
  230. package/radio/Radio.d.ts +0 -4
  231. package/radio/Radio.js +0 -174
  232. package/radio/Radio.stories.tsx +0 -192
  233. package/radio/types.d.ts +0 -54
  234. package/row/Row.d.ts +0 -11
  235. package/row/Row.js +0 -127
  236. package/row/Row.stories.tsx +0 -239
  237. package/stack/Stack.d.ts +0 -10
  238. package/stack/Stack.js +0 -97
  239. package/stack/Stack.stories.tsx +0 -166
  240. package/text/Text.d.ts +0 -7
  241. package/text/Text.js +0 -30
  242. package/text/Text.stories.tsx +0 -19
  243. package/toggle/Toggle.js +0 -186
  244. package/toggle/index.d.ts +0 -21
  245. package/upload/Upload.js +0 -201
  246. package/upload/buttons-upload/ButtonsUpload.js +0 -111
  247. package/upload/buttons-upload/Icons.js +0 -40
  248. package/upload/dragAndDropArea/DragAndDropArea.js +0 -225
  249. package/upload/dragAndDropArea/Icons.js +0 -39
  250. package/upload/file-upload/FileToUpload.js +0 -115
  251. package/upload/file-upload/Icons.js +0 -66
  252. package/upload/files-upload/FilesToUpload.js +0 -109
  253. package/upload/index.d.ts +0 -15
  254. package/upload/transaction/Icons.js +0 -160
  255. package/upload/transaction/Transaction.js +0 -104
  256. package/upload/transactions/Transactions.js +0 -94
@@ -11,6 +11,8 @@ exports["default"] = void 0;
11
11
 
12
12
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
13
13
 
14
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
15
+
14
16
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
17
 
16
18
  var _react = _interopRequireWildcard(require("react"));
@@ -21,6 +23,8 @@ var _uuid = require("uuid");
21
23
 
22
24
  var _useTheme = _interopRequireDefault(require("../useTheme"));
23
25
 
26
+ var _useTranslatedLabels = _interopRequireDefault(require("../useTranslatedLabels"));
27
+
24
28
  var _Radio = _interopRequireDefault(require("./Radio"));
25
29
 
26
30
  var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7;
@@ -29,6 +33,13 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
29
33
 
30
34
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(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; }
31
35
 
36
+ var getInitialFocusIndex = function getInitialFocusIndex(innerOptions, value) {
37
+ var initialSelectedOptionIndex = innerOptions.findIndex(function (option) {
38
+ return option.value === value;
39
+ });
40
+ return initialSelectedOptionIndex !== -1 ? initialSelectedOptionIndex : 0;
41
+ };
42
+
32
43
  var DxcRadioGroup = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
33
44
  var label = _ref.label,
34
45
  name = _ref.name,
@@ -38,8 +49,7 @@ var DxcRadioGroup = /*#__PURE__*/_react["default"].forwardRef(function (_ref, re
38
49
  disabled = _ref$disabled === void 0 ? false : _ref$disabled,
39
50
  _ref$optional = _ref.optional,
40
51
  optional = _ref$optional === void 0 ? false : _ref$optional,
41
- _ref$optionalItemLabe = _ref.optionalItemLabel,
42
- optionalItemLabel = _ref$optionalItemLabe === void 0 ? "None" : _ref$optionalItemLabe,
52
+ optionalItemLabel = _ref.optionalItemLabel,
43
53
  _ref$readonly = _ref.readonly,
44
54
  readonly = _ref$readonly === void 0 ? false : _ref$readonly,
45
55
  _ref$stacking = _ref.stacking,
@@ -47,30 +57,123 @@ var DxcRadioGroup = /*#__PURE__*/_react["default"].forwardRef(function (_ref, re
47
57
  defaultValue = _ref.defaultValue,
48
58
  value = _ref.value,
49
59
  onChange = _ref.onChange,
50
- error = _ref.error;
60
+ onBlur = _ref.onBlur,
61
+ error = _ref.error,
62
+ _ref$tabIndex = _ref.tabIndex,
63
+ tabIndex = _ref$tabIndex === void 0 ? 0 : _ref$tabIndex;
51
64
 
52
- var _useState = (0, _react.useState)("select-".concat((0, _uuid.v4)())),
65
+ var _useState = (0, _react.useState)("radio-group-".concat((0, _uuid.v4)())),
53
66
  _useState2 = (0, _slicedToArray2["default"])(_useState, 1),
54
67
  radioGroupId = _useState2[0];
55
68
 
56
69
  var radioGroupLabelId = "label-".concat(radioGroupId);
70
+ var errorId = "error-".concat(radioGroupId);
57
71
 
58
72
  var _useState3 = (0, _react.useState)(defaultValue),
59
73
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
60
74
  innerValue = _useState4[0],
61
75
  setInnerValue = _useState4[1];
62
76
 
77
+ var _useState5 = (0, _react.useState)(true),
78
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
79
+ firstTimeFocus = _useState6[0],
80
+ setFirstTimeFocus = _useState6[1];
81
+
63
82
  var colorsTheme = (0, _useTheme["default"])();
64
- var handleOnChange = (0, _react.useCallback)(function (optionValue) {
65
- var val = value !== null && value !== void 0 ? value : innerValue;
83
+ var translatedLabels = (0, _useTranslatedLabels["default"])();
84
+ var optionalItem = {
85
+ label: optionalItemLabel || translatedLabels.radioGroup.optionalItemLabelDefault,
86
+ value: "",
87
+ disabled: disabled
88
+ };
89
+ var innerOptions = (0, _react.useMemo)(function () {
90
+ return optional ? [].concat((0, _toConsumableArray2["default"])(options), [optionalItem]) : options;
91
+ }, [optional, options]);
66
92
 
67
- if (optionValue !== val) {
68
- value !== null && value !== void 0 ? value : setInnerValue(optionValue);
69
- onChange === null || onChange === void 0 ? void 0 : onChange({
70
- value: optionValue
71
- });
93
+ var _useState7 = (0, _react.useState)(getInitialFocusIndex(innerOptions, value !== null && value !== void 0 ? value : innerValue)),
94
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
95
+ currentFocusIndex = _useState8[0],
96
+ setCurrentFocusIndex = _useState8[1];
97
+
98
+ var handleOnChange = (0, _react.useCallback)(function (newValue) {
99
+ var currentValue = value !== null && value !== void 0 ? value : innerValue;
100
+
101
+ if (newValue !== currentValue && !readonly) {
102
+ value !== null && value !== void 0 ? value : setInnerValue(newValue);
103
+ onChange === null || onChange === void 0 ? void 0 : onChange(newValue);
72
104
  }
73
105
  }, [value, innerValue, setInnerValue, onChange]);
106
+
107
+ var handleOnBlur = function handleOnBlur(e) {
108
+ // If the radio group loses the focus to an element not contained inside it...
109
+ if (!e.currentTarget.contains(e.relatedTarget)) {
110
+ setFirstTimeFocus(true);
111
+ var currentValue = value !== null && value !== void 0 ? value : innerValue;
112
+ !optional && !Boolean(currentValue) ? onBlur === null || onBlur === void 0 ? void 0 : onBlur({
113
+ value: currentValue,
114
+ error: translatedLabels.formFields.requiredSelectionErrorMessage
115
+ }) : onBlur === null || onBlur === void 0 ? void 0 : onBlur({
116
+ value: currentValue
117
+ });
118
+ }
119
+ };
120
+
121
+ var handleOnFocus = function handleOnFocus() {
122
+ firstTimeFocus && setFirstTimeFocus(false);
123
+ };
124
+
125
+ var setPreviousRadioChecked = function setPreviousRadioChecked() {
126
+ setCurrentFocusIndex(function (currentFocusIndex) {
127
+ var index = currentFocusIndex === 0 ? innerOptions.length - 1 : currentFocusIndex - 1;
128
+
129
+ while (innerOptions[index].disabled) {
130
+ index = index === 0 ? innerOptions.length - 1 : index - 1;
131
+ }
132
+
133
+ handleOnChange(innerOptions[index].value);
134
+ return index;
135
+ });
136
+ };
137
+
138
+ var setNextRadioChecked = function setNextRadioChecked() {
139
+ setCurrentFocusIndex(function (currentFocusIndex) {
140
+ var index = currentFocusIndex === innerOptions.length - 1 ? 0 : currentFocusIndex + 1;
141
+
142
+ while (innerOptions[index].disabled) {
143
+ index = index === innerOptions.length - 1 ? 0 : index + 1;
144
+ }
145
+
146
+ handleOnChange(innerOptions[index].value);
147
+ return index;
148
+ });
149
+ };
150
+
151
+ var handleOnKeyDown = function handleOnKeyDown(event) {
152
+ switch (event.key) {
153
+ case "Left":
154
+ case "ArrowLeft":
155
+ case "Up":
156
+ case "ArrowUp":
157
+ event.preventDefault();
158
+ setPreviousRadioChecked();
159
+ break;
160
+
161
+ case "Right":
162
+ case "ArrowRight":
163
+ case "Down":
164
+ case "ArrowDown":
165
+ event.preventDefault();
166
+ setNextRadioChecked();
167
+ break;
168
+
169
+ case "Enter":
170
+ case "Space":
171
+ event.preventDefault();
172
+ handleOnChange(innerOptions[currentFocusIndex].value);
173
+ break;
174
+ }
175
+ };
176
+
74
177
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
75
178
  theme: colorsTheme.radioGroup
76
179
  }, /*#__PURE__*/_react["default"].createElement(RadioGroupContainer, {
@@ -79,40 +182,48 @@ var DxcRadioGroup = /*#__PURE__*/_react["default"].forwardRef(function (_ref, re
79
182
  id: radioGroupLabelId,
80
183
  helperText: helperText,
81
184
  disabled: disabled
82
- }, label, " ", optional && /*#__PURE__*/_react["default"].createElement(OptionalLabel, null, "(Optional)")), helperText && /*#__PURE__*/_react["default"].createElement(HelperText, {
185
+ }, label, " ", optional && /*#__PURE__*/_react["default"].createElement(OptionalLabel, null, translatedLabels.formFields.optionalLabel)), helperText && /*#__PURE__*/_react["default"].createElement(HelperText, {
83
186
  disabled: disabled
84
187
  }, helperText), /*#__PURE__*/_react["default"].createElement(RadioGroup, {
188
+ onBlur: handleOnBlur,
189
+ onFocus: handleOnFocus,
190
+ onKeyDown: handleOnKeyDown,
85
191
  stacking: stacking,
86
192
  role: "radiogroup",
87
- "aria-labelledby": radioGroupLabelId
193
+ "aria-disabled": disabled,
194
+ "aria-labelledby": radioGroupLabelId,
195
+ "aria-invalid": error ? "true" : "false",
196
+ "aria-errormessage": error ? errorId : undefined,
197
+ "aria-required": !disabled && !readonly && !optional,
198
+ "aria-readonly": readonly,
199
+ "aria-orientation": stacking === "column" ? "vertical" : "horizontal"
88
200
  }, /*#__PURE__*/_react["default"].createElement(ValueInput, {
89
201
  name: name,
90
202
  value: value !== null && value !== void 0 ? value : innerValue,
91
203
  readOnly: true,
92
204
  "aria-hidden": "true"
93
- }), options.map(function (option, index) {
205
+ }), innerOptions.map(function (option, index) {
94
206
  return /*#__PURE__*/_react["default"].createElement(_Radio["default"], {
95
207
  option: option,
96
208
  currentValue: value !== null && value !== void 0 ? value : innerValue,
97
- onChange: handleOnChange,
98
- disabledRadioGroup: disabled,
209
+ onClick: function onClick() {
210
+ handleOnChange(option.value);
211
+ setCurrentFocusIndex(index);
212
+ },
99
213
  error: error,
100
- first: !value && !innerValue && index === 0
214
+ disabled: option.disabled || disabled,
215
+ focused: currentFocusIndex === index,
216
+ readonly: readonly,
217
+ tabIndex: tabIndex,
218
+ key: "radio-".concat(index)
101
219
  });
102
- }), optional && /*#__PURE__*/_react["default"].createElement(_Radio["default"], {
103
- option: {
104
- label: optionalItemLabel,
105
- value: "",
106
- disabled: disabled
107
- },
108
- currentValue: value !== null && value !== void 0 ? value : innerValue,
109
- onChange: handleOnChange,
110
- disabledRadioGroup: disabled,
111
- error: error
112
- })), !disabled && typeof error === "string" && /*#__PURE__*/_react["default"].createElement(Error, null, error)));
220
+ })), !disabled && typeof error === "string" && /*#__PURE__*/_react["default"].createElement(Error, {
221
+ id: errorId,
222
+ "aria-live": error ? "assertive" : "off"
223
+ }, error)));
113
224
  });
114
225
 
115
- var RadioGroupContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n"])));
226
+ var RadioGroupContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n flex-direction: column;\n box-sizing: border-box;\n"])));
116
227
 
117
228
  var Label = _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 ", "\n"])), function (props) {
118
229
  return props.disabled ? props.theme.disabledLabelFontColor : props.theme.labelFontColor;
@@ -127,14 +238,14 @@ var Label = _styledComponents["default"].span(_templateObject2 || (_templateObje
127
238
  }, function (props) {
128
239
  return props.theme.labelLineHeight;
129
240
  }, function (props) {
130
- return !props.helperText && "margin-bottom: 0.25rem;";
241
+ return !props.helperText && "margin-bottom: ".concat(props.theme.groupLabelMargin);
131
242
  });
132
243
 
133
244
  var OptionalLabel = _styledComponents["default"].span(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n font-weight: ", ";\n"])), function (props) {
134
245
  return props.theme.optionalLabelFontWeight;
135
246
  });
136
247
 
137
- var HelperText = _styledComponents["default"].span(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n line-height: ", ";\n margin-bottom: 0.5rem;\n"])), function (props) {
248
+ var HelperText = _styledComponents["default"].span(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n line-height: ", ";\n margin-bottom: ", ";\n"])), function (props) {
138
249
  return props.disabled ? props.theme.disabledHelperTextFontColor : props.theme.helperTextFontColor;
139
250
  }, function (props) {
140
251
  return props.theme.fontFamily;
@@ -146,12 +257,16 @@ var HelperText = _styledComponents["default"].span(_templateObject4 || (_templat
146
257
  return props.theme.helperTextFontWeight;
147
258
  }, function (props) {
148
259
  return props.theme.helperTextLineHeight;
260
+ }, function (props) {
261
+ return props.theme.groupLabelMargin;
149
262
  });
150
263
 
151
- var RadioGroup = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-wrap: wrap;\n flex-direction: ", ";\n\n div + div {\n ", ";\n }\n"])), function (props) {
264
+ var RadioGroup = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-wrap: wrap;\n flex-direction: ", ";\n\n row-gap: ", ";\n column-gap: ", ";\n"])), function (props) {
152
265
  return props.stacking;
153
266
  }, function (props) {
154
- return props.stacking === "column" ? "margin-top: 0.25rem;" : "margin-left: 2rem;";
267
+ return props.theme.groupVerticalGutter;
268
+ }, function (props) {
269
+ return props.theme.groupHorizontalGutter;
155
270
  });
156
271
 
157
272
  var ValueInput = _styledComponents["default"].input(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n display: none;\n"])));
@@ -7,50 +7,94 @@ export default {
7
7
  component: DxcRadioGroup,
8
8
  };
9
9
 
10
+ const single_option = [{ label: "Option A", value: "A" }];
11
+
10
12
  const options = [
11
13
  { label: "Option 1", value: "1" },
12
14
  { label: "Option 2", value: "2" },
13
15
  { label: "Option 3", value: "3" },
16
+ { label: "Option 4", value: "4" },
14
17
  ];
15
18
 
16
- const single_disabled_options = [
17
- { label: "Option 1", value: "1" },
18
- { label: "Option 2", value: "2", disabled: true },
19
- { label: "Option 3", value: "3" },
20
- ];
19
+ const single_disabled_options = [{ label: "Option A", value: "A", disabled: true }];
21
20
 
22
21
  export const Chromatic = () => (
23
22
  <>
23
+ <Title title="Radio input states" theme="light" level={2} />
24
+ <ExampleContainer>
25
+ <Title title="Enabled" theme="light" level={4} />
26
+ <DxcRadioGroup label="Example" defaultValue="A" options={single_option} />
27
+ </ExampleContainer>
28
+ <ExampleContainer pseudoState="pseudo-hover">
29
+ <Title title="Hovered" theme="light" level={4} />
30
+ <DxcRadioGroup label="Example" defaultValue="A" options={single_option} />
31
+ </ExampleContainer>
32
+ <ExampleContainer pseudoState="pseudo-active">
33
+ <Title title="Active" theme="light" level={4} />
34
+ <DxcRadioGroup label="Example" defaultValue="A" options={single_option} />
35
+ </ExampleContainer>
36
+ <ExampleContainer pseudoState="pseudo-focus">
37
+ <Title title="Focused" theme="light" level={4} />
38
+ <DxcRadioGroup label="Example" defaultValue="A" options={single_option} />
39
+ </ExampleContainer>
40
+ <ExampleContainer>
41
+ <Title title="Disabled" theme="light" level={4} />
42
+ <DxcRadioGroup label="Example" options={single_disabled_options} defaultValue="A" />
43
+ </ExampleContainer>
44
+ <Title title="Readonly radio input sub-states" theme="light" level={3} />
24
45
  <ExampleContainer>
25
- <Title title="Default (column)" theme="light" level={4} />
46
+ <Title title="Enabled" theme="light" level={4} />
47
+ <DxcRadioGroup label="Example" options={single_option} defaultValue="A" readonly />
48
+ </ExampleContainer>
49
+ <ExampleContainer pseudoState="pseudo-hover">
50
+ <Title title="Hovered" theme="light" level={4} />
51
+ <DxcRadioGroup label="Example" options={single_option} defaultValue="A" readonly />
52
+ </ExampleContainer>
53
+ <ExampleContainer pseudoState="pseudo-active">
54
+ <Title title="Active" theme="light" level={4} />
55
+ <DxcRadioGroup label="Example" options={single_option} defaultValue="A" readonly />
56
+ </ExampleContainer>
57
+ <Title title="Error radio input sub-states" theme="light" level={3} />
58
+ <ExampleContainer>
59
+ <Title title="Enabled" theme="light" level={4} />
60
+ <DxcRadioGroup label="Example" options={single_option} defaultValue="A" error="Error message" />
61
+ </ExampleContainer>
62
+ <ExampleContainer pseudoState="pseudo-hover">
63
+ <Title title="Hovered" theme="light" level={4} />
64
+ <DxcRadioGroup label="Example" options={single_option} defaultValue="A" readonly error="Error message" />
65
+ </ExampleContainer>
66
+ <ExampleContainer pseudoState="pseudo-active">
67
+ <Title title="Active" theme="light" level={4} />
68
+ <DxcRadioGroup label="Example" options={single_option} defaultValue="A" readonly error="Error message" />
69
+ </ExampleContainer>
70
+ <Title title="Variants" theme="light" level={2} />
71
+ <ExampleContainer>
72
+ <Title title="Column" theme="light" level={4} />
26
73
  <DxcRadioGroup label="Example" helperText="Helper text" options={options} />
27
74
  </ExampleContainer>
28
75
  <ExampleContainer>
29
76
  <Title title="Row" theme="light" level={4} />
30
77
  <DxcRadioGroup label="Example" helperText="Helper text" options={options} stacking="row" />
31
78
  </ExampleContainer>
79
+ <ExampleContainer>
80
+ <Title title="Optional" theme="light" level={4} />
81
+ <DxcRadioGroup label="Example" optional helperText="Helper text" options={options} stacking="row" />
82
+ </ExampleContainer>
32
83
  <ExampleContainer>
33
84
  <Title title="Disabled" theme="light" level={4} />
34
- <DxcRadioGroup label="Disabled" error="Error message" helperText="Helper text" options={options} disabled optional defaultValue="2" />
85
+ <DxcRadioGroup label="Example" helperText="Helper text" options={options} disabled />
35
86
  </ExampleContainer>
36
87
  <ExampleContainer>
37
- <Title title="Single disabled" theme="light" level={4} />
38
- <DxcRadioGroup label="Disabled" helperText="Helper text" options={single_disabled_options} optional defaultValue="3" />
88
+ <Title title="Readonly" theme="light" level={4} />
89
+ <DxcRadioGroup label="Example" readonly helperText="Helper text" options={options} />
39
90
  </ExampleContainer>
40
91
  <ExampleContainer>
41
- <Title title="Optional" theme="light" level={4} />
42
- <DxcRadioGroup
43
- label="Example"
44
- optionalOptionLabel="No selection"
45
- optional
46
- helperText="Helper text"
47
- options={options}
48
- stacking="row"
49
- />
92
+ <Title title="Error space reserved" theme="light" level={4} />
93
+ <DxcRadioGroup label="Example" error="" helperText="Helper text" options={options} />
50
94
  </ExampleContainer>
51
95
  <ExampleContainer>
52
96
  <Title title="Error" theme="light" level={4} />
53
- <DxcRadioGroup label="Example" error="Error message" helperText="Helper text" options={options} defaultValue="2" />
97
+ <DxcRadioGroup label="Example" error="Error message" helperText="Helper text" options={options} />
54
98
  </ExampleContainer>
55
99
  </>
56
100
  );