@simplybusiness/mobius-datepicker 6.5.7 → 6.5.9
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.
- package/CHANGELOG.md +16 -0
- package/dist/cjs/index.js +508 -16
- package/dist/esm/DatePickerModal-4YILELGV.js +195 -0
- package/dist/esm/index.js +226 -2
- package/package.json +8 -7
- package/dist/cjs/components/DatePicker/DatePicker.js +0 -231
- package/dist/cjs/components/DatePicker/DatePicker.js.map +0 -1
- package/dist/cjs/components/DatePicker/DatePickerIcon.js +0 -16
- package/dist/cjs/components/DatePicker/DatePickerIcon.js.map +0 -1
- package/dist/cjs/components/DatePicker/DatePickerModal.js +0 -140
- package/dist/cjs/components/DatePicker/DatePickerModal.js.map +0 -1
- package/dist/cjs/components/DatePicker/constants.js +0 -26
- package/dist/cjs/components/DatePicker/constants.js.map +0 -1
- package/dist/cjs/components/DatePicker/index.js +0 -20
- package/dist/cjs/components/DatePicker/index.js.map +0 -1
- package/dist/cjs/components/DatePicker/utils/dateObjToString.js +0 -15
- package/dist/cjs/components/DatePicker/utils/dateObjToString.js.map +0 -1
- package/dist/cjs/components/DatePicker/utils/formatErrorMessageText.js +0 -42
- package/dist/cjs/components/DatePicker/utils/formatErrorMessageText.js.map +0 -1
- package/dist/cjs/components/DatePicker/utils/getStartWeekday.js +0 -21
- package/dist/cjs/components/DatePicker/utils/getStartWeekday.js.map +0 -1
- package/dist/cjs/components/DatePicker/utils/index.js +0 -23
- package/dist/cjs/components/DatePicker/utils/index.js.map +0 -1
- package/dist/cjs/components/DatePicker/utils/timezoneOffset.js +0 -30
- package/dist/cjs/components/DatePicker/utils/timezoneOffset.js.map +0 -1
- package/dist/cjs/components/DatePicker/utils/validateDateFormat.js +0 -31
- package/dist/cjs/components/DatePicker/utils/validateDateFormat.js.map +0 -1
- package/dist/cjs/components/DatePicker/utils/weekdayAsOneLetter.js +0 -21
- package/dist/cjs/components/DatePicker/utils/weekdayAsOneLetter.js.map +0 -1
- package/dist/cjs/hooks/index.js +0 -20
- package/dist/cjs/hooks/index.js.map +0 -1
- package/dist/cjs/hooks/useFocusTrap/index.js +0 -20
- package/dist/cjs/hooks/useFocusTrap/index.js.map +0 -1
- package/dist/cjs/hooks/useFocusTrap/useFocusTrap.js +0 -50
- package/dist/cjs/hooks/useFocusTrap/useFocusTrap.js.map +0 -1
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/styles.d.js +0 -3
- package/dist/cjs/styles.d.js.map +0 -1
- package/dist/cjs/utils/excludeControls.js +0 -43
- package/dist/cjs/utils/excludeControls.js.map +0 -1
- package/dist/cjs/utils/index.js +0 -21
- package/dist/cjs/utils/index.js.map +0 -1
- package/dist/cjs/utils/isTouchDevice.js +0 -18
- package/dist/cjs/utils/isTouchDevice.js.map +0 -1
- package/dist/cjs/utils/jestMockMatchMedia.js +0 -28
- package/dist/cjs/utils/jestMockMatchMedia.js.map +0 -1
- package/dist/esm/components/DatePicker/DatePicker.js +0 -175
- package/dist/esm/components/DatePicker/DatePicker.js.map +0 -1
- package/dist/esm/components/DatePicker/DatePickerIcon.js +0 -6
- package/dist/esm/components/DatePicker/DatePickerIcon.js.map +0 -1
- package/dist/esm/components/DatePicker/DatePickerModal.js +0 -125
- package/dist/esm/components/DatePicker/DatePickerModal.js.map +0 -1
- package/dist/esm/components/DatePicker/constants.js +0 -5
- package/dist/esm/components/DatePicker/constants.js.map +0 -1
- package/dist/esm/components/DatePicker/index.js +0 -3
- package/dist/esm/components/DatePicker/index.js.map +0 -1
- package/dist/esm/components/DatePicker/utils/dateObjToString.js +0 -5
- package/dist/esm/components/DatePicker/utils/dateObjToString.js.map +0 -1
- package/dist/esm/components/DatePicker/utils/formatErrorMessageText.js +0 -18
- package/dist/esm/components/DatePicker/utils/formatErrorMessageText.js.map +0 -1
- package/dist/esm/components/DatePicker/utils/getStartWeekday.js +0 -13
- package/dist/esm/components/DatePicker/utils/getStartWeekday.js.map +0 -1
- package/dist/esm/components/DatePicker/utils/index.js +0 -6
- package/dist/esm/components/DatePicker/utils/index.js.map +0 -1
- package/dist/esm/components/DatePicker/utils/timezoneOffset.js +0 -12
- package/dist/esm/components/DatePicker/utils/timezoneOffset.js.map +0 -1
- package/dist/esm/components/DatePicker/utils/validateDateFormat.js +0 -14
- package/dist/esm/components/DatePicker/utils/validateDateFormat.js.map +0 -1
- package/dist/esm/components/DatePicker/utils/weekdayAsOneLetter.js +0 -11
- package/dist/esm/components/DatePicker/utils/weekdayAsOneLetter.js.map +0 -1
- package/dist/esm/hooks/index.js +0 -3
- package/dist/esm/hooks/index.js.map +0 -1
- package/dist/esm/hooks/useFocusTrap/index.js +0 -3
- package/dist/esm/hooks/useFocusTrap/index.js.map +0 -1
- package/dist/esm/hooks/useFocusTrap/useFocusTrap.js +0 -40
- package/dist/esm/hooks/useFocusTrap/useFocusTrap.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/styles.d.js +0 -2
- package/dist/esm/styles.d.js.map +0 -1
- package/dist/esm/utils/excludeControls.js +0 -33
- package/dist/esm/utils/excludeControls.js.map +0 -1
- package/dist/esm/utils/index.js +0 -4
- package/dist/esm/utils/index.js.map +0 -1
- package/dist/esm/utils/isTouchDevice.js +0 -8
- package/dist/esm/utils/isTouchDevice.js.map +0 -1
- package/dist/esm/utils/jestMockMatchMedia.js +0 -18
- package/dist/esm/utils/jestMockMatchMedia.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 6.5.9
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [4dd33c1]
|
|
8
|
+
- @simplybusiness/mobius@5.25.4
|
|
9
|
+
|
|
10
|
+
## 6.5.8
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- 30c903a: Switch from SWC to esbuild
|
|
15
|
+
- Updated dependencies [30c903a]
|
|
16
|
+
- @simplybusiness/mobius@5.25.3
|
|
17
|
+
- @simplybusiness/icons@4.23.1
|
|
18
|
+
|
|
3
19
|
## 6.5.7
|
|
4
20
|
|
|
5
21
|
### Patch Changes
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,20 +1,512 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __esm = (fn, res) => function __init() {
|
|
9
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
10
|
+
};
|
|
11
|
+
var __export = (target, all) => {
|
|
12
|
+
for (var name in all)
|
|
13
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
14
|
+
};
|
|
15
|
+
var __copyProps = (to, from, except, desc) => {
|
|
16
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
17
|
+
for (let key of __getOwnPropNames(from))
|
|
18
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
19
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
20
|
+
}
|
|
21
|
+
return to;
|
|
22
|
+
};
|
|
23
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
24
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
25
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
26
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
27
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
28
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
29
|
+
mod
|
|
30
|
+
));
|
|
31
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
32
|
+
|
|
33
|
+
// src/components/DatePicker/utils/timezoneOffset.ts
|
|
34
|
+
function toLocal(utcDate) {
|
|
35
|
+
return new Date(utcDate.getTime() + utcDate.getTimezoneOffset() * 6e4);
|
|
36
|
+
}
|
|
37
|
+
var init_timezoneOffset = __esm({
|
|
38
|
+
"src/components/DatePicker/utils/timezoneOffset.ts"() {
|
|
39
|
+
"use strict";
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
// src/components/DatePicker/utils/dateObjToString.ts
|
|
44
|
+
var import_date_fns, dateObjToString;
|
|
45
|
+
var init_dateObjToString = __esm({
|
|
46
|
+
"src/components/DatePicker/utils/dateObjToString.ts"() {
|
|
47
|
+
"use strict";
|
|
48
|
+
import_date_fns = require("date-fns");
|
|
49
|
+
init_timezoneOffset();
|
|
50
|
+
dateObjToString = (date) => (0, import_date_fns.format)(toLocal(date), "yyyy-MM-dd");
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
// src/components/DatePicker/utils/formatErrorMessageText.ts
|
|
55
|
+
var import_date_fns2, DEFAULT_INVALID_DATE_MESSAGE, DEFAULT_BEFORE_MIN, DEFAULT_AFTER_MAX, formatErrorMessageText;
|
|
56
|
+
var init_formatErrorMessageText = __esm({
|
|
57
|
+
"src/components/DatePicker/utils/formatErrorMessageText.ts"() {
|
|
58
|
+
"use strict";
|
|
59
|
+
import_date_fns2 = require("date-fns");
|
|
60
|
+
DEFAULT_INVALID_DATE_MESSAGE = "Please enter a valid date";
|
|
61
|
+
DEFAULT_BEFORE_MIN = "The date you selected is before the earliest allowed date";
|
|
62
|
+
DEFAULT_AFTER_MAX = "The date you selected is after the latest allowed date";
|
|
63
|
+
formatErrorMessageText = (actual, min, max) => {
|
|
64
|
+
const actualDate = new Date(actual);
|
|
65
|
+
const minDate = min && new Date(min);
|
|
66
|
+
const maxDate = max && new Date(max);
|
|
67
|
+
if (minDate && (0, import_date_fns2.isBefore)(actualDate, minDate)) {
|
|
68
|
+
return DEFAULT_BEFORE_MIN;
|
|
69
|
+
}
|
|
70
|
+
if (maxDate && (0, import_date_fns2.isAfter)(actualDate, maxDate)) {
|
|
71
|
+
return DEFAULT_AFTER_MAX;
|
|
72
|
+
}
|
|
73
|
+
return DEFAULT_INVALID_DATE_MESSAGE;
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
// src/components/DatePicker/utils/validateDateFormat.ts
|
|
79
|
+
var import_date_fns3, DATE_FORMAT, validateDateFormat;
|
|
80
|
+
var init_validateDateFormat = __esm({
|
|
81
|
+
"src/components/DatePicker/utils/validateDateFormat.ts"() {
|
|
82
|
+
"use strict";
|
|
83
|
+
import_date_fns3 = require("date-fns");
|
|
84
|
+
DATE_FORMAT = "yyyy-MM-dd";
|
|
85
|
+
validateDateFormat = (date) => {
|
|
86
|
+
if (date === "") {
|
|
87
|
+
return "";
|
|
88
|
+
}
|
|
89
|
+
if ((0, import_date_fns3.isMatch)(date, DATE_FORMAT)) {
|
|
90
|
+
return date;
|
|
91
|
+
}
|
|
92
|
+
throw Error(
|
|
93
|
+
`DatePicker defaultValue '${date}' is invalid. The expected format is '${DATE_FORMAT}' `
|
|
94
|
+
);
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
// src/components/DatePicker/constants.ts
|
|
100
|
+
var SUNDAY_AS_NUMBER, MONDAY_AS_NUMBER, DEFAULT_LOCALE;
|
|
101
|
+
var init_constants = __esm({
|
|
102
|
+
"src/components/DatePicker/constants.ts"() {
|
|
103
|
+
"use strict";
|
|
104
|
+
SUNDAY_AS_NUMBER = 0;
|
|
105
|
+
MONDAY_AS_NUMBER = 1;
|
|
106
|
+
DEFAULT_LOCALE = "en-GB";
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
// src/components/DatePicker/utils/weekdayAsOneLetter.ts
|
|
111
|
+
var weekdayAsOneLetter;
|
|
112
|
+
var init_weekdayAsOneLetter = __esm({
|
|
113
|
+
"src/components/DatePicker/utils/weekdayAsOneLetter.ts"() {
|
|
114
|
+
"use strict";
|
|
115
|
+
init_constants();
|
|
116
|
+
init_timezoneOffset();
|
|
117
|
+
weekdayAsOneLetter = (date) => {
|
|
118
|
+
const locale = navigator.language || DEFAULT_LOCALE;
|
|
119
|
+
const oneLetter = toLocal(date).toLocaleString(locale, {
|
|
120
|
+
weekday: "narrow"
|
|
121
|
+
});
|
|
122
|
+
return oneLetter;
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
// src/components/DatePicker/utils/index.ts
|
|
128
|
+
var init_utils = __esm({
|
|
129
|
+
"src/components/DatePicker/utils/index.ts"() {
|
|
130
|
+
"use strict";
|
|
131
|
+
init_dateObjToString();
|
|
132
|
+
init_formatErrorMessageText();
|
|
133
|
+
init_validateDateFormat();
|
|
134
|
+
init_weekdayAsOneLetter();
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
// src/hooks/useFocusTrap/useFocusTrap.tsx
|
|
139
|
+
function FocusTrap({ children }) {
|
|
140
|
+
const focusRef = useFocusTrap();
|
|
141
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "trap", ref: focusRef, children });
|
|
142
|
+
}
|
|
143
|
+
var import_react, import_jsx_runtime, useFocusTrap;
|
|
144
|
+
var init_useFocusTrap = __esm({
|
|
145
|
+
"src/hooks/useFocusTrap/useFocusTrap.tsx"() {
|
|
146
|
+
"use strict";
|
|
147
|
+
import_react = require("react");
|
|
148
|
+
import_jsx_runtime = require("react/jsx-runtime");
|
|
149
|
+
useFocusTrap = () => {
|
|
150
|
+
const containerRef = (0, import_react.useRef)(null);
|
|
151
|
+
(0, import_react.useEffect)(() => {
|
|
152
|
+
if (containerRef.current) {
|
|
153
|
+
const element = containerRef.current;
|
|
154
|
+
const focusableElements = containerRef.current.querySelectorAll(
|
|
155
|
+
'.rdp-nav_button, [tabindex="0"]'
|
|
156
|
+
);
|
|
157
|
+
const firstElement = focusableElements[0];
|
|
158
|
+
const lastElement = focusableElements[focusableElements.length - 1];
|
|
159
|
+
const handleTabKeyPress = (event) => {
|
|
160
|
+
if (event.key === "Tab") {
|
|
161
|
+
if (event.shiftKey && document.activeElement === firstElement) {
|
|
162
|
+
event.preventDefault();
|
|
163
|
+
lastElement.focus();
|
|
164
|
+
} else if (!event.shiftKey && document.activeElement && document.activeElement.className.indexOf("rdp-day") > -1) {
|
|
165
|
+
event.preventDefault();
|
|
166
|
+
firstElement.focus();
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
element.addEventListener("keydown", handleTabKeyPress);
|
|
171
|
+
return () => {
|
|
172
|
+
element.removeEventListener("keydown", handleTabKeyPress);
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
return () => {
|
|
176
|
+
};
|
|
177
|
+
}, []);
|
|
178
|
+
return containerRef;
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
// src/components/DatePicker/utils/getStartWeekday.ts
|
|
184
|
+
var getStartWeekday;
|
|
185
|
+
var init_getStartWeekday = __esm({
|
|
186
|
+
"src/components/DatePicker/utils/getStartWeekday.ts"() {
|
|
187
|
+
"use strict";
|
|
188
|
+
init_constants();
|
|
189
|
+
getStartWeekday = (locale) => {
|
|
190
|
+
switch (locale || DEFAULT_LOCALE) {
|
|
191
|
+
case "en-US":
|
|
192
|
+
return SUNDAY_AS_NUMBER;
|
|
193
|
+
default:
|
|
194
|
+
return MONDAY_AS_NUMBER;
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
// src/components/DatePicker/DatePickerModal.tsx
|
|
201
|
+
var DatePickerModal_exports = {};
|
|
202
|
+
__export(DatePickerModal_exports, {
|
|
203
|
+
default: () => DatePickerModal_default
|
|
204
|
+
});
|
|
205
|
+
var import_icons, import_mobius, import_dedupe, import_date_fns4, import_react2, import_react_day_picker, import_jsx_runtime2, PARENT_NODE, ChevronComponent, startWeekday, DatePickerModal, DatePickerModal_default;
|
|
206
|
+
var init_DatePickerModal = __esm({
|
|
207
|
+
"src/components/DatePicker/DatePickerModal.tsx"() {
|
|
208
|
+
"use strict";
|
|
209
|
+
"use client";
|
|
210
|
+
import_icons = require("@simplybusiness/icons");
|
|
211
|
+
import_mobius = require("@simplybusiness/mobius");
|
|
212
|
+
import_dedupe = __toESM(require("classnames/dedupe"));
|
|
213
|
+
import_date_fns4 = require("date-fns");
|
|
214
|
+
import_react2 = require("react");
|
|
215
|
+
import_react_day_picker = require("react-day-picker");
|
|
216
|
+
init_useFocusTrap();
|
|
217
|
+
init_utils();
|
|
218
|
+
init_getStartWeekday();
|
|
219
|
+
init_timezoneOffset();
|
|
220
|
+
import_jsx_runtime2 = require("react/jsx-runtime");
|
|
221
|
+
PARENT_NODE = typeof document !== "undefined" && document.body;
|
|
222
|
+
ChevronComponent = ({
|
|
223
|
+
orientation
|
|
224
|
+
}) => {
|
|
225
|
+
if (orientation === "left") {
|
|
226
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_mobius.Icon, { icon: import_icons.chevronLeft });
|
|
227
|
+
}
|
|
228
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_mobius.Icon, { icon: import_icons.chevronRight });
|
|
229
|
+
};
|
|
230
|
+
startWeekday = getStartWeekday(navigator?.language);
|
|
231
|
+
DatePickerModal = ({
|
|
232
|
+
date,
|
|
233
|
+
isOpen,
|
|
234
|
+
onSelected,
|
|
235
|
+
top,
|
|
236
|
+
min,
|
|
237
|
+
max
|
|
238
|
+
}) => {
|
|
239
|
+
const modalRef = (0, import_react2.useRef)(null);
|
|
240
|
+
const initialDate = date ? toLocal(new Date(date)) : void 0;
|
|
241
|
+
const minDate = min ? toLocal(new Date(min)) : void 0;
|
|
242
|
+
const maxDate = max ? toLocal(new Date(max)) : void 0;
|
|
243
|
+
const hiddenId = `screen-reader-title-${(0, import_react2.useId)()}`;
|
|
244
|
+
if (isOpen && PARENT_NODE) {
|
|
245
|
+
PARENT_NODE?.setAttribute("aria-hidden", "true");
|
|
246
|
+
}
|
|
247
|
+
const handleSelected = (selectedDate) => {
|
|
248
|
+
if (PARENT_NODE) PARENT_NODE?.removeAttribute("aria-hidden");
|
|
249
|
+
onSelected(selectedDate);
|
|
250
|
+
};
|
|
251
|
+
const handleDayPickerSelect = (selectedDate) => {
|
|
252
|
+
if (!selectedDate) return;
|
|
253
|
+
handleSelected(dateObjToString(selectedDate));
|
|
254
|
+
};
|
|
255
|
+
(0, import_mobius.useOnClickOutside)(modalRef, () => {
|
|
256
|
+
if (modalRef.current && isOpen) {
|
|
257
|
+
handleSelected();
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
const modalClasses = (0, import_dedupe.default)("mobius-date-picker__modal", {
|
|
261
|
+
"--is-open": isOpen
|
|
262
|
+
});
|
|
263
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(FocusTrap, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
264
|
+
"div",
|
|
265
|
+
{
|
|
266
|
+
ref: modalRef,
|
|
267
|
+
className: modalClasses,
|
|
268
|
+
style: { top },
|
|
269
|
+
"aria-describedby": hiddenId,
|
|
270
|
+
"data-testid": "modal-container",
|
|
271
|
+
children: [
|
|
272
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_mobius.VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { id: hiddenId, children: "Please select a date from the calendar" }) }),
|
|
273
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
274
|
+
import_react_day_picker.DayPicker,
|
|
275
|
+
{
|
|
276
|
+
mode: "single",
|
|
277
|
+
...minDate && { startMonth: minDate },
|
|
278
|
+
...maxDate && { endMonth: maxDate },
|
|
279
|
+
disabled: {
|
|
280
|
+
...min && { before: (0, import_date_fns4.parseISO)(min) },
|
|
281
|
+
...max && { after: (0, import_date_fns4.parseISO)(max) }
|
|
282
|
+
},
|
|
283
|
+
selected: initialDate,
|
|
284
|
+
defaultMonth: initialDate,
|
|
285
|
+
onSelect: handleDayPickerSelect,
|
|
286
|
+
pagedNavigation: true,
|
|
287
|
+
showOutsideDays: true,
|
|
288
|
+
weekStartsOn: startWeekday,
|
|
289
|
+
formatters: { formatWeekdayName: weekdayAsOneLetter },
|
|
290
|
+
components: {
|
|
291
|
+
Chevron: ChevronComponent
|
|
292
|
+
},
|
|
293
|
+
classNames: {
|
|
294
|
+
root: "mobius-date-picker__root",
|
|
295
|
+
months: "mobius-date-picker__months",
|
|
296
|
+
month: "mobius-date-picker__month",
|
|
297
|
+
nav: "mobius-date-picker__nav",
|
|
298
|
+
button_previous: "mobius-date-picker__nav-button --previous",
|
|
299
|
+
button_next: "mobius-date-picker__nav-button --next",
|
|
300
|
+
month_caption: "mobius-date-picker__caption",
|
|
301
|
+
caption_label: "mobius-date-picker__caption-label",
|
|
302
|
+
month_grid: "mobius-date-picker__month-grid",
|
|
303
|
+
weekdays: "mobius-date-picker__weekdays",
|
|
304
|
+
weekday: "mobius-date-picker__weekday",
|
|
305
|
+
weeks: "mobius-date-picker__weeks",
|
|
306
|
+
week: "mobius-date-picker__week",
|
|
307
|
+
day: "mobius-date-picker__day",
|
|
308
|
+
day_button: "mobius-date-picker__day-button",
|
|
309
|
+
selected: "--is-selected",
|
|
310
|
+
disabled: "--is-disabled",
|
|
311
|
+
outside: "--is-outside",
|
|
312
|
+
hidden: "--is-hidden",
|
|
313
|
+
today: "--is-today",
|
|
314
|
+
focused: "--is-focused"
|
|
13
315
|
}
|
|
14
|
-
|
|
316
|
+
}
|
|
317
|
+
)
|
|
318
|
+
]
|
|
15
319
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
320
|
+
) });
|
|
321
|
+
};
|
|
322
|
+
DatePickerModal_default = DatePickerModal;
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
// index.tsx
|
|
327
|
+
var index_exports = {};
|
|
328
|
+
__export(index_exports, {
|
|
329
|
+
DatePicker: () => DatePicker
|
|
330
|
+
});
|
|
331
|
+
module.exports = __toCommonJS(index_exports);
|
|
332
|
+
|
|
333
|
+
// src/components/DatePicker/DatePicker.tsx
|
|
334
|
+
var import_icons2 = require("@simplybusiness/icons");
|
|
335
|
+
var import_mobius2 = require("@simplybusiness/mobius");
|
|
336
|
+
var import_dedupe2 = __toESM(require("classnames/dedupe"));
|
|
337
|
+
var import_react3 = require("react");
|
|
338
|
+
|
|
339
|
+
// src/utils/isTouchDevice.ts
|
|
340
|
+
var isTouchDevice = () => {
|
|
341
|
+
if (typeof window !== "undefined") {
|
|
342
|
+
return window.matchMedia("(hover: none), (pointer: coarse)").matches;
|
|
343
|
+
}
|
|
344
|
+
return void 0;
|
|
345
|
+
};
|
|
19
346
|
|
|
20
|
-
|
|
347
|
+
// src/components/DatePicker/DatePicker.tsx
|
|
348
|
+
init_utils();
|
|
349
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
350
|
+
var DatePickerModal2 = (0, import_react3.lazy)(() => Promise.resolve().then(() => (init_DatePickerModal(), DatePickerModal_exports)));
|
|
351
|
+
var getValidationState = (props) => {
|
|
352
|
+
const { validationState, isInvalid } = props;
|
|
353
|
+
if (isInvalid || validationState === "invalid") {
|
|
354
|
+
return true;
|
|
355
|
+
}
|
|
356
|
+
if (isInvalid === false || validationState === "valid") {
|
|
357
|
+
return false;
|
|
358
|
+
}
|
|
359
|
+
return void 0;
|
|
360
|
+
};
|
|
361
|
+
var DatePicker = (props) => {
|
|
362
|
+
const {
|
|
363
|
+
onChange,
|
|
364
|
+
defaultValue = "",
|
|
365
|
+
isDisabled,
|
|
366
|
+
validationState,
|
|
367
|
+
isInvalid,
|
|
368
|
+
errorMessage = "",
|
|
369
|
+
...otherProps
|
|
370
|
+
} = props;
|
|
371
|
+
const containerRef = (0, import_react3.useRef)(null);
|
|
372
|
+
const [top, setTop] = (0, import_react3.useState)(0);
|
|
373
|
+
const inputRef = (0, import_react3.useRef)(null);
|
|
374
|
+
const [isOpen, setIsOpen] = (0, import_react3.useState)(false);
|
|
375
|
+
const [textFieldVal, setTextFieldVal] = (0, import_react3.useState)(
|
|
376
|
+
validateDateFormat(defaultValue)
|
|
377
|
+
);
|
|
378
|
+
const [isValid, setIsValid] = (0, import_react3.useState)(void 0);
|
|
379
|
+
const isInvalidProp = getValidationState({
|
|
380
|
+
validationState,
|
|
381
|
+
isInvalid: isValid === false || isInvalid
|
|
382
|
+
});
|
|
383
|
+
const errorMessageText = isInvalidProp ? (
|
|
384
|
+
// eslint-disable-next-line react/destructuring-assignment
|
|
385
|
+
formatErrorMessageText(textFieldVal, props.min, props.max)
|
|
386
|
+
) : errorMessage;
|
|
387
|
+
const touchDevice = isTouchDevice();
|
|
388
|
+
const validationClasses = (0, import_mobius2.useValidationClasses)({
|
|
389
|
+
validationState,
|
|
390
|
+
isInvalid: isInvalidProp
|
|
391
|
+
});
|
|
392
|
+
const containerClasses = (0, import_dedupe2.default)(
|
|
393
|
+
"mobius-date-picker__container",
|
|
394
|
+
{
|
|
395
|
+
"--is-disabled": isDisabled,
|
|
396
|
+
"--is-touch-device": touchDevice
|
|
397
|
+
},
|
|
398
|
+
validationClasses
|
|
399
|
+
);
|
|
400
|
+
const popoverToggleClasses = (0, import_dedupe2.default)(
|
|
401
|
+
"mobius-date-picker__field-button",
|
|
402
|
+
validationClasses
|
|
403
|
+
);
|
|
404
|
+
const validate = () => {
|
|
405
|
+
const isValidInput = inputRef.current?.checkValidity();
|
|
406
|
+
if (!isValidInput) {
|
|
407
|
+
setIsValid(false);
|
|
408
|
+
}
|
|
409
|
+
};
|
|
410
|
+
(0, import_react3.useEffect)(() => {
|
|
411
|
+
if (!inputRef.current) return;
|
|
412
|
+
const validatedValue = validateDateFormat(defaultValue);
|
|
413
|
+
setTextFieldVal(validatedValue);
|
|
414
|
+
inputRef.current.value = validatedValue;
|
|
415
|
+
setIsValid(true);
|
|
416
|
+
validate();
|
|
417
|
+
}, [defaultValue]);
|
|
418
|
+
const togglePopoverVisibility = () => {
|
|
419
|
+
setIsValid(true);
|
|
420
|
+
setIsOpen(!isOpen);
|
|
421
|
+
};
|
|
422
|
+
const handleTextFieldChange = (event) => {
|
|
423
|
+
setTextFieldVal(event.target.value);
|
|
424
|
+
setIsValid(true);
|
|
425
|
+
};
|
|
426
|
+
const onDateSelected = (selectedDate) => {
|
|
427
|
+
if (selectedDate) {
|
|
428
|
+
setTextFieldVal(selectedDate);
|
|
429
|
+
setIsValid(true);
|
|
430
|
+
onChange?.(selectedDate);
|
|
431
|
+
}
|
|
432
|
+
setIsOpen(false);
|
|
433
|
+
};
|
|
434
|
+
const handleBlur = (event) => {
|
|
435
|
+
validate();
|
|
436
|
+
if (!textFieldVal) {
|
|
437
|
+
setIsValid(false);
|
|
438
|
+
}
|
|
439
|
+
onChange?.(event.target.value);
|
|
440
|
+
};
|
|
441
|
+
const handleClick = (event) => {
|
|
442
|
+
event.preventDefault();
|
|
443
|
+
togglePopoverVisibility();
|
|
444
|
+
};
|
|
445
|
+
(0, import_react3.useEffect)(() => {
|
|
446
|
+
if (isOpen) {
|
|
447
|
+
setTop(containerRef.current?.getBoundingClientRect().height || 0);
|
|
448
|
+
setIsValid(true);
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
validate();
|
|
452
|
+
}, [isOpen]);
|
|
453
|
+
if (touchDevice) {
|
|
454
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: containerClasses, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
455
|
+
import_mobius2.TextField,
|
|
456
|
+
{
|
|
457
|
+
ref: inputRef,
|
|
458
|
+
type: "date",
|
|
459
|
+
className: "mobius-date-picker",
|
|
460
|
+
onBlur: handleBlur,
|
|
461
|
+
onChange: handleTextFieldChange,
|
|
462
|
+
value: textFieldVal,
|
|
463
|
+
isDisabled,
|
|
464
|
+
isInvalid: isInvalidProp,
|
|
465
|
+
...otherProps,
|
|
466
|
+
errorMessage: errorMessage || errorMessageText
|
|
467
|
+
}
|
|
468
|
+
) });
|
|
469
|
+
}
|
|
470
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: containerClasses, ref: containerRef, children: [
|
|
471
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
472
|
+
import_mobius2.TextField,
|
|
473
|
+
{
|
|
474
|
+
ref: inputRef,
|
|
475
|
+
type: "date",
|
|
476
|
+
className: "mobius-date-picker",
|
|
477
|
+
onBlur: handleBlur,
|
|
478
|
+
onChange: handleTextFieldChange,
|
|
479
|
+
onClick: handleClick,
|
|
480
|
+
value: textFieldVal,
|
|
481
|
+
isDisabled,
|
|
482
|
+
isInvalid: isInvalidProp,
|
|
483
|
+
...otherProps,
|
|
484
|
+
errorMessage: errorMessage || errorMessageText,
|
|
485
|
+
suffixOutside: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
486
|
+
import_mobius2.Button,
|
|
487
|
+
{
|
|
488
|
+
className: popoverToggleClasses,
|
|
489
|
+
onClick: togglePopoverVisibility,
|
|
490
|
+
isDisabled,
|
|
491
|
+
size: "sm",
|
|
492
|
+
children: [
|
|
493
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_mobius2.Icon, { size: "sm", icon: import_icons2.calendarDay }),
|
|
494
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_mobius2.VisuallyHidden, { children: "Pick date" })
|
|
495
|
+
]
|
|
496
|
+
}
|
|
497
|
+
)
|
|
498
|
+
}
|
|
499
|
+
),
|
|
500
|
+
isOpen && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react3.Suspense, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
501
|
+
DatePickerModal2,
|
|
502
|
+
{
|
|
503
|
+
date: textFieldVal,
|
|
504
|
+
isOpen,
|
|
505
|
+
top,
|
|
506
|
+
onSelected: onDateSelected,
|
|
507
|
+
min: props.min,
|
|
508
|
+
max: props.max
|
|
509
|
+
}
|
|
510
|
+
) })
|
|
511
|
+
] });
|
|
512
|
+
};
|