@entur/datepicker 3.0.4 → 4.0.0-alpha.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.
@@ -14,16 +14,23 @@ var button = require('@entur/button');
14
14
  var form = require('@entur/form');
15
15
  var tooltip = require('@entur/tooltip');
16
16
  require('react-datepicker/dist/react-datepicker.css');
17
+ var datepicker$1 = require('@react-stately/datepicker');
17
18
  var datepicker = require('@react-aria/datepicker');
18
19
  var i18n = require('@react-aria/i18n');
19
- var datepicker$1 = require('@react-stately/datepicker');
20
20
  var date = require('@internationalized/date');
21
+ var calendar = require('@react-aria/calendar');
22
+ var calendar$1 = require('@react-stately/calendar');
23
+ var button$1 = require('@react-aria/button');
24
+ var reactDom = require('@floating-ui/react-dom');
25
+ var FocusLock = require('react-focus-lock');
26
+ var tokens = require('@entur/tokens');
21
27
 
22
28
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
23
29
 
24
30
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
25
31
  var ReactDatepicker__default = /*#__PURE__*/_interopDefaultLegacy(ReactDatepicker);
26
32
  var classNames__default = /*#__PURE__*/_interopDefaultLegacy(classNames);
33
+ var FocusLock__default = /*#__PURE__*/_interopDefaultLegacy(FocusLock);
27
34
 
28
35
  function _extends() {
29
36
  _extends = Object.assign || function (target) {
@@ -99,7 +106,7 @@ function getMonthName(monthIndex, locale) {
99
106
  return formatter.format(new Date(year, monthIndex));
100
107
  }
101
108
 
102
- var _excluded$4 = ["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"];
109
+ var _excluded$9 = ["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"];
103
110
  var DatePickerInput = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
104
111
  var style = _ref.style,
105
112
  label = _ref.label,
@@ -123,7 +130,7 @@ var DatePickerInput = /*#__PURE__*/React__default["default"].forwardRef(function
123
130
  setShouldFocusOnCalendarButtonAfterSelect = _ref.setShouldFocusOnCalendarButtonAfterSelect,
124
131
  calendarGUIIsOpen = _ref.calendarGUIIsOpen,
125
132
  onClick = _ref.onClick,
126
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
133
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$9);
127
134
 
128
135
  React__default["default"].useEffect(function () {
129
136
  var _inputRef$current, _inputRef$current2, _inputRef$current3;
@@ -201,7 +208,7 @@ var DatePickerInput = /*#__PURE__*/React__default["default"].forwardRef(function
201
208
  }, rest));
202
209
  });
203
210
 
204
- 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"];
211
+ var _excluded$8 = ["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"];
205
212
  ReactDatepicker.registerLocale('nb', locale.nb);
206
213
  var DatePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
207
214
  var style = _ref.style,
@@ -253,7 +260,7 @@ var DatePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_re
253
260
  _ref$locale = _ref.locale,
254
261
  locale$1 = _ref$locale === void 0 ? locale.nb : _ref$locale,
255
262
  open = _ref.open,
256
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
263
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$8);
257
264
 
258
265
  var datepickerId = utils.useRandomId('eds-datepicker');
259
266
  var datepickerRef = React.useRef(null);
@@ -485,6 +492,449 @@ var DatePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_re
485
492
  }, rest)));
486
493
  });
487
494
 
