@dxc-technology/halstack-react 7.0.0 → 9.0.0

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 (109) hide show
  1. package/HalstackContext.js +98 -50
  2. package/accordion/Accordion.js +7 -13
  3. package/accordion/Accordion.stories.tsx +102 -13
  4. package/alert/Alert.stories.tsx +28 -0
  5. package/box/Box.js +1 -3
  6. package/box/Box.stories.tsx +15 -0
  7. package/button/Button.js +11 -13
  8. package/button/Button.stories.tsx +150 -8
  9. package/checkbox/Checkbox.d.ts +2 -2
  10. package/checkbox/Checkbox.js +16 -15
  11. package/checkbox/Checkbox.stories.tsx +131 -59
  12. package/checkbox/types.d.ts +4 -0
  13. package/chip/Chip.js +16 -22
  14. package/chip/Chip.stories.tsx +96 -9
  15. package/common/variables.js +286 -290
  16. package/date-input/Calendar.d.ts +4 -0
  17. package/date-input/Calendar.js +258 -0
  18. package/date-input/DateInput.js +134 -237
  19. package/date-input/DateInput.stories.tsx +199 -33
  20. package/date-input/DateInput.test.js +494 -138
  21. package/date-input/DatePicker.d.ts +4 -0
  22. package/date-input/DatePicker.js +146 -0
  23. package/date-input/Icons.d.ts +6 -0
  24. package/date-input/Icons.js +75 -0
  25. package/date-input/YearPicker.d.ts +4 -0
  26. package/date-input/YearPicker.js +126 -0
  27. package/date-input/types.d.ts +51 -0
  28. package/dialog/Dialog.js +60 -73
  29. package/dialog/Dialog.stories.tsx +211 -159
  30. package/dialog/Dialog.test.js +301 -2
  31. package/dropdown/Dropdown.js +35 -35
  32. package/dropdown/Dropdown.stories.tsx +210 -84
  33. package/dropdown/Dropdown.test.js +17 -22
  34. package/dropdown/DropdownMenu.js +8 -18
  35. package/dropdown/DropdownMenuItem.js +4 -15
  36. package/file-input/FileInput.d.ts +2 -2
  37. package/file-input/FileInput.js +169 -222
  38. package/file-input/FileInput.stories.tsx +122 -11
  39. package/file-input/FileInput.test.js +12 -53
  40. package/file-input/FileItem.d.ts +4 -14
  41. package/file-input/FileItem.js +39 -63
  42. package/file-input/types.d.ts +17 -0
  43. package/footer/Footer.stories.tsx +91 -0
  44. package/header/Header.js +18 -20
  45. package/header/Header.stories.tsx +149 -6
  46. package/link/Link.js +1 -1
  47. package/link/Link.stories.tsx +60 -0
  48. package/main.d.ts +1 -1
  49. package/main.js +1 -1
  50. package/{tabs-nav → nav-tabs}/NavTabs.js +1 -1
  51. package/{tabs-nav → nav-tabs}/NavTabs.stories.tsx +96 -6
  52. package/{tabs-nav → nav-tabs}/Tab.js +35 -15
  53. package/number-input/NumberInput.test.js +5 -6
  54. package/package.json +7 -12
  55. package/paginator/Icons.d.ts +5 -0
  56. package/paginator/Icons.js +16 -28
  57. package/paginator/Paginator.js +5 -11
  58. package/paginator/Paginator.stories.tsx +24 -0
  59. package/paginator/Paginator.test.js +17 -10
  60. package/progress-bar/ProgressBar.js +4 -4
  61. package/progress-bar/ProgressBar.stories.jsx +35 -2
  62. package/quick-nav/QuickNav.stories.tsx +14 -0
  63. package/radio-group/RadioGroup.stories.tsx +131 -18
  64. package/resultsetTable/Icons.d.ts +7 -0
  65. package/resultsetTable/Icons.js +51 -0
  66. package/resultsetTable/ResultsetTable.js +48 -105
  67. package/resultsetTable/ResultsetTable.stories.tsx +50 -25
  68. package/resultsetTable/ResultsetTable.test.js +40 -63
  69. package/resultsetTable/types.d.ts +2 -2
  70. package/select/Listbox.d.ts +1 -1
  71. package/select/Listbox.js +5 -34
  72. package/select/Option.js +11 -24
  73. package/select/Select.js +43 -24
  74. package/select/Select.stories.tsx +494 -150
  75. package/select/Select.test.js +17 -22
  76. package/select/types.d.ts +2 -2
  77. package/sidenav/Sidenav.js +8 -10
  78. package/sidenav/Sidenav.stories.tsx +148 -46
  79. package/slider/Slider.d.ts +2 -2
  80. package/slider/Slider.js +9 -8
  81. package/slider/Slider.stories.tsx +57 -0
  82. package/slider/types.d.ts +4 -0
  83. package/spinner/Spinner.js +2 -2
  84. package/spinner/Spinner.stories.jsx +27 -1
  85. package/switch/Switch.d.ts +3 -3
  86. package/switch/Switch.js +5 -4
  87. package/switch/Switch.stories.tsx +33 -0
  88. package/switch/types.d.ts +6 -1
  89. package/table/Table.stories.jsx +80 -1
  90. package/table/Table.test.js +1 -1
  91. package/tabs/Tab.js +3 -5
  92. package/tabs/Tabs.js +3 -3
  93. package/tabs/Tabs.stories.tsx +45 -5
  94. package/tag/Tag.stories.tsx +14 -1
  95. package/text-input/Suggestion.js +32 -5
  96. package/text-input/TextInput.js +7 -11
  97. package/text-input/TextInput.stories.tsx +92 -4
  98. package/text-input/TextInput.test.js +587 -634
  99. package/textarea/Textarea.stories.jsx +60 -1
  100. package/toggle-group/ToggleGroup.stories.tsx +42 -0
  101. package/utils/FocusLock.d.ts +13 -0
  102. package/utils/FocusLock.js +139 -0
  103. package/wizard/Wizard.stories.tsx +20 -0
  104. package/common/RequiredComponent.js +0 -32
  105. /package/{tabs-nav → nav-tabs}/NavTabs.d.ts +0 -0
  106. /package/{tabs-nav → nav-tabs}/NavTabs.test.js +0 -0
  107. /package/{tabs-nav → nav-tabs}/Tab.d.ts +0 -0
  108. /package/{tabs-nav → nav-tabs}/types.d.ts +0 -0
  109. /package/{tabs-nav → nav-tabs}/types.js +0 -0
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { CalendarPropsType } from "./types";
3
+ declare const _default: React.MemoExoticComponent<({ selectedDate, innerDate, onInnerDateChange, onDaySelect, today, }: CalendarPropsType) => JSX.Element>;
4
+ export default _default;
@@ -0,0 +1,258 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports["default"] = void 0;
11
+
12
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
13
+
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+
16
+ var _react = _interopRequireWildcard(require("react"));
17
+
18
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
19
+
20
+ var _useTranslatedLabels = _interopRequireDefault(require("../useTranslatedLabels"));
21
+
22
+ var _main = require("../main");
23
+
24
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4;
25
+
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); }
27
+
28
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
+
30
+ var getDays = function getDays(innerDate) {
31
+ var monthDayCells = [];
32
+ var lastMonthNumberOfDays = innerDate.set("month", innerDate.get("month") - 1).endOf("month");
33
+ var firstDayOfMonth = innerDate.startOf("month").day() === 0 ? 6 : innerDate.startOf("month").day() - 1;
34
+ var daysInMonth = firstDayOfMonth + innerDate.daysInMonth();
35
+
36
+ for (var i = 0; i < 42; i++) {
37
+ if (i < firstDayOfMonth) {
38
+ monthDayCells.push({
39
+ day: lastMonthNumberOfDays.get("date") - firstDayOfMonth + i + 1,
40
+ month: innerDate.get("month") ? innerDate.get("month") - 1 : 11,
41
+ year: innerDate.set("month", innerDate.get("month") - 1).get("year")
42
+ });
43
+ } else if (i < daysInMonth) {
44
+ monthDayCells.push({
45
+ day: i - firstDayOfMonth + 1,
46
+ month: innerDate.get("month"),
47
+ year: innerDate.get("year")
48
+ });
49
+ } else {
50
+ monthDayCells.push({
51
+ day: i - daysInMonth + 1,
52
+ month: innerDate.get("month") === 11 ? 0 : innerDate.get("month") + 1,
53
+ year: innerDate.set("month", innerDate.get("month") + 1).get("year")
54
+ });
55
+ }
56
+ }
57
+
58
+ return monthDayCells;
59
+ };
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
+
65
+ var isDaySelected = function isDaySelected(date, selectedDate) {
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;
67
+ };
68
+
69
+ var Calendar = function Calendar(_ref) {
70
+ var selectedDate = _ref.selectedDate,
71
+ innerDate = _ref.innerDate,
72
+ onInnerDateChange = _ref.onInnerDateChange,
73
+ onDaySelect = _ref.onDaySelect,
74
+ today = _ref.today;
75
+
76
+ var _useState = (0, _react.useState)(getDateToFocus(selectedDate, innerDate, today)),
77
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
78
+ dateToFocus = _useState2[0],
79
+ setDateToFocus = _useState2[1];
80
+
81
+ var _useState3 = (0, _react.useState)(false),
82
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
83
+ isFocusable = _useState4[0],
84
+ setIsFocusable = _useState4[1];
85
+
86
+ var dayCells = (0, _react.useMemo)(function () {
87
+ return getDays(innerDate);
88
+ }, [innerDate]);
89
+ var translatedLabels = (0, _useTranslatedLabels["default"])();
90
+ var weekDays = translatedLabels.calendar.daysShort;
91
+
92
+ var onDateClickHandler = function onDateClickHandler(date) {
93
+ var newDate = innerDate.set("month", date.month).set("date", date.day);
94
+ onDaySelect(newDate);
95
+ setDateToFocus(newDate);
96
+ };
97
+
98
+ var handleOnBlur = function handleOnBlur(event) {
99
+ if (!(event !== null && event !== void 0 && event.currentTarget.contains(event.relatedTarget))) {
100
+ setDateToFocus(getDateToFocus(selectedDate, innerDate, today));
101
+ }
102
+ };
103
+
104
+ var focusDate = function focusDate(date) {
105
+ if (innerDate.get("month") !== date.get("month") || innerDate.get("year") !== date.get("year")) {
106
+ onInnerDateChange(date);
107
+ }
108
+
109
+ setDateToFocus(date);
110
+ setIsFocusable(true);
111
+ };
112
+
113
+ (0, _react.useEffect)(function () {
114
+ if (isFocusable) {
115
+ var _document$getElementB;
116
+
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();
118
+ setIsFocusable(false);
119
+ }
120
+ }, [dateToFocus, isFocusable]);
121
+ (0, _react.useEffect)(function () {
122
+ if (dateToFocus.get("month") !== innerDate.get("month") || dateToFocus.get("year") !== innerDate.get("year")) {
123
+ setDateToFocus(getDateToFocus(selectedDate, innerDate, today));
124
+ }
125
+ }, [innerDate, dateToFocus, selectedDate, today]);
126
+
127
+ var handleDayKeyboardEvent = function handleDayKeyboardEvent(event, date) {
128
+ var dateToFocusTemp = date.month === innerDate.get("month") ? innerDate.set("date", date.day) : innerDate.set("date", date.day).set("month", date.month);
129
+
130
+ switch (event.key) {
131
+ case "PageUp":
132
+ event.preventDefault();
133
+ event.shiftKey ? dateToFocusTemp = dateToFocusTemp.set("year", dateToFocusTemp.get("year") - 1) : dateToFocusTemp = dateToFocusTemp.set("month", dateToFocusTemp.get("month") - 1);
134
+ focusDate(dateToFocusTemp);
135
+ break;
136
+
137
+ case "PageDown":
138
+ event.preventDefault();
139
+ event.shiftKey ? dateToFocusTemp = dateToFocusTemp.set("year", dateToFocusTemp.get("year") + 1) : dateToFocusTemp = dateToFocusTemp.set("month", dateToFocusTemp.get("month") + 1);
140
+ focusDate(dateToFocusTemp);
141
+ break;
142
+
143
+ case "ArrowLeft":
144
+ event.preventDefault();
145
+ dateToFocusTemp = dateToFocusTemp.set("date", dateToFocusTemp.get("date") - 1);
146
+ focusDate(dateToFocusTemp);
147
+ break;
148
+
149
+ case "ArrowRight":
150
+ event.preventDefault();
151
+ dateToFocusTemp = dateToFocusTemp.set("date", dateToFocusTemp.get("date") + 1);
152
+ focusDate(dateToFocusTemp);
153
+ break;
154
+
155
+ case "ArrowUp":
156
+ event.preventDefault();
157
+ dateToFocusTemp = dateToFocusTemp.set("date", dateToFocusTemp.get("date") - 7);
158
+ focusDate(dateToFocusTemp);
159
+ break;
160
+
161
+ case "ArrowDown":
162
+ event.preventDefault();
163
+ dateToFocusTemp = dateToFocusTemp.set("date", dateToFocusTemp.get("date") + 7);
164
+ focusDate(dateToFocusTemp);
165
+ break;
166
+
167
+ case "Home":
168
+ event.preventDefault();
169
+ dateToFocus.get("day") !== 0 ? dateToFocusTemp = dateToFocusTemp.day(1) : dateToFocusTemp = innerDate.date(date.day - 1).day(1);
170
+ focusDate(dateToFocusTemp);
171
+ break;
172
+
173
+ case "End":
174
+ event.preventDefault();
175
+ dateToFocusTemp.get("day") !== 0 && (dateToFocusTemp = dateToFocusTemp.day(7));
176
+ focusDate(dateToFocusTemp);
177
+ break;
178
+
179
+ case " ":
180
+ event.preventDefault();
181
+ onDaySelect(dateToFocusTemp);
182
+ break;
183
+ }
184
+ };
185
+
186
+ return /*#__PURE__*/_react["default"].createElement(CalendarContainer, null, /*#__PURE__*/_react["default"].createElement(_main.DxcFlex, {
187
+ alignItems: "center",
188
+ justifyContent: "space-between"
189
+ }, weekDays.map(function (weekDay) {
190
+ return /*#__PURE__*/_react["default"].createElement(WeekHeaderCell, {
191
+ key: weekDay
192
+ }, weekDay);
193
+ })), /*#__PURE__*/_react["default"].createElement(DayCellsContainer, {
194
+ onBlur: handleOnBlur
195
+ }, dayCells.map(function (date, index) {
196
+ return /*#__PURE__*/_react["default"].createElement(DayCell, {
197
+ onKeyDown: function onKeyDown(event) {
198
+ return handleDayKeyboardEvent(event, date);
199
+ },
200
+ "aria-label": date.day,
201
+ id: "day_".concat(date.day, "_month").concat(date.month),
202
+ key: "day_".concat(index),
203
+ onClick: function onClick() {
204
+ return onDateClickHandler(date);
205
+ },
206
+ selected: isDaySelected(date, selectedDate),
207
+ actualMonth: date.month === innerDate.get("month"),
208
+ autoFocus: date.day === dateToFocus.get("date") && date.month === dateToFocus.get("month"),
209
+ "aria-selected": isDaySelected(date, selectedDate),
210
+ tabIndex: date.day === dateToFocus.get("date") && date.month === dateToFocus.get("month") ? 0 : -1,
211
+ isCurrentDay: today.get("date") === date.day && today.get("month") === innerDate.get("month") && today.get("month") === date.month && today.get("year") === innerDate.get("year")
212
+ }, date.day);
213
+ })));
214
+ };
215
+
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) {
217
+ return props.theme.dateInput.pickerFontFamily;
218
+ }, function (props) {
219
+ return props.theme.dateInput.pickerFontSize;
220
+ }, function (props) {
221
+ return props.theme.dateInput.pickerFontColor;
222
+ }, function (props) {
223
+ return props.theme.dateInput.pickerFontWeight;
224
+ });
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
+
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"])));
229
+
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) {
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;
238
+ }, function (props) {
239
+ return props.theme.dateInput.pickerFocusColor;
240
+ }, function (props) {
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
+ }, function (props) {
245
+ return props.theme.dateInput.pickerActiveBackgroundColor;
246
+ }, function (props) {
247
+ return props.theme.dateInput.pickerActiveFontColor;
248
+ }, function (props) {
249
+ return props.isCurrentDay && !props.selected && "border: ".concat(props.theme.dateInput.pickerCurrentDateBorderWidth, " solid ").concat(props.theme.dateInput.pickerCurrentDateBorderColor, ";");
250
+ }, function (props) {
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;
254
+ });
255
+
256
+ var _default = /*#__PURE__*/_react["default"].memo(Calendar);
257
+
258
+ exports["default"] = _default;