@dxc-technology/halstack-react 0.0.0-6a36022 → 0.0.0-6b2072d

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 (309) hide show
  1. package/BackgroundColorContext.d.ts +2 -2
  2. package/BackgroundColorContext.js +1 -1
  3. package/HalstackContext.d.ts +1336 -0
  4. package/HalstackContext.js +335 -0
  5. package/accordion/Accordion.d.ts +1 -1
  6. package/accordion/Accordion.js +110 -146
  7. package/accordion/Accordion.stories.tsx +108 -118
  8. package/accordion/Accordion.test.js +71 -0
  9. package/accordion/types.d.ts +7 -18
  10. package/accordion-group/AccordionGroup.d.ts +5 -4
  11. package/accordion-group/AccordionGroup.js +34 -76
  12. package/accordion-group/AccordionGroup.stories.tsx +94 -67
  13. package/accordion-group/AccordionGroup.test.js +116 -0
  14. package/accordion-group/AccordionGroupAccordion.d.ts +4 -0
  15. package/accordion-group/AccordionGroupAccordion.js +43 -0
  16. package/accordion-group/types.d.ts +13 -18
  17. package/alert/Alert.js +9 -10
  18. package/alert/Alert.stories.tsx +28 -0
  19. package/alert/Alert.test.js +92 -0
  20. package/badge/Badge.d.ts +4 -0
  21. package/badge/Badge.js +5 -3
  22. package/badge/types.d.ts +5 -0
  23. package/bleed/Bleed.d.ts +3 -0
  24. package/bleed/Bleed.js +51 -0
  25. package/bleed/Bleed.stories.tsx +342 -0
  26. package/bleed/types.d.ts +37 -0
  27. package/bleed/types.js +5 -0
  28. package/box/Box.d.ts +1 -1
  29. package/box/Box.js +19 -48
  30. package/box/Box.stories.tsx +38 -51
  31. package/box/Box.test.js +18 -0
  32. package/box/types.d.ts +0 -11
  33. package/bulleted-list/BulletedList.d.ts +7 -0
  34. package/bulleted-list/BulletedList.js +125 -0
  35. package/bulleted-list/BulletedList.stories.tsx +206 -0
  36. package/bulleted-list/types.d.ts +38 -0
  37. package/bulleted-list/types.js +5 -0
  38. package/button/Button.d.ts +1 -1
  39. package/button/Button.js +46 -81
  40. package/button/Button.stories.tsx +163 -14
  41. package/button/Button.test.js +46 -0
  42. package/button/types.d.ts +9 -9
  43. package/card/Card.d.ts +1 -1
  44. package/card/Card.js +37 -58
  45. package/card/Card.stories.tsx +12 -42
  46. package/card/Card.test.js +50 -0
  47. package/card/types.d.ts +1 -6
  48. package/checkbox/Checkbox.d.ts +2 -2
  49. package/checkbox/Checkbox.js +107 -110
  50. package/checkbox/Checkbox.stories.tsx +198 -130
  51. package/checkbox/Checkbox.test.js +155 -0
  52. package/checkbox/types.d.ts +11 -3
  53. package/chip/Chip.d.ts +1 -1
  54. package/chip/Chip.js +36 -95
  55. package/chip/Chip.stories.tsx +123 -30
  56. package/chip/Chip.test.js +54 -0
  57. package/chip/types.d.ts +5 -13
  58. package/common/OpenSans.css +68 -80
  59. package/common/coreTokens.d.ts +146 -0
  60. package/common/coreTokens.js +167 -0
  61. package/common/utils.d.ts +1 -0
  62. package/common/utils.js +4 -4
  63. package/common/variables.d.ts +1482 -0
  64. package/common/variables.js +1097 -1348
  65. package/date-input/Calendar.d.ts +4 -0
  66. package/date-input/Calendar.js +258 -0
  67. package/date-input/DateInput.js +169 -258
  68. package/date-input/DateInput.stories.tsx +199 -33
  69. package/date-input/DateInput.test.js +835 -0
  70. package/date-input/DatePicker.d.ts +4 -0
  71. package/date-input/DatePicker.js +146 -0
  72. package/date-input/Icons.d.ts +6 -0
  73. package/date-input/Icons.js +75 -0
  74. package/date-input/YearPicker.d.ts +4 -0
  75. package/date-input/YearPicker.js +126 -0
  76. package/date-input/types.d.ts +67 -9
  77. package/dialog/Dialog.d.ts +1 -1
  78. package/dialog/Dialog.js +68 -103
  79. package/dialog/Dialog.stories.tsx +154 -171
  80. package/dialog/Dialog.test.js +369 -0
  81. package/dialog/types.d.ts +0 -12
  82. package/dropdown/Dropdown.d.ts +1 -1
  83. package/dropdown/Dropdown.js +248 -277
  84. package/dropdown/Dropdown.stories.tsx +255 -64
  85. package/dropdown/Dropdown.test.js +586 -0
  86. package/dropdown/DropdownMenu.d.ts +4 -0
  87. package/dropdown/DropdownMenu.js +74 -0
  88. package/dropdown/DropdownMenuItem.d.ts +4 -0
  89. package/dropdown/DropdownMenuItem.js +79 -0
  90. package/dropdown/types.d.ts +27 -16
  91. package/file-input/FileInput.d.ts +2 -2
  92. package/file-input/FileInput.js +180 -223
  93. package/file-input/FileInput.stories.tsx +122 -11
  94. package/file-input/FileInput.test.js +457 -0
  95. package/file-input/FileItem.d.ts +4 -14
  96. package/file-input/FileItem.js +44 -66
  97. package/file-input/types.d.ts +18 -1
  98. package/flex/Flex.d.ts +4 -0
  99. package/flex/Flex.js +71 -0
  100. package/flex/Flex.stories.tsx +112 -0
  101. package/flex/types.d.ts +97 -0
  102. package/flex/types.js +5 -0
  103. package/footer/Footer.d.ts +1 -1
  104. package/footer/Footer.js +49 -144
  105. package/footer/Footer.stories.tsx +37 -16
  106. package/footer/Footer.test.js +99 -0
  107. package/footer/Icons.js +1 -1
  108. package/footer/types.d.ts +11 -12
  109. package/grid/Grid.d.ts +7 -0
  110. package/grid/Grid.js +91 -0
  111. package/grid/Grid.stories.tsx +219 -0
  112. package/grid/types.d.ts +115 -0
  113. package/grid/types.js +5 -0
  114. package/header/Header.d.ts +4 -3
  115. package/header/Header.js +102 -150
  116. package/header/Header.stories.tsx +152 -63
  117. package/header/Header.test.js +79 -0
  118. package/header/Icons.js +2 -2
  119. package/header/types.d.ts +0 -13
  120. package/heading/Heading.js +1 -1
  121. package/heading/Heading.test.js +186 -0
  122. package/inset/Inset.js +1 -34
  123. package/inset/Inset.stories.tsx +37 -36
  124. package/inset/types.d.ts +25 -1
  125. package/layout/ApplicationLayout.d.ts +16 -6
  126. package/layout/ApplicationLayout.js +78 -129
  127. package/layout/ApplicationLayout.stories.tsx +84 -93
  128. package/layout/Icons.d.ts +5 -0
  129. package/layout/Icons.js +13 -2
  130. package/layout/SidenavContext.d.ts +5 -0
  131. package/layout/SidenavContext.js +19 -0
  132. package/layout/types.d.ts +19 -35
  133. package/link/Link.d.ts +3 -2
  134. package/link/Link.js +63 -88
  135. package/link/Link.stories.tsx +159 -52
  136. package/link/Link.test.js +81 -0
  137. package/link/types.d.ts +7 -27
  138. package/main.d.ts +12 -15
  139. package/main.js +57 -75
  140. package/nav-tabs/NavTabs.d.ts +8 -0
  141. package/nav-tabs/NavTabs.js +122 -0
  142. package/nav-tabs/NavTabs.stories.tsx +274 -0
  143. package/nav-tabs/NavTabs.test.js +82 -0
  144. package/nav-tabs/Tab.d.ts +4 -0
  145. package/nav-tabs/Tab.js +146 -0
  146. package/nav-tabs/types.d.ts +52 -0
  147. package/nav-tabs/types.js +5 -0
  148. package/number-input/NumberInput.js +11 -18
  149. package/number-input/NumberInput.stories.tsx +5 -5
  150. package/number-input/NumberInput.test.js +542 -0
  151. package/number-input/types.d.ts +17 -10
  152. package/package.json +20 -23
  153. package/paginator/Icons.d.ts +5 -0
  154. package/paginator/Icons.js +16 -28
  155. package/paginator/Paginator.js +20 -49
  156. package/paginator/Paginator.stories.tsx +24 -0
  157. package/paginator/Paginator.test.js +318 -0
  158. package/paragraph/Paragraph.d.ts +5 -0
  159. package/paragraph/Paragraph.js +38 -0
  160. package/paragraph/Paragraph.stories.tsx +44 -0
  161. package/password-input/PasswordInput.js +7 -4
  162. package/password-input/PasswordInput.test.js +181 -0
  163. package/password-input/types.d.ts +14 -11
  164. package/progress-bar/ProgressBar.js +61 -55
  165. package/progress-bar/ProgressBar.stories.jsx +47 -12
  166. package/progress-bar/ProgressBar.test.js +110 -0
  167. package/quick-nav/QuickNav.d.ts +4 -0
  168. package/quick-nav/QuickNav.js +117 -0
  169. package/quick-nav/QuickNav.stories.tsx +356 -0
  170. package/quick-nav/types.d.ts +21 -0
  171. package/quick-nav/types.js +5 -0
  172. package/radio-group/Radio.d.ts +1 -1
  173. package/radio-group/Radio.js +60 -34
  174. package/radio-group/RadioGroup.js +81 -68
  175. package/radio-group/RadioGroup.stories.tsx +171 -36
  176. package/radio-group/RadioGroup.test.js +722 -0
  177. package/radio-group/types.d.ts +81 -3
  178. package/resultsetTable/Icons.d.ts +7 -0
  179. package/resultsetTable/Icons.js +51 -0
  180. package/resultsetTable/ResultsetTable.js +50 -106
  181. package/resultsetTable/ResultsetTable.stories.tsx +56 -33
  182. package/resultsetTable/ResultsetTable.test.js +325 -0
  183. package/resultsetTable/types.d.ts +1 -1
  184. package/select/Icons.d.ts +10 -0
  185. package/select/Icons.js +93 -0
  186. package/select/Listbox.d.ts +4 -0
  187. package/select/Listbox.js +169 -0
  188. package/select/Option.d.ts +4 -0
  189. package/select/Option.js +97 -0
  190. package/select/Select.js +189 -386
  191. package/select/Select.stories.tsx +600 -201
  192. package/select/Select.test.js +2228 -0
  193. package/select/types.d.ts +53 -13
  194. package/sidenav/Icons.d.ts +7 -0
  195. package/sidenav/Icons.js +51 -0
  196. package/sidenav/Sidenav.d.ts +6 -5
  197. package/sidenav/Sidenav.js +146 -44
  198. package/sidenav/Sidenav.stories.tsx +251 -151
  199. package/sidenav/Sidenav.test.js +44 -0
  200. package/sidenav/types.d.ts +52 -26
  201. package/slider/Slider.d.ts +2 -2
  202. package/slider/Slider.js +123 -98
  203. package/slider/Slider.stories.tsx +72 -9
  204. package/slider/Slider.test.js +250 -0
  205. package/slider/types.d.ts +8 -0
  206. package/spinner/Spinner.js +18 -24
  207. package/spinner/Spinner.stories.jsx +53 -27
  208. package/spinner/Spinner.test.js +64 -0
  209. package/switch/Switch.d.ts +2 -2
  210. package/switch/Switch.js +152 -69
  211. package/switch/Switch.stories.tsx +53 -42
  212. package/switch/Switch.test.js +225 -0
  213. package/switch/types.d.ts +10 -2
  214. package/table/Table.js +3 -3
  215. package/table/Table.stories.jsx +80 -1
  216. package/table/Table.test.js +26 -0
  217. package/tabs/Tab.d.ts +4 -0
  218. package/tabs/Tab.js +132 -0
  219. package/tabs/Tabs.d.ts +1 -1
  220. package/tabs/Tabs.js +362 -114
  221. package/tabs/Tabs.stories.tsx +122 -18
  222. package/tabs/Tabs.test.js +350 -0
  223. package/tabs/types.d.ts +37 -15
  224. package/tag/Tag.d.ts +1 -1
  225. package/tag/Tag.js +24 -36
  226. package/tag/Tag.stories.tsx +37 -27
  227. package/tag/Tag.test.js +60 -0
  228. package/tag/types.d.ts +23 -14
  229. package/text-input/Icons.d.ts +8 -0
  230. package/text-input/Icons.js +60 -0
  231. package/text-input/Suggestion.d.ts +4 -0
  232. package/text-input/Suggestion.js +84 -0
  233. package/text-input/Suggestions.d.ts +4 -0
  234. package/text-input/Suggestions.js +134 -0
  235. package/text-input/TextInput.js +225 -346
  236. package/text-input/TextInput.stories.tsx +310 -197
  237. package/text-input/TextInput.test.js +1723 -0
  238. package/text-input/types.d.ts +50 -12
  239. package/textarea/Textarea.js +22 -30
  240. package/textarea/Textarea.stories.jsx +93 -13
  241. package/textarea/Textarea.test.js +435 -0
  242. package/textarea/types.d.ts +18 -11
  243. package/toggle-group/ToggleGroup.d.ts +2 -2
  244. package/toggle-group/ToggleGroup.js +86 -59
  245. package/toggle-group/ToggleGroup.stories.tsx +49 -4
  246. package/toggle-group/ToggleGroup.test.js +170 -0
  247. package/toggle-group/types.d.ts +31 -14
  248. package/typography/Typography.d.ts +4 -0
  249. package/typography/Typography.js +32 -0
  250. package/typography/Typography.stories.tsx +198 -0
  251. package/typography/types.d.ts +18 -0
  252. package/typography/types.js +5 -0
  253. package/useTheme.d.ts +1234 -1
  254. package/useTheme.js +3 -3
  255. package/useTranslatedLabels.d.ts +85 -0
  256. package/useTranslatedLabels.js +20 -0
  257. package/utils/BaseTypography.d.ts +21 -0
  258. package/utils/BaseTypography.js +108 -0
  259. package/utils/FocusLock.d.ts +13 -0
  260. package/utils/FocusLock.js +138 -0
  261. package/wizard/Wizard.d.ts +1 -1
  262. package/wizard/Wizard.js +59 -55
  263. package/wizard/Wizard.stories.tsx +48 -19
  264. package/wizard/Wizard.test.js +141 -0
  265. package/wizard/types.d.ts +8 -4
  266. package/ThemeContext.d.ts +0 -15
  267. package/ThemeContext.js +0 -243
  268. package/V3Select/V3Select.js +0 -455
  269. package/V3Select/index.d.ts +0 -27
  270. package/V3Textarea/V3Textarea.js +0 -260
  271. package/V3Textarea/index.d.ts +0 -27
  272. package/card/ice-cream.jpg +0 -0
  273. package/common/RequiredComponent.js +0 -32
  274. package/date/Date.js +0 -373
  275. package/date/index.d.ts +0 -27
  276. package/input-text/Icons.js +0 -22
  277. package/input-text/InputText.js +0 -611
  278. package/input-text/index.d.ts +0 -36
  279. package/list/List.d.ts +0 -8
  280. package/list/List.js +0 -47
  281. package/list/List.stories.tsx +0 -95
  282. package/radio/Radio.d.ts +0 -4
  283. package/radio/Radio.js +0 -174
  284. package/radio/Radio.stories.tsx +0 -192
  285. package/radio/types.d.ts +0 -54
  286. package/row/Row.d.ts +0 -11
  287. package/row/Row.js +0 -127
  288. package/row/Row.stories.tsx +0 -239
  289. package/stack/Stack.d.ts +0 -10
  290. package/stack/Stack.js +0 -97
  291. package/stack/Stack.stories.tsx +0 -166
  292. package/text/Text.d.ts +0 -7
  293. package/text/Text.js +0 -30
  294. package/text/Text.stories.tsx +0 -19
  295. package/toggle/Toggle.js +0 -186
  296. package/toggle/index.d.ts +0 -21
  297. package/upload/Upload.js +0 -201
  298. package/upload/buttons-upload/ButtonsUpload.js +0 -111
  299. package/upload/buttons-upload/Icons.js +0 -40
  300. package/upload/dragAndDropArea/DragAndDropArea.js +0 -225
  301. package/upload/dragAndDropArea/Icons.js +0 -39
  302. package/upload/file-upload/FileToUpload.js +0 -115
  303. package/upload/file-upload/Icons.js +0 -66
  304. package/upload/files-upload/FilesToUpload.js +0 -109
  305. package/upload/index.d.ts +0 -15
  306. package/upload/transaction/Icons.js +0 -160
  307. package/upload/transaction/Transaction.js +0 -104
  308. package/upload/transactions/Transactions.js +0 -94
  309. /package/{radio → badge}/types.js +0 -0
