@dxc-technology/halstack-react 0.0.0-c796a1b → 0.0.0-c8b251f

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 (202) hide show
  1. package/BackgroundColorContext.js +0 -1
  2. package/ThemeContext.d.ts +4 -9
  3. package/ThemeContext.js +32 -32
  4. package/accordion/Accordion.d.ts +1 -1
  5. package/accordion/Accordion.js +11 -43
  6. package/accordion/Accordion.stories.tsx +307 -0
  7. package/accordion/Accordion.test.js +72 -0
  8. package/accordion/types.d.ts +8 -8
  9. package/accordion-group/AccordionGroup.d.ts +1 -1
  10. package/accordion-group/AccordionGroup.js +13 -15
  11. package/accordion-group/AccordionGroup.stories.tsx +1 -1
  12. package/accordion-group/AccordionGroup.test.js +151 -0
  13. package/accordion-group/types.d.ts +8 -8
  14. package/alert/Alert.test.js +92 -0
  15. package/badge/Badge.d.ts +4 -0
  16. package/badge/types.d.ts +4 -0
  17. package/badge/types.js +5 -0
  18. package/bleed/Bleed.d.ts +3 -0
  19. package/bleed/Bleed.js +84 -0
  20. package/bleed/Bleed.stories.tsx +342 -0
  21. package/bleed/types.d.ts +37 -0
  22. package/bleed/types.js +5 -0
  23. package/box/Box.test.js +18 -0
  24. package/button/Button.d.ts +1 -1
  25. package/button/Button.js +9 -17
  26. package/button/Button.stories.tsx +6 -8
  27. package/button/Button.test.js +35 -0
  28. package/button/types.d.ts +3 -7
  29. package/card/Card.stories.tsx +1 -1
  30. package/card/Card.test.js +50 -0
  31. package/checkbox/Checkbox.d.ts +1 -1
  32. package/checkbox/Checkbox.js +7 -13
  33. package/checkbox/Checkbox.stories.tsx +14 -14
  34. package/checkbox/Checkbox.test.js +78 -0
  35. package/checkbox/types.d.ts +5 -1
  36. package/chip/Chip.d.ts +1 -1
  37. package/chip/Chip.js +16 -54
  38. package/chip/Chip.stories.tsx +6 -8
  39. package/chip/Chip.test.js +56 -0
  40. package/chip/types.d.ts +7 -15
  41. package/common/variables.js +43 -245
  42. package/date-input/DateInput.js +50 -39
  43. package/date-input/DateInput.stories.tsx +7 -7
  44. package/date-input/DateInput.test.js +479 -0
  45. package/date-input/types.d.ts +16 -9
  46. package/dialog/Dialog.js +6 -33
  47. package/dialog/Dialog.test.js +40 -0
  48. package/dropdown/Dropdown.d.ts +1 -1
  49. package/dropdown/Dropdown.js +12 -34
  50. package/dropdown/Dropdown.stories.tsx +249 -0
  51. package/dropdown/Dropdown.test.js +189 -0
  52. package/dropdown/types.d.ts +5 -14
  53. package/file-input/FileInput.js +102 -33
  54. package/file-input/FileInput.stories.tsx +507 -0
  55. package/file-input/FileInput.test.js +457 -0
  56. package/footer/Footer.js +19 -96
  57. package/footer/Footer.test.js +109 -0
  58. package/header/Header.js +20 -44
  59. package/header/Header.stories.tsx +46 -36
  60. package/header/Header.test.js +79 -0
  61. package/heading/Heading.stories.tsx +3 -2
  62. package/heading/Heading.test.js +186 -0
  63. package/inset/Inset.d.ts +3 -0
  64. package/inset/Inset.js +84 -0
  65. package/inset/Inset.stories.tsx +229 -0
  66. package/inset/types.d.ts +37 -0
  67. package/inset/types.js +5 -0
  68. package/layout/ApplicationLayout.js +7 -14
  69. package/link/Link.js +7 -15
  70. package/link/Link.stories.tsx +6 -1
  71. package/link/Link.test.js +91 -0
  72. package/link/types.d.ts +5 -9
  73. package/list/List.d.ts +3 -6
  74. package/list/List.js +17 -7
  75. package/list/List.stories.tsx +25 -0
  76. package/list/types.d.ts +7 -0
  77. package/list/types.js +5 -0
  78. package/main.d.ts +5 -6
  79. package/main.js +28 -36
  80. package/number-input/NumberInput.js +11 -18
  81. package/number-input/NumberInput.stories.tsx +5 -5
  82. package/number-input/NumberInput.test.js +506 -0
  83. package/number-input/types.d.ts +16 -9
  84. package/package.json +6 -3
  85. package/paginator/Paginator.test.js +266 -0
  86. package/password-input/PasswordInput.stories.tsx +3 -3
  87. package/password-input/PasswordInput.test.js +181 -0
  88. package/password-input/types.d.ts +13 -10
  89. package/progress-bar/ProgressBar.js +2 -2
  90. package/progress-bar/ProgressBar.test.js +65 -0
  91. package/quick-nav/QuickNav.d.ts +4 -0
  92. package/quick-nav/QuickNav.js +66 -0
  93. package/quick-nav/QuickNav.stories.tsx +237 -0
  94. package/quick-nav/types.d.ts +21 -0
  95. package/quick-nav/types.js +5 -0
  96. package/radio/Radio.test.js +71 -0
  97. package/radio-group/Radio.d.ts +4 -0
  98. package/radio-group/Radio.js +141 -0
  99. package/radio-group/RadioGroup.d.ts +4 -0
  100. package/radio-group/RadioGroup.js +280 -0
  101. package/radio-group/RadioGroup.stories.tsx +100 -0
  102. package/radio-group/RadioGroup.test.js +695 -0
  103. package/radio-group/types.d.ts +114 -0
  104. package/radio-group/types.js +5 -0
  105. package/resultsetTable/ResultsetTable.js +5 -2
  106. package/resultsetTable/ResultsetTable.stories.tsx +7 -8
  107. package/resultsetTable/ResultsetTable.test.js +306 -0
  108. package/row/Row.d.ts +3 -11
  109. package/row/Row.js +12 -9
  110. package/row/Row.stories.tsx +20 -6
  111. package/row/types.d.ts +28 -0
  112. package/row/types.js +5 -0
  113. package/select/Icons.d.ts +10 -0
  114. package/select/Icons.js +93 -0
  115. package/select/Listbox.d.ts +4 -0
  116. package/select/Listbox.js +148 -0
  117. package/select/Option.d.ts +4 -0
  118. package/select/Option.js +110 -0
  119. package/select/Select.d.ts +4 -0
  120. package/select/Select.js +94 -302
  121. package/select/Select.stories.tsx +91 -81
  122. package/select/Select.test.js +2057 -0
  123. package/select/types.d.ts +213 -0
  124. package/select/types.js +5 -0
  125. package/sidenav/Sidenav.stories.tsx +18 -1
  126. package/sidenav/Sidenav.test.js +56 -0
  127. package/slider/Slider.d.ts +1 -1
  128. package/slider/Slider.js +2 -1
  129. package/slider/Slider.stories.tsx +8 -8
  130. package/slider/Slider.test.js +150 -0
  131. package/slider/types.d.ts +4 -0
  132. package/spinner/Spinner.stories.jsx +1 -0
  133. package/spinner/Spinner.test.js +64 -0
  134. package/stack/Stack.d.ts +3 -10
  135. package/stack/Stack.js +12 -9
  136. package/stack/Stack.stories.tsx +20 -6
  137. package/stack/types.d.ts +24 -0
  138. package/stack/types.js +5 -0
  139. package/switch/Switch.d.ts +1 -1
  140. package/switch/Switch.js +19 -6
  141. package/switch/Switch.stories.tsx +7 -7
  142. package/switch/Switch.test.js +98 -0
  143. package/switch/types.d.ts +4 -0
  144. package/table/Table.stories.jsx +2 -1
  145. package/table/Table.test.js +26 -0
  146. package/tabs/Tabs.d.ts +1 -1
  147. package/tabs/Tabs.js +16 -18
  148. package/tabs/Tabs.stories.tsx +8 -11
  149. package/tabs/Tabs.test.js +140 -0
  150. package/tabs/types.d.ts +27 -15
  151. package/tag/Tag.d.ts +1 -1
  152. package/tag/Tag.js +15 -22
  153. package/tag/Tag.stories.tsx +26 -29
  154. package/tag/Tag.test.js +60 -0
  155. package/tag/types.d.ts +23 -14
  156. package/text/Text.js +1 -1
  157. package/text-input/TextInput.js +22 -12
  158. package/text-input/TextInput.stories.tsx +34 -16
  159. package/text-input/TextInput.test.js +1712 -0
  160. package/text-input/types.d.ts +18 -11
  161. package/textarea/Textarea.d.ts +4 -0
  162. package/textarea/Textarea.js +10 -38
  163. package/textarea/Textarea.stories.jsx +37 -15
  164. package/textarea/Textarea.test.js +437 -0
  165. package/textarea/types.d.ts +137 -0
  166. package/textarea/types.js +5 -0
  167. package/toggle-group/ToggleGroup.d.ts +1 -1
  168. package/toggle-group/ToggleGroup.js +12 -14
  169. package/toggle-group/ToggleGroup.stories.tsx +27 -32
  170. package/toggle-group/ToggleGroup.test.js +156 -0
  171. package/toggle-group/types.d.ts +46 -25
  172. package/wizard/Wizard.d.ts +1 -1
  173. package/wizard/Wizard.js +71 -16
  174. package/wizard/{Wizard.stories.jsx → Wizard.stories.tsx} +13 -23
  175. package/wizard/Wizard.test.js +141 -0
  176. package/wizard/types.d.ts +8 -8
  177. package/V3Select/V3Select.js +0 -455
  178. package/V3Select/index.d.ts +0 -27
  179. package/V3Textarea/V3Textarea.js +0 -260
  180. package/V3Textarea/index.d.ts +0 -27
  181. package/date/Date.js +0 -373
  182. package/date/index.d.ts +0 -27
  183. package/input-text/Icons.js +0 -22
  184. package/input-text/InputText.js +0 -611
  185. package/input-text/index.d.ts +0 -36
  186. package/select/index.d.ts +0 -131
  187. package/textarea/index.d.ts +0 -127
  188. package/toggle/Toggle.js +0 -186
  189. package/toggle/index.d.ts +0 -21
  190. package/upload/Upload.js +0 -201
  191. package/upload/buttons-upload/ButtonsUpload.js +0 -111
  192. package/upload/buttons-upload/Icons.js +0 -40
  193. package/upload/dragAndDropArea/DragAndDropArea.js +0 -225
  194. package/upload/dragAndDropArea/Icons.js +0 -39
  195. package/upload/file-upload/FileToUpload.js +0 -115
  196. package/upload/file-upload/Icons.js +0 -66
  197. package/upload/files-upload/FilesToUpload.js +0 -109
  198. package/upload/index.d.ts +0 -15
  199. package/upload/transaction/Icons.js +0 -160
  200. package/upload/transaction/Transaction.js +0 -104
  201. package/upload/transactions/Transactions.js +0 -94
  202. package/wizard/Icons.js +0 -65
