@entur/datepicker 4.0.0-beta.5 → 4.0.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.
@@ -4,23 +4,17 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var utils = require('@entur/utils');
6
6
  var React = require('react');
7
- var ReactDatepicker = require('react-datepicker');
8
- var dateFns = require('date-fns');
9
- var locale = require('date-fns/locale');
10
- var classNames = require('classnames');
11
- var icons = require('@entur/icons');
12
- var typography = require('@entur/typography');
13
- var button = require('@entur/button');
14
- var form = require('@entur/form');
15
- var tooltip = require('@entur/tooltip');
16
- require('react-datepicker/dist/react-datepicker.css');
17
7
  var datepicker$1 = require('@react-stately/datepicker');
18
8
  var datepicker = require('@react-aria/datepicker');
19
9
  var i18n = require('@react-aria/i18n');
10
+ var classNames = require('classnames');
11
+ var form = require('@entur/form');
20
12
  var date = require('@internationalized/date');
21
13
  var calendar = require('@react-aria/calendar');
22
14
  var calendar$1 = require('@react-stately/calendar');
23
- var button$1 = require('@react-aria/button');
15
+ var icons = require('@entur/icons');
16
+ var button = require('@react-aria/button');
17
+ var button$1 = require('@entur/button');
24
18
  var a11y = require('@entur/a11y');
25
19
  var reactDom = require('@floating-ui/react-dom');
26
20
  var FocusLock = require('react-focus-lock');
@@ -30,7 +24,6 @@ var modal = require('@entur/modal');
30
24
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
31
25
 
32
26
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
33
- var ReactDatepicker__default = /*#__PURE__*/_interopDefaultLegacy(ReactDatepicker);
34
27
  var classNames__default = /*#__PURE__*/_interopDefaultLegacy(classNames);
35
28
  var FocusLock__default = /*#__PURE__*/_interopDefaultLegacy(FocusLock);
36
29
 
@@ -67,433 +60,6 @@ function _objectWithoutPropertiesLoose(source, excluded) {
67
60
  return target;
68
61
  }
69
62
 
