@dxc-technology/halstack-react 0.0.0-bd364ae → 0.0.0-be93a22

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 (243) hide show
  1. package/BackgroundColorContext.d.ts +2 -2
  2. package/BackgroundColorContext.js +1 -1
  3. package/HalstackContext.d.ts +1329 -5
  4. package/HalstackContext.js +117 -77
  5. package/accordion/Accordion.js +118 -110
  6. package/accordion/Accordion.stories.tsx +104 -16
  7. package/accordion/Accordion.test.js +10 -11
  8. package/accordion/types.d.ts +2 -1
  9. package/accordion-group/AccordionGroup.d.ts +4 -3
  10. package/accordion-group/AccordionGroup.js +25 -65
  11. package/accordion-group/AccordionGroup.stories.tsx +27 -1
  12. package/accordion-group/AccordionGroup.test.js +21 -46
  13. package/accordion-group/AccordionGroupAccordion.d.ts +4 -0
  14. package/accordion-group/AccordionGroupAccordion.js +43 -0
  15. package/accordion-group/types.d.ts +8 -1
  16. package/alert/Alert.js +5 -9
  17. package/alert/Alert.stories.tsx +28 -0
  18. package/alert/Alert.test.js +1 -1
  19. package/bleed/Bleed.stories.tsx +64 -63
  20. package/box/Box.js +4 -6
  21. package/box/Box.stories.tsx +15 -0
  22. package/box/Box.test.js +1 -1
  23. package/box/types.d.ts +1 -0
  24. package/bulleted-list/BulletedList.d.ts +7 -0
  25. package/bulleted-list/BulletedList.js +125 -0
  26. package/bulleted-list/BulletedList.stories.tsx +206 -0
  27. package/bulleted-list/types.d.ts +38 -0
  28. package/button/Button.js +52 -73
  29. package/button/Button.stories.tsx +159 -8
  30. package/button/Button.test.js +1 -1
  31. package/button/types.d.ts +5 -5
  32. package/card/Card.js +12 -13
  33. package/card/Card.stories.tsx +12 -13
  34. package/card/Card.test.js +1 -1
  35. package/card/types.d.ts +1 -0
  36. package/checkbox/Checkbox.d.ts +2 -2
  37. package/checkbox/Checkbox.js +94 -101
  38. package/checkbox/Checkbox.stories.tsx +131 -59
  39. package/checkbox/Checkbox.test.js +94 -17
  40. package/checkbox/types.d.ts +4 -0
  41. package/chip/Chip.js +28 -49
  42. package/chip/Chip.stories.tsx +121 -26
  43. package/chip/Chip.test.js +3 -5
  44. package/chip/types.d.ts +1 -1
  45. package/common/OpenSans.css +68 -80
  46. package/common/coreTokens.d.ts +146 -0
  47. package/common/coreTokens.js +167 -0
  48. package/common/utils.d.ts +1 -0
  49. package/common/utils.js +4 -4
  50. package/common/variables.d.ts +1482 -0
  51. package/common/variables.js +1009 -1118
  52. package/date-input/Calendar.d.ts +4 -0
  53. package/date-input/Calendar.js +258 -0
  54. package/date-input/DateInput.js +134 -237
  55. package/date-input/DateInput.stories.tsx +199 -33
  56. package/date-input/DateInput.test.js +494 -138
  57. package/date-input/DatePicker.d.ts +4 -0
  58. package/date-input/DatePicker.js +146 -0
  59. package/date-input/Icons.d.ts +6 -0
  60. package/date-input/Icons.js +75 -0
  61. package/date-input/YearPicker.d.ts +4 -0
  62. package/date-input/YearPicker.js +126 -0
  63. package/date-input/types.d.ts +51 -0
  64. package/dialog/Dialog.js +80 -69
  65. package/dialog/Dialog.stories.tsx +230 -123
  66. package/dialog/Dialog.test.js +334 -5
  67. package/dialog/types.d.ts +1 -0
  68. package/dropdown/Dropdown.d.ts +1 -1
  69. package/dropdown/Dropdown.js +246 -249
  70. package/dropdown/Dropdown.stories.tsx +245 -56
  71. package/dropdown/Dropdown.test.js +507 -110
  72. package/dropdown/DropdownMenu.d.ts +4 -0
  73. package/dropdown/DropdownMenu.js +74 -0
  74. package/dropdown/DropdownMenuItem.d.ts +4 -0
  75. package/dropdown/DropdownMenuItem.js +79 -0
  76. package/dropdown/types.d.ts +23 -3
  77. package/file-input/FileInput.d.ts +2 -2
  78. package/file-input/FileInput.js +174 -220
  79. package/file-input/FileInput.stories.tsx +122 -11
  80. package/file-input/FileInput.test.js +14 -14
  81. package/file-input/FileItem.d.ts +4 -14
  82. package/file-input/FileItem.js +39 -63
  83. package/file-input/types.d.ts +17 -0
  84. package/flex/Flex.d.ts +4 -0
  85. package/flex/Flex.js +71 -0
  86. package/flex/Flex.stories.tsx +112 -0
  87. package/flex/types.d.ts +97 -0
  88. package/footer/Footer.js +6 -8
  89. package/footer/Footer.stories.tsx +99 -1
  90. package/footer/Footer.test.js +14 -26
  91. package/footer/Icons.js +1 -1
  92. package/footer/types.d.ts +2 -1
  93. package/grid/Grid.d.ts +7 -0
  94. package/grid/Grid.js +91 -0
  95. package/grid/Grid.stories.tsx +219 -0
  96. package/grid/types.d.ts +115 -0
  97. package/header/Header.d.ts +3 -2
  98. package/header/Header.js +89 -89
  99. package/header/Header.stories.tsx +152 -9
  100. package/header/Header.test.js +2 -2
  101. package/header/Icons.js +2 -2
  102. package/header/types.d.ts +1 -0
  103. package/heading/Heading.js +1 -1
  104. package/heading/Heading.test.js +1 -1
  105. package/inset/Inset.stories.tsx +5 -4
  106. package/layout/ApplicationLayout.d.ts +15 -6
  107. package/layout/ApplicationLayout.js +38 -66
  108. package/layout/ApplicationLayout.stories.tsx +80 -44
  109. package/layout/types.d.ts +18 -29
  110. package/link/Link.js +4 -4
  111. package/link/Link.stories.tsx +73 -6
  112. package/link/Link.test.js +2 -4
  113. package/link/types.d.ts +3 -3
  114. package/main.d.ts +7 -9
  115. package/main.js +33 -49
  116. package/{tabs-nav → nav-tabs}/NavTabs.js +6 -6
  117. package/{tabs-nav → nav-tabs}/NavTabs.stories.tsx +96 -6
  118. package/{tabs-nav → nav-tabs}/NavTabs.test.js +1 -1
  119. package/{tabs-nav → nav-tabs}/Tab.js +40 -22
  120. package/{tabs-nav → nav-tabs}/types.d.ts +1 -1
  121. package/number-input/NumberInput.test.js +44 -8
  122. package/package.json +17 -21
  123. package/paginator/Icons.d.ts +5 -0
  124. package/paginator/Icons.js +16 -28
  125. package/paginator/Paginator.js +8 -16
  126. package/paginator/Paginator.stories.tsx +24 -0
  127. package/paginator/Paginator.test.js +91 -39
  128. package/paragraph/Paragraph.d.ts +5 -0
  129. package/paragraph/Paragraph.js +38 -0
  130. package/paragraph/Paragraph.stories.tsx +44 -0
  131. package/password-input/PasswordInput.test.js +14 -13
  132. package/progress-bar/ProgressBar.js +60 -54
  133. package/progress-bar/ProgressBar.stories.jsx +38 -3
  134. package/progress-bar/ProgressBar.test.js +68 -23
  135. package/quick-nav/QuickNav.js +23 -18
  136. package/quick-nav/QuickNav.stories.tsx +145 -26
  137. package/radio-group/Radio.d.ts +1 -1
  138. package/radio-group/Radio.js +46 -31
  139. package/radio-group/RadioGroup.js +31 -32
  140. package/radio-group/RadioGroup.stories.tsx +132 -18
  141. package/radio-group/RadioGroup.test.js +124 -97
  142. package/radio-group/types.d.ts +2 -2
  143. package/resultsetTable/Icons.d.ts +7 -0
  144. package/resultsetTable/Icons.js +51 -0
  145. package/resultsetTable/ResultsetTable.js +49 -108
  146. package/resultsetTable/ResultsetTable.stories.tsx +50 -25
  147. package/resultsetTable/ResultsetTable.test.js +61 -42
  148. package/resultsetTable/types.d.ts +1 -1
  149. package/select/Listbox.d.ts +1 -1
  150. package/select/Listbox.js +33 -16
  151. package/select/Option.js +11 -24
  152. package/select/Select.js +92 -71
  153. package/select/Select.stories.tsx +513 -136
  154. package/select/Select.test.js +413 -305
  155. package/select/types.d.ts +3 -6
  156. package/sidenav/Icons.d.ts +7 -0
  157. package/sidenav/Icons.js +51 -0
  158. package/sidenav/Sidenav.d.ts +6 -5
  159. package/sidenav/Sidenav.js +139 -48
  160. package/sidenav/Sidenav.stories.tsx +251 -151
  161. package/sidenav/Sidenav.test.js +25 -37
  162. package/sidenav/types.d.ts +52 -26
  163. package/slider/Slider.d.ts +2 -2
  164. package/slider/Slider.js +121 -97
  165. package/slider/Slider.stories.tsx +64 -1
  166. package/slider/Slider.test.js +122 -22
  167. package/slider/types.d.ts +4 -0
  168. package/spinner/Spinner.js +17 -23
  169. package/spinner/Spinner.stories.jsx +53 -27
  170. package/spinner/Spinner.test.js +1 -1
  171. package/switch/Switch.d.ts +2 -2
  172. package/switch/Switch.js +137 -70
  173. package/switch/Switch.stories.tsx +41 -30
  174. package/switch/Switch.test.js +145 -18
  175. package/switch/types.d.ts +4 -0
  176. package/table/Table.js +3 -3
  177. package/table/Table.stories.jsx +80 -1
  178. package/table/Table.test.js +2 -2
  179. package/tabs/Tab.d.ts +4 -0
  180. package/tabs/Tab.js +132 -0
  181. package/tabs/Tabs.js +358 -108
  182. package/tabs/Tabs.stories.tsx +119 -5
  183. package/tabs/Tabs.test.js +220 -10
  184. package/tabs/types.d.ts +13 -3
  185. package/tag/Tag.js +8 -10
  186. package/tag/Tag.stories.tsx +14 -1
  187. package/tag/Tag.test.js +1 -1
  188. package/tag/types.d.ts +1 -1
  189. package/text-input/Icons.d.ts +8 -0
  190. package/text-input/Icons.js +60 -0
  191. package/text-input/Suggestion.js +40 -11
  192. package/text-input/Suggestions.d.ts +4 -0
  193. package/text-input/Suggestions.js +134 -0
  194. package/text-input/TextInput.js +199 -296
  195. package/text-input/TextInput.stories.tsx +280 -185
  196. package/text-input/TextInput.test.js +736 -725
  197. package/text-input/types.d.ts +22 -3
  198. package/textarea/Textarea.js +3 -4
  199. package/textarea/Textarea.stories.jsx +60 -1
  200. package/textarea/Textarea.test.js +2 -4
  201. package/toggle-group/ToggleGroup.d.ts +2 -2
  202. package/toggle-group/ToggleGroup.js +7 -4
  203. package/toggle-group/ToggleGroup.stories.tsx +42 -0
  204. package/toggle-group/ToggleGroup.test.js +1 -1
  205. package/toggle-group/types.d.ts +2 -2
  206. package/typography/Typography.d.ts +4 -0
  207. package/typography/Typography.js +32 -0
  208. package/typography/Typography.stories.tsx +198 -0
  209. package/typography/types.d.ts +18 -0
  210. package/typography/types.js +5 -0
  211. package/useTheme.d.ts +1234 -1
  212. package/useTheme.js +1 -1
  213. package/useTranslatedLabels.d.ts +84 -1
  214. package/utils/BaseTypography.d.ts +21 -0
  215. package/utils/BaseTypography.js +108 -0
  216. package/utils/FocusLock.d.ts +13 -0
  217. package/utils/FocusLock.js +138 -0
  218. package/wizard/Wizard.js +10 -17
  219. package/wizard/Wizard.stories.tsx +40 -1
  220. package/wizard/Wizard.test.js +1 -1
  221. package/wizard/types.d.ts +3 -3
  222. package/common/RequiredComponent.js +0 -32
  223. package/list/List.d.ts +0 -4
  224. package/list/List.js +0 -47
  225. package/list/List.stories.tsx +0 -95
  226. package/list/types.d.ts +0 -7
  227. package/row/Row.d.ts +0 -3
  228. package/row/Row.js +0 -127
  229. package/row/Row.stories.tsx +0 -237
  230. package/row/types.d.ts +0 -28
  231. package/stack/Stack.d.ts +0 -3
  232. package/stack/Stack.js +0 -97
  233. package/stack/Stack.stories.tsx +0 -164
  234. package/stack/types.d.ts +0 -24
  235. package/text/Text.d.ts +0 -7
  236. package/text/Text.js +0 -30
  237. package/text/Text.stories.tsx +0 -19
  238. /package/{list → bulleted-list}/types.js +0 -0
  239. /package/{row → flex}/types.js +0 -0
  240. /package/{stack → grid}/types.js +0 -0
  241. /package/{tabs-nav → nav-tabs}/NavTabs.d.ts +0 -0
  242. /package/{tabs-nav → nav-tabs}/Tab.d.ts +0 -0
  243. /package/{tabs-nav → nav-tabs}/types.js +0 -0
