@entur/datepicker 2.1.1 → 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,28 @@
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
+
20
+ ## [2.1.3](https://bitbucket.org/enturas/design-system/compare/@entur/datepicker@2.1.2...@entur/datepicker@2.1.3) (2022-08-31)
21
+
22
+ **Note:** Version bump only for package @entur/datepicker
23
+
24
+ ## [2.1.2](https://bitbucket.org/enturas/design-system/compare/@entur/datepicker@2.1.1...@entur/datepicker@2.1.2) (2022-08-24)
25
+
26
+ **Note:** Version bump only for package @entur/datepicker
27
+
6
28
  ## [2.1.1](https://bitbucket.org/enturas/design-system/compare/@entur/datepicker@2.1.0...@entur/datepicker@2.1.1) (2022-08-12)
7
29
 
8
30
  **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
 
@@ -54,44 +58,6 @@ function _objectWithoutPropertiesLoose(source, excluded) {
54
58
  return target;
55
59
  }
56
60
 
57
- function _unsupportedIterableToArray(o, minLen) {
58
- if (!o) return;
59
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
60
- var n = Object.prototype.toString.call(o).slice(8, -1);
61
- if (n === "Object" && o.constructor) n = o.constructor.name;
62
- if (n === "Map" || n === "Set") return Array.from(o);
63
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
64
- }
65
-
66
- function _arrayLikeToArray(arr, len) {
67
- if (len == null || len > arr.length) len = arr.length;
68
-
69
- for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
70
-
71
- return arr2;
72
- }
73
-
74
- function _createForOfIteratorHelperLoose(o, allowArrayLike) {
75
- var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
76
- if (it) return (it = it.call(o)).next.bind(it);
77
-
78
- if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
79
- if (it) o = it;
80
- var i = 0;
81
- return function () {
82
- if (i >= o.length) return {
83
- done: true
84
- };
85
- return {
86
- done: false,
87
- value: o[i++]
88
- };
89
- };
90
- }
91
-
92
- throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
93
- }
94
-
95
61
  var DatePickerHeader = function DatePickerHeader(_ref) {
96
62
  var _date$getMonth;
97
63
 
@@ -217,7 +183,7 @@ var DatePickerInput = /*#__PURE__*/React__default["default"].forwardRef(function
217
183
  feedback: feedback,
218
184
  variant: variant,
219
185
  disableLabelAnimation: disableLabelAnimation,
220
- ref: mergeRefs(ref, inputRef, forwardRef),
186
+ ref: utils.mergeRefs(ref, inputRef, forwardRef),
221
187
  onClick: handleOnClickInputField,
222
188
  ariaAlertOnFeedback: true,
223
189
  append: !hideCalendarButton && React__default["default"].createElement(tooltip.Tooltip, {
@@ -235,22 +201,6 @@ var DatePickerInput = /*#__PURE__*/React__default["default"].forwardRef(function
235
201
  }, rest));
236
202
  });
237
203
 
238
- var mergeRefs = function mergeRefs() {
239
- for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {
240
- refs[_key] = arguments[_key];
241
- }
242
-
243
- return function (node) {
244
- for (var _iterator = _createForOfIteratorHelperLoose(refs), _step; !(_step = _iterator()).done;) {
245
- var ref = _step.value;
246
-
247
- if (typeof ref === 'function') {
248
- ref(node);
249
- } else if (ref) ref.current = node;
250
- }
251
- };
252
- };
253
-
254
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"];
255
205
  ReactDatepicker.registerLocale('nb', locale.nb);
256
206
  var DatePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
@@ -536,7 +486,7 @@ var DatePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_re
536
486
  });
537
487
 
538
488
  var _excluded$2 = ["className", "style", "label", "onChange", "feedback", "variant", "disableLabelAnimation", "prepend"],
539
- _excluded2$2 = ["onChange", "variant", "value"];
489
+ _excluded2$1 = ["onChange", "variant", "value"];
540
490
  var NativeDatePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
