@entur/datepicker 2.1.3 → 3.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,20 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [3.0.0-alpha.0](https://bitbucket.org/enturas/design-system/compare/@entur/datepicker@2.1.3...@entur/datepicker@3.0.0-alpha.0) (2022-09-02)
7
+
8
+ ### Features
9
+
10
+ - **native time picker:** update native timepicker with small tweaks ([9d72bf7](https://bitbucket.org/enturas/design-system/commits/9d72bf79951aed9b236fb55a007fc96d019b9c46))
11
+ - **timepicker:** add new timepicker component using react-aria ([cd90a09](https://bitbucket.org/enturas/design-system/commits/cd90a092de72ebf1cf1cef61147ada5f42fb67b4))
12
+ - **timepicker utils:** add utility functions for converting between TimeValue and JS Date ([f5ee77e](https://bitbucket.org/enturas/design-system/commits/f5ee77e9b3666816bda82b7e0deceaf27672f536))
13
+
14
+ ### BREAKING CHANGES
15
+
16
+ - **native time picker:** disableLabelAnimation prop has been removed (is always true now)
17
+ - **timepicker:** This is a complete rewrite. Changes in the API will need to be accounted for when using this new
18
+ version
19
+
6
20
  ## [2.1.3](https://bitbucket.org/enturas/design-system/compare/@entur/datepicker@2.1.2...@entur/datepicker@2.1.3) (2022-08-31)
7
21
 
8
22
  **Note:** Version bump only for package @entur/datepicker
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import { VariantType } from '@entur/form';
3
+ import './NativeTimePicker.scss';
3
4
  export declare type NativeTimePickerProps = {
4
5
  /** Ekstra klassenavn */
5
6
  className?: string;
@@ -9,13 +10,7 @@ export declare type NativeTimePickerProps = {
9
10
  feedback?: string;
10
11
  /** Valideringsvariant */
11
12
  variant?: VariantType;
12
- /** Plasserer labelen statisk toppen av inputfeltet
13
- * @default false
14
- */
15
- disableLabelAnimation?: boolean;
16
- /** Tekst eller ikon som kommer før inputfelter
17
- * @default <ClockIcon />
18
- */
13
+ /** Tekst eller ikon som kommer før inputfelter */
19
14
  prepend?: React.ReactNode;
20
15
  } & React.InputHTMLAttributes<HTMLInputElement>;
21
16
  export declare const NativeTimePicker: React.ForwardRefExoticComponent<{
@@ -27,12 +22,6 @@ export declare const NativeTimePicker: React.ForwardRefExoticComponent<{
27
22
  feedback?: string | undefined;
28
23
  /** Valideringsvariant */
29
24
  variant?: VariantType | undefined;
30
- /** Plasserer labelen statisk toppen av inputfeltet
31
- * @default false
32
- */
33
- disableLabelAnimation?: boolean | undefined;
34
- /** Tekst eller ikon som kommer før inputfelter
35
- * @default <ClockIcon />
36
- */
25
+ /** Tekst eller ikon som kommer før inputfelter */
37
26
  prepend?: React.ReactNode;
38
27
  } & React.InputHTMLAttributes<HTMLInputElement> & React.RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,62 @@
1
+ import React from 'react';
2
+ import type { TimePickerProps as ReactAriaTimePickerProps, TimeValue } from '@react-types/datepicker';
3
+ import { VariantType } from '@entur/form';
4
+ import './TimePicker.scss';
5
+ export declare type TimePickerProps = {
6
+ /** Den valgte tiden. Tid i '@internationalized/date'-pakkens format */
7
+ selectedTime?: TimeValue;
8
+ /** Kalles når tiden endres. Tid i '@internationalized/date'-pakkens format */
9
+ onChange: (value: TimeValue) => void;
10
+ /** Label til TimePicker */
11
+ label: string;
12
+ /** Minutter som legges til eller trekkes fra ved klikk på pilene i TimePicker
13
+ * @default 30
14
+ */
15
+ minuteIncrementForArrowButtons?: number;
16
+ /** BCP47-språkkoden til locale-en du ønsker å bruke.
17
+ * @default Brukerenhetens selvvalgte locale
18
+ */
19
+ locale?: string;
20
+ /** Viser den gjeldende tidssonen hvis en er valgt
21
+ * @default false
22
+ */
23
+ showTimeZone?: boolean;
24
+ /** Varselmelding, som vil komme under TimePicker */
25
+ feedback?: string;
26
+ /** Valideringsvariant */
27
+ variant?: VariantType;
28
+ labelTooltip?: React.ReactNode;
29
+ disabled?: boolean;
30
+ /** Ekstra klassenavn */
31
+ className?: string;
32
+ style?: React.CSSProperties;
33
+ } & Omit<ReactAriaTimePickerProps<TimeValue>, 'onChange' | 'label' | 'hideTimeZone' | 'placeholder'>;
34
+ export declare const TimePicker: React.ForwardRefExoticComponent<{
35
+ /** Den valgte tiden. Tid i '@internationalized/date'-pakkens format */
36
+ selectedTime?: TimeValue | undefined;
37
+ /** Kalles når tiden endres. Tid i '@internationalized/date'-pakkens format */
38
+ onChange: (value: TimeValue) => void;
39
+ /** Label til TimePicker */
40
+ label: string;
41
+ /** Minutter som legges til eller trekkes fra ved klikk på pilene i TimePicker
42
+ * @default 30
43
+ */
44
+ minuteIncrementForArrowButtons?: number | undefined;
45
+ /** BCP47-språkkoden til locale-en du ønsker å bruke.
46
+ * @default Brukerenhetens selvvalgte locale
47
+ */
48
+ locale?: string | undefined;
49
+ /** Viser den gjeldende tidssonen hvis en er valgt
50
+ * @default false
51
+ */
52
+ showTimeZone?: boolean | undefined;
53
+ /** Varselmelding, som vil komme under TimePicker */
54
+ feedback?: string | undefined;
55
+ /** Valideringsvariant */
56
+ variant?: VariantType | undefined;
57
+ labelTooltip?: React.ReactNode;
58
+ disabled?: boolean | undefined;
59
+ /** Ekstra klassenavn */
60
+ className?: string | undefined;
61
+ style?: React.CSSProperties | undefined;
62
+ } & Omit<ReactAriaTimePickerProps<TimeValue>, "onChange" | "label" | "hideTimeZone" | "placeholder"> & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ declare type TimePickerArrowButtonProps = {
3
+ direction: 'left' | 'right';
4
+ } & React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>;
5
+ export declare const TimePickerArrowButton: React.FC<TimePickerArrowButtonProps>;
6
+ export {};
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import { DateSegment, DateFieldState } from '@react-stately/datepicker';
3
+ declare type TimeSegmentProps = {
4
+ segment: DateSegment;
5
+ state: DateFieldState;
6
+ isAmPm: boolean;
7
+ index: number;
8
+ };
9
+ export declare const TimeSegment: ({ segment, state, isAmPm, index, }: TimeSegmentProps) => JSX.Element;
10
+ export {};
@@ -0,0 +1,3 @@
1
+ export * from './TimePicker';
2
+ export * from './NativeTimePicker';
3
+ export * from './utils';
@@ -0,0 +1,18 @@
1
+ import { ZonedDateTime, CalendarDateTime, Time } from '@internationalized/date';
2
+ import { TimeValue } from '@react-types/datepicker';
3
+ /**
4
+ * Tar inn et JS Date-objekt og returnerer et av TimeValue-objektene fra @internationalized/date-pakken
5
+ * @param {Date} date JS Date-objekt som ønskes konvertert til et TimeValue-objekt
6
+ * @param {boolean} noDateOnlyTime Hvis datoen er irrelevant kan denne settes til true, da får man et Time-objekt uten dato tilbake
7
+ * @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
8
+ * @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.
9
+ * @returns {Time | CalendarDateTime | ZonedDateTime} et av TimeValue-objektene med verdier fra date
10
+ */
11
+ export declare const nativeDateToTimeValue: (date: Date, noDateOnlyTime?: boolean, timeZone?: string | undefined, offset?: number | undefined) => Time | CalendarDateTime | ZonedDateTime;
12
+ /**
13
+ * Tar inn et av TimeValue-objektene fra @internationalized/date-pakken og returnerer et JS Date-objekt
14
+ * @param {TimeValue} time Et tidspunkt på TimeValue-formatet som ønsket konvertert til et JS Date-objekt
15
+ * @param {string} timeZoneForCalendarDateTime Tidssonen time er i. Fungerer kun med typen er CalendarDateTime
16
+ * @returns {Date} et Date-objekt med verdier fra time
17
+ */
18
+ export declare const timeValueToNativeDate: (time: TimeValue, timeZoneForCalendarDateTime?: string | undefined) => Date;
@@ -14,6 +14,10 @@ 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 = require('@react-aria/datepicker');
18
+ var i18n = require('@react-aria/i18n');
19
+ var datepicker$1 = require('@react-stately/datepicker');
20
+ var date = require('@internationalized/date');
17
21
 
18
22
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
19
23
 
@@ -482,7 +486,7 @@ var DatePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_re
482
486
  });
483
487
 
484
488
  var _excluded$2 = ["className", "style", "label", "onChange", "feedback", "variant", "disableLabelAnimation", "prepend"],
485
- _excluded2$2 = ["onChange", "variant", "value"];
489
+ _excluded2$1 = ["onChange", "variant", "value"];
486
490
  var NativeDatePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
487
491
  var className = _ref.className,
488
492
  style = _ref.style,
@@ -519,7 +523,7 @@ var NativeDatePickerBase = /*#__PURE__*/React__default["default"].forwardRef(fun
519
523
  var onChange = _ref2.onChange,
520
524
  variant = _ref2.variant,
521
525
  value = _ref2.value,
522
- rest = _objectWithoutPropertiesLoose(_ref2, _excluded2$2);
526
+ rest = _objectWithoutPropertiesLoose(_ref2, _excluded2$1);
523
527
 
524
528
  var contextVariant = form.useVariant();
525
529
  var currentVariant = variant || contextVariant;
@@ -561,16 +565,47 @@ var NativeDatePickerBase = /*#__PURE__*/React__default["default"].forwardRef(fun
561
565
  }, rest));
562
566
  });
563
567
 
564
- var _excluded$1 = ["selectedTime", "onChange", "placeholder", "disabled", "className", "style", "label", "labelTooltip", "feedback", "variant", "disableLabelAnimation", "locale", "onLeftArrowClick", "onRightArrowClick"],
565
- _excluded2$1 = ["className", "onChange", "selectedTime", "placeholder", "timeFormat", "dateFormat"],
566
- _excluded3 = ["direction"];
567
- ReactDatepicker.registerLocale('nb', locale.nb);
568
+ var TimeSegment = function TimeSegment(_ref) {
569
+ var segment = _ref.segment,
570
+ state = _ref.state,
571
+ isAmPm = _ref.isAmPm,
572
+ index = _ref.index;
573
+ var ref = React.useRef(null);
574
+
575
+ var _useDateSegment = datepicker.useDateSegment(segment, state, ref),
576
+ segmentProps = _useDateSegment.segmentProps;
577
+
578
+ var segmentDisplayText = function segmentDisplayText() {
579
+ if (isAmPm) return segment.text;
580
+ if (index === 0 && segment.text.length === 1) return '0' + segment.text;
581
+ return segment.text;
582
+ };
583
+
584
+ return React__default["default"].createElement("div", _extends({}, segmentProps, {
585
+ ref: ref,
586
+ className: "eds-timepicker__segment " + (segment.isPlaceholder ? 'eds-timepicker__segment--placeholder' : '')
587
+ }), segmentDisplayText());
588
+ };
589
+
590
+ var TimePickerArrowButton = function TimePickerArrowButton(_ref) {
591
+ var direction = _ref.direction,
592
+ onClick = _ref.onClick,
593
+ disabled = _ref.disabled,
594
+ ariaLabel = _ref['aria-label'];
595
+ return React__default["default"].createElement(button.IconButton, {
596
+ className: classNames__default["default"]('eds-timepicker__arrowbutton', "eds-timepicker__arrowbutton--" + direction),
597
+ type: "button",
598
+ tabIndex: -1,
599
+ onClick: onClick,
600
+ disabled: disabled,
601
+ "aria-label": ariaLabel
602
+ }, direction === 'left' ? React__default["default"].createElement(icons.LeftArrowIcon, null) : React__default["default"].createElement(icons.RightArrowIcon, null));
603
+ };
604
+
605
+ var _excluded$1 = ["selectedTime", "onChange", "disabled", "className", "style", "label", "labelTooltip", "feedback", "variant", "locale", "showTimeZone", "minuteIncrementForArrowButtons", "children"];
568
606
  var TimePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
569
- var _ref$selectedTime = _ref.selectedTime,
570
- selectedTime = _ref$selectedTime === void 0 ? null : _ref$selectedTime,
607
+ var selectedTime = _ref.selectedTime,
571
608
  onChange = _ref.onChange,
572
- _ref$placeholder = _ref.placeholder,
573
- placeholder = _ref$placeholder === void 0 ? 'Velg tid' : _ref$placeholder,
574
609
  disabled = _ref.disabled,
575
610
  className = _ref.className,
576
611
  style = _ref.style,
@@ -578,137 +613,83 @@ var TimePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_re
578
613
  labelTooltip = _ref.labelTooltip,
579
614
  feedback = _ref.feedback,
580
615
  variant = _ref.variant,
581
- disableLabelAnimation = _ref.disableLabelAnimation,
582
- _ref$locale = _ref.locale,
583
- locale = _ref$locale === void 0 ? 'nb' : _ref$locale,
584
- _ref$onLeftArrowClick = _ref.onLeftArrowClick,
585
- onLeftArrowClick = _ref$onLeftArrowClick === void 0 ? function (selectedTime, event) {
586
- return selectedTime && onChange(dateFns.sub(selectedTime, {
587
- minutes: 30
588
- }), event);
589
- } : _ref$onLeftArrowClick,
590
- _ref$onRightArrowClic = _ref.onRightArrowClick,
591
- onRightArrowClick = _ref$onRightArrowClic === void 0 ? function (selectedTime, event) {
592
- return selectedTime && onChange(dateFns.add(selectedTime, {
593
- minutes: 30
594
- }), event);
595
- } : _ref$onRightArrowClic,
616
+ customLocale = _ref.locale,
617
+ showTimeZone = _ref.showTimeZone,
618
+ _ref$minuteIncrementF = _ref.minuteIncrementForArrowButtons,
619
+ minuteIncrementForArrowButtons = _ref$minuteIncrementF === void 0 ? 30 : _ref$minuteIncrementF,
596
620
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$1);
597
621
 
598
- var timepickerId = utils.useRandomId('eds-timepicker');
599
- return React__default["default"].createElement(form.BaseFormControl, {
600
- style: style,
601
- ref: ref,
602
- label: label,
603
- labelId: timepickerId,
604
- labelTooltip: labelTooltip,
605
- variant: variant,
606
- feedback: feedback,
607
- disableLabelAnimation: disableLabelAnimation,
608
- className: "eds-timepicker-form-control",
609
- disabled: disabled,
610
- prepend: React__default["default"].createElement(TimePickerArrowButton, {
611
- direction: "left",
612
- tabIndex: -1,
613
- onClick: function onClick(e) {
614
- return onLeftArrowClick(selectedTime, e);
615
- },
616
- disabled: disabled
617
- })
618
- }, React__default["default"].createElement(TimePickerBase, _extends({
619
- selectedTime: selectedTime,
622
+ var _useLocale = i18n.useLocale(),
623
+ locale = _useLocale.locale;
624
+
625
+ if (customLocale) locale = customLocale;
626
+ var state = datepicker$1.useTimeFieldState(_extends({
620
627
  onChange: onChange,
621
- placeholder: placeholder,
622
- className: className,
628
+ label: label,
623
629
  locale: locale,
624
- ariaLabelledBy: timepickerId,
625
- disabled: disabled
626
- }, rest)), React__default["default"].createElement(TimePickerArrowButton, {
627
- direction: "right",
628
- tabIndex: -1,
629
- onClick: function onClick(e) {
630
- return onRightArrowClick(selectedTime, e);
631
- },
632
- disabled: disabled
633
- }));
634
- });
635
- var POPPER_MODIFIERS = [{
636
- name: 'offset',
637
- enabled: true,
638
- options: {
639
- offset: [0, 0]
640
- }
641
- }];
642
-
643
- var TimePickerBase = function TimePickerBase(_ref2) {
644
- var className = _ref2.className,
645
- onChange = _ref2.onChange,
646
- selectedTime = _ref2.selectedTime,
647
- placeholder = _ref2.placeholder,
648
- _ref2$timeFormat = _ref2.timeFormat,
649
- timeFormat = _ref2$timeFormat === void 0 ? 'HH:mm' : _ref2$timeFormat,
650
- _ref2$dateFormat = _ref2.dateFormat,
651
- dateFormat = _ref2$dateFormat === void 0 ? ['HH:mm', 'HHmm'] : _ref2$dateFormat,
652
- rest = _objectWithoutPropertiesLoose(_ref2, _excluded2$1);
630
+ value: selectedTime,
631
+ hideTimeZone: !showTimeZone
632
+ }, rest));
633
+ var timeFieldRef = React.useRef(null);
653
634
 
654
- var _useInputGroupContext = form.useInputGroupContext(),
655
- isTimepickerFilled = _useInputGroupContext.isFilled,
656
- setFiller = _useInputGroupContext.setFilled;
635
+ var _useTimeField = datepicker.useTimeField(rest, state, timeFieldRef),
636
+ labelProps = _useTimeField.labelProps,
637
+ fieldProps = _useTimeField.fieldProps;
657
638
 
658
- utils.useOnMount(function () {
659
- if (selectedTime) {
660
- setFiller && !isTimepickerFilled && setFiller(true);
661
- }
662
- });
663
- React__default["default"].useEffect(function () {
664
- if (selectedTime) {
665
- setFiller && !isTimepickerFilled && setFiller(true);
666
- } else {
667
- setFiller && isTimepickerFilled && setFiller(false);
668
- }
669
- }, [selectedTime, setFiller, isTimepickerFilled]);
670
-
671
- var handleChange = function handleChange(date, event) {
672
- if (date) {
673
- setFiller && !isTimepickerFilled && setFiller(true);
674
- } else {
675
- setFiller && isTimepickerFilled && setFiller(false);
676
- }
639
+ var id = utils.useRandomId('timepicker');
677
640
 
678
- if (onChange) {
679
- onChange(date, event);
680
- }
641
+ var addMinutesToSelectedTime = function addMinutesToSelectedTime(minutes) {
642
+ state.value && state.setValue(state.value && state.value.add({
643
+ minutes: minutes
644
+ }));
681
645
  };
682
646
 
683
- return React__default["default"].createElement(ReactDatepicker__default["default"], _extends({
684
- className: classNames__default["default"]('eds-form-control', 'eds-timepicker__input', className),
685
- calendarClassName: "eds-timepicker",
686
- selected: selectedTime,
687
- onChange: handleChange,
688
- dateFormat: dateFormat,
689
- timeFormat: timeFormat,
690
- showTimeSelect: true,
691
- showTimeInput: true,
692
- showTimeSelectOnly: true,
693
- showPopperArrow: false,
694
- placeholderText: placeholder,
695
- popperClassName: "eds-datepicker__popper",
696
- popperModifiers: POPPER_MODIFIERS,
697
- open: false
698
- }, rest));
699
- };
700
-
701
- var TimePickerArrowButton = function TimePickerArrowButton(_ref3) {
702
- var direction = _ref3.direction,
703
- rest = _objectWithoutPropertiesLoose(_ref3, _excluded3);
704
-
705
- return React__default["default"].createElement("button", _extends({
706
- className: classNames__default["default"]('eds-timepicker__arrowbutton', "eds-timepicker__arrowbutton--" + direction),
707
- type: "button"
708
- }, rest), direction === 'left' ? React__default["default"].createElement(icons.LeftArrowIcon, null) : React__default["default"].createElement(icons.RightArrowIcon, null));
709
- };
647
+ var isAmPm = state.segments.some(function (segment) {
648
+ return segment.text === 'AM' || segment.text === 'PM';
649
+ });
650
+ return React__default["default"].createElement(i18n.I18nProvider, {
651
+ locale: locale
652
+ }, React__default["default"].createElement("div", {
653
+ className: classNames__default["default"](className, 'eds-timepicker__wrapper'),
654
+ style: style
655
+ }, React__default["default"].createElement(TimePickerArrowButton, {
656
+ direction: "left",
657
+ disabled: disabled,
658
+ "aria-label": "Trekk fra " + minuteIncrementForArrowButtons + " minutter",
659
+ onClick: function onClick() {
660
+ return addMinutesToSelectedTime(minuteIncrementForArrowButtons * -1);
661
+ }
662
+ }), React__default["default"].createElement(form.BaseFormControl, _extends({
663
+ className: 'eds-timepicker',
664
+ labelId: id,
665
+ label: label,
666
+ labelProps: _extends({}, labelProps),
667
+ ref: utils.mergeRefs(timeFieldRef, ref),
668
+ disabled: disabled,
669
+ disableLabelAnimation: true,
670
+ labelTooltip: labelTooltip
671
+ }, fieldProps, {
672
+ variant: variant,
673
+ feedback: feedback
674
+ }), state.segments.map(function (segment, i) {
675
+ return React__default["default"].createElement(TimeSegment, {
676
+ segment: segment,
677
+ state: state,
678
+ isAmPm: isAmPm,
679
+ index: i,
680
+ key: i
681
+ });
682
+ })), React__default["default"].createElement(TimePickerArrowButton, {
683
+ direction: "right",
684
+ disabled: disabled,
685
+ "aria-label": "Legg til " + minuteIncrementForArrowButtons + " minutter",
686
+ onClick: function onClick() {
687
+ return addMinutesToSelectedTime(minuteIncrementForArrowButtons);
688
+ }
689
+ })));
690
+ });
710
691
 