@@ -23,7 +23,11 @@ var _Badge = _interopRequireDefault(require("../badge/Badge"));
23
23
 
24
24
  var _NavTabs = require("./NavTabs");
25
25
 
26
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6;
26
+ var _BaseTypography = _interopRequireDefault(require("../utils/BaseTypography"));
27
+
28
+ var _useTheme = _interopRequireDefault(require("../useTheme"));
29
+
30
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
27
31
 
28
32
  var _excluded = ["href", "active", "icon", "disabled", "notificationNumber", "children"];
29
33
 
@@ -50,6 +54,7 @@ var DxcTab = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, _ref2) {
50
54
  hasIcons = _useContext.hasIcons,
51
55
  focusedLabel = _useContext.focusedLabel;
52
56
 
57
+ var colorsTheme = (0, _useTheme["default"])();
53
58
  (0, _react.useLayoutEffect)(function () {
54
59
  var _tabRef$current;
55
60
 
@@ -59,11 +64,9 @@ var DxcTab = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, _ref2) {
59
64
  var handleOnKeyDown = function handleOnKeyDown(event) {
60
65
  var _tabRef$current2;
61
66
 
62
- switch (event.keyCode) {
63
- case 13: // enter
64
-
65
- case 32:
66
- // space
67
+ switch (event.key) {
68
+ case " ":
69
+ case "Enter":
67
70
  tabRef === null || tabRef === void 0 ? void 0 : (_tabRef$current2 = tabRef.current) === null || _tabRef$current2 === void 0 ? void 0 : _tabRef$current2.click();
68
71
  event.preventDefault();
69
72
  break;
@@ -73,10 +76,12 @@ var DxcTab = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, _ref2) {
73
76
  return /*#__PURE__*/_react["default"].createElement(TabContainer, {
74
77
  active: active,
75
78
  role: "tab",
76
- "aria-selected": active
79
+ "aria-selected": active,
80
+ "aria-disabled": disabled
77
81
  }, /*#__PURE__*/_react["default"].createElement(Tab, (0, _extends2["default"])({
78
82
  href: !disabled && href ? href : undefined,
79
83
  disabled: disabled,
84
+ active: active,
80
85
  iconPosition: iconPosition,
81
86
  hasIcon: hasIcons,
82
87
  ref: function ref(anchorRef) {
@@ -92,41 +97,54 @@ var DxcTab = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, _ref2) {
92
97
  tabIndex: active ? tabIndex : -1
93
98
  }, otherProps), icon && /*#__PURE__*/_react["default"].createElement(TabIconContainer, {
94
99
  iconPosition: iconPosition
95
- }, typeof icon === "string" ? /*#__PURE__*/_react["default"].createElement(TabIcon, {
100
+ }, typeof icon === "string" ? /*#__PURE__*/_react["default"].createElement("img", {
96
101
  src: icon
97
- }) : icon), /*#__PURE__*/_react["default"].createElement(LabelContainer, null, children, notificationNumber && /*#__PURE__*/_react["default"].createElement(BadgeContainer, null, /*#__PURE__*/_react["default"].createElement(_Badge["default"], {
98
- notificationText: notificationNumber > 99 ? "+99" : notificationNumber,
102
+ }) : icon), /*#__PURE__*/_react["default"].createElement(LabelContainer, null, /*#__PURE__*/_react["default"].createElement(_BaseTypography["default"], {
103
+ color: disabled ? colorsTheme.navTabs.disabledFontColor : active ? colorsTheme.navTabs.selectedFontColor : colorsTheme.navTabs.unselectedFontColor,
104
+ fontFamily: colorsTheme.navTabs.fontFamily,
105
+ fontSize: colorsTheme.navTabs.fontSize,
106
+ fontStyle: colorsTheme.navTabs.fontStyle,
107
+ fontWeight: colorsTheme.navTabs.fontWeight,
108
+ textAlign: "center",
109
+ letterSpacing: "0.025em",
110
+ lineHeight: "1.715em"
111
+ }, children), notificationNumber && /*#__PURE__*/_react["default"].createElement(BadgeContainer, null, /*#__PURE__*/_react["default"].createElement(_Badge["default"], {
112
+ notificationText: typeof notificationNumber === "number" && notificationNumber > 99 ? "+99" : notificationNumber,
99
113
  disabled: disabled
100
114
  })))));
101
115
  });
102
116
 
103
- var TabContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n border-bottom: 2px solid ", ";\n"])), function (props) {
104
- return props.active ? "#6f2c91" : "#0000001a";
117
+ var TabContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n border-bottom: 2px solid ", ";\n svg {\n color: ", ";\n }\n\n &[aria-selected=\"true\"] {\n svg {\n color: ", ";\n }\n }\n\n &[aria-disabled=\"true\"] {\n svg {\n color: ", ";\n }\n }\n"])), function (props) {
118
+ return props.active ? props.theme.selectedUnderlineColor : props.theme.dividerColor;
119
+ }, function (props) {
120
+ return props.theme.unselectedIconColor;
121
+ }, function (props) {
122
+ return props.theme.selectedIconColor;
123
+ }, function (props) {
124
+ return props.theme.disabledIconColor;
105
125
  });
106
126
 
107
- var Tab = _styledComponents["default"].a(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: ", ";\n justify-content: center;\n align-items: center;\n\n font-family: \"Open Sans\";\n font-style: normal;\n font-weight: 400;\n font-size: 1rem;\n color: ", ";\n text-decoration-color: transparent;\n cursor: ", ";\n\n height: ", ";\n min-width: 164px;\n margin: 0.5rem;\n padding: 0.375rem;\n\n border-radius: 4px;\n\n ", "\n"])), function (props) {
127
+ var Tab = _styledComponents["default"].a(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: ", ";\n justify-content: center;\n align-items: center;\n height: ", ";\n min-width: 164px;\n margin: 0.5rem;\n padding: 0.375rem;\n border-radius: 4px;\n background: ", ";\n text-decoration-color: transparent;\n cursor: ", ";\n\n ", "\n"])), function (props) {
108
128
  return props.hasIcon && props.iconPosition === "top" ? "column" : "row";
109
129
  }, function (props) {
110
- return props.disabled ? "#0000004D" : "#333333";
130
+ return props.hasIcon && props.iconPosition === "top" ? "66px" : "32px";
111
131
  }, function (props) {
112
- return props.disabled ? "not-allowed" : "pointer";
132
+ return props.active ? props.theme.selectedBackgroundColor : props.theme.unselectedBackgroundColor;
113
133
  }, function (props) {
114
- return props.hasIcon && props.iconPosition === "top" ? "66px" : "32px";
134
+ return props.disabled ? "not-allowed" : "pointer";
115
135
  }, function (props) {
116
- return !props.disabled && ":hover {\n background: #0000000D;\n }\n\n :focus {\n outline: 2px solid #33aaff};\n }\n\n :active {\n background: #0000001A;\n outline: 2px solid #33aaff};\n }";
136
+ return !props.disabled && "\n :hover {\n background: ".concat(props.theme.hoverBackgroundColor, ";\n }\n :focus {\n outline: 2px solid ").concat(props.theme.focusOutline, ";\n }\n :active {\n background: ").concat(props.theme.pressedBackgroundColor, ";\n outline: 2px solid #33aaff};\n }\n ");
117
137
  });
118
138
 
119
- var TabIcon = _styledComponents["default"].img(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])([""])));
120
-
121
- var TabIconContainer = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n max-height: 24px;\n max-width: 24px;\n margin-bottom: ", ";\n margin-right: ", ";\n overflow: hidden;\n display: flex;\n align-items: center;\n img,\n svg {\n height: 100%;\n width: 100%;\n }\n"])), function (props) {
139
+ var TabIconContainer = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n margin-bottom: ", ";\n margin-right: ", ";\n\n img,\n svg {\n height: 24px;\n width: 24px;\n }\n"])), function (props) {
122
140
  return props.iconPosition === "top" && "0.375rem";
