@entur/datepicker 9.1.5 → 9.2.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,7 +5,7 @@ import { useDateSegment, useDateField, useDatePicker, useTimeField } from '@reac
5
5
  import { useLocale, I18nProvider } from '@react-aria/i18n';
6
6
  import classNames from 'classnames';
7
7
  import { BaseFormControl, useVariant, useInputGroupContext, isFilled, TextField } from '@entur/form';
8
- import { CalendarDate, Time, getLocalTimeZone, GregorianCalendar, toCalendarDateTime, toZoned, toCalendarDate, ZonedDateTime, parseAbsolute, CalendarDateTime, isEqualDay, now, getWeeksInMonth, toTime, parseTime } from '@internationalized/date';
8
+ import { CalendarDate, Time, getLocalTimeZone, GregorianCalendar, toCalendarDateTime, toTime, now, toZoned, today, toCalendarDate, ZonedDateTime, parseAbsolute, CalendarDateTime, isEqualDay, getWeeksInMonth, parseTime } from '@internationalized/date';
9
9
  export { CalendarDate, CalendarDateTime, Time, ZonedDateTime } from '@internationalized/date';
10
10
  import { useCalendarCell, useCalendarGrid, useCalendar } from '@react-aria/calendar';
11
11
  import { useCalendarState } from '@react-stately/calendar';
@@ -45,9 +45,11 @@ function _objectWithoutPropertiesLoose(source, excluded) {
45
45
  return target;
46
46
  }
47
47
 
48
+ var _excluded$b = ["segment", "state"];
48
49
  var FieldSegment = function FieldSegment(_ref) {
49
50
  var segment = _ref.segment,
50
- state = _ref.state;
51
+ state = _ref.state,
52
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$b);
51
53
  var ref = useRef(null);
52
54
  var _useDateSegment = useDateSegment(segment, state, ref),
53
55
  segmentProps = _useDateSegment.segmentProps;
@@ -58,7 +60,7 @@ var FieldSegment = function FieldSegment(_ref) {
58
60
  'eds-date-and-time-field__segment--dot-separator': segment.text === '.'
59
61
  }),
60
62
  tabIndex: state.isDisabled ? -1 : segmentProps.tabIndex
61
- }), segment.text);
63
+ }, rest), segment.text);
62
64
  };
63
65
 
64
66
  var nativeDateToDateTime = function nativeDateToDateTime(date, timeZone, offset) {
@@ -154,21 +156,46 @@ var lastMillisecondOfDay = function lastMillisecondOfDay(dateValue) {
154
156
  };
155
157
  var convertValueToType = function convertValueToType(_ref) {
156
158
  var value = _ref.value,
157
- type = _ref.type;
159
+ type = _ref.type,
160
+ _ref$timezone = _ref.timezone,
161
+ timezone = _ref$timezone === void 0 ? 'Europe/Oslo' : _ref$timezone;
158
162
  if (value === null) return null;
159
163
  switch (type) {
160
164
  case 'CalendarDate':
165
+ if (!('day' in value)) return today(timezone);
161
166
  return toCalendarDate(value);
162
167
  case 'CalendarDateTime':
168
+ if (!('day' in value)) return toCalendarDateTime(today(timezone), value);
163
169
  return toCalendarDateTime(value);
164
170
  case 'ZonedDateTime':
165
- return toZoned(value, 'Europe/Oslo');
171
+ if (!('day' in value)) return toZoned(toCalendarDateTime(today(timezone), value), timezone);
172
+ return toZoned(value, timezone);
173
+ case 'Time':
174
+ if (!('hour' in value)) return toTime(now(timezone));
175
+ if (!('day' in value)) return value;
176
+ return toTime(value);
166
177
  default:
167
178
  return value;
168
179
  }
169
180
  };
181
+ var modulo = function modulo(a, b) {
182
+ return (a % b + b) % b;
183
+ };
184
+ var focusSegment = function focusSegment(ref, segment) {
185
+ if (ref.current) {
186
+ var segments = ref.current.querySelectorAll('.eds-date-and-time-field__segment');
187
+ var firstSegment = segments[0];
188
+ var lastSegment = segments[segments.length - 1];
189
+ switch (segment) {
190
+ case 'first':
191
+ return firstSegment.focus();
192
+ case 'last':
193
+ return lastSegment.focus();
194
+ }
195
+ }
196
+ };
170
197
 
171
- var _excluded$9 = ["selectedDate", "onChange", "label", "locale", "showTimeZone", "showTime", "granularity", "disabled", "isDisabled", "variant", "feedback", "validationVariant", "validationFeedback", "labelTooltip", "minDate", "maxDate", "style", "className", "labelProps", "append"];
198
+ var _excluded$a = ["selectedDate", "onChange", "label", "locale", "showTimeZone", "showTime", "granularity", "disabled", "isDisabled", "variant", "feedback", "validationVariant", "validationFeedback", "labelTooltip", "minDate", "maxDate", "style", "className", "labelProps", "append"];
172
199
  var DateField = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
173
200
  var selectedDate = _ref.selectedDate,
174
201
  onChange = _ref.onChange,
@@ -193,7 +220,7 @@ var DateField = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
193
220
  className = _ref.className,
194
221
  parentLabelProps = _ref.labelProps,
195
222
  append = _ref.append,
196
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$9);
223
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$a);
197
224
  var _useLocale = useLocale(),