@@ -0,0 +1,140 @@
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 _Tabs = _interopRequireDefault(require("./Tabs"));
10
+
11
+ var sampleTabs = [{
12
+ label: "Tab-1"
13
+ }, {
14
+ label: "Tab-2"
15
+ }, {
16
+ label: "Tab-3"
17
+ }];
18
+ var sampleTabsWithBadge = [{
19
+ label: "Tab-1",
20
+ notificationNumber: "10"
21
+ }, {
22
+ label: "Tab-2",
23
+ notificationNumber: "20"
24
+ }, {
25
+ label: "Tab-3",
26
+ notificationNumber: "101"
27
+ }];
28
+ describe("Tabs component tests", function () {
29
+ test("Tabs render with correct labels", function () {
30
+ var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
31
+ tabs: sampleTabs
32
+ })),
33
+ getByText = _render.getByText,
34
+ getAllByRole = _render.getAllByRole;
35
+
36
+ var tabs = getAllByRole("tab");
37
+ expect(getByText("Tab-1")).toBeTruthy();
38
+ expect(getByText("Tab-2")).toBeTruthy();
39
+ expect(getByText("Tab-3")).toBeTruthy();
40
+ expect(tabs[0].getAttribute("aria-selected")).toBe("true");
41
+ expect(tabs[1].getAttribute("aria-selected")).toBe("false");
42
+ expect(tabs[2].getAttribute("aria-selected")).toBe("false");
43
+ });
44
+ test("Tabs render with correct labels and badges", function () {
45
+ var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
46
+ tabs: sampleTabsWithBadge
47
+ })),
48
+ getByText = _render2.getByText;
49
+
50
+ expect(getByText("10")).toBeTruthy();
51
+ expect(getByText("20")).toBeTruthy();
52
+ expect(getByText("+99")).toBeTruthy();
53
+ });
54
+ test("Tabs render with an initially active tab", function () {
55
+ var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
56
+ defaultActiveTabIndex: 2,
57
+ tabs: sampleTabsWithBadge
58
+ })),
59
+ getAllByRole = _render3.getAllByRole;
60
+
61
+ var tabs = getAllByRole("tab");
62
+ expect(tabs[0].getAttribute("aria-selected")).toBe("false");
63
+ expect(tabs[1].getAttribute("aria-selected")).toBe("false");
64
+ expect(tabs[2].getAttribute("aria-selected")).toBe("true");
65
+ });
66
+ test("Tabs render with correct icons", function () {
67
+ var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
68
+ tabs: [{
69
+ label: "Tab-1",
70
+ icon: "/testIcon1.png"
71
+ }, {
72
+ label: "Tab-2",
73
+ icon: "/testIcon2.png"
74
+ }, {
75
+ label: "Tab-3",
76
+ icon: "/testIcon3.png"
77
+ }]
78
+ })),
79
+ getAllByRole = _render4.getAllByRole;
80
+
81
+ expect(getAllByRole("img")[0].getAttribute("src")).toBe("/testIcon1.png");
82
+ expect(getAllByRole("img")[1].getAttribute("src")).toBe("/testIcon2.png");
83
+ expect(getAllByRole("img")[2].getAttribute("src")).toBe("/testIcon3.png");
84
+ });
85
+ test("Tabs render with disabled tab", function () {
86
+ var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
87
+ tabs: [{
88
+ label: "Tab-1",
89
+ isDisabled: true
90
+ }, {
91
+ label: "Tab-2"
92
+ }]
93
+ })),
94
+ getAllByRole = _render5.getAllByRole;
95
+
96
+ expect(getAllByRole("tab")[0].hasAttribute("disabled")).toBeTruthy();
97
+ expect(getAllByRole("tab")[1].hasAttribute("disabled")).toBeFalsy();
98
+ });
99
+ test("Uncontrolled tabs", function () {
100
+ var onTabClick = jest.fn();
101
+
102
+ var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
103
+ tabs: sampleTabs,
104
+ onTabClick: onTabClick
105
+ })),
106
+ getByText = _render6.getByText;
107
+
108
+ var tab1 = getByText("Tab-1");
109
+ var tab2 = getByText("Tab-2");
110
+
111
+ _react2.fireEvent.click(tab2);
112
+
113
+ expect(onTabClick).toHaveBeenCalledWith(1);
114
+
115
+ _react2.fireEvent.click(tab1);
116
+
117
+ expect(onTabClick).toHaveBeenCalledWith(0);
118
+ });
119
+ test("Controlled tabs", function () {
120
+ var onTabClick = jest.fn();
121
+
122
+ var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
123
+ tabs: sampleTabs,
124
+ onTabClick: onTabClick,
125
+ activeTabIndex: 0
126
+ })),
127
+ getByText = _render7.getByText;
128
+
129
+ var tab2 = getByText("Tab-2");
130
+ var tab3 = getByText("Tab-3");
131
+
132
+ _react2.fireEvent.click(tab2);
133
+
134
+ expect(onTabClick).toHaveBeenCalledWith(1);
135
+
136
+ _react2.fireEvent.click(tab3);
137
+
138
+ expect(onTabClick).toHaveBeenCalledWith(2);
139
+ });
140
+ });
package/tabs/types.d.ts CHANGED
@@ -6,20 +6,8 @@ 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>>;
10
- declare type Tab = {
11
- /**
12
- * Tab label.
13
- */
14
- label?: string;
15
- /**
16
- * Element used as the icon that will be displayed in the tab.
17
- */
18
- icon?: SVG;
19
- /**
20
- * @deprecated URL of the icon to be displayed in the tab.
21
- */
22
- iconSrc?: string;
9
+ declare type SVG = React.SVGProps<SVGSVGElement>;
10
+ declare type TabCommonProps = {
23
11
  /**
24
12
  * Whether the tab is disabled or not.
25
13
  */
@@ -33,15 +21,39 @@ declare type Tab = {
33
21
  */
34
22
  notificationNumber?: boolean | number;
35
23
  };
24
+ declare type TabLabelProps = TabCommonProps & {
25
+ /**
26
+ * Tab label.
27
+ */
28
+ label: string;
29
+ /**
30
+ * Element or path used as the icon that will be displayed in the tab.
31
+ */
32
+ icon?: string | SVG;
33
+ };
34
+ declare type TabIconProps = TabCommonProps & {
35
+ /**
36
+ * Tab label.
37
+ */
38
+ label?: string;
39
+ /**
40
+ * Element or path used as the icon that will be displayed in the tab.
41
+ */
42
+ icon: string | SVG;
43
+ };
36
44
  declare type Props = {
37
45
  /**
38
46
  * An array of objects representing the tabs.
39
47
  */
40
- tabs: Tab[];
48
+ tabs: (TabLabelProps | TabIconProps)[];
41
49
  /**
42
50
  * Whether the icon should appear above or to the left of the label.
43
51
  */
44
52
  iconPosition?: "top" | "left";
53
+ /**
54
+ * Initially active tab, only when it is uncontrolled.
55
+ */
56
+ defaultActiveTabIndex?: number;
45
57
  /**
46
58
  * The index of the active tab. If undefined, the component will be
47
59
  * uncontrolled and the active tab will be managed internally by the component.
package/tag/Tag.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  /// <reference types="react" />
2
2
  import TagPropsType from "./types";
3
- declare const DxcTag: ({ icon, iconSrc, label, linkHref, onClick, iconBgColor, labelPosition, newWindow, margin, size, tabIndex, }: TagPropsType) => JSX.Element;
3
+ declare const DxcTag: ({ icon, label, linkHref, onClick, iconBgColor, labelPosition, newWindow, margin, size, tabIndex, }: TagPropsType) => JSX.Element;
4
4
  export default DxcTag;
package/tag/Tag.js CHANGED
@@ -9,10 +9,10 @@ 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
 
14
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
15
+
16
16
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
17
 
18
18
  var _react = _interopRequireWildcard(require("react"));
@@ -27,7 +27,7 @@ var _utils = require("../common/utils.js");
27
27
 
28
28
  var _Box = _interopRequireDefault(require("../box/Box"));
29
29
 
30
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
30
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7;
31
31
 
32
32
  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
33
 
@@ -35,7 +35,6 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
35
35
 
36
36
  var DxcTag = function DxcTag(_ref) {
37
37
  var icon = _ref.icon,
38
- iconSrc = _ref.iconSrc,
39
38
  _ref$label = _ref.label,
40
39
  label = _ref$label === void 0 ? "" : _ref$label,
41
40
  linkHref = _ref.linkHref,
@@ -67,11 +66,11 @@ var DxcTag = function DxcTag(_ref) {
67
66
  shadowDepth: isHovered && (onClick || linkHref) && 2 || 1
68
67
  }, /*#__PURE__*/_react["default"].createElement(TagContent, {
69
68
  labelPosition: labelPosition
70
- }, /*#__PURE__*/_react["default"].createElement(IconContainer, {
69
+ }, icon && /*#__PURE__*/_react["default"].createElement(IconContainer, {
71
70
  iconBgColor: iconBgColor
72
- }, icon ? /*#__PURE__*/_react["default"].createElement(TagIconContainer, null, (0, _typeof2["default"])(icon) === "object" ? icon : /*#__PURE__*/_react["default"].createElement(icon)) : /*#__PURE__*/_react["default"].createElement(TagIcon, {
73
- src: iconSrc
74
- })), size !== "small" && /*#__PURE__*/_react["default"].createElement(TagLabel, null, label)));
71
+ }, typeof icon === "string" ? /*#__PURE__*/_react["default"].createElement(TagIcon, {
72
+ src: icon
73
+ }) : icon), size !== "small" && label && /*#__PURE__*/_react["default"].createElement(TagLabel, null, label)));
75
74
 