123
141
  }, function (props) {
124
142
  return props.iconPosition === "left" && "0.625rem";
125
143
  });
126
144
 
127
- var LabelContainer = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n"])));
145
+ var LabelContainer = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n"])));
128
146
 
129
- var BadgeContainer = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n margin-left: 0.5rem;\n"])));
147
+ var BadgeContainer = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n margin-left: 0.5rem;\n"])));
130
148
 
131
149
  var _default = DxcTab;
132
150
  exports["default"] = _default;
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- declare type SVG = React.SVGProps<SVGSVGElement>;
2
+ declare type SVG = React.ReactNode & React.SVGProps<SVGSVGElement>;
3
3
  export declare type TabProps = {
4
4
  /**
5
5
  * Whether the tab is active or not.
@@ -8,7 +8,7 @@ var _react2 = require("@testing-library/react");
8
8
 
9
9
  var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
10
10
 
11
- var _NumberInput = _interopRequireDefault(require("./NumberInput"));
11
+ var _NumberInput = _interopRequireDefault(require("./NumberInput.tsx"));
12
12
 
13
13
  describe("Number input component tests", function () {
14
14
  test("Number input renders with label", function () {
@@ -83,7 +83,7 @@ describe("Number input component tests", function () {
83
83
  })),
84
84
  getByRole = _render8.getByRole;
85
85
 
86
- var input = getByRole("textbox");
86
+ var input = getByRole("spinbutton");
87
87
 
88
88
  _userEvent["default"].type(input, "1");
89
89
 
@@ -366,12 +366,7 @@ describe("Number input component tests", function () {
366
366
  expect(number.value).toBe("10");
367
367
  });
368
368
  test("Increment and decrement the value with min, max and step", function () {
369
- var onBlur = jest.fn(function (_ref3) {
370
- var value = _ref3.value,
371
- error = _ref3.error;
372
- expect(value).toBe("1");
373
- expect(error).toBe("Value must be greater than or equal to 5.");
374
- });
369
+ var onBlur = jest.fn();
375
370
 
376
371
  var _render20 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_NumberInput["default"], {
377
372
  label: "Number input label",
@@ -389,6 +384,10 @@ describe("Number input component tests", function () {
389
384
 
390
385
  _react2.fireEvent.blur(number);
391
386
 
387
+ expect(onBlur).toHaveBeenCalledWith({
388
+ value: "1",
389
+ error: "Value must be greater than or equal to 5."
390
+ });
392
391
  var increment = getAllByRole("button")[1];
393
392
 
394
393
  _userEvent["default"].click(increment);
@@ -503,4 +502,41 @@ describe("Number input component tests", function () {
503
502
  var increment = getAllByRole("button")[1];
504
503
  expect(increment.getAttribute("aria-label")).toBe("Increment value");
505
504
  });
505
+ test("Number input submits correct values in a form", function () {
506
+ var handlerOnSubmit = jest.fn(function (e) {
507
+ e.preventDefault();
508
+ var formData = new FormData(e.target);
509
+ var formProps = Object.fromEntries(formData);
510
+ expect(formProps).toStrictEqual({
511
+ data: "0"
512
+ });
513
+ });
514
+
515
+ var _render23 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement("form", {
516
+ onSubmit: handlerOnSubmit
517
+ }, /*#__PURE__*/_react["default"].createElement(_NumberInput["default"], {
518
+ label: "Number input label",
519
+ name: "data"
520
+ }), /*#__PURE__*/_react["default"].createElement("button", {
521
+ type: "submit"
522
+ }, "Submit"))),
523
+ getByText = _render23.getByText,
524
+ getAllByRole = _render23.getAllByRole;
525
+
526
+ var less = getAllByRole("button")[0];
527
+ var more = getAllByRole("button")[1];
528
+ var submit = getByText("Submit");
529
+
530
+ _userEvent["default"].click(more);
531
+
532
+ expect(handlerOnSubmit).not.toHaveBeenCalled();
533
+
534
+ _userEvent["default"].click(less);
535
+
536
+ expect(handlerOnSubmit).not.toHaveBeenCalled();
537
+
538
+ _userEvent["default"].click(submit);
539
+
540
+ expect(handlerOnSubmit).toHaveBeenCalled();
541
+ });
506
542
  });