198
225
  locale = _useLocale.locale;
199
226
  var state = useDateFieldState(_extends({}, rest, {
@@ -234,8 +261,8 @@ var DateField = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
234
261
  labelTooltip: labelTooltip,
235
262
  labelProps: parentLabelProps != null ? parentLabelProps : labelProps
236
263
  }, fieldProps, {
237
- variant: (variant != null ? variant : state.validationState === 'invalid') ? validationVariant : undefined,
238
- feedback: (feedback != null ? feedback : state.validationState === 'invalid') ? validationFeedback : undefined,
264
+ variant: variant != null ? variant : state.validationState === 'invalid' ? validationVariant : undefined,
265
+ feedback: feedback != null ? feedback : state.validationState === 'invalid' ? validationFeedback : undefined,
239
266
  append: append,
240
267
  ariaAlertOnFeedback: true
241
268
  }), state.segments.map(function (segment, i) {
@@ -247,12 +274,12 @@ var DateField = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
247
274
  })));
248
275
  });
249
276
 
250
- var _excluded$8 = ["children", "className", "style"];
277
+ var _excluded$9 = ["children", "className", "style"];
251
278
  var CalendarButton = function CalendarButton(_ref) {
252
279
  var children = _ref.children,
253
280
  className = _ref.className,
254
281
  style = _ref.style,
255
- props = _objectWithoutPropertiesLoose(_ref, _excluded$8);
282
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$9);
256
283
  var ref = useRef(null);
257
284
  var _useButton = useButton(props, ref),
258
285
  buttonProps = _useButton.buttonProps;
@@ -263,16 +290,18 @@ var CalendarButton = function CalendarButton(_ref) {
263
290
  }), children);
264
291
  };
265
292
 
266
- var _excluded$7 = ["state", "date", "onSelectedCellClick"];
293
+ var _excluded$8 = ["state", "date", "onSelectedCellClick", "classNameForDate", "ariaLabelForDate"];
267
294
  var CalendarCell = function CalendarCell(_ref) {
268
- var _state$timeZone;
295
+ var _ariaLabelForDate, _classNameForDate, _state$timeZone;
269
296
  var state = _ref.state,
270
297
  date = _ref.date,
271
298
  _ref$onSelectedCellCl = _ref.onSelectedCellClick,
272
299
  onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
273
300
  return;
274
301
  } : _ref$onSelectedCellCl,
275
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$7);
302
+ classNameForDate = _ref.classNameForDate,
303
+ ariaLabelForDate = _ref.ariaLabelForDate,
304
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$8);
276
305
  var cellRef = useRef(null);
