@entur/datepicker 11.2.1-beta.1 → 11.2.1-beta.4
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/dist/DatePicker/Calendar.d.ts +62 -0
- package/dist/DatePicker/CalendarCell.d.ts +14 -0
- package/dist/DatePicker/CalendarGrid.d.ts +15 -0
- package/dist/DatePicker/DateField.d.ts +90 -0
- package/dist/DatePicker/DatePicker.d.ts +44 -0
- package/dist/DatePicker/NativeDatePicker.d.ts +43 -0
- package/dist/DatePicker/index.d.ts +4 -0
- package/dist/TimePicker/NativeTimePicker.d.ts +32 -0
- package/dist/TimePicker/SimpleTimePicker.d.ts +49 -0
- package/dist/TimePicker/TimePicker.d.ts +70 -0
- package/dist/TimePicker/TimePickerArrowButton.d.ts +11 -0
- package/dist/TimePicker/index.d.ts +4 -0
- package/dist/datepicker.cjs.development.js +1269 -0
- package/dist/datepicker.cjs.development.js.map +1 -0
- package/dist/datepicker.cjs.production.min.js +2 -0
- package/dist/datepicker.cjs.production.min.js.map +1 -0
- package/dist/datepicker.esm.js +1047 -1046
- package/dist/datepicker.esm.js.map +1 -1
- package/dist/index.d.ts +6 -535
- package/dist/index.js +8 -0
- package/dist/shared/CalendarButton.d.ts +9 -0
- package/dist/shared/FieldSegment.d.ts +10 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/utils.d.ts +47 -0
- package/dist/styles.css +95 -81
- package/package.json +29 -47
- package/dist/datepicker.cjs.js +0 -1243
- package/dist/datepicker.cjs.js.map +0 -1
package/dist/datepicker.esm.js
CHANGED
|
@@ -1,759 +1,780 @@
|
|
|
1
|
-
import { useRandomId, ConditionalWrapper, mergeRefs, useWindowDimensions, useOnClickOutside, useOnEscape, useOnMount, warnAboutMissingStyles } from
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import
|
|
18
|
-
import
|
|
19
|
-
import {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
{
|
|
27
|
-
...segmentProps,
|
|
28
|
-
ref,
|
|
29
|
-
className: classNames("eds-date-and-time-field__segment", {
|
|
30
|
-
"eds-date-and-time-field__segment--placeholder": segment.isPlaceholder,
|
|
31
|
-
"eds-date-and-time-field__segment--dot-separator": segment.text === "." || segment.text === ":"
|
|
32
|
-
}),
|
|
33
|
-
tabIndex: state.isDisabled ? -1 : segmentProps.tabIndex,
|
|
34
|
-
...rest,
|
|
35
|
-
children: segment.text
|
|
1
|
+
import { useRandomId, ConditionalWrapper, mergeRefs, useWindowDimensions, useOnClickOutside, useOnEscape, useOnMount, warnAboutMissingStyles } from '@entur/utils';
|
|
2
|
+
import React, { useRef, useEffect, useState } from 'react';
|
|
3
|
+
import { useDateFieldState, useDatePickerState, useTimeFieldState } from '@react-stately/datepicker';
|
|
4
|
+
import { useDateSegment, useDateField, useDatePicker, useTimeField } from '@react-aria/datepicker';
|
|
5
|
+
import { useLocale, I18nProvider } from '@react-aria/i18n';
|
|
6
|
+
import classNames from 'classnames';
|
|
7
|
+
import { BaseFormControl, useVariant, useInputGroupContext, isFilled, TextField } from '@entur/form';
|
|
8
|
+
import { CalendarDate, Time, getLocalTimeZone, GregorianCalendar, toCalendarDateTime, toTime, now, toZoned, today, toCalendarDate, startOfWeek, startOfYear, ZonedDateTime, parseAbsolute, CalendarDateTime, isEqualDay, getWeeksInMonth, parseTime } from '@internationalized/date';
|
|
9
|
+
export { CalendarDate, CalendarDateTime, Time, ZonedDateTime } from '@internationalized/date';
|
|
10
|
+
import { useCalendarCell, useCalendarGrid, useCalendar } from '@react-aria/calendar';
|
|
11
|
+
import { useCalendarState } from '@react-stately/calendar';
|
|
12
|
+
import { LeftArrowIcon, RightArrowIcon, CalendarIcon, DateIcon, ClockIcon } from '@entur/icons';
|
|
13
|
+
import { useButton } from '@react-aria/button';
|
|
14
|
+
import { IconButton } from '@entur/button';
|
|
15
|
+
import { VisuallyHidden } from '@entur/a11y';
|
|
16
|
+
import { useFloating, autoUpdate, offset, flip, shift } from '@floating-ui/react-dom';
|
|
17
|
+
import FocusLock from 'react-focus-lock';
|
|
18
|
+
import { space, zIndexes } from '@entur/tokens';
|
|
19
|
+
import { Modal } from '@entur/modal';
|
|
20
|
+
|
|
21
|
+
function _extends() {
|
|
22
|
+
return _extends = Object.assign ? Object.assign.bind() : function (n) {
|
|
23
|
+
for (var e = 1; e < arguments.length; e++) {
|
|
24
|
+
var t = arguments[e];
|
|
25
|
+
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
|
|
36
26
|
}
|
|
37
|
-
|
|
27
|
+
return n;
|
|
28
|
+
}, _extends.apply(null, arguments);
|
|
29
|
+
}
|
|
30
|
+
function _objectWithoutPropertiesLoose(r, e) {
|
|
31
|
+
if (null == r) return {};
|
|
32
|
+
var t = {};
|
|
33
|
+
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
|
|
34
|
+
if (-1 !== e.indexOf(n)) continue;
|
|
35
|
+
t[n] = r[n];
|
|
36
|
+
}
|
|
37
|
+
return t;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
var _excluded$b = ["segment", "state"];
|
|
41
|
+
var FieldSegment = function FieldSegment(_ref) {
|
|
42
|
+
var segment = _ref.segment,
|
|
43
|
+
state = _ref.state,
|
|
44
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$b);
|
|
45
|
+
var ref = useRef(null);
|
|
46
|
+
var _useDateSegment = useDateSegment(segment, state, ref),
|
|
47
|
+
segmentProps = _useDateSegment.segmentProps;
|
|
48
|
+
return React.createElement("div", _extends({}, segmentProps, {
|
|
49
|
+
ref: ref,
|
|
50
|
+
className: classNames('eds-date-and-time-field__segment', {
|
|
51
|
+
'eds-date-and-time-field__segment--placeholder': segment.isPlaceholder,
|
|
52
|
+
'eds-date-and-time-field__segment--dot-separator': segment.text === '.' || segment.text === ':'
|
|
53
|
+
}),
|
|
54
|
+
tabIndex: state.isDisabled ? -1 : segmentProps.tabIndex
|
|
55
|
+
}, rest), segment.text);
|
|
38
56
|
};
|
|
39
|
-
|
|
57
|
+
|
|
58
|
+
var nativeDateToDateTime = function nativeDateToDateTime(date, timeZone, offset) {
|
|
40
59
|
if (timeZone) {
|
|
41
|
-
if (
|
|
42
|
-
return new ZonedDateTime(
|
|
43
|
-
date.getFullYear(),
|
|
44
|
-
date.getMonth() + 1,
|
|
45
|
-
date.getDate(),
|
|
46
|
-
timeZone,
|
|
47
|
-
offset2,
|
|
48
|
-
date.getHours(),
|
|
49
|
-
date.getMinutes(),
|
|
50
|
-
date.getSeconds(),
|
|
51
|
-
date.getMilliseconds()
|
|
52
|
-
);
|
|
60
|
+
if (offset) {
|
|
61
|
+
return new ZonedDateTime(date.getFullYear(), date.getMonth() + 1, date.getDate(), timeZone, offset, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());
|
|
53
62
|
}
|
|
54
63
|
return parseAbsolute(date.toISOString(), timeZone);
|
|
55
64
|
}
|
|
56
|
-
return new CalendarDateTime(
|
|
57
|
-
date.getFullYear(),
|
|
58
|
-
date.getMonth() + 1,
|
|
59
|
-
date.getDate(),
|
|
60
|
-
date.getHours(),
|
|
61
|
-
date.getMinutes(),
|
|
62
|
-
date.getSeconds(),
|
|
63
|
-
date.getMilliseconds()
|
|
64
|
-
);
|
|
65
|
+
return new CalendarDateTime(date.getFullYear(), date.getMonth() + 1, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());
|
|
65
66
|
};
|
|
66
|
-
|
|
67
|
+
/**
|
|
68
|
+
* Tar inn et JS Date-objekt og returnerer et av DateValue-objektene fra @internationalized/date-pakken
|
|
69
|
+
* @param {Date | null} date JS Date-objekt som ønskes konvertert til et DateValue-objekt
|
|
70
|
+
* @param {boolean} noTimeOnlyDate Hvis tidspunktet er irrelevant kan denne settes til true, da får man et CalendarDate-objekt uten tidspunkt tilbake
|
|
71
|
+
* @param {string} timeZone Tidssonen på IANA-formatet som tidpunktet skal konverteres til. Utelates denne får man et tidspunkt uten tidssone. Kan brukes med og uten en UTC-offset Vær obs på annen oppførsel med offset, les mer på beskrivelsen av offset
|
|
72
|
+
* @param {number} offset UTC-offset i millisekunder, må brukes med en tidssone. Ved å legge på en offset lager du en variant av en tidssone. Det betyr at tidspunktet ikke endres (time, minutt, sekund uendret), men tidssonen, med tilhørende offset, tidspunktet er i endres.
|
|
73
|
+
* @returns {CalendarDateTime | ZonedDateTime | CalendarDate | null} et av DateValue-objektene med verdier fra date eller null
|
|
74
|
+
*/
|
|
75
|
+
function nativeDateToDateValue(date, noTimeOnlyDate, timeZone, offset) {
|
|
76
|
+
if (noTimeOnlyDate === void 0) {
|
|
77
|
+
noTimeOnlyDate = false;
|
|
78
|
+
}
|
|
67
79
|
if (date === null) return null;
|
|
68
|
-
if (noTimeOnlyDate)
|
|
69
|
-
|
|
70
|
-
date.getFullYear(),
|
|
71
|
-
date.getMonth() + 1,
|
|
72
|
-
date.getDate()
|
|
73
|
-
);
|
|
74
|
-
return nativeDateToDateTime(date, timeZone, offset2);
|
|
80
|
+
if (noTimeOnlyDate) return new CalendarDate(date.getFullYear(), date.getMonth() + 1, date.getDate());
|
|
81
|
+
return nativeDateToDateTime(date, timeZone, offset);
|
|
75
82
|
}
|
|
76
|
-
|
|
83
|
+
/**
|
|
84
|
+
* Tar inn et JS Date-objekt og returnerer et av TimeValue-objektene fra @internationalized/date-pakken
|
|
85
|
+
* @param {Date | null} date JS Date-objekt som ønskes konvertert til et TimeValue-objekt
|
|
86
|
+
* @param {boolean} noDateOnlyTime Hvis datoen er irrelevant kan denne settes til true, da får man et Time-objekt uten dato tilbake
|
|
87
|
+
* @param {string} timeZone Tidssonen på IANA-formatet som tidpunktet skal konverteres til. Utelates denne får man et tidspunkt uten tidssone. Kan brukes med og uten en UTC-offset Vær obs på annen oppførsel med offset, les mer på beskrivelsen av offset
|
|
88
|
+
* @param {number} offset UTC-offset i millisekunder, må brukes med en tidssone. Ved å legge på en offset lager du en variant av en tidssone. Det betyr at tidspunktet ikke endres (time, minutt, sekund uendret), men tidssonen, med tilhørende offset, tidspunktet er i endres.
|
|
89
|
+
* @returns {Time | CalendarDateTime | ZonedDateTime | null} et av TimeValue-objektene med verdier fra date eller null
|
|
90
|
+
*/
|
|
91
|
+
function nativeDateToTimeValue(date, noDateOnlyTime, timeZone, offset) {
|
|
92
|
+
if (noDateOnlyTime === void 0) {
|
|
93
|
+
noDateOnlyTime = false;
|
|
94
|
+
}
|
|
77
95
|
if (date === null) return null;
|
|
78
|
-
if (noDateOnlyTime)
|
|
79
|
-
|
|
80
|
-
date.getHours(),
|
|
81
|
-
date.getMinutes(),
|
|
82
|
-
date.getSeconds(),
|
|
83
|
-
date.getMilliseconds()
|
|
84
|
-
);
|
|
85
|
-
return nativeDateToDateTime(date, timeZone, offset2);
|
|
96
|
+
if (noDateOnlyTime) return new Time(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());
|
|
97
|
+
return nativeDateToDateTime(date, timeZone, offset);
|
|
86
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Tar inn et av Date- eller TimeValue-objektene fra \@internationalized/date-pakken og returnerer et JS Date-objekt
|
|
101
|
+
* @param {DateValue | TimeValue | null} value En dato eller et tidspunkt på Date- eller TimeValue-formatet som ønskes konvertert til et JS Date-objekt
|
|
102
|
+
* @param {string} timeZoneForCalendarDateTime Tidssonen value er i. Fungerer kun med typen er CalendarDateTime
|
|
103
|
+
* @returns {Date | null} et Date-objekt med verdier fra time eller null
|
|
104
|
+
*/
|
|
87
105
|
function timeOrDateValueToNativeDate(value, timeZoneForCalendarDateTime) {
|
|
88
106
|
if (value === null) return null;
|
|
89
|
-
|
|
90
|
-
|
|
107
|
+
// type is Time
|
|
108
|
+
if (!('day' in value)) {
|
|
109
|
+
var date = new Date();
|
|
91
110
|
date.setHours(value.hour);
|
|
92
111
|
date.setMinutes(value.minute);
|
|
93
112
|
date.setSeconds(value.second);
|
|
94
113
|
date.setMilliseconds(value.millisecond);
|
|
95
114
|
return date;
|
|
96
115
|
}
|
|
97
|
-
|
|
98
|
-
|
|
116
|
+
// type is CalendarDate
|
|
117
|
+
if (!('hour' in value)) {
|
|
118
|
+
return value.toDate(timeZoneForCalendarDateTime != null ? timeZoneForCalendarDateTime : getLocalTimeZone());
|
|
99
119
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
120
|
+
// type is CalendarDateTime
|
|
121
|
+
if (!('timeZone' in value)) {
|
|
122
|
+
if (timeZoneForCalendarDateTime) return value.toDate(timeZoneForCalendarDateTime);
|
|
103
123
|
return value.toDate(getLocalTimeZone());
|
|
104
124
|
}
|
|
125
|
+
// type is ZonedDateTime
|
|
105
126
|
return value.toDate();
|
|
106
127
|
}
|
|
107
|
-
|
|
128
|
+
var createCalendar = function createCalendar(identifier) {
|
|
129
|
+
if (identifier === void 0) {
|
|
130
|
+
identifier = 'gregory';
|
|
131
|
+
}
|
|
108
132
|
switch (identifier) {
|
|
109
|
-
case
|
|
133
|
+
case 'gregory':
|
|
110
134
|
return new GregorianCalendar();
|
|
111
135
|
default:
|
|
112
|
-
throw new Error(
|
|
136
|
+
throw new Error("Unsupported calendar " + identifier);
|
|
113
137
|
}
|
|
114
138
|
};
|
|
115
|
-
|
|
116
|
-
if (locale.toLowerCase() !==
|
|
139
|
+
var ariaLabelIfNorwegian = function ariaLabelIfNorwegian(norwegianAriaLabel, locale, propsCollection) {
|
|
140
|
+
if (locale.toLowerCase() !== 'no-no') return propsCollection['aria-label'];
|
|
117
141
|
return norwegianAriaLabel;
|
|
118
142
|
};
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
143
|
+
var lastMillisecondOfDay = function lastMillisecondOfDay(dateValue) {
|
|
144
|
+
return toCalendarDateTime(dateValue.add({
|
|
145
|
+
days: 1
|
|
146
|
+
})).add({
|
|
147
|
+
milliseconds: -1
|
|
148
|
+
});
|
|
149
|
+
};
|
|
150
|
+
var convertValueToType = function convertValueToType(_ref) {
|
|
151
|
+
var value = _ref.value,
|
|
152
|
+
type = _ref.type,
|
|
153
|
+
_ref$timezone = _ref.timezone,
|
|
154
|
+
timezone = _ref$timezone === void 0 ? 'Europe/Oslo' : _ref$timezone;
|
|
127
155
|
if (value === null) return null;
|
|
128
156
|
switch (type) {
|
|
129
|
-
case
|
|
130
|
-
if (!(
|
|
157
|
+
case 'CalendarDate':
|
|
158
|
+
if (!('day' in value)) return today(timezone);
|
|
131
159
|
return toCalendarDate(value);
|
|
132
|
-
case
|
|
133
|
-
if (!(
|
|
160
|
+
case 'CalendarDateTime':
|
|
161
|
+
if (!('day' in value)) return toCalendarDateTime(today(timezone), value);
|
|
134
162
|
return toCalendarDateTime(value);
|
|
135
|
-
case
|
|
136
|
-
if (!(
|
|
137
|
-
return toZoned(toCalendarDateTime(today(timezone), value), timezone);
|
|
163
|
+
case 'ZonedDateTime':
|
|
164
|
+
if (!('day' in value)) return toZoned(toCalendarDateTime(today(timezone), value), timezone);
|
|
138
165
|
return toZoned(value, timezone);
|
|
139
|
-
case
|
|
140
|
-
if (!(
|
|
141
|
-
if (!(
|
|
166
|
+
case 'Time':
|
|
167
|
+
if (!('hour' in value)) return toTime(now(timezone));
|
|
168
|
+
if (!('day' in value)) return value;
|
|
142
169
|
return toTime(value);
|
|
143
170
|
default:
|
|
144
171
|
return value;
|
|
145
172
|
}
|
|
146
173
|
};
|
|
147
|
-
|
|
148
|
-
|
|
174
|
+
var modulo = function modulo(a, b) {
|
|
175
|
+
return (a % b + b) % b;
|
|
176
|
+
};
|
|
177
|
+
var focusSegment = function focusSegment(ref, segment) {
|
|
149
178
|
if (ref.current) {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
const firstSegment = segments[0];
|
|
154
|
-
const lastSegment = segments[segments.length - 1];
|
|
179
|
+
var segments = ref.current.querySelectorAll('.eds-date-and-time-field__segment');
|
|
180
|
+
var firstSegment = segments[0];
|
|
181
|
+
var lastSegment = segments[segments.length - 1];
|
|
155
182
|
switch (segment) {
|
|
156
|
-
case
|
|
183
|
+
case 'first':
|
|
157
184
|
return firstSegment.focus();
|
|
158
|
-
case
|
|
185
|
+
case 'last':
|
|
159
186
|
return lastSegment.focus();
|
|
160
187
|
}
|
|
161
188
|
}
|
|
162
189
|
};
|
|
190
|
+
/** Based on code from https://stackoverflow.com/questions/6117814/get-week-of-year-in-javascript-like-in-php */
|
|
163
191
|
function getWeekNumberForDate(date) {
|
|
164
192
|
if (date === null) return -1;
|
|
165
|
-
|
|
193
|
+
var calendarDate = convertValueToType({
|
|
166
194
|
value: date,
|
|
167
|
-
type:
|
|
195
|
+
type: 'CalendarDate'
|
|
196
|
+
});
|
|
197
|
+
var firstDayOfWeek = startOfWeek(calendarDate, 'no-NO');
|
|
198
|
+
var thursdayOfWeek = firstDayOfWeek.add({
|
|
199
|
+
days: 3
|
|
168
200
|
});
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
const firstDayOfYearForThursday = startOfYear(thursdayOfWeek);
|
|
172
|
-
const weekNumber = Math.ceil(
|
|
173
|
-
(thursdayOfWeek.compare(firstDayOfYearForThursday) + 1) / 7
|
|
174
|
-
);
|
|
201
|
+
var firstDayOfYearForThursday = startOfYear(thursdayOfWeek);
|
|
202
|
+
var weekNumber = Math.ceil((thursdayOfWeek.compare(firstDayOfYearForThursday) + 1) / 7);
|
|
175
203
|
return weekNumber;
|
|
176
204
|
}
|
|
177
|
-
function handleOnChange({
|
|
178
|
-
value,
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
timezone: value !== null && "timezone" in value ? value.timezone : void 0
|
|
189
|
-
})
|
|
190
|
-
);
|
|
205
|
+
function handleOnChange(_ref2) {
|
|
206
|
+
var value = _ref2.value,
|
|
207
|
+
selectedDate = _ref2.selectedDate,
|
|
208
|
+
forcedReturnType = _ref2.forcedReturnType,
|
|
209
|
+
onChange = _ref2.onChange;
|
|
210
|
+
if (forcedReturnType !== undefined || !selectedDate) {
|
|
211
|
+
return onChange == null ? void 0 : onChange(convertValueToType({
|
|
212
|
+
value: value,
|
|
213
|
+
type: forcedReturnType != null ? forcedReturnType : 'ZonedDateTime',
|
|
214
|
+
timezone: value !== null && 'timezone' in value ? value.timezone : undefined
|
|
215
|
+
}));
|
|
191
216
|
}
|
|
192
|
-
onChange
|
|
217
|
+
onChange == null || onChange(value);
|
|
193
218
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
219
|
+
|
|
220
|
+
var _excluded$a = ["selectedDate", "onChange", "label", "locale", "showTimeZone", "showTime", "granularity", "disabled", "readOnly", "isDisabled", "variant", "feedback", "validationVariant", "validationFeedback", "labelTooltip", "minDate", "maxDate", "forcedReturnType", "style", "className", "labelProps", "append", "prepend", "onValidate", "dateFieldRef"];
|
|
221
|
+
var DateField = function DateField(_ref) {
|
|
222
|
+
var selectedDate = _ref.selectedDate,
|
|
223
|
+
_onChange = _ref.onChange,
|
|
224
|
+
label = _ref.label,
|
|
225
|
+
customLocale = _ref.locale,
|
|
226
|
+
showTimeZone = _ref.showTimeZone,
|
|
227
|
+
showTime = _ref.showTime,
|
|
228
|
+
_ref$granularity = _ref.granularity,
|
|
229
|
+
granularity = _ref$granularity === void 0 ? showTime ? 'minute' : 'day' : _ref$granularity,
|
|
230
|
+
disabled = _ref.disabled,
|
|
231
|
+
readOnly = _ref.readOnly,
|
|
232
|
+
isDisabled = _ref.isDisabled,
|
|
233
|
+
variant = _ref.variant,
|
|
234
|
+
feedback = _ref.feedback,
|
|
235
|
+
_ref$validationVarian = _ref.validationVariant,
|
|
236
|
+
validationVariant = _ref$validationVarian === void 0 ? 'negative' : _ref$validationVarian,
|
|
237
|
+
_ref$validationFeedba = _ref.validationFeedback,
|
|
238
|
+
validationFeedback = _ref$validationFeedba === void 0 ? 'Ugyldig dato' : _ref$validationFeedba,
|
|
239
|
+
labelTooltip = _ref.labelTooltip,
|
|
240
|
+
minDate = _ref.minDate,
|
|
241
|
+
maxDate = _ref.maxDate,
|
|
242
|
+
forcedReturnType = _ref.forcedReturnType,
|
|
243
|
+
style = _ref.style,
|
|
244
|
+
className = _ref.className,
|
|
245
|
+
parentLabelProps = _ref.labelProps,
|
|
246
|
+
append = _ref.append,
|
|
247
|
+
prepend = _ref.prepend,
|
|
248
|
+
onValidate = _ref.onValidate,
|
|
249
|
+
ref = _ref.dateFieldRef,
|
|
250
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$a);
|
|
251
|
+
var _useLocale = useLocale(),
|
|
252
|
+
locale = _useLocale.locale;
|
|
253
|
+
var _props = _extends({}, rest, {
|
|
254
|
+
label: label,
|
|
255
|
+
locale: customLocale != null ? customLocale : locale,
|
|
256
|
+
createCalendar: createCalendar,
|
|
228
257
|
value: selectedDate,
|
|
229
|
-
onChange: (value)
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
258
|
+
onChange: function onChange(value) {
|
|
259
|
+
return handleOnChange({
|
|
260
|
+
value: value,
|
|
261
|
+
selectedDate: selectedDate,
|
|
262
|
+
forcedReturnType: forcedReturnType,
|
|
263
|
+
onChange: _onChange
|
|
264
|
+
});
|
|
265
|
+
},
|
|
235
266
|
hideTimeZone: !showTimeZone,
|
|
236
|
-
granularity,
|
|
267
|
+
granularity: granularity,
|
|
237
268
|
minValue: minDate,
|
|
238
269
|
// this weird logic makes sure the entire day is included if no time is provided in maxDate
|
|
239
|
-
maxValue:
|
|
270
|
+
maxValue: 'hour' in (maxDate != null ? maxDate : {}) ? maxDate : maxDate !== undefined ? lastMillisecondOfDay(maxDate) : undefined,
|
|
240
271
|
isDisabled: isDisabled || disabled || readOnly,
|
|
241
272
|
shouldForceLeadingZeros: true
|
|
242
|
-
};
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
className: classNames("eds-datefield", className, {
|
|
259
|
-
"eds-datefield--has-tooltip": labelTooltip !== void 0
|
|
260
|
-
}),
|
|
261
|
-
disabled: isDisabled || disabled,
|
|
262
|
-
readOnly,
|
|
263
|
-
disableLabelAnimation: true,
|
|
264
|
-
feedback: feedback ?? (state.validationState === "invalid" ? validationFeedback : void 0),
|
|
265
|
-
label,
|
|
266
|
-
labelId: id,
|
|
267
|
-
labelProps: parentLabelProps ?? labelProps,
|
|
268
|
-
labelTooltip,
|
|
269
|
-
prepend,
|
|
270
|
-
ref: mergeRefs(ref, dateFieldRef),
|
|
271
|
-
style,
|
|
272
|
-
variant: variant ?? (state.isInvalid ? validationVariant : void 0),
|
|
273
|
-
...fieldProps,
|
|
274
|
-
children: state.segments.map((segment, i) => /* @__PURE__ */ jsx(FieldSegment, { segment, state }, i))
|
|
275
|
-
}
|
|
276
|
-
)
|
|
273
|
+
});
|
|
274
|
+
var state = useDateFieldState(_props);
|
|
275
|
+
var dateFieldRef = useRef(null);
|
|
276
|
+
var _useDateField = useDateField(_props, state, dateFieldRef),
|
|
277
|
+
labelProps = _useDateField.labelProps,
|
|
278
|
+
fieldProps = _useDateField.fieldProps;
|
|
279
|
+
useEffect(function () {
|
|
280
|
+
return onValidate == null ? void 0 : onValidate(!state.isInvalid);
|
|
281
|
+
}, [state.isInvalid]);
|
|
282
|
+
var id = useRandomId('datefield');
|
|
283
|
+
return React.createElement(ConditionalWrapper, {
|
|
284
|
+
condition: customLocale !== undefined,
|
|
285
|
+
wrapper: function wrapper(child) {
|
|
286
|
+
return React.createElement(I18nProvider, {
|
|
287
|
+
locale: customLocale
|
|
288
|
+
}, child);
|
|
277
289
|
}
|
|
278
|
-
|
|
290
|
+
}, React.createElement(BaseFormControl, _extends({
|
|
291
|
+
append: append,
|
|
292
|
+
ariaAlertOnFeedback: true,
|
|
293
|
+
className: classNames('eds-datefield', className, {
|
|
294
|
+
'eds-datefield--has-tooltip': labelTooltip !== undefined
|
|
295
|
+
}),
|
|
296
|
+
disabled: isDisabled || disabled,
|
|
297
|
+
readOnly: readOnly,
|
|
298
|
+
disableLabelAnimation: true,
|
|
299
|
+
feedback: feedback != null ? feedback : state.validationState === 'invalid' ? validationFeedback : undefined,
|
|
300
|
+
label: label,
|
|
301
|
+
labelId: id,
|
|
302
|
+
labelProps: parentLabelProps != null ? parentLabelProps : labelProps,
|
|
303
|
+
labelTooltip: labelTooltip,
|
|
304
|
+
prepend: prepend,
|
|
305
|
+
ref: mergeRefs(ref, dateFieldRef),
|
|
306
|
+
style: style,
|
|
307
|
+
variant: variant != null ? variant : state.isInvalid ? validationVariant : undefined
|
|
308
|
+
}, fieldProps), state.segments.map(function (segment, i) {
|
|
309
|
+
return React.createElement(FieldSegment, {
|
|
310
|
+
segment: segment,
|
|
311
|
+
state: state,
|
|
312
|
+
key: i
|
|
313
|
+
});
|
|
314
|
+
})));
|
|
279
315
|
};
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
316
|
+
|
|
317
|
+
var _excluded$9 = ["children", "className", "style"];
|
|
318
|
+
var CalendarButton = function CalendarButton(_ref) {
|
|
319
|
+
var children = _ref.children,
|
|
320
|
+
className = _ref.className,
|
|
321
|
+
style = _ref.style,
|
|
322
|
+
props = _objectWithoutPropertiesLoose(_ref, _excluded$9);
|
|
323
|
+
var ref = useRef(null);
|
|
324
|
+
var _useButton = useButton(props, ref),
|
|
325
|
+
buttonProps = _useButton.buttonProps;
|
|
326
|
+
return React.createElement(IconButton, _extends({}, buttonProps, {
|
|
327
|
+
ref: ref,
|
|
328
|
+
className: className,
|
|
329
|
+
style: style
|
|
330
|
+
}), children);
|
|
289
331
|
};
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
332
|
+
|
|
333
|
+
var _excluded$8 = ["state", "date", "onSelectedCellClick", "onCellClick", "weekNumberString", "classNameForDate", "ariaLabelForDate"];
|
|
334
|
+
var CalendarCell = function CalendarCell(_ref) {
|
|
335
|
+
var _ariaLabelForDate, _classNameForDate, _state$timeZone, _classNames;
|
|
336
|
+
var state = _ref.state,
|
|
337
|
+
date = _ref.date,
|
|
338
|
+
_ref$onSelectedCellCl = _ref.onSelectedCellClick,
|
|
339
|
+
onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
|
|
340
|
+
return;
|
|
341
|
+
} : _ref$onSelectedCellCl,
|
|
342
|
+
_ref$onCellClick = _ref.onCellClick,
|
|
343
|
+
onCellClick = _ref$onCellClick === void 0 ? function () {
|
|
344
|
+
return;
|
|
345
|
+
} : _ref$onCellClick,
|
|
346
|
+
weekNumberString = _ref.weekNumberString,
|
|
347
|
+
classNameForDate = _ref.classNameForDate,
|
|
348
|
+
ariaLabelForDate = _ref.ariaLabelForDate,
|
|
349
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$8);
|
|
350
|
+
var cellRef = useRef(null);
|
|
351
|
+
var _useCalendarCell = useCalendarCell({
|
|
352
|
+
date: date
|
|
353
|
+
}, state, cellRef),
|
|
354
|
+
cellProps = _useCalendarCell.cellProps,
|
|
355
|
+
buttonProps = _useCalendarCell.buttonProps,
|
|
356
|
+
isSelected = _useCalendarCell.isSelected,
|
|
357
|
+
isOutsideVisibleRange = _useCalendarCell.isOutsideVisibleRange,
|
|
358
|
+
isDisabled = _useCalendarCell.isDisabled,
|
|
359
|
+
isUnavailable = _useCalendarCell.isUnavailable,
|
|
360
|
+
formattedDate = _useCalendarCell.formattedDate;
|
|
361
|
+
var ariaLabel = "" + buttonProps['aria-label'] + weekNumberString + " " + ((_ariaLabelForDate = ariaLabelForDate == null ? void 0 : ariaLabelForDate(date)) != null ? _ariaLabelForDate : '');
|
|
362
|
+
var cellCanBeSelected = !(isOutsideVisibleRange || isDisabled || isUnavailable);
|
|
363
|
+
return React.createElement("td", _extends({}, cellProps, {
|
|
364
|
+
className: "eds-datepicker__calendar__grid__cell__td"
|
|
365
|
+
}), React.createElement("div", _extends({}, buttonProps, {
|
|
366
|
+
"aria-label": ariaLabel,
|
|
367
|
+
"aria-hidden": isOutsideVisibleRange,
|
|
368
|
+
ref: cellRef,
|
|
369
|
+
hidden: isOutsideVisibleRange,
|
|
370
|
+
className: classNames('eds-datepicker__calendar__grid__cell', (_classNames = {}, _classNames[(_classNameForDate = classNameForDate == null ? void 0 : classNameForDate(date)) != null ? _classNameForDate : ''] = !isOutsideVisibleRange, _classNames['eds-datepicker__calendar__grid__cell--selected'] = isSelected, _classNames['eds-datepicker__calendar__grid__cell--disabled'] = isDisabled || isUnavailable, _classNames['eds-datepicker__calendar__grid__cell--outside-month'] = isOutsideVisibleRange, _classNames['eds-datepicker__calendar__grid__cell--today'] = isEqualDay(date, now((_state$timeZone = state.timeZone) != null ? _state$timeZone : getLocalTimeZone())), _classNames))
|
|
371
|
+
}, rest, {
|
|
372
|
+
onClick: function onClick(e) {
|
|
373
|
+
buttonProps.onClick && buttonProps.onClick(e);
|
|
374
|
+
// Used to force close calendar on select
|
|
375
|
+
isSelected && onSelectedCellClick();
|
|
376
|
+
cellCanBeSelected && onCellClick();
|
|
377
|
+
},
|
|
378
|
+
onKeyUp: function onKeyUp(e) {
|
|
379
|
+
buttonProps.onKeyUp && buttonProps.onKeyUp(e);
|
|
380
|
+
if (e.key === 'Enter') {
|
|
381
|
+
// Used to force close calendar on select
|
|
337
382
|
isSelected && onSelectedCellClick();
|
|
338
383
|
cellCanBeSelected && onCellClick();
|
|
339
|
-
}
|
|
340
|
-
onKeyUp: (e) => {
|
|
341
|
-
buttonProps.onKeyUp && buttonProps.onKeyUp(e);
|
|
342
|
-
if (e.key === "Enter") {
|
|
343
|
-
isSelected && onSelectedCellClick();
|
|
344
|
-
cellCanBeSelected && onCellClick();
|
|
345
|
-
}
|
|
346
|
-
},
|
|
347
|
-
children: formattedDate
|
|
384
|
+
}
|
|
348
385
|
}
|
|
349
|
-
)
|
|
386
|
+
}), formattedDate));
|
|
350
387
|
};
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
388
|
+
|
|
389
|
+
var _excluded$7 = ["state", "navigationDescription", "onSelectedCellClick", "onCellClick", "showWeekNumbers", "weekNumberHeader", "classNameForDate", "ariaLabelForDate"];
|
|
390
|
+
var CalendarGrid = function CalendarGrid(_ref) {
|
|
391
|
+
var state = _ref.state,
|
|
392
|
+
navigationDescription = _ref.navigationDescription,
|
|
393
|
+
_ref$onSelectedCellCl = _ref.onSelectedCellClick,
|
|
394
|
+
onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
|
|
395
|
+
return;
|
|
396
|
+
} : _ref$onSelectedCellCl,
|
|
397
|
+
_ref$onCellClick = _ref.onCellClick,
|
|
398
|
+
onCellClick = _ref$onCellClick === void 0 ? function () {
|
|
399
|
+
return;
|
|
400
|
+
} : _ref$onCellClick,
|
|
401
|
+
showWeekNumbers = _ref.showWeekNumbers,
|
|
402
|
+
weekNumberHeader = _ref.weekNumberHeader,
|
|
403
|
+
classNameForDate = _ref.classNameForDate,
|
|
404
|
+
ariaLabelForDate = _ref.ariaLabelForDate,
|
|
405
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$7);
|
|
406
|
+
var calendarGridId = useRandomId('eds-calendar');
|
|
407
|
+
var _useLocale = useLocale(),
|
|
408
|
+
locale = _useLocale.locale;
|
|
409
|
+
var _useCalendarGrid = useCalendarGrid(rest, state),
|
|
410
|
+
gridProps = _useCalendarGrid.gridProps,
|
|
411
|
+
headerProps = _useCalendarGrid.headerProps,
|
|
412
|
+
weekDays = _useCalendarGrid.weekDays;
|
|
413
|
+
var weeksInMonth = getWeeksInMonth(state.visibleRange.start, locale);
|
|
414
|
+
var weeksArray = Array.from(Array(weeksInMonth).keys());
|
|
415
|
+
var weekDaysMapped = function weekDaysMapped() {
|
|
416
|
+
if (locale.toLowerCase().includes('no')) return ['ma', 'ti', 'on', 'to', 'fr', 'lø', 'sø'];
|
|
417
|
+
if (locale.toLowerCase().includes('en')) {
|
|
418
|
+
if (weekDays[0] === 'M') return ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];
|
|
419
|
+
if (weekDays[0] === 'S') return ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];
|
|
379
420
|
}
|
|
380
|
-
return weekDays.map((day)
|
|
421
|
+
return weekDays.map(function (day) {
|
|
422
|
+
return day.toLowerCase();
|
|
423
|
+
});
|
|
381
424
|
};
|
|
382
|
-
|
|
425
|
+
var getNavigationDescription = function getNavigationDescription() {
|
|
383
426
|
if (navigationDescription) return navigationDescription;
|
|
384
|
-
if (locale.toLowerCase().includes(
|
|
385
|
-
|
|
386
|
-
return "Bruk piltastene til å navigere mellom datoer";
|
|
427
|
+
if (locale.toLowerCase().includes('en')) return 'Use the arrow keys to navigate between dates';
|
|
428
|
+
return 'Bruk piltastene til å navigere mellom datoer';
|
|
387
429
|
};
|
|
388
|
-
return
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
onCellClick,
|
|
423
|
-
classNameForDate,
|
|
424
|
-
ariaLabelForDate
|
|
425
|
-
},
|
|
426
|
-
`${date.month}.${date.day}`
|
|
427
|
-
) : /* @__PURE__ */ jsx("td", {}, i)
|
|
428
|
-
)
|
|
429
|
-
] }, weekIndex);
|
|
430
|
-
}) })
|
|
431
|
-
]
|
|
432
|
-
}
|
|
433
|
-
),
|
|
434
|
-
/* @__PURE__ */ jsx(VisuallyHidden, { id: calendarGridId + "description", children: getNavigationDescription() })
|
|
435
|
-
] });
|
|
430
|
+
return React.createElement(React.Fragment, null, React.createElement("table", _extends({}, gridProps, {
|
|
431
|
+
cellSpacing: "0",
|
|
432
|
+
className: "eds-datepicker__calendar__grid"
|
|
433
|
+
}), React.createElement("thead", _extends({}, headerProps), React.createElement("tr", null, showWeekNumbers && React.createElement("th", {
|
|
434
|
+
className: "eds-datepicker__calendar__grid__weeknumber-header"
|
|
435
|
+
}, weekNumberHeader), weekDaysMapped().map(function (day) {
|
|
436
|
+
return React.createElement("th", {
|
|
437
|
+
key: day
|
|
438
|
+
}, day);
|
|
439
|
+
}))), React.createElement("tbody", null, weeksArray.map(function (weekIndex) {
|
|
440
|
+
var weekNumber = getWeekNumberForDate(state.getDatesInWeek(weekIndex)[0]);
|
|
441
|
+
return React.createElement("tr", {
|
|
442
|
+
key: weekIndex
|
|
443
|
+
}, showWeekNumbers && React.createElement("th", {
|
|
444
|
+
"aria-hidden": true,
|
|
445
|
+
className: "eds-datepicker__calendar__grid__weeknumber"
|
|
446
|
+
}, weekNumber), state.getDatesInWeek(weekIndex).map(function (date, i) {
|
|
447
|
+
return date ? React.createElement(CalendarCell, {
|
|
448
|
+
key: date.month + "." + date.day,
|
|
449
|
+
state: state,
|
|
450
|
+
date: date,
|
|
451
|
+
"aria-describedby": calendarGridId + 'description',
|
|
452
|
+
weekNumberString: showWeekNumbers ? ", " + weekNumberHeader + " " + weekNumber + "," : '',
|
|
453
|
+
onSelectedCellClick: onSelectedCellClick,
|
|
454
|
+
onCellClick: onCellClick,
|
|
455
|
+
classNameForDate: classNameForDate,
|
|
456
|
+
ariaLabelForDate: ariaLabelForDate
|
|
457
|
+
}) : React.createElement("td", {
|
|
458
|
+
key: i
|
|
459
|
+
});
|
|
460
|
+
}));
|
|
461
|
+
}))), React.createElement(VisuallyHidden, {
|
|
462
|
+
id: calendarGridId + 'description'
|
|
463
|
+
}, getNavigationDescription()));
|
|
436
464
|
};
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
465
|
+
|
|
466
|
+
var _excluded$6 = ["locale"],
|
|
467
|
+
_excluded2$3 = ["selectedDate", "onChange", "minDate", "maxDate", "showWeekNumbers", "weekNumberHeader", "forcedReturnType", "style", "className", "navigationDescription", "onSelectedCellClick", "onCellClick", "classNameForDate", "ariaLabelForDate", "calendarRef"];
|
|
468
|
+
var Calendar = function Calendar(_ref) {
|
|
469
|
+
var localOverride = _ref.locale,
|
|
470
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
|
|
471
|
+
var props = _extends({
|
|
472
|
+
isDisabled: rest.disabled
|
|
473
|
+
}, rest);
|
|
474
|
+
var _useLocale = useLocale(),
|
|
475
|
+
locale = _useLocale.locale;
|
|
476
|
+
return React.createElement(I18nProvider, {
|
|
477
|
+
locale: localOverride != null ? localOverride : locale
|
|
478
|
+
}, React.createElement(CalendarBase, _extends({}, props)));
|
|
444
479
|
};
|
|
445
|
-
|
|
446
|
-
selectedDate,
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
480
|
+
var CalendarBase = function CalendarBase(_ref2) {
|
|
481
|
+
var selectedDate = _ref2.selectedDate,
|
|
482
|
+
_onChange = _ref2.onChange,
|
|
483
|
+
minDate = _ref2.minDate,
|
|
484
|
+
maxDate = _ref2.maxDate,
|
|
485
|
+
_ref2$showWeekNumbers = _ref2.showWeekNumbers,
|
|
486
|
+
showWeekNumbers = _ref2$showWeekNumbers === void 0 ? false : _ref2$showWeekNumbers,
|
|
487
|
+
_ref2$weekNumberHeade = _ref2.weekNumberHeader,
|
|
488
|
+
weekNumberHeader = _ref2$weekNumberHeade === void 0 ? 'uke' : _ref2$weekNumberHeade,
|
|
489
|
+
forcedReturnType = _ref2.forcedReturnType,
|
|
490
|
+
style = _ref2.style,
|
|
491
|
+
className = _ref2.className,
|
|
492
|
+
navigationDescription = _ref2.navigationDescription,
|
|
493
|
+
_ref2$onSelectedCellC = _ref2.onSelectedCellClick,
|
|
494
|
+
onSelectedCellClick = _ref2$onSelectedCellC === void 0 ? function () {
|
|
495
|
+
return;
|
|
496
|
+
} : _ref2$onSelectedCellC,
|
|
497
|
+
_ref2$onCellClick = _ref2.onCellClick,
|
|
498
|
+
onCellClick = _ref2$onCellClick === void 0 ? function () {
|
|
499
|
+
return;
|
|
500
|
+
} : _ref2$onCellClick,
|
|
501
|
+
classNameForDate = _ref2.classNameForDate,
|
|
502
|
+
ariaLabelForDate = _ref2.ariaLabelForDate,
|
|
503
|
+
calendarRef = _ref2.calendarRef,
|
|
504
|
+
rest = _objectWithoutPropertiesLoose(_ref2, _excluded2$3);
|
|
505
|
+
var _useLocale2 = useLocale(),
|
|
506
|
+
locale = _useLocale2.locale;
|
|
507
|
+
var _props = _extends({}, rest, {
|
|
470
508
|
value: selectedDate,
|
|
471
|
-
onChange: (value)
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
509
|
+
onChange: function onChange(value) {
|
|
510
|
+
return handleOnChange({
|
|
511
|
+
value: value,
|
|
512
|
+
selectedDate: selectedDate,
|
|
513
|
+
forcedReturnType: forcedReturnType,
|
|
514
|
+
onChange: _onChange
|
|
515
|
+
});
|
|
516
|
+
},
|
|
517
|
+
locale: locale,
|
|
518
|
+
createCalendar: createCalendar,
|
|
479
519
|
minValue: minDate,
|
|
480
520
|
maxValue: maxDate
|
|
481
|
-
};
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
"Neste måned",
|
|
516
|
-
locale,
|
|
517
|
-
nextButtonProps
|
|
518
|
-
),
|
|
519
|
-
children: /* @__PURE__ */ jsx(RightArrowIcon, { size: 20 })
|
|
520
|
-
}
|
|
521
|
-
)
|
|
522
|
-
] }),
|
|
523
|
-
/* @__PURE__ */ jsx(
|
|
524
|
-
CalendarGrid,
|
|
525
|
-
{
|
|
526
|
-
...rest,
|
|
527
|
-
state,
|
|
528
|
-
navigationDescription,
|
|
529
|
-
onSelectedCellClick,
|
|
530
|
-
onCellClick,
|
|
531
|
-
classNameForDate,
|
|
532
|
-
ariaLabelForDate,
|
|
533
|
-
showWeekNumbers,
|
|
534
|
-
weekNumberHeader
|
|
535
|
-
}
|
|
536
|
-
)
|
|
537
|
-
]
|
|
538
|
-
}
|
|
539
|
-
);
|
|
521
|
+
});
|
|
522
|
+
var state = useCalendarState(_props);
|
|
523
|
+
var _useCalendar = useCalendar(_props, state),
|
|
524
|
+
calendarProps = _useCalendar.calendarProps,
|
|
525
|
+
prevButtonProps = _useCalendar.prevButtonProps,
|
|
526
|
+
nextButtonProps = _useCalendar.nextButtonProps,
|
|
527
|
+
title = _useCalendar.title;
|
|
528
|
+
useEffect(function () {
|
|
529
|
+
return rest.onValidate == null ? void 0 : rest.onValidate(!state.isValueInvalid);
|
|
530
|
+
}, [state.isValueInvalid]);
|
|
531
|
+
return React.createElement("div", _extends({}, calendarProps, {
|
|
532
|
+
ref: calendarRef,
|
|
533
|
+
className: classNames('eds-datepicker__calendar', className),
|
|
534
|
+
style: style
|
|
535
|
+
}), React.createElement("div", {
|
|
536
|
+
className: "eds-datepicker__calendar__header"
|
|
537
|
+
}, React.createElement(CalendarButton, _extends({}, prevButtonProps, {
|
|
538
|
+
"aria-label": ariaLabelIfNorwegian('Forrige måned', locale, prevButtonProps)
|
|
539
|
+
}), React.createElement(LeftArrowIcon, {
|
|
540
|
+
size: 20
|
|
541
|
+
})), React.createElement("h2", null, title), React.createElement(CalendarButton, _extends({}, nextButtonProps, {
|
|
542
|
+
"aria-label": ariaLabelIfNorwegian('Neste måned', locale, nextButtonProps)
|
|
543
|
+
}), React.createElement(RightArrowIcon, {
|
|
544
|
+
size: 20
|
|
545
|
+
}))), React.createElement(CalendarGrid, _extends({}, rest, {
|
|
546
|
+
state: state,
|
|
547
|
+
navigationDescription: navigationDescription,
|
|
548
|
+
onSelectedCellClick: onSelectedCellClick,
|
|
549
|
+
onCellClick: onCellClick,
|
|
550
|
+
classNameForDate: classNameForDate,
|
|
551
|
+
ariaLabelForDate: ariaLabelForDate,
|
|
552
|
+
showWeekNumbers: showWeekNumbers,
|
|
553
|
+
weekNumberHeader: weekNumberHeader
|
|
554
|
+
})));
|
|
540
555
|
};
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
556
|
+
|
|
557
|
+
var _excluded$5 = ["selectedDate", "locale", "disabled", "readOnly", "showTime", "showTimeZone", "classNameForDate", "className", "variant", "feedback", "validationVariant", "validationFeedback", "showWeekNumbers", "weekNumberHeader", "disableModal", "labelTooltip", "navigationDescription", "minDate", "maxDate", "modalTreshold", "ariaLabelForDate", "append", "prepend", "granularity"];
|
|
558
|
+
var DatePicker = function DatePicker(_ref) {
|
|
559
|
+
var selectedDate = _ref.selectedDate,
|
|
560
|
+
locale = _ref.locale,
|
|
561
|
+
disabled = _ref.disabled,
|
|
562
|
+
readOnly = _ref.readOnly,
|
|
563
|
+
showTime = _ref.showTime,
|
|
564
|
+
_ref$showTimeZone = _ref.showTimeZone,
|
|
565
|
+
showTimeZone = _ref$showTimeZone === void 0 ? false : _ref$showTimeZone,
|
|
566
|
+
classNameForDate = _ref.classNameForDate,
|
|
567
|
+
className = _ref.className,
|
|
568
|
+
variant = _ref.variant,
|
|
569
|
+
feedback = _ref.feedback,
|
|
570
|
+
validationVariant = _ref.validationVariant,
|
|
571
|
+
validationFeedback = _ref.validationFeedback,
|
|
572
|
+
showWeekNumbers = _ref.showWeekNumbers,
|
|
573
|
+
weekNumberHeader = _ref.weekNumberHeader,
|
|
574
|
+
_ref$disableModal = _ref.disableModal,
|
|
575
|
+
disableModal = _ref$disableModal === void 0 ? false : _ref$disableModal,
|
|
576
|
+
labelTooltip = _ref.labelTooltip,
|
|
577
|
+
navigationDescription = _ref.navigationDescription,
|
|
578
|
+
minDate = _ref.minDate,
|
|
579
|
+
maxDate = _ref.maxDate,
|
|
580
|
+
_ref$modalTreshold = _ref.modalTreshold,
|
|
581
|
+
modalTreshold = _ref$modalTreshold === void 0 ? 1000 : _ref$modalTreshold,
|
|
582
|
+
ariaLabelForDate = _ref.ariaLabelForDate,
|
|
583
|
+
append = _ref.append,
|
|
584
|
+
prepend = _ref.prepend,
|
|
585
|
+
_ref$granularity = _ref.granularity,
|
|
586
|
+
granularity = _ref$granularity === void 0 ? showTime ? 'minute' : 'day' : _ref$granularity,
|
|
587
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
|
|
588
|
+
var CALENDAR_MODAL_MAX_SCREEN_WIDTH = modalTreshold;
|
|
589
|
+
var datePickerRef = useRef(null);
|
|
590
|
+
var calendarRef = useRef(null);
|
|
591
|
+
var _useWindowDimensions = useWindowDimensions(),
|
|
592
|
+
width = _useWindowDimensions.width;
|
|
593
|
+
var _props = _extends({}, rest, {
|
|
594
|
+
onChange: function onChange(value) {
|
|
595
|
+
return handleOnChange({
|
|
596
|
+
value: value,
|
|
597
|
+
selectedDate: selectedDate,
|
|
598
|
+
forcedReturnType: rest.forcedReturnType,
|
|
599
|
+
onChange: rest.onChange
|
|
600
|
+
});
|
|
601
|
+
},
|
|
580
602
|
minValue: minDate,
|
|
581
603
|
// this weird logic makes sure the entire day is included if no time is provided in maxDate
|
|
582
|
-
maxValue:
|
|
604
|
+
maxValue: 'hour' in (maxDate != null ? maxDate : {}) ? maxDate : maxDate !== undefined ? lastMillisecondOfDay(maxDate) : undefined,
|
|
583
605
|
value: selectedDate,
|
|
584
|
-
granularity,
|
|
606
|
+
granularity: granularity,
|
|
585
607
|
isDisabled: disabled || readOnly
|
|
586
|
-
};
|
|
587
|
-
const state = useDatePickerState(_props);
|
|
588
|
-
const {
|
|
589
|
-
groupProps,
|
|
590
|
-
labelProps,
|
|
591
|
-
fieldProps,
|
|
592
|
-
buttonProps,
|
|
593
|
-
dialogProps,
|
|
594
|
-
calendarProps
|
|
595
|
-
} = useDatePicker(_props, state, datePickerRef);
|
|
596
|
-
const { refs, floatingStyles, update } = useFloating({
|
|
597
|
-
whileElementsMounted: (ref, float, update2) => autoUpdate(ref, float, update2, { elementResize: false }),
|
|
598
|
-
placement: "bottom-start",
|
|
599
|
-
middleware: [
|
|
600
|
-
offset(space.extraSmall2),
|
|
601
|
-
flip(),
|
|
602
|
-
shift({ padding: space.extraSmall })
|
|
603
|
-
]
|
|
604
608
|
});
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
609
|
+
var state = useDatePickerState(_props);
|
|
610
|
+
var _useDatePicker = useDatePicker(_props, state, datePickerRef),
|
|
611
|
+
groupProps = _useDatePicker.groupProps,
|
|
612
|
+
labelProps = _useDatePicker.labelProps,
|
|
613
|
+
fieldProps = _useDatePicker.fieldProps,
|
|
614
|
+
buttonProps = _useDatePicker.buttonProps,
|
|
615
|
+
dialogProps = _useDatePicker.dialogProps,
|
|
616
|
+
calendarProps = _useDatePicker.calendarProps;
|
|
617
|
+
// calculations for floating-UI popover position
|
|
618
|
+
var _useFloating = useFloating({
|
|
619
|
+
whileElementsMounted: function whileElementsMounted(ref, _float, update) {
|
|
620
|
+
return autoUpdate(ref, _float, update, {
|
|
621
|
+
elementResize: false
|
|
622
|
+
});
|
|
623
|
+
},
|
|
624
|
+
placement: 'bottom-start',
|
|
625
|
+
middleware: [offset(space.extraSmall2), flip(), shift({
|
|
626
|
+
padding: space.extraSmall
|
|
627
|
+
})]
|
|
628
|
+
}),
|
|
629
|
+
refs = _useFloating.refs,
|
|
630
|
+
floatingStyles = _useFloating.floatingStyles,
|
|
631
|
+
update = _useFloating.update;
|
|
632
|
+
useOnClickOutside([calendarRef], function () {
|
|
633
|
+
return state.setOpen(false);
|
|
634
|
+
});
|
|
635
|
+
useOnEscape(calendarRef, function () {
|
|
636
|
+
return state.setOpen(false);
|
|
637
|
+
});
|
|
638
|
+
var calendarSharedProps = _extends({}, dialogProps, calendarProps, {
|
|
610
639
|
// We don't use handleOnChange here since it's handled internally by Calendar
|
|
611
640
|
onChange: rest.onChange,
|
|
612
641
|
forcedReturnType: rest.forcedReturnType,
|
|
613
|
-
disabled,
|
|
614
|
-
navigationDescription,
|
|
615
|
-
onSelectedCellClick: ()
|
|
642
|
+
disabled: disabled,
|
|
643
|
+
navigationDescription: navigationDescription,
|
|
644
|
+
onSelectedCellClick: function onSelectedCellClick() {
|
|
645
|
+
return state.setOpen(false);
|
|
646
|
+
},
|
|
616
647
|
// onCellClick is a temporary fix solving an issue where the
|
|
617
648
|
// calendar sometimes doesn't close on date selection
|
|
618
|
-
onCellClick: ()
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
}
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
DateField,
|
|
656
|
-
{
|
|
657
|
-
...groupProps,
|
|
658
|
-
...fieldProps,
|
|
659
|
-
...rest,
|
|
660
|
-
append: !disabled && !readOnly && /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center" }, children: [
|
|
661
|
-
append,
|
|
662
|
-
/* @__PURE__ */ jsx(
|
|
663
|
-
CalendarButton,
|
|
664
|
-
{
|
|
665
|
-
...buttonProps,
|
|
666
|
-
onPress: () => {
|
|
667
|
-
state.setOpen(!state.isOpen);
|
|
668
|
-
update();
|
|
669
|
-
},
|
|
670
|
-
className: "eds-datepicker__open-calendar-button",
|
|
671
|
-
children: /* @__PURE__ */ jsx(CalendarIcon, {})
|
|
672
|
-
}
|
|
673
|
-
)
|
|
674
|
-
] }),
|
|
675
|
-
prepend,
|
|
676
|
-
className: classNames("eds-datepicker", className, {
|
|
677
|
-
"eds-datepicker--disabled": disabled
|
|
678
|
-
}),
|
|
679
|
-
disabled,
|
|
680
|
-
readOnly,
|
|
681
|
-
feedback,
|
|
682
|
-
labelProps,
|
|
683
|
-
labelTooltip,
|
|
684
|
-
maxDate,
|
|
685
|
-
minDate,
|
|
686
|
-
dateFieldRef: (node) => {
|
|
687
|
-
refs.setReference(node);
|
|
688
|
-
datePickerRef.current = node;
|
|
689
|
-
},
|
|
690
|
-
selectedDate,
|
|
691
|
-
showTime,
|
|
692
|
-
showTimeZone,
|
|
693
|
-
validationFeedback,
|
|
694
|
-
validationVariant,
|
|
695
|
-
variant
|
|
696
|
-
}
|
|
697
|
-
),
|
|
698
|
-
isModal ? modalCalendar : popoverCalendar
|
|
699
|
-
]
|
|
649
|
+
onCellClick: function onCellClick() {
|
|
650
|
+
return state.setOpen(false);
|
|
651
|
+
},
|
|
652
|
+
selectedDate: selectedDate,
|
|
653
|
+
minDate: minDate,
|
|
654
|
+
maxDate: maxDate,
|
|
655
|
+
calendarRef: calendarRef,
|
|
656
|
+
classNameForDate: classNameForDate,
|
|
657
|
+
ariaLabelForDate: ariaLabelForDate,
|
|
658
|
+
showWeekNumbers: showWeekNumbers,
|
|
659
|
+
weekNumberHeader: weekNumberHeader
|
|
660
|
+
});
|
|
661
|
+
var isModal = typeof width !== 'undefined' && width <= CALENDAR_MODAL_MAX_SCREEN_WIDTH && !disableModal;
|
|
662
|
+
var popoverCalendar = React.createElement("div", {
|
|
663
|
+
style: _extends({}, floatingStyles, {
|
|
664
|
+
zIndex: zIndexes.popover
|
|
665
|
+
}),
|
|
666
|
+
ref: refs.setFloating
|
|
667
|
+
}, React.createElement(FocusLock, {
|
|
668
|
+
disabled: !state.isOpen || isModal,
|
|
669
|
+
returnFocus: true
|
|
670
|
+
}, state.isOpen && React.createElement(Calendar, _extends({}, calendarSharedProps))));
|
|
671
|
+
var modalCalendar = React.createElement(Modal, {
|
|
672
|
+
size: "small",
|
|
673
|
+
title: "",
|
|
674
|
+
open: state.isOpen,
|
|
675
|
+
onDismiss: function onDismiss() {
|
|
676
|
+
return state.setOpen(false);
|
|
677
|
+
},
|
|
678
|
+
className: "eds-datepicker__calendar-modal"
|
|
679
|
+
}, React.createElement(Calendar, _extends({}, calendarSharedProps)));
|
|
680
|
+
return React.createElement(ConditionalWrapper, {
|
|
681
|
+
condition: locale !== undefined,
|
|
682
|
+
wrapper: function wrapper(child) {
|
|
683
|
+
return React.createElement(I18nProvider, {
|
|
684
|
+
locale: locale
|
|
685
|
+
}, child);
|
|
700
686
|
}
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
style,
|
|
707
|
-
label,
|
|
708
|
-
onChange,
|
|
709
|
-
feedback,
|
|
710
|
-
variant,
|
|
711
|
-
disableLabelAnimation,
|
|
712
|
-
prepend = /* @__PURE__ */ jsx(DateIcon, { inline: true }),
|
|
713
|
-
...rest
|
|
714
|
-
}, ref) => {
|
|
715
|
-
const nativedatepickerId = useRandomId("eds-nativetimepicker");
|
|
716
|
-
return /* @__PURE__ */ jsx(
|
|
717
|
-
BaseFormControl,
|
|
718
|
-
{
|
|
719
|
-
style,
|
|
720
|
-
className,
|
|
721
|
-
prepend,
|
|
722
|
-
label,
|
|
723
|
-
feedback,
|
|
724
|
-
variant,
|
|
725
|
-
labelId: nativedatepickerId,
|
|
726
|
-
disableLabelAnimation,
|
|
727
|
-
isFilled: true,
|
|
728
|
-
children: /* @__PURE__ */ jsx(
|
|
729
|
-
NativeDatePickerBase,
|
|
730
|
-
{
|
|
731
|
-
onChange,
|
|
732
|
-
"aria-labelledby": nativedatepickerId,
|
|
733
|
-
ref,
|
|
734
|
-
variant,
|
|
735
|
-
...rest
|
|
736
|
-
}
|
|
737
|
-
)
|
|
687
|
+
}, React.createElement(DateField, _extends({}, groupProps, fieldProps, rest, {
|
|
688
|
+
append: !disabled && !readOnly && React.createElement("div", {
|
|
689
|
+
style: {
|
|
690
|
+
display: 'flex',
|
|
691
|
+
alignItems: 'center'
|
|
738
692
|
}
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
);
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
693
|
+
}, append, React.createElement(CalendarButton, _extends({}, buttonProps, {
|
|
694
|
+
onPress: function onPress() {
|
|
695
|
+
state.setOpen(!state.isOpen);
|
|
696
|
+
update();
|
|
697
|
+
},
|
|
698
|
+
className: "eds-datepicker__open-calendar-button"
|
|
699
|
+
}), React.createElement(CalendarIcon, null))),
|
|
700
|
+
prepend: prepend,
|
|
701
|
+
className: classNames('eds-datepicker', className, {
|
|
702
|
+
'eds-datepicker--disabled': disabled
|
|
703
|
+
}),
|
|
704
|
+
disabled: disabled,
|
|
705
|
+
readOnly: readOnly,
|
|
706
|
+
feedback: feedback,
|
|
707
|
+
labelProps: labelProps,
|
|
708
|
+
labelTooltip: labelTooltip,
|
|
709
|
+
maxDate: maxDate,
|
|
710
|
+
minDate: minDate,
|
|
711
|
+
dateFieldRef: function dateFieldRef(node) {
|
|
712
|
+
refs.setReference(node);
|
|
713
|
+
datePickerRef.current = node;
|
|
714
|
+
},
|
|
715
|
+
selectedDate: selectedDate,
|
|
716
|
+
showTime: showTime,
|
|
717
|
+
showTimeZone: showTimeZone,
|
|
718
|
+
validationFeedback: validationFeedback,
|
|
719
|
+
validationVariant: validationVariant,
|
|
720
|
+
variant: variant
|
|
721
|
+
})), isModal ? modalCalendar : popoverCalendar);
|
|
722
|
+
};
|
|
723
|
+
|
|
724
|
+
var _excluded$4 = ["className", "style", "label", "onChange", "feedback", "variant", "disableLabelAnimation", "prepend"],
|
|
725
|
+
_excluded2$2 = ["onChange", "variant", "value"];
|
|
726
|
+
var NativeDatePicker = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
727
|
+
var className = _ref.className,
|
|
728
|
+
style = _ref.style,
|
|
729
|
+
label = _ref.label,
|
|
730
|
+
onChange = _ref.onChange,
|
|
731
|
+
feedback = _ref.feedback,
|
|
732
|
+
variant = _ref.variant,
|
|
733
|
+
disableLabelAnimation = _ref.disableLabelAnimation,
|
|
734
|
+
_ref$prepend = _ref.prepend,
|
|
735
|
+
prepend = _ref$prepend === void 0 ? React.createElement(DateIcon, {
|
|
736
|
+
inline: true
|
|
737
|
+
}) : _ref$prepend,
|
|
738
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
|
|
739
|
+
var nativedatepickerId = useRandomId('eds-nativetimepicker');
|
|
740
|
+
return React.createElement(BaseFormControl, {
|
|
741
|
+
style: style,
|
|
742
|
+
className: className,
|
|
743
|
+
prepend: prepend,
|
|
744
|
+
label: label,
|
|
745
|
+
feedback: feedback,
|
|
746
|
+
variant: variant,
|
|
747
|
+
labelId: nativedatepickerId,
|
|
748
|
+
disableLabelAnimation: disableLabelAnimation,
|
|
749
|
+
isFilled: true
|
|
750
|
+
}, React.createElement(NativeDatePickerBase, _extends({
|
|
751
|
+
onChange: onChange,
|
|
752
|
+
"aria-labelledby": nativedatepickerId,
|
|
753
|
+
ref: ref,
|
|
754
|
+
variant: variant
|
|
755
|
+
}, rest)));
|
|
756
|
+
});
|
|
757
|
+
var NativeDatePickerBase = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {
|
|
758
|
+
var onChange = _ref2.onChange,
|
|
759
|
+
variant = _ref2.variant,
|
|
760
|
+
value = _ref2.value,
|
|
761
|
+
rest = _objectWithoutPropertiesLoose(_ref2, _excluded2$2);
|
|
762
|
+
var contextVariant = useVariant();
|
|
763
|
+
var currentVariant = variant || contextVariant;
|
|
764
|
+
var _useInputGroupContext = useInputGroupContext(),
|
|
765
|
+
isDatepickerFilled = _useInputGroupContext.isFilled,
|
|
766
|
+
setFiller = _useInputGroupContext.setFilled;
|
|
767
|
+
useOnMount(function () {
|
|
747
768
|
setFiller && !isDatepickerFilled && setFiller(true);
|
|
748
769
|
});
|
|
749
|
-
React.useEffect(()
|
|
770
|
+
React.useEffect(function () {
|
|
750
771
|
if (value) {
|
|
751
772
|
setFiller && !isDatepickerFilled && setFiller(true);
|
|
752
773
|
} else {
|
|
753
774
|
setFiller && isDatepickerFilled && setFiller(false);
|
|
754
775
|
}
|
|
755
776
|
}, [value, setFiller, isDatepickerFilled]);
|
|
756
|
-
|
|
777
|
+
var handleChange = function handleChange(event) {
|
|
757
778
|
if (isFilled(event.target)) {
|
|
758
779
|
setFiller && !isDatepickerFilled && setFiller(true);
|
|
759
780
|
} else {
|
|
@@ -763,243 +784,236 @@ const NativeDatePickerBase = React.forwardRef(({ onChange, variant, value, ...re
|
|
|
763
784
|
onChange(event);
|
|
764
785
|
}
|
|
765
786
|
};
|
|
766
|
-
return
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
value,
|
|
775
|
-
...rest
|
|
776
|
-
}
|
|
777
|
-
);
|
|
787
|
+
return React.createElement("input", _extends({
|
|
788
|
+
ref: ref,
|
|
789
|
+
"aria-invalid": currentVariant === 'error',
|
|
790
|
+
type: "date",
|
|
791
|
+
className: "eds-form-control eds-native-date-picker",
|
|
792
|
+
onChange: handleChange,
|
|
793
|
+
value: value
|
|
794
|
+
}, rest));
|
|
778
795
|
});
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
return
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
onClick,
|
|
798
|
-
"aria-label": ariaLabel,
|
|
799
|
-
disabled,
|
|
800
|
-
...rest,
|
|
801
|
-
children: direction === "left" ? /* @__PURE__ */ jsx(LeftArrowIcon, {}) : /* @__PURE__ */ jsx(RightArrowIcon, {})
|
|
802
|
-
}
|
|
803
|
-
);
|
|
796
|
+
|
|
797
|
+
var _excluded$3 = ["direction", "onClick", "disabled", "readonly", "aria-label"];
|
|
798
|
+
var TimePickerArrowButton = function TimePickerArrowButton(_ref) {
|
|
799
|
+
var direction = _ref.direction,
|
|
800
|
+
onClick = _ref.onClick,
|
|
801
|
+
disabled = _ref.disabled,
|
|
802
|
+
ariaLabel = _ref['aria-label'],
|
|
803
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
|
|
804
|
+
return React.createElement(IconButton, _extends({
|
|
805
|
+
className: classNames('eds-timepicker__arrowbutton', "eds-timepicker__arrowbutton--" + direction, {
|
|
806
|
+
'eds-timepicker__arrowbutton--disabled': disabled
|
|
807
|
+
}),
|
|
808
|
+
type: "button",
|
|
809
|
+
tabIndex: -1,
|
|
810
|
+
onClick: onClick,
|
|
811
|
+
"aria-label": ariaLabel,
|
|
812
|
+
disabled: disabled
|
|
813
|
+
}, rest), direction === 'left' ? React.createElement(LeftArrowIcon, null) : React.createElement(RightArrowIcon, null));
|
|
804
814
|
};
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
815
|
+
|
|
816
|
+
var _excluded$2 = ["selectedTime", "onChange", "disabled", "readOnly", "className", "style", "label", "labelTooltip", "feedback", "granularity", "variant", "locale", "showTimeZone", "showSeconds", "minuteIncrementForArrowButtons", "leftArrowButtonAriaLabel", "rightArrowButtonAriaLabel", "inputRef", "forcedReturnType", "forcedTimeZone", "append", "prepend"];
|
|
817
|
+
var TimePicker = function TimePicker(_ref) {
|
|
818
|
+
var selectedTime = _ref.selectedTime,
|
|
819
|
+
onChange = _ref.onChange,
|
|
820
|
+
disabled = _ref.disabled,
|
|
821
|
+
readOnly = _ref.readOnly,
|
|
822
|
+
className = _ref.className,
|
|
823
|
+
style = _ref.style,
|
|
824
|
+
label = _ref.label,
|
|
825
|
+
labelTooltip = _ref.labelTooltip,
|
|
826
|
+
feedback = _ref.feedback,
|
|
827
|
+
granularity = _ref.granularity,
|
|
828
|
+
variant = _ref.variant,
|
|
829
|
+
customLocale = _ref.locale,
|
|
830
|
+
showTimeZone = _ref.showTimeZone,
|
|
831
|
+
_ref$showSeconds = _ref.showSeconds,
|
|
832
|
+
showSeconds = _ref$showSeconds === void 0 ? false : _ref$showSeconds,
|
|
833
|
+
_ref$minuteIncrementF = _ref.minuteIncrementForArrowButtons,
|
|
834
|
+
minuteIncrementForArrowButtons = _ref$minuteIncrementF === void 0 ? 30 : _ref$minuteIncrementF,
|
|
835
|
+
_ref$leftArrowButtonA = _ref.leftArrowButtonAriaLabel,
|
|
836
|
+
leftArrowButtonAriaLabel = _ref$leftArrowButtonA === void 0 ? "Trekk fra " + minuteIncrementForArrowButtons + " minutter" : _ref$leftArrowButtonA,
|
|
837
|
+
_ref$rightArrowButton = _ref.rightArrowButtonAriaLabel,
|
|
838
|
+
rightArrowButtonAriaLabel = _ref$rightArrowButton === void 0 ? "Legg til " + minuteIncrementForArrowButtons + " minutter" : _ref$rightArrowButton,
|
|
839
|
+
inputRef = _ref.inputRef,
|
|
840
|
+
forcedReturnType = _ref.forcedReturnType,
|
|
841
|
+
forcedTimeZone = _ref.forcedTimeZone,
|
|
842
|
+
append = _ref.append,
|
|
843
|
+
prepend = _ref.prepend,
|
|
844
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$2);
|
|
845
|
+
var _useLocale = useLocale(),
|
|
846
|
+
locale = _useLocale.locale;
|
|
831
847
|
if (customLocale) locale = customLocale;
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
if (forcedReturnType !==
|
|
836
|
-
return onChange(
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
})
|
|
842
|
-
);
|
|
848
|
+
var timePickerId = useRandomId('eds-timepicker');
|
|
849
|
+
var timeZone = forcedTimeZone != null ? forcedTimeZone : selectedTime !== null && 'timezone' in selectedTime ? selectedTime.timezone : 'Europe/Oslo';
|
|
850
|
+
var handleOnChange = function handleOnChange(value) {
|
|
851
|
+
if (forcedReturnType !== undefined || !selectedTime) {
|
|
852
|
+
return onChange(convertValueToType({
|
|
853
|
+
value: value,
|
|
854
|
+
type: forcedReturnType != null ? forcedReturnType : 'ZonedDateTime',
|
|
855
|
+
timezone: timeZone
|
|
856
|
+
}));
|
|
843
857
|
}
|
|
844
858
|
onChange(value);
|
|
845
859
|
};
|
|
846
|
-
|
|
847
|
-
onChange:
|
|
848
|
-
label,
|
|
849
|
-
locale,
|
|
860
|
+
var state = useTimeFieldState(_extends({
|
|
861
|
+
onChange: handleOnChange,
|
|
862
|
+
label: label,
|
|
863
|
+
locale: locale,
|
|
850
864
|
value: selectedTime,
|
|
851
|
-
granularity: granularity
|
|
865
|
+
granularity: (granularity != null ? granularity : showSeconds) ? 'second' : 'minute',
|
|
852
866
|
hideTimeZone: !showTimeZone,
|
|
853
867
|
isDisabled: disabled || readOnly,
|
|
854
|
-
shouldForceLeadingZeros: true
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
);
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
const getCurrentTimeWithCorrectType = convertValueToType({
|
|
868
|
+
shouldForceLeadingZeros: true
|
|
869
|
+
}, rest));
|
|
870
|
+
var timeFieldRef = useRef(null);
|
|
871
|
+
var _useTimeField = useTimeField(_extends({}, rest, {
|
|
872
|
+
label: label
|
|
873
|
+
}), state, timeFieldRef),
|
|
874
|
+
labelProps = _useTimeField.labelProps,
|
|
875
|
+
fieldProps = _useTimeField.fieldProps;
|
|
876
|
+
var id = useRandomId('timepicker');
|
|
877
|
+
var getCurrentTime = function getCurrentTime() {
|
|
878
|
+
var getCurrentTimeWithCorrectType = convertValueToType({
|
|
866
879
|
value: now(timeZone),
|
|
867
|
-
type: forcedReturnType
|
|
880
|
+
type: forcedReturnType != null ? forcedReturnType : 'ZonedDateTime'
|
|
868
881
|
});
|
|
869
882
|
return getCurrentTimeWithCorrectType;
|
|
870
883
|
};
|
|
871
|
-
|
|
872
|
-
if (selectedTime === null) return
|
|
884
|
+
var handleOnClickArrowButton = function handleOnClickArrowButton(operation) {
|
|
885
|
+
if (selectedTime === null) return handleOnChange(getCurrentTime());
|
|
873
886
|
switch (operation) {
|
|
874
|
-
case
|
|
875
|
-
return
|
|
876
|
-
selectedTime.
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
selectedTime.subtract({
|
|
883
|
-
minutes: modulo(selectedTime.minute - 1, minuteIncrementForArrowButtons) + 1
|
|
884
|
-
})
|
|
885
|
-
);
|
|
887
|
+
case 'add':
|
|
888
|
+
return handleOnChange(selectedTime.add({
|
|
889
|
+
minutes: minuteIncrementForArrowButtons - modulo(selectedTime.minute, minuteIncrementForArrowButtons)
|
|
890
|
+
}));
|
|
891
|
+
case 'subtract':
|
|
892
|
+
return handleOnChange(selectedTime.subtract({
|
|
893
|
+
minutes: modulo(selectedTime.minute - 1, minuteIncrementForArrowButtons) + 1
|
|
894
|
+
}));
|
|
886
895
|
}
|
|
887
896
|
};
|
|
888
|
-
return
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
readOnly
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
897
|
+
return React.createElement(I18nProvider, {
|
|
898
|
+
locale: locale
|
|
899
|
+
}, React.createElement(BaseFormControl, {
|
|
900
|
+
append: React.createElement("div", {
|
|
901
|
+
style: {
|
|
902
|
+
display: 'flex',
|
|
903
|
+
alignItems: 'center'
|
|
904
|
+
}
|
|
905
|
+
}, append, React.createElement(TimePickerArrowButton, {
|
|
906
|
+
direction: "right",
|
|
907
|
+
disabled: disabled || readOnly,
|
|
908
|
+
"aria-label": rightArrowButtonAriaLabel,
|
|
909
|
+
onClick: function onClick() {
|
|
910
|
+
return handleOnClickArrowButton('add');
|
|
911
|
+
},
|
|
912
|
+
onFocus: function onFocus() {
|
|
913
|
+
return focusSegment(timeFieldRef, 'last');
|
|
914
|
+
}
|
|
915
|
+
})),
|
|
916
|
+
ariaAlertOnFeedback: true,
|
|
917
|
+
"aria-describedby": timePickerId + 'description',
|
|
918
|
+
className: classNames('eds-timepicker', className, {
|
|
919
|
+
'eds-timepicker--disabled': disabled,
|
|
920
|
+
'eds-timepicker--has-tooltip': labelTooltip !== undefined,
|
|
921
|
+
'eds-timepicker--readonly': readOnly
|
|
922
|
+
}),
|
|
923
|
+
disabled: disabled,
|
|
924
|
+
readOnly: readOnly,
|
|
925
|
+
disableLabelAnimation: true,
|
|
926
|
+
feedback: feedback,
|
|
927
|
+
label: label,
|
|
928
|
+
labelId: id,
|
|
929
|
+
labelProps: _extends({}, labelProps, {
|
|
930
|
+
'aria-describedby': timePickerId + 'description'
|
|
931
|
+
}),
|
|
932
|
+
labelTooltip: labelTooltip,
|
|
933
|
+
prepend: React.createElement("div", {
|
|
934
|
+
style: {
|
|
935
|
+
display: 'flex',
|
|
936
|
+
alignItems: 'center'
|
|
937
|
+
}
|
|
938
|
+
}, React.createElement(TimePickerArrowButton, {
|
|
939
|
+
direction: "left",
|
|
940
|
+
disabled: disabled || readOnly,
|
|
941
|
+
"aria-label": leftArrowButtonAriaLabel,
|
|
942
|
+
onClick: function onClick() {
|
|
943
|
+
return handleOnClickArrowButton('subtract');
|
|
920
944
|
},
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
prepend
|
|
934
|
-
] }),
|
|
935
|
-
ref: inputRef,
|
|
936
|
-
style,
|
|
937
|
-
variant,
|
|
938
|
-
children: [
|
|
939
|
-
/* @__PURE__ */ jsx(
|
|
940
|
-
"span",
|
|
941
|
-
{
|
|
942
|
-
ref: timeFieldRef,
|
|
943
|
-
...fieldProps,
|
|
944
|
-
style: { display: "contents" },
|
|
945
|
-
children: state.segments.map((segment, i) => /* @__PURE__ */ jsx(
|
|
946
|
-
FieldSegment,
|
|
947
|
-
{
|
|
948
|
-
segment,
|
|
949
|
-
state,
|
|
950
|
-
"aria-describedby": timePickerId + "description"
|
|
951
|
-
},
|
|
952
|
-
i
|
|
953
|
-
))
|
|
954
|
-
}
|
|
955
|
-
),
|
|
956
|
-
/* @__PURE__ */ jsx(VisuallyHidden, { id: timePickerId + "description", children: selectedTime !== null ? "valgt tid: " + selectedTime.hour.toString().padStart(2, "0") + ":" + selectedTime.minute.toString().padStart(2, "0") + (showSeconds ? ":" + selectedTime.second.toString().padStart(2, "0") : "") : "" })
|
|
957
|
-
]
|
|
945
|
+
onFocus: function onFocus() {
|
|
946
|
+
return focusSegment(timeFieldRef, 'first');
|
|
947
|
+
}
|
|
948
|
+
}), prepend),
|
|
949
|
+
ref: inputRef,
|
|
950
|
+
style: style,
|
|
951
|
+
variant: variant
|
|
952
|
+
}, React.createElement("span", _extends({
|
|
953
|
+
ref: timeFieldRef
|
|
954
|
+
}, fieldProps, {
|
|
955
|
+
style: {
|
|
956
|
+
display: 'contents'
|
|
958
957
|
}
|
|
959
|
-
)
|
|
958
|
+
}), state.segments.map(function (segment, i) {
|
|
959
|
+
return React.createElement(FieldSegment, {
|
|
960
|
+
segment: segment,
|
|
961
|
+
state: state,
|
|
962
|
+
key: i,
|
|
963
|
+
"aria-describedby": timePickerId + 'description'
|
|
964
|
+
});
|
|
965
|
+
})), React.createElement(VisuallyHidden, {
|
|
966
|
+
id: timePickerId + 'description'
|
|
967
|
+
}, selectedTime !== null ? 'valgt tid: ' + selectedTime.hour.toString().padStart(2, '0') + ':' + selectedTime.minute.toString().padStart(2, '0') + (showSeconds ? ':' + selectedTime.second.toString().padStart(2, '0') : '') : '')));
|
|
960
968
|
};
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
);
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
969
|
+
|
|
970
|
+
var _excluded$1 = ["className", "style", "onChange", "label", "feedback", "variant", "prepend"],
|
|
971
|
+
_excluded2$1 = ["onChange", "value"];
|
|
972
|
+
var NativeTimePicker = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
973
|
+
var className = _ref.className,
|
|
974
|
+
style = _ref.style,
|
|
975
|
+
onChange = _ref.onChange,
|
|
976
|
+
label = _ref.label,
|
|
977
|
+
feedback = _ref.feedback,
|
|
978
|
+
variant = _ref.variant,
|
|
979
|
+
prepend = _ref.prepend,
|
|
980
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$1);
|
|
981
|
+
var nativetimepickerId = useRandomId('eds-native-timepicker');
|
|
982
|
+
return React.createElement(BaseFormControl, {
|
|
983
|
+
style: style,
|
|
984
|
+
className: classNames(className, 'eds-native-timepicker'),
|
|
985
|
+
prepend: prepend,
|
|
986
|
+
label: label,
|
|
987
|
+
feedback: feedback,
|
|
988
|
+
variant: variant,
|
|
989
|
+
labelId: nativetimepickerId,
|
|
990
|
+
disableLabelAnimation: true
|
|
991
|
+
}, React.createElement(NativeTimePickerBase, _extends({
|
|
992
|
+
onChange: onChange,
|
|
993
|
+
"aria-labelledby": nativetimepickerId,
|
|
994
|
+
ref: ref
|
|
995
|
+
}, rest)));
|
|
996
|
+
});
|
|
997
|
+
var NativeTimePickerBase = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {
|
|
998
|
+
var onChange = _ref2.onChange,
|
|
999
|
+
value = _ref2.value,
|
|
1000
|
+
rest = _objectWithoutPropertiesLoose(_ref2, _excluded2$1);
|
|
1001
|
+
var contextVariant = useVariant();
|
|
1002
|
+
var currentVariant = rest.variant || contextVariant;
|
|
1003
|
+
var _useInputGroupContext = useInputGroupContext(),
|
|
1004
|
+
isTimepickerFilled = _useInputGroupContext.isFilled,
|
|
1005
|
+
setFiller = _useInputGroupContext.setFilled;
|
|
1006
|
+
useOnMount(function () {
|
|
993
1007
|
setFiller && !isTimepickerFilled && setFiller(true);
|
|
994
1008
|
});
|
|
995
|
-
React.useEffect(()
|
|
1009
|
+
React.useEffect(function () {
|
|
996
1010
|
if (value) {
|
|
997
1011
|
setFiller && !isTimepickerFilled && setFiller(true);
|
|
998
1012
|
} else {
|
|
999
1013
|
setFiller && isTimepickerFilled && setFiller(false);
|
|
1000
1014
|
}
|
|
1001
1015
|
}, [value, setFiller, isTimepickerFilled]);
|
|
1002
|
-
|
|
1016
|
+
var handleChange = function handleChange(event) {
|
|
1003
1017
|
if (isFilled(event.target)) {
|
|
1004
1018
|
setFiller && !isTimepickerFilled && setFiller(true);
|
|
1005
1019
|
} else {
|
|
@@ -1009,224 +1023,211 @@ const NativeTimePickerBase = React.forwardRef(({ onChange, value, ...rest }, ref
|
|
|
1009
1023
|
onChange(event);
|
|
1010
1024
|
}
|
|
1011
1025
|
};
|
|
1012
|
-
return
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
value,
|
|
1021
|
-
...rest
|
|
1022
|
-
}
|
|
1023
|
-
);
|
|
1026
|
+
return React.createElement("input", _extends({
|
|
1027
|
+
ref: ref,
|
|
1028
|
+
"aria-invalid": currentVariant === 'error',
|
|
1029
|
+
type: "time",
|
|
1030
|
+
className: "eds-form-control",
|
|
1031
|
+
onChange: handleChange,
|
|
1032
|
+
value: value
|
|
1033
|
+
}, rest));
|
|
1024
1034
|
});
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1035
|
+
|
|
1036
|
+
var _excluded = ["append", "className", "disabled", "feedback", "showClockIcon", "inputRef", "label", "labelTooltip", "onChange", "padding", "prepend", "readOnly", "selectedTime", "showSeconds", "style", "variant"],
|
|
1037
|
+
_excluded2 = ["onBlur", "onClick", "onDragStart", "onFocus", "onKeyDown", "onKeyUp", "onMouseDown", "onPointerDown", "onPointerUp"];
|
|
1038
|
+
var inputResult;
|
|
1039
|
+
(function (inputResult) {
|
|
1040
|
+
inputResult[inputResult["RESET_TIME"] = 0] = "RESET_TIME";
|
|
1041
|
+
inputResult[inputResult["INVALID"] = 1] = "INVALID";
|
|
1042
|
+
})(inputResult || (inputResult = {}));
|
|
1043
|
+
var SimpleTimePicker = function SimpleTimePicker(_ref) {
|
|
1044
|
+
var append = _ref.append,
|
|
1045
|
+
disabled = _ref.disabled,
|
|
1046
|
+
feedback = _ref.feedback,
|
|
1047
|
+
_ref$showClockIcon = _ref.showClockIcon,
|
|
1048
|
+
showClockIcon = _ref$showClockIcon === void 0 ? 'right' : _ref$showClockIcon,
|
|
1049
|
+
inputRef = _ref.inputRef,
|
|
1050
|
+
label = _ref.label,
|
|
1051
|
+
labelTooltip = _ref.labelTooltip,
|
|
1052
|
+
onChange = _ref.onChange,
|
|
1053
|
+
_ref$padding = _ref.padding,
|
|
1054
|
+
padding = _ref$padding === void 0 ? 'default' : _ref$padding,
|
|
1055
|
+
prepend = _ref.prepend,
|
|
1056
|
+
readOnly = _ref.readOnly,
|
|
1057
|
+
selectedTime = _ref.selectedTime,
|
|
1058
|
+
showSeconds = _ref.showSeconds,
|
|
1059
|
+
style = _ref.style,
|
|
1060
|
+
variant = _ref.variant,
|
|
1061
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded);
|
|
1062
|
+
var _useState = useState(''),
|
|
1063
|
+
inputText = _useState[0],
|
|
1064
|
+
setInputText = _useState[1];
|
|
1065
|
+
var timeFieldRef = useRef(null);
|
|
1066
|
+
var _useState2 = useState(null),
|
|
1067
|
+
lastValidSelectedTime = _useState2[0],
|
|
1068
|
+
setLastValidSelectedTime = _useState2[1];
|
|
1069
|
+
var _useLocale = useLocale(),
|
|
1070
|
+
locale = _useLocale.locale;
|
|
1071
|
+
var state = useTimeFieldState(_extends({
|
|
1072
|
+
onChange: onChange,
|
|
1073
|
+
label: label,
|
|
1074
|
+
locale: locale,
|
|
1052
1075
|
value: selectedTime,
|
|
1053
1076
|
hideTimeZone: true,
|
|
1054
1077
|
isDisabled: disabled,
|
|
1055
|
-
isReadOnly: readOnly
|
|
1056
|
-
|
|
1057
|
-
}
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
)
|
|
1063
|
-
useEffect(() => {
|
|
1078
|
+
isReadOnly: readOnly
|
|
1079
|
+
}, rest));
|
|
1080
|
+
var _useTimeField = useTimeField(_extends({}, rest, {
|
|
1081
|
+
label: label
|
|
1082
|
+
}), state, timeFieldRef),
|
|
1083
|
+
labelProps = _useTimeField.labelProps,
|
|
1084
|
+
fieldProps = _useTimeField.fieldProps;
|
|
1085
|
+
useEffect(function () {
|
|
1064
1086
|
updateInputWithSelectedTime();
|
|
1087
|
+
// @ts-expect-error TimeType and MappedTimeValue<TimeType> is actually the same
|
|
1065
1088
|
if (selectedTime !== null) setLastValidSelectedTime(selectedTime);
|
|
1066
|
-
}, [selectedTime
|
|
1067
|
-
|
|
1068
|
-
|
|
1089
|
+
}, [selectedTime == null ? void 0 : selectedTime.toString()]);
|
|
1090
|
+
var updateInputWithSelectedTime = function updateInputWithSelectedTime() {
|
|
1091
|
+
var selectedTimeString = getStringFromTimeValue(selectedTime);
|
|
1069
1092
|
setInputText(selectedTimeString);
|
|
1070
|
-
|
|
1071
|
-
if (selectedTimeString ===
|
|
1072
|
-
addPlaceholderToInput();
|
|
1093
|
+
var timeFieldIsFocused = document.activeElement === (timeFieldRef == null ? void 0 : timeFieldRef.current);
|
|
1094
|
+
if (selectedTimeString === '' && !timeFieldIsFocused) addPlaceholderToInput();
|
|
1073
1095
|
};
|
|
1074
|
-
|
|
1075
|
-
if (timeValue === null) return
|
|
1076
|
-
|
|
1096
|
+
var getStringFromTimeValue = function getStringFromTimeValue(timeValue) {
|
|
1097
|
+
if (timeValue === null) return '';
|
|
1098
|
+
var timeObject = 'day' in timeValue ? toTime(timeValue) : timeValue;
|
|
1077
1099
|
if (showSeconds) return timeObject.toString().slice(0, 8);
|
|
1078
1100
|
return timeObject.toString().slice(0, 5);
|
|
1079
1101
|
};
|
|
1080
|
-
|
|
1081
|
-
if (showSeconds) setInputText(
|
|
1082
|
-
else setInputText("–– : ––");
|
|
1102
|
+
var addPlaceholderToInput = function addPlaceholderToInput() {
|
|
1103
|
+
if (showSeconds) setInputText('–– : –– : ––');else setInputText('–– : ––');
|
|
1083
1104
|
};
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
if (newTime ===
|
|
1105
|
+
var handleChangeTime = function handleChangeTime() {
|
|
1106
|
+
var newTime = getValueForOnChangeFromInput();
|
|
1107
|
+
if (newTime === inputResult.INVALID) {
|
|
1087
1108
|
return updateInputWithSelectedTime();
|
|
1088
1109
|
}
|
|
1089
|
-
if (newTime
|
|
1110
|
+
if ((newTime == null ? void 0 : newTime.toString()) !== (selectedTime == null ? void 0 : selectedTime.toString())) onChange == null || onChange(newTime);
|
|
1090
1111
|
};
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
if (newTimeObject ===
|
|
1095
|
-
return
|
|
1112
|
+
var getValueForOnChangeFromInput = function getValueForOnChangeFromInput() {
|
|
1113
|
+
var formatedTimeString = formatTimeString(inputText);
|
|
1114
|
+
var newTimeObject = formatedTimeStringToTimeObject(formatedTimeString);
|
|
1115
|
+
if (newTimeObject === inputResult.INVALID) {
|
|
1116
|
+
return inputResult.INVALID;
|
|
1096
1117
|
}
|
|
1097
|
-
if (newTimeObject ===
|
|
1118
|
+
if (newTimeObject === inputResult.RESET_TIME) {
|
|
1098
1119
|
return null;
|
|
1099
1120
|
}
|
|
1100
|
-
|
|
1121
|
+
var updatedSelectedTime = getSelectedTimeWithTimeFromObject(newTimeObject);
|
|
1101
1122
|
return updatedSelectedTime;
|
|
1102
1123
|
};
|
|
1103
|
-
|
|
1104
|
-
if (timeString.length === 0) return
|
|
1105
|
-
if (timeString.length < 3 || timeString.length > 8)
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1124
|
+
var formatTimeString = function formatTimeString(timeString) {
|
|
1125
|
+
if (timeString.length === 0) return inputResult.RESET_TIME;
|
|
1126
|
+
if (timeString.length < 3 || timeString.length > 8) return inputResult.INVALID;
|
|
1127
|
+
var numberOfColons = (timeString.match(new RegExp(':', 'g')) || []).length;
|
|
1128
|
+
var stringLength = timeString.length;
|
|
1129
|
+
// targets 'd:dd:dd' and 'dd:dd:dd'
|
|
1109
1130
|
if (numberOfColons === 2 && stringLength >= 7) {
|
|
1110
|
-
return timeString.padStart(8,
|
|
1131
|
+
return timeString.padStart(8, '0');
|
|
1111
1132
|
}
|
|
1133
|
+
// targets 'd:dd' and 'dd:dd'
|
|
1112
1134
|
if (numberOfColons === 1) {
|
|
1113
|
-
return timeString.padStart(5,
|
|
1135
|
+
return timeString.padStart(5, '0');
|
|
1114
1136
|
}
|
|
1115
|
-
if (stringLength > 6) return
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
if (stringSlice ===
|
|
1137
|
+
if (stringLength > 6) return inputResult.INVALID;
|
|
1138
|
+
var stringLengthIsEven = stringLength % 2 == 0;
|
|
1139
|
+
var hourString = stringLengthIsEven ? timeString.slice(0, 2) : timeString.slice(0, 1);
|
|
1140
|
+
var minuteString = stringLengthIsEven ? timeString.slice(2, 4) : timeString.slice(1, 3);
|
|
1141
|
+
var secondString = function () {
|
|
1142
|
+
var stringSlice = stringLengthIsEven ? timeString.slice(4, 6) : timeString.slice(3, 5);
|
|
1143
|
+
if (stringSlice === '') return '00';
|
|
1122
1144
|
return stringSlice;
|
|
1123
|
-
}
|
|
1124
|
-
|
|
1145
|
+
}();
|
|
1146
|
+
var timeStringWithColon = hourString.padStart(2, '0') + ':' + minuteString + (showSeconds ? ':' + secondString : '');
|
|
1125
1147
|
return timeStringWithColon;
|
|
1126
1148
|
};
|
|
1127
|
-
|
|
1128
|
-
if (formatedTimeString ===
|
|
1129
|
-
if (formatedTimeString ===
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
if (hourString.match(isNumberTest) && minuteString.match(isNumberTest) && (secondString === "" || secondString.match(isNumberTest))) {
|
|
1149
|
+
var formatedTimeStringToTimeObject = function formatedTimeStringToTimeObject(formatedTimeString) {
|
|
1150
|
+
if (formatedTimeString === inputResult.INVALID) return inputResult.INVALID;
|
|
1151
|
+
if (formatedTimeString === inputResult.RESET_TIME) return inputResult.RESET_TIME;
|
|
1152
|
+
var isNumberTest = /^\d+$/;
|
|
1153
|
+
var hourString = formatedTimeString.slice(0, 2);
|
|
1154
|
+
var minuteString = formatedTimeString.slice(3, 5);
|
|
1155
|
+
var secondString = formatedTimeString.slice(6, 8);
|
|
1156
|
+
if (hourString.match(isNumberTest) && minuteString.match(isNumberTest) && (secondString === '' || secondString.match(isNumberTest))) {
|
|
1136
1157
|
try {
|
|
1137
|
-
|
|
1158
|
+
var timeObject = parseTime(formatedTimeString);
|
|
1138
1159
|
return timeObject;
|
|
1139
1160
|
} catch (e) {
|
|
1140
|
-
return
|
|
1161
|
+
return inputResult.INVALID;
|
|
1141
1162
|
}
|
|
1142
1163
|
}
|
|
1143
|
-
return
|
|
1164
|
+
return inputResult.INVALID;
|
|
1144
1165
|
};
|
|
1145
|
-
|
|
1146
|
-
|
|
1166
|
+
var getSelectedTimeWithTimeFromObject = function getSelectedTimeWithTimeFromObject(newTime) {
|
|
1167
|
+
var selectedTimeWithUpdateTime = (lastValidSelectedTime != null ? lastValidSelectedTime : new Time()).set({
|
|
1147
1168
|
hour: newTime.hour,
|
|
1148
1169
|
minute: newTime.minute,
|
|
1149
1170
|
second: newTime.second
|
|
1150
1171
|
});
|
|
1151
1172
|
return selectedTimeWithUpdateTime;
|
|
1152
1173
|
};
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
onPointerDown,
|
|
1162
|
-
onPointerUp,
|
|
1163
|
-
...usedFieldProps
|
|
1164
|
-
} = fieldProps;
|
|
1165
|
-
return /* @__PURE__ */ jsx(I18nProvider, { locale, children: /* @__PURE__ */ jsx(
|
|
1166
|
-
TextField,
|
|
1167
|
-
{
|
|
1168
|
-
append: append || (showClockIcon === true || showClockIcon === "right" ? /* @__PURE__ */ jsx(ClockIcon, { onClick: () => timeFieldRef?.current?.focus(), inline: true }) : void 0),
|
|
1169
|
-
className: classNames("eds-simple-timepicker", {
|
|
1170
|
-
"eds-simple-timepicker--padding-large": padding === "large",
|
|
1171
|
-
"eds-simple-timepicker--show-seconds": showSeconds,
|
|
1172
|
-
"eds-simple-timepicker--hide-clock": !showClockIcon,
|
|
1173
|
-
"eds-simple-timepicker--has-tooltip": labelTooltip !== void 0
|
|
1174
|
-
}),
|
|
1175
|
-
disabled,
|
|
1176
|
-
disableLabelAnimation: true,
|
|
1177
|
-
feedback,
|
|
1178
|
-
label,
|
|
1179
|
-
labelProps,
|
|
1180
|
-
labelTooltip,
|
|
1181
|
-
onBlur: () => {
|
|
1182
|
-
handleChangeTime();
|
|
1183
|
-
if (selectedTime === null) {
|
|
1184
|
-
addPlaceholderToInput();
|
|
1185
|
-
}
|
|
1174
|
+
var usedFieldProps = _objectWithoutPropertiesLoose(fieldProps, _excluded2);
|
|
1175
|
+
return React.createElement(I18nProvider, {
|
|
1176
|
+
locale: locale
|
|
1177
|
+
}, React.createElement(TextField, _extends({
|
|
1178
|
+
append: append || (showClockIcon === true || showClockIcon === 'right' ? React.createElement(ClockIcon, {
|
|
1179
|
+
onClick: function onClick() {
|
|
1180
|
+
var _timeFieldRef$current;
|
|
1181
|
+
return timeFieldRef == null || (_timeFieldRef$current = timeFieldRef.current) == null ? void 0 : _timeFieldRef$current.focus();
|
|
1186
1182
|
},
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
}
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1183
|
+
inline: true
|
|
1184
|
+
}) : undefined),
|
|
1185
|
+
className: classNames('eds-simple-timepicker', {
|
|
1186
|
+
'eds-simple-timepicker--padding-large': padding === 'large',
|
|
1187
|
+
'eds-simple-timepicker--show-seconds': showSeconds,
|
|
1188
|
+
'eds-simple-timepicker--hide-clock': !showClockIcon,
|
|
1189
|
+
'eds-simple-timepicker--has-tooltip': labelTooltip !== undefined
|
|
1190
|
+
}),
|
|
1191
|
+
disabled: disabled,
|
|
1192
|
+
disableLabelAnimation: true,
|
|
1193
|
+
feedback: feedback,
|
|
1194
|
+
label: label,
|
|
1195
|
+
labelProps: labelProps,
|
|
1196
|
+
labelTooltip: labelTooltip,
|
|
1197
|
+
onBlur: function onBlur() {
|
|
1198
|
+
handleChangeTime();
|
|
1199
|
+
if (selectedTime === null) {
|
|
1200
|
+
addPlaceholderToInput();
|
|
1201
|
+
}
|
|
1202
|
+
},
|
|
1203
|
+
onChange: function onChange(e) {
|
|
1204
|
+
return setInputText(e.target.value);
|
|
1205
|
+
},
|
|
1206
|
+
onFocus: function onFocus() {
|
|
1207
|
+
if (selectedTime === null) {
|
|
1208
|
+
setInputText('');
|
|
1209
|
+
}
|
|
1210
|
+
},
|
|
1211
|
+
onKeyDown: function onKeyDown(_ref2) {
|
|
1212
|
+
var key = _ref2.key;
|
|
1213
|
+
if (key === 'Enter') handleChangeTime();
|
|
1214
|
+
},
|
|
1215
|
+
placeholder: showSeconds ? '–– : –– : ––' : '–– : ––',
|
|
1216
|
+
prepend: prepend || (showClockIcon === 'left' ? React.createElement(ClockIcon, {
|
|
1217
|
+
onClick: function onClick() {
|
|
1218
|
+
var _timeFieldRef$current2;
|
|
1219
|
+
return timeFieldRef == null || (_timeFieldRef$current2 = timeFieldRef.current) == null ? void 0 : _timeFieldRef$current2.focus();
|
|
1220
|
+
}
|
|
1221
|
+
}) : undefined),
|
|
1222
|
+
readOnly: readOnly,
|
|
1223
|
+
ref: mergeRefs(timeFieldRef, inputRef),
|
|
1224
|
+
style: style,
|
|
1225
|
+
value: inputText,
|
|
1226
|
+
variant: variant
|
|
1227
|
+
}, usedFieldProps)));
|
|
1231
1228
|
};
|
|
1229
|
+
|
|
1230
|
+
warnAboutMissingStyles('datepicker', 'form', 'icons');
|
|
1231
|
+
|
|
1232
|
+
export { Calendar, DateField, DatePicker, NativeDatePicker, NativeTimePicker, SimpleTimePicker, TimePicker, ariaLabelIfNorwegian, convertValueToType, createCalendar, focusSegment, getWeekNumberForDate, handleOnChange, lastMillisecondOfDay, modulo, nativeDateToDateValue, nativeDateToTimeValue, timeOrDateValueToNativeDate };
|
|
1232
1233
|
//# sourceMappingURL=datepicker.esm.js.map
|