package/package.json CHANGED
@@ -1,40 +1,33 @@
1
1
  {
2
2
  "name": "@dxc-technology/halstack-react",
3
- "version": "0.0.0-bd364ae",
3
+ "version": "0.0.0-be93a22",
4
4
  "description": "DXC Halstack React components library",
5
5
  "repository": "dxc-technology/halstack-react",
6
- "homepage": "http://developer.dxc.com/tools/react",
6
+ "homepage": "https://developer.dxc.com/halstack",
7
7
  "license": "Apache-2.0",
8
8
  "author": {
9
9
  "name": "DXC Technology",
10
10
  "email": "DigitalInsurance@dxc.com",
11
- "url": "https://dxc.com"
11
+ "url": "https://developer.dxc.com"
12
12
  },
13
13
  "main": "./main.js",
14
14
  "types": "./main.d.ts",
15
15
  "peerDependencies": {
16
- "react": "^17.0.1",
17
- "react-dom": "^17.0.1",
16
+ "react": "^18.x",
17
+ "react-dom": "^18.x",
18
18
  "styled-components": "^5.0.1"
19
19
  },
20
20
  "dependencies": {
21
- "@date-io/dayjs": "^1.3.9",
22
- "@material-ui/core": "4.11.1",
23
- "@material-ui/icons": "4.4.3",
24
- "@material-ui/lab": "4.0.0-alpha.17",
25
- "@material-ui/pickers": "3.2.2",
26
- "@material-ui/styles": "4.0.2",
21
+ "@radix-ui/react-popover": "0.1.6",
27
22
  "@types/styled-components": "^5.1.24",
28
23
  "@types/uuid": "^8.3.4",
29
24
  "color": "^3.1.3",
30
25
  "dayjs": "^1.11.1",
31
- "prop-types": "^15.7.2",
32
- "rgb-hex": "^3.0.0",
33
26
  "slugify": "^1.6.5",
34
27
  "uuid": "^8.3.2"
35
28
  },
36
29
  "scripts": {
37
- "test": "jest",
30
+ "test": "jest --env=jsdom",
38
31
  "test:watch": "npm test -- --watch --coverage",
39
32
  "build": "babel src --extensions .js,.jsx,.ts,.tsx --out-dir ../dist --copy-files --verbose && node ../scripts/build/copy-package.js && tsc ",
40
33
  "build:watch": "babel src --watch --extensions .js,.jsx,.ts,.tsx --out-dir ../dist --copy-files --verbose",
@@ -55,9 +48,10 @@
55
48
  "@storybook/addon-links": "^6.4.9",
56
49
  "@storybook/react": "^6.4.9",
57
50
  "@storybook/testing-library": "0.0.7",
58
- "@testing-library/react": "^11.2.5",
59
- "@testing-library/user-event": "^12.6.3",
60
- "@types/react": "16.9.5",
51
+ "@testing-library/react": "^13.0.0",
52
+ "@testing-library/user-event": "^13.0.0",
53
+ "@types/color": "^3.0.3",
54
+ "@types/react": "^18.0.18",
61
55
  "babel-jest": "^24.8.0",
62
56
  "babel-loader": "^8.0.6",
63
57
  "chromatic": "^6.3.3",
@@ -71,9 +65,10 @@
71
65
  "eslint-plugin-react-hooks": "^4.2.0",
72
66
  "eslint-plugin-storybook": "^0.5.5",
73
67
  "identity-obj-proxy": "^3.0.0",
74
- "jest": "^25.5.4",
75
- "react": "^17.0.1",
76
- "react-dom": "^17.0.1",
68
+ "jest": "^29.2.2",
69
+ "jest-environment-jsdom": "^29.3.1",
70
+ "react": "^18.x",
71
+ "react-dom": "^18.x",
77
72
  "react-test-renderer": "^16.8.6",
78
73
  "storybook-addon-pseudo-states": "^1.0.0",
79
74
  "styled-components": "^5.0.1",
@@ -83,7 +78,8 @@
83
78
  "moduleNameMapper": {
84
79
  "\\.(css|less|scss|sass)$": "identity-obj-proxy",
85
80
  "\\.(svg)$": "<rootDir>/test/mocks/svgMock.js",
86
- "\\.(png)$": "<rootDir>/test/mocks/pngMock.js"
81
+ "\\.(png)$": "<rootDir>/test/mocks/pngMock.js",
82
+ "^uuid$": "uuid"
87
83
  }
88
84
  }
89
85
  }
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ export declare const firstIcon: JSX.Element;
3
+ export declare const previousIcon: JSX.Element;
4
+ export declare const nextIcon: JSX.Element;
5
+ export declare const lastIcon: JSX.Element;
@@ -11,56 +11,44 @@ var _react = _interopRequireDefault(require("react"));
11
11
 
