@dxc-technology/halstack-react 8.0.0 → 9.0.1

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 (163) 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 +114 -73
  5. package/accordion/Accordion.js +13 -24
  6. package/accordion/Accordion.stories.tsx +102 -13
  7. package/accordion/Accordion.test.js +1 -1
  8. package/accordion/types.d.ts +3 -3
  9. package/accordion-group/AccordionGroup.js +2 -2
  10. package/accordion-group/AccordionGroup.test.js +1 -1
  11. package/accordion-group/types.d.ts +2 -2
  12. package/alert/Alert.js +3 -5
  13. package/alert/Alert.stories.tsx +28 -0
  14. package/alert/Alert.test.js +1 -1
  15. package/box/Box.js +3 -5
  16. package/box/Box.stories.tsx +15 -0
  17. package/box/Box.test.js +1 -1
  18. package/button/Button.js +13 -15
  19. package/button/Button.stories.tsx +150 -8
  20. package/button/Button.test.js +1 -1
  21. package/button/types.d.ts +3 -3
  22. package/card/Card.js +12 -13
  23. package/card/Card.stories.tsx +12 -13
  24. package/card/Card.test.js +1 -1
  25. package/checkbox/Checkbox.js +3 -3
  26. package/checkbox/Checkbox.stories.tsx +52 -0
  27. package/checkbox/Checkbox.test.js +1 -1
  28. package/checkbox/types.d.ts +2 -2
  29. package/chip/Chip.js +18 -26
  30. package/chip/Chip.stories.tsx +96 -9
  31. package/chip/Chip.test.js +3 -5
  32. package/common/utils.d.ts +1 -0
  33. package/common/utils.js +4 -4
  34. package/common/variables.d.ts +1625 -0
  35. package/common/variables.js +280 -288
  36. package/date-input/Calendar.d.ts +1 -1
  37. package/date-input/Calendar.js +43 -43
  38. package/date-input/DateInput.js +74 -32
  39. package/date-input/DateInput.stories.tsx +183 -30
  40. package/date-input/DateInput.test.js +120 -37
  41. package/date-input/DatePicker.js +38 -52
  42. package/date-input/Icons.d.ts +6 -0
  43. package/date-input/Icons.js +75 -0
  44. package/date-input/YearPicker.d.ts +1 -1
  45. package/date-input/YearPicker.js +23 -12
  46. package/date-input/types.d.ts +6 -8
  47. package/dialog/Dialog.js +61 -74
  48. package/dialog/Dialog.stories.tsx +211 -159
  49. package/dialog/Dialog.test.js +302 -3
  50. package/dialog/types.d.ts +2 -2
  51. package/dropdown/Dropdown.js +5 -8
  52. package/dropdown/Dropdown.stories.tsx +210 -84
  53. package/dropdown/Dropdown.test.js +3 -2
  54. package/dropdown/DropdownMenu.js +8 -18
  55. package/dropdown/DropdownMenuItem.js +4 -17
  56. package/dropdown/types.d.ts +3 -3
  57. package/file-input/FileInput.js +4 -8
  58. package/file-input/FileInput.stories.tsx +85 -2
  59. package/file-input/FileInput.test.js +1 -42
  60. package/file-input/FileItem.js +1 -0
  61. package/footer/Footer.js +6 -8
  62. package/footer/Footer.stories.tsx +91 -0
  63. package/footer/Footer.test.js +14 -26
  64. package/header/Header.d.ts +3 -2
  65. package/header/Header.js +21 -23
  66. package/header/Header.stories.tsx +149 -6
  67. package/header/Header.test.js +2 -2
  68. package/header/types.d.ts +2 -2
  69. package/heading/Heading.js +1 -1
  70. package/heading/Heading.test.js +1 -1
  71. package/layout/ApplicationLayout.d.ts +1 -1
  72. package/layout/ApplicationLayout.js +1 -1
  73. package/link/Link.js +2 -2
  74. package/link/Link.stories.tsx +60 -0
  75. package/link/Link.test.js +2 -4
  76. package/link/types.d.ts +2 -2
  77. package/main.d.ts +1 -1
  78. package/main.js +1 -1
  79. package/{tabs-nav → nav-tabs}/NavTabs.js +1 -1
  80. package/{tabs-nav → nav-tabs}/NavTabs.stories.tsx +96 -6
  81. package/{tabs-nav → nav-tabs}/NavTabs.test.js +1 -1
  82. package/{tabs-nav → nav-tabs}/Tab.js +37 -17
  83. package/number-input/NumberInput.test.js +1 -1
  84. package/package.json +2 -2
  85. package/paginator/Icons.d.ts +5 -0
  86. package/paginator/Icons.js +16 -28
  87. package/paginator/Paginator.js +6 -14
  88. package/paginator/Paginator.stories.tsx +24 -0
  89. package/paginator/Paginator.test.js +44 -47
  90. package/paragraph/Paragraph.d.ts +3 -4
  91. package/paragraph/Paragraph.js +5 -5
  92. package/password-input/PasswordInput.test.js +1 -1
  93. package/progress-bar/ProgressBar.d.ts +2 -2
  94. package/progress-bar/ProgressBar.js +5 -5
  95. package/progress-bar/ProgressBar.stories.jsx +35 -2
  96. package/progress-bar/ProgressBar.test.js +1 -1
  97. package/progress-bar/types.d.ts +4 -3
  98. package/quick-nav/QuickNav.stories.tsx +14 -0
  99. package/radio-group/RadioGroup.stories.tsx +131 -18
  100. package/radio-group/RadioGroup.test.js +1 -1
  101. package/resultsetTable/ResultsetTable.js +2 -2
  102. package/resultsetTable/ResultsetTable.test.js +18 -23
  103. package/resultsetTable/types.d.ts +3 -3
  104. package/select/Listbox.d.ts +1 -1
  105. package/select/Listbox.js +5 -34
  106. package/select/Option.js +11 -24
  107. package/select/Select.js +56 -35
  108. package/select/Select.stories.tsx +492 -145
  109. package/select/Select.test.js +76 -81
  110. package/select/types.d.ts +2 -2
  111. package/sidenav/Sidenav.js +9 -11
  112. package/sidenav/Sidenav.stories.tsx +148 -46
  113. package/slider/Slider.js +6 -7
  114. package/slider/Slider.stories.tsx +57 -0
  115. package/slider/Slider.test.js +1 -1
  116. package/slider/types.d.ts +2 -2
  117. package/spinner/Spinner.js +17 -23
  118. package/spinner/Spinner.stories.jsx +53 -27
  119. package/spinner/Spinner.test.js +1 -1
  120. package/switch/Switch.js +3 -3
  121. package/switch/Switch.stories.tsx +33 -0
  122. package/switch/Switch.test.js +1 -1
  123. package/switch/types.d.ts +2 -2
  124. package/table/Table.js +2 -2
  125. package/table/Table.stories.jsx +80 -1
  126. package/table/Table.test.js +1 -1
  127. package/tabs/Tab.js +12 -14
  128. package/tabs/Tabs.js +4 -6
  129. package/tabs/Tabs.stories.tsx +45 -5
  130. package/tabs/Tabs.test.js +4 -5
  131. package/tabs/types.d.ts +2 -2
  132. package/tag/Tag.js +7 -9
  133. package/tag/Tag.stories.tsx +14 -1
  134. package/tag/Tag.test.js +1 -1
  135. package/text-input/Suggestion.js +34 -7
  136. package/text-input/TextInput.js +10 -14
  137. package/text-input/TextInput.stories.tsx +92 -4
  138. package/text-input/TextInput.test.js +125 -26
  139. package/textarea/Textarea.js +3 -3
  140. package/textarea/Textarea.stories.jsx +60 -1
  141. package/textarea/Textarea.test.js +1 -1
  142. package/toggle-group/ToggleGroup.js +7 -4
  143. package/toggle-group/ToggleGroup.stories.tsx +42 -0
  144. package/toggle-group/ToggleGroup.test.js +1 -1
  145. package/toggle-group/types.d.ts +1 -1
  146. package/typography/Typography.d.ts +2 -2
  147. package/typography/Typography.js +14 -113
  148. package/typography/Typography.stories.tsx +1 -1
  149. package/useTheme.d.ts +1234 -1
  150. package/useTheme.js +1 -1
  151. package/useTranslatedLabels.d.ts +84 -1
  152. package/utils/BaseTypography.d.ts +21 -0
  153. package/utils/BaseTypography.js +108 -0
  154. package/utils/FocusLock.d.ts +13 -0
  155. package/utils/FocusLock.js +139 -0
  156. package/wizard/Wizard.js +2 -2
  157. package/wizard/Wizard.stories.tsx +20 -0
  158. package/wizard/Wizard.test.js +1 -1
  159. package/wizard/types.d.ts +5 -6
  160. /package/{tabs-nav → nav-tabs}/NavTabs.d.ts +0 -0
  161. /package/{tabs-nav → nav-tabs}/Tab.d.ts +0 -0
  162. /package/{tabs-nav → nav-tabs}/types.d.ts +0 -0
  163. /package/{tabs-nav → nav-tabs}/types.js +0 -0