70
- var DatePickerHeader = function DatePickerHeader(_ref) {
71
- var _date$getMonth;
72
-
73
- var date = _ref.date,
74
- decreaseMonth = _ref.decreaseMonth,
75
- increaseMonth = _ref.increaseMonth,
76
- prevMonthButtonDisabled = _ref.prevMonthButtonDisabled,
77
- nextMonthButtonDisabled = _ref.nextMonthButtonDisabled,
78
- nextMonthAriaLabel = _ref.nextMonthAriaLabel,
79
- previousMonthAriaLabel = _ref.previousMonthAriaLabel,
80
- locale = _ref.locale;
81
- var currentMonthIndex = (_date$getMonth = date == null ? void 0 : date.getMonth()) != null ? _date$getMonth : 0;
82
- return React__default["default"].createElement("div", {
83
- className: "eds-datepicker__calender__header"
84
- }, React__default["default"].createElement(button.IconButton, {
85
- type: "button",
86
- className: "eds-datepicker__calender__header__month-button--left",
87
- onClick: decreaseMonth,
88
- disabled: prevMonthButtonDisabled,
89
- "aria-label": previousMonthAriaLabel + " (" + getMonthName(currentMonthIndex - 1, locale) + ")"
90
- }, React__default["default"].createElement(icons.LeftArrowIcon, null)), React__default["default"].createElement(typography.Heading3, {
91
- className: "eds-datepicker__calender__header__month-text"
92
- }, getMonthName(currentMonthIndex, locale)), React__default["default"].createElement(typography.Heading3, {
93
- className: "eds-datepicker__calender__header__month-text"
94
- }, date == null ? void 0 : date.getFullYear()), React__default["default"].createElement(button.IconButton, {
95
- type: "button",
96
- className: "eds-datepicker__calender__header__month-button--right",
97
- onClick: increaseMonth,
98
- disabled: nextMonthButtonDisabled,
99
- "aria-label": nextMonthAriaLabel + " (" + getMonthName(currentMonthIndex + 1, locale) + ")"
100
- }, React__default["default"].createElement(icons.RightArrowIcon, null)));
101
- };
102
-
103
- function getMonthName(monthIndex, locale) {
104
- var year = new Date().getFullYear();
105
- var formatter = new Intl.DateTimeFormat(locale.code, {
106
- month: 'long'
107
- });
108
- return formatter.format(new Date(year, monthIndex));
109
- }
110
-
111
- var _excluded$a = ["style", "label", "inputPlaceholder", "prepend", "feedback", "variant", "disabled", "calendarButtonTooltipOpen", "calendarButtonTooltipClose", "hideCalendarButton", "disableLabelAnimation", "inputRef", "calendarButtonId", "forwardRef", "toggleCalendarGUI", "onKeyDownInput", "onBlurInput", "selectedDate", "setFocusToCalendarGUI", "setShouldFocusOnCalendarButtonAfterSelect", "calendarGUIIsOpen", "placeholder", "onClick", "aria-labelledby"];
112
- var DatePickerInput = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
113
- var style = _ref.style,
114
- label = _ref.label,
115
- inputPlaceholder = _ref.inputPlaceholder,
116
- prepend = _ref.prepend,
117
- feedback = _ref.feedback,
118
- variant = _ref.variant,
119
- disabled = _ref.disabled,
120
- calendarButtonTooltipOpen = _ref.calendarButtonTooltipOpen,
121
- calendarButtonTooltipClose = _ref.calendarButtonTooltipClose,
122
- hideCalendarButton = _ref.hideCalendarButton,
123
- disableLabelAnimation = _ref.disableLabelAnimation,
124
- inputRef = _ref.inputRef,
125
- calendarButtonId = _ref.calendarButtonId,
126
- forwardRef = _ref.forwardRef,
127
- toggleCalendarGUI = _ref.toggleCalendarGUI,
128
- onKeyDownInput = _ref.onKeyDownInput,
129
- onBlurInput = _ref.onBlurInput,
130
- selectedDate = _ref.selectedDate,
131
- setFocusToCalendarGUI = _ref.setFocusToCalendarGUI,
132
- setShouldFocusOnCalendarButtonAfterSelect = _ref.setShouldFocusOnCalendarButtonAfterSelect,
133
- calendarGUIIsOpen = _ref.calendarGUIIsOpen,
134
- onClick = _ref.onClick,
135
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$a);
136
-
137
- React__default["default"].useEffect(function () {
138
- var _inputRef$current, _inputRef$current2, _inputRef$current3;
139
-
140
- (_inputRef$current = inputRef.current) == null ? void 0 : _inputRef$current.addEventListener('keydown', handleOnKeyDown);
141
- (_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.addEventListener('blur', handleOnBlur);
142
- (_inputRef$current3 = inputRef.current) == null ? void 0 : _inputRef$current3.addEventListener('focus', handleOnFocus);
143
- return function () {
144
- var _inputRef$current4, _inputRef$current5, _inputRef$current6;
145
-
146
- (_inputRef$current4 = inputRef.current) == null ? void 0 : _inputRef$current4.removeEventListener('keydown', handleOnKeyDown);
147
- (_inputRef$current5 = inputRef.current) == null ? void 0 : _inputRef$current5.removeEventListener('blur', handleOnBlur);
148
- (_inputRef$current6 = inputRef.current) == null ? void 0 : _inputRef$current6.removeEventListener('focus', handleOnFocus);
149
- }; // eslint-disable-next-line react-hooks/exhaustive-deps
150
- }, [inputRef, selectedDate]);
151
-
152
- function handleOnKeyDown(event) {
153
- onKeyDownInput(event);
154
- }
155
-
156
- function handleOnBlur(event) {
157
- onBlurInput(event);
158
- }
159
-
160
- var handleOnFocus = function handleOnFocus() {
161
- return requestAnimationFrame(function () {
162
- var _inputRef$current7;
163
-
164
- return (_inputRef$current7 = inputRef.current) == null ? void 0 : _inputRef$current7.select();
165
- });
166
- };
167
-
168
- var handleOnClickInputField = function handleOnClickInputField(event) {
169
- setShouldFocusOnCalendarButtonAfterSelect(false);
170
- onClick && onClick(event);
171
- };
172
-
173
- var handleOnClickCalendarButton = function handleOnClickCalendarButton() {
174
- toggleCalendarGUI();
175
- setFocusToCalendarGUI();
176
- setShouldFocusOnCalendarButtonAfterSelect(true);
177
- };
178
-
179
- var calendarButtonAriaLabel = function calendarButtonAriaLabel() {
180
- var _inputRef$current8;
181
-
182
- var buttonStateText = calendarGUIIsOpen() ? calendarButtonTooltipClose : calendarButtonTooltipOpen;
183
- var currentSelectionText = selectedDate ? ((_inputRef$current8 = inputRef.current) == null ? void 0 : _inputRef$current8.value) + " valgt" : 'Ingen dato valgt';
184
- return buttonStateText + ", " + currentSelectionText;
185
- };
186
-
187
- return React__default["default"].createElement(form.TextField, _extends({
188
- style: style,
189
- label: label,
190
- placeholder: inputPlaceholder,
191
- prepend: prepend,
192
- feedback: feedback,
193
- variant: variant,
194
- disableLabelAnimation: disableLabelAnimation,
195
- ref: utils.mergeRefs(ref, inputRef, forwardRef),
196
- onClick: handleOnClickInputField,
197
- ariaAlertOnFeedback: true,
198
- append: !hideCalendarButton && React__default["default"].createElement(tooltip.Tooltip, {
199
- placement: "top",
200
- content: calendarGUIIsOpen() ? calendarButtonTooltipClose : calendarButtonTooltipOpen,
201
- disableHoverListener: disabled,
202
- disableFocusListener: disabled
203
- }, React__default["default"].createElement(button.IconButton, {
204
- id: calendarButtonId,
205
- type: "button",
206
- onClick: handleOnClickCalendarButton,
207
- tabIndex: calendarGUIIsOpen() ? -1 : 0,
208
- "aria-label": calendarButtonAriaLabel()
209
- }, React__default["default"].createElement(icons.CalendarIcon, null)))
210
- }, rest));
211
- });
212
-
213
- var _excluded$9 = ["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"];
214
- ReactDatepicker.registerLocale('nb', locale.nb);
215
- var DatePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
216
- var style = _ref.style,
217
- className = _ref.className,
218
- selectedDate = _ref.selectedDate,
219
- label = _ref.label,
220
- _ref$placeholder = _ref.placeholder,
221
- placeholder = _ref$placeholder === void 0 ? 'dd.mm.yyyy' : _ref$placeholder,
222
- onChange = _ref.onChange,
223
- _ref$onKeyDown = _ref.onKeyDown,
224
- onKeyDown = _ref$onKeyDown === void 0 ? function () {
225
- return null;
226
- } : _ref$onKeyDown,
227
- _ref$dateFormats = _ref.dateFormats,
228
- dateFormats = _ref$dateFormats === void 0 ? ['dd.MM.yyyy', 'ddMMyyyy', 'dd/MM/yyyy', 'ddMMyy'] : _ref$dateFormats,
229
- minDate = _ref.minDate,
230
- maxDate = _ref.maxDate,
231
- _ref$inline = _ref.inline,
232
- inline = _ref$inline === void 0 ? false : _ref$inline,
233
- disabled = _ref.disabled,
234
- prepend = _ref.prepend,
235
- _ref$feedback = _ref.feedback,
236
- feedback = _ref$feedback === void 0 ? '' : _ref$feedback,
237
- variant = _ref.variant,
238
- _ref$validationFeedba = _ref.validationFeedback,
239
- validationFeedback = _ref$validationFeedba === void 0 ? 'Ugyldig dato' : _ref$validationFeedba,
240
- _ref$validationVarian = _ref.validationVariant,
241
- validationVariant = _ref$validationVarian === void 0 ? 'error' : _ref$validationVarian,
242
- _ref$disableLabelAnim = _ref.disableLabelAnimation,
243
- disableLabelAnimation = _ref$disableLabelAnim === void 0 ? false : _ref$disableLabelAnim,
244
- _ref$calendarButtonTo = _ref.calendarButtonTooltipOpen,
245
- calendarButtonTooltipOpen = _ref$calendarButtonTo === void 0 ? 'Åpne\xa0kalender' : _ref$calendarButtonTo,
246
- _ref$calendarButtonTo2 = _ref.calendarButtonTooltipClose,
247
- calendarButtonTooltipClose = _ref$calendarButtonTo2 === void 0 ? 'Lukk\xa0kalender' : _ref$calendarButtonTo2,
248
- _ref$hideCalendarButt = _ref.hideCalendarButton,
249
- hideCalendarButton = _ref$hideCalendarButt === void 0 ? false : _ref$hideCalendarButt,
250
- _ref$hideCalendar = _ref.hideCalendar,
251
- hideCalendar = _ref$hideCalendar === void 0 ? false : _ref$hideCalendar,
252
- _ref$hideValidation = _ref.hideValidation,
253
- hideValidation = _ref$hideValidation === void 0 ? false : _ref$hideValidation,
254
- _ref$weekLabel = _ref.weekLabel,
255
- weekLabel = _ref$weekLabel === void 0 ? 'uke' : _ref$weekLabel,
256
- _ref$chooseDayAriaLab = _ref.chooseDayAriaLabelPrefix,
257
- chooseDayAriaLabelPrefix = _ref$chooseDayAriaLab === void 0 ? 'Velg' : _ref$chooseDayAriaLab,
258
- _ref$previousMonthAri = _ref.previousMonthAriaLabel,
259
- previousMonthAriaLabel = _ref$previousMonthAri === void 0 ? 'Forrige måned' : _ref$previousMonthAri,
260
- _ref$nextMonthAriaLab = _ref.nextMonthAriaLabel,
261
- nextMonthAriaLabel = _ref$nextMonthAriaLab === void 0 ? 'Neste måned' : _ref$nextMonthAriaLab,
262
- _ref$locale = _ref.locale,
263
- locale$1 = _ref$locale === void 0 ? locale.nb : _ref$locale,
264
- open = _ref.open,
265
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$9);
266
-
267
- var datepickerId = utils.useRandomId('eds-datepicker');
268
- var datepickerRef = React.useRef(null);
269
- var inputRef = React__default["default"].useRef(null);
270
- var calendarButton = document.getElementById(datepickerId + '-button');
271
-
272
- var _useState = React.useState(false),
273
- showValidation = _useState[0],
274
- setShowValidation = _useState[1];
275
-
276
- var _useState2 = React.useState(false),
277
- shouldFocusOnCalendarButtonAfterSelect = _useState2[0],
278
- setShouldFocusOnCalendarButtonAfterSelect = _useState2[1]; // eslint-disable-next-line react-hooks/exhaustive-deps
279
-
280
-
281
- React__default["default"].useEffect(function () {
282
- return validateInput();
283
- }, [selectedDate]);
284
-
285
- var handleOnChange = function handleOnChange(date, event) {
286
- var _inputRef$current;
287
-
288
- if (shouldFocusOnCalendarButtonAfterSelect && !hideCalendarButton) {
289
- calendarButton == null ? void 0 : calendarButton.focus();
290
- setShouldFocusOnCalendarButtonAfterSelect(false);
291
- } else (_inputRef$current = inputRef.current) == null ? void 0 : _inputRef$current.focus();
292
-
293
- onChange(date, event);
294
- };
295
-
296
- var handleOnKeyDown = function handleOnKeyDown(event) {
297
- setShowValidation(false);
298
-
299
- if (event.key === 'Enter') {
300
- if (!datePickerGUIIsOpen()) {
301
- // onBlurInput will validate if calendar is open
302
- validateInput();
303
- forceUpdateInputFormat();
304
- }
305
-
306
- focusAndSelectInputField();
307
- } else if (event.key === 'Tab' && datePickerGUIIsOpen()) {
308
- forceUpdateInputFormat();
309
- } else if (event.key === 'Escape') {
310
- forceUpdateInputFormat();
311
- focusAndSelectInputField();
312
- if (datePickerGUIIsOpen()) toggleCalendarGUI();
313
- }
314
-
315
- onKeyDown(event);
316
- };
317
-
318
- var handleOnClickOutside = function handleOnClickOutside() {
319
- return setShouldFocusOnCalendarButtonAfterSelect(false);
320
- };
321
-
322
- var handleOnBlurInput = function handleOnBlurInput() {
323
- if (datePickerGUIIsOpen()) return;
324
- validateInput();
325
- forceUpdateInputFormat();
326
- };
327
-
328
- var validateInput = function validateInput() {
329
- var _inputRef$current2;
330
-
331
- setShowValidation(false);
332
- var inputValue = (_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.value;
333
- if (!inputValue) return;
334
- var inputValueParsedWithAllDateFormats = dateFormats.map(function (format) {
335
- return dateFns.parse(inputValue, format, new Date(), {
336
- locale: locale$1
337
- });
338
- });
339
- var parsedDateFromInputIsTheSameAsSelectedDate = selectedDate && inputValueParsedWithAllDateFormats.some(function (dateFormat) {
340
- return dateFns.isSameDay(dateFormat, selectedDate);
341
- });
342
-
343
- if (parsedDateFromInputIsTheSameAsSelectedDate) {
344
- // valid date inputted
345
- setShowValidation(false);
346
- } else {
347
- // invalid date inputted
348
- setShowValidation(true);
349
- }
350
- };
351
-
352
- var getFeedbackAndVariant = function getFeedbackAndVariant() {
353
- if (feedback) return {
354
- feedback: feedback,
355
- variant: variant
356
- };
357
- if (!hideValidation && showValidation) return {
358
- feedback: validationFeedback,
359
- variant: validationVariant
360
- };
361
- return {
362
- feedback: '',
363
- variant: undefined
364
- };
365
- };
366
-
367
- var focusAndSelectInputField = function focusAndSelectInputField() {
368
- return requestAnimationFrame(function () {
369
- var _inputRef$current3;
370
-
371
- return (_inputRef$current3 = inputRef.current) == null ? void 0 : _inputRef$current3.select();
372
- });
373
- };
374
-
375
- var forceUpdateInputFormat = function forceUpdateInputFormat() {
376
- var _datepickerRef$curren;
377
-
378
- return (_datepickerRef$curren = datepickerRef.current) == null ? void 0 : _datepickerRef$curren.setState({
379
- inputValue: null
380
- });
381
- };
382
-
383
- var toggleCalendarGUI = function toggleCalendarGUI() {
384
- var _datepickerRef$curren2;
385
-
386
- return (_datepickerRef$curren2 = datepickerRef.current) == null ? void 0 : _datepickerRef$curren2.setOpen(!datePickerGUIIsOpen());
387
- };
388
-
389
- var setFocusToCalendarGUI = function setFocusToCalendarGUI() {
390
- if (inline || hideCalendar || datePickerGUIIsOpen()) return; // 1 frame delay to allow calendar to spawn
391
-
392
- requestAnimationFrame(function () {
393
- var _datepickerRef$curren3;
394
-
395
- var datepickerGUIWrapper = // @ts-expect-error .calendar does actually exist in ReactDatePicker ref
396
- (_datepickerRef$curren3 = datepickerRef.current) == null ? void 0 : _datepickerRef$curren3.calendar.componentNode;
397
- var dateToSetFocusTo = selectedDate ? datepickerGUIWrapper.querySelector('.eds-datepicker__calender__day[tabindex="0"]') : datepickerGUIWrapper.querySelector('.eds-datepicker__calender__day[aria-current="date"]');
398
-
399
- if (dateToSetFocusTo !== null) {
400
- var _datepickerRef$curren4;
401
-
402
- (_datepickerRef$curren4 = datepickerRef.current) == null ? void 0 : _datepickerRef$curren4.setBlur();
403
- dateToSetFocusTo.focus({
404
- preventScroll: true
405
- });
406
- }
407
- });
408
- setShouldFocusOnCalendarButtonAfterSelect(true);
409
- setShowValidation(false);
410
- };
411
-
412
- var datePickerGUIIsOpen = function datePickerGUIIsOpen() {
413
- var _datepickerRef$curren5;
414
-
415
- return (_datepickerRef$curren5 = datepickerRef.current) == null ? void 0 : _datepickerRef$curren5.isCalendarOpen();
416
- };
417
-
418
- return React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(ReactDatepicker__default["default"], _extends({
419
- selected: selectedDate,
420
- minDate: minDate,
421
- maxDate: maxDate,
422
- dateFormat: dateFormats,
423
- showWeekNumbers: true,
424
- weekLabel: weekLabel,
425
- onChange: handleOnChange,
426
- onClickOutside: handleOnClickOutside,
427
- id: datepickerId,
428
- ariaLabelledBy: datepickerId,
429
- showPopperArrow: false,
430
- locale: locale$1,
431
- inline: inline,
432
- disabled: disabled,
433
- preventOpenOnFocus: true,
434
- chooseDayAriaLabelPrefix: chooseDayAriaLabelPrefix,
435
- open: hideCalendar ? false : open,
436
- ref: datepickerRef,
437
- calendarClassName: "eds-datepicker__calender",
438
- dayClassName: function dayClassName() {
439
- return 'eds-datepicker__calender__day';
440
- },
441
- weekDayClassName: function weekDayClassName() {
442
- return 'eds-datepicker__calender__day-name';
443
- },
444
- className: classNames__default["default"](className, 'eds-datepicker__input'),
445
- highlightDates: [{
446
- 'eds-datepicker__calender__day--today': [new Date()]
447
- }, {
448
- 'eds-datepicker__calender__day--selected': selectedDate ? [selectedDate] : []
449
- }],
450
- renderCustomHeader: function renderCustomHeader(_ref2) {
451
- var date = _ref2.date,
452
- changeYear = _ref2.changeYear,
453
- changeMonth = _ref2.changeMonth,
454
- decreaseMonth = _ref2.decreaseMonth,
455
- increaseMonth = _ref2.increaseMonth,
456
- prevMonthButtonDisabled = _ref2.prevMonthButtonDisabled,
457
- nextMonthButtonDisabled = _ref2.nextMonthButtonDisabled;
458
- return React__default["default"].createElement(DatePickerHeader, {
459
- date: date,
460
- changeYear: changeYear,
461
- changeMonth: changeMonth,
462
- increaseMonth: increaseMonth,
463
- decreaseMonth: decreaseMonth,
464
- prevMonthButtonDisabled: prevMonthButtonDisabled,
465
- nextMonthButtonDisabled: nextMonthButtonDisabled,
466
- previousMonthAriaLabel: previousMonthAriaLabel,
467
- nextMonthAriaLabel: nextMonthAriaLabel,
468
- locale: locale$1
469
- });
470
- },
471
- customInput: React__default["default"].createElement(DatePickerInput, {
472
- style: style,
473
- label: label,
474
- inputPlaceholder: placeholder,
475
- calendarButtonTooltipOpen: calendarButtonTooltipOpen,
476
- calendarButtonTooltipClose: calendarButtonTooltipClose,
477
- prepend: prepend,
478
- feedback: getFeedbackAndVariant().feedback,
479
- variant: getFeedbackAndVariant().variant,
480
- inputRef: inputRef,
481
- calendarButtonId: datepickerId + '-button',
482
- forwardRef: ref,
483
- onKeyDownInput: handleOnKeyDown,
484
- onBlurInput: handleOnBlurInput,
485
- onFocus: undefined,
486
- toggleCalendarGUI: toggleCalendarGUI,
487
- setFocusToCalendarGUI: setFocusToCalendarGUI,
488
- setShouldFocusOnCalendarButtonAfterSelect: setShouldFocusOnCalendarButtonAfterSelect,
489
- calendarGUIIsOpen: datePickerGUIIsOpen,
490
- disableLabelAnimation: disableLabelAnimation,
491
- hideCalendarButton: hideCalendarButton,
492
- selectedDate: selectedDate
493
- })
494
- }, rest)));
495
- });
496
-
497
63
  var FieldSegment = function FieldSegment(_ref) {
498
64
  var segment = _ref.segment,
499
65
  state = _ref.state;
@@ -618,7 +184,7 @@ var ariaLabelIfNorwegian = function ariaLabelIfNorwegian(norwegianAriaLabel, loc
618
184
  return norwegianAriaLabel;
619
185
  };
620
186
 
621
- var _excluded$8 = ["selectedDate", "label", "locale", "showTimeZone", "showTime", "granularity", "disabled", "variant", "feedback", "validationVariant", "validationFeedback", "labelTooltip", "style", "className", "labelProps", "append"];
187
+ var _excluded$8 = ["selectedDate", "label", "locale", "showTimeZone", "showTime", "granularity", "disabled", "variant", "feedback", "validationVariant", "validationFeedback", "labelTooltip", "minDate", "maxDate", "style", "className", "labelProps", "append"];
622
188
  var DateField = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
623
189
  var value = _ref.selectedDate,
624
190
  label = _ref.label,
@@ -635,6 +201,8 @@ var DateField = /*#__PURE__*/React__default["default"].forwardRef(function (_ref
635
201
  _ref$validationFeedba = _ref.validationFeedback,
636
202
  validationFeedback = _ref$validationFeedba === void 0 ? 'Ugyldig dato' : _ref$validationFeedba,
637
203
  labelTooltip = _ref.labelTooltip,
204
+ minValue = _ref.minDate,
205
+ maxValue = _ref.maxDate,
638
206
  style = _ref.style,
639
207
  className = _ref.className,
640
208
  parentLabelProps = _ref.labelProps,
@@ -649,7 +217,9 @@ var DateField = /*#__PURE__*/React__default["default"].forwardRef(function (_ref
649
217
  createCalendar: createCalendar,
650
218
  value: value === null ? undefined : value,
651
219
  hideTimeZone: !showTimeZone,
652
- granularity: showTime ? 'minute' : granularity
220
+ granularity: showTime ? 'minute' : granularity,
221
+ minValue: minValue,
222
+ maxValue: maxValue
653
223
  }));
654
224
  var dateFieldRef = React.useRef(null);
655
225
 
@@ -701,22 +271,26 @@ var CalendarButton = function CalendarButton(_ref) {
701
271
 
702
272
  var ref = React.useRef(null);
703
273
 
704
- var _useButton = button$1.useButton(props, ref),
274
+ var _useButton = button.useButton(props, ref),
705
275
  buttonProps = _useButton.buttonProps;
706
276
 
707
- return React__default["default"].createElement(button.IconButton, _extends({}, buttonProps, {
277
+ return React__default["default"].createElement(button$1.IconButton, _extends({}, buttonProps, {
708
278
  ref: ref,
709
279
  className: className,
710
280
  style: style
711
281
  }), children);
712
282
  };
713
283
 
714
- var _excluded$6 = ["state", "date"];
284
+ var _excluded$6 = ["state", "date", "onSelectedCellClick"];
715
285
  var CalendarCell = function CalendarCell(_ref) {
716
286
  var _state$timeZone;
717
287
 
718
288
  var state = _ref.state,
719
289
  date$1 = _ref.date,
290
+ _ref$onSelectedCellCl = _ref.onSelectedCellClick,
291
+ onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
292
+ return;
293
+ } : _ref$onSelectedCellCl,
720
294
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
721
295
 
722
296
  var cellRef = React.useRef(null);
@@ -743,13 +317,26 @@ var CalendarCell = function CalendarCell(_ref) {
743
317
  'eds-datepicker__calendar__grid__cell--outside-month': isOutsideVisibleRange,
744
318
  'eds-datepicker__calendar__grid__cell--today': date.isEqualDay(date$1, date.now((_state$timeZone = state.timeZone) != null ? _state$timeZone : date.getLocalTimeZone()))
745
319
  })
746
- }, rest), formattedDate));
320
+ }, rest, {
321
+ onClick: function onClick(e) {
322
+ buttonProps.onClick && buttonProps.onClick(e);
323
+ isSelected && onSelectedCellClick();
324
+ },
325
+ onKeyDown: function onKeyDown(e) {
326
+ buttonProps.onKeyDown && buttonProps.onKeyDown(e);
327
+ if (e.key === 'Enter' || e.key === ' ') isSelected && onSelectedCellClick();
328
+ }
329
+ }), formattedDate));
747
330
  };