12
12
  var firstIcon = /*#__PURE__*/_react["default"].createElement("svg", {
13
13
  xmlns: "http://www.w3.org/2000/svg",
14
- width: "12.41",
15
- height: "12",
16
- viewBox: "0 0 12.41 12"
14
+ height: "24",
15
+ width: "24",
16
+ fill: "currentColor"
17
17
  }, /*#__PURE__*/_react["default"].createElement("path", {
18
- id: "Path_2463",
19
- "data-name": "Path 2463",
20
- d: "M18.41,16.59,13.82,12l4.59-4.59L17,6l-6,6,6,6ZM6,6H8V18H6Z",
21
- transform: "translate(-6 -6)"
18
+ d: "M6 18V6h2v12Zm11 0-6-6 6-6 1.4 1.4-4.6 4.6 4.6 4.6Z"
22
19
  }));
23
20
 
24
21
  exports.firstIcon = firstIcon;
25
22
 
26
23
  var previousIcon = /*#__PURE__*/_react["default"].createElement("svg", {
27
24
  xmlns: "http://www.w3.org/2000/svg",
28
- width: "7.41",
29
- height: "12",
30
- viewBox: "0 0 7.41 12"
25
+ height: "24",
26
+ width: "24",
27
+ fill: "currentColor"
31
28
  }, /*#__PURE__*/_react["default"].createElement("path", {
32
- id: "Path_2459",
33
- "data-name": "Path 2459",
34
- d: "M15.41,7.41,14,6,8,12l6,6,1.41-1.41L10.83,12Z",
35
- transform: "translate(-8 -6)"
29
+ d: "m14 18-6-6 6-6 1.4 1.4-4.6 4.6 4.6 4.6Z"
36
30
  }));