@@ -1,4 +1,4 @@
1
1
  import React from "react";
2
2
  import { CalendarPropsType } from "./types";
3
- declare const _default: React.MemoExoticComponent<({ selectedDate, innerDate, onInnerDateChange, onDaySelect }: CalendarPropsType) => JSX.Element>;
3
+ declare const _default: React.MemoExoticComponent<({ selectedDate, innerDate, onInnerDateChange, onDaySelect, today, }: CalendarPropsType) => JSX.Element>;
4
4
  export default _default;
@@ -13,8 +13,6 @@ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/hel
13
13
 
14
14
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
15
 
16
- var _dayjs = _interopRequireDefault(require("dayjs"));
17
-
18
16
  var _react = _interopRequireWildcard(require("react"));
19
17
 
20
18
  var _styledComponents = _interopRequireDefault(require("styled-components"));
@@ -23,7 +21,7 @@ var _useTranslatedLabels = _interopRequireDefault(require("../useTranslatedLabel
23
21
 
24
22
  var _main = require("../main");
25
23
 
26
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
24
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4;
27
25
 
28
26
  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); }
29
27
 
@@ -60,6 +58,10 @@ var getDays = function getDays(innerDate) {
60
58
  return monthDayCells;
61
59
  };
62
60
 
61
+ var getDateToFocus = function getDateToFocus(selectedDate, innerDate, today) {
62
+ return (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate.get("month")) === innerDate.get("month") && (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate.get("year")) === innerDate.get("year") ? selectedDate : today.get("month") === innerDate.get("month") && today.get("year") === innerDate.get("year") ? today : innerDate.set("date", 1);
63
+ };
64
+
63
65
  var isDaySelected = function isDaySelected(date, selectedDate) {
64
66
  return (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate.get("month")) === date.month && (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate.get("year")) === date.year && (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate.get("date")) === date.day;
65
67
  };