76
75
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
77
76
  theme: colorsTheme.tag
@@ -146,19 +145,7 @@ var StyledButton = _styledComponents["default"].button(_templateObject4 || (_tem
146
145
  return props.theme.focusColor;
147
146
  });
148
147
 
149
- var TagIcon = _styledComponents["default"].img(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n width: ", ";\n height: ", ";\n"])), function (props) {
150
- return props.theme.iconWidth;
151
- }, function (props) {
152
- return props.theme.iconHeight;
153
- });
154
-
155
- var TagIconContainer = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n\n img,\n svg {\n width: ", ";\n height: ", ";\n }\n"])), function (props) {
156
- return props.theme.iconWidth;
157
- }, function (props) {
158
- return props.theme.iconHeight;
159
- });
160
-
161
- var IconContainer = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n background: ", ";\n width: ", ";\n height: 100%;\n justify-content: center;\n align-items: center;\n color: ", ";\n min-width: ", ";\n"])), function (_ref9) {
148
+ var IconContainer = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n background: ", ";\n width: ", ";\n height: 100%;\n justify-content: center;\n align-items: center;\n color: ", ";\n min-width: ", ";\n overflow: hidden;\n img,\n svg {\n width: ", ";\n height: ", ";\n }\n"])), function (_ref9) {
162
149
  var iconBgColor = _ref9.iconBgColor;
