@dxc-technology/halstack-react 0.0.0-61a8ced → 0.0.0-62702b8

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 (244) hide show
  1. package/BackgroundColorContext.d.ts +2 -2
  2. package/BackgroundColorContext.js +1 -1
  3. package/HalstackContext.d.ts +1349 -5
  4. package/HalstackContext.js +117 -77
  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 -13
  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 -13
  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 -11
  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 -6
  40. package/checkbox/Checkbox.d.ts +2 -2
  41. package/checkbox/Checkbox.js +74 -53
  42. package/checkbox/Checkbox.stories.tsx +146 -58
  43. package/checkbox/Checkbox.test.js +84 -11
  44. package/checkbox/types.d.ts +10 -2
  45. package/chip/Chip.js +28 -49
  46. package/chip/Chip.stories.tsx +121 -26
  47. package/chip/Chip.test.js +3 -5
  48. package/common/OpenSans.css +68 -80
  49. package/common/coreTokens.d.ts +146 -0
  50. package/common/coreTokens.js +167 -0
  51. package/common/utils.d.ts +1 -0
  52. package/common/utils.js +4 -4
  53. package/common/variables.d.ts +1499 -0
  54. package/common/variables.js +1004 -1134
  55. package/date-input/Calendar.d.ts +4 -0
  56. package/date-input/Calendar.js +258 -0
  57. package/date-input/DateInput.js +138 -239
  58. package/date-input/DateInput.stories.tsx +209 -33
  59. package/date-input/DateInput.test.js +519 -149
  60. package/date-input/DatePicker.d.ts +4 -0
  61. package/date-input/DatePicker.js +146 -0
  62. package/date-input/Icons.d.ts +6 -0
  63. package/date-input/Icons.js +75 -0
  64. package/date-input/YearPicker.d.ts +4 -0
  65. package/date-input/YearPicker.js +126 -0
  66. package/date-input/types.d.ts +57 -0
  67. package/dialog/Dialog.d.ts +1 -1
  68. package/dialog/Dialog.js +54 -85
  69. package/dialog/Dialog.stories.tsx +154 -170
  70. package/dialog/Dialog.test.js +302 -3
  71. package/dialog/types.d.ts +0 -12
  72. package/dropdown/Dropdown.js +42 -41
  73. package/dropdown/Dropdown.stories.tsx +210 -84
  74. package/dropdown/Dropdown.test.js +22 -27
  75. package/dropdown/DropdownMenu.js +12 -18
  76. package/dropdown/DropdownMenuItem.js +5 -18
  77. package/dropdown/types.d.ts +3 -3
  78. package/file-input/FileInput.d.ts +2 -2
  79. package/file-input/FileInput.js +174 -220
  80. package/file-input/FileInput.stories.tsx +122 -11
  81. package/file-input/FileInput.test.js +14 -14
  82. package/file-input/FileItem.d.ts +4 -14
  83. package/file-input/FileItem.js +39 -63
  84. package/file-input/types.d.ts +18 -1
  85. package/flex/Flex.d.ts +1 -1
  86. package/flex/Flex.js +33 -19
  87. package/flex/Flex.stories.tsx +35 -26
  88. package/flex/types.d.ts +83 -7
  89. package/footer/Footer.d.ts +1 -1
  90. package/footer/Footer.js +44 -64
  91. package/footer/Footer.stories.tsx +36 -21
  92. package/footer/Footer.test.js +16 -26
  93. package/footer/types.d.ts +10 -11
  94. package/grid/Grid.d.ts +7 -0
  95. package/grid/Grid.js +91 -0
  96. package/grid/Grid.stories.tsx +219 -0
  97. package/grid/types.d.ts +115 -0
  98. package/header/Header.d.ts +4 -3
  99. package/header/Header.js +20 -49
  100. package/header/Header.stories.tsx +115 -36
  101. package/header/Header.test.js +2 -2
  102. package/header/types.d.ts +1 -14
  103. package/heading/Heading.js +1 -1
  104. package/heading/Heading.test.js +1 -1
  105. package/image/Image.d.ts +4 -0
  106. package/image/Image.js +85 -0
  107. package/image/Image.stories.tsx +127 -0
  108. package/image/types.d.ts +72 -0
  109. package/inset/Inset.stories.tsx +2 -1
  110. package/layout/ApplicationLayout.d.ts +5 -5
  111. package/layout/ApplicationLayout.js +15 -12
  112. package/layout/ApplicationLayout.stories.tsx +1 -1
  113. package/layout/Icons.d.ts +7 -4
  114. package/layout/Icons.js +52 -56
  115. package/layout/types.d.ts +2 -3
  116. package/link/Link.js +4 -4
  117. package/link/Link.stories.tsx +60 -0
  118. package/link/Link.test.js +2 -4
  119. package/link/types.d.ts +2 -2
  120. package/main.d.ts +5 -3
  121. package/main.js +18 -2
  122. package/{tabs-nav → nav-tabs}/NavTabs.d.ts +2 -2
  123. package/{tabs-nav → nav-tabs}/NavTabs.js +8 -11
  124. package/{tabs-nav → nav-tabs}/NavTabs.stories.tsx +110 -6
  125. package/{tabs-nav → nav-tabs}/NavTabs.test.js +1 -1
  126. package/{tabs-nav → nav-tabs}/Tab.js +49 -33
  127. package/{tabs-nav → nav-tabs}/types.d.ts +8 -9
  128. package/number-input/NumberInput.d.ts +7 -0
  129. package/number-input/NumberInput.js +8 -4
  130. package/number-input/NumberInput.stories.tsx +47 -2
  131. package/number-input/NumberInput.test.js +354 -92
  132. package/number-input/types.d.ts +6 -0
  133. package/package.json +14 -19
  134. package/paginator/Icons.d.ts +5 -0
  135. package/paginator/Icons.js +16 -28
  136. package/paginator/Paginator.js +8 -16
  137. package/paginator/Paginator.stories.tsx +24 -0
  138. package/paginator/Paginator.test.js +58 -48
  139. package/paragraph/Paragraph.d.ts +3 -4
  140. package/paragraph/Paragraph.js +5 -5
  141. package/password-input/Icons.d.ts +6 -0
  142. package/password-input/Icons.js +39 -0
  143. package/password-input/PasswordInput.js +35 -82
  144. package/password-input/PasswordInput.stories.tsx +1 -0
  145. package/password-input/PasswordInput.test.js +34 -40
  146. package/progress-bar/ProgressBar.d.ts +2 -2
  147. package/progress-bar/ProgressBar.js +5 -5
  148. package/progress-bar/ProgressBar.stories.jsx +35 -2
  149. package/progress-bar/ProgressBar.test.js +1 -1
  150. package/progress-bar/types.d.ts +4 -3
  151. package/quick-nav/QuickNav.js +11 -12
  152. package/quick-nav/QuickNav.stories.tsx +111 -19
  153. package/radio-group/Radio.d.ts +1 -1
  154. package/radio-group/Radio.js +50 -35
  155. package/radio-group/RadioGroup.js +29 -29
  156. package/radio-group/RadioGroup.stories.tsx +132 -18
  157. package/radio-group/RadioGroup.test.js +153 -99
  158. package/radio-group/types.d.ts +5 -5
  159. package/resultset-table/Icons.d.ts +7 -0
  160. package/resultset-table/Icons.js +51 -0
  161. package/{resultsetTable → resultset-table}/ResultsetTable.js +49 -108
  162. package/{resultsetTable → resultset-table}/ResultsetTable.stories.tsx +50 -25
  163. package/{resultsetTable → resultset-table}/ResultsetTable.test.js +41 -64
  164. package/{resultsetTable → resultset-table}/types.d.ts +1 -1
  165. package/resultset-table/types.js +5 -0
  166. package/select/Listbox.d.ts +1 -1
  167. package/select/Listbox.js +5 -35
  168. package/select/Option.js +11 -24
  169. package/select/Select.js +59 -36
  170. package/select/Select.stories.tsx +497 -153
  171. package/select/Select.test.js +345 -292
  172. package/select/types.d.ts +2 -2
  173. package/sidenav/Icons.d.ts +7 -0
  174. package/sidenav/Icons.js +51 -0
  175. package/sidenav/Sidenav.d.ts +2 -2
  176. package/sidenav/Sidenav.js +66 -96
  177. package/sidenav/Sidenav.stories.tsx +165 -63
  178. package/sidenav/types.d.ts +21 -18
  179. package/slider/Slider.d.ts +2 -2
  180. package/slider/Slider.js +17 -14
  181. package/slider/Slider.stories.tsx +57 -0
  182. package/slider/Slider.test.js +1 -1
  183. package/slider/types.d.ts +6 -2
  184. package/spinner/Spinner.js +17 -23
  185. package/spinner/Spinner.stories.jsx +53 -27
  186. package/spinner/Spinner.test.js +1 -1
  187. package/switch/Switch.d.ts +3 -3
  188. package/switch/Switch.js +95 -84
  189. package/switch/Switch.stories.tsx +33 -0
  190. package/switch/Switch.test.js +27 -14
  191. package/switch/types.d.ts +8 -3
  192. package/table/Table.js +3 -3
  193. package/table/Table.stories.jsx +80 -1
  194. package/table/Table.test.js +2 -2
  195. package/tabs/Tab.js +12 -15
  196. package/tabs/Tabs.js +11 -17
  197. package/tabs/Tabs.stories.tsx +45 -5
  198. package/tabs/Tabs.test.js +4 -5
  199. package/tabs/types.d.ts +2 -2
  200. package/tag/Tag.js +7 -9
  201. package/tag/Tag.stories.tsx +14 -1
  202. package/tag/Tag.test.js +1 -1
  203. package/text-input/Icons.d.ts +8 -0
  204. package/text-input/Icons.js +60 -0
  205. package/text-input/Suggestion.js +40 -11
  206. package/text-input/Suggestions.d.ts +4 -0
  207. package/text-input/Suggestions.js +134 -0
  208. package/text-input/TextInput.js +232 -342
  209. package/text-input/TextInput.stories.tsx +319 -184
  210. package/text-input/TextInput.test.js +848 -726
  211. package/text-input/types.d.ts +27 -2
  212. package/textarea/Textarea.js +27 -26
  213. package/textarea/Textarea.stories.jsx +68 -1
  214. package/textarea/Textarea.test.js +61 -19
  215. package/textarea/types.d.ts +4 -0
  216. package/toggle-group/ToggleGroup.d.ts +2 -2
  217. package/toggle-group/ToggleGroup.js +85 -59
  218. package/toggle-group/ToggleGroup.stories.tsx +48 -3
  219. package/toggle-group/ToggleGroup.test.js +38 -24
  220. package/toggle-group/types.d.ts +22 -13
  221. package/typography/Typography.d.ts +2 -2
  222. package/typography/Typography.js +14 -113
  223. package/typography/Typography.stories.tsx +1 -1
  224. package/useTheme.d.ts +1251 -1
  225. package/useTheme.js +1 -1
  226. package/useTranslatedLabels.d.ts +84 -1
  227. package/utils/BaseTypography.d.ts +21 -0
  228. package/utils/BaseTypography.js +108 -0
  229. package/utils/FocusLock.d.ts +13 -0
  230. package/utils/FocusLock.js +138 -0
  231. package/wizard/Wizard.js +2 -2
  232. package/wizard/Wizard.stories.tsx +20 -0
  233. package/wizard/Wizard.test.js +1 -1
  234. package/wizard/types.d.ts +5 -6
  235. package/card/ice-cream.jpg +0 -0
  236. package/common/RequiredComponent.js +0 -32
  237. package/number-input/NumberInputContext.d.ts +0 -4
  238. package/number-input/NumberInputContext.js +0 -19
  239. package/number-input/numberInputContextTypes.d.ts +0 -19
  240. /package/{resultsetTable → grid}/types.js +0 -0
  241. /package/{tabs-nav → image}/types.js +0 -0
  242. /package/{tabs-nav → nav-tabs}/Tab.d.ts +0 -0
  243. /package/{number-input/numberInputContextTypes.js → nav-tabs/types.js} +0 -0
  244. /package/{resultsetTable → resultset-table}/ResultsetTable.d.ts +0 -0