541
491
  var className = _ref.className,
542
492
  style = _ref.style,
@@ -573,7 +523,7 @@ var NativeDatePickerBase = /*#__PURE__*/React__default["default"].forwardRef(fun
573
523
  var onChange = _ref2.onChange,
574
524
  variant = _ref2.variant,
575
525
  value = _ref2.value,
576
- rest = _objectWithoutPropertiesLoose(_ref2, _excluded2$2);
526
+ rest = _objectWithoutPropertiesLoose(_ref2, _excluded2$1);
577
527
 
578
528
  var contextVariant = form.useVariant();
579
529
  var currentVariant = variant || contextVariant;
@@ -615,16 +565,47 @@ var NativeDatePickerBase = /*#__PURE__*/React__default["default"].forwardRef(fun
615
565
  }, rest));
616
566
  });
617
567
 
618
- var _excluded$1 = ["selectedTime", "onChange", "placeholder", "disabled", "className", "style", "label", "labelTooltip", "feedback", "variant", "disableLabelAnimation", "locale", "onLeftArrowClick", "onRightArrowClick"],
619
- _excluded2$1 = ["className", "onChange", "selectedTime", "placeholder", "timeFormat", "dateFormat"],
620
- _excluded3 = ["direction"];
621
- 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"];
622
606
  var TimePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
623
- var _ref$selectedTime = _ref.selectedTime,
624
- selectedTime = _ref$selectedTime === void 0 ? null : _ref$selectedTime,
607
+ var selectedTime = _ref.selectedTime,
625
608
  onChange = _ref.onChange,
626
- _ref$placeholder = _ref.placeholder,
627
- placeholder = _ref$placeholder === void 0 ? 'Velg tid' : _ref$placeholder,
628
609
  disabled = _ref.disabled,
629
610
  className = _ref.className,
630
611
  style = _ref.style,
@@ -632,137 +613,83 @@ var TimePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_re
632
613
  labelTooltip = _ref.labelTooltip,
633
614
  feedback = _ref.feedback,
634
615
  variant = _ref.variant,
635
- disableLabelAnimation = _ref.disableLabelAnimation,
636
- _ref$locale = _ref.locale,
637
- locale = _ref$locale === void 0 ? 'nb' : _ref$locale,
638
- _ref$onLeftArrowClick = _ref.onLeftArrowClick,
639
- onLeftArrowClick = _ref$onLeftArrowClick === void 0 ? function (selectedTime, event) {
640
- return selectedTime && onChange(dateFns.sub(selectedTime, {
641
- minutes: 30
642
- }), event);
643
- } : _ref$onLeftArrowClick,
644
- _ref$onRightArrowClic = _ref.onRightArrowClick,
645
- onRightArrowClick = _ref$onRightArrowClic === void 0 ? function (selectedTime, event) {
646
- return selectedTime && onChange(dateFns.add(selectedTime, {
647
- minutes: 30
648
- }), event);
649
- } : _ref$onRightArrowClic,
616
+ customLocale = _ref.locale,
617
+ showTimeZone = _ref.showTimeZone,
618
+ _ref$minuteIncrementF = _ref.minuteIncrementForArrowButtons,
619
+ minuteIncrementForArrowButtons = _ref$minuteIncrementF === void 0 ? 30 : _ref$minuteIncrementF,
650
620
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$1);
651
621
 