163
150
  return iconBgColor;
164
151
  }, function (props) {
@@ -167,9 +154,15 @@ var IconContainer = _styledComponents["default"].div(_templateObject7 || (_templ
167
154
  return props.theme.iconColor;
168
155
  }, function (props) {
169
156
  return props.theme.iconSectionWidth;
157
+ }, function (props) {
158
+ return props.theme.iconWidth;
159
+ }, function (props) {
160
+ return props.theme.iconHeight;
170
161
  });
171
162
 
172
- var TagLabel = _styledComponents["default"].div(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n color: ", ";\n padding-top: ", ";\n padding-bottom: ", ";\n padding-left: ", ";\n padding-right: ", ";\n flex-grow: 1;\n text-align: center;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n"])), function (props) {
163
+ var TagIcon = _styledComponents["default"].img(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])([""])));
164
+
165
+ var TagLabel = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n color: ", ";\n padding-top: ", ";\n padding-bottom: ", ";\n padding-left: ", ";\n padding-right: ", ";\n flex-grow: 1;\n text-align: center;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n"])), function (props) {
173
166
  return props.theme.fontFamily;
174
167
  }, function (props) {
175
168
  return props.theme.fontSize;
@@ -9,29 +9,22 @@ export default {
9
9
  component: DxcTag,
10
10
  };
11
11
 
12
- const icon = () => {
13
- return (
14
- <svg viewBox="0 0 24 24" fill="currentColor">
15
- <path d="M0 0h24v24H0z" fill="none" />
16
- <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" />
17
- </svg>
18
- );
19
- };
20
- const largeIcon = () => {
21
- return (
22
- <svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 0 24 24" width="48px" fill="currentColor">
23
- <path d="M0 0h24v24H0V0z" fill="none" />
24
- <path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z" />
25
- </svg>
26
- );
27
- };
12
+ const icon = (
13
+ <svg viewBox="0 0 24 24" fill="currentColor">
14
+ <path d="M0 0h24v24H0z" fill="none" />
15
+ <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" />
16
+ </svg>
17
+ );
18
+
19
+ const largeIcon = (
20
+ <svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 0 24 24" width="48px" fill="currentColor">
21
+ <path d="M0 0h24v24H0V0z" fill="none" />
22
+ <path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z" />
23
+ </svg>
24
+ );
28
25
 
29
26
  export const Chromatic = () => (
30
27
  <>
31
- <ExampleContainer>
32
- <Title title="Without label" theme="light" level={4} />
33
- <DxcTag />
34
- </ExampleContainer>
35
28
  <ExampleContainer>
36
29
  <Title title="With icon" theme="light" level={4} />
37
30
  <DxcTag icon={icon} />
@@ -46,7 +39,10 @@ export const Chromatic = () => (
46
39
  </ExampleContainer>
47
40
  <ExampleContainer>
48
41
  <Title title="With label and icon" theme="light" level={4} />
49
- <DxcTag label="Tag" icon={icon} />
42
+ <DxcTag
43
+ label="Tag"
44
+ icon="https://iconape.com/wp-content/files/yd/367773/svg/logo-linkedin-logo-icon-png-svg.png"
45
+ />
50
46
  </ExampleContainer>
51
47
  <ExampleContainer>
52
48
  <Title title="With right icon" theme="light" level={4} />
@@ -102,37 +98,38 @@ export const Chromatic = () => (
102
98
  <Title title="Sizes" theme="light" level={2} />
103
99
  <ExampleContainer>
104
100
  <Title title="Small size" theme="light" level={4} />
105
- <DxcTag label="Small" size="small" />
101
+ <DxcTag label="Small" size="small" icon={icon} />
106
102
  </ExampleContainer>
107
103
  <ExampleContainer>
108
104
  <Title title="Medium size" theme="light" level={4} />
109
- <DxcTag label="Medium size medium s" size="medium" />
105
+ <DxcTag label="Medium size medium s" size="medium" icon={icon} />
110
106
  </ExampleContainer>
111
107
  <ExampleContainer>
112
108
  <Title title="Medium size with ellipsis" theme="light" level={4} />
113
- <DxcTag label="Medium size medium si medium" size="medium" />
109
+ <DxcTag label="Medium size medium si medium" size="medium" icon={icon} />
114
110
  </ExampleContainer>
115
111
  <ExampleContainer>
116
112
  <Title title="Large size" theme="light" level={4} />
117
- <DxcTag label="Large size large size large size large size large size" size="large" />
113
+ <DxcTag label="Large size large size large size large size large size" size="large" icon={icon} />
118
114
  </ExampleContainer>
119
115
  <ExampleContainer>
120
116
  <Title title="Large size with ellipsis" theme="light" level={4} />
121
- <DxcTag label="Large size large size large size large size large size large size" size="large" />
117
+ <DxcTag label="Large size large size large size large size large size large size" size="large" icon={icon} />
122
118
  </ExampleContainer>
123
119
  <ExampleContainer>
124
120
  <Title title="FillParent size" theme="light" level={4} />
125
- <DxcTag label="FillParent" size="fillParent" />
121
+ <DxcTag label="FillParent" size="fillParent" icon={icon} />
126
122
  </ExampleContainer>
127
123
  <ExampleContainer>
128
124
  <Title title="FitContent size" theme="light" level={4} />
129
- <DxcTag label="FitContent" size="fitContent" />
125
+ <DxcTag label="FitContent" size="fitContent" icon={icon} />
130
126
  </ExampleContainer>
127
+ <hr />
131
128
  </>
132
129
  );
133
130
 
134
131
  const LinkTag = () => (
135
- <ExampleContainer>
132
+ <ExampleContainer expanded>
136
133
  <Title title="Hover link tag" theme="light" level={4} />
137
134
  <DxcTag label="Tag" icon={icon} linkHref="https://www.dxc.com" />
138
135
  </ExampleContainer>
@@ -0,0 +1,60 @@
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 _Tag = _interopRequireDefault(require("./Tag"));
10
+
11
+ describe("Tag component tests", function () {
12
+ test("Tag renders with correct label", function () {
13
+ var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tag["default"], {
14
+ label: "tag-test"
15
+ })),
16
+ getByText = _render.getByText;
17
+
18
+ expect(getByText("tag-test")).toBeTruthy();
19
+ });
20
+ test("Tag renders with correct label before", function () {
21
+ var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tag["default"], {
22
+ label: "tag-test",
23
+ labelPosition: "before"
24
+ })),
25
+ getByText = _render2.getByText;
26
+
27
+ expect(getByText("tag-test")).toBeTruthy();
28
+ });
29
+ test("Tag renders with correct icon", function () {
30
+ var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tag["default"], {
31
+ label: "tag-test",
32
+ icon: "/test-icon.jpg"
33
+ })),
34
+ getByRole = _render3.getByRole;
35
+
36
+ expect(getByRole("img").getAttribute("src")).toBe("/test-icon.jpg");
37
+ });
38
+ test("Tag renders with link href", function () {
39
+ var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tag["default"], {
40
+ label: "tag-test",
41
+ linkHref: "/test/page"
42
+ })),
43
+ getByRole = _render4.getByRole;
44
+
45
+ expect(getByRole("link").getAttribute("href")).toBe("/test/page");
46
+ });
47
+ test("Call correct function on click", function () {
48
+ var onClick = jest.fn();
49
+
50
+ var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tag["default"], {
51
+ label: "tag-test",
52
+ onClick: onClick
53
+ })),
54
+ getByText = _render5.getByText;
55
+
56
+ _react2.fireEvent.click(getByText("tag-test"));
57
+
58
+ expect(onClick).toHaveBeenCalled();
59
+ });
60
+ });
package/tag/types.d.ts CHANGED
@@ -6,20 +6,8 @@ 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>>;
10
- declare type Props = {
11
- /**
12
- * Element used as the icon that will be placed next to the label.
13
- */
14
- icon?: SVG;
15
- /**
16
- * @deprecated URL of the icon.
17
- */
18
- iconSrc?: string;
19
- /**
20
- * Text to be placed next inside the tag.
21
- */
22
- label?: string;
9
+ declare type SVG = React.SVGProps<SVGSVGElement>;
10
+ declare type TagCommonProps = {
23
11
  /**
24
12
  * If defined, the tag will be displayed as an anchor, using this prop as "href".
25
13
  * Component will show some visual feedback on hover.
@@ -57,4 +45,25 @@ declare type Props = {
57
45
  */
58
46
  tabIndex?: number;
59
47
  };
48
+ declare type TagLabelProps = TagCommonProps & {
49
+ /**
50
+ * Element or path used as the icon that will be placed next to the label.
51
+ */
52
+ icon?: string | SVG;
53
+ /**
54
+ * Text to be placed next inside the tag.
55
+ */
56
+ label: string;
57
+ };
58
+ declare type TagIconProps = TagCommonProps & {
59
+ /**
60
+ * Element or path used as the icon that will be placed next to the label.
61
+ */
62
+ icon: string | SVG;
63
+ /**
64
+ * Text to be placed next inside the tag.
65
+ */
66
+ label?: string;
67
+ };
68
+ declare type Props = TagLabelProps | TagIconProps;
60
69
  export default Props;
package/text/Text.js CHANGED
@@ -24,7 +24,7 @@ function Text(_ref) {
24
24
  }, children);