748
331
 
749
- var _excluded$5 = ["state", "navigationDescription"];
332
+ var _excluded$5 = ["state", "navigationDescription", "onSelectedCellClick"];
750
333
  var CalendarGrid = function CalendarGrid(_ref) {
751
334
  var state = _ref.state,
752
335
  navigationDescription = _ref.navigationDescription,
336
+ _ref$onSelectedCellCl = _ref.onSelectedCellClick,
337
+ onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
338
+ return;
339
+ } : _ref$onSelectedCellCl,
753
340
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
754
341
 
755
342
  var calendarGridId = utils.useRandomId('eds-calendar');
@@ -766,8 +353,13 @@ var CalendarGrid = function CalendarGrid(_ref) {
766
353
  var weeksArray = Array.from(Array(weeksInMonth).keys());
767
354
 
768
355
  var weekDaysMapped = function weekDaysMapped() {
769
- if (locale.toLowerCase() === 'no-no' || locale.toLowerCase() === 'no') return ['ma', 'ti', 'on', 'to', 'fr', 'lø', 'sø'];
770
- if (weekDays.toString() === 'M,T,W,T,F,S,S') return ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];
356
+ if (locale.toLowerCase().includes('no')) return ['ma', 'ti', 'on', 'to', 'fr', 'lø', 'sø'];
357
+
358
+ if (locale.toLowerCase().includes('en')) {
359
+ if (weekDays[0] === 'M') return ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];
360
+ if (weekDays[0] === 'S') return ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];
361
+ }
362
+
771
363
  return weekDays.map(function (day) {
772
364
  return day.toLowerCase();
773
365
  });