711
- var _excluded = ["className", "style", "onChange", "label", "feedback", "variant", "disableLabelAnimation", "prepend"],
692
+ var _excluded = ["className", "style", "onChange", "label", "feedback", "variant", "prepend"],
712
693
  _excluded2 = ["onChange", "value"];
713
694
  var NativeTimePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
714
695
  var className = _ref.className,
@@ -717,21 +698,19 @@ var NativeTimePicker = /*#__PURE__*/React__default["default"].forwardRef(functio
717
698
  label = _ref.label,
718
699
  feedback = _ref.feedback,
719
700
  variant = _ref.variant,
720
- disableLabelAnimation = _ref.disableLabelAnimation,
721
- _ref$prepend = _ref.prepend,
722
- prepend = _ref$prepend === void 0 ? React__default["default"].createElement(icons.ClockIcon, null) : _ref$prepend,
701
+ prepend = _ref.prepend,
723
702
  rest = _objectWithoutPropertiesLoose(_ref, _excluded);
724
703
 
725
- var nativetimepickerId = utils.useRandomId('eds-nativetimepicker');
704
+ var nativetimepickerId = utils.useRandomId('eds-native-timepicker');
726
705
  return React__default["default"].createElement(form.BaseFormControl, {
727
706
  style: style,
728
- className: className,
707
+ className: classNames__default["default"](className, 'eds-native-timepicker'),
729
708
  prepend: prepend,
730
709
  label: label,
731
710
  feedback: feedback,
732
711
  variant: variant,
733
712
  labelId: nativetimepickerId,
734
- disableLabelAnimation: disableLabelAnimation
713
+ disableLabelAnimation: true
735
714
  }, React__default["default"].createElement(NativeTimePickerBase, _extends({
736
715
  onChange: onChange,
737
716
  "aria-labelledby": nativetimepickerId,
@@ -777,16 +756,77 @@ var NativeTimePickerBase = /*#__PURE__*/React__default["default"].forwardRef(fun
777
756
  ref: ref,
778
757
  "aria-invalid": currentVariant === 'error',
779
758
  type: "time",
780
- className: "eds-form-control eds-native-date-picker",
759
+ className: "eds-form-control",
781
760
  onChange: handleChange,
782
761
  value: value
783
762
  }, rest));
784
763
  });
785
764
 
765
+ /**
766
+ * Tar inn et JS Date-objekt og returnerer et av TimeValue-objektene fra @internationalized/date-pakken
767
+ * @param {Date} date JS Date-objekt som ønskes konvertert til et TimeValue-objekt
768
+ * @param {boolean} noDateOnlyTime Hvis datoen er irrelevant kan denne settes til true, da får man et Time-objekt uten dato tilbake
769
+ * @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
770
+ * @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.
771
+ * @returns {Time | CalendarDateTime | ZonedDateTime} et av TimeValue-objektene med verdier fra date
772
+ */
773
+
774
+ var nativeDateToTimeValue = function nativeDateToTimeValue(date$1, noDateOnlyTime, timeZone, offset) {
775
+ if (noDateOnlyTime === void 0) {
776
+ noDateOnlyTime = false;
777
+ }
778
+
779
+ if (timeZone) {
780
+ if (offset) {
781
+ 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());
782
+ }
783
+
784
+ return date.parseAbsolute(date$1.toISOString(), timeZone);
785
+ }
786
+
787
+ if (noDateOnlyTime) return new date.Time(date$1.getHours(), date$1.getMinutes(), date$1.getSeconds(), 0);
788
+ return new date.CalendarDateTime(date$1.getFullYear(), date$1.getMonth() + 1, date$1.getDate(), date$1.getHours(), date$1.getMinutes(), date$1.getSeconds());
789
+ };
790
+ /**
791
+ * Tar inn et av TimeValue-objektene fra @internationalized/date-pakken og returnerer et JS Date-objekt
792
+ * @param {TimeValue} time Et tidspunkt på TimeValue-formatet som ønsket konvertert til et JS Date-objekt
793
+ * @param {string} timeZoneForCalendarDateTime Tidssonen time er i. Fungerer kun med typen er CalendarDateTime
794
+ * @returns {Date} et Date-objekt med verdier fra time
795
+ */
796
+ // This function uses a lot of @ts-expect-error to make it work with all TimeValue types. Sorry ...
797
+
798
+ var timeValueToNativeDate = function timeValueToNativeDate(time, timeZoneForCalendarDateTime) {
799
+ // @ts-expect-error .day does not exist on Time-object
800
+ if (!time.day) {
801
+ // type is Time
802
+ var date = new Date();
803
+ date.setHours(time.hour);
804
+ date.setMinutes(time.minute);
805
+ date.setSeconds(time.second);
806
+ return date;
807
+ } // @ts-expect-error .timeZone does not exist in type Time and CalendarDateTime
808
+
809
+
810
+ if (!time.timeZone) {
811
+ // type is CalendarDateTime
812
+ if (timeZoneForCalendarDateTime) // @ts-expect-error .toDate(timeZone) does not exist in type Time
813
+ return time.toDate(timeZoneForCalendarDateTime);
814
+ return new Date( // @ts-expect-error not in type Time
815
+ time.year, // @ts-expect-error not in type Time
816
+ time.month - 1, // @ts-expect-error not in type Time
817
+ time.day, time.hour, time.minute, time.second);
818
+ } // @ts-expect-error .toDate() does not exist in type Time or CalendarDateTime
819
+
820
+
821
+ return time.toDate();
822
+ };
823
+
786
824
  utils.warnAboutMissingStyles('datepicker', 'form', 'icons');
787
825
 
788
826
  exports.DatePicker = DatePicker;
789
827
  exports.NativeDatePicker = NativeDatePicker;
790
828
  exports.NativeTimePicker = NativeTimePicker;
791
829
  exports.TimePicker = TimePicker;
830
+ exports.nativeDateToTimeValue = nativeDateToTimeValue;
831
+ exports.timeValueToNativeDate = timeValueToNativeDate;
792
832
  //# sourceMappingURL=datepicker.cjs.development.js.map