package/button/Button.js CHANGED
@@ -9,25 +9,23 @@ Object.defineProperty(exports, "__esModule", {
9
9
  });
10
10
  exports["default"] = void 0;
11
11
 
12
- var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
13
-
14
12
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
15
13
 
16
- var _react = _interopRequireWildcard(require("react"));
14
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
17
15
 
18
- var _Button = _interopRequireDefault(require("@material-ui/core/Button"));
16
+ var _react = _interopRequireWildcard(require("react"));
19
17
 
20
18
  var _styledComponents = _interopRequireWildcard(require("styled-components"));
21
19
 
22
- var _variables = require("../common/variables.js");
20
+ var _variables = require("../common/variables");
23
21
 
24
- var _utils = require("../common/utils.js");
22
+ var _utils = require("../common/utils");
25
23
 
26
24
  var _useTheme = _interopRequireDefault(require("../useTheme"));
27
25
 
28
26
  var _BackgroundColorContext = _interopRequireDefault(require("../BackgroundColorContext"));
29
27
 
30
- var _templateObject, _templateObject2, _templateObject3, _templateObject4;
28
+ var _templateObject, _templateObject2, _templateObject3;
31
29
 
32
30
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
33
31
 
@@ -42,50 +40,41 @@ var DxcButton = function DxcButton(_ref) {
42
40
  disabled = _ref$disabled === void 0 ? false : _ref$disabled,
43
41
  _ref$iconPosition = _ref.iconPosition,
44
42
  iconPosition = _ref$iconPosition === void 0 ? "before" : _ref$iconPosition,
43
+ title = _ref.title,
45
44
  _ref$type = _ref.type,
46
45
  type = _ref$type === void 0 ? "button" : _ref$type,
47
46
  icon = _ref.icon,
48
- _ref$iconSrc = _ref.iconSrc,
49
- iconSrc = _ref$iconSrc === void 0 ? "" : _ref$iconSrc,
50
- _onClick = _ref.onClick,
47
+ _ref$onClick = _ref.onClick,
48
+ _onClick = _ref$onClick === void 0 ? function () {} : _ref$onClick,
51
49
  margin = _ref.margin,
52
50
  _ref$size = _ref.size,
53
51
  size = _ref$size === void 0 ? "fitContent" : _ref$size,
54
52
  _ref$tabIndex = _ref.tabIndex,
55
53
  tabIndex = _ref$tabIndex === void 0 ? 0 : _ref$tabIndex;
54
+
56
55
  var colorsTheme = (0, _useTheme["default"])();
57
56
  var backgroundType = (0, _react.useContext)(_BackgroundColorContext["default"]);
58
57
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
59
58
  theme: colorsTheme.button
60
- }, /*#__PURE__*/_react["default"].createElement(DxCButton, {
61
- type: type,
62
- margin: margin,
63
- mode: mode !== "primary" && mode !== "secondary" && mode !== "text" ? "primary" : mode,
59
+ }, /*#__PURE__*/_react["default"].createElement(Button, {
60
+ "aria-label": title,
64
61
  disabled: disabled,
65
- iconPosition: iconPosition,
66
- size: size,
67
- backgroundType: backgroundType,
68
- icon: icon
69
- }, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
70
- type: type,
71
- disabled: disabled,
72
- disableRipple: true,
73
- "aria-disabled": disabled,
74
- tabIndex: disabled ? -1 : tabIndex,
75
62
  onClick: function onClick() {
76
63
  _onClick();
77
- }
78
- }, label && /*#__PURE__*/_react["default"].createElement(LabelContainer, {
79
- icon: icon,
80
- iconPosition: iconPosition
81
- }, label), icon ? /*#__PURE__*/_react["default"].createElement(IconContainer, {
82
- label: label,
83
- iconPosition: iconPosition
84
- }, (0, _typeof2["default"])(icon) === "object" ? icon : /*#__PURE__*/_react["default"].createElement(icon)) : iconSrc && /*#__PURE__*/_react["default"].createElement(ButtonIcon, {
85
- label: label,
64
+ },
65
+ tabIndex: disabled ? -1 : tabIndex,
66
+ title: title,
67
+ type: type,
68
+ $mode: mode !== "primary" && mode !== "secondary" && mode !== "text" ? "primary" : mode,
69
+ hasLabel: label ? true : false,
70
+ hasIcon: icon ? true : false,
86
71
  iconPosition: iconPosition,
87
- src: iconSrc
88
- }))));
72
+ backgroundType: backgroundType,
73
+ size: size,
74
+ margin: margin
75
+ }, label && /*#__PURE__*/_react["default"].createElement(LabelContainer, null, label), icon && /*#__PURE__*/_react["default"].createElement(IconContainer, null, typeof icon === "string" ? /*#__PURE__*/_react["default"].createElement("img", {
76
+ src: icon
77
+ }) : icon)));
89
78
  };