277
306
  var _useCalendarCell = useCalendarCell({
278
307
  date: date
@@ -284,12 +313,14 @@ var CalendarCell = function CalendarCell(_ref) {
284
313
  isDisabled = _useCalendarCell.isDisabled,
285
314
  isUnavailable = _useCalendarCell.isUnavailable,
286
315
  formattedDate = _useCalendarCell.formattedDate;
316
+ var ariaLabel = buttonProps['aria-label'] + " " + ((_ariaLabelForDate = ariaLabelForDate == null ? void 0 : ariaLabelForDate(date)) != null ? _ariaLabelForDate : '');
287
317
  return React.createElement("td", _extends({}, cellProps, {
288
318
  className: "eds-datepicker__calendar__grid__cell__td"
289
319
  }), React.createElement("div", _extends({}, buttonProps, {
320
+ "aria-label": ariaLabel,
290
321
  ref: cellRef,
291
322
  hidden: isOutsideVisibleRange,
292
- className: classNames('eds-datepicker__calendar__grid__cell', {
323
+ className: classNames('eds-datepicker__calendar__grid__cell', [(_classNameForDate = classNameForDate == null ? void 0 : classNameForDate(date)) != null ? _classNameForDate : ''], {
293
324
  'eds-datepicker__calendar__grid__cell--selected': isSelected,
294
325
  'eds-datepicker__calendar__grid__cell--disabled': isDisabled || isUnavailable,
295
326
  'eds-datepicker__calendar__grid__cell--outside-month': isOutsideVisibleRange,
@@ -307,7 +338,7 @@ var CalendarCell = function CalendarCell(_ref) {
307
338
  }), formattedDate));
308
339
  };
309
340
 
310
- var _excluded$6 = ["state", "navigationDescription", "onSelectedCellClick"];
341
+ var _excluded$7 = ["state", "navigationDescription", "onSelectedCellClick", "classNameForDate", "ariaLabelForDate"];
311
342
  var CalendarGrid = function CalendarGrid(_ref) {
312
343
  var state = _ref.state,
313
344
  navigationDescription = _ref.navigationDescription,
@@ -315,7 +346,9 @@ var CalendarGrid = function CalendarGrid(_ref) {
315
346
  onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
316
347
  return;
317
348
  } : _ref$onSelectedCellCl,
318
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
349
+ classNameForDate = _ref.classNameForDate,
350
+ ariaLabelForDate = _ref.ariaLabelForDate,
351
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$7);
319
352
  var calendarGridId = useRandomId('eds-calendar');
320
353
  var _useLocale = useLocale(),
321
354
  locale = _useLocale.locale;
@@ -356,7 +389,9 @@ var CalendarGrid = function CalendarGrid(_ref) {
356
389
  state: state,
357
390
  date: date,
358
391
  "aria-describedby": calendarGridId + 'description',
359
- onSelectedCellClick: onSelectedCellClick
392
+ onSelectedCellClick: onSelectedCellClick,
393
+ classNameForDate: classNameForDate,
394
+ ariaLabelForDate: ariaLabelForDate
360
395
  }) : React.createElement("td", {
361
396
  key: i
362
397
  });
@@ -366,7 +401,7 @@ var CalendarGrid = function CalendarGrid(_ref) {
366
401
  }, getNavigationDescription()));
367
402
  };
368
403
 
369
- var _excluded$5 = ["selectedDate", "onChange", "locale", "minDate", "maxDate", "style", "children", "navigationDescription", "onSelectedCellClick"];
404
+ var _excluded$6 = ["selectedDate", "onChange", "locale", "minDate", "maxDate", "style", "children", "navigationDescription", "onSelectedCellClick", "classNameForDate", "ariaLabelForDate"];
370
405
  var Calendar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
371
406
  var selectedDate = _ref.selectedDate,
372
407
  onChange = _ref.onChange,
@@ -379,7 +414,9 @@ var Calendar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
379
414
  onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
380
415
  return;
381
416
  } : _ref$onSelectedCellCl,
382
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
417
+ classNameForDate = _ref.classNameForDate,
418
+ ariaLabelForDate = _ref.ariaLabelForDate,
419
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
383
420
  var _useLocale = useLocale(),
384
421
  locale = _useLocale.locale;
385
422
  var allProps = _extends({}, rest, {
@@ -420,11 +457,13 @@ var Calendar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
420
457
  }))), React.createElement(CalendarGrid, {
421
458
  state: state,
422
459
  navigationDescription: navigationDescription,
423
- onSelectedCellClick: onSelectedCellClick
460
+ onSelectedCellClick: onSelectedCellClick,
461
+ classNameForDate: classNameForDate,
462
+ ariaLabelForDate: ariaLabelForDate
424
463
  })));