@@ -794,7 +386,8 @@ var CalendarGrid = function CalendarGrid(_ref) {
794
386
  key: i,
795
387
  state: state,
796
388
  date: date,
797
- "aria-describedby": calendarGridId + 'description'
389
+ "aria-describedby": calendarGridId + 'description',
390
+ onSelectedCellClick: onSelectedCellClick
798
391
  }) : React__default["default"].createElement("td", {
799
392
  key: i
800
393
  });
@@ -804,12 +397,16 @@ var CalendarGrid = function CalendarGrid(_ref) {
804
397
  }, getNavigationDescription()));
805
398
  };
806
399
 
807
- var _excluded$4 = ["selectedDate", "onChange", "locale", "style", "children", "navigationDescription"];
400
+ var _excluded$4 = ["selectedDate", "onChange", "locale", "style", "children", "navigationDescription", "onSelectedCellClick"];
808
401
  var Calendar = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
809
402
  var onChange = _ref.onChange,
810
403
  customLocale = _ref.locale,
811
404
  style = _ref.style,
812
405
  navigationDescription = _ref.navigationDescription,
406
+ _ref$onSelectedCellCl = _ref.onSelectedCellClick,
407
+ onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
408
+ return;
409
+ } : _ref$onSelectedCellCl,
813
410
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
814
411
 