90
79
 
91
80
  var sizes = {
@@ -93,40 +82,25 @@ var sizes = {
93
82
  medium: "120px",
94
83
  large: "240px",
95
84
  fillParent: "100%",
96
- fitContent: "unset"
85
+ fitContent: "fit-content"
97
86
  };
98
87
 
99
88
  var calculateWidth = function calculateWidth(margin, size) {
100
- if (size === "fillParent") {
101
- return "calc(".concat(sizes[size], " - ").concat((0, _utils.getMargin)(margin, "left"), " - ").concat((0, _utils.getMargin)(margin, "right"), ")");
102
- }
103
-
104
- return sizes[size];
89
+ return size === "fillParent" ? "calc(".concat(sizes[size], " - ").concat((0, _utils.getMargin)(margin, "left"), " - ").concat((0, _utils.getMargin)(margin, "right"), ")") : sizes[size];
105
90
  };
106
91
 
107
- var LabelContainer = _styledComponents["default"].span(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n line-height: ", ";\n font-size: ", ";\n text-overflow: ellipsis;\n overflow: hidden;\n text-transform: none;\n white-space: nowrap;\n margin-right: ", ";\n margin-left: ", ";\n"])), function (props) {
108
- return props.theme.labelFontLineHeight;
109
- }, function (props) {
110
- return props.theme.fontSize;
111
- }, function (props) {
112
- return !props.icon || props.iconPosition === "before" ? "8px" : "0px";
113
- }, function (props) {
114
- return !props.icon || props.iconPosition === "after" ? "8px" : "0px";
115
- });
92
+ var getButtonStyles = function getButtonStyles(props) {
93
+ var $mode = props.$mode,
94
+ backgroundType = props.backgroundType,
95
+ disabled = props.disabled;
96
+ return "\n border-radius: ".concat($mode === "primary" ? props.theme.primaryBorderRadius : $mode === "secondary" ? props.theme.secondaryBorderRadius : props.theme.textBorderRadius, ";\n border-width: ").concat($mode === "primary" ? props.theme.primaryBorderThickness : $mode === "secondary" ? props.theme.secondaryBorderThickness : props.theme.textBorderThickness, ";\n border-style: ").concat($mode === "primary" ? props.theme.primaryBorderStyle : $mode === "secondary" ? props.theme.secondaryBorderStyle : props.theme.textBorderStyle, ";\n font-family: ").concat($mode === "primary" ? props.theme.primaryFontFamily : $mode === "secondary" ? props.theme.secondaryFontFamily : props.theme.textFontFamily, ";\n font-size: ").concat($mode === "primary" ? props.theme.primaryFontSize : $mode === "secondary" ? props.theme.secondaryFontSize : props.theme.textFontSize, ";\n font-weight: ").concat($mode === "primary" ? props.theme.primaryFontWeight : $mode === "secondary" ? props.theme.secondaryFontWeight : props.theme.textFontWeight, ";\n background-color: ").concat($mode === "primary" ? backgroundType === "dark" ? props.theme.primaryBackgroundColorOnDark : props.theme.primaryBackgroundColor : $mode === "secondary" ? backgroundType === "dark" ? props.theme.secondaryBackgroundColorOnDark : props.theme.secondaryBackgroundColor : backgroundType === "dark" ? props.theme.textBackgroundColorOnDark : props.theme.textBackgroundColor, ";\n color: ").concat($mode === "primary" ? backgroundType === "dark" ? props.theme.primaryFontColorOnDark : props.theme.primaryFontColor : $mode === "secondary" ? backgroundType === "dark" ? props.theme.secondaryFontColorOnDark : props.theme.secondaryFontColor : backgroundType === "dark" ? props.theme.textFontColorOnDark : props.theme.textFontColor, ";\n border-color: ").concat($mode === "secondary" ? backgroundType === "dark" ? props.theme.secondaryBorderColorOnDark : props.theme.secondaryBorderColor : "", ";\n &:hover {\n background-color: ").concat($mode === "primary" ? backgroundType === "dark" ? props.theme.primaryHoverBackgroundColorOnDark : props.theme.primaryHoverBackgroundColor : $mode === "secondary" ? backgroundType === "dark" ? props.theme.secondaryHoverBackgroundColorOnDark : props.theme.secondaryHoverBackgroundColor : backgroundType === "dark" ? props.theme.textHoverBackgroundColorOnDark : props.theme.textHoverBackgroundColor, ";\n color: ").concat($mode === "secondary" ? backgroundType === "dark" ? props.theme.secondaryHoverFontColorOnDark : props.theme.secondaryHoverFontColor : "", ";\n }\n &:focus {\n border-color: ").concat($mode === "secondary" ? "transparent" : "", ";\n }\n &:active {\n background-color: ").concat($mode === "primary" ? backgroundType === "dark" ? props.theme.primaryActiveBackgroundColorOnDark : props.theme.primaryActiveBackgroundColor : $mode === "secondary" ? backgroundType === "dark" ? props.theme.secondaryActiveBackgroundColorOnDark : props.theme.secondaryActiveBackgroundColor : backgroundType === "dark" ? props.theme.textActiveBackgroundColorOnDark : props.theme.textActiveBackgroundColor, ";\n color: ").concat($mode === "secondary" ? backgroundType === "dark" ? props.theme.secondaryHoverFontColorOnDark : props.theme.secondaryHoverFontColor : "", ";\n border-color: ").concat($mode === "secondary" ? "transparent" : "", ";\n outline: none;\n box-shadow: ").concat(!disabled ? "0 0 0 2px ".concat(backgroundType === "dark" ? props.theme.focusBorderColorOnDark : props.theme.focusBorderColor) : "", ";\n }\n &:disabled {\n cursor: not-allowed;\n background-color: ").concat($mode === "primary" ? backgroundType === "dark" ? props.theme.primaryDisabledBackgroundColorOnDark : props.theme.primaryDisabledBackgroundColor : $mode === "secondary" ? backgroundType === "dark" ? props.theme.secondaryDisabledBackgroundColorOnDark : props.theme.secondaryDisabledBackgroundColor : backgroundType === "dark" ? props.theme.textDisabledBackgroundColorOnDark : props.theme.textDisabledBackgroundColor, ";\n color: ").concat($mode === "primary" ? backgroundType === "dark" ? props.theme.primaryDisabledFontColorOnDark : props.theme.primaryDisabledFontColor : $mode === "secondary" ? backgroundType === "dark" ? props.theme.secondaryDisabledFontColorOnDark : props.theme.secondaryDisabledFontColor : backgroundType === "dark" ? props.theme.textDisabledFontColorOnDark : props.theme.textDisabledFontColor, ";\n border-color: ").concat($mode === "secondary" ? backgroundType === "dark" ? props.theme.secondaryDisabledBorderColorOnDark : props.theme.secondaryDisabledBorderColor : "", ";\n }\n ");
97
+ };
116
98
 