652
- var timepickerId = utils.useRandomId('eds-timepicker');
653
- return React__default["default"].createElement(form.BaseFormControl, {
654
- style: style,
655
- ref: ref,
656
- label: label,
657
- labelId: timepickerId,
658
- labelTooltip: labelTooltip,
659
- variant: variant,
660
- feedback: feedback,
661
- disableLabelAnimation: disableLabelAnimation,
662
- className: "eds-timepicker-form-control",
663
- disabled: disabled,
664
- prepend: React__default["default"].createElement(TimePickerArrowButton, {
665
- direction: "left",
666
- tabIndex: -1,
667
- onClick: function onClick(e) {
668
- return onLeftArrowClick(selectedTime, e);
669
- },
670
- disabled: disabled
671
- })
672
- }, React__default["default"].createElement(TimePickerBase, _extends({
673
- selectedTime: selectedTime,
622
+ var _useLocale = i18n.useLocale(),
623
+ locale = _useLocale.locale;
624
+
625
+ if (customLocale) locale = customLocale;
626
+ var state = datepicker$1.useTimeFieldState(_extends({
674
627
  onChange: onChange,
675
- placeholder: placeholder,
676
- className: className,
628
+ label: label,
677
629
  locale: locale,
678
- ariaLabelledBy: timepickerId,
679
- disabled: disabled
680
- }, rest)), React__default["default"].createElement(TimePickerArrowButton, {
681
- direction: "right",
682
- tabIndex: -1,
683
- onClick: function onClick(e) {
684
- return onRightArrowClick(selectedTime, e);
685
- },
686
- disabled: disabled
687
- }));
688
- });
689
- var POPPER_MODIFIERS = [{
690
- name: 'offset',
691
- enabled: true,
692
- options: {
693
- offset: [0, 0]
694
- }
695
- }];
696
-
697
- var TimePickerBase = function TimePickerBase(_ref2) {
698
- var className = _ref2.className,
699
- onChange = _ref2.onChange,
700
- selectedTime = _ref2.selectedTime,
701
- placeholder = _ref2.placeholder,
702
- _ref2$timeFormat = _ref2.timeFormat,
703
- timeFormat = _ref2$timeFormat === void 0 ? 'HH:mm' : _ref2$timeFormat,
704
- _ref2$dateFormat = _ref2.dateFormat,
705
- dateFormat = _ref2$dateFormat === void 0 ? ['HH:mm', 'HHmm'] : _ref2$dateFormat,
706
- rest = _objectWithoutPropertiesLoose(_ref2, _excluded2$1);
707
-
708
- var _useInputGroupContext = form.useInputGroupContext(),
709
- isTimepickerFilled = _useInputGroupContext.isFilled,
710
- setFiller = _useInputGroupContext.setFilled;
630
+ value: selectedTime,
631
+ hideTimeZone: !showTimeZone
632
+ }, rest));
633
+ var timeFieldRef = React.useRef(null);
711
634
 
712
- utils.useOnMount(function () {
713
- if (selectedTime) {
714
- setFiller && !isTimepickerFilled && setFiller(true);
715
- }
716
- });
717
- React__default["default"].useEffect(function () {
718
- if (selectedTime) {
719
- setFiller && !isTimepickerFilled && setFiller(true);
720
- } else {
721
- setFiller && isTimepickerFilled && setFiller(false);
722
- }
723
- }, [selectedTime, setFiller, isTimepickerFilled]);
635
+ var _useTimeField = datepicker.useTimeField(rest, state, timeFieldRef),
636
+ labelProps = _useTimeField.labelProps,
637
+ fieldProps = _useTimeField.fieldProps;
724
638
 