815
412
  var _useLocale = i18n.useLocale(),
@@ -850,14 +447,15 @@ var Calendar = /*#__PURE__*/React__default["default"].forwardRef(function (_ref,
850
447
  size: 20
851
448
  }))), React__default["default"].createElement(CalendarGrid, {
852
449
  state: state,
853
- navigationDescription: navigationDescription
450
+ navigationDescription: navigationDescription,
451
+ onSelectedCellClick: onSelectedCellClick
854
452
  })));
855
453
  });
856
454
 
857
- var _excluded$3 = ["selectedDate", "onChange", "locale", "disabled", "showTime", "showTimeZone", "className", "style", "variant", "feedback", "validationVariant", "validationFeedback", "disableModal", "labelTooltip", "navigationDescription", "minDate", "maxDate"];
858
- var DatePickerBeta = function DatePickerBeta(_ref) {
455
+ var _excluded$3 = ["selectedDate", "onChange", "locale", "disabled", "showTime", "showTimeZone", "className", "style", "variant", "feedback", "validationVariant", "validationFeedback", "disableModal", "labelTooltip", "navigationDescription", "minDate", "maxDate", "modalTreshold"];
456
+ var DatePicker = function DatePicker(_ref) {
859
457
  var value = _ref.selectedDate,
860
- _onChange = _ref.onChange,
458
+ onChange = _ref.onChange,
861
459
  locale = _ref.locale,
862
460
  isDisabled = _ref.disabled,
863
461
  showTime = _ref.showTime,
@@ -874,9 +472,11 @@ var DatePickerBeta = function DatePickerBeta(_ref) {
874
472
  navigationDescription = _ref.navigationDescription,
875
473
  minValue = _ref.minDate,
876
474
  maxValue = _ref.maxDate,
475
+ _ref$modalTreshold = _ref.modalTreshold,
476
+ modalTreshold = _ref$modalTreshold === void 0 ? 1000 : _ref$modalTreshold,
877
477
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
878
478
 
879
- var CALENDAR_MODAL_MAX_SCREEN_WIDTH = 1000;
479
+ var CALENDAR_MODAL_MAX_SCREEN_WIDTH = modalTreshold;
880
480
  var datePickerRef = React.useRef(null);
881
481
  var calendarRef = React.useRef(null);
882
482
  var dateFieldRef = React.useRef(null);
@@ -888,7 +488,7 @@ var DatePickerBeta = function DatePickerBeta(_ref) {
888
488
  minValue: minValue,
889
489
  maxValue: maxValue,
890
490
  value: value,
891
- onChange: _onChange
491
+ onChange: onChange
892
492
  }));
893
493
 
894
494
  var _useDatePicker = datepicker.useDatePicker(_extends({
@@ -901,24 +501,11 @@ var DatePickerBeta = function DatePickerBeta(_ref) {
901
501
  fieldProps = _useDatePicker.fieldProps,
902
502
  buttonProps = _useDatePicker.buttonProps,
903
503
  dialogProps = _useDatePicker.dialogProps,
904
- calendarProps = _useDatePicker.calendarProps;
905
-
906
- React.useEffect(function () {
907
- var _calendarRef$current;
908
-
909
- var keyDownHandler = function keyDownHandler(event) {
910
- if (event.key === 'Escape') state.setOpen(false);
911
- };
504
+ calendarProps = _useDatePicker.calendarProps; // calculations for floating-UI popover position
912
505
 
913
- (_calendarRef$current = calendarRef.current) == null ? void 0 : _calendarRef$current.addEventListener('keydown', keyDownHandler);
914
- return function () {
915
- var _calendarRef$current2;
916
-
917
- return (_calendarRef$current2 = calendarRef.current) == null ? void 0 : _calendarRef$current2.removeEventListener('keydown', keyDownHandler);
918
- }; // eslint-disable-next-line react-hooks/exhaustive-deps
919
- }, []); // calculations for floating-UI popover position
920
506
 
921
507
  var _useFloating = reactDom.useFloating({
508
+ whileElementsMounted: reactDom.autoUpdate,
922
509
  placement: 'bottom-start',
923
510
  middleware: [reactDom.offset(tokens.space.extraSmall), reactDom.flip(), reactDom.shift({
924
511
  padding: tokens.space.extraSmall
@@ -930,53 +517,49 @@ var DatePickerBeta = function DatePickerBeta(_ref) {
930
517
  floating = _useFloating.floating,
931
518
  strategy = _useFloating.strategy;
932
519
 
520
+ var onChangeCalendar = function onChangeCalendar(newSelectedDate) {
521
+ // Necessary to avoid state update on unmounted component
522
+ requestAnimationFrame(function () {
523
+ calendarProps.onChange && calendarProps.onChange(newSelectedDate);
524
+ });
525
+ };
526
+
933
527
  utils.useOnClickOutside([calendarRef], function () {
934
528
  state.setOpen(false);
935
529
  });
530
+ utils.useOnEscape(calendarRef, function () {
531
+ state.setOpen(false);
532
+ });
936
533
 
937
- var handleCalendarButtonOnClick = function handleCalendarButtonOnClick(calendarIsOpen) {
938
- if (!calendarIsOpen) {
939
- state.setOpen(true);
940
- setFocusToRelevantDate();
941
- } else {
942
- state.setOpen(false);
943
- }
944
- };
945
-
946
- var setFocusToRelevantDate = function setFocusToRelevantDate() {
947
- var _calendarRef$current3, _calendarRef$current4;
948
-
949
- var gridCellPrefix = 'eds-datepicker__calendar__grid__cell';
950
- var selectedCell = (_calendarRef$current3 = calendarRef.current) == null ? void 0 : _calendarRef$current3.getElementsByClassName(gridCellPrefix + '--selected')[0];
951
- var todayCell = (_calendarRef$current4 = calendarRef.current) == null ? void 0 : _calendarRef$current4.getElementsByClassName(gridCellPrefix + '--today')[0];
952
- if (selectedCell) selectedCell.focus();else if (todayCell) todayCell.focus();
953
- };
954
-
955
- var popoverCalendar = React__default["default"].createElement(React__default["default"].Fragment, null, state.isOpen && React__default["default"].createElement(FocusLock__default["default"], {
956
- disabled: !state.isOpen,
957
- returnFocus: true
958
- }, React__default["default"].createElement(Calendar, _extends({}, dialogProps, calendarProps, {
959
- onChange: function onChange(dateValue) {
960
- _onChange(dateValue);
961
-
962
- state.setOpen(false);
963
- },
534
+ var calendarSharedProps = _extends({}, dialogProps, calendarProps, {
964
535
  disabled: calendarProps.isDisabled,
965
- ref: function ref(node) {
966
- calendarRef.current = node;
967
- floating(node);
968
- },
969
536
  navigationDescription: navigationDescription,
537
+ onSelectedCellClick: function onSelectedCellClick() {
538
+ return state.setOpen(false);
539
+ },
540
+ onChange: onChangeCalendar
541
+ });
542
+
543
+ var useModal = width <= CALENDAR_MODAL_MAX_SCREEN_WIDTH && !disableModal;
544
+ var popoverCalendar = React__default["default"].createElement("div", {
970
545
  // styling for floating-UI popover
971
546
  style: {
972
547
  position: strategy,
973
548
  top: y != null ? y : 0,
974
549
  left: x != null ? x : 0,
975
550
  zIndex: tokens.zIndexes.popover
551
+ },
552
+ ref: function ref(node) {
553
+ floating(node);
976
554
  }
555
+ }, React__default["default"].createElement(FocusLock__default["default"], {
556
+ disabled: !state.isOpen || useModal,
557
+ returnFocus: true
558
+ }, state.isOpen && React__default["default"].createElement(Calendar, _extends({}, calendarSharedProps, {
559
+ ref: calendarRef
977
560
  }))));
978
561
  var modalCalendar = React__default["default"].createElement(modal.Modal, {
979
- size: 'small',
562
+ size: "small",
980
563
  title: "",
981
564
  open: state.isOpen,
982
565
  onDismiss: function onDismiss() {
@@ -984,16 +567,7 @@ var DatePickerBeta = function DatePickerBeta(_ref) {
984
567
  },
985
568
  closeOnClickOutside: true,
986
569
  className: "eds-datepicker__calendar-modal"
987
- }, React__default["default"].createElement(Calendar, _extends({}, dialogProps, calendarProps, {
988
- onChange: function onChange(dateValue) {
989
- _onChange(dateValue);
990
-
991
- state.setOpen(false);
992
- },
993
- disabled: calendarProps.isDisabled,
994
- ref: calendarRef,
995
- navigationDescription: navigationDescription
996
- })));
570
+ }, React__default["default"].createElement(Calendar, _extends({}, calendarSharedProps)));
997
571
  return React__default["default"].createElement(utils.ConditionalWrapper, {
998
572
  condition: locale !== undefined,
999
573
  wrapper: function wrapper(child) {
@@ -1008,6 +582,7 @@ var DatePickerBeta = function DatePickerBeta(_ref) {
1008
582
  datePickerRef.current = node;
1009
583
  reference(node);
1010
584
  },
585
+ id: undefined,
1011
586
  className: "eds-datepicker__datefield__wrapper"
1012
587
  }), React__default["default"].createElement(DateField, _extends({}, fieldProps, {
1013
588
  selectedDate: state.value,
@@ -1026,10 +601,10 @@ var DatePickerBeta = function DatePickerBeta(_ref) {
1026
601
  })
1027
602
  })), !fieldProps.isDisabled && React__default["default"].createElement(CalendarButton, _extends({}, buttonProps, {
1028
603
  onPress: function onPress() {
1029
- return handleCalendarButtonOnClick(state.isOpen);
604
+ return state.setOpen(!state.isOpen);
1030
605
  },
1031
606
  className: "eds-datepicker__open-calendar-button"
1032
- }), React__default["default"].createElement(icons.CalendarIcon, null)), width > CALENDAR_MODAL_MAX_SCREEN_WIDTH || disableModal ? popoverCalendar : modalCalendar)));
607
+ }), React__default["default"].createElement(icons.CalendarIcon, null)), useModal ? modalCalendar : popoverCalendar)));
1033
608
  };
1034
609
 
1035
610
  var _excluded$2 = ["className", "style", "label", "onChange", "feedback", "variant", "disableLabelAnimation", "prepend"],
@@ -1117,7 +692,7 @@ var TimePickerArrowButton = function TimePickerArrowButton(_ref) {
1117
692
  onClick = _ref.onClick,
1118
693
  disabled = _ref.disabled,
1119
694
  ariaLabel = _ref['aria-label'];
1120
- return React__default["default"].createElement(button.IconButton, {
695
+ return React__default["default"].createElement(button$1.IconButton, {
1121
696
  className: classNames__default["default"]('eds-timepicker__arrowbutton', "eds-timepicker__arrowbutton--" + direction, {
1122
697
  'eds-timepicker__arrowbutton--disabled': disabled
1123
698
  }),
@@ -1319,7 +894,6 @@ utils.warnAboutMissingStyles('datepicker', 'form', 'icons');
1319
894
  exports.Calendar = Calendar;
1320
895
  exports.DateField = DateField;
1321
896
  exports.DatePicker = DatePicker;
1322
- exports.DatePickerBeta = DatePickerBeta;
1323
897
  exports.NativeDatePicker = NativeDatePicker;
1324
898
  exports.NativeTimePicker = NativeTimePicker;
1325
899
  exports.TimePicker = TimePicker;