@@ -19,9 +19,9 @@ var _react = _interopRequireWildcard(require("react"));
19
19
 
20
20
  var _styledComponents = _interopRequireWildcard(require("styled-components"));
21
21
 
22
- var _variables = require("../common/variables.js");
22
+ var _variables = require("../common/variables");
23
23
 
24
- var _utils = require("../common/utils.js");
24
+ var _utils = require("../common/utils");
25
25
 
26
26
  var _uuid = require("uuid");
27
27
 
@@ -46,7 +46,7 @@ var checkedIcon = /*#__PURE__*/_react["default"].createElement("svg", {
46
46
  d: "M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"
47
47
  }));
48
48
 
49
- var DxcCheckbox = function DxcCheckbox(_ref) {
49
+ var DxcCheckbox = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
50
50
  var checked = _ref.checked,
51
51
  _ref$defaultChecked = _ref.defaultChecked,
52
52
  defaultChecked = _ref$defaultChecked === void 0 ? false : _ref$defaultChecked,
@@ -61,6 +61,8 @@ var DxcCheckbox = function DxcCheckbox(_ref) {
61
61
  disabled = _ref$disabled === void 0 ? false : _ref$disabled,
62
62
  _ref$optional = _ref.optional,
63
63
  optional = _ref$optional === void 0 ? false : _ref$optional,
64
+ _ref$readOnly = _ref.readOnly,
65
+ readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
64
66
  onChange = _ref.onChange,
65
67
  margin = _ref.margin,
66
68
  _ref$size = _ref.size,
@@ -83,20 +85,21 @@ var DxcCheckbox = function DxcCheckbox(_ref) {
83
85
  var translatedLabels = (0, _useTranslatedLabels["default"])();
84
86
 
85
87
  var handleCheckboxChange = function handleCheckboxChange() {
86
- var _checkboxRef$current;
87
-
88
- if (document.activeElement !== (checkboxRef === null || checkboxRef === void 0 ? void 0 : checkboxRef.current) && tabIndex > -1) checkboxRef === null || checkboxRef === void 0 ? void 0 : (_checkboxRef$current = checkboxRef.current) === null || _checkboxRef$current === void 0 ? void 0 : _checkboxRef$current.focus();
89
- var newChecked = checked !== null && checked !== void 0 ? checked : innerChecked;
90
- checked !== null && checked !== void 0 ? checked : setInnerChecked(function (innerChecked) {
91
- return !innerChecked;
92
- });
93
- onChange === null || onChange === void 0 ? void 0 : onChange(!newChecked);
88
+ if (!disabled && !readOnly) {
89
+ var _checkboxRef$current;
90
+
91
+ document.activeElement !== (checkboxRef === null || checkboxRef === void 0 ? void 0 : checkboxRef.current) && (checkboxRef === null || checkboxRef === void 0 ? void 0 : (_checkboxRef$current = checkboxRef.current) === null || _checkboxRef$current === void 0 ? void 0 : _checkboxRef$current.focus());
92
+ var newChecked = checked !== null && checked !== void 0 ? checked : innerChecked;
93
+ checked !== null && checked !== void 0 ? checked : setInnerChecked(function (innerChecked) {
94
+ return !innerChecked;
95
+ });
96
+ onChange === null || onChange === void 0 ? void 0 : onChange(!newChecked);
97
+ }
94
98
  };
95
99
 
96
100
  var handleKeyboard = function handleKeyboard(event) {
97
101
  switch (event.key) {
98
102
  case " ":
99
- case "Space":
100
103
  event.preventDefault();
101
104
  handleCheckboxChange();
102
105
  }
@@ -106,16 +109,19 @@ var DxcCheckbox = function DxcCheckbox(_ref) {
106
109
  theme: colorsTheme.checkbox
107
110
  }, /*#__PURE__*/_react["default"].createElement(MainContainer, {
108
111
  disabled: disabled,
109
- onClick: disabled ? undefined : handleCheckboxChange,
112
+ readOnly: readOnly,
113
+ onClick: handleCheckboxChange,
110
114
  margin: margin,
111
115
  size: size,
112
116
  checked: checked !== null && checked !== void 0 ? checked : innerChecked,
113
- backgroundType: backgroundType
114
- }, label && labelPosition === "before" && /*#__PURE__*/_react["default"].createElement(LabelContainer, {
117
+ backgroundType: backgroundType,
118
+ ref: ref
119
+ }, label && /*#__PURE__*/_react["default"].createElement(LabelContainer, {
115
120
  id: labelId,
116
121
  disabled: disabled,
117
- backgroundType: backgroundType
118
- }, label, optional && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, " ".concat(translatedLabels.formFields.optionalLabel))), /*#__PURE__*/_react["default"].createElement(ValueInput, {
122
+ backgroundType: backgroundType,
123
+ labelPosition: labelPosition
124
+ }, label, optional && " ".concat(translatedLabels.formFields.optionalLabel)), /*#__PURE__*/_react["default"].createElement(ValueInput, {
119
125
  type: "checkbox",
120
126
  checked: checked !== null && checked !== void 0 ? checked : innerChecked,
121
127
  name: name,
@@ -129,18 +135,16 @@ var DxcCheckbox = function DxcCheckbox(_ref) {
129
135
  tabIndex: disabled ? -1 : tabIndex,
130
136
  "aria-checked": checked !== null && checked !== void 0 ? checked : innerChecked,
131
137
  "aria-disabled": disabled,
138
+ "aria-readonly": readOnly,
132
139
  "aria-required": !disabled && !optional,
133
140
  "aria-labelledby": labelId,
134
141
  backgroundType: backgroundType,
135
142
  checked: checked !== null && checked !== void 0 ? checked : innerChecked,
136
143
  disabled: disabled,
144
+ readOnly: readOnly,
137
145
  ref: checkboxRef
138
- }, (checked !== null && checked !== void 0 ? checked : innerChecked) && checkedIcon)), label && labelPosition === "after" && /*#__PURE__*/_react["default"].createElement(LabelContainer, {
139
- id: labelId,
140
- disabled: disabled,
141
- backgroundType: backgroundType
142
- }, optional && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, "".concat(translatedLabels.formFields.optionalLabel, " ")), label)));
143
- };
146
+ }, (checked !== null && checked !== void 0 ? checked : innerChecked) && checkedIcon))));
147
+ });
144
148
 