@@ -68,19 +70,19 @@ var Calendar = function Calendar(_ref) {
68
70
  var selectedDate = _ref.selectedDate,
69
71
  innerDate = _ref.innerDate,
70
72
  onInnerDateChange = _ref.onInnerDateChange,
71
- onDaySelect = _ref.onDaySelect;
73
+ onDaySelect = _ref.onDaySelect,
74
+ today = _ref.today;
72
75
 
73
- var _useState = (0, _react.useState)((selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate.get("month")) === innerDate.get("month") && (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate.get("year")) === innerDate.get("year") ? selectedDate : (0, _dayjs["default"])()),
76
+ var _useState = (0, _react.useState)(getDateToFocus(selectedDate, innerDate, today)),
74
77
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
75
78
  dateToFocus = _useState2[0],
76
79
  setDateToFocus = _useState2[1];
77
80
 
78
81
  var _useState3 = (0, _react.useState)(false),
79
82
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
80
- toFocus = _useState4[0],
81
- setToFocus = _useState4[1];
83
+ isFocusable = _useState4[0],
84
+ setIsFocusable = _useState4[1];
82
85
 
83
- var today = (0, _dayjs["default"])();
84
86
  var dayCells = (0, _react.useMemo)(function () {
85
87
  return getDays(innerDate);
86
88
  }, [innerDate]);
@@ -95,17 +97,7 @@ var Calendar = function Calendar(_ref) {
95
97
 
96
98
  var handleOnBlur = function handleOnBlur(event) {
97
99
  if (!(event !== null && event !== void 0 && event.currentTarget.contains(event.relatedTarget))) {
98
- updateDateToFocus();
99
- }
100
- };
101
-
102
- var updateDateToFocus = function updateDateToFocus() {
103
- if ((selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate.get("month")) === innerDate.get("month") && (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate.get("year")) === innerDate.get("year")) {
104
- setDateToFocus(selectedDate);
105
- } else if (today.get("month") === innerDate.get("month") && today.get("year") === innerDate.get("year")) {
106
- setDateToFocus(today);
107
- } else {
108
- setDateToFocus(innerDate.set("date", 1));
100
+ setDateToFocus(getDateToFocus(selectedDate, innerDate, today));
109
101
  }
110
102
  };
111
103
 
@@ -115,22 +107,22 @@ var Calendar = function Calendar(_ref) {
115
107
  }
116
108
 
117
109
  setDateToFocus(date);
118
- setToFocus(true);
110
+ setIsFocusable(true);
119
111
  };
120
112
 
121
113
  (0, _react.useEffect)(function () {
122
- if (toFocus) {
114
+ if (isFocusable) {
123
115
  var _document$getElementB;
124
116
 
125
117
  (_document$getElementB = document.getElementById("day_".concat(dateToFocus.get("date"), "_month").concat(dateToFocus.get("month")))) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.focus();
126
- setToFocus(false);
118
+ setIsFocusable(false);
127
119
  }
128
- }, [dateToFocus, toFocus]);
120
+ }, [dateToFocus, isFocusable]);
129
121
  (0, _react.useEffect)(function () {
130
122
  if (dateToFocus.get("month") !== innerDate.get("month") || dateToFocus.get("year") !== innerDate.get("year")) {
131
- updateDateToFocus();
123
+ setDateToFocus(getDateToFocus(selectedDate, innerDate, today));
132
124
  }
133
- }, [innerDate, dateToFocus, selectedDate]);
125
+ }, [innerDate, dateToFocus, selectedDate, today]);
134
126
 
135
127
  var handleDayKeyboardEvent = function handleDayKeyboardEvent(event, date) {
136
128
  var dateToFocusTemp = date.month === innerDate.get("month") ? innerDate.set("date", date.day) : innerDate.set("date", date.day).set("month", date.month);
@@ -201,7 +193,7 @@ var Calendar = function Calendar(_ref) {
201
193
  })), /*#__PURE__*/_react["default"].createElement(DayCellsContainer, {
202
194
  onBlur: handleOnBlur
203
195
  }, dayCells.map(function (date, index) {
204
- return date !== 0 ? /*#__PURE__*/_react["default"].createElement(DayCell, {
196
+ return /*#__PURE__*/_react["default"].createElement(DayCell, {
205
197
  onKeyDown: function onKeyDown(event) {
206
198
  return handleDayKeyboardEvent(event, date);
207
199
  },
@@ -217,42 +209,50 @@ var Calendar = function Calendar(_ref) {
217
209
  "aria-selected": isDaySelected(date, selectedDate),
218
210
  tabIndex: date.day === dateToFocus.get("date") && date.month === dateToFocus.get("month") ? 0 : -1,
219
211
  isCurrentDay: today.get("date") === date.day && today.get("month") === innerDate.get("month") && today.get("month") === date.month && today.get("year") === innerDate.get("year")
220
- }, date.day) : /*#__PURE__*/_react["default"].createElement(EmptyDayCell, {
221
- key: "empty_".concat(index)
222
- });
212
+ }, date.day);
223
213
  })));
224
214
  };
225
215
 
226
- var CalendarContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding: 0px 8px 8px 8px;\n width: ", ";\n"])), function (props) {
227
- return props.theme.dateInput.pickerWidth;
228
- });
229
-
230
- var WeekHeaderCell = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n font-family: ", ";\n font-size: 14px;\n line-height: 19px;\n color: ", ";\n"])), function (props) {
216
+ var CalendarContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding: 0px 8px 8px 8px;\n width: 292px;\n font-family: ", ";\n font-size: ", ";\n color: ", ";\n font-weight: ", ";\n"])), function (props) {
231
217
  return props.theme.dateInput.pickerFontFamily;