495
+ var FieldSegment = function FieldSegment(_ref) {
496
+ var segment = _ref.segment,
497
+ state = _ref.state;
498
+ var ref = React.useRef(null);
499
+
500
+ var _useDateSegment = datepicker.useDateSegment(segment, state, ref),
501
+ segmentProps = _useDateSegment.segmentProps;
502
+
503
+ var is12HourFormatted = state.segments.some(function (segment) {
504
+ return segment.text === 'AM' || segment.text === 'PM';
505
+ });
506
+
507
+ var segmentDisplayText = function segmentDisplayText() {
508
+ if (is12HourFormatted) return segment.text; // if number add '0' padding to start when one digit
509
+
510
+ if (segment.text.match(/\d+/)) return segment.text.padStart(2, '0');
511
+ return segment.text;
512
+ };
513
+
514
+ return React__default["default"].createElement("div", _extends({}, segmentProps, {
515
+ ref: ref,
516
+ className: classNames__default["default"]('eds-date-and-time-field__segment', {
517
+ 'eds-date-and-time-field__segment--placeholder': segment.isPlaceholder,
518
+ 'eds-date-and-time-field__segment--dot-separator': segment.text === '.'
519
+ }),
520
+ tabIndex: state.isDisabled ? -1 : segmentProps.tabIndex
521
+ }), segmentDisplayText());
522
+ };
523
+
524
+ /**
525
+ * Tar inn et JS Date-objekt og returnerer et av TimeValue-objektene fra @internationalized/date-pakken
526
+ * @param {Date} date JS Date-objekt som ønskes konvertert til et TimeValue-objekt
527
+ * @param {boolean} noDateOnlyTime Hvis datoen er irrelevant kan denne settes til true, da får man et Time-objekt uten dato tilbake
528
+ * @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
529
+ * @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.
530
+ * @returns {Time | CalendarDateTime | ZonedDateTime} et av TimeValue-objektene med verdier fra date
531
+ */
532
+
533
+ var nativeDateToTimeValue = function nativeDateToTimeValue(date$1, noDateOnlyTime, timeZone, offset) {
534
+ if (noDateOnlyTime === void 0) {
535
+ noDateOnlyTime = false;
536
+ }
537
+
538
+ if (timeZone) {
539
+ if (offset) {
540
+ return new date.ZonedDateTime(date$1.getFullYear(), date$1.getMonth() + 1, date$1.getDate(), timeZone, offset, date$1.getHours(), date$1.getMinutes(), date$1.getSeconds());
541
+ }
542
+
543
+ return date.parseAbsolute(date$1.toISOString(), timeZone);
544
+ }
545
+
546
+ if (noDateOnlyTime) return new date.Time(date$1.getHours(), date$1.getMinutes(), date$1.getSeconds(), 0);
547
+ return new date.CalendarDateTime(date$1.getFullYear(), date$1.getMonth() + 1, date$1.getDate(), date$1.getHours(), date$1.getMinutes(), date$1.getSeconds());
548
+ };
549
+ /**
550
+ * Tar inn et av TimeValue-objektene fra @internationalized/date-pakken og returnerer et JS Date-objekt
551
+ * @param {TimeValue} time Et tidspunkt på TimeValue-formatet som ønsket konvertert til et JS Date-objekt
552
+ * @param {string} timeZoneForCalendarDateTime Tidssonen time er i. Fungerer kun med typen er CalendarDateTime
553
+ * @returns {Date} et Date-objekt med verdier fra time
554
+ */
555
+ // This function uses a lot of @ts-expect-error to make it work with all TimeValue types. Sorry ...
556
+
557
+ var timeValueToNativeDate = function timeValueToNativeDate(time, timeZoneForCalendarDateTime) {
558
+ // @ts-expect-error .day does not exist on Time-object
559
+ if (!time.day) {
560
+ // type is Time
561
+ var date = new Date();
562
+ date.setHours(time.hour);
563
+ date.setMinutes(time.minute);
564
+ date.setSeconds(time.second);
565
+ return date;
566
+ } // @ts-expect-error .timeZone does not exist in type Time and CalendarDateTime
567
+
568
+
569
+ if (!time.timeZone) {
570
+ // type is CalendarDateTime
571
+ if (timeZoneForCalendarDateTime) // @ts-expect-error .toDate(timeZone) does not exist in type Time
572
+ return time.toDate(timeZoneForCalendarDateTime);
573
+ return new Date( // @ts-expect-error not in type Time
574
+ time.year, // @ts-expect-error not in type Time
575
+ time.month - 1, // @ts-expect-error not in type Time
576
+ time.day, time.hour, time.minute, time.second);
577
+ } // @ts-expect-error .toDate() does not exist in type Time or CalendarDateTime
578
+
579
+
580
+ return time.toDate();
581
+ };
582
+ var createCalendar = function createCalendar(identifier) {
583
+ if (identifier === void 0) {
584
+ identifier = 'gregory';
585
+ }
586
+
587
+ switch (identifier) {
588
+ case 'gregory':
589
+ return new date.GregorianCalendar();
590
+
591
+ default:
592
+ throw new Error("Unsupported calendar " + identifier);
593
+ }
594
+ };
595
+ var ariaLabelIfNorwegian = function ariaLabelIfNorwegian(norwegianAriaLabel, locale, propsCollection) {
596
+ if (locale !== 'no-NO') return propsCollection['aria-label'];
597
+ return norwegianAriaLabel;
598
+ };
599
+
600
+ var _excluded$7 = ["selectedDate", "label", "showTimeZone", "showTime", "granularity", "disabled", "variant", "feedback", "labelTooltip", "style", "className", "labelProps", "append"];
601
+ var DateField = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
602
+ var value = _ref.selectedDate,
603
+ label = _ref.label,
604
+ showTimeZone = _ref.showTimeZone,
605
+ showTime = _ref.showTime,
606
+ _ref$granularity = _ref.granularity,
607
+ granularity = _ref$granularity === void 0 ? 'day' : _ref$granularity,
608
+ disabled = _ref.disabled,
609
+ variant = _ref.variant,
610
+ feedback = _ref.feedback,
611
+ labelTooltip = _ref.labelTooltip,
612
+ style = _ref.style,
613
+ className = _ref.className,
614
+ parentLabelProps = _ref.labelProps,
615
+ append = _ref.append,
616
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$7);
617
+
618
+ var _useLocale = i18n.useLocale(),
619
+ locale = _useLocale.locale;
620
+
621
+ var state = datepicker$1.useDateFieldState(_extends({}, rest, {
622
+ locale: locale,
623
+ createCalendar: createCalendar,
624
+ value: value === null ? undefined : value,
625
+ hideTimeZone: !showTimeZone,
626
+ granularity: showTime ? 'minute' : granularity
627
+ }));
628
+ var dateFieldRef = React.useRef(null);
629
+
630
+ var _useDateField = datepicker.useDateField(_extends({}, rest, {
631
+ label: label,
632
+ isDisabled: disabled || rest.isDisabled
633
+ }), state, dateFieldRef),
634
+ labelProps = _useDateField.labelProps,
635
+ fieldProps = _useDateField.fieldProps;
636
+
637
+ var id = utils.useRandomId('datefield');
638
+ return React__default["default"].createElement(form.BaseFormControl, _extends({
639
+ style: style,
640
+ className: classNames__default["default"]('eds-datefield', className),
641
+ labelId: id,
642
+ ref: utils.mergeRefs(dateFieldRef, ref),
643
+ disabled: state.isDisabled,
644
+ disableLabelAnimation: true,
645
+ label: label,
646
+ labelTooltip: labelTooltip,
647
+ labelProps: parentLabelProps != null ? parentLabelProps : labelProps
648
+ }, fieldProps, {
649
+ variant: variant,
650
+ feedback: feedback,
651
+ append: append
652
+ }), state.segments.map(function (segment, i) {
653
+ return React__default["default"].createElement(FieldSegment, {
654
+ segment: segment,
655
+ state: state,
656
+ key: i
657
+ });
658
+ }));
659
+ });
660
+
661
+ var _excluded$6 = ["children", "className", "style"];
662
+ var CalendarButton = function CalendarButton(_ref) {
663
+ var children = _ref.children,
664
+ className = _ref.className,
665
+ style = _ref.style,
666
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$6);
667
+
668
+ var ref = React.useRef(null);
669
+
670
+ var _useButton = button$1.useButton(props, ref),
671
+ buttonProps = _useButton.buttonProps;
672
+
673
+ return React__default["default"].createElement(button.IconButton, _extends({}, buttonProps, {
674
+ ref: ref,
675
+ className: className,
676
+ style: style
677
+ }), children);
678
+ };
679
+
680
+ var CalendarCell = function CalendarCell(_ref) {
681
+ var _state$timeZone;
682
+
683
+ var state = _ref.state,
684
+ date$1 = _ref.date;
685
+ var cellRef = React.useRef(null);
686
+
687
+ var _useCalendarCell = calendar.useCalendarCell({
688
+ date: date$1
689
+ }, state, cellRef),
690
+ cellProps = _useCalendarCell.cellProps,
691
+ buttonProps = _useCalendarCell.buttonProps,
692
+ isSelected = _useCalendarCell.isSelected,
693
+ isOutsideVisibleRange = _useCalendarCell.isOutsideVisibleRange,
694
+ isDisabled = _useCalendarCell.isDisabled,
695
+ isUnavailable = _useCalendarCell.isUnavailable,
696
+ formattedDate = _useCalendarCell.formattedDate;
697
+
698
+ return React__default["default"].createElement("td", _extends({}, cellProps, {
699
+ className: "eds-datepicker__calendar__grid__cell__td"
700
+ }), React__default["default"].createElement("div", _extends({}, buttonProps, {
701
+ ref: cellRef,
702
+ hidden: isOutsideVisibleRange,
703
+ className: classNames__default["default"]('eds-datepicker__calendar__grid__cell', {
704
+ 'eds-datepicker__calendar__grid__cell--selected': isSelected,
705
+ 'eds-datepicker__calendar__grid__cell--disabled': isDisabled,
706
+ 'eds-datepicker__calendar__grid__cell--unavailable': isUnavailable,
707
+ 'eds-datepicker__calendar__grid__cell--today': date.isEqualDay(date$1, date.now((_state$timeZone = state.timeZone) != null ? _state$timeZone : date.getLocalTimeZone()))
708
+ })
709
+ }), formattedDate));
710
+ };
711
+
712
+ var _excluded$5 = ["state"];
713
+ var CalendarGrid = function CalendarGrid(_ref) {
714
+ var state = _ref.state,
715
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
716
+
717
+ var _useLocale = i18n.useLocale(),
718
+ locale = _useLocale.locale;
719
+
720
+ var _useCalendarGrid = calendar.useCalendarGrid(rest, state),
721
+ gridProps = _useCalendarGrid.gridProps,
722
+ headerProps = _useCalendarGrid.headerProps,
723
+ weekDays = _useCalendarGrid.weekDays;
724
+
725
+ var weeksInMonth = date.getWeeksInMonth(state.visibleRange.start, locale);
726
+ var weeksArray = Array.from(Array(weeksInMonth).keys());
727
+
728
+ var weekDaysMapped = function weekDaysMapped() {
729
+ if (locale.toLowerCase() === 'no-no' || locale.toLowerCase() === 'no') return ['ma', 'ti', 'on', 'to', 'fr', 'lø', 'sø'];
730
+ if (weekDays.toString() === 'M,T,W,T,F,S,S') return ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];
731
+ return weekDays.map(function (day) {
732
+ return day.toLowerCase();
733
+ });
734
+ };
735
+
736
+ return React__default["default"].createElement("table", _extends({}, gridProps, {
737
+ cellSpacing: "0",
738
+ className: "eds-datepicker__calendar__grid"
739
+ }), React__default["default"].createElement("thead", _extends({}, headerProps), React__default["default"].createElement("tr", null, weekDaysMapped().map(function (day, index) {
740
+ return React__default["default"].createElement("th", {
741
+ key: index
742
+ }, day);
743
+ }))), React__default["default"].createElement("tbody", null, weeksArray.map(function (weekIndex) {
744
+ return React__default["default"].createElement("tr", {
745
+ key: weekIndex
746
+ }, state.getDatesInWeek(weekIndex).map(function (date, i) {
747
+ return date ? React__default["default"].createElement(CalendarCell, {
748
+ key: i,
749
+ state: state,
750
+ date: date
751
+ }) : React__default["default"].createElement("td", {
752
+ key: i
753
+ });
754
+ }));
755
+ })));
756
+ };
757
+
758
+ var _excluded$4 = ["selectedDate", "style", "children"];
759
+ var Calendar = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
760
+ var style = _ref.style,
761
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
762
+
763
+ var _useLocale = i18n.useLocale(),
764
+ locale = _useLocale.locale;
765
+
766
+ var state = calendar$1.useCalendarState(_extends({}, rest, {
767
+ locale: locale,
768
+ createCalendar: createCalendar
769
+ }));
770
+
771
+ var _useCalendar = calendar.useCalendar(rest, state),
772
+ calendarProps = _useCalendar.calendarProps,
773
+ prevButtonProps = _useCalendar.prevButtonProps,
774
+ nextButtonProps = _useCalendar.nextButtonProps,
775
+ title = _useCalendar.title; // const monthAndYear = title.split(' ');
776
+
777
+
778
+ return React__default["default"].createElement("div", _extends({}, calendarProps, {
779
+ ref: ref,
780
+ className: "eds-datepicker__calendar",
781
+ style: style
782
+ }), React__default["default"].createElement("div", {
783
+ className: "eds-datepicker__calendar__header"
784
+ }, React__default["default"].createElement(CalendarButton, _extends({}, prevButtonProps, {
785
+ "aria-label": ariaLabelIfNorwegian('Forrige måned', locale, prevButtonProps)
786
+ }), React__default["default"].createElement(icons.LeftArrowIcon, {
787
+ size: 20
788
+ })), React__default["default"].createElement("h2", null, title), React__default["default"].createElement(CalendarButton, _extends({}, nextButtonProps, {
789
+ "aria-label": ariaLabelIfNorwegian('Neste måned', locale, nextButtonProps)
790
+ }), React__default["default"].createElement(icons.RightArrowIcon, {
791
+ size: 20
792
+ }))), React__default["default"].createElement(CalendarGrid, {
793
+ state: state
794
+ }));
795
+ }); // const getTitle = (monthYearList: string[], locale: string) => {
796
+ // const month = monthYearList[0];
797
+ // const year = monthYearList[1];
798
+ // if (locale.toLowerCase() !== 'no-no' && locale.toLowerCase() !== 'no')
799
+ // return month + ' ' + year;
800
+ // switch (month.toLowerCase()) {
801
+ // case 'january':
802
+ // return 'januar ' + year;
803
+ // case 'february':
804
+ // return 'februar ' + year;
805
+ // case 'march':
806
+ // return 'mars ' + year;
807
+ // case 'may':
808
+ // return 'mai ' + year;
809
+ // case 'june':
810
+ // return 'juni ' + year;
811
+ // case 'july':
812
+ // return 'juli ' + year;
813
+ // case 'october':
814
+ // return 'oktober ' + year;
815
+ // case 'december':
816
+ // return 'desember ' + year;
817
+ // default:
818
+ // return month.toLowerCase() + ' ' + year.toLowerCase();
819
+ // }
820
+ // };
821
+
822
+ var _excluded$3 = ["selectedDate", "onChange", "disabled", "className", "style", "variant", "feedback"];
823
+ var DatePickerBeta = function DatePickerBeta(_ref) {
824
+ var value = _ref.selectedDate,
825
+ _onChange = _ref.onChange,
826
+ isDisabled = _ref.disabled,
827
+ className = _ref.className,
828
+ variant = _ref.variant,
829
+ feedback = _ref.feedback,
830
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
831
+
832
+ var datePickerRef = React.useRef(null);
833
+ var calendarRef = React.useRef(null);
834
+ var dateFieldRef = React.useRef(null); // TODO SE PÅ OM VERDIER I USE...STATE BURDE VÆRE I USE... I STEDET
835
+
836
+ var state = datepicker$1.useDatePickerState(_extends({}, rest, {
837
+ value: value,
838
+ onChange: _onChange
839
+ }));
840
+
841
+ var _useDatePicker = datepicker.useDatePicker(_extends({
842
+ isDisabled: isDisabled
843
+ }, rest), state, datePickerRef),
844
+ groupProps = _useDatePicker.groupProps,
845
+ labelProps = _useDatePicker.labelProps,
846
+ fieldProps = _useDatePicker.fieldProps,
847
+ buttonProps = _useDatePicker.buttonProps,
848
+ dialogProps = _useDatePicker.dialogProps,
849
+ calendarProps = _useDatePicker.calendarProps; // calculations for floating-UI popover position
850
+
851
+
852
+ var _useFloating = reactDom.useFloating({
853
+ placement: 'bottom-start',
854
+ middleware: [reactDom.offset(tokens.space.extraSmall), reactDom.flip(), reactDom.shift({
855
+ padding: tokens.space.extraSmall
856
+ })]
857
+ }),
858
+ x = _useFloating.x,
859
+ y = _useFloating.y,
860
+ reference = _useFloating.reference,
861
+ floating = _useFloating.floating,
862
+ strategy = _useFloating.strategy; // set focus to selected date or today if available on open calendar
863
+
864
+
865
+ React.useEffect(function () {
866
+ var _calendarRef$current, _calendarRef$current2;
867
+
868
+ var gridCellPrefix = 'eds-datepicker__calendar__grid__cell';
869
+ var selectedCell = (_calendarRef$current = calendarRef.current) == null ? void 0 : _calendarRef$current.getElementsByClassName(gridCellPrefix + '--selected')[0];
870
+ var todayCell = (_calendarRef$current2 = calendarRef.current) == null ? void 0 : _calendarRef$current2.getElementsByClassName(gridCellPrefix + '--today')[0];
871
+ if (selectedCell) selectedCell.focus();else if (todayCell) todayCell.focus();
872
+ }, [state.isOpen]);
873
+ utils.useOnClickOutside([calendarRef], function () {
874
+ state.setOpen(false);
875
+ });
876
+ React.useEffect(function () {
877
+ var _calendarRef$current3;
878
+
879
+ var keyDownHandler = function keyDownHandler(event) {
880
+ if (event.key === 'Escape') state.setOpen(false);
881
+ };
882
+
883
+ (_calendarRef$current3 = calendarRef.current) == null ? void 0 : _calendarRef$current3.addEventListener('keydown', keyDownHandler);
884
+ return function () {
885
+ var _calendarRef$current4;
886
+
887
+ return (_calendarRef$current4 = calendarRef.current) == null ? void 0 : _calendarRef$current4.removeEventListener('keydown', keyDownHandler);
888
+ }; // eslint-disable-next-line react-hooks/exhaustive-deps
889
+ }, []);
890
+ return React__default["default"].createElement("div", {
891
+ className: classNames__default["default"]('eds-datepicker', className)
892
+ }, React__default["default"].createElement("div", _extends({}, groupProps, {
893
+ ref: function ref(node) {
894
+ datePickerRef.current = node;
895
+ reference(node);
896
+ },
897
+ className: "eds-datepicker__datefield__wrapper"
898
+ }), React__default["default"].createElement(DateField, _extends({}, fieldProps, {
899
+ selectedDate: state.value,
900
+ label: rest.label,
901
+ labelProps: labelProps,
902
+ ref: dateFieldRef,
903
+ className: classNames__default["default"]('eds-datepicker__datefield', {
904
+ 'eds-datepicker__datefield--disabled': fieldProps.isDisabled
905
+ }),
906
+ variant: variant,
907
+ feedback: feedback
908
+ })), !fieldProps.isDisabled && React__default["default"].createElement(CalendarButton, _extends({}, buttonProps, {
909
+ onPress: function onPress() {
910
+ return state.setOpen(!state.isOpen);
911
+ },
912
+ className: "eds-datepicker__open-calendar-button"
913
+ }), React__default["default"].createElement(icons.CalendarIcon, null))), React__default["default"].createElement(FocusLock__default["default"], {
914
+ disabled: !state.isOpen,
915
+ returnFocus: true
916
+ }, React__default["default"].createElement(Calendar, _extends({}, dialogProps, calendarProps, {
917
+ onChange: function onChange(dateValue) {
918
+ _onChange(dateValue);
919
+
920
+ state.setOpen(false);
921
+ },
922
+ disabled: calendarProps.isDisabled,
923
+ ref: function ref(node) {
924
+ calendarRef.current = node;
925
+ floating(node);
926
+ },
927
+ // styling for floating-UI popover
928
+ style: {
929
+ display: state.isOpen ? 'block' : 'none',
930
+ position: strategy,
931
+ top: y != null ? y : 0,
932
+ left: x != null ? x : 0,
933
+ zIndex: 10
934
+ }
935
+ }))));
936
+ };
937
+
488
938
  var _excluded$2 = ["className", "style", "label", "onChange", "feedback", "variant", "disableLabelAnimation", "prepend"],