25
25
  }
26
26
 
27
- var StyledText = _styledComponents["default"].span(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n margin: 0px;\n font-family: Open Sans, sans-serif;\n"])));
27
+ var StyledText = _styledComponents["default"].span(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n margin: 0px;\n font-family: Open Sans, sans-serif;\n line-height: 1.5em;\n"])));
28
28
 
29
29
  var _default = Text;
30
30
  exports["default"] = _default;
@@ -135,6 +135,8 @@ var DxcTextInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref
135
135
  var label = _ref.label,
136
136
  _ref$name = _ref.name,
137
137
  name = _ref$name === void 0 ? "" : _ref$name,
138
+ _ref$defaultValue = _ref.defaultValue,
139
+ defaultValue = _ref$defaultValue === void 0 ? "" : _ref$defaultValue,
138
140
  value = _ref.value,
139
141
  helperText = _ref.helperText,
140
142
  _ref$placeholder = _ref.placeholder,
@@ -169,7 +171,7 @@ var DxcTextInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref
169
171
  _useState2 = (0, _slicedToArray2["default"])(_useState, 1),
170
172
  inputId = _useState2[0];
171
173
 
172
- var _useState3 = (0, _react.useState)(""),
174
+ var _useState3 = (0, _react.useState)(defaultValue),
173
175
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
174
176
  innerValue = _useState4[0],
175
177
  setInnerValue = _useState4[1];
@@ -205,7 +207,7 @@ var DxcTextInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref
205
207
  var colorsTheme = (0, _useTheme["default"])();
206
208
  var backgroundType = (0, _react.useContext)(_BackgroundColorContext["default"]);
207
209
  var autosuggestId = "".concat(inputId, "-listBox");
208
- var errorId = "error-message-".concat(inputId);
210
+ var errorId = "error-".concat(inputId);
209
211
  var numberInputContext = (0, _react.useContext)(_NumberInputContext["default"]);
210
212
  var lastOptionIndex = (0, _react.useMemo)(function () {
211
213
  return getLastOptionIndex(filteredSuggestions);
@@ -266,8 +268,7 @@ var DxcTextInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref
266
268
  value: changedValue,
267
269
  error: getNumberErrorMessage(newValue)
268
270
  });else onChange === null || onChange === void 0 ? void 0 : onChange({
269
- value: changedValue,
270
- error: null
271
+ value: changedValue
271
272
  });
272
273
  };
273
274
 
@@ -300,8 +301,7 @@ var DxcTextInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref
300
301
  value: event.target.value,
301
302
  error: getNumberErrorMessage(event.target.value)
302
303
  });else onBlur === null || onBlur === void 0 ? void 0 : onBlur({
303
- value: event.target.value,
304
- error: null
304
+ value: event.target.value
305
305
  });