425
464
  });
426
465
 
427
- var _excluded$4 = ["selectedDate", "onChange", "locale", "disabled", "showTime", "showTimeZone", "className", "style", "variant", "feedback", "validationVariant", "validationFeedback", "disableModal", "labelTooltip", "navigationDescription", "minDate", "maxDate", "modalTreshold", "forcedReturnType"];
466
+ var _excluded$5 = ["selectedDate", "onChange", "locale", "disabled", "showTime", "showTimeZone", "classNameForDate", "className", "style", "variant", "feedback", "validationVariant", "validationFeedback", "disableModal", "labelTooltip", "navigationDescription", "minDate", "maxDate", "modalTreshold", "forcedReturnType", "ariaLabelForDate"];
428
467
  var DatePicker = function DatePicker(_ref) {
429
468
  var selectedDate = _ref.selectedDate,
430
469
  onChange = _ref.onChange,
@@ -433,6 +472,7 @@ var DatePicker = function DatePicker(_ref) {
433
472
  showTime = _ref.showTime,
434
473
  _ref$showTimeZone = _ref.showTimeZone,
435
474
  showTimeZone = _ref$showTimeZone === void 0 ? false : _ref$showTimeZone,
475
+ classNameForDate = _ref.classNameForDate,
436
476
  className = _ref.className,
437
477
  variant = _ref.variant,
438
478
  feedback = _ref.feedback,
@@ -447,7 +487,8 @@ var DatePicker = function DatePicker(_ref) {
447
487
  _ref$modalTreshold = _ref.modalTreshold,
448
488
  modalTreshold = _ref$modalTreshold === void 0 ? 1000 : _ref$modalTreshold,
449
489
  forcedReturnType = _ref.forcedReturnType,
450
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
490
+ ariaLabelForDate = _ref.ariaLabelForDate,
491
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
451
492
  var CALENDAR_MODAL_MAX_SCREEN_WIDTH = modalTreshold;
452
493
  var datePickerRef = useRef(null);
453
494
  var calendarRef = useRef(null);
@@ -458,7 +499,8 @@ var DatePicker = function DatePicker(_ref) {
458
499
  if (forcedReturnType !== undefined) {
459
500
  return onChange(convertValueToType({
460
501
  value: value,
461
- type: forcedReturnType
502
+ type: forcedReturnType,
503
+ timezone: value !== null && 'timezone' in value ? value.timezone : undefined
462
504
  }));
463
505
  }
464
506
  onChange(value);
@@ -508,7 +550,9 @@ var DatePicker = function DatePicker(_ref) {
508
550
  onChange: handleOnChange,
509
551
  minDate: minDate,
510
552
  maxDate: maxDate,
511
- ref: calendarRef
553
+ ref: calendarRef,
554
+ classNameForDate: classNameForDate,
555
+ ariaLabelForDate: ariaLabelForDate
512
556
  });
513
557
  var useModal = typeof width !== 'undefined' && width <= CALENDAR_MODAL_MAX_SCREEN_WIDTH && !disableModal;
514
558
  var popoverCalendar = React.createElement("div", {
@@ -578,7 +622,7 @@ var DatePicker = function DatePicker(_ref) {
578
622
  }), React.createElement(CalendarIcon, null)), useModal ? modalCalendar : popoverCalendar)));
579
623
  };
580
624
 
581
- var _excluded$3 = ["className", "style", "label", "onChange", "feedback", "variant", "disableLabelAnimation", "prepend"],
625
+ var _excluded$4 = ["className", "style", "label", "onChange", "feedback", "variant", "disableLabelAnimation", "prepend"],
582
626
  _excluded2$2 = ["onChange", "variant", "value"];
583
627
  var NativeDatePicker = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
584
628
  var className = _ref.className,
