@entur/datepicker 3.0.7 → 4.0.0-RC.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +60 -8
- package/dist/DatePicker/Calendar.d.ts +13 -0
- package/dist/DatePicker/CalendarCell.d.ts +10 -0
- package/dist/DatePicker/CalendarGrid.d.ts +9 -0
- package/dist/DatePicker/DateField.d.ts +46 -0
- package/dist/DatePicker/DatePicker.d.ts +49 -175
- package/dist/DatePicker/index.d.ts +2 -0
- package/dist/TimePicker/index.d.ts +1 -1
- package/dist/datepicker.cjs.development.js +500 -472
- package/dist/datepicker.cjs.development.js.map +1 -1
- package/dist/datepicker.cjs.production.min.js +1 -1
- package/dist/datepicker.cjs.production.min.js.map +1 -1
- package/dist/datepicker.esm.js +494 -470
- package/dist/datepicker.esm.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/shared/CalendarButton.d.ts +9 -0
- package/dist/{TimePicker/TimeSegment.d.ts → shared/FieldSegment.d.ts} +2 -1
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/utils.d.ts +22 -0
- package/dist/styles.css +209 -139
- package/package.json +15 -7
- package/dist/DatePicker/DatePickerHeader.d.ts +0 -9
- package/dist/DatePicker/DatePickerInput.d.ts +0 -31
- package/dist/TimePicker/utils.d.ts +0 -18
package/dist/datepicker.esm.js
CHANGED
|
@@ -1,19 +1,21 @@
|
|
|
1
|
-
import { mergeRefs,
|
|
2
|
-
import React, { useRef
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { useRandomId, ConditionalWrapper, mergeRefs, useWindowDimensions, useOnClickOutside, useOnEscape, useOnMount, warnAboutMissingStyles } from '@entur/utils';
|
|
2
|
+
import React, { useRef } 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
6
|
import classNames from 'classnames';
|
|
7
|
+
import { BaseFormControl, useVariant, useInputGroupContext, isFilled } from '@entur/form';
|
|
8
|
+
import { ZonedDateTime, parseAbsolute, Time, CalendarDate, CalendarDateTime, getLocalTimeZone, GregorianCalendar, isEqualDay, now, getWeeksInMonth } from '@internationalized/date';
|
|
9
|
+
import { useCalendarCell, useCalendarGrid, useCalendar } from '@react-aria/calendar';
|
|
10
|
+
import { useCalendarState } from '@react-stately/calendar';
|
|
7
11
|
import { LeftArrowIcon, RightArrowIcon, CalendarIcon, DateIcon } from '@entur/icons';
|
|
8
|
-
import {
|
|
12
|
+
import { useButton } from '@react-aria/button';
|
|
9
13
|
import { IconButton } from '@entur/button';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import 'react-
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import { useTimeFieldState } from '@react-stately/datepicker';
|
|
16
|
-
import { now, getLocalTimeZone, ZonedDateTime, parseAbsolute, Time, CalendarDateTime } from '@internationalized/date';
|
|
14
|
+
import { VisuallyHidden } from '@entur/a11y';
|
|
15
|
+
import { useFloating, autoUpdate, offset, flip, shift } from '@floating-ui/react-dom';
|
|
16
|
+
import FocusLock from 'react-focus-lock';
|
|
17
|
+
import { space, zIndexes } from '@entur/tokens';
|
|
18
|
+
import { Modal } from '@entur/modal';
|
|
17
19
|
|
|
18
20
|
function _extends() {
|
|
19
21
|
_extends = Object.assign || function (target) {
|
|
@@ -48,432 +50,540 @@ function _objectWithoutPropertiesLoose(source, excluded) {
|
|
|
48
50
|
return target;
|
|
49
51
|
}
|
|
50
52
|
|
|
51
|
-
var
|
|
52
|
-
var
|
|
53
|
-
|
|
54
|
-
var
|
|
55
|
-
decreaseMonth = _ref.decreaseMonth,
|
|
56
|
-
increaseMonth = _ref.increaseMonth,
|
|
57
|
-
prevMonthButtonDisabled = _ref.prevMonthButtonDisabled,
|
|
58
|
-
nextMonthButtonDisabled = _ref.nextMonthButtonDisabled,
|
|
59
|
-
nextMonthAriaLabel = _ref.nextMonthAriaLabel,
|
|
60
|
-
previousMonthAriaLabel = _ref.previousMonthAriaLabel,
|
|
61
|
-
locale = _ref.locale;
|
|
62
|
-
var currentMonthIndex = (_date$getMonth = date == null ? void 0 : date.getMonth()) != null ? _date$getMonth : 0;
|
|
63
|
-
return React.createElement("div", {
|
|
64
|
-
className: "eds-datepicker__calender__header"
|
|
65
|
-
}, React.createElement(IconButton, {
|
|
66
|
-
type: "button",
|
|
67
|
-
className: "eds-datepicker__calender__header__month-button--left",
|
|
68
|
-
onClick: decreaseMonth,
|
|
69
|
-
disabled: prevMonthButtonDisabled,
|
|
70
|
-
"aria-label": previousMonthAriaLabel + " (" + getMonthName(currentMonthIndex - 1, locale) + ")"
|
|
71
|
-
}, React.createElement(LeftArrowIcon, null)), React.createElement(Heading3, {
|
|
72
|
-
className: "eds-datepicker__calender__header__month-text"
|
|
73
|
-
}, getMonthName(currentMonthIndex, locale)), React.createElement(Heading3, {
|
|
74
|
-
className: "eds-datepicker__calender__header__month-text"
|
|
75
|
-
}, date == null ? void 0 : date.getFullYear()), React.createElement(IconButton, {
|
|
76
|
-
type: "button",
|
|
77
|
-
className: "eds-datepicker__calender__header__month-button--right",
|
|
78
|
-
onClick: increaseMonth,
|
|
79
|
-
disabled: nextMonthButtonDisabled,
|
|
80
|
-
"aria-label": nextMonthAriaLabel + " (" + getMonthName(currentMonthIndex + 1, locale) + ")"
|
|
81
|
-
}, React.createElement(RightArrowIcon, null)));
|
|
82
|
-
};
|
|
53
|
+
var FieldSegment = function FieldSegment(_ref) {
|
|
54
|
+
var segment = _ref.segment,
|
|
55
|
+
state = _ref.state;
|
|
56
|
+
var ref = useRef(null);
|
|
83
57
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
58
|
+
var _useDateSegment = useDateSegment(segment, state, ref),
|
|
59
|
+
segmentProps = _useDateSegment.segmentProps;
|
|
60
|
+
|
|
61
|
+
var is12HourFormatted = state.segments.some(function (segment) {
|
|
62
|
+
return segment.text === 'AM' || segment.text === 'PM';
|
|
88
63
|
});
|
|
89
|
-
return formatter.format(new Date(year, monthIndex));
|
|
90
|
-
}
|
|
91
64
|
|
|
92
|
-
var
|
|
93
|
-
|
|
94
|
-
var style = _ref.style,
|
|
95
|
-
label = _ref.label,
|
|
96
|
-
inputPlaceholder = _ref.inputPlaceholder,
|
|
97
|
-
prepend = _ref.prepend,
|
|
98
|
-
feedback = _ref.feedback,
|
|
99
|
-
variant = _ref.variant,
|
|
100
|
-
disabled = _ref.disabled,
|
|
101
|
-
calendarButtonTooltipOpen = _ref.calendarButtonTooltipOpen,
|
|
102
|
-
calendarButtonTooltipClose = _ref.calendarButtonTooltipClose,
|
|
103
|
-
hideCalendarButton = _ref.hideCalendarButton,
|
|
104
|
-
disableLabelAnimation = _ref.disableLabelAnimation,
|
|
105
|
-
inputRef = _ref.inputRef,
|
|
106
|
-
calendarButtonId = _ref.calendarButtonId,
|
|
107
|
-
forwardRef = _ref.forwardRef,
|
|
108
|
-
toggleCalendarGUI = _ref.toggleCalendarGUI,
|
|
109
|
-
onKeyDownInput = _ref.onKeyDownInput,
|
|
110
|
-
onBlurInput = _ref.onBlurInput,
|
|
111
|
-
selectedDate = _ref.selectedDate,
|
|
112
|
-
setFocusToCalendarGUI = _ref.setFocusToCalendarGUI,
|
|
113
|
-
setShouldFocusOnCalendarButtonAfterSelect = _ref.setShouldFocusOnCalendarButtonAfterSelect,
|
|
114
|
-
calendarGUIIsOpen = _ref.calendarGUIIsOpen,
|
|
115
|
-
onClick = _ref.onClick,
|
|
116
|
-
rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
|
|
65
|
+
var segmentDisplayText = function segmentDisplayText() {
|
|
66
|
+
if (is12HourFormatted) return segment.text; // if number add '0' padding to start when one digit
|
|
117
67
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
68
|
+
if (segment.text.match(/\d+/)) return segment.text.padStart(2, '0');
|
|
69
|
+
return segment.text;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
return React.createElement("div", _extends({}, segmentProps, {
|
|
73
|
+
ref: ref,
|
|
74
|
+
className: classNames('eds-date-and-time-field__segment', {
|
|
75
|
+
'eds-date-and-time-field__segment--placeholder': segment.isPlaceholder,
|
|
76
|
+
'eds-date-and-time-field__segment--dot-separator': segment.text === '.'
|
|
77
|
+
}),
|
|
78
|
+
tabIndex: state.isDisabled ? -1 : segmentProps.tabIndex
|
|
79
|
+
}), segmentDisplayText());
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Tar inn et JS Date-objekt og returnerer et av Date- eller TimeValue-objektene fra @internationalized/date-pakken
|
|
84
|
+
* @param {Date} date JS Date-objekt som ønskes konvertert til et Date- eller TimeValue-objekt
|
|
85
|
+
* @param {boolean} noDateOnlyTime Hvis datoen er irrelevant kan denne settes til true, da får man et Time-objekt uten dato tilbake
|
|
86
|
+
* @param {boolean} noTimeOnlyDate Hvis tidspunktet er irrelevant kan denne settes til true, da får man et CalendarDate-objekt uten tidspunkt 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 | CalendarDate} et av Time- eller DateValue-objektene med verdier fra date
|
|
90
|
+
*/
|
|
91
|
+
|
|
92
|
+
var nativeDateToTimeOrDateValue = function nativeDateToTimeOrDateValue(date, noDateOnlyTime, noTimeOnlyDate, timeZone, offset) {
|
|
93
|
+
if (noDateOnlyTime === void 0) {
|
|
94
|
+
noDateOnlyTime = false;
|
|
135
95
|
}
|
|
136
96
|
|
|
137
|
-
|
|
138
|
-
|
|
97
|
+
if (noTimeOnlyDate === void 0) {
|
|
98
|
+
noTimeOnlyDate = false;
|
|
139
99
|
}
|
|
140
100
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
101
|
+
if (timeZone) {
|
|
102
|
+
if (offset) {
|
|
103
|
+
return new ZonedDateTime(date.getFullYear(), date.getMonth() + 1, date.getDate(), timeZone, offset, date.getHours(), date.getMinutes(), date.getSeconds());
|
|
104
|
+
}
|
|
144
105
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
};
|
|
106
|
+
return parseAbsolute(date.toISOString(), timeZone);
|
|
107
|
+
}
|
|
148
108
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
109
|
+
if (noDateOnlyTime) return new Time(date.getHours(), date.getMinutes(), date.getSeconds(), 0);
|
|
110
|
+
if (noTimeOnlyDate) return new CalendarDate(date.getFullYear(), date.getMonth() + 1, date.getDate());
|
|
111
|
+
return new CalendarDateTime(date.getFullYear(), date.getMonth() + 1, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Tar inn et av Date- eller TimeValue-objektene fra @internationalized/date-pakken og returnerer et JS Date-objekt
|
|
115
|
+
* @param {DateValue | TimeValue} value En dato eller et tidspunkt på Date- eller TimeValue-formatet som ønskes konvertert til et JS Date-objekt
|
|
116
|
+
* @param {string} timeZoneForCalendarDateTime Tidssonen value er i. Fungerer kun med typen er CalendarDateTime
|
|
117
|
+
* @returns {Date} et Date-objekt med verdier fra time
|
|
118
|
+
*/
|
|
119
|
+
// This function uses a lot of @ts-expect-error to make it work with all Date- and TimeValue types. Sorry ...
|
|
153
120
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
121
|
+
var timeOrDateValueToNativeDate = function timeOrDateValueToNativeDate(value, timeZoneForCalendarDateTime) {
|
|
122
|
+
// @ts-expect-error .day does not exist on Time-object
|
|
123
|
+
if (!value.day) {
|
|
124
|
+
// type is Time
|
|
125
|
+
var date = new Date(); // @ts-expect-error hour does not exist on CalendarDate
|
|
159
126
|
|
|
160
|
-
|
|
161
|
-
var _inputRef$current8;
|
|
127
|
+
date.setHours(value.hour); // @ts-expect-error minute does not exist on CalendarDate
|
|
162
128
|
|
|
163
|
-
|
|
164
|
-
var currentSelectionText = selectedDate ? ((_inputRef$current8 = inputRef.current) == null ? void 0 : _inputRef$current8.value) + " valgt" : 'Ingen dato valgt';
|
|
165
|
-
return buttonStateText + ", " + currentSelectionText;
|
|
166
|
-
};
|
|
129
|
+
date.setMinutes(value.minute); // @ts-expect-error second does not exist on CalendarDate
|
|
167
130
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
placeholder: inputPlaceholder,
|
|
172
|
-
prepend: prepend,
|
|
173
|
-
feedback: feedback,
|
|
174
|
-
variant: variant,
|
|
175
|
-
disableLabelAnimation: disableLabelAnimation,
|
|
176
|
-
ref: mergeRefs(ref, inputRef, forwardRef),
|
|
177
|
-
onClick: handleOnClickInputField,
|
|
178
|
-
ariaAlertOnFeedback: true,
|
|
179
|
-
append: !hideCalendarButton && React.createElement(Tooltip, {
|
|
180
|
-
placement: "top",
|
|
181
|
-
content: calendarGUIIsOpen() ? calendarButtonTooltipClose : calendarButtonTooltipOpen,
|
|
182
|
-
disableHoverListener: disabled,
|
|
183
|
-
disableFocusListener: disabled
|
|
184
|
-
}, React.createElement(IconButton, {
|
|
185
|
-
id: calendarButtonId,
|
|
186
|
-
type: "button",
|
|
187
|
-
onClick: handleOnClickCalendarButton,
|
|
188
|
-
tabIndex: calendarGUIIsOpen() ? -1 : 0,
|
|
189
|
-
"aria-label": calendarButtonAriaLabel()
|
|
190
|
-
}, React.createElement(CalendarIcon, null)))
|
|
191
|
-
}, rest));
|
|
192
|
-
});
|
|
131
|
+
date.setSeconds(value.second);
|
|
132
|
+
return date;
|
|
133
|
+
} // @ts-expect-error .day does not exist on Time-object
|
|
193
134
|
|
|
194
|
-
var _excluded$3 = ["style", "className", "selectedDate", "label", "placeholder", "onChange", "onKeyDown", "dateFormats", "minDate", "maxDate", "inline", "disabled", "prepend", "feedback", "variant", "validationFeedback", "validationVariant", "disableLabelAnimation", "calendarButtonTooltipOpen", "calendarButtonTooltipClose", "hideCalendarButton", "hideCalendar", "hideValidation", "weekLabel", "chooseDayAriaLabelPrefix", "previousMonthAriaLabel", "nextMonthAriaLabel", "locale", "open"];
|
|
195
|
-
registerLocale('nb', nb);
|
|
196
|
-
var DatePicker = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
197
|
-
var style = _ref.style,
|
|
198
|
-
className = _ref.className,
|
|
199
|
-
selectedDate = _ref.selectedDate,
|
|
200
|
-
label = _ref.label,
|
|
201
|
-
_ref$placeholder = _ref.placeholder,
|
|
202
|
-
placeholder = _ref$placeholder === void 0 ? 'dd.mm.yyyy' : _ref$placeholder,
|
|
203
|
-
onChange = _ref.onChange,
|
|
204
|
-
_ref$onKeyDown = _ref.onKeyDown,
|
|
205
|
-
onKeyDown = _ref$onKeyDown === void 0 ? function () {
|
|
206
|
-
return null;
|
|
207
|
-
} : _ref$onKeyDown,
|
|
208
|
-
_ref$dateFormats = _ref.dateFormats,
|
|
209
|
-
dateFormats = _ref$dateFormats === void 0 ? ['dd.MM.yyyy', 'ddMMyyyy', 'dd/MM/yyyy', 'ddMMyy'] : _ref$dateFormats,
|
|
210
|
-
minDate = _ref.minDate,
|
|
211
|
-
maxDate = _ref.maxDate,
|
|
212
|
-
_ref$inline = _ref.inline,
|
|
213
|
-
inline = _ref$inline === void 0 ? false : _ref$inline,
|
|
214
|
-
disabled = _ref.disabled,
|
|
215
|
-
prepend = _ref.prepend,
|
|
216
|
-
_ref$feedback = _ref.feedback,
|
|
217
|
-
feedback = _ref$feedback === void 0 ? '' : _ref$feedback,
|
|
218
|
-
variant = _ref.variant,
|
|
219
|
-
_ref$validationFeedba = _ref.validationFeedback,
|
|
220
|
-
validationFeedback = _ref$validationFeedba === void 0 ? 'Ugyldig dato' : _ref$validationFeedba,
|
|
221
|
-
_ref$validationVarian = _ref.validationVariant,
|
|
222
|
-
validationVariant = _ref$validationVarian === void 0 ? 'error' : _ref$validationVarian,
|
|
223
|
-
_ref$disableLabelAnim = _ref.disableLabelAnimation,
|
|
224
|
-
disableLabelAnimation = _ref$disableLabelAnim === void 0 ? false : _ref$disableLabelAnim,
|
|
225
|
-
_ref$calendarButtonTo = _ref.calendarButtonTooltipOpen,
|
|
226
|
-
calendarButtonTooltipOpen = _ref$calendarButtonTo === void 0 ? 'Åpne\xa0kalender' : _ref$calendarButtonTo,
|
|
227
|
-
_ref$calendarButtonTo2 = _ref.calendarButtonTooltipClose,
|
|
228
|
-
calendarButtonTooltipClose = _ref$calendarButtonTo2 === void 0 ? 'Lukk\xa0kalender' : _ref$calendarButtonTo2,
|
|
229
|
-
_ref$hideCalendarButt = _ref.hideCalendarButton,
|
|
230
|
-
hideCalendarButton = _ref$hideCalendarButt === void 0 ? false : _ref$hideCalendarButt,
|
|
231
|
-
_ref$hideCalendar = _ref.hideCalendar,
|
|
232
|
-
hideCalendar = _ref$hideCalendar === void 0 ? false : _ref$hideCalendar,
|
|
233
|
-
_ref$hideValidation = _ref.hideValidation,
|
|
234
|
-
hideValidation = _ref$hideValidation === void 0 ? false : _ref$hideValidation,
|
|
235
|
-
_ref$weekLabel = _ref.weekLabel,
|
|
236
|
-
weekLabel = _ref$weekLabel === void 0 ? 'uke' : _ref$weekLabel,
|
|
237
|
-
_ref$chooseDayAriaLab = _ref.chooseDayAriaLabelPrefix,
|
|
238
|
-
chooseDayAriaLabelPrefix = _ref$chooseDayAriaLab === void 0 ? 'Velg' : _ref$chooseDayAriaLab,
|
|
239
|
-
_ref$previousMonthAri = _ref.previousMonthAriaLabel,
|
|
240
|
-
previousMonthAriaLabel = _ref$previousMonthAri === void 0 ? 'Forrige måned' : _ref$previousMonthAri,
|
|
241
|
-
_ref$nextMonthAriaLab = _ref.nextMonthAriaLabel,
|
|
242
|
-
nextMonthAriaLabel = _ref$nextMonthAriaLab === void 0 ? 'Neste måned' : _ref$nextMonthAriaLab,
|
|
243
|
-
_ref$locale = _ref.locale,
|
|
244
|
-
locale = _ref$locale === void 0 ? nb : _ref$locale,
|
|
245
|
-
open = _ref.open,
|
|
246
|
-
rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
|
|
247
135
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
136
|
+
if (!value.hour) {
|
|
137
|
+
// type is CalendarDate
|
|
138
|
+
// @ts-expect-error .toDate(timeZone) does not exist in type Time
|
|
139
|
+
return value.toDate(timeZoneForCalendarDateTime != null ? timeZoneForCalendarDateTime : getLocalTimeZone());
|
|
140
|
+
} // @ts-expect-error .timeZone does not exist in type Time and CalendarDateTime
|
|
252
141
|
|
|
253
|
-
var _useState = useState(false),
|
|
254
|
-
showValidation = _useState[0],
|
|
255
|
-
setShowValidation = _useState[1];
|
|
256
142
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
143
|
+
if (!value.timeZone) {
|
|
144
|
+
// type is CalendarDateTime
|
|
145
|
+
if (timeZoneForCalendarDateTime) // @ts-expect-error .toDate(timeZone) does not exist in type Time
|
|
146
|
+
return value.toDate(timeZoneForCalendarDateTime);
|
|
147
|
+
return new Date( // @ts-expect-error not in type Time
|
|
148
|
+
value.year, // @ts-expect-error not in type Time
|
|
149
|
+
value.month - 1, // @ts-expect-error not in type Time
|
|
150
|
+
value.day, // @ts-expect-error not in type CalendarDate
|
|
151
|
+
value.hour, // @ts-expect-error not in type CalendarDate
|
|
152
|
+
value.minute, // @ts-expect-error not in type CalendarDate
|
|
153
|
+
value.second);
|
|
154
|
+
} // @ts-expect-error .toDate() does not exist in type Time or CalendarDateTime
|
|
260
155
|
|
|
261
156
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
157
|
+
return value.toDate();
|
|
158
|
+
};
|
|
159
|
+
var createCalendar = function createCalendar(identifier) {
|
|
160
|
+
if (identifier === void 0) {
|
|
161
|
+
identifier = 'gregory';
|
|
162
|
+
}
|
|
265
163
|
|
|
266
|
-
|
|
267
|
-
|
|
164
|
+
switch (identifier) {
|
|
165
|
+
case 'gregory':
|
|
166
|
+
return new GregorianCalendar();
|
|
268
167
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
168
|
+
default:
|
|
169
|
+
throw new Error("Unsupported calendar " + identifier);
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
var ariaLabelIfNorwegian = function ariaLabelIfNorwegian(norwegianAriaLabel, locale, propsCollection) {
|
|
173
|
+
if (locale.toLowerCase() !== 'no-no') return propsCollection['aria-label'];
|
|
174
|
+
return norwegianAriaLabel;
|
|
175
|
+
};
|
|
273
176
|
|
|
274
|
-
|
|
275
|
-
|
|
177
|
+
var _excluded$8 = ["selectedDate", "label", "locale", "showTimeZone", "showTime", "granularity", "disabled", "variant", "feedback", "validationVariant", "validationFeedback", "labelTooltip", "style", "className", "labelProps", "append"];
|
|
178
|
+
var DateField = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
179
|
+
var value = _ref.selectedDate,
|
|
180
|
+
label = _ref.label,
|
|
181
|
+
customLocale = _ref.locale,
|
|
182
|
+
showTimeZone = _ref.showTimeZone,
|
|
183
|
+
showTime = _ref.showTime,
|
|
184
|
+
_ref$granularity = _ref.granularity,
|
|
185
|
+
granularity = _ref$granularity === void 0 ? 'day' : _ref$granularity,
|
|
186
|
+
disabled = _ref.disabled,
|
|
187
|
+
variant = _ref.variant,
|
|
188
|
+
feedback = _ref.feedback,
|
|
189
|
+
_ref$validationVarian = _ref.validationVariant,
|
|
190
|
+
validationVariant = _ref$validationVarian === void 0 ? 'error' : _ref$validationVarian,
|
|
191
|
+
_ref$validationFeedba = _ref.validationFeedback,
|
|
192
|
+
validationFeedback = _ref$validationFeedba === void 0 ? 'Ugyldig dato' : _ref$validationFeedba,
|
|
193
|
+
labelTooltip = _ref.labelTooltip,
|
|
194
|
+
style = _ref.style,
|
|
195
|
+
className = _ref.className,
|
|
196
|
+
parentLabelProps = _ref.labelProps,
|
|
197
|
+
append = _ref.append,
|
|
198
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$8);
|
|
276
199
|
|
|
277
|
-
var
|
|
278
|
-
|
|
200
|
+
var _useLocale = useLocale(),
|
|
201
|
+
locale = _useLocale.locale;
|
|
279
202
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
203
|
+
var state = useDateFieldState(_extends({}, rest, {
|
|
204
|
+
locale: customLocale != null ? customLocale : locale,
|
|
205
|
+
createCalendar: createCalendar,
|
|
206
|
+
value: value === null ? undefined : value,
|
|
207
|
+
hideTimeZone: !showTimeZone,
|
|
208
|
+
granularity: showTime ? 'minute' : granularity
|
|
209
|
+
}));
|
|
210
|
+
var dateFieldRef = useRef(null);
|
|
286
211
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
212
|
+
var _useDateField = useDateField(_extends({}, rest, {
|
|
213
|
+
label: label,
|
|
214
|
+
isDisabled: disabled || rest.isDisabled
|
|
215
|
+
}), state, dateFieldRef),
|
|
216
|
+
labelProps = _useDateField.labelProps,
|
|
217
|
+
fieldProps = _useDateField.fieldProps;
|
|
218
|
+
|
|
219
|
+
var id = useRandomId('datefield');
|
|
220
|
+
return React.createElement(ConditionalWrapper, {
|
|
221
|
+
condition: customLocale !== undefined,
|
|
222
|
+
wrapper: function wrapper(child) {
|
|
223
|
+
return React.createElement(I18nProvider, {
|
|
224
|
+
locale: customLocale
|
|
225
|
+
}, child);
|
|
294
226
|
}
|
|
227
|
+
}, React.createElement(BaseFormControl, _extends({
|
|
228
|
+
style: style,
|
|
229
|
+
className: classNames('eds-datefield', className),
|
|
230
|
+
labelId: id,
|
|
231
|
+
ref: mergeRefs(dateFieldRef, ref),
|
|
232
|
+
disabled: state.isDisabled,
|
|
233
|
+
disableLabelAnimation: true,
|
|
234
|
+
label: label,
|
|
235
|
+
labelTooltip: labelTooltip,
|
|
236
|
+
labelProps: parentLabelProps != null ? parentLabelProps : labelProps
|
|
237
|
+
}, fieldProps, {
|
|
238
|
+
variant: (variant != null ? variant : state.validationState === 'invalid') ? validationVariant : undefined,
|
|
239
|
+
feedback: (feedback != null ? feedback : state.validationState === 'invalid') ? validationFeedback : undefined,
|
|
240
|
+
append: append,
|
|
241
|
+
ariaAlertOnFeedback: true
|
|
242
|
+
}), state.segments.map(function (segment, i) {
|
|
243
|
+
return React.createElement(FieldSegment, {
|
|
244
|
+
segment: segment,
|
|
245
|
+
state: state,
|
|
246
|
+
key: i
|
|
247
|
+
});
|
|
248
|
+
})));
|
|
249
|
+
});
|
|
295
250
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
251
|
+
var _excluded$7 = ["children", "className", "style"];
|
|
252
|
+
var CalendarButton = function CalendarButton(_ref) {
|
|
253
|
+
var children = _ref.children,
|
|
254
|
+
className = _ref.className,
|
|
255
|
+
style = _ref.style,
|
|
256
|
+
props = _objectWithoutPropertiesLoose(_ref, _excluded$7);
|
|
302
257
|
|
|
303
|
-
var
|
|
304
|
-
if (datePickerGUIIsOpen()) return;
|
|
305
|
-
validateInput();
|
|
306
|
-
forceUpdateInputFormat();
|
|
307
|
-
};
|
|
258
|
+
var ref = useRef(null);
|
|
308
259
|
|
|
309
|
-
var
|
|
310
|
-
|
|
260
|
+
var _useButton = useButton(props, ref),
|
|
261
|
+
buttonProps = _useButton.buttonProps;
|
|
311
262
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
});
|
|
319
|
-
});
|
|
320
|
-
var parsedDateFromInputIsTheSameAsSelectedDate = selectedDate && inputValueParsedWithAllDateFormats.some(function (dateFormat) {
|
|
321
|
-
return isSameDay(dateFormat, selectedDate);
|
|
322
|
-
});
|
|
263
|
+
return React.createElement(IconButton, _extends({}, buttonProps, {
|
|
264
|
+
ref: ref,
|
|
265
|
+
className: className,
|
|
266
|
+
style: style
|
|
267
|
+
}), children);
|
|
268
|
+
};
|
|
323
269
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
270
|
+
var _excluded$6 = ["state", "date", "onSelectedCellClick"];
|
|
271
|
+
var CalendarCell = function CalendarCell(_ref) {
|
|
272
|
+
var _state$timeZone;
|
|
273
|
+
|
|
274
|
+
var state = _ref.state,
|
|
275
|
+
date = _ref.date,
|
|
276
|
+
_ref$onSelectedCellCl = _ref.onSelectedCellClick,
|
|
277
|
+
onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
|
|
278
|
+
return;
|
|
279
|
+
} : _ref$onSelectedCellCl,
|
|
280
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
|
|
281
|
+
|
|
282
|
+
var cellRef = useRef(null);
|
|
283
|
+
|
|
284
|
+
var _useCalendarCell = useCalendarCell({
|
|
285
|
+
date: date
|
|
286
|
+
}, state, cellRef),
|
|
287
|
+
cellProps = _useCalendarCell.cellProps,
|
|
288
|
+
buttonProps = _useCalendarCell.buttonProps,
|
|
289
|
+
isSelected = _useCalendarCell.isSelected,
|
|
290
|
+
isOutsideVisibleRange = _useCalendarCell.isOutsideVisibleRange,
|
|
291
|
+
isDisabled = _useCalendarCell.isDisabled,
|
|
292
|
+
isUnavailable = _useCalendarCell.isUnavailable,
|
|
293
|
+
formattedDate = _useCalendarCell.formattedDate;
|
|
294
|
+
|
|
295
|
+
return React.createElement("td", _extends({}, cellProps, {
|
|
296
|
+
className: "eds-datepicker__calendar__grid__cell__td"
|
|
297
|
+
}), React.createElement("div", _extends({}, buttonProps, {
|
|
298
|
+
ref: cellRef,
|
|
299
|
+
hidden: isOutsideVisibleRange,
|
|
300
|
+
className: classNames('eds-datepicker__calendar__grid__cell', {
|
|
301
|
+
'eds-datepicker__calendar__grid__cell--selected': isSelected,
|
|
302
|
+
'eds-datepicker__calendar__grid__cell--disabled': isDisabled || isUnavailable,
|
|
303
|
+
'eds-datepicker__calendar__grid__cell--outside-month': isOutsideVisibleRange,
|
|
304
|
+
'eds-datepicker__calendar__grid__cell--today': isEqualDay(date, now((_state$timeZone = state.timeZone) != null ? _state$timeZone : getLocalTimeZone()))
|
|
305
|
+
})
|
|
306
|
+
}, rest, {
|
|
307
|
+
onClick: function onClick(e) {
|
|
308
|
+
buttonProps.onClick && buttonProps.onClick(e);
|
|
309
|
+
isSelected && onSelectedCellClick();
|
|
330
310
|
}
|
|
331
|
-
};
|
|
311
|
+
}), formattedDate));
|
|
312
|
+
};
|
|
332
313
|
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
return {
|
|
343
|
-
feedback: '',
|
|
344
|
-
variant: undefined
|
|
345
|
-
};
|
|
346
|
-
};
|
|
314
|
+
var _excluded$5 = ["state", "navigationDescription", "onSelectedCellClick"];
|
|
315
|
+
var CalendarGrid = function CalendarGrid(_ref) {
|
|
316
|
+
var state = _ref.state,
|
|
317
|
+
navigationDescription = _ref.navigationDescription,
|
|
318
|
+
_ref$onSelectedCellCl = _ref.onSelectedCellClick,
|
|
319
|
+
onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
|
|
320
|
+
return;
|
|
321
|
+
} : _ref$onSelectedCellCl,
|
|
322
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
|
|
347
323
|
|
|
348
|
-
var
|
|
349
|
-
return requestAnimationFrame(function () {
|
|
350
|
-
var _inputRef$current3;
|
|
324
|
+
var calendarGridId = useRandomId('eds-calendar');
|
|
351
325
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
};
|
|
326
|
+
var _useLocale = useLocale(),
|
|
327
|
+
locale = _useLocale.locale;
|
|
355
328
|
|
|
356
|
-
var
|
|
357
|
-
|
|
329
|
+
var _useCalendarGrid = useCalendarGrid(rest, state),
|
|
330
|
+
gridProps = _useCalendarGrid.gridProps,
|
|
331
|
+
headerProps = _useCalendarGrid.headerProps,
|
|
332
|
+
weekDays = _useCalendarGrid.weekDays;
|
|
358
333
|
|
|
359
|
-
|
|
360
|
-
|
|
334
|
+
var weeksInMonth = getWeeksInMonth(state.visibleRange.start, locale);
|
|
335
|
+
var weeksArray = Array.from(Array(weeksInMonth).keys());
|
|
336
|
+
|
|
337
|
+
var weekDaysMapped = function weekDaysMapped() {
|
|
338
|
+
if (locale.toLowerCase() === 'no-no' || locale.toLowerCase() === 'no') return ['ma', 'ti', 'on', 'to', 'fr', 'lø', 'sø'];
|
|
339
|
+
if (weekDays.toString() === 'M,T,W,T,F,S,S') return ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];
|
|
340
|
+
return weekDays.map(function (day) {
|
|
341
|
+
return day.toLowerCase();
|
|
361
342
|
});
|
|
362
343
|
};
|
|
363
344
|
|
|
364
|
-
var
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
return
|
|
345
|
+
var getNavigationDescription = function getNavigationDescription() {
|
|
346
|
+
if (navigationDescription) return navigationDescription;
|
|
347
|
+
if (locale.toLowerCase().includes('en')) return 'Use the arrow keys to navigate between dates';
|
|
348
|
+
return 'Bruk piltastene til å navigere mellom datoer';
|
|
368
349
|
};
|
|
369
350
|
|
|
370
|
-
|
|
371
|
-
|
|
351
|
+
return React.createElement(React.Fragment, null, React.createElement("table", _extends({}, gridProps, {
|
|
352
|
+
cellSpacing: "0",
|
|
353
|
+
className: "eds-datepicker__calendar__grid"
|
|
354
|
+
}), React.createElement("thead", _extends({}, headerProps), React.createElement("tr", null, weekDaysMapped().map(function (day, index) {
|
|
355
|
+
return React.createElement("th", {
|
|
356
|
+
key: index
|
|
357
|
+
}, day);
|
|
358
|
+
}))), React.createElement("tbody", null, weeksArray.map(function (weekIndex) {
|
|
359
|
+
return React.createElement("tr", {
|
|
360
|
+
key: weekIndex
|
|
361
|
+
}, state.getDatesInWeek(weekIndex).map(function (date, i) {
|
|
362
|
+
return date ? React.createElement(CalendarCell, {
|
|
363
|
+
key: i,
|
|
364
|
+
state: state,
|
|
365
|
+
date: date,
|
|
366
|
+
"aria-describedby": calendarGridId + 'description',
|
|
367
|
+
onSelectedCellClick: onSelectedCellClick
|
|
368
|
+
}) : React.createElement("td", {
|
|
369
|
+
key: i
|
|
370
|
+
});
|
|
371
|
+
}));
|
|
372
|
+
}))), React.createElement(VisuallyHidden, {
|
|
373
|
+
id: calendarGridId + 'description'
|
|
374
|
+
}, getNavigationDescription()));
|
|
375
|
+
};
|
|
376
|
+
|
|
377
|
+
var _excluded$4 = ["selectedDate", "onChange", "locale", "style", "children", "navigationDescription", "onSelectedCellClick"];
|
|
378
|
+
var Calendar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
379
|
+
var onChange = _ref.onChange,
|
|
380
|
+
customLocale = _ref.locale,
|
|
381
|
+
style = _ref.style,
|
|
382
|
+
navigationDescription = _ref.navigationDescription,
|
|
383
|
+
_ref$onSelectedCellCl = _ref.onSelectedCellClick,
|
|
384
|
+
onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
|
|
385
|
+
return;
|
|
386
|
+
} : _ref$onSelectedCellCl,
|
|
387
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
|
|
372
388
|
|
|
373
|
-
|
|
374
|
-
|
|
389
|
+
var _useLocale = useLocale(),
|
|
390
|
+
locale = _useLocale.locale;
|
|
375
391
|
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
392
|
+
var state = useCalendarState(_extends({}, rest, {
|
|
393
|
+
onChange: onChange,
|
|
394
|
+
locale: customLocale != null ? customLocale : locale,
|
|
395
|
+
createCalendar: createCalendar
|
|
396
|
+
}));
|
|
397
|
+
|
|
398
|
+
var _useCalendar = useCalendar(rest, state),
|
|
399
|
+
calendarProps = _useCalendar.calendarProps,
|
|
400
|
+
prevButtonProps = _useCalendar.prevButtonProps,
|
|
401
|
+
nextButtonProps = _useCalendar.nextButtonProps,
|
|
402
|
+
title = _useCalendar.title;
|
|
403
|
+
|
|
404
|
+
return React.createElement(ConditionalWrapper, {
|
|
405
|
+
condition: customLocale,
|
|
406
|
+
wrapper: function wrapper(child) {
|
|
407
|
+
return React.createElement(I18nProvider, {
|
|
408
|
+
locale: customLocale
|
|
409
|
+
}, child);
|
|
410
|
+
}
|
|
411
|
+
}, React.createElement("div", _extends({}, calendarProps, {
|
|
412
|
+
ref: ref,
|
|
413
|
+
className: "eds-datepicker__calendar",
|
|
414
|
+
style: style
|
|
415
|
+
}), React.createElement("div", {
|
|
416
|
+
className: "eds-datepicker__calendar__header"
|
|
417
|
+
}, React.createElement(CalendarButton, _extends({}, prevButtonProps, {
|
|
418
|
+
"aria-label": ariaLabelIfNorwegian('Forrige måned', locale, prevButtonProps)
|
|
419
|
+
}), React.createElement(LeftArrowIcon, {
|
|
420
|
+
size: 20
|
|
421
|
+
})), React.createElement("h2", null, title), React.createElement(CalendarButton, _extends({}, nextButtonProps, {
|
|
422
|
+
"aria-label": ariaLabelIfNorwegian('Neste måned', locale, nextButtonProps)
|
|
423
|
+
}), React.createElement(RightArrowIcon, {
|
|
424
|
+
size: 20
|
|
425
|
+
}))), React.createElement(CalendarGrid, {
|
|
426
|
+
state: state,
|
|
427
|
+
navigationDescription: navigationDescription,
|
|
428
|
+
onSelectedCellClick: onSelectedCellClick
|
|
429
|
+
})));
|
|
430
|
+
});
|
|
379
431
|
|
|
380
|
-
|
|
381
|
-
|
|
432
|
+
var _excluded$3 = ["selectedDate", "onChange", "locale", "disabled", "showTime", "showTimeZone", "className", "style", "variant", "feedback", "validationVariant", "validationFeedback", "disableModal", "labelTooltip", "navigationDescription", "minDate", "maxDate", "modalTreshold"];
|
|
433
|
+
var DatePicker = function DatePicker(_ref) {
|
|
434
|
+
var value = _ref.selectedDate,
|
|
435
|
+
onChange = _ref.onChange,
|
|
436
|
+
locale = _ref.locale,
|
|
437
|
+
isDisabled = _ref.disabled,
|
|
438
|
+
showTime = _ref.showTime,
|
|
439
|
+
_ref$showTimeZone = _ref.showTimeZone,
|
|
440
|
+
showTimeZone = _ref$showTimeZone === void 0 ? false : _ref$showTimeZone,
|
|
441
|
+
className = _ref.className,
|
|
442
|
+
variant = _ref.variant,
|
|
443
|
+
feedback = _ref.feedback,
|
|
444
|
+
validationVariant = _ref.validationVariant,
|
|
445
|
+
validationFeedback = _ref.validationFeedback,
|
|
446
|
+
_ref$disableModal = _ref.disableModal,
|
|
447
|
+
disableModal = _ref$disableModal === void 0 ? false : _ref$disableModal,
|
|
448
|
+
labelTooltip = _ref.labelTooltip,
|
|
449
|
+
navigationDescription = _ref.navigationDescription,
|
|
450
|
+
minValue = _ref.minDate,
|
|
451
|
+
maxValue = _ref.maxDate,
|
|
452
|
+
_ref$modalTreshold = _ref.modalTreshold,
|
|
453
|
+
modalTreshold = _ref$modalTreshold === void 0 ? 1000 : _ref$modalTreshold,
|
|
454
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
|
|
382
455
|
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
456
|
+
var CALENDAR_MODAL_MAX_SCREEN_WIDTH = modalTreshold;
|
|
457
|
+
var datePickerRef = useRef(null);
|
|
458
|
+
var calendarRef = useRef(null);
|
|
459
|
+
var dateFieldRef = useRef(null);
|
|
460
|
+
|
|
461
|
+
var _useWindowDimensions = useWindowDimensions(),
|
|
462
|
+
width = _useWindowDimensions.width;
|
|
463
|
+
|
|
464
|
+
var state = useDatePickerState(_extends({}, rest, {
|
|
465
|
+
minValue: minValue,
|
|
466
|
+
maxValue: maxValue,
|
|
467
|
+
value: value,
|
|
468
|
+
onChange: onChange
|
|
469
|
+
}));
|
|
470
|
+
|
|
471
|
+
var _useDatePicker = useDatePicker(_extends({
|
|
472
|
+
isDisabled: isDisabled,
|
|
473
|
+
minValue: minValue,
|
|
474
|
+
maxValue: maxValue,
|
|
475
|
+
autoFocus: true
|
|
476
|
+
}, rest), state, datePickerRef),
|
|
477
|
+
groupProps = _useDatePicker.groupProps,
|
|
478
|
+
labelProps = _useDatePicker.labelProps,
|
|
479
|
+
fieldProps = _useDatePicker.fieldProps,
|
|
480
|
+
buttonProps = _useDatePicker.buttonProps,
|
|
481
|
+
dialogProps = _useDatePicker.dialogProps,
|
|
482
|
+
calendarProps = _useDatePicker.calendarProps; // calculations for floating-UI popover position
|
|
483
|
+
|
|
484
|
+
|
|
485
|
+
var _useFloating = useFloating({
|
|
486
|
+
whileElementsMounted: autoUpdate,
|
|
487
|
+
placement: 'bottom-start',
|
|
488
|
+
middleware: [offset(space.extraSmall), flip(), shift({
|
|
489
|
+
padding: space.extraSmall
|
|
490
|
+
})]
|
|
491
|
+
}),
|
|
492
|
+
x = _useFloating.x,
|
|
493
|
+
y = _useFloating.y,
|
|
494
|
+
reference = _useFloating.reference,
|
|
495
|
+
floating = _useFloating.floating,
|
|
496
|
+
strategy = _useFloating.strategy;
|
|
497
|
+
|
|
498
|
+
var onChangeCalendar = function onChangeCalendar(newSelectedDate) {
|
|
499
|
+
// Necessary to avoid state update on unmounted component
|
|
500
|
+
requestAnimationFrame(function () {
|
|
501
|
+
calendarProps.onChange && calendarProps.onChange(newSelectedDate);
|
|
388
502
|
});
|
|
389
|
-
setShouldFocusOnCalendarButtonAfterSelect(true);
|
|
390
|
-
setShowValidation(false);
|
|
391
503
|
};
|
|
392
504
|
|
|
393
|
-
|
|
394
|
-
|
|
505
|
+
useOnClickOutside([calendarRef], function () {
|
|
506
|
+
state.setOpen(false);
|
|
507
|
+
});
|
|
508
|
+
useOnEscape(calendarRef, function () {
|
|
509
|
+
state.setOpen(false);
|
|
510
|
+
});
|
|
395
511
|
|
|
396
|
-
|
|
397
|
-
|
|
512
|
+
var calendarSharedProps = _extends({}, dialogProps, calendarProps, {
|
|
513
|
+
disabled: calendarProps.isDisabled,
|
|
514
|
+
navigationDescription: navigationDescription,
|
|
515
|
+
onSelectedCellClick: function onSelectedCellClick() {
|
|
516
|
+
return state.setOpen(false);
|
|
517
|
+
},
|
|
518
|
+
onChange: onChangeCalendar
|
|
519
|
+
});
|
|
398
520
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
onClickOutside: handleOnClickOutside,
|
|
408
|
-
id: datepickerId,
|
|
409
|
-
ariaLabelledBy: datepickerId,
|
|
410
|
-
showPopperArrow: false,
|
|
411
|
-
locale: locale,
|
|
412
|
-
inline: inline,
|
|
413
|
-
disabled: disabled,
|
|
414
|
-
preventOpenOnFocus: true,
|
|
415
|
-
chooseDayAriaLabelPrefix: chooseDayAriaLabelPrefix,
|
|
416
|
-
open: hideCalendar ? false : open,
|
|
417
|
-
ref: datepickerRef,
|
|
418
|
-
calendarClassName: "eds-datepicker__calender",
|
|
419
|
-
dayClassName: function dayClassName() {
|
|
420
|
-
return 'eds-datepicker__calender__day';
|
|
521
|
+
var useModal = width <= CALENDAR_MODAL_MAX_SCREEN_WIDTH && !disableModal;
|
|
522
|
+
var popoverCalendar = React.createElement("div", {
|
|
523
|
+
// styling for floating-UI popover
|
|
524
|
+
style: {
|
|
525
|
+
position: strategy,
|
|
526
|
+
top: y != null ? y : 0,
|
|
527
|
+
left: x != null ? x : 0,
|
|
528
|
+
zIndex: zIndexes.popover
|
|
421
529
|
},
|
|
422
|
-
|
|
423
|
-
|
|
530
|
+
ref: function ref(node) {
|
|
531
|
+
floating(node);
|
|
532
|
+
}
|
|
533
|
+
}, React.createElement(FocusLock, {
|
|
534
|
+
disabled: !state.isOpen || useModal,
|
|
535
|
+
returnFocus: true
|
|
536
|
+
}, state.isOpen && React.createElement(Calendar, _extends({}, calendarSharedProps, {
|
|
537
|
+
ref: calendarRef
|
|
538
|
+
}))));
|
|
539
|
+
var modalCalendar = React.createElement(Modal, {
|
|
540
|
+
size: "small",
|
|
541
|
+
title: "",
|
|
542
|
+
open: state.isOpen,
|
|
543
|
+
onDismiss: function onDismiss() {
|
|
544
|
+
return state.setOpen(false);
|
|
424
545
|
},
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
var date = _ref2.date,
|
|
433
|
-
changeYear = _ref2.changeYear,
|
|
434
|
-
changeMonth = _ref2.changeMonth,
|
|
435
|
-
decreaseMonth = _ref2.decreaseMonth,
|
|
436
|
-
increaseMonth = _ref2.increaseMonth,
|
|
437
|
-
prevMonthButtonDisabled = _ref2.prevMonthButtonDisabled,
|
|
438
|
-
nextMonthButtonDisabled = _ref2.nextMonthButtonDisabled;
|
|
439
|
-
return React.createElement(DatePickerHeader, {
|
|
440
|
-
date: date,
|
|
441
|
-
changeYear: changeYear,
|
|
442
|
-
changeMonth: changeMonth,
|
|
443
|
-
increaseMonth: increaseMonth,
|
|
444
|
-
decreaseMonth: decreaseMonth,
|
|
445
|
-
prevMonthButtonDisabled: prevMonthButtonDisabled,
|
|
446
|
-
nextMonthButtonDisabled: nextMonthButtonDisabled,
|
|
447
|
-
previousMonthAriaLabel: previousMonthAriaLabel,
|
|
448
|
-
nextMonthAriaLabel: nextMonthAriaLabel,
|
|
546
|
+
closeOnClickOutside: true,
|
|
547
|
+
className: "eds-datepicker__calendar-modal"
|
|
548
|
+
}, React.createElement(Calendar, _extends({}, calendarSharedProps)));
|
|
549
|
+
return React.createElement(ConditionalWrapper, {
|
|
550
|
+
condition: locale !== undefined,
|
|
551
|
+
wrapper: function wrapper(child) {
|
|
552
|
+
return React.createElement(I18nProvider, {
|
|
449
553
|
locale: locale
|
|
450
|
-
});
|
|
554
|
+
}, child);
|
|
555
|
+
}
|
|
556
|
+
}, React.createElement("div", {
|
|
557
|
+
className: classNames('eds-datepicker', className)
|
|
558
|
+
}, React.createElement("div", _extends({}, groupProps, {
|
|
559
|
+
ref: function ref(node) {
|
|
560
|
+
datePickerRef.current = node;
|
|
561
|
+
reference(node);
|
|
451
562
|
},
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
setFocusToCalendarGUI: setFocusToCalendarGUI,
|
|
469
|
-
setShouldFocusOnCalendarButtonAfterSelect: setShouldFocusOnCalendarButtonAfterSelect,
|
|
470
|
-
calendarGUIIsOpen: datePickerGUIIsOpen,
|
|
471
|
-
disableLabelAnimation: disableLabelAnimation,
|
|
472
|
-
hideCalendarButton: hideCalendarButton,
|
|
473
|
-
selectedDate: selectedDate
|
|
563
|
+
id: undefined,
|
|
564
|
+
className: "eds-datepicker__datefield__wrapper"
|
|
565
|
+
}), React.createElement(DateField, _extends({}, fieldProps, {
|
|
566
|
+
selectedDate: state.value,
|
|
567
|
+
label: rest.label,
|
|
568
|
+
labelProps: labelProps,
|
|
569
|
+
showTime: showTime,
|
|
570
|
+
showTimeZone: showTimeZone,
|
|
571
|
+
ref: dateFieldRef,
|
|
572
|
+
variant: variant,
|
|
573
|
+
feedback: feedback,
|
|
574
|
+
validationVariant: validationVariant,
|
|
575
|
+
validationFeedback: validationFeedback,
|
|
576
|
+
labelTooltip: labelTooltip,
|
|
577
|
+
className: classNames('eds-datepicker__datefield', {
|
|
578
|
+
'eds-datepicker__datefield--disabled': fieldProps.isDisabled
|
|
474
579
|
})
|
|
475
|
-
},
|
|
476
|
-
|
|
580
|
+
})), !fieldProps.isDisabled && React.createElement(CalendarButton, _extends({}, buttonProps, {
|
|
581
|
+
onPress: function onPress() {
|
|
582
|
+
return state.setOpen(!state.isOpen);
|
|
583
|
+
},
|
|
584
|
+
className: "eds-datepicker__open-calendar-button"
|
|
585
|
+
}), React.createElement(CalendarIcon, null)), useModal ? modalCalendar : popoverCalendar)));
|
|
586
|
+
};
|
|
477
587
|
|
|
478
588
|
var _excluded$2 = ["className", "style", "label", "onChange", "feedback", "variant", "disableLabelAnimation", "prepend"],
|
|
479
589
|
_excluded2$1 = ["onChange", "variant", "value"];
|
|
@@ -555,33 +665,6 @@ var NativeDatePickerBase = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {
|
|
|
555
665
|
}, rest));
|
|
556
666
|
});
|
|
557
667
|
|
|
558
|
-
var TimeSegment = function TimeSegment(_ref) {
|
|
559
|
-
var segment = _ref.segment,
|
|
560
|
-
state = _ref.state;
|
|
561
|
-
var ref = useRef(null);
|
|
562
|
-
|
|
563
|
-
var _useDateSegment = useDateSegment(segment, state, ref),
|
|
564
|
-
segmentProps = _useDateSegment.segmentProps;
|
|
565
|
-
|
|
566
|
-
var is12HourFormatted = state.segments.some(function (segment) {
|
|
567
|
-
return segment.text === 'AM' || segment.text === 'PM';
|
|
568
|
-
});
|
|
569
|
-
|
|
570
|
-
var segmentDisplayText = function segmentDisplayText() {
|
|
571
|
-
if (is12HourFormatted) return segment.text; // if number add '0' padding to start when one digit
|
|
572
|
-
|
|
573
|
-
if (segment.text.match(/\d+/)) return segment.text.padStart(2, '0');
|
|
574
|
-
return segment.text;
|
|
575
|
-
};
|
|
576
|
-
|
|
577
|
-
return React.createElement("div", _extends({}, segmentProps, {
|
|
578
|
-
ref: ref,
|
|
579
|
-
className: classNames('eds-timepicker__segment', {
|
|
580
|
-
'eds-timepicker__segment--placeholder': segment.isPlaceholder
|
|
581
|
-
})
|
|
582
|
-
}), segmentDisplayText());
|
|
583
|
-
};
|
|
584
|
-
|
|
585
668
|
var TimePickerArrowButton = function TimePickerArrowButton(_ref) {
|
|
586
669
|
var direction = _ref.direction,
|
|
587
670
|
onClick = _ref.onClick,
|
|
@@ -696,7 +779,7 @@ var TimePicker = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
696
779
|
variant: variant,
|
|
697
780
|
feedback: feedback
|
|
698
781
|
}), state.segments.map(function (segment, i) {
|
|
699
|
-
return React.createElement(
|
|
782
|
+
return React.createElement(FieldSegment, {
|
|
700
783
|
segment: segment,
|
|
701
784
|
state: state,
|
|
702
785
|
key: i
|
|
@@ -784,66 +867,7 @@ var NativeTimePickerBase = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {
|
|
|
784
867
|
}, rest));
|
|
785
868
|
});
|
|
786
869
|
|
|
787
|
-
/**
|
|
788
|
-
* Tar inn et JS Date-objekt og returnerer et av TimeValue-objektene fra @internationalized/date-pakken
|
|
789
|
-
* @param {Date} date JS Date-objekt som ønskes konvertert til et TimeValue-objekt
|
|
790
|
-
* @param {boolean} noDateOnlyTime Hvis datoen er irrelevant kan denne settes til true, da får man et Time-objekt uten dato tilbake
|
|
791
|
-
* @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
|
|
792
|
-
* @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.
|
|
793
|
-
* @returns {Time | CalendarDateTime | ZonedDateTime} et av TimeValue-objektene med verdier fra date
|
|
794
|
-
*/
|
|
795
|
-
|
|
796
|
-
var nativeDateToTimeValue = function nativeDateToTimeValue(date, noDateOnlyTime, timeZone, offset) {
|
|
797
|
-
if (noDateOnlyTime === void 0) {
|
|
798
|
-
noDateOnlyTime = false;
|
|
799
|
-
}
|
|
800
|
-
|
|
801
|
-
if (timeZone) {
|
|
802
|
-
if (offset) {
|
|
803
|
-
return new ZonedDateTime(date.getFullYear(), date.getMonth() + 1, date.getDate(), timeZone, offset, date.getHours(), date.getMinutes(), date.getSeconds());
|
|
804
|
-
}
|
|
805
|
-
|
|
806
|
-
return parseAbsolute(date.toISOString(), timeZone);
|
|
807
|
-
}
|
|
808
|
-
|
|
809
|
-
if (noDateOnlyTime) return new Time(date.getHours(), date.getMinutes(), date.getSeconds(), 0);
|
|
810
|
-
return new CalendarDateTime(date.getFullYear(), date.getMonth() + 1, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());
|
|
811
|
-
};
|
|
812
|
-
/**
|
|
813
|
-
* Tar inn et av TimeValue-objektene fra @internationalized/date-pakken og returnerer et JS Date-objekt
|
|
814
|
-
* @param {TimeValue} time Et tidspunkt på TimeValue-formatet som ønsket konvertert til et JS Date-objekt
|
|
815
|
-
* @param {string} timeZoneForCalendarDateTime Tidssonen time er i. Fungerer kun med typen er CalendarDateTime
|
|
816
|
-
* @returns {Date} et Date-objekt med verdier fra time
|
|
817
|
-
*/
|
|
818
|
-
// This function uses a lot of @ts-expect-error to make it work with all TimeValue types. Sorry ...
|
|
819
|
-
|
|
820
|
-
var timeValueToNativeDate = function timeValueToNativeDate(time, timeZoneForCalendarDateTime) {
|
|
821
|
-
// @ts-expect-error .day does not exist on Time-object
|
|
822
|
-
if (!time.day) {
|
|
823
|
-
// type is Time
|
|
824
|
-
var date = new Date();
|
|
825
|
-
date.setHours(time.hour);
|
|
826
|
-
date.setMinutes(time.minute);
|
|
827
|
-
date.setSeconds(time.second);
|
|
828
|
-
return date;
|
|
829
|
-
} // @ts-expect-error .timeZone does not exist in type Time and CalendarDateTime
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
if (!time.timeZone) {
|
|
833
|
-
// type is CalendarDateTime
|
|
834
|
-
if (timeZoneForCalendarDateTime) // @ts-expect-error .toDate(timeZone) does not exist in type Time
|
|
835
|
-
return time.toDate(timeZoneForCalendarDateTime);
|
|
836
|
-
return new Date( // @ts-expect-error not in type Time
|
|
837
|
-
time.year, // @ts-expect-error not in type Time
|
|
838
|
-
time.month - 1, // @ts-expect-error not in type Time
|
|
839
|
-
time.day, time.hour, time.minute, time.second);
|
|
840
|
-
} // @ts-expect-error .toDate() does not exist in type Time or CalendarDateTime
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
return time.toDate();
|
|
844
|
-
};
|
|
845
|
-
|
|
846
870
|
warnAboutMissingStyles('datepicker', 'form', 'icons');
|
|
847
871
|
|
|
848
|
-
export { DatePicker, NativeDatePicker, NativeTimePicker, TimePicker,
|
|
872
|
+
export { Calendar, DateField, DatePicker, NativeDatePicker, NativeTimePicker, TimePicker, ariaLabelIfNorwegian, createCalendar, nativeDateToTimeOrDateValue, timeOrDateValueToNativeDate };
|
|
849
873
|
//# sourceMappingURL=datepicker.esm.js.map
|