37
31
 
38
32
  exports.previousIcon = previousIcon;
39
33
 
40
34
  var nextIcon = /*#__PURE__*/_react["default"].createElement("svg", {
41
35
  xmlns: "http://www.w3.org/2000/svg",
42
- width: "7.41",
43
- height: "12",
44
- viewBox: "0 0 7.41 12"
36
+ height: "24",
37
+ width: "24",
38
+ fill: "currentColor"
45
39
  }, /*#__PURE__*/_react["default"].createElement("path", {
46
- id: "Path_2461",
47
- "data-name": "Path 2461",
48
- d: "M10,6,8.59,7.41,13.17,12,8.59,16.59,10,18l6-6Z",
49
- transform: "translate(-8.59 -6)"
40
+ d: "M9.4 18 8 16.6l4.6-4.6L8 7.4 9.4 6l6 6Z"
50
41
  }));
51
42
 
52
43
  exports.nextIcon = nextIcon;
53
44
 
54
45
  var lastIcon = /*#__PURE__*/_react["default"].createElement("svg", {
55
46
  xmlns: "http://www.w3.org/2000/svg",
56
- width: "12.41",
57
- height: "12",
58
- viewBox: "0 0 12.41 12"
47
+ height: "24",
48
+ width: "24",
49
+ fill: "currentColor"
59
50
  }, /*#__PURE__*/_react["default"].createElement("path", {
60
- id: "Path_2465",
61
- "data-name": "Path 2465",
62
- d: "M5.59,7.41,10.18,12,5.59,16.59,7,18l6-6L7,6ZM16,6h2V18H16Z",
63
- transform: "translate(-5.59 -6)"
51
+ d: "m7 18-1.4-1.4 4.6-4.6-4.6-4.6L7 6l6 6Zm9 0V6h2v12Z"
64
52
  }));