145
149
  var sizes = {
146
150
  small: "120px",
@@ -151,53 +155,70 @@ var sizes = {
151
155
  };
152
156
 
153
157
  var calculateWidth = function calculateWidth(margin, size) {
154
- if (size === "fillParent") {
155
- return "calc(".concat(sizes[size], " - ").concat((0, _utils.getMargin)(margin, "left"), " - ").concat((0, _utils.getMargin)(margin, "right"), ")");
156
- }
157
-
158
- return sizes[size];
158
+ return size === "fillParent" ? "calc(".concat(sizes[size], " - ").concat((0, _utils.getMargin)(margin, "left"), " - ").concat((0, _utils.getMargin)(margin, "right"), ")") : sizes[size];
159
159
  };
160
160
 
161
161
  var getDisabledColor = function getDisabledColor(props, element) {
162
162
  switch (element) {
163
163
  case "check":
164
- return props.backgroundType && props.backgroundType === "dark" ? props.theme.disabledCheckColorOnDark : props.theme.disabledCheckColor;
164
+ return props.backgroundType === "dark" ? props.theme.disabledCheckColorOnDark : props.theme.disabledCheckColor;
165
165
 
166
166
  case "background":
167
- return props.backgroundType && props.backgroundType === "dark" ? props.theme.disabledBackgroundColorCheckedOnDark : props.theme.disabledBackgroundColorChecked;
167
+ return props.backgroundType === "dark" ? props.theme.disabledBackgroundColorCheckedOnDark : props.theme.disabledBackgroundColorChecked;
168
168
 
169
169
  case "border":
170
- return props.backgroundType && props.backgroundType === "dark" ? props.theme.disabledBorderColorOnDark : props.theme.disabledBorderColor;
170
+ return props.backgroundType === "dark" ? props.theme.disabledBorderColorOnDark : props.theme.disabledBorderColor;
171
171
 
172
172
  case "label":
173
- return props.backgroundType && props.backgroundType === "dark" ? props.theme.disabledFontColorOnDark : props.theme.disabledFontColor;
173
+ return props.backgroundType === "dark" ? props.theme.disabledFontColorOnDark : props.theme.disabledFontColor;
174
174
  }
175
175
  };
176
176
 
177
- var getNotDisabledColor = function getNotDisabledColor(props, element) {
177
+ var getReadOnlyColor = function getReadOnlyColor(props, element) {
178
178
  switch (element) {
179
179
  case "check":
180
- return props.backgroundType && props.backgroundType === "dark" ? props.theme.checkColorOnDark : props.theme.checkColor;
180
+ return props.theme.readOnlyCheckColor;
181
181
 
182
182
  case "background":
183
- return props.backgroundType && props.backgroundType === "dark" ? props.theme.backgroundColorCheckedOnDark : props.theme.backgroundColorChecked;
183
+ return props.theme.readOnlyBackgroundColorChecked;
184
184
 
185
185
  case "hoverBackground":
186
- return props.backgroundType && props.backgroundType === "dark" ? props.theme.hoverBackgroundColorCheckedOnDark : props.theme.hoverBackgroundColorChecked;
186
+ return props.theme.hoverReadOnlyBackgroundColorChecked;
187
187
 
188
188
  case "border":
189
- return props.backgroundType && props.backgroundType === "dark" ? props.theme.borderColorOnDark : props.theme.borderColor;
189
+ return props.theme.readOnlyBorderColor;
190
190
 
191
191
  case "hoverBorder":
192
- return props.backgroundType && props.backgroundType === "dark" ? props.theme.hoverBorderColorOnDark : props.theme.hoverBorderColor;
192
+ return props.theme.hoverReadOnlyBorderColor;
193
+ }
194
+ };
195
+
196
+ var getEnabledColor = function getEnabledColor(props, element) {
197
+ switch (element) {
198
+ case "check":
199
+ return props.backgroundType === "dark" ? props.theme.checkColorOnDark : props.theme.checkColor;
200
+
201
+ case "background":
202
+ return props.backgroundType === "dark" ? props.theme.backgroundColorCheckedOnDark : props.theme.backgroundColorChecked;
203
+
204
+ case "hoverBackground":
205
+ return props.backgroundType === "dark" ? props.theme.hoverBackgroundColorCheckedOnDark : props.theme.hoverBackgroundColorChecked;
206
+
207
+ case "border":
208
+ return props.backgroundType === "dark" ? props.theme.borderColorOnDark : props.theme.borderColor;
209
+
210
+ case "hoverBorder":
211
+ return props.backgroundType === "dark" ? props.theme.hoverBorderColorOnDark : props.theme.hoverBorderColor;
193
212
 
194
213
  case "label":
195
- return props.backgroundType && props.backgroundType === "dark" ? props.theme.fontColorOnDark : props.theme.fontColor;
214
+ return props.backgroundType === "dark" ? props.theme.fontColorOnDark : props.theme.fontColor;
196
215
  }
197
216
  };
198
217
 
199
- var LabelContainer = _styledComponents["default"].span(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-weight: ", ";\n"])), function (props) {
200
- return props.disabled ? getDisabledColor(props, "label") : getNotDisabledColor(props, "label");
218
+ var LabelContainer = _styledComponents["default"].span(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n order: ", ";\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-weight: ", ";\n"])), function (props) {
219
+ return props.labelPosition === "before" ? 0 : 1;
220
+ }, function (props) {
221
+ return props.disabled ? getDisabledColor(props, "label") : getEnabledColor(props, "label");
201
222
  }, function (props) {
202
223
  return props.theme.fontFamily;
203
224
  }, function (props) {
@@ -210,17 +231,21 @@ var ValueInput = _styledComponents["default"].input(_templateObject2 || (_templa
210
231
 
211
232
  var CheckboxContainer = _styledComponents["default"].span(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n justify-content: center;\n height: 24px;\n width: 24px;\n"])));
212
233
 
213
- var Checkbox = _styledComponents["default"].span(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 18px;\n width: 18px;\n border-radius: 2px;\n border: solid 2px\n ", ";\n background-color: ", ";\n color: ", ";\n\n &:focus {\n outline: 2px solid\n ", ";\n outline-offset: 2px;\n }\n svg {\n position: absolute;\n width: 22px;\n height: 22px;\n }\n"])), function (props) {
214
- return props.disabled ? getDisabledColor(props, "border") : getNotDisabledColor(props, "border");
234
+ var Checkbox = _styledComponents["default"].span(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 18px;\n width: 18px;\n border: 2px solid\n ", ";\n border-radius: 2px;\n background-color: ", ";\n color: ", ";\n\n &:focus {\n outline: 2px solid\n ", ";\n outline-offset: 2px;\n }\n svg {\n position: absolute;\n width: 22px;\n height: 22px;\n }\n ", "\n"])), function (props) {
235
+ return props.disabled ? getDisabledColor(props, "border") : props.readOnly ? getReadOnlyColor(props, "border") : getEnabledColor(props, "border");
215
236
  }, function (props) {
216
- return props.checked ? props.disabled ? getDisabledColor(props, "check") : getNotDisabledColor(props, "check") : "transparent";
237
+ return props.checked ? props.disabled ? getDisabledColor(props, "check") : props.readOnly ? getReadOnlyColor(props, "check") : getEnabledColor(props, "check") : "transparent";
217
238
  }, function (props) {
218
- return props.disabled ? getDisabledColor(props, "background") : getNotDisabledColor(props, "background");
239
+ return props.disabled ? getDisabledColor(props, "background") : props.readOnly ? getReadOnlyColor(props, "background") : getEnabledColor(props, "background");
219
240
  }, function (props) {
220
241
  return props.backgroundType === "dark" ? props.theme.focusColorOnDark : props.theme.focusColor;
242
+ }, function (props) {
243
+ return props.disabled && "pointer-events: none;";
221
244
  });
222
245
 
223
- var MainContainer = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n width: ", ";\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n\n display: inline-flex;\n align-items: center;\n cursor: ", ";\n gap: ", ";\n\n &:hover ", " {\n border: 2px solid\n ", ";\n background-color: ", ";\n color: ", ";\n }\n"])), function (props) {
246
+ var MainContainer = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n align-items: center;\n gap: ", ";\n width: ", ";\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n cursor: ", ";\n\n &:hover ", " {\n border: 2px solid\n ", ";\n color: ", ";\n }\n"])), function (props) {
247
+ return props.theme.checkLabelSpacing;
248
+ }, function (props) {
224
249
  return calculateWidth(props.margin, props.size);
225
250
  }, function (props) {
226
251
  return props.margin && (0, _typeof2["default"])(props.margin) !== "object" ? _variables.spaces[props.margin] : "0px";
@@ -233,15 +258,11 @@ var MainContainer = _styledComponents["default"].div(_templateObject5 || (_templ
233
258
  }, function (props) {
234
259
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.left ? _variables.spaces[props.margin.left] : "";
235
260
  }, function (props) {
236
- return props.disabled ? "not-allowed" : "pointer";
237
- }, function (props) {
238
- return props.theme.checkLabelSpacing;
261
+ return props.disabled ? "not-allowed" : props.readOnly ? "default" : "pointer";
239
262
  }, Checkbox, function (props) {
240
- return props.disabled ? getDisabledColor(props, "border") : getNotDisabledColor(props, "hoverBorder");
241
- }, function (props) {
242
- return props.checked ? props.disabled ? getDisabledColor(props, "check") : getNotDisabledColor(props, "check") : "transparent";
263
+ if (!props.disabled) return props.readOnly ? getReadOnlyColor(props, "hoverBorder") : getEnabledColor(props, "hoverBorder");
243
264
  }, function (props) {
244
- return props.disabled ? getDisabledColor(props, "background") : getNotDisabledColor(props, "hoverBackground");
265
+ if (!props.disabled) return props.readOnly ? getReadOnlyColor(props, "hoverBackground") : getEnabledColor(props, "hoverBackground");
245
266
  });
246
267
 
247
268
  var _default = DxcCheckbox;
@@ -4,42 +4,71 @@ import { BackgroundColorProvider } from "../BackgroundColorContext";
4
4
  import Title from "../../.storybook/components/Title";
5
5
  import ExampleContainer from "../../.storybook/components/ExampleContainer";
6
6
  import DarkContainer from "../../.storybook/components/DarkSection";
7
- import { userEvent } from "@storybook/testing-library";
7
+ import styled from "styled-components";
8
+ import { HalstackProvider } from "../HalstackContext";
8
9
 
9
10
  export default {
10
11
  title: "Checkbox",
11
12
  component: DxcCheckbox,
12
13
  };
13
14
 
15
+ const opinionatedTheme = {
16
+ checkbox: {
17
+ baseColor: "#0067b3",
18
+ checkColor: "#ffffff",
19
+ fontColor: "#000000",
20
+ },
21
+ };
22
+
14
23
  const Checkbox = () => (
15
24
  <>
16
25
  <ExampleContainer>
17
26
  <Title title="Default" theme="light" level={4} />
18
27
  <DxcCheckbox label="Checkbox" />
19
28
  </ExampleContainer>
20
- <ExampleContainer>
21
- <Title title="Focused" theme="light" level={4} />
22
- <DxcCheckbox label="Focused" />
23
- </ExampleContainer>
24
29
  <ExampleContainer>
25
30
  <Title title="Checked" theme="light" level={4} />
26
31
  <DxcCheckbox label="Checkbox" defaultChecked />
27
32
  </ExampleContainer>
28
33
  <ExampleContainer>
29
- <Title title="Optional" theme="light" level={4} />
30
- <DxcCheckbox label="Checkbox" optional />
34
+ <Title title="Disabled" theme="light" level={4} />
35
+ <DxcCheckbox label="Checkbox" disabled />
31
36
  </ExampleContainer>
32
37
  <ExampleContainer>
33
- <Title title="Disabled and checked" theme="light" level={4} />
34
- <DxcCheckbox label="Checkbox" disabled defaultChecked />
38
+ <Title title="Disabled, checked and optional" theme="light" level={4} />
39
+ <DxcCheckbox label="Checkbox" disabled defaultChecked optional />
35
40
  </ExampleContainer>
36
41
  <ExampleContainer>
37
- <Title title="Disabled and optional" theme="light" level={4} />
38
- <DxcCheckbox label="Checkbox" disabled optional />
42
+ <Title title="Read-only" theme="light" level={4} />
43
+ <DxcCheckbox label="Checkbox" readOnly />
44
+ </ExampleContainer>
45
+ <ExampleContainer pseudoState="pseudo-hover">
46
+ <Title title="Hovered read-only" theme="light" level={4} />
47
+ <DxcCheckbox label="Checkbox" readOnly />
39
48
  </ExampleContainer>
40
49
  <ExampleContainer>
41
- <Title title="Disabled, optional and checked" theme="light" level={4} />
42
- <DxcCheckbox label="Checkbox" disabled optional defaultChecked />
50
+ <Title title="Read-only, checked and optional" theme="light" level={4} />
51
+ <DxcCheckbox label="Checkbox" readOnly defaultChecked optional />
52
+ </ExampleContainer>
53
+ <ExampleContainer pseudoState="pseudo-hover">
54
+ <Title title="Hovered read-only and checked" theme="light" level={4} />
55
+ <DxcCheckbox label="Checkbox" readOnly defaultChecked optional />
56
+ </ExampleContainer>
57
+ <ExampleContainer pseudoState="pseudo-focus">
58
+ <Title title="Focused" theme="light" level={4} />
59
+ <DxcCheckbox label="Focused" />
60
+ </ExampleContainer>
61
+ <ExampleContainer pseudoState="pseudo-hover">
62
+ <Title title="Hovered" theme="light" level={4} />
63
+ <DxcCheckbox label="Hovered" />
64
+ </ExampleContainer>
65
+ <ExampleContainer pseudoState="pseudo-hover">
66
+ <Title title="Hovered and checked" theme="light" level={4} />
67
+ <DxcCheckbox label="Hovered" defaultChecked />
68
+ </ExampleContainer>
69
+ <ExampleContainer>
70
+ <Title title="Optional" theme="light" level={4} />
71
+ <DxcCheckbox label="Checkbox" optional />
43
72
  </ExampleContainer>
44
73
  <ExampleContainer>
45
74
  <Title title="Label after" theme="light" level={4} />
@@ -53,25 +82,9 @@ const Checkbox = () => (
53
82
  <Title title="Optional with label after" theme="light" level={4} />
54
83
  <DxcCheckbox label="Checkbox" optional labelPosition="after" />
55
84
  </ExampleContainer>
56
- <ExampleContainer>
57
- <Title title="Disabled and checked with label after" theme="light" level={4} />
58
- <DxcCheckbox label="Checkbox" disabled defaultChecked labelPosition="after" />
59
- </ExampleContainer>
60
85
  <ExampleContainer>
61
86
  <Title title="Disabled and optional with label after" theme="light" level={4} />
62
- <DxcCheckbox label="Checkbox" disabled optional labelPosition="after" />
63
- </ExampleContainer>
64
- <ExampleContainer>
65
- <Title title="Disabled, optional and checked with label after" theme="light" level={4} />
66
- <DxcCheckbox label="Checkbox" disabled optional defaultChecked labelPosition="after" />
67
- </ExampleContainer>
68
- <ExampleContainer pseudoState="pseudo-hover">
69
- <Title title="Hovered" theme="light" level={4} />
70
- <DxcCheckbox label="Hovered" />
71
- </ExampleContainer>
72
- <ExampleContainer pseudoState="pseudo-hover">
73
- <Title title="Hovered and checked" theme="light" level={4} />
74
- <DxcCheckbox label="Hovered" defaultChecked />
87
+ <DxcCheckbox label="Checkbox" disabled labelPosition="after" optional />
75
88
  </ExampleContainer>
76
89
  <BackgroundColorProvider color="#333333">
77
90
  <DarkContainer>
@@ -84,20 +97,28 @@ const Checkbox = () => (
84
97
  <DxcCheckbox label="Checkbox" defaultChecked />
85
98
  </ExampleContainer>
86
99
  <ExampleContainer>
87
- <Title title="Optional" theme="dark" level={4} />
88
- <DxcCheckbox label="Checkbox" optional />
100
+ <Title title="Disabled" theme="dark" level={4} />
101
+ <DxcCheckbox label="Checkbox" disabled />
89
102
  </ExampleContainer>
90
103
  <ExampleContainer>
91
- <Title title="Disabled and checked" theme="dark" level={4} />
92
- <DxcCheckbox label="Checkbox" disabled defaultChecked />
104
+ <Title title="Disabled, checked and optional" theme="dark" level={4} />
105
+ <DxcCheckbox label="Checkbox" disabled defaultChecked optional />
93
106
  </ExampleContainer>
94
- <ExampleContainer>
95
- <Title title="Disabled and optional" theme="dark" level={4} />
96
- <DxcCheckbox label="Checkbox" disabled optional />
107
+ <ExampleContainer pseudoState="pseudo-focus">
108
+ <Title title="Focused" theme="dark" level={4} />
109
+ <DxcCheckbox label="Focused" />
110
+ </ExampleContainer>
111
+ <ExampleContainer pseudoState="pseudo-hover">
112
+ <Title title="Hovered" theme="dark" level={4} />
113
+ <DxcCheckbox label="Hovered" />
114
+ </ExampleContainer>
115
+ <ExampleContainer pseudoState="pseudo-hover">
116
+ <Title title="Hovered and checked" theme="dark" level={4} />
117
+ <DxcCheckbox label="Hovered" defaultChecked />
97
118
  </ExampleContainer>
98
119
  <ExampleContainer>
99
- <Title title="Disabled, optional and checked" theme="dark" level={4} />
100
- <DxcCheckbox label="Checkbox" disabled optional defaultChecked />
120
+ <Title title="Optional" theme="dark" level={4} />
121
+ <DxcCheckbox label="Checkbox" optional />
101
122
  </ExampleContainer>
102
123
  <ExampleContainer>
103
124
  <Title title="Label after" theme="dark" level={4} />
@@ -111,25 +132,9 @@ const Checkbox = () => (
111
132
  <Title title="Optional with label after" theme="dark" level={4} />
112
133
  <DxcCheckbox label="Checkbox" optional labelPosition="after" />
113
134
  </ExampleContainer>
114
- <ExampleContainer>
115
- <Title title="Disabled and checked with label after" theme="dark" level={4} />
116
- <DxcCheckbox label="Checkbox" disabled defaultChecked labelPosition="after" />
117
- </ExampleContainer>
118
135
  <ExampleContainer>
119
136
  <Title title="Disabled and optional with label after" theme="dark" level={4} />
120
- <DxcCheckbox label="Checkbox" disabled optional labelPosition="after" />
121
- </ExampleContainer>
122
- <ExampleContainer>
123
- <Title title="Disabled, optional and checked with label after" theme="dark" level={4} />
124
- <DxcCheckbox label="Checkbox" disabled optional defaultChecked labelPosition="after" />
125
- </ExampleContainer>
126
- <ExampleContainer pseudoState="pseudo-hover">
127
- <Title title="Hovered" theme="dark" level={4} />
128
- <DxcCheckbox label="Hovered" />
129
- </ExampleContainer>
130
- <ExampleContainer pseudoState="pseudo-hover">
131
- <Title title="Hovered and checked" theme="dark" level={4} />
132
- <DxcCheckbox label="Hovered" defaultChecked />
137
+ <DxcCheckbox label="Checkbox" disabled labelPosition="after" optional />
133
138
  </ExampleContainer>
134
139
  </DarkContainer>
135
140
  </BackgroundColorProvider>
@@ -178,11 +183,94 @@ const Checkbox = () => (
178
183
  <Title title="Xxlarge" theme="light" level={4} />
179
184
  <DxcCheckbox label="Xxlarge" margin="xxlarge" />
180
185
  </ExampleContainer>
186
+ <ExampleContainer>
187
+ <Title title="Overflow container" theme="light" level={4} />
188
+ <ScrollableContainer id="scroll-container">
189
+ <DxcCheckbox label="Checkbox" defaultChecked />
190
+ <DxcCheckbox label="Checkbox" defaultChecked />
191
+ <DxcCheckbox label="Checkbox" />
192
+ <DxcCheckbox label="Checkbox" defaultChecked />
193
+ <DxcCheckbox label="Checkbox" />
194
+ <DxcCheckbox label="Checkbox" />
195
+ <DxcCheckbox label="Checkbox" />
196
+ <DxcCheckbox label="Checkbox" defaultChecked />
197
+ </ScrollableContainer>
198
+ </ExampleContainer>
199
+ <ExampleContainer>
200
+ <Title title="Label overflow" theme="light" level={4} />
201
+ <SmallContainer>
202
+ <DxcCheckbox label="Very long label to check its overflowing" defaultChecked />
203
+ <DxcCheckbox label="Very long label to check its overflowing" labelPosition="after" />
204
+ </SmallContainer>
205
+ </ExampleContainer>
206
+ <Title title="Opinionated theme" theme="light" level={2} />
207
+ <ExampleContainer>
208
+ <Title title="Default" theme="light" level={4} />
209
+ <HalstackProvider theme={opinionatedTheme}>
210
+ <DxcCheckbox label="Checkbox" />
211
+ </HalstackProvider>
212
+ </ExampleContainer>
213
+ <ExampleContainer>
214
+ <Title title="Checked" theme="light" level={4} />
215
+ <HalstackProvider theme={opinionatedTheme}>
216
+ <DxcCheckbox label="Checkbox" defaultChecked />
217
+ </HalstackProvider>
218
+ </ExampleContainer>
219
+ <ExampleContainer>
220
+ <Title title="Disabled" theme="light" level={4} />
221
+ <HalstackProvider theme={opinionatedTheme}>
222
+ <DxcCheckbox label="Checkbox" disabled />
223
+ </HalstackProvider>
224
+ </ExampleContainer>
225
+ <ExampleContainer>
226
+ <Title title="Disabled checked" theme="light" level={4} />
227
+ <HalstackProvider theme={opinionatedTheme}>
228
+ <DxcCheckbox label="Checkbox" defaultChecked disabled />
229
+ </HalstackProvider>
230
+ </ExampleContainer>
231
+ <ExampleContainer pseudoState="pseudo-focus">
232
+ <Title title="Focused" theme="light" level={4} />
233
+ <HalstackProvider theme={opinionatedTheme}>
234
+ <DxcCheckbox label="Focused" />
235
+ </HalstackProvider>
236
+ </ExampleContainer>
237
+ <ExampleContainer pseudoState="pseudo-hover">
238
+ <Title title="Hovered" theme="light" level={4} />
239
+ <HalstackProvider theme={opinionatedTheme}>
240
+ <DxcCheckbox label="Hovered" />
241
+ </HalstackProvider>
242
+ </ExampleContainer>
243
+ <ExampleContainer pseudoState="pseudo-hover">
244
+ <Title title="Hovered and checked" theme="light" level={4} />
245
+ <HalstackProvider theme={opinionatedTheme}>
246
+ <DxcCheckbox label="Hovered" defaultChecked />
247
+ </HalstackProvider>
248
+ </ExampleContainer>
181
249
  </>
182
250
  );
183
251
 
184
252
  export const Chromatic = Checkbox.bind({});
253
+
185
254
  Chromatic.play = async () => {
186
- await userEvent.tab();
187
- await userEvent.tab();
255
+ const listEl = document.getElementById("scroll-container");
256
+ listEl?.scrollTo?.({ top: 50 });
188
257
  };
258
+
259
+ const ScrollableContainer = styled.div`
260
+ display: flex;
261
+ flex-direction: column;
262
+ gap: 14px;
263
+ width: 200px;
264
+ height: 200px;
265
+ border: 1px solid #000;
266
+ padding: 14px;
267
+ overflow: auto;
268
+ `;
269
+
270
+ const SmallContainer = styled.div`
271
+ display: flex;
272
+ flex-direction: column;
273
+ gap: 14px;
274
+ width: 150px;
275
+ height: 150px;
276
+ `;