489
939
  _excluded2$1 = ["onChange", "variant", "value"];
490
940
  var NativeDatePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
@@ -565,33 +1015,6 @@ var NativeDatePickerBase = /*#__PURE__*/React__default["default"].forwardRef(fun
565
1015
  }, rest));
566
1016
  });
567
1017
 
568
- var TimeSegment = function TimeSegment(_ref) {
569
- var segment = _ref.segment,
570
- state = _ref.state;
571
- var ref = React.useRef(null);
572
-
573
- var _useDateSegment = datepicker.useDateSegment(segment, state, ref),
574
- segmentProps = _useDateSegment.segmentProps;
575
-
576
- var is12HourFormatted = state.segments.some(function (segment) {
577
- return segment.text === 'AM' || segment.text === 'PM';
578
- });
579
-
580
- var segmentDisplayText = function segmentDisplayText() {
581
- if (is12HourFormatted) return segment.text; // if number add '0' padding to start when one digit
582
-
583
- if (segment.text.match(/\d+/)) return segment.text.padStart(2, '0');
584
- return segment.text;
585
- };
586
-
587
- return React__default["default"].createElement("div", _extends({}, segmentProps, {
588
- ref: ref,
589
- className: classNames__default["default"]('eds-timepicker__segment', {
590
- 'eds-timepicker__segment--placeholder': segment.isPlaceholder
591
- })
592
- }), segmentDisplayText());
593
- };
594
-
595
1018
  var TimePickerArrowButton = function TimePickerArrowButton(_ref) {
596
1019
  var direction = _ref.direction,
597
1020
  onClick = _ref.onClick,
@@ -706,7 +1129,7 @@ var TimePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_re
706
1129
  variant: variant,
707
1130
  feedback: feedback
708
1131
  }), state.segments.map(function (segment, i) {
709
- return React__default["default"].createElement(TimeSegment, {
1132
+ return React__default["default"].createElement(FieldSegment, {
710
1133
  segment: segment,
711
1134
  state: state,
712
1135
  key: i
@@ -794,71 +1217,17 @@ var NativeTimePickerBase = /*#__PURE__*/React__default["default"].forwardRef(fun
794
1217
  }, rest));
795
1218
  });
796
1219
 
797
- /**
798
- * Tar inn et JS Date-objekt og returnerer et av TimeValue-objektene fra @internationalized/date-pakken
799
- * @param {Date} date JS Date-objekt som ønskes konvertert til et TimeValue-objekt
800
- * @param {boolean} noDateOnlyTime Hvis datoen er irrelevant kan denne settes til true, da får man et Time-objekt uten dato tilbake
801
- * @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
802
- * @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.
803
- * @returns {Time | CalendarDateTime | ZonedDateTime} et av TimeValue-objektene med verdier fra date
804
- */
805
-
806
- var nativeDateToTimeValue = function nativeDateToTimeValue(date$1, noDateOnlyTime, timeZone, offset) {
807
- if (noDateOnlyTime === void 0) {
808
- noDateOnlyTime = false;
809
- }
810
-
811
- if (timeZone) {
812
- if (offset) {
813
- return new date.ZonedDateTime(date$1.getFullYear(), date$1.getMonth() + 1, date$1.getDate(), timeZone, offset, date$1.getHours(), date$1.getMinutes(), date$1.getSeconds());
814
- }
815
-
816
- return date.parseAbsolute(date$1.toISOString(), timeZone);
817
- }
818
-
819
- if (noDateOnlyTime) return new date.Time(date$1.getHours(), date$1.getMinutes(), date$1.getSeconds(), 0);
820
- return new date.CalendarDateTime(date$1.getFullYear(), date$1.getMonth() + 1, date$1.getDate(), date$1.getHours(), date$1.getMinutes(), date$1.getSeconds());
821
- };
822
- /**
823
- * Tar inn et av TimeValue-objektene fra @internationalized/date-pakken og returnerer et JS Date-objekt
824
- * @param {TimeValue} time Et tidspunkt på TimeValue-formatet som ønsket konvertert til et JS Date-objekt
825
- * @param {string} timeZoneForCalendarDateTime Tidssonen time er i. Fungerer kun med typen er CalendarDateTime
826
- * @returns {Date} et Date-objekt med verdier fra time
827
- */
828
- // This function uses a lot of @ts-expect-error to make it work with all TimeValue types. Sorry ...
829
-
830
- var timeValueToNativeDate = function timeValueToNativeDate(time, timeZoneForCalendarDateTime) {
831
- // @ts-expect-error .day does not exist on Time-object
832
- if (!time.day) {
833
- // type is Time
834
- var date = new Date();
835
- date.setHours(time.hour);
836
- date.setMinutes(time.minute);
837
- date.setSeconds(time.second);
838
- return date;
839
- } // @ts-expect-error .timeZone does not exist in type Time and CalendarDateTime
840
-
841
-
842
- if (!time.timeZone) {
843
- // type is CalendarDateTime
844
- if (timeZoneForCalendarDateTime) // @ts-expect-error .toDate(timeZone) does not exist in type Time
845
- return time.toDate(timeZoneForCalendarDateTime);
846
- return new Date( // @ts-expect-error not in type Time
847
- time.year, // @ts-expect-error not in type Time
848
- time.month - 1, // @ts-expect-error not in type Time
849
- time.day, time.hour, time.minute, time.second);
850
- } // @ts-expect-error .toDate() does not exist in type Time or CalendarDateTime
851
-
852
-
853
- return time.toDate();
854
- };
855
-
856
1220
  utils.warnAboutMissingStyles('datepicker', 'form', 'icons');
857
1221
 
1222
+ exports.Calendar = Calendar;
1223
+ exports.DateField = DateField;
858
1224
  exports.DatePicker = DatePicker;
1225
+ exports.DatePickerBeta = DatePickerBeta;
859
1226
  exports.NativeDatePicker = NativeDatePicker;
860
1227
  exports.NativeTimePicker = NativeTimePicker;
861
1228
  exports.TimePicker = TimePicker;
1229
+ exports.ariaLabelIfNorwegian = ariaLabelIfNorwegian;
1230
+ exports.createCalendar = createCalendar;
862
1231
  exports.nativeDateToTimeValue = nativeDateToTimeValue;
863
1232
  exports.timeValueToNativeDate = timeValueToNativeDate;
864
1233
  //# sourceMappingURL=datepicker.cjs.development.js.map