65
53
 
66
54
  exports.lastIcon = lastIcon;
@@ -27,7 +27,7 @@ var _Icons = require("./Icons");
27
27
 
28
28
  var _BackgroundColorContext = require("../BackgroundColorContext");
29
29
 
30
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9;
30
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
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
 
@@ -46,7 +46,7 @@ var DxcPaginator = function DxcPaginator(_ref) {
46
46
  itemsPerPageFunction = _ref.itemsPerPageFunction,
47
47
  _ref$tabIndex = _ref.tabIndex,
48
48
  tabIndex = _ref$tabIndex === void 0 ? 0 : _ref$tabIndex;
49
- var totalPages = Math.ceil(totalItems / itemsPerPage);
49
+ var totalPages = itemsPerPage > 0 && Math.ceil(totalItems / itemsPerPage);
50
50
  var currentPageInternal = currentPage === -1 ? totalPages : currentPage;
51
51
  var minItemsPerPage = currentPageInternal === 1 || currentPageInternal === 0 ? currentPageInternal : (currentPageInternal - 1) * itemsPerPage + 1;
52
52
  var maxItemsPerPage = minItemsPerPage - 1 + itemsPerPage > totalItems ? totalItems : minItemsPerPage - 1 + itemsPerPage;
@@ -56,9 +56,7 @@ var DxcPaginator = function DxcPaginator(_ref) {
56
56
  theme: colorsTheme.paginator
57
57
  }, /*#__PURE__*/_react["default"].createElement(_BackgroundColorContext.BackgroundColorProvider, {
58
58
  color: colorsTheme.paginator.backgroundColor
59
- }, /*#__PURE__*/_react["default"].createElement(DxcPaginatorContainer, {
60
- disabled: currentPageInternal === 1
61
- }, /*#__PURE__*/_react["default"].createElement(LabelsContainer, null, itemsPerPageOptions && /*#__PURE__*/_react["default"].createElement(ItemsPageContainer, null, /*#__PURE__*/_react["default"].createElement(ItemsLabel, null, translatedLabels.paginator.itemsPerPageText), /*#__PURE__*/_react["default"].createElement(SelectContainer, null, /*#__PURE__*/_react["default"].createElement(_Select["default"], {
59
+ }, /*#__PURE__*/_react["default"].createElement(DxcPaginatorContainer, null, /*#__PURE__*/_react["default"].createElement(LabelsContainer, null, itemsPerPageOptions && /*#__PURE__*/_react["default"].createElement(ItemsPageContainer, null, /*#__PURE__*/_react["default"].createElement(ItemsLabel, null, translatedLabels.paginator.itemsPerPageText), /*#__PURE__*/_react["default"].createElement(SelectContainer, null, /*#__PURE__*/_react["default"].createElement(_Select["default"], {
62
60
  options: itemsPerPageOptions.map(function (num) {
63
61
  return {
64
62
  label: num.toString(),
@@ -72,7 +70,6 @@ var DxcPaginator = function DxcPaginator(_ref) {
72
70
  size: "fillParent",
73
71
  tabIndex: tabIndex
74
72
  }))), /*#__PURE__*/_react["default"].createElement(TotalItemsContainer, null, translatedLabels.paginator.minToMaxOfText(minItemsPerPage, maxItemsPerPage, totalItems)), onPageChange && /*#__PURE__*/_react["default"].createElement(_Button["default"], {
75
- size: "small",
76
73
  mode: "secondary",
77
74
  disabled: currentPageInternal === 1 || currentPageInternal === 0,
78
75
  icon: _Icons.firstIcon,
@@ -81,7 +78,6 @@ var DxcPaginator = function DxcPaginator(_ref) {
81
78
  onPageChange(1);
82
79
  }
83
80
  }), onPageChange && /*#__PURE__*/_react["default"].createElement(_Button["default"], {
84
- size: "small",
85
81
  mode: "secondary",
86
82
  disabled: currentPageInternal === 1 || currentPageInternal === 0,
87
83
  icon: _Icons.previousIcon,
@@ -89,7 +85,7 @@ var DxcPaginator = function DxcPaginator(_ref) {
89
85
  onClick: function onClick() {
90
86
  onPageChange(currentPage - 1);
91
87
  }
92
- }), showGoToPage && /*#__PURE__*/_react["default"].createElement(PageToSelectContainer, null, /*#__PURE__*/_react["default"].createElement(GoToLabel, null, translatedLabels.paginator.goToPageText, " "), /*#__PURE__*/_react["default"].createElement(SelectContainer, null, /*#__PURE__*/_react["default"].createElement(_Select["default"], {
88
+ }), showGoToPage ? /*#__PURE__*/_react["default"].createElement(PageToSelectContainer, null, /*#__PURE__*/_react["default"].createElement(GoToLabel, null, translatedLabels.paginator.goToPageText, " "), /*#__PURE__*/_react["default"].createElement(SelectContainer, null, /*#__PURE__*/_react["default"].createElement(_Select["default"], {
93
89
  options: Array.from(Array(totalPages), function (e, num) {
94
90
  return {
95
91
  label: (num + 1).toString(),
@@ -102,8 +98,7 @@ var DxcPaginator = function DxcPaginator(_ref) {
102
98
  value: currentPage.toString(),
103
99
  size: "fillParent",
104
100
  tabIndex: tabIndex
105
- }))) || /*#__PURE__*/_react["default"].createElement(TextContainer, null, translatedLabels.paginator.pageOfText(currentPageInternal, totalPages)), onPageChange && /*#__PURE__*/_react["default"].createElement(_Button["default"], {
106
- size: "small",
101
+ }))) : /*#__PURE__*/_react["default"].createElement("span", null, translatedLabels.paginator.pageOfText(currentPageInternal, totalPages)), onPageChange && /*#__PURE__*/_react["default"].createElement(_Button["default"], {
107
102
  mode: "secondary",
108
103
  disabled: currentPageInternal === totalPages,
109
104
  icon: _Icons.nextIcon,
@@ -112,7 +107,6 @@ var DxcPaginator = function DxcPaginator(_ref) {
112
107
  onPageChange(currentPage + 1);
113
108
  }
114
109
  }), onPageChange && /*#__PURE__*/_react["default"].createElement(_Button["default"], {
115
- size: "small",
116
110
  mode: "secondary",
117
111
  disabled: currentPageInternal === totalPages,
118
112
  icon: _Icons.lastIcon,
@@ -145,7 +139,7 @@ var DxcPaginatorContainer = _styledComponents["default"].div(_templateObject ||
145
139
 
146
140
  var SelectContainer = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n min-width: 5.25rem;\n"])));
147
141
 
148
- var ItemsPageContainer = _styledComponents["default"].span(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n margin-right: ", ";\n margin-left: ", ";\n\n label {\n height: 0px;\n }\n label + .MuiInput-formControl {\n margin-top: 0px;\n }\n"])), function (props) {
142
+ var ItemsPageContainer = _styledComponents["default"].span(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n margin-right: ", ";\n margin-left: ", ";\n"])), function (props) {
149
143
  return props.theme.itemsPerPageSelectorMarginRight;
150
144
  }, function (props) {
151
145
  return props.theme.itemsPerPageSelectorMarginLeft;
@@ -153,7 +147,7 @@ var ItemsPageContainer = _styledComponents["default"].span(_templateObject3 || (
153
147
 
154
148
  var ItemsLabel = _styledComponents["default"].span(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n margin-right: 0.5rem;\n"])));
155
149
 
156
- var GoToLabel = _styledComponents["default"].span(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n margin-right: 0.5rem;\n margin-left: 1rem;\n"])));
150
+ var GoToLabel = _styledComponents["default"].span(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n margin-right: 0.5rem;\n margin-left: 0.5rem;\n"])));
157
151
 
158
152
  var TotalItemsContainer = _styledComponents["default"].span(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n margin-right: ", ";\n margin-left: ", ";\n"])), function (props) {
159
153
  return props.theme.totalItemsContainerMarginRight;
@@ -163,9 +157,7 @@ var TotalItemsContainer = _styledComponents["default"].span(_templateObject6 ||
163
157
 
164
158
  var LabelsContainer = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n gap: 0.5rem;\n width: 100%;\n justify-content: flex-end;\n align-items: center;\n"])));
165
159
 
166
- var PageToSelectContainer = _styledComponents["default"].span(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n\n label {\n height: 0px;\n }\n label + .MuiInput-formControl {\n margin-top: 0px;\n }\n"])));
167
-
168
- var TextContainer = _styledComponents["default"].span(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])([""])));
160
+ var PageToSelectContainer = _styledComponents["default"].span(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n margin-right: 0.5rem;\n"])));
169
161
 
170
162
  var _default = DxcPaginator;
171
163
  exports["default"] = _default;
@@ -2,12 +2,20 @@ import React from "react";
2
2
  import DxcPaginator from "./Paginator";
3
3
  import Title from "../../.storybook/components/Title";
4
4
  import ExampleContainer from "../../.storybook/components/ExampleContainer";
5
+ import { HalstackProvider } from "../HalstackContext";
5
6
 
6
7
  export default {
7
8
  title: "Paginator",
8
9
  component: DxcPaginator,
9
10
  };
10
11
 
12
+ const opinionatedTheme = {
13
+ paginator: {
14
+ baseColor: "#f2f2f2",
15
+ fontColor: "#000000",
16
+ },
17
+ };
18
+
11
19
  export const Chromatic = () => (
12
20
  <>
13
21
  <ExampleContainer>
@@ -59,5 +67,21 @@ export const Chromatic = () => (
59
67
  showGoToPage
60
68
  />
61
69
  </ExampleContainer>
70
+ <Title title="Opinionated theme" theme="light" level={2} />
71
+ <ExampleContainer>
72
+ <HalstackProvider theme={opinionatedTheme}>
73
+ <ExampleContainer>
74
+ <Title title="Page change and items per page options" theme="light" level={4} />
75
+ <DxcPaginator
76
+ currentPage={1}
77
+ itemsPerPage={10}
78
+ totalItems={27}
79
+ onPageChange={() => {}}
80
+ itemsPerPageOptions={[5, 10, 15]}
81
+ showGoToPage
82
+ />
83
+ </ExampleContainer>
84
+ </HalstackProvider>
85
+ </ExampleContainer>
62
86
  </>
63
87
  );