117
- var IconContainer = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n max-height: 24px;\n max-width: 24px;\n margin-left: ", ";\n margin-right: ", ";\n overflow: hidden;\n display: flex;\n img,\n svg {\n height: 100%;\n width: 100%;\n }\n"])), function (props) {
118
- return !props.label ? "0px" : props.iconPosition === "after" && props.label !== "" && "8px" || "8px";
99
+ var Button = _styledComponents["default"].button(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n flex-direction: ", ";\n gap: 0.5rem;\n align-items: center;\n justify-content: center;\n width: ", ";\n height: 40px;\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n padding-top: ", ";\n padding-bottom: ", ";\n padding-left: ", ";\n padding-right: ", ";\n box-shadow: 0 0 0 2px transparent;\n font-family: ", ";\n font-size: ", ";\n font-weight: ", ";\n letter-spacing: ", ";\n cursor: pointer;\n\n &:focus {\n outline: none;\n box-shadow: 0 0 0 2px\n ", ";\n }\n\n ", "\n"])), function (props) {
100
+ return props.iconPosition === "after" ? "row" : "row-reverse";
119
101
  }, function (props) {
120
- return !props.label ? "0px" : props.iconPosition === "before" && props.label !== "" && "8px" || "8px";
121
- });
122
-
123
- var ButtonIcon = _styledComponents["default"].img(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n max-height: 24px;\n max-width: 24px;\n margin-left: ", ";\n margin-right: ", ";\n"])), function (props) {
124
- return props.iconPosition === "after" && props.label !== "" && "10px" || "0px";
102
+ return calculateWidth(props.margin, props.size);
125
103
  }, function (props) {
126
- return props.iconPosition === "before" && props.label !== "" && "10px" || "0px";
127
- });
128
-
129
- var DxCButton = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n\n display: inline-block;\n width: ", ";\n cursor: ", ";\n\n .MuiButtonBase-root {\n padding-left: ", ";\n padding-right: ", ";\n padding-top: ", ";\n padding-bottom: ", ";\n\n .MuiButton-label {\n display: flex;\n flex-direction: ", ";\n align-items: center;\n }\n\n box-shadow: 0 0 0 2px transparent;\n font-family: ", ";\n font-size: ", ";\n font-weight: ", ";\n letter-spacing: ", ";\n min-width: ", ";\n width: 100%;\n height: 40px;\n transition: none !important;\n\n &:focus {\n border-color: transparent;\n box-shadow: 0 0 0 2px\n ", ";\n }\n\n ", "\n }\n"])), function (props) {
130
104
  return props.margin && (0, _typeof2["default"])(props.margin) !== "object" ? _variables.spaces[props.margin] : "0px";
131
105
  }, function (props) {
132
106
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.top ? _variables.spaces[props.margin.top] : "";
@@ -136,20 +110,14 @@ var DxCButton = _styledComponents["default"].div(_templateObject4 || (_templateO
136
110
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.bottom ? _variables.spaces[props.margin.bottom] : "";
137
111
  }, function (props) {
138
112
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.left ? _variables.spaces[props.margin.left] : "";
139
- }, function (props) {
140
- return calculateWidth(props.margin, props.size);
141
- }, function (props) {
142
- return props.disabled && "not-allowed" || "pointer";
143
- }, function (props) {
144
- return props.theme.paddingLeft;
145
- }, function (props) {
146
- return props.theme.paddingRight;
147
113
  }, function (props) {
148
114
  return props.theme.paddingTop;
149
115
  }, function (props) {
150
116
  return props.theme.paddingBottom;
151
117
  }, function (props) {
152
- return props.iconPosition === "after" && "row" || "row-reverse";
118
+ return props.hasIcon && !props.hasLabel ? props.theme.paddingLeft : "calc(".concat(props.theme.paddingLeft, " + 8px)");
119
+ }, function (props) {
120
+ return props.hasIcon && !props.hasLabel ? props.theme.paddingRight : "calc(".concat(props.theme.paddingRight, " + 8px)");
153
121
  }, function (props) {
154
122
  return props.theme.fontFamily;
155
123
  }, function (props) {
@@ -158,22 +126,19 @@ var DxCButton = _styledComponents["default"].div(_templateObject4 || (_templateO
158
126
  return props.theme.fontWeight;
159
127
  }, function (props) {
160
128
  return props.theme.labelLetterSpacing;
161
- }, function (props) {
162
- return props.size === "small" && "calc(100% - 22px)" || "unset";
163
129
  }, function (props) {
164
130
  return props.backgroundType === "dark" ? props.theme.focusBorderColorOnDark : props.theme.focusBorderColor;
165
131
  }, function (props) {
166
- var mode = props.mode,
167
- backgroundType = props.backgroundType;
132
+ return getButtonStyles(props);
133
+ });
168
134
 
169
- if (mode === "primary") {
170
- return "\n border-radius: ".concat(props.theme.primaryBorderRadius, ";\n border-width: ").concat(props.theme.primaryBorderThickness, ";\n border-style: ").concat(props.theme.primaryBorderStyle, ";\n font-family: ").concat(props.theme.primaryFontFamily, ";\n font-size: ").concat(props.theme.primaryFontSize, ";\n font-weight: ").concat(props.theme.primaryFontWeight, ";\n background-color: ").concat(backgroundType === "dark" ? props.theme.primaryBackgroundColorOnDark : props.theme.primaryBackgroundColor, ";\n color: ").concat(backgroundType && backgroundType === "dark" ? props.theme.primaryFontColorOnDark : props.theme.primaryFontColor, " !important;\n\n &:hover {\n background-color: ").concat(backgroundType === "dark" ? props.theme.primaryHoverBackgroundColorOnDark : props.theme.primaryHoverBackgroundColor, ";\n }\n &:active {\n background-color: ").concat(backgroundType === "dark" ? props.theme.primaryActiveBackgroundColorOnDark : props.theme.primaryActiveBackgroundColor, " !important;\n border-color: transparent;\n box-shadow: 0 0 0 2px ").concat(backgroundType === "dark" ? props.theme.focusBorderColorOnDark : props.theme.focusBorderColor, ";\n }\n &:disabled { \n cursor: not-allowed;\n background-color: ").concat(backgroundType === "dark" ? props.theme.primaryDisabledBackgroundColorOnDark : props.theme.primaryDisabledBackgroundColor, ";\n color: ").concat(backgroundType === "dark" ? props.theme.primaryDisabledFontColorOnDark : props.theme.primaryDisabledFontColor, "!important; \n }\n .MuiButton-label {\n z-index: 5;\n }\n ");
171
- } else if (mode === "secondary") {
172
- return "\n border-radius: ".concat(props.theme.secondaryBorderRadius, ";\n border-width: ").concat(props.theme.secondaryBorderThickness, ";\n border-style: ").concat(props.theme.secondaryBorderStyle, ";\n font-family: ").concat(props.theme.secondaryFontFamily, ";\n font-size: ").concat(props.theme.secondaryFontSize, ";\n font-weight: ").concat(props.theme.secondaryFontWeight, ";\n background-color: ").concat(backgroundType === "dark" ? props.theme.secondaryBackgroundColorOnDark : props.theme.secondaryBackgroundColor, ";\n color: ").concat(backgroundType === "dark" ? props.theme.secondaryFontColorOnDark : props.theme.secondaryFontColor, " !important;\n border-color: ").concat(backgroundType === "dark" ? props.theme.secondaryBorderColorOnDark : props.theme.secondaryBorderColor, ";\n\n &:hover {\n background-color: ").concat(backgroundType === "dark" ? props.theme.secondaryHoverBackgroundColorOnDark : props.theme.secondaryHoverBackgroundColor, ";\n color: ").concat(backgroundType === "dark" ? props.theme.secondaryHoverFontColorOnDark : props.theme.secondaryHoverFontColor, " !important;\n }\n &:active {\n background-color: ").concat(backgroundType === "dark" ? props.theme.secondaryActiveBackgroundColorOnDark : props.theme.secondaryActiveBackgroundColor, " !important;\n color: ").concat(backgroundType === "dark" ? props.theme.secondaryHoverFontColorOnDark : props.theme.secondaryHoverFontColor, " !important;\n border-color: transparent;\n box-shadow: 0 0 0 2px ").concat(backgroundType === "dark" ? props.theme.focusBorderColorOnDark : props.theme.focusBorderColor, ";\n }\n &:disabled {\n cursor: not-allowed;\n background-color: ").concat(backgroundType === "dark" ? props.theme.secondaryDisabledBackgroundColorOnDark : props.theme.secondaryDisabledBackgroundColor, " !important;\n color: ").concat(backgroundType === "dark" ? props.theme.secondaryDisabledFontColorOnDark : props.theme.secondaryDisabledFontColor, " !important;\n border-color: ").concat(backgroundType === "dark" ? props.theme.secondaryDisabledBorderColorOnDark : props.theme.secondaryDisabledBorderColor, ";\n }\n .MuiButton-label {\n z-index: 5;\n }\n ");
173
- } else if (mode === "text") {
174
- return "\n border-radius: ".concat(props.theme.textBorderRadius, ";\n border-width: ").concat(props.theme.textBorderThickness, ";\n border-style: ").concat(props.theme.textBorderStyle, ";\n font-family: ").concat(props.theme.textFontFamily, ";\n font-size: ").concat(props.theme.textFontSize, ";\n font-weight: ").concat(props.theme.textFontWeight, ";\n background-color: ").concat(backgroundType === "dark" ? props.theme.textBackgroundColorOnDark : props.theme.textBackgroundColor, ";\n color: ").concat(backgroundType === "dark" ? props.theme.textFontColorOnDark : props.theme.textFontColor, " !important;\n\n &:hover {\n background-color: ").concat(backgroundType === "dark" ? props.theme.textHoverBackgroundColorOnDark : props.theme.textHoverBackgroundColor, ";\n }\n &:active {\n background-color: ").concat(backgroundType === "dark" ? props.theme.textActiveBackgroundColorOnDark : props.theme.textActiveBackgroundColor, " !important;\n border-color: transparent;\n box-shadow: 0 0 0 2px ").concat(backgroundType === "dark" ? props.theme.focusBorderColorOnDark : props.theme.focusBorderColor, ";\n }\n &:disabled {\n cursor:not-allowed;\n color: ").concat(backgroundType === "dark" ? props.theme.textDisabledFontColorOnDark : props.theme.textDisabledFontColor, " !important;\n background-color: ").concat(backgroundType === "dark" ? props.theme.textDisabledBackgroundColorOnDark : props.theme.textDisabledBackgroundColor, ";\n }\n ");
175
- }
135
+ var LabelContainer = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n line-height: ", ";\n font-size: ", ";\n text-overflow: ellipsis;\n overflow: hidden;\n text-transform: none;\n white-space: nowrap;\n"])), function (props) {
136
+ return props.theme.labelFontLineHeight;
137
+ }, function (props) {
138
+ return props.theme.fontSize;
176
139
  });
177
140
 
141
+ var IconContainer = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n img,\n svg {\n height: 24px;\n width: 24px;\n }\n"])));
142
+
178
143
  var _default = DxcButton;
179
144
  exports["default"] = _default;
@@ -1,23 +1,62 @@
1
1
  import React from "react";
2
- import DxcButton from "./Button";
3
2
  import { BackgroundColorProvider } from "../BackgroundColorContext";
3
+ import DxcButton from "./Button";
4
+ import DxcFlex from "./../flex/Flex";
4
5
  import Title from "../../.storybook/components/Title";
5
6
  import ExampleContainer from "../../.storybook/components/ExampleContainer";
6
7
  import DarkContainer from "../../.storybook/components/DarkSection";
8
+ import { HalstackProvider } from "../HalstackContext";
7
9
 
8
10
  export default {
9
11
  title: "Button",
10
12
  component: DxcButton,
11
13
  };
12
14
 
13
- const iconSVG = () => {
14
- return (
15
- <svg viewBox="0 0 24 24" fill="currentColor">
16
- <path d="M0 0h24v24H0z" fill="none" />
17
- <path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" />
18
- </svg>
19
- );
15
+ const iconSVG = (
16
+ <svg width="24px" height="24px" viewBox="0 0 24 24" fill="currentColor">
17
+ <path d="M0 0h24v24H0z" fill="none" />
18
+ <path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" />
19
+ </svg>
20
+ );
21
+
22
+ const facebookIcon = (
23
+ <svg
24
+ version="1.1"
25
+ id="Capa_1"
26
+ x="0px"
27
+ y="0px"
28
+ width="438.536px"
29
+ height="438.536px"
30
+ viewBox="0 0 438.536 438.536"
31
+ fill="currentColor"
32
+ >
33
+ <g>
34
+ <path
35
+ d="M414.41,24.123C398.333,8.042,378.963,0,356.315,0H82.228C59.58,0,40.21,8.042,24.126,24.123
36
+ C8.045,40.207,0.003,59.576,0.003,82.225v274.084c0,22.647,8.042,42.018,24.123,58.102c16.084,16.084,35.454,24.126,58.102,24.126
37
+ h274.084c22.648,0,42.018-8.042,58.095-24.126c16.084-16.084,24.126-35.454,24.126-58.102V82.225
38
+ C438.532,59.576,430.49,40.204,414.41,24.123z M373.155,225.548h-49.963V406.84h-74.802V225.548H210.99V163.02h37.401v-37.402
39
+ c0-26.838,6.283-47.107,18.843-60.813c12.559-13.706,33.304-20.555,62.242-20.555h49.963v62.526h-31.401
40
+ c-10.663,0-17.467,1.853-20.417,5.568c-2.949,3.711-4.428,10.23-4.428,19.558v31.119h56.534L373.155,225.548z"
41
+ />
42
+ </g>
43
+ </svg>
44
+ );
45
+
46
+ const smallIcon = (
47
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" height="20" width="20" fill="currentColor">
48
+ <path d="m7.646 18.333-.313-2.625q-.208-.125-.458-.27-.25-.146-.458-.271l-2.438 1.021-2.354-4.063 2.083-1.583V9.458L1.625 7.875l2.354-4.063 2.438 1.021q.208-.125.458-.27.25-.146.458-.271l.313-2.625h4.708l.313 2.625q.208.125.458.271.25.145.458.27l2.438-1.021 2.354 4.063-2.063 1.583v1.084l2.063 1.583-2.354 4.063-2.438-1.021q-.208.125-.458.271-.25.145-.458.27l-.313 2.625ZM10 12.979q1.229 0 2.104-.875T12.979 10q0-1.229-.875-2.104T10 7.021q-1.229 0-2.104.875T7.021 10q0 1.229.875 2.104t2.104.875Zm0-1.75q-.5 0-.865-.364-.364-.365-.364-.865t.364-.865q.365-.364.865-.364t.865.364q.364.365.364.865t-.364.865q-.365.364-.865.364ZM10.021 10Zm-.854 6.583h1.666l.25-2.166q.605-.167 1.167-.5.562-.334 1.021-.792l2.021.854.833-1.375-1.771-1.354q.104-.292.146-.604.042-.313.042-.646 0-.292-.042-.594t-.125-.635l1.771-1.375-.834-1.375-2.02.875q-.48-.479-1.032-.802-.552-.323-1.156-.49l-.271-2.187H9.167l-.271 2.187q-.604.167-1.156.49-.552.323-1.011.781l-2.021-.854-.833 1.375 1.75 1.354q-.083.333-.125.646-.042.312-.042.604t.042.594q.042.302.125.635l-1.75 1.375.833 1.375 2.021-.854q.459.458 1.011.781.552.323 1.156.49Z" />
49
+ </svg>
50
+ );
51
+
52
+ const opinionatedTheme = {
53
+ button: {
54
+ baseColor: "#5f249f",
55
+ primaryFontColor: "#ffffff",
56
+ secondaryHoverFontColor: "#ffffff",
57
+ },
20
58
  };
59
+
21
60
  export const Chromatic = () => (
22
61
  <>
23
62
  <Title title="Primary" theme="light" level={2} />
@@ -39,7 +78,7 @@ export const Chromatic = () => (
39
78
  </ExampleContainer>
40
79
  <ExampleContainer>
41
80
  <Title title="Disabled" theme="light" level={4} />
42
- <DxcButton label="Primary disabled" disabled />
81
+ <DxcButton label="Primary disabled" disabled icon={iconSVG} />
43
82
  </ExampleContainer>
44
83
  <ExampleContainer>
45
84
  <Title title="With left icon" theme="light" level={4} />
@@ -53,6 +92,18 @@ export const Chromatic = () => (
53
92
  <Title title="Only icon" theme="light" level={4} />
54
93
  <DxcButton icon={iconSVG} />
55
94
  </ExampleContainer>
95
+ <ExampleContainer>
96
+ <Title title="Big icon (SVG)" theme="light" level={4} />
97
+ <DxcButton icon={facebookIcon} />
98
+ </ExampleContainer>
99
+ <ExampleContainer>
100
+ <Title title="Big icon (image)" theme="light" level={4} />
101
+ <DxcButton icon="https://www.freepnglogos.com/uploads/facebook-logo-design-1.png" />
102
+ </ExampleContainer>
103
+ <ExampleContainer>
104
+ <Title title="Small icon" theme="light" level={4} />
105
+ <DxcButton icon={smallIcon} />
106
+ </ExampleContainer>
56
107
  <Title title="Secondary" theme="light" level={2} />
57
108
  <ExampleContainer>
58
109
  <Title title="Enabled" theme="light" level={4} />
@@ -72,12 +123,19 @@ export const Chromatic = () => (
72
123
  </ExampleContainer>
73
124
  <ExampleContainer>
74
125
  <Title title="Disabled" theme="light" level={4} />
75
- <DxcButton mode="secondary" disabled label="Secondary disabled" />
126
+ <DxcButton mode="secondary" disabled label="Secondary disabled" icon={iconSVG} />
76
127
  </ExampleContainer>
77
128
  <ExampleContainer>
78
129
  <Title title="With icon" theme="light" level={4} />
79
130
  <DxcButton mode="secondary" label="Secondary" icon={iconSVG} />
80
131
  </ExampleContainer>
132
+ <ExampleContainer>
133
+ <Title title="Only icon (image)" theme="light" level={4} />
134
+ <DxcButton
135
+ mode="secondary"
136
+ icon="https://www.freepnglogos.com/uploads/facebook-logo-design-1.png"
137
+ />
138
+ </ExampleContainer>
81
139
  <Title title="Text" theme="light" level={2} />
82
140
  <ExampleContainer>
83
141
  <Title title="Enabled" theme="light" level={4} />
@@ -97,12 +155,19 @@ export const Chromatic = () => (
97
155
  </ExampleContainer>
98
156
  <ExampleContainer>
99
157
  <Title title="Disabled" theme="light" level={4} />
100
- <DxcButton mode="text" label="Text disabled" disabled />
158
+ <DxcButton mode="text" label="Text disabled" disabled icon={iconSVG} />
101
159
  </ExampleContainer>
102
160
  <ExampleContainer>
103
161
  <Title title="With icon" theme="light" level={4} />
104
162
  <DxcButton label="Text" mode="text" icon={iconSVG} />
105
163
  </ExampleContainer>
164
+ <ExampleContainer>
165
+ <Title title="Only icon (image)" theme="light" level={4} />
166
+ <DxcButton
167
+ mode="text"
168
+ icon="https://www.freepnglogos.com/uploads/facebook-logo-design-1.png"
169
+ />
170
+ </ExampleContainer>
106
171
  <BackgroundColorProvider color="#333333">
107
172
  <DarkContainer>
108
173
  <Title title="Primary" theme="dark" level={2} />
@@ -124,7 +189,7 @@ export const Chromatic = () => (
124
189
  </ExampleContainer>
125
190
  <ExampleContainer>
126
191
  <Title title="Disabled" theme="dark" level={4} />
127
- <DxcButton label="Primary disabled" disabled />
192
+ <DxcButton label="Primary disabled" disabled icon={iconSVG} />
128
193
  </ExampleContainer>
129
194
  <ExampleContainer>
130
195
  <Title title="With icon" theme="dark" level={4} />
@@ -149,7 +214,7 @@ export const Chromatic = () => (
149
214
  </ExampleContainer>
150
215
  <ExampleContainer>
151
216
  <Title title="Disabled" theme="dark" level={4} />
152
- <DxcButton mode="secondary" disabled label="Secondary disabled" />
217
+ <DxcButton mode="secondary" disabled label="Secondary disabled" icon={iconSVG} />
153
218
  </ExampleContainer>
154
219
  <ExampleContainer>
155
220
  <Title title="With icon" theme="dark" level={4} />
@@ -174,7 +239,7 @@ export const Chromatic = () => (
174
239
  </ExampleContainer>
175
240
  <ExampleContainer>
176
241
  <Title title="Disabled" theme="dark" level={4} />
177
- <DxcButton mode="text" label="Text disabled" disabled />
242
+ <DxcButton mode="text" label="Text disabled" disabled icon={iconSVG} />
178
243
  </ExampleContainer>
179
244
  <ExampleContainer>
180
245
  <Title title="With icon" theme="dark" level={4} />
@@ -272,5 +337,89 @@ export const Chromatic = () => (
272
337
  <Title title="Xxlarge margin" theme="light" level={4} />
273
338
  <DxcButton label="Xxlarge margin" margin="xxlarge" />
274
339
  </ExampleContainer>
340
+ <Title title="Inside a flex" theme="light" level={2} />
341
+ <ExampleContainer>
342
+ <DxcFlex direction="column" gap="1rem">
343
+ <DxcButton label="Button" />
344
+ <DxcButton label="Button" />
345
+ <DxcButton label="Button" />
346
+ </DxcFlex>
347
+ </ExampleContainer>
348
+ <Title title="Opinionated theme" theme="light" level={2} />
349
+ <Title title="Primary" theme="light" level={3} />
350
+ <ExampleContainer>
351
+ <Title title="Enabled" theme="light" level={4} />
352
+ <HalstackProvider theme={opinionatedTheme}>
353
+ <DxcButton label="Primary" icon={iconSVG} />
354
+ </HalstackProvider>
355
+ </ExampleContainer>
356
+ <ExampleContainer pseudoState="pseudo-hover">
357
+ <Title title="Hovered" theme="light" level={4} />
358
+ <DxcButton label="Primary hovered" icon={iconSVG} />
359
+ </ExampleContainer>
360
+ <ExampleContainer pseudoState="pseudo-focus">
361
+ <Title title="Focused" theme="light" level={4} />
362
+ <DxcButton label="Primary focused" icon={iconSVG} />
363
+ </ExampleContainer>
364
+ <ExampleContainer pseudoState="pseudo-active">
365
+ <Title title="Actived" theme="light" level={4} />
366
+ <DxcButton label="Primary actived" icon={iconSVG} />
367
+ </ExampleContainer>
368
+ <ExampleContainer>
369
+ <Title title="Disabled" theme="light" level={4} />
370
+ <HalstackProvider theme={opinionatedTheme}>
371
+ <DxcButton label="Primary" icon={iconSVG} disabled />
372
+ </HalstackProvider>
373
+ </ExampleContainer>
374
+ <Title title="Secondary" theme="light" level={3} />
375
+ <ExampleContainer>
376
+ <Title title="Enabled" theme="light" level={4} />
377
+ <HalstackProvider theme={opinionatedTheme}>
378
+ <DxcButton mode="secondary" label="Secondary" icon={iconSVG} />
379
+ </HalstackProvider>
380
+ </ExampleContainer>
381
+ <ExampleContainer pseudoState="pseudo-hover">
382
+ <Title title="Hovered" theme="light" level={4} />
383
+ <DxcButton mode="secondary" label="Secondary hovered" icon={iconSVG} />
384
+ </ExampleContainer>
385
+ <ExampleContainer pseudoState="pseudo-focus">
386
+ <Title title="Focused" theme="light" level={4} />
387
+ <DxcButton mode="secondary" label="Secondary focused" icon={iconSVG} />
388
+ </ExampleContainer>
389
+ <ExampleContainer pseudoState="pseudo-active">
390
+ <Title title="Actived" theme="light" level={4} />
391
+ <DxcButton mode="secondary" label="Secondary actived" icon={iconSVG} />
392
+ </ExampleContainer>
393
+ <ExampleContainer>
394
+ <Title title="Disabled" theme="light" level={4} />
395
+ <HalstackProvider theme={opinionatedTheme}>
396
+ <DxcButton mode="secondary" label="Secondary" icon={iconSVG} disabled />
397
+ </HalstackProvider>
398
+ </ExampleContainer>
399
+ <Title title="Text" theme="light" level={3} />
400
+ <ExampleContainer>
401
+ <Title title="Enabled" theme="light" level={4} />
402
+ <HalstackProvider theme={opinionatedTheme}>
403
+ <DxcButton mode="text" label="Text" icon={iconSVG} />
404
+ </HalstackProvider>
405
+ </ExampleContainer>
406
+ <ExampleContainer pseudoState="pseudo-hover">
407
+ <Title title="Hovered" theme="light" level={4} />
408
+ <DxcButton mode="text" label="Text hovered" icon={iconSVG} />
409
+ </ExampleContainer>
410
+ <ExampleContainer pseudoState="pseudo-focus">
411
+ <Title title="Focused" theme="light" level={4} />
412
+ <DxcButton mode="text" label="Text focused" icon={iconSVG} />
413
+ </ExampleContainer>
414
+ <ExampleContainer pseudoState="pseudo-active">
415
+ <Title title="Actived" theme="light" level={4} />
416
+ <DxcButton mode="text" label="Text actived" icon={iconSVG} />
417
+ </ExampleContainer>
418
+ <ExampleContainer>
419
+ <Title title="Disabled" theme="light" level={4} />
420
+ <HalstackProvider theme={opinionatedTheme}>
421
+ <DxcButton mode="text" label="Text disabled" icon={iconSVG} disabled />
422
+ </HalstackProvider>
423
+ </ExampleContainer>
275
424
  </>
276
425
  );
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _react = _interopRequireDefault(require("react"));
6
+
7
+ var _react2 = require("@testing-library/react");
8
+
9
+ var _Button = _interopRequireDefault(require("./Button.tsx"));
10
+
11
+ describe("Button component tests", function () {
12
+ test("Button renders with correct text", function () {
13
+ var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Button["default"], {
14
+ label: "Button"
15
+ })),
16
+ getByText = _render.getByText;
17
+
18
+ expect(getByText("Button")).toBeTruthy();
19
+ });
20
+ test("Calls correct function on click", function () {
21
+ var onClick = jest.fn();
22
+
23
+ var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Button["default"], {
24
+ label: "Button",
25
+ onClick: onClick
26
+ })),
27
+ getByText = _render2.getByText;
28
+
29
+ var button = getByText("Button");
30
+
31
+ _react2.fireEvent.click(button);
32
+
33
+ expect(onClick).toHaveBeenCalled();
34
+ });
35
+ test("Renders with correct accessibility attributes", function () {
36
+ var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Button["default"], {
37
+ label: "Home",
38
+ title: "Go home"
39
+ })),
40
+ getByRole = _render3.getByRole;
41
+
42
+ var button = getByRole("button");
43
+ expect(button.getAttribute("aria-label")).toBe("Go home");
44
+ expect(button.getAttribute("title")).toBe("Go home");
45
+ });
46
+ });
package/button/types.d.ts CHANGED
@@ -6,14 +6,14 @@ declare type Margin = {
6
6
  left?: Space;
7
7
  right?: Space;
8
8
  };
9
- declare type SVG = React.SVGProps<SVGSVGElement> | React.FunctionComponent<React.SVGProps<SVGSVGElement>>;
9
+ declare type SVG = React.ReactNode & React.SVGProps<SVGSVGElement>;
10
10
  declare type Props = {
11
11
  /**
12
- * Text to be placed next to the button.
12
+ * Text to be placed in the button.
13
13
  */
14
14
  label?: string;
15
15
  /**
16
- * Uses one of the available button modes.
16
+ * The available button modes.
17
17
  */
18
18
  mode?: "primary" | "secondary" | "text";
19
19
  /**
@@ -25,17 +25,17 @@ declare type Props = {
25
25
  */
26
26
  iconPosition?: "before" | "after";
27
27
  /**
28
- * This prop corresponds to the 'type' prop of the button in html.
28
+ * Value for the HTML properties title and aria-label.
29
29
  */
30
- type?: "button" | "reset" | "submit";
30
+ title?: string;
31
31
  /**
32
- * Element used as the icon that will be placed next to the button label.
32
+ * 'type' html prop of the button.
33
33
  */
34
- icon?: SVG;
34
+ type?: "button" | "reset" | "submit";
35
35
  /**
36
- * @deprecated URL of the icon that will be placed next to the button label.
36
+ * Element or path used as the icon that will be placed next to the label.
37
37
  */
38
- iconSrc?: string;
38
+ icon?: string | SVG;
39
39
  /**
40
40
  * This function will be called when the user clicks the button.
41
41
  */
package/card/Card.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  /// <reference types="react" />
2
2
  import CardPropsType from "./types";
3
- declare const DxcCard: ({ imageSrc, imageBgColor, imagePadding, imagePosition, linkHref, onClick, imageCover, margin, contentPadding, tabIndex, outlined, children, }: CardPropsType) => JSX.Element;
3
+ declare const DxcCard: ({ imageSrc, imageBgColor, imagePadding, imagePosition, linkHref, onClick, imageCover, margin, tabIndex, outlined, children, }: CardPropsType) => JSX.Element;
4
4
  export default DxcCard;