725
- var handleChange = function handleChange(date, event) {
726
- if (date) {
727
- setFiller && !isTimepickerFilled && setFiller(true);
728
- } else {
729
- setFiller && isTimepickerFilled && setFiller(false);
730
- }
639
+ var id = utils.useRandomId('timepicker');
731
640
 
732
- if (onChange) {
733
- onChange(date, event);
734
- }
641
+ var addMinutesToSelectedTime = function addMinutesToSelectedTime(minutes) {
642
+ state.value && state.setValue(state.value && state.value.add({
643
+ minutes: minutes
644
+ }));
735
645
  };
736
646
 
737
- return React__default["default"].createElement(ReactDatepicker__default["default"], _extends({
738
- className: classNames__default["default"]('eds-form-control', 'eds-timepicker__input', className),
739
- calendarClassName: "eds-timepicker",
740
- selected: selectedTime,
741
- onChange: handleChange,
742
- dateFormat: dateFormat,
743
- timeFormat: timeFormat,
744
- showTimeSelect: true,
745
- showTimeInput: true,
746
- showTimeSelectOnly: true,
747
- showPopperArrow: false,
748
- placeholderText: placeholder,
749
- popperClassName: "eds-datepicker__popper",
750
- popperModifiers: POPPER_MODIFIERS,
751
- open: false
752
- }, rest));
753
- };
754
-
755
- var TimePickerArrowButton = function TimePickerArrowButton(_ref3) {
756
- var direction = _ref3.direction,
757
- rest = _objectWithoutPropertiesLoose(_ref3, _excluded3);
758
-
759
- return React__default["default"].createElement("button", _extends({
760
- className: classNames__default["default"]('eds-timepicker__arrowbutton', "eds-timepicker__arrowbutton--" + direction),
761
- type: "button"
762
- }, rest), direction === 'left' ? React__default["default"].createElement(icons.LeftArrowIcon, null) : React__default["default"].createElement(icons.RightArrowIcon, null));
763
- };
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
+ });
764
691
 
765
- var _excluded = ["className", "style", "onChange", "label", "feedback", "variant", "disableLabelAnimation", "prepend"],
692
+ var _excluded = ["className", "style", "onChange", "label", "feedback", "variant", "prepend"],
766
693
  _excluded2 = ["onChange", "value"];
767
694
  var NativeTimePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
768
695
  var className = _ref.className,
@@ -771,21 +698,19 @@ var NativeTimePicker = /*#__PURE__*/React__default["default"].forwardRef(functio
771
698
  label = _ref.label,
772
699
  feedback = _ref.feedback,
773
700
  variant = _ref.variant,
774
- disableLabelAnimation = _ref.disableLabelAnimation,
775
- _ref$prepend = _ref.prepend,
776
- prepend = _ref$prepend === void 0 ? React__default["default"].createElement(icons.ClockIcon, null) : _ref$prepend,
701
+ prepend = _ref.prepend,
777
702
  rest = _objectWithoutPropertiesLoose(_ref, _excluded);
778
703
 
779
- var nativetimepickerId = utils.useRandomId('eds-nativetimepicker');
704
+ var nativetimepickerId = utils.useRandomId('eds-native-timepicker');
780
705
  return React__default["default"].createElement(form.BaseFormControl, {
781
706
  style: style,
782
- className: className,
707
+ className: classNames__default["default"](className, 'eds-native-timepicker'),
783
708
  prepend: prepend,
784
709
  label: label,
785
710
  feedback: feedback,
786
711
  variant: variant,
787
712
  labelId: nativetimepickerId,
788
- disableLabelAnimation: disableLabelAnimation
713
+ disableLabelAnimation: true
789
714
  }, React__default["default"].createElement(NativeTimePickerBase, _extends({
790
715
  onChange: onChange,
791
716
  "aria-labelledby": nativetimepickerId,
@@ -831,16 +756,77 @@ var NativeTimePickerBase = /*#__PURE__*/React__default["default"].forwardRef(fun
831
756
  ref: ref,
832
757
  "aria-invalid": currentVariant === 'error',
833
758
  type: "time",
834
- className: "eds-form-control eds-native-date-picker",
759
+ className: "eds-form-control",
835
760
  onChange: handleChange,
836
761
  value: value
837
762
  }, rest));
838
763
  });
839
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
+
840
824
  utils.warnAboutMissingStyles('datepicker', 'form', 'icons');
841
825
 
842
826
  exports.DatePicker = DatePicker;
843
827
  exports.NativeDatePicker = NativeDatePicker;
844
828
  exports.NativeTimePicker = NativeTimePicker;
845
829
  exports.TimePicker = TimePicker;
830
+ exports.nativeDateToTimeValue = nativeDateToTimeValue;
831
+ exports.timeValueToNativeDate = timeValueToNativeDate;
846
832
  //# sourceMappingURL=datepicker.cjs.development.js.map