@@ -592,7 +636,7 @@ var NativeDatePicker = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
592
636
  prepend = _ref$prepend === void 0 ? React.createElement(DateIcon, {
593
637
  inline: true
594
638
  }) : _ref$prepend,
595
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
639
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
596
640
  var nativedatepickerId = useRandomId('eds-nativetimepicker');
597
641
  return React.createElement(BaseFormControl, {
598
642
  style: style,
@@ -651,12 +695,14 @@ var NativeDatePickerBase = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {
651
695
  }, rest));
652
696
  });
653
697
 
698
+ var _excluded$3 = ["direction", "onClick", "disabled", "aria-label"];
654
699
  var TimePickerArrowButton = function TimePickerArrowButton(_ref) {
655
700
  var direction = _ref.direction,
656
701
  onClick = _ref.onClick,
657
702
  disabled = _ref.disabled,
658
- ariaLabel = _ref['aria-label'];
659
- return React.createElement(IconButton, {
703
+ ariaLabel = _ref['aria-label'],
704
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
705
+ return React.createElement(IconButton, _extends({
660
706
  className: classNames('eds-timepicker__arrowbutton', "eds-timepicker__arrowbutton--" + direction, {
661
707
  'eds-timepicker__arrowbutton--disabled': disabled
662
708
  }),
@@ -665,10 +711,10 @@ var TimePickerArrowButton = function TimePickerArrowButton(_ref) {
665
711
  onClick: onClick,
666
712
  "aria-label": ariaLabel,
667
713
  disabled: disabled
668
- }, direction === 'left' ? React.createElement(LeftArrowIcon, null) : React.createElement(RightArrowIcon, null));
714
+ }, rest), direction === 'left' ? React.createElement(LeftArrowIcon, null) : React.createElement(RightArrowIcon, null));
669
715
  };
670
716
 
671
- var _excluded$2 = ["selectedTime", "onChange", "disabled", "className", "style", "label", "labelTooltip", "feedback", "variant", "locale", "showTimeZone", "minuteIncrementForArrowButtons", "leftArrowButtonAriaLabel", "rightArrowButtonAriaLabel", "inputRef"];
717
+ var _excluded$2 = ["selectedTime", "onChange", "disabled", "className", "style", "label", "labelTooltip", "feedback", "granularity", "variant", "locale", "showTimeZone", "showSeconds", "minuteIncrementForArrowButtons", "leftArrowButtonAriaLabel", "rightArrowButtonAriaLabel", "inputRef", "forcedReturnType", "forcedTimeZone"];
672
718
  var TimePicker = function TimePicker(_ref) {
673
719
  var selectedTime = _ref.selectedTime,
674
720
  onChange = _ref.onChange,
@@ -678,9 +724,12 @@ var TimePicker = function TimePicker(_ref) {
678
724
  label = _ref.label,
679
725
  labelTooltip = _ref.labelTooltip,
680
726
  feedback = _ref.feedback,
727
+ granularity = _ref.granularity,
681
728
  variant = _ref.variant,
682
729
  customLocale = _ref.locale,
683
730
  showTimeZone = _ref.showTimeZone,
731
+ _ref$showSeconds = _ref.showSeconds,
732
+ showSeconds = _ref$showSeconds === void 0 ? false : _ref$showSeconds,
684
733
  _ref$minuteIncrementF = _ref.minuteIncrementForArrowButtons,
685
734
  minuteIncrementForArrowButtons = _ref$minuteIncrementF === void 0 ? 30 : _ref$minuteIncrementF,
686
735
  _ref$leftArrowButtonA = _ref.leftArrowButtonAriaLabel,
@@ -688,15 +737,30 @@ var TimePicker = function TimePicker(_ref) {
688
737
  _ref$rightArrowButton = _ref.rightArrowButtonAriaLabel,
689
738
  rightArrowButtonAriaLabel = _ref$rightArrowButton === void 0 ? "Legg til " + minuteIncrementForArrowButtons + " minutter" : _ref$rightArrowButton,
690
739
  inputRef = _ref.inputRef,
740
+ forcedReturnType = _ref.forcedReturnType,
741
+ forcedTimeZone = _ref.forcedTimeZone,
691
742
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$2);
692
743
  var _useLocale = useLocale(),
693
744
  locale = _useLocale.locale;
694
745
  if (customLocale) locale = customLocale;
746
+ var timePickerId = useRandomId('eds-timepicker');
747
+ var timeZone = forcedTimeZone != null ? forcedTimeZone : selectedTime !== null && 'timezone' in selectedTime ? selectedTime.timezone : 'Europe/Oslo';
748
+ var handleOnChange = function handleOnChange(value) {
749
+ if (forcedReturnType !== undefined) {
750
+ return onChange(convertValueToType({
751
+ value: value,
752
+ type: forcedReturnType,
753
+ timezone: timeZone
754
+ }));
755
+ }
756
+ onChange(value);
757
+ };
695
758
  var state = useTimeFieldState(_extends({
696
- onChange: onChange,
759
+ onChange: handleOnChange,
697
760
  label: label,
698
761
  locale: locale,
699
762
  value: selectedTime,
763
+ granularity: (granularity != null ? granularity : showSeconds) ? 'second' : 'minute',
700
764
  hideTimeZone: !showTimeZone,
701
765
  isDisabled: disabled,
702
766
  shouldForceLeadingZeros: true
@@ -708,70 +772,81 @@ var TimePicker = function TimePicker(_ref) {
708
772
  labelProps = _useTimeField.labelProps,
709
773
  fieldProps = _useTimeField.fieldProps;
710
774
  var id = useRandomId('timepicker');
711
- var handleOnClickArrowButton = function handleOnClickArrowButton(minutes) {
712
- if (someSegmentIsUndefined) {
713
- setTimeToNearestMinuteIncrement();
714
- } else {
715
- addMinutesToSelectedTime(minutes);
716
- }
717
- };
718
- var someSegmentIsUndefined = state.segments.some(function (segment) {
719
- return segment.text === '––';
720
- });
721
- var setTimeToNearestMinuteIncrement = function setTimeToNearestMinuteIncrement() {
722
- var currentTime = now(getLocalTimeZone());
723
- var roundedMinute = Math.floor(currentTime.minute / minuteIncrementForArrowButtons) * minuteIncrementForArrowButtons;
724
- var newTime = currentTime.set({
725
- minute: roundedMinute
775
+ var getCurrentTime = function getCurrentTime() {
776
+ var getCurrentTimeWithCorrectType = convertValueToType({
777
+ value: now(timeZone),
778
+ type: forcedReturnType != null ? forcedReturnType : 'ZonedDateTime'
726
779
  });
727
- // @ts-expect-error Since this function is used when selectedTime is null,
728
- // we can't guarantee newTime matching the type of selectedTime in the future.
729
- // This might lead to a type issue.
730
- onChange(newTime);
780
+ return getCurrentTimeWithCorrectType;
731
781
  };
732
- var addMinutesToSelectedTime = function addMinutesToSelectedTime(minutes) {
733
- selectedTime !== null && onChange(selectedTime.add({
734
- minutes: minutes
735
- }));
782
+ var handleOnClickArrowButton = function handleOnClickArrowButton(operation) {
783
+ if (selectedTime === null) return handleOnChange(getCurrentTime());
784
+ switch (operation) {
785
+ case 'add':
786
+ return handleOnChange(selectedTime.add({
787
+ minutes: minuteIncrementForArrowButtons - modulo(selectedTime.minute, minuteIncrementForArrowButtons)
788
+ }));
789
+ case 'subtract':
790
+ return handleOnChange(selectedTime.subtract({
791
+ minutes: modulo(selectedTime.minute - 1, minuteIncrementForArrowButtons) + 1
792
+ }));
793
+ }
736
794
  };
737
795
  return React.createElement(I18nProvider, {
738
796
  locale: locale
739
797
  }, React.createElement("div", {
740
798
  className: classNames(className, 'eds-timepicker__wrapper')
741
- }, React.createElement(TimePickerArrowButton, {
742
- direction: "left",
743
- disabled: disabled,
744
- "aria-label": leftArrowButtonAriaLabel,
745
- onClick: function onClick() {
746
- return handleOnClickArrowButton(minuteIncrementForArrowButtons * -1);
747
- }
748
- }), React.createElement(BaseFormControl, _extends({
799
+ }, React.createElement(BaseFormControl, _extends({
749
800
  style: style,
750
- className: 'eds-timepicker',
801
+ className: classNames('eds-timepicker', {
802
+ 'eds-timepicker--disabled': disabled
803
+ }),
751
804
  labelId: id,
752
805
  label: label,
753
- labelProps: _extends({}, labelProps),
806
+ labelProps: _extends({}, labelProps, {
807
+ 'aria-describedby': timePickerId + 'description'
808
+ }),
754
809
  ref: mergeRefs(timeFieldRef, inputRef),
755
810
  disabled: disabled,
756
811
  disableLabelAnimation: true,
757
812
  labelTooltip: labelTooltip
758
813
  }, fieldProps, {
759
814
  variant: variant,
760
- feedback: feedback
815
+ feedback: feedback,
816
+ ariaAlertOnFeedback: true,
817
+ "aria-describedby": timePickerId + 'description',
818
+ prepend: React.createElement(TimePickerArrowButton, {
819
+ direction: "left",
820
+ disabled: disabled,
821
+ "aria-label": leftArrowButtonAriaLabel,
822
+ onClick: function onClick() {
823
+ return handleOnClickArrowButton('subtract');
824
+ },
825
+ onFocus: function onFocus() {
826
+ return focusSegment(timeFieldRef, 'first');
827
+ }
828
+ }),
829
+ append: React.createElement(TimePickerArrowButton, {
830
+ direction: "right",
831
+ disabled: disabled,
832
+ "aria-label": rightArrowButtonAriaLabel,
833
+ onClick: function onClick() {
834
+ return handleOnClickArrowButton('add');
835
+ },
836
+ onFocus: function onFocus() {
837
+ return focusSegment(timeFieldRef, 'last');
838
+ }
839
+ })
761
840
  }), state.segments.map(function (segment, i) {
762
841
  return React.createElement(FieldSegment, {
763
842
  segment: segment,
764
843
  state: state,
765
- key: i
844
+ key: i,
845
+ "aria-describedby": timePickerId + 'description'
766
846
  });
767
- })), React.createElement(TimePickerArrowButton, {
768
- direction: "right",
769
- disabled: disabled,
770
- "aria-label": rightArrowButtonAriaLabel,
771
- onClick: function onClick() {
772
- return handleOnClickArrowButton(minuteIncrementForArrowButtons);
773
- }
774
- })));
847
+ })), React.createElement(VisuallyHidden, {
848
+ id: timePickerId + 'description'
849
+ }, selectedTime !== null ? 'valgt tid: ' + selectedTime.hour.toString().padStart(2, '0') + ':' + selectedTime.minute.toString().padStart(2, '0') + (showSeconds ? ':' + selectedTime.second.toString().padStart(2, '0') : '') : '')));
775
850
  };
776
851
 
777
852
  var _excluded$1 = ["className", "style", "onChange", "label", "feedback", "variant", "prepend"],
@@ -1034,5 +1109,5 @@ var SimpleTimePicker = function SimpleTimePicker(_ref) {
1034
1109
 
1035
1110
  warnAboutMissingStyles('datepicker', 'form', 'icons');
1036
1111
 
1037
- export { Calendar, DateField, DatePicker, NativeDatePicker, NativeTimePicker, SimpleTimePicker, TimePicker, ariaLabelIfNorwegian, convertValueToType, createCalendar, lastMillisecondOfDay, nativeDateToDateValue, nativeDateToTimeValue, timeOrDateValueToNativeDate };
1112
+ export { Calendar, DateField, DatePicker, NativeDatePicker, NativeTimePicker, SimpleTimePicker, TimePicker, ariaLabelIfNorwegian, convertValueToType, createCalendar, focusSegment, lastMillisecondOfDay, modulo, nativeDateToDateValue, nativeDateToTimeValue, timeOrDateValueToNativeDate };
1038
1113
  //# sourceMappingURL=datepicker.esm.js.map