232
218
  }, function (props) {
233
- return props.theme.dateInput.pickerWeekFontColor;
219
+ return props.theme.dateInput.pickerFontSize;
220
+ }, function (props) {
221
+ return props.theme.dateInput.pickerFontColor;
222
+ }, function (props) {
223
+ return props.theme.dateInput.pickerFontWeight;
234
224
  });
235
225
 
226
+ var WeekHeaderCell = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n"])));
227
+
236
228
  var DayCellsContainer = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n box-sizing: border-box;\n display: flex;\n gap: 4px;\n flex-wrap: wrap;\n justify-content: space-between;\n"])));
237
229
 
238
- var DayCell = _styledComponents["default"].button(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n justify-content: center;\n align-items: center;\n width: 36px;\n height: 36px;\n padding: 0;\n font-size: 0.875rem;\n font-family: ", ";\n font-weight: 400;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n\n &:focus {\n outline: ", " solid 2px;\n }\n &:hover {\n background-color: ", ";\n color: ", ";\n }\n &:active {\n background-color: #4b1c7d;\n color: #ffffff;\n }\n\n ", "\n background-color: ", ";\n color: ", ";\n"])), function (props) {
230
+ var DayCell = _styledComponents["default"].button(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n justify-content: center;\n align-items: center;\n width: 36px;\n height: 36px;\n padding: 0;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n font-family: ", ";\n font-size: ", ";\n color: ", ";\n font-weight: ", ";\n\n &:focus {\n outline: ", " solid 2px;\n }\n &:hover {\n background-color: ", ";\n color: ", ";\n }\n &:active {\n background-color: ", ";\n color: ", ";\n }\n\n ", "\n background-color: ", ";\n color: ", ";\n"])), function (props) {
239
231
  return props.theme.dateInput.pickerFontFamily;
232
+ }, function (props) {
233
+ return props.theme.dateInput.pickerFontSize;
234
+ }, function (props) {
235
+ return props.theme.dateInput.pickerFontColor;
236
+ }, function (props) {
237
+ return props.theme.dateInput.pickerFontWeight;
240
238
  }, function (props) {
241
239
  return props.theme.dateInput.pickerFocusColor;
242
240
  }, function (props) {
243
- return props.selected ? props.theme.dateInput.pickerSelectedDateBackgroundColor : props.theme.dateInput.pickerHoverDateBackgroundColor;
241
+ return props.selected ? props.theme.dateInput.pickerSelectedBackgroundColor : props.theme.dateInput.pickerHoverBackgroundColor;
242
+ }, function (props) {
243
+ return props.selected ? props.theme.dateInput.pickerSelectedFontColor : props.theme.dateInput.pickerHoverFontColor;
244
244
  }, function (props) {
245
- return props.selected ? props.theme.dateInput.pickerSelectedDateColor : props.theme.dateInput.pickerHoverDateFontColor;
245
+ return props.theme.dateInput.pickerActiveBackgroundColor;
246
246
  }, function (props) {
247
- return props.isCurrentDay && !props.selected && "border: 1px solid #cbacec;";
247
+ return props.theme.dateInput.pickerActiveFontColor;
248
248
  }, function (props) {
249
- return props.selected ? props.theme.dateInput.pickerSelectedDateBackgroundColor : "transparent";
249
+ return props.isCurrentDay && !props.selected && "border: ".concat(props.theme.dateInput.pickerCurrentDateBorderWidth, " solid ").concat(props.theme.dateInput.pickerCurrentDateBorderColor, ";");
250
250
  }, function (props) {
251
- return props.selected ? props.theme.dateInput.pickerSelectedDateColor : props.isCurrentDay ? props.theme.dateInput.pickerActualDateFontColor : !props.actualMonth ? "#999999" : props.theme.dateInput.pickerDayFontColor;
251
+ return props.selected ? props.theme.dateInput.pickerSelectedBackgroundColor : "transparent";
252
+ }, function (props) {
253
+ return props.selected ? props.theme.dateInput.pickerSelectedFontColor : props.isCurrentDay ? props.theme.dateInput.pickerCurrentDateFontColor : !props.actualMonth ? props.theme.dateInput.pickerNonCurrentMonthFontColor : props.theme.dateInput.pickerFontColor;
252
254
  });
253
255
 
254
- var EmptyDayCell = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-block;\n width: 40px;\n height: 36px;\n"])));
255
-
256
256
  var _default = /*#__PURE__*/_react["default"].memo(Calendar);
257
257
 
258
258
  exports["default"] = _default;
@@ -35,6 +35,8 @@ var _customParseFormat = _interopRequireDefault(require("dayjs/plugin/customPars
35
35
 
36
36
  var _uuid = require("uuid");
37
37
 
38
+ var _Icons = require("./Icons");
39
+
38
40
  var _templateObject;
39
41
 
40
42
  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); }
@@ -47,24 +49,33 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
47
49
 
48
50
  _dayjs["default"].extend(_customParseFormat["default"]);
49
51
 
50
- var calendarIcon = /*#__PURE__*/_react["default"].createElement("svg", {
51
- xmlns: "http://www.w3.org/2000/svg",
52
- height: "24",
53
- viewBox: "0 0 24 24",
54
- width: "24",
55
- fill: "currentColor"
56
- }, /*#__PURE__*/_react["default"].createElement("path", {
57
- d: "M0 0h24v24H0z",
58
- fill: "none"
59
- }), /*#__PURE__*/_react["default"].createElement("path", {
60
- d: "M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V8h16v13z"
61
- }));
62
-
63
52
  var getValueForPicker = function getValueForPicker(value, format) {
64
53
  return (0, _dayjs["default"])(value, format.toUpperCase(), true);
65
54
  };
66
55
 
56
+ var getDate = function getDate(value, format, lastValidYear, setLastValidYear) {
57
+ if ((value || value === "") && format.toUpperCase().includes("YYYY")) return getValueForPicker(value, format);else {
58
+ var newDate = getValueForPicker(value, format);
59
+
60
+ if (!lastValidYear) {
61
+ if (+newDate.format("YY") < 68) {
62
+ setLastValidYear(2000 + +newDate.format("YY"));
63
+ newDate = newDate.set("year", 2000 + +newDate.format("YY"));
64
+ } else {
65
+ setLastValidYear(1900 + +newDate.format("YY"));
66
+ newDate = newDate.set("year", 1900 + +newDate.format("YY"));
67
+ }
68
+ } else {
69
+ newDate = newDate.set("year", (lastValidYear <= 1999 ? 1900 : 2000) + +newDate.format("YY"));
70
+ }
71
+
72
+ return newDate;
73
+ }
74
+ };
75
+
67
76
  var DxcDateInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
77
+ var _ref2;
78
+
68
79
  var label = _ref.label,
69
80
  name = _ref.name,
70
81
  _ref$defaultValue = _ref.defaultValue,
@@ -100,9 +111,22 @@ var DxcDateInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref
100
111
  _useState6 = (0, _slicedToArray2["default"])(_useState5, 1),
101
112
  calendarId = _useState6[0];
102
113
 
114
+ var _useState7 = (0, _react.useState)(getValueForPicker((_ref2 = value !== null && value !== void 0 ? value : defaultValue) !== null && _ref2 !== void 0 ? _ref2 : "", format)),
115
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
116
+ dayjsDate = _useState8[0],
117
+ setDayjsDate = _useState8[1];
118
+
119
+ var _useState9 = (0, _react.useState)(innerValue || value ? !format.toUpperCase().includes("YYYY") && +getValueForPicker(value !== null && value !== void 0 ? value : innerValue, format).format("YY") < 68 ? 2000 : 1900 : undefined),
120
+ _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
121
+ lastValidYear = _useState10[0],
122
+ setLastValidYear = _useState10[1];
123
+
103
124
  var colorsTheme = (0, _useTheme["default"])();
104
125
  var translatedLabels = (0, _useTranslatedLabels["default"])();
105
126
  var dateRef = (0, _react.useRef)(null);
127
+ (0, _react.useEffect)(function () {
128
+ if (value || value === "") setDayjsDate(getDate(value, format, lastValidYear, setLastValidYear));
129
+ }, [value, format, lastValidYear]);
106
130
  (0, _react.useLayoutEffect)(function () {
107
131
  if (!disabled) {
108
132
  var actionButtonRef = dateRef === null || dateRef === void 0 ? void 0 : dateRef.current.querySelector("[title='Open calendar']");
@@ -116,45 +140,63 @@ var DxcDateInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref
116
140
 
117
141
  var handleCalendarOnClick = function handleCalendarOnClick(newDate) {
118
142
  var newValue = newDate.format(format.toUpperCase());
119
- value !== null && value !== void 0 ? value : setInnerValue(newValue);
143
+
144
+ if (!value) {
145
+ setDayjsDate(newDate);
146
+ setInnerValue(newValue);
147
+ }
148
+
149
+ setLastValidYear(newDate.get("year"));
120
150
  newDate !== null && newDate !== void 0 && newDate.set("day", newDate.get("date")).toJSON() ? onChange === null || onChange === void 0 ? void 0 : onChange({
121
151
  value: newValue,
122
- date: newDate
152
+ date: newDate.toDate()
123
153
  }) : onChange === null || onChange === void 0 ? void 0 : onChange({
124
154
  value: newValue
125
155
  });
126
156
  };
127
157
 
128
- var handleIOnChange = function handleIOnChange(_ref2) {
129
- var newValue = _ref2.value,
130
- inputError = _ref2.error;
158
+ var handleIOnChange = function handleIOnChange(_ref3) {
159
+ var newValue = _ref3.value,
160
+ inputError = _ref3.error;
131
161
  value !== null && value !== void 0 ? value : setInnerValue(newValue);
132
- var dayjsDate = getValueForPicker(newValue, format);
133
- var invalidDateMessage = newValue !== "" && !dayjsDate.isValid() && translatedLabels.dateInput.invalidDateErrorMessage;
162
+ var newDate = getDate(newValue, format, lastValidYear, setLastValidYear);
163
+ var invalidDateMessage = newValue !== "" && !newDate.isValid() && translatedLabels.dateInput.invalidDateErrorMessage;
134
164
  var callbackParams = inputError || invalidDateMessage ? {
135
165
  value: newValue,
136
166
  error: inputError || invalidDateMessage
137
167
  } : {
138
168
  value: newValue
139
169
  };
140
- dayjsDate.isValid() ? onChange === null || onChange === void 0 ? void 0 : onChange(_objectSpread(_objectSpread({}, callbackParams), {}, {
141
- date: dayjsDate.toDate()
142
- })) : onChange === null || onChange === void 0 ? void 0 : onChange(callbackParams);
170
+
171
+ if (newDate.isValid()) {
172
+ setDayjsDate(newDate);
173
+ onChange === null || onChange === void 0 ? void 0 : onChange(_objectSpread(_objectSpread({}, callbackParams), {}, {
174
+ date: newDate.toDate()
175
+ }));
176
+ } else {
177
+ onChange === null || onChange === void 0 ? void 0 : onChange(callbackParams);
178
+ setLastValidYear(function (validYear) {
179
+ var _dayjsDate$get;
180
+
181
+ return (_dayjsDate$get = dayjsDate === null || dayjsDate === void 0 ? void 0 : dayjsDate.get("year")) !== null && _dayjsDate$get !== void 0 ? _dayjsDate$get : validYear;
182
+ });
183
+ setDayjsDate(null);
184
+ }
143
185
  };
144
186
 
145
- var handleIOnBlur = function handleIOnBlur(_ref3) {
146
- var value = _ref3.value,
147
- inputError = _ref3.error;
148
- var dayjsDate = getValueForPicker(value, format);
149
- var invalidDateMessage = value !== "" && !dayjsDate.isValid() && translatedLabels.dateInput.invalidDateErrorMessage;
187
+ var handleIOnBlur = function handleIOnBlur(_ref4) {
188
+ var value = _ref4.value,
189
+ inputError = _ref4.error;
190
+ var date = getDate(value, format, lastValidYear, setLastValidYear);
191
+ var invalidDateMessage = value !== "" && !date.isValid() && translatedLabels.dateInput.invalidDateErrorMessage;
150
192
  var callbackParams = inputError || invalidDateMessage ? {
151
193
  value: value,
152
194
  error: inputError || invalidDateMessage
153
195
  } : {
154
196
  value: value
155
197
  };
156
- dayjsDate.isValid() ? onBlur === null || onBlur === void 0 ? void 0 : onBlur(_objectSpread(_objectSpread({}, callbackParams), {}, {
157
- date: dayjsDate.toDate()
198
+ date.isValid() ? onBlur === null || onBlur === void 0 ? void 0 : onBlur(_objectSpread(_objectSpread({}, callbackParams), {}, {
199
+ date: date.toDate()
158
200
  })) : onBlur === null || onBlur === void 0 ? void 0 : onBlur(callbackParams);
159
201
  };
160
202
 
@@ -194,7 +236,7 @@ var DxcDateInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref
194
236
  placeholder: placeholder ? format.toUpperCase() : null,
195
237
  action: {
196
238
  onClick: openCalendar,
197
- icon: calendarIcon,
239
+ icon: _Icons.calendarIcon,
198
240
  title: "Open calendar"
199
241
  },
200
242
  clearable: clearable,
@@ -218,7 +260,7 @@ var DxcDateInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref
218
260
  }, /*#__PURE__*/_react["default"].createElement(_DatePicker["default"], {
219
261
  id: calendarId,
220
262
  onDateSelect: handleCalendarOnClick,
221
- date: getValueForPicker(value !== null && value !== void 0 ? value : innerValue, format.toUpperCase())
263
+ date: dayjsDate
222
264
  })))));
223
265
  });
224
266
 
@@ -1,17 +1,31 @@
1
1
  import React from "react";
2
2
  import { userEvent, within, fireEvent, screen } from "@storybook/testing-library";
3
3
  import DxcDateInput from "./DateInput";
4
+ import DxcDatePicker from "./DatePicker";
5
+ import YearPicker from "./YearPicker";
6
+ import Calendar from "./Calendar";
4
7
  import Title from "../../.storybook/components/Title";
5
8
  import ExampleContainer from "../../.storybook/components/ExampleContainer";
6
9
  import { BackgroundColorProvider } from "../BackgroundColorContext";
7
10
  import DarkContainer from "../../.storybook/components/DarkSection";
11
+ import dayjs from "dayjs";
12
+ import useTheme from "../useTheme";
13
+ import { ThemeProvider } from "styled-components";
14
+ import { HalstackProvider } from "../HalstackContext";
8
15
 
9
16
  export default {
10
17
  title: "Date input",
11
18
  component: DxcDateInput,
12
19
  };
13
20
 
14
- export const Chromatic = () => (
21
+ const opinionatedTheme = {
22
+ dateInput: {
23
+ baseColor: "#5f249f",
24
+ selectedFontColor: "#ffffff",
25
+ },
26
+ };
27
+
28
+ const DateInputChromatic = () => (
15
29
  <>
16
30
  <ExampleContainer>
17
31
  <Title title="Complete date input" theme="light" level={4} />
@@ -22,7 +36,7 @@ export const Chromatic = () => (
22
36
  <DxcDateInput
23
37
  label="Disabled date input"
24
38
  helperText="Help message"
25
- defaultValue="06-04-2027"
39
+ defaultValue="06-04-2007"
26
40
  clearable
27
41
  disabled
28
42
  />
@@ -33,7 +47,7 @@ export const Chromatic = () => (
33
47
  </ExampleContainer>
34
48
  <ExampleContainer>
35
49
  <Title title="Relation between icons" theme="light" level={4} />
36
- <DxcDateInput label="Error date input" error="Error message." defaultValue="06-04-2027" clearable />
50
+ <DxcDateInput label="Error date input" error="Error message." defaultValue="06-04-2007" clearable />
37
51
  </ExampleContainer>
38
52
  <BackgroundColorProvider color="#333333">
39
53
  <DarkContainer>
@@ -58,7 +72,7 @@ export const Chromatic = () => (
58
72
  </ExampleContainer>
59
73
  <ExampleContainer>
60
74
  <Title title="Relation between icons" theme="dark" level={4} />
61
- <DxcDateInput label="Error date input" defaultValue="06-04-2027" error="Error message." clearable />
75
+ <DxcDateInput label="Error date input" defaultValue="06-04-2007" error="Error message." clearable />
62
76
  </ExampleContainer>
63
77
  </DarkContainer>
64
78
  </BackgroundColorProvider>
@@ -104,48 +118,187 @@ export const Chromatic = () => (
104
118
  <Title title="FillParent size" theme="light" level={4} />
105
119
  <DxcDateInput label="FillParent" size="fillParent" />
106
120
  </ExampleContainer>
121
+ <ExampleContainer expanded>
122
+ <Title title="Year picker" theme="light" level={4} />
123
+ <DxcDateInput label="Date input" defaultValue="06-04-1905" />
124
+ </ExampleContainer>
107
125
  </>
108
126
  );
109
127
 
110
- const DatePicker = () => (
111
- <ExampleContainer expanded>
112
- <Title title="Show date picker" theme="light" level={4} />
113
- <DxcDateInput label="Date input" defaultValue="06-04-2027" />
114
- </ExampleContainer>
128
+ export const Chromatic = DateInputChromatic.bind({});
129
+ Chromatic.play = async ({ canvasElement }) => {
130
+ const canvas = within(canvasElement);
131
+ await userEvent.click(canvas.getAllByRole("combobox")[canvas.getAllByRole("combobox").length - 1]);
132
+ await fireEvent.click(screen.getByText("April 1905"));
133
+ };
134
+
135
+ const DateInputOpinionatedTheme = () => (
136
+ <>
137
+ <Title title="Opinionated theme" theme="light" level={2} />
138
+ <ExampleContainer>
139
+ <Title title="Enabled" theme="light" level={4} />
140
+ <HalstackProvider theme={opinionatedTheme}>
141
+ <DxcDateInput
142
+ label="Date input"
143
+ helperText="Help message"
144
+ format="dd/mm/yy"
145
+ placeholder
146
+ optional
147
+ defaultValue="10-10-2022"
148
+ />
149
+ </HalstackProvider>
150
+ </ExampleContainer>
151
+ <ExampleContainer>
152
+ <Title title="Disabled" theme="light" level={4} />
153
+ <HalstackProvider theme={opinionatedTheme}>
154
+ <DxcDateInput label="Date input" helperText="Help message" format="dd/mm/yy" placeholder optional />
155
+ </HalstackProvider>
156
+ </ExampleContainer>
157
+ <ExampleContainer>
158
+ <Title title="Invalid" theme="light" level={4} />
159
+ <HalstackProvider theme={opinionatedTheme}>
160
+ <DxcDateInput label="Error date input" error="Error message." placeholder />
161
+ </HalstackProvider>
162
+ </ExampleContainer>
163
+ <ExampleContainer expanded>
164
+ <Title title="Date picker" theme="light" level={4} />
165
+ <HalstackProvider theme={opinionatedTheme}>
166
+ <DxcDateInput label="Date input" defaultValue="06-04-1905" />
167
+ </HalstackProvider>
168
+ </ExampleContainer>
169
+ </>
115
170
  );
116
171
 
117
- export const ShowDatePicker = DatePicker.bind({});
118
- ShowDatePicker.play = async ({ canvasElement }) => {
172
+ export const DateInputOpinionated = DateInputOpinionatedTheme.bind({});
173
+ DateInputOpinionated.play = async ({ canvasElement }) => {
119
174
  const canvas = within(canvasElement);
120
- const dateBtn = canvas.getByRole("combobox");
121
- await userEvent.click(dateBtn);
175
+ await userEvent.click(canvas.getAllByRole("combobox")[canvas.getAllByRole("combobox").length - 1]);
122
176
  };
123
177
 
124
- const YearPicker = () => (
178
+ const YearPickerOpinionatedTheme = () => (
125
179
  <ExampleContainer expanded>
126
- <Title title="Show year picker" theme="light" level={4} />
127
- <DxcDateInput label="Date input" defaultValue="06-04-2027" />
180
+ <Title title="Year picker" theme="light" level={4} />
181
+ <HalstackProvider theme={opinionatedTheme}>
182
+ <DxcDateInput label="Date input" defaultValue="06-04-1905" />
183
+ </HalstackProvider>
128
184
  </ExampleContainer>
129
185
  );
130
186
 
131
- export const ShowYearPicker = YearPicker.bind({});
132
- ShowYearPicker.play = async ({ canvasElement }) => {
187
+ export const YearPickerOpinionated = YearPickerOpinionatedTheme.bind({});
188
+ YearPickerOpinionated.play = async ({ canvasElement }) => {
133
189
  const canvas = within(canvasElement);
134
190
  await userEvent.click(canvas.getByRole("combobox"));
135
- await fireEvent.click(screen.getByText("April 2027"));
191
+ await fireEvent.click(screen.getByText("April 1905"));
136
192
  };
137
193
 
138
- const YearPickerFocus = () => (
139
- <ExampleContainer expanded>
140
- <Title title="Show year picker and focus" theme="light" level={4} />
141
- <DxcDateInput label="Date input" defaultValue="06-04-2027" />
142
- </ExampleContainer>
143
- );
194
+ const DatePickerButtonStates = () => {
195
+ const colorsTheme: any = useTheme();
196
+ return (
197
+ <>
198
+ <ExampleContainer>
199
+ <Title title="Show date picker over another element with z-index 0" theme="light" level={4} />
200
+ <div
201
+ style={{
202
+ display: "flex",
203
+ flexDirection: "column",
204
+ gap: "20px",
205
+ height: "200px",
206
+ width: "500px",
207
+ marginBottom: "250px",
208
+ padding: "20px",
209
+ border: "1px solid black",
210
+ borderRadius: "4px",
211
+ overflow: "auto",
212
+ zIndex: "1300",
213
+ position: "relative",
214
+ }}
215
+ >
216
+ <DxcDateInput label="From" defaultValue="01-12-1995" />
217
+ <DxcDateInput label="To" />
218
+ <button style={{ zIndex: "1", width: "100px" }}>Submit</button>
219
+ </div>
220
+ </ExampleContainer>
221
+ <ThemeProvider theme={colorsTheme}>
222
+ <ExampleContainer pseudoState="pseudo-focus">
223
+ <Title title="Isolated calendar focused" theme="light" level={4} />
224
+ <DxcDatePicker date={dayjs("06-04-1950", "DD-MM-YYYY")} onDateSelect={() => {}} id="test-calendar" />
225
+ </ExampleContainer>
226
+ <ExampleContainer pseudoState="pseudo-hover">
227
+ <Title title="Isolated calendar hovered" theme="light" level={4} />
228
+ <DxcDatePicker date={dayjs("06-04-1950", "DD-MM-YYYY")} onDateSelect={() => {}} id="test-calendar" />
229
+ </ExampleContainer>
230
+ <ExampleContainer pseudoState="pseudo-active">
231
+ <Title title="Isolated calendar actived" theme="light" level={4} />
232
+ <DxcDatePicker date={dayjs("06-04-1950", "DD-MM-YYYY")} onDateSelect={() => {}} id="test-calendar" />
233
+ </ExampleContainer>
234
+ </ThemeProvider>
235
+ </>
236
+ );
237
+ };
144
238
 
145
- export const ShowYearPickerFocus = YearPickerFocus.bind({});
146
- ShowYearPickerFocus.play = async ({ canvasElement }) => {
239
+ export const DatePickerStates = DatePickerButtonStates.bind({});
240
+ DatePickerStates.play = async ({ canvasElement }) => {
147
241
  const canvas = within(canvasElement);
148
- await userEvent.click(canvas.getByRole("combobox"));
149
- await fireEvent.click(screen.getByText("April 2027"));
150
- await userEvent.tab();
242
+ const dateBtn = canvas.getAllByTitle("Open calendar")[0];
243
+ await userEvent.click(dateBtn);
244
+ };
245
+
246
+ export const YearPickerStates = () => {
247
+ const colorsTheme: any = useTheme();
248
+ return (
249
+ <>
250
+ <ThemeProvider theme={colorsTheme}>
251
+ <ExampleContainer pseudoState="pseudo-focus">
252
+ <Title title="Isolated year picker focused" theme="light" level={4} />
253
+ <YearPicker
254
+ selectedDate={dayjs("06-04-1905", "DD-MM-YYYY")}
255
+ onYearSelect={() => {}}
256
+ today={dayjs("1904-04-03", "YYYY-MM-DD")}
257
+ />
258
+ </ExampleContainer>
259
+ <ExampleContainer pseudoState="pseudo-hover">
260
+ <Title title="Isolated year picker hovered" theme="light" level={4} />
261
+ <YearPicker
262
+ selectedDate={dayjs("06-04-1905", "DD-MM-YYYY")}
263
+ onYearSelect={() => {}}
264
+ today={dayjs("1904-04-03", "YYYY-MM-DD")}
265
+ />
266
+ </ExampleContainer>
267
+ <ExampleContainer pseudoState="pseudo-active">
268
+ <Title title="Isolated year picker actived" theme="light" level={4} />
269
+ <YearPicker
270
+ selectedDate={dayjs("06-04-1905", "DD-MM-YYYY")}
271
+ onYearSelect={() => {}}
272
+ today={dayjs("1904-04-03", "YYYY-MM-DD")}
273
+ />
274
+ </ExampleContainer>
275
+ </ThemeProvider>
276
+ </>
277
+ );
278
+ };
279
+
280
+ export const DatePickerWithToday = () => {
281
+ const colorsTheme: any = useTheme();
282
+ return (
283
+ <ThemeProvider theme={colorsTheme}>
284
+ <ExampleContainer>
285
+ <Title title="Isolated calendar with today" theme="light" level={4} />
286
+ <Calendar
287
+ selectedDate={dayjs("06-04-1904", "DD-MM-YYYY")}
288
+ today={dayjs("1904-04-03", "YYYY-MM-DD")}
289
+ onInnerDateChange={() => {}}
290
+ onDaySelect={() => {}}
291
+ innerDate={dayjs("06-04-1904", "DD-MM-YYYY")}
292
+ />
293
+ </ExampleContainer>
294
+ <ExampleContainer>
295
+ <Title title="Isolated year picker with today" theme="light" level={4} />
296
+ <YearPicker
297
+ selectedDate={dayjs("06-04-1905", "DD-MM-YYYY")}
298
+ onYearSelect={() => {}}
299
+ today={dayjs("1904-04-03", "YYYY-MM-DD")}
300
+ />
301
+ </ExampleContainer>
302
+ </ThemeProvider>
303
+ );
151
304
  };