306
306
  };
307
307
 
@@ -539,16 +539,19 @@ var DxcTextInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref
539
539
  role: isTextInputType() && hasSuggestions() ? "combobox" : "textbox",
540
540
  "aria-autocomplete": isTextInputType() && hasSuggestions() ? "list" : undefined,
541
541
  "aria-controls": isTextInputType() && hasSuggestions() ? autosuggestId : undefined,
542
+ "aria-disabled": disabled,
542
543
  "aria-expanded": isTextInputType() && hasSuggestions() ? isOpen ? "true" : "false" : undefined,
543
544
  "aria-activedescendant": isTextInputType() && hasSuggestions() && isOpen && visualFocusedSuggIndex !== -1 ? "suggestion-".concat(visualFocusedSuggIndex) : undefined,
544
545
  "aria-invalid": error ? "true" : "false",
545
- "aria-describedby": error ? errorId : undefined,
546
+ "aria-errormessage": error ? errorId : undefined,
546
547
  "aria-required": optional ? "false" : "true"
547
548
  }), !disabled && error && /*#__PURE__*/_react["default"].createElement(ErrorIcon, {
548
549
  backgroundType: backgroundType,
549
550
  "aria-label": "Error"
550
551
  }, textInputIcons.error), !disabled && clearable && (value !== null && value !== void 0 ? value : innerValue).length > 0 && /*#__PURE__*/_react["default"].createElement(Action, {
551
- onClick: handleClearActionOnClick,
552
+ onClick: function onClick() {
553
+ return handleClearActionOnClick();
554
+ },
552
555
  onMouseDown: function onMouseDown(event) {
553
556
  event.stopPropagation();
554
557
  },
@@ -559,7 +562,9 @@ var DxcTextInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref
559
562
  }, textInputIcons.clear), (numberInputContext === null || numberInputContext === void 0 ? void 0 : numberInputContext.typeNumber) === "number" ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(Action, {
560
563
  ref: actionRef,
561
564
  disabled: disabled,
562
- onClick: handleDecrementActionOnClick,
565
+ onClick: function onClick() {
566
+ return handleDecrementActionOnClick();
567
+ },
563
568
  onMouseDown: function onMouseDown(event) {
564
569
  event.stopPropagation();
565
570
  },
@@ -570,7 +575,9 @@ var DxcTextInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref
570
575
  }, textInputIcons.decrement), /*#__PURE__*/_react["default"].createElement(Action, {
571
576
  ref: actionRef,
572
577
  disabled: disabled,
573
- onClick: handleIncrementActionOnClick,
578
+ onClick: function onClick() {
579
+ return handleIncrementActionOnClick();
580
+ },
574
581
  onMouseDown: function onMouseDown(event) {
575
582
  event.stopPropagation();
576
583
  },
@@ -581,7 +588,9 @@ var DxcTextInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref
581
588
  }, textInputIcons.increment)) : action && /*#__PURE__*/_react["default"].createElement(Action, {
582
589
  ref: actionRef,
583
590
  disabled: disabled,
584
- onClick: action.onClick,
591
+ onClick: function onClick() {
592
+ return action.onClick();
593
+ },
585
594
  onMouseDown: function onMouseDown(event) {
586
595
  event.stopPropagation();
587
596
  },
@@ -613,7 +622,8 @@ var DxcTextInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref
613
622
  backgroundType: backgroundType
614
623
  }, textInputIcons.error), "Error fetching data"))), !disabled && typeof error === "string" && /*#__PURE__*/_react["default"].createElement(Error, {
615
624
  id: errorId,
616
- backgroundType: backgroundType
625
+ backgroundType: backgroundType,
626
+ "aria-live": error ? "assertive" : "off"
617
627
  }, error)));
618
628
  });
619
629