@sb1/ffe-datepicker-react 100.12.4 → 101.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.
- package/es/button/Button.js +4 -5
- package/es/calendar/Calendar.js +88 -111
- package/es/calendar/ClickableDate.js +20 -41
- package/es/calendar/Header.js +13 -14
- package/es/calendar/NonClickableDate.js +1 -2
- package/es/datelogic/simplecalendar.js +97 -124
- package/es/datelogic/simpledate.js +66 -96
- package/es/datepicker/Datepicker.js +2 -25
- package/es/datepicker/DatepickerComp.js +61 -64
- package/es/datepicker/DatepickerContext.js +33 -36
- package/es/datepicker/SpinButton.js +8 -32
- package/es/datepicker/padZero.js +2 -2
- package/es/datepicker/testHelper.js +72 -143
- package/es/datepicker/toNumber.js +4 -6
- package/es/i18n/i18n.js +3 -3
- package/es/input/DateInput.js +3 -26
- package/es/types.js +1 -1
- package/es/util/dateRangeUtils.js +12 -12
- package/es/util/dateUtil.js +2 -2
- package/es/util/isIOSSafari.js +4 -4
- package/lib/button/Button.js +8 -9
- package/lib/calendar/Calendar.js +94 -116
- package/lib/calendar/ClickableDate.js +22 -42
- package/lib/calendar/Header.js +17 -18
- package/lib/calendar/NonClickableDate.js +2 -3
- package/lib/datelogic/simplecalendar.js +99 -125
- package/lib/datelogic/simpledate.js +67 -96
- package/lib/datepicker/Datepicker.js +5 -28
- package/lib/datepicker/DatepickerComp.js +74 -77
- package/lib/datepicker/DatepickerContext.js +36 -39
- package/lib/datepicker/SpinButton.js +10 -34
- package/lib/datepicker/padZero.js +2 -2
- package/lib/datepicker/testHelper.js +73 -177
- package/lib/datepicker/toNumber.js +4 -6
- package/lib/i18n/i18n.js +3 -3
- package/lib/input/DateInput.js +7 -30
- package/lib/types.js +1 -1
- package/lib/util/dateRangeUtils.js +14 -14
- package/lib/util/dateUtil.js +3 -3
- package/lib/util/isIOSSafari.js +4 -4
- package/package.json +13 -14
|
@@ -1,83 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
12
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
-
function step(op) {
|
|
15
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
-
switch (op[0]) {
|
|
20
|
-
case 0: case 1: t = op; break;
|
|
21
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
-
default:
|
|
25
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
-
if (t[2]) _.ops.pop();
|
|
30
|
-
_.trys.pop(); continue;
|
|
31
|
-
}
|
|
32
|
-
op = body.call(thisArg, _);
|
|
33
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
1
|
+
import { act } from 'react';
|
|
2
|
+
async function simulateTyping(element, text, delay = 100) {
|
|
3
|
+
let _text = text;
|
|
4
|
+
if (text.length === 0) {
|
|
5
|
+
_text = '0';
|
|
35
6
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
function typeCharacter() {
|
|
53
|
-
if (index < _text.length) {
|
|
54
|
-
var char = _text[index];
|
|
55
|
-
var eventOptions_1 = {
|
|
56
|
-
key: char,
|
|
57
|
-
keyCode: char.charCodeAt(0),
|
|
58
|
-
which: char.charCodeAt(0),
|
|
59
|
-
bubbles: true,
|
|
60
|
-
};
|
|
61
|
-
act(function () {
|
|
62
|
-
element.dispatchEvent(new KeyboardEvent('keydown', eventOptions_1));
|
|
63
|
-
});
|
|
64
|
-
index++;
|
|
65
|
-
setTimeout(typeCharacter, delay);
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
resolve(); // Resolve the promise when done
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
typeCharacter();
|
|
72
|
-
})];
|
|
7
|
+
return new Promise(resolve => {
|
|
8
|
+
let index = 0;
|
|
9
|
+
function typeCharacter() {
|
|
10
|
+
if (index < _text.length) {
|
|
11
|
+
const char = _text[index];
|
|
12
|
+
const eventOptions = {
|
|
13
|
+
key: char,
|
|
14
|
+
keyCode: char.charCodeAt(0),
|
|
15
|
+
which: char.charCodeAt(0),
|
|
16
|
+
bubbles: true,
|
|
17
|
+
};
|
|
18
|
+
act(() => {
|
|
19
|
+
element.dispatchEvent(new KeyboardEvent('keydown', eventOptions));
|
|
20
|
+
});
|
|
21
|
+
index++;
|
|
22
|
+
setTimeout(typeCharacter, delay);
|
|
73
23
|
}
|
|
74
|
-
|
|
24
|
+
else {
|
|
25
|
+
resolve(); // Resolve the promise when done
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
typeCharacter();
|
|
75
29
|
});
|
|
76
30
|
}
|
|
77
|
-
function leftPad(str, len, ch) {
|
|
78
|
-
|
|
79
|
-
if (ch === void 0) { ch = '0'; }
|
|
80
|
-
var newStr = str;
|
|
31
|
+
function leftPad(str, len = 2, ch = '0') {
|
|
32
|
+
let newStr = str;
|
|
81
33
|
while (newStr.length < len) {
|
|
82
34
|
newStr = ch + newStr;
|
|
83
35
|
}
|
|
@@ -90,71 +42,48 @@ function leftPad(str, len, ch) {
|
|
|
90
42
|
* @param index if there are multiple datepicker elements with the same label, you can specify which one you want to get
|
|
91
43
|
* @returns DatepickerTestHelper
|
|
92
44
|
*/
|
|
93
|
-
export function getDatepickerByLabelText(
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
var screen, elements;
|
|
139
|
-
if (index === void 0) { index = 0; }
|
|
140
|
-
return __generator(this, function (_a) {
|
|
141
|
-
switch (_a.label) {
|
|
142
|
-
case 0: return [4 /*yield*/, import('@testing-library/react')];
|
|
143
|
-
case 1:
|
|
144
|
-
screen = (_a.sent()).screen;
|
|
145
|
-
elements = screen
|
|
146
|
-
.getAllByText(label)
|
|
147
|
-
.map(function (element) {
|
|
148
|
-
var _a, _b;
|
|
149
|
-
return (_b = (_a = element.parentElement) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.querySelector('.ffe-datepicker');
|
|
150
|
-
})
|
|
151
|
-
.filter(function (element) { return element !== null && element !== undefined; });
|
|
152
|
-
return [2 /*return*/, {
|
|
153
|
-
element: elements[index],
|
|
154
|
-
getValue: function () { return getValue(elements[index]); },
|
|
155
|
-
setValue: function (value) { return setValue(elements[index], value); },
|
|
156
|
-
}];
|
|
157
|
-
}
|
|
158
|
-
});
|
|
159
|
-
});
|
|
45
|
+
export async function getDatepickerByLabelText(label, index = 0) {
|
|
46
|
+
const elements = Array.from(document.querySelectorAll('*'))
|
|
47
|
+
.filter(el => {
|
|
48
|
+
var _a;
|
|
49
|
+
return el.children.length === 0 &&
|
|
50
|
+
((_a = el.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === label;
|
|
51
|
+
})
|
|
52
|
+
.map(el => {
|
|
53
|
+
var _a, _b;
|
|
54
|
+
return (_b = (_a = el.parentElement) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.querySelector('.ffe-datepicker');
|
|
55
|
+
})
|
|
56
|
+
.filter((el) => el !== null && el !== undefined);
|
|
57
|
+
function getValue(element) {
|
|
58
|
+
const [dayElement, monthElement, yearElement] = Array.from(element.querySelectorAll('[role="spinbutton"]'));
|
|
59
|
+
const day = dayElement.getAttribute('aria-valuenow') || '';
|
|
60
|
+
const month = monthElement.getAttribute('aria-valuenow') || '';
|
|
61
|
+
const year = yearElement.getAttribute('aria-valuenow') || '';
|
|
62
|
+
return year !== '' &&
|
|
63
|
+
year !== '0' &&
|
|
64
|
+
month !== '' &&
|
|
65
|
+
month !== '0' &&
|
|
66
|
+
day !== '' &&
|
|
67
|
+
day !== '0'
|
|
68
|
+
? `${leftPad(day)}.${leftPad(month)}.${year}`
|
|
69
|
+
: '';
|
|
70
|
+
}
|
|
71
|
+
async function setValue(element, value) {
|
|
72
|
+
const [dayElement, monthElement, yearElement] = Array.from(element.querySelectorAll('[role="spinbutton"]'));
|
|
73
|
+
// eslint-disable-next-line prefer-const
|
|
74
|
+
let [dayValue, monthValue, yearValue] = value
|
|
75
|
+
? value.split('.')
|
|
76
|
+
: ['0', '0', '0'];
|
|
77
|
+
dayValue = dayValue.length === 1 ? `0${dayValue}` : dayValue;
|
|
78
|
+
monthValue = monthValue.length === 1 ? `0${monthValue}` : monthValue;
|
|
79
|
+
await simulateTyping(dayElement, dayValue);
|
|
80
|
+
await simulateTyping(monthElement, monthValue);
|
|
81
|
+
await simulateTyping(yearElement, yearValue);
|
|
82
|
+
act(() => yearElement.blur());
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
element: elements[index],
|
|
86
|
+
getValue: () => getValue(elements[index]),
|
|
87
|
+
setValue: (value) => setValue(elements[index], value),
|
|
88
|
+
};
|
|
160
89
|
}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
1
|
+
export const toNumber = (numbers) => {
|
|
2
|
+
const validNumbers = numbers.filter(it => typeof it === 'number');
|
|
3
3
|
return validNumbers
|
|
4
|
-
.map(
|
|
5
|
-
|
|
6
|
-
})
|
|
7
|
-
.reduce(function (acc, curr) { return acc + curr; }, 0);
|
|
4
|
+
.map((it, index) => (it !== null && it !== void 0 ? it : 1) * Math.pow(10, validNumbers.length - index - 1))
|
|
5
|
+
.reduce((acc, curr) => acc + curr, 0);
|
|
8
6
|
};
|
package/es/i18n/i18n.js
CHANGED
package/es/input/DateInput.js
CHANGED
|
@@ -1,34 +1,11 @@
|
|
|
1
|
-
var __assign = (this && this.__assign) || function () {
|
|
2
|
-
__assign = Object.assign || function(t) {
|
|
3
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
-
s = arguments[i];
|
|
5
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
-
t[p] = s[p];
|
|
7
|
-
}
|
|
8
|
-
return t;
|
|
9
|
-
};
|
|
10
|
-
return __assign.apply(this, arguments);
|
|
11
|
-
};
|
|
12
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
13
|
-
var t = {};
|
|
14
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
15
|
-
t[p] = s[p];
|
|
16
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
17
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
18
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
19
|
-
t[p[i]] = s[p[i]];
|
|
20
|
-
}
|
|
21
|
-
return t;
|
|
22
|
-
};
|
|
23
1
|
import React, { useMemo } from 'react';
|
|
24
2
|
import classNames from 'classnames';
|
|
25
3
|
import i18n from '../i18n/i18n';
|
|
26
4
|
import { isIOSSafari } from '../util/isIOSSafari';
|
|
27
|
-
export
|
|
28
|
-
var ariaInvalid = _a.ariaInvalid, value = _a.value, className = _a.className, _b = _a.locale, locale = _b === void 0 ? 'nb' : _b, rest = __rest(_a, ["ariaInvalid", "value", "className", "locale"]);
|
|
5
|
+
export const DateInput = React.forwardRef(({ ariaInvalid, value, className, locale = 'nb', ...rest }, ref) => {
|
|
29
6
|
// VoiceOver on iOS Safari blocks interaction with date-related inputs.
|
|
30
7
|
// Using role="textbox" as a workaround on that platform.
|
|
31
8
|
// https://dev.to/mfranzke/voiceover-bug-on-ios-safari-blocks-date-time-related-inputs-especially-in-react-4f61
|
|
32
|
-
|
|
33
|
-
return (React.createElement("input",
|
|
9
|
+
const role = useMemo(() => (isIOSSafari() ? 'textbox' : undefined), []);
|
|
10
|
+
return (React.createElement("input", { type: "date", role: role, "aria-invalid": ariaInvalid, maxLength: 10, ref: ref, "aria-placeholder": i18n[locale].DATE_FORMAT, value: value, className: classNames('ffe-input-field ffe-dateinput__field', className), ...rest }));
|
|
34
11
|
});
|
package/es/types.js
CHANGED
|
@@ -3,10 +3,10 @@ import i18n from '../i18n/i18n';
|
|
|
3
3
|
/**
|
|
4
4
|
* Generates month options for dropdown selection
|
|
5
5
|
*/
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
for (
|
|
9
|
-
|
|
6
|
+
export const getMonthOptions = (locale) => {
|
|
7
|
+
const months = [];
|
|
8
|
+
for (let i = 1; i <= 12; i++) {
|
|
9
|
+
const monthKey = `MONTH_${i}`;
|
|
10
10
|
months.push({
|
|
11
11
|
value: i,
|
|
12
12
|
label: i18n[locale][monthKey],
|
|
@@ -17,27 +17,27 @@ export var getMonthOptions = function (locale) {
|
|
|
17
17
|
/**
|
|
18
18
|
* Generates year options based on min and max dates, or defaults to standard range
|
|
19
19
|
*/
|
|
20
|
-
export
|
|
21
|
-
|
|
20
|
+
export const getYearOptions = (minDate, maxDate) => {
|
|
21
|
+
const currentYear = new Date().getFullYear();
|
|
22
22
|
// Default range: 6 years backward and 2 years forward
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
let minYear = currentYear - 6;
|
|
24
|
+
let maxYear = currentYear + 2;
|
|
25
25
|
// Use minDate year if provided
|
|
26
26
|
if (minDate) {
|
|
27
|
-
|
|
27
|
+
const minDateObj = getSimpleDateFromString(minDate);
|
|
28
28
|
if (minDateObj) {
|
|
29
29
|
minYear = minDateObj.year;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
// Use maxDate year if provided
|
|
33
33
|
if (maxDate) {
|
|
34
|
-
|
|
34
|
+
const maxDateObj = getSimpleDateFromString(maxDate);
|
|
35
35
|
if (maxDateObj) {
|
|
36
36
|
maxYear = maxDateObj.year;
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
-
|
|
40
|
-
for (
|
|
39
|
+
const years = [];
|
|
40
|
+
for (let i = minYear; i <= maxYear; i++) {
|
|
41
41
|
years.push({
|
|
42
42
|
value: i,
|
|
43
43
|
label: String(i),
|
package/es/util/dateUtil.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { padZero } from '../datepicker/padZero';
|
|
2
|
-
|
|
2
|
+
const dateRegex = /^(\d{1,2})(\.| |-|\/)?(\d{0,2})\2?(\d{0,2}(\d{2})?)$/;
|
|
3
3
|
export function validateDate(date) {
|
|
4
4
|
return dateRegex.exec(date);
|
|
5
5
|
}
|
|
@@ -8,5 +8,5 @@ export function isDateInputWithTwoDigitYear(value) {
|
|
|
8
8
|
return ((_a = validateDate(value)) === null || _a === void 0 ? void 0 : _a[4].length) === 2;
|
|
9
9
|
}
|
|
10
10
|
export function getPaddedDateString(day, month, year) {
|
|
11
|
-
return
|
|
11
|
+
return `${padZero(day !== null && day !== void 0 ? day : 0)}.${padZero(month !== null && month !== void 0 ? month : 0)}.${year}`;
|
|
12
12
|
}
|
package/es/util/isIOSSafari.js
CHANGED
|
@@ -8,15 +8,15 @@
|
|
|
8
8
|
* be affected by the same bug, but are not detected here since they don't
|
|
9
9
|
* include "Safari" in the user agent string.
|
|
10
10
|
*/
|
|
11
|
-
export
|
|
11
|
+
export const isIOSSafari = () => {
|
|
12
12
|
if (typeof navigator === 'undefined') {
|
|
13
13
|
return false;
|
|
14
14
|
}
|
|
15
|
-
|
|
15
|
+
const ua = navigator.userAgent;
|
|
16
16
|
// iPadOS 13+ in desktop mode reports as Macintosh, but can be identified
|
|
17
17
|
// by having touch points (real Macs have maxTouchPoints === 0).
|
|
18
|
-
|
|
18
|
+
const isIOS = /iP(ad|hone|od)/.test(ua) ||
|
|
19
19
|
(/Macintosh/.test(ua) && navigator.maxTouchPoints > 1);
|
|
20
|
-
|
|
20
|
+
const isSafari = !!ua.match(/Safari/) && !ua.match(/CriOS|FxiOS|OPiOS|EdgiOS/);
|
|
21
21
|
return isIOS && isSafari;
|
|
22
22
|
};
|
package/lib/button/Button.js
CHANGED
|
@@ -4,16 +4,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.Button = void 0;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
exports.Button = react_1.default.forwardRef(
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
? "".concat(i18n_1.default[locale].CHANGE_DATE, ", ").concat(i18n_1.default[locale].CHOSEN_DATE, " ").concat(value)
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const ffe_icons_react_1 = require("@sb1/ffe-icons-react");
|
|
9
|
+
const dateUtil_1 = require("../util/dateUtil");
|
|
10
|
+
const i18n_1 = __importDefault(require("../i18n/i18n"));
|
|
11
|
+
exports.Button = react_1.default.forwardRef(({ value, locale, onClick }, ref) => {
|
|
12
|
+
const buttonLabel = (0, dateUtil_1.validateDate)(value)
|
|
13
|
+
? `${i18n_1.default[locale].CHANGE_DATE}, ${i18n_1.default[locale].CHOSEN_DATE} ${value}`
|
|
15
14
|
: i18n_1.default[locale].CHOOSE_DATE;
|
|
16
|
-
|
|
15
|
+
const calendarMonthIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiPjxwYXRoIGQ9Ik0yMTIuMzA5LTEwMC4wMDFxLTMwLjMwOCAwLTUxLjMwOC0yMXQtMjEtNTEuMzA4di01MzUuMzgycTAtMzAuMzA4IDIxLTUxLjMwOHQ1MS4zMDgtMjFoNTUuMzg1di01My44NDdxMC0xMy4xNTMgOC44MDgtMjEuOTYxIDguODA3LTguODA3IDIxLjk2MS04LjgwNyAxMy4xNTMgMCAyMS45NjEgOC44MDcgOC44MDcgOC44MDggOC44MDcgMjEuOTYxdjUzLjg0N2gzMDMuMDc2di01NC42MTZxMC0xMi43NjkgOC42MTUtMjEuMzg0dDIxLjM4NC04LjYxNXExMi43NjkgMCAyMS4zODQgOC42MTUgOC42MTYgOC42MTUgOC42MTYgMjEuMzg0djU0LjYxNmg1NS4zODVxMzAuMzA4IDAgNTEuMzA4IDIxdDIxIDUxLjMwOHY1MzUuMzgycTAgMzAuMzA4LTIxIDUxLjMwOHQtNTEuMzA4IDIxSDIxMi4zMDlabTAtNTkuOTk5aDUzNS4zODJxNC42MTYgMCA4LjQ2My0zLjg0NiAzLjg0Ni0zLjg0NyAzLjg0Ni04LjQ2M3YtMzc1LjM4MkgyMDB2Mzc1LjM4MnEwIDQuNjE2IDMuODQ2IDguNDYzIDMuODQ3IDMuODQ2IDguNDYzIDMuODQ2Wk0yMDAtNjA3LjY5aDU2MHYtMTAwLjAwMXEwLTQuNjE2LTMuODQ2LTguNDYzLTMuODQ3LTMuODQ2LTguNDYzLTMuODQ2SDIxMi4zMDlxLTQuNjE2IDAtOC40NjMgMy44NDYtMy44NDYgMy44NDctMy44NDYgOC40NjN2MTAwLjAwMVptMCAwVi03MjB2MTEyLjMxWm0yODAgMjEwLjc2N3EtMTQuNjkyIDAtMjUuMDM4LTEwLjM0NnQtMTAuMzQ2LTI1LjAzOHEwLTE0LjY5MiAxMC4zNDYtMjUuMDM4VDQ4MC00NjcuNjkxcTE0LjY5MiAwIDI1LjAzOCAxMC4zNDZ0MTAuMzQ2IDI1LjAzOHEwIDE0LjY5Mi0xMC4zNDYgMjUuMDM4VDQ4MC0zOTYuOTIzWm0tMTYwIDBxLTE0LjY5MiAwLTI1LjAzOC0xMC4zNDZ0LTEwLjM0Ni0yNS4wMzhxMC0xNC42OTIgMTAuMzQ2LTI1LjAzOFQzMjAtNDY3LjY5MXExNC42OTIgMCAyNS4wMzggMTAuMzQ2dDEwLjM0NiAyNS4wMzhxMCAxNC42OTItMTAuMzQ2IDI1LjAzOFQzMjAtMzk2LjkyM1ptMzIwIDBxLTE0LjY5MiAwLTI1LjAzOC0xMC4zNDZ0LTEwLjM0Ni0yNS4wMzhxMC0xNC42OTIgMTAuMzQ2LTI1LjAzOFQ2NDAtNDY3LjY5MXExNC42OTIgMCAyNS4wMzggMTAuMzQ2dDEwLjM0NiAyNS4wMzhxMCAxNC42OTItMTAuMzQ2IDI1LjAzOFQ2NDAtMzk2LjkyM1pNNDgwLTI0MHEtMTQuNjkyIDAtMjUuMDM4LTEwLjM0NnQtMTAuMzQ2LTI1LjAzOHEwLTE0LjY5MiAxMC4zNDYtMjUuMDM4IDEwLjM0Ni0xMC4zNDcgMjUuMDM4LTEwLjM0N3QyNS4wMzggMTAuMzQ3cTEwLjM0NiAxMC4zNDYgMTAuMzQ2IDI1LjAzOHQtMTAuMzQ2IDI1LjAzOFE0OTQuNjkyLTI0MCA0ODAtMjQwWm0tMTYwIDBxLTE0LjY5MiAwLTI1LjAzOC0xMC4zNDZ0LTEwLjM0Ni0yNS4wMzhxMC0xNC42OTIgMTAuMzQ2LTI1LjAzOCAxMC4zNDYtMTAuMzQ3IDI1LjAzOC0xMC4zNDd0MjUuMDM4IDEwLjM0N3ExMC4zNDYgMTAuMzQ2IDEwLjM0NiAyNS4wMzh0LTEwLjM0NiAyNS4wMzhRMzM0LjY5Mi0yNDAgMzIwLTI0MFptMzIwIDBxLTE0LjY5MiAwLTI1LjAzOC0xMC4zNDZ0LTEwLjM0Ni0yNS4wMzhxMC0xNC42OTIgMTAuMzQ2LTI1LjAzOCAxMC4zNDYtMTAuMzQ3IDI1LjAzOC0xMC4zNDd0MjUuMDM4IDEwLjM0N3ExMC4zNDYgMTAuMzQ2IDEwLjM0NiAyNS4wMzh0LTEwLjM0NiAyNS4wMzhRNjU0LjY5Mi0yNDAgNjQwLTI0MFoiLz48L3N2Zz4=';
|
|
17
16
|
return (react_1.default.createElement("button", { "data-testid": "datepicker-open", ref: ref, onClick: onClick, className: "ffe-datepicker__button", "aria-label": buttonLabel, type: "button" },
|
|
18
17
|
react_1.default.createElement(ffe_icons_react_1.Icon, { ariaLabel: i18n_1.default[locale].CALENDAR_LABEL, fileUrl: calendarMonthIcon, size: "md", className: "ffe-datepicker__icon" })));
|
|
19
18
|
});
|