@entur/datepicker 10.1.3 → 11.0.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/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  This package contains the different Datepicker components.
4
4
 
5
- > 💡 Looking for the [documentation](https://design.entur.no/komponenter/skjemaelementer/datepicker)?
5
+ > 💡 Looking for the [documentation](https://linje.entur.no/komponenter/skjemaelementer/datepicker)?
6
6
 
7
7
  ## Installation
8
8
 
@@ -14,4 +14,4 @@ yarn add @entur/datepicker
14
14
 
15
15
  ## Usage
16
16
 
17
- Please refer to the [documentation](https://design.entur.no/komponenter/skjemaelementer/datepicker) for usage information.
17
+ Please refer to the [documentation](https://linje.entur.no/komponenter/skjemaelementer/datepicker) for usage information.
@@ -1,10 +1,12 @@
1
1
  import React from 'react';
2
+ import { AriaCalendarProps } from '@react-aria/calendar';
2
3
  import { CalendarDate, DateValue } from '@internationalized/date';
3
4
  import { MappedDateValue } from '@react-types/datepicker';
5
+ import { DateFieldProps } from './DateField';
4
6
  import './Calendar.scss';
5
- export type CalendarProps<DateType extends DateValue> = {
7
+ export type CalendarProps<DateType extends DateValue> = Omit<AriaCalendarProps<DateType>, 'value' | 'onChange' | 'label' | 'hideTimeZone' | 'placeholder' | 'placeholderValue' | 'defaultValue' | 'minValue' | 'maxValue'> & {
6
8
  selectedDate: DateType | null;
7
- onChange: (SelectedDate: MappedDateValue<DateType> | null) => void | React.Dispatch<React.SetStateAction<DateType | null>>;
9
+ onChange?: (selectedDate: MappedDateValue<DateType> | null) => void;
8
10
  navigationDescription?: string;
9
11
  style?: React.CSSProperties;
10
12
  /** Ekstra klassenavn */
@@ -48,5 +50,6 @@ export type CalendarProps<DateType extends DateValue> = {
48
50
  ariaLabelForDate?: (date: CalendarDate) => string;
49
51
  locale?: string;
50
52
  calendarRef?: React.MutableRefObject<HTMLDivElement | null>;
53
+ forcedReturnType?: DateFieldProps<DateType>['forcedReturnType'];
51
54
  };
52
55
  export declare const Calendar: <DateType extends DateValue>({ locale: localOverride, ...rest }: CalendarProps<DateType>) => React.JSX.Element;
@@ -1,18 +1,19 @@
1
1
  import React from 'react';
2
- import type { SpectrumDateFieldProps, DateValue, AriaDatePickerProps, MappedDateValue } from '@react-types/datepicker';
2
+ import type { DateValue, AriaDatePickerProps, MappedDateValue, Granularity } from '@react-types/datepicker';
3
3
  import { BaseFormControlProps } from '@entur/form';
4
4
  import { VariantType } from '@entur/utils';
5
+ import { ForcedReturnType } from '../shared/utils';
5
6
  import './DateField.scss';
6
7
  /** @deprecated use variant="information" instead */
7
8
  declare const info = "info";
8
9
  /** @deprecated use variant="negative" instead */
9
10
  declare const error = "error";
10
- export type DateFieldProps<DateType extends DateValue> = {
11
+ export type DateFieldProps<DateType extends DateValue> = Omit<AriaDatePickerProps<DateType>, 'value' | 'onChange' | 'label' | 'hideTimeZone' | 'placeholder' | 'placeholderValue' | 'defaultValue' | 'minValue' | 'maxValue'> & Partial<Omit<BaseFormControlProps, 'children' | 'label'>> & {
11
12
  /** Den valgte tiden. Tid i '@internationalized/date'-pakkens format */
12
13
  selectedDate: DateType | null;
13
- /** Kalles når tiden endres. Tid i '@internationalized/date'-pakkens format */
14
- onChange: (value: MappedDateValue<DateType> | null) => void;
15
- /** Label til TimePicker */
14
+ /** Kalles når dato endres. Tid i '@internationalized/date'-pakkens format */
15
+ onChange?: (value: MappedDateValue<DateType> | null) => void;
16
+ /** Ledetekst til DateField */
16
17
  label: string;
17
18
  /** BCP47-språkkoden til locale-en du ønsker å bruke.
18
19
  * @default Brukerenhetens selvvalgte locale
@@ -22,6 +23,15 @@ export type DateFieldProps<DateType extends DateValue> = {
22
23
  * @default false
23
24
  */
24
25
  showTimeZone?: boolean;
26
+ /** Brukes for å vise tid i datovelgeren. Velg minste enhet som skal vises.
27
+ * Hvis du vil vise tid vil "minute" vise minutt og ikke sekund, mens "second" viser
28
+ * sekunder også.
29
+ * @default "day"
30
+ */
31
+ granularity?: Granularity;
32
+ /** Viser tidspunkt i tillegg til dato.
33
+ * OBS: selectedDate må være av typen CalendarDateTime eller ZonedDateTime
34
+ */
25
35
  showTime?: boolean;
26
36
  /** Tidligste gyldige datovalg.
27
37
  * Eks: today(getLocalTimeZone()) == i dag i lokal tidssone.
@@ -37,6 +47,19 @@ export type DateFieldProps<DateType extends DateValue> = {
37
47
  * Gyldig til og med den tiden som legges inn som maxDate.
38
48
  * Dato uten tid vil være gyldig hele maxDate-dagen */
39
49
  maxDate?: DateValue;
50
+ /** Funksjon som tar inn en dato og sier om den er utilgjengelig.
51
+ * Eks. (date) => isWeekend(date, 'no-NO') == helgedager er ikke tilgjengelig */
52
+ isDateUnavailable?: (date: DateValue) => boolean;
53
+ /** Tvinger typen på onChange til den gitte typen.
54
+ * Dette er nyttig når utgangsverdien din er 'null', men du ønsker at
55
+ * DatePicker alltid skal returnere f.eks ZonedDateTime.
56
+ *
57
+ * Som standard returnerer onChange DateValue basert på selectedDate,
58
+ * eller CalendarDate hvis selectedDate er 'null'.
59
+ *
60
+ * @default undefined
61
+ */
62
+ forcedReturnType?: ForcedReturnType;
40
63
  /** Varselmelding, som vil komme under TimePicker */
41
64
  feedback?: string;
42
65
  /** Valideringsvariant*/
@@ -51,13 +74,12 @@ export type DateFieldProps<DateType extends DateValue> = {
51
74
  validationVariant?: VariantType | typeof error | typeof info;
52
75
  labelTooltip?: React.ReactNode;
53
76
  labelProps?: React.DOMAttributes<Element>;
54
- fieldProps?: AriaDatePickerProps<DateValue>;
55
- groupProps?: React.DOMAttributes<Element>;
77
+ fieldProps?: DateFieldProps<DateType>;
56
78
  dateFieldRef?: React.Ref<HTMLDivElement>;
57
79
  disabled?: boolean;
58
80
  /** Ekstra klassenavn */
59
81
  className?: string;
60
82
  style?: React.CSSProperties;
61
- } & Omit<SpectrumDateFieldProps<DateValue>, 'value' | 'onChange' | 'label' | 'hideTimeZone' | 'placeholder' | 'placeholderValue' | 'defaultValue' | 'minValue' | 'maxValue'> & Omit<Partial<BaseFormControlProps>, 'children'>;
62
- export declare const DateField: <DateType extends DateValue>({ selectedDate, onChange, label, locale: customLocale, showTimeZone, showTime, granularity, disabled, isDisabled, variant, feedback, validationVariant, validationFeedback, labelTooltip, minDate, maxDate, style, className, labelProps: parentLabelProps, fieldProps: parentFieldProps, groupProps: parentGroupProps, append, prepend, dateFieldRef: ref, ...rest }: DateFieldProps<DateType>) => React.JSX.Element;
83
+ };
84
+ export declare const DateField: <DateType extends DateValue>({ selectedDate, onChange, label, locale: customLocale, showTimeZone, showTime, granularity, disabled, isDisabled, variant, feedback, validationVariant, validationFeedback, labelTooltip, minDate, maxDate, forcedReturnType, style, className, labelProps: parentLabelProps, append, prepend, dateFieldRef: ref, ...rest }: DateFieldProps<DateType>) => React.JSX.Element;
63
85
  export {};
@@ -1,62 +1,8 @@
1
1
  import React from 'react';
2
2
  import { CalendarDate, DateValue } from '@internationalized/date';
3
- import type { AriaDatePickerProps, MappedDateValue } from '@react-types/datepicker';
4
- import type { BaseFormControlProps } from '@entur/form';
5
- import type { VariantType } from '@entur/utils';
3
+ import { DateFieldProps } from './DateField';
6
4
  import './DatePicker.scss';
7
- /** @deprecated use variant="information" instead */
8
- declare const info = "info";
9
- /** @deprecated use variant="negative" instead */
10
- declare const error = "error";
11
- export type DatePickerProps<DateType extends DateValue> = {
12
- /** Den valgte datoen. Dato i '@internationalized/date'-pakkens format */
13
- selectedDate: DateType | null;
14
- /** Kalles når tiden endres. Dato i '@internationalized/date'-pakkens format */
15
- onChange: (value: MappedDateValue<DateType> | null) => void;
16
- /** Ledetekst for inputfeltet til DatePicker */
17
- label: string;
18
- /** BCP47-språkkoden til locale-en du ønsker å bruke.
19
- * @default Brukerenhetens selvvalgte locale
20
- */
21
- locale?: string;
22
- /** Viser den gjeldende tidssonen hvis en er valgt (krever at tid også vises)
23
- * @default false
24
- */
25
- showTimeZone?: boolean;
26
- /** Viser tidspunkt i tillegg til dato.
27
- * OBS: selectedDate må være av typen CalendarDateTime eller ZonedDateTime
28
- */
29
- showTime?: boolean;
30
- /** Tidligste gyldige datovalg.
31
- * Eks: today(getLocalTimeZone()) == i dag i lokal tidssone.
32
- *
33
- * OBS: Hvis du bruker dato med tid vil tidspunktet også tas hensyn til.
34
- * Gyldig fra og med den tiden som legges inn som minDate.
35
- * Dato uten tid vil være gyldig hele minDate-dagen */
36
- minDate?: DateValue;
37
- /** Seneste gyldige datovalg.
38
- * Eks: today(getLocalTimeZone()).add({days: 1}) == i morgen i lokal tidssone
39
- *
40
- * OBS: Hvis du bruker dato med tid vil tidspunktet også tas hensyn til.
41
- * Gyldig til og med den tiden som legges inn som maxDate.
42
- * Dato uten tid vil være gyldig hele maxDate-dagen */
43
- maxDate?: DateValue;
44
- /** Funksjon som tar inn en dato og sier om den er utilgjengelig.
45
- * Eks. (date) => isWeekend(date, 'no-NO') == helgedager er ikke tilgjengelig */
46
- isDateUnavailable?: (date: DateValue) => boolean;
47
- /** Varselmelding, som vil komme under DatePicker sitt inputfelt */
48
- feedback?: string;
49
- /** Valideringsvariant*/
50
- variant?: VariantType | typeof error | typeof info;
51
- /** Varselmelding som forteller om ugyldig dato
52
- * @default "Ugyldig dato"
53
- */
54
- validationFeedback?: string;
55
- /** Valideringsvariant for melding om ugyldig dato
56
- * @default "negative"
57
- */
58
- validationVariant?: VariantType | typeof error | typeof info;
59
- disabled?: boolean;
5
+ export type DatePickerProps<DateType extends DateValue> = Omit<DateFieldProps<DateType>, 'labelProps' | 'fieldProps' | 'groupProps' | 'dateFieldRef'> & {
60
6
  /** Slå på visning av ukenummere i kalenderen. Overskriften for ukenummer-kolonnen
61
7
  * kan endres med prop-en 'weekNumberHeader'
62
8
  * @default false */
@@ -77,16 +23,6 @@ export type DatePickerProps<DateType extends DateValue> = {
77
23
  * @default 'Bruk piltastene til å navigere mellom datoer'
78
24
  */
79
25
  navigationDescription?: string;
80
- /** Tvinger typen på onChange til den gitte typen.
81
- * Dette er nyttig når utgangsverdien din er 'null', men du ønsker at
82
- * DatePicker alltid skal returnere f.eks ZonedDateTime.
83
- *
84
- * Som standard returnerer onChange DateValue basert på selectedDate,
85
- * eller CalendarDate hvis selectedDate er 'null'.
86
- *
87
- * @default undefined
88
- */
89
- forcedReturnType?: 'CalendarDate' | 'CalendarDateTime' | 'ZonedDateTime';
90
26
  /** Brukes for å legge til klassenavn på spesifikke datoer i kalenderen.
91
27
  * Tar inn en dato og skal returnere klassenavnet som skal legges til den datoen.
92
28
  * @default undefined
@@ -102,9 +38,5 @@ export type DatePickerProps<DateType extends DateValue> = {
102
38
  * @example (date) => isWeekend(date, 'no-NO') ? 'helgedag' : ''
103
39
  */
104
40
  ariaLabelForDate?: (date: CalendarDate) => string;
105
- /** Ekstra klassenavn */
106
- className?: string;
107
- style?: React.CSSProperties;
108
- } & Omit<AriaDatePickerProps<DateType>, 'value' | 'onChange' | 'label' | 'hideTimeZone' | 'placeholder' | 'minValue' | 'maxValue'> & Omit<Partial<BaseFormControlProps>, 'children'>;
109
- export declare const DatePicker: <DateType extends DateValue>({ selectedDate, onChange, locale, disabled, showTime, showTimeZone, classNameForDate, className, style, variant, feedback, validationVariant, validationFeedback, showWeekNumbers, weekNumberHeader, disableModal, labelTooltip, navigationDescription, minDate, maxDate, modalTreshold, forcedReturnType, ariaLabelForDate, append, prepend, ...rest }: DatePickerProps<DateType>) => React.JSX.Element;
110
- export {};
41
+ };
42
+ export declare const DatePicker: <DateType extends DateValue>({ selectedDate, locale, disabled, showTime, showTimeZone, classNameForDate, className, variant, feedback, validationVariant, validationFeedback, showWeekNumbers, weekNumberHeader, disableModal, labelTooltip, navigationDescription, minDate, maxDate, modalTreshold, forcedReturnType, ariaLabelForDate, append, prepend, granularity, ...rest }: DatePickerProps<DateType>) => React.JSX.Element;
@@ -62,6 +62,6 @@ export type TimePickerProps<TimeType extends TimeValue> = {
62
62
  /** Ekstra klassenavn */
63
63
  className?: string;
64
64
  style?: React.CSSProperties;
65
- } & Omit<AriaTimeFieldProps<TimeType>, 'value' | 'onChange' | 'label' | 'hideTimeZone' | 'placeholder' | 'minValue' | 'maxValue'> & Partial<BaseFormControlProps>;
65
+ } & Omit<AriaTimeFieldProps<TimeType>, 'value' | 'onChange' | 'label' | 'hideTimeZone' | 'placeholder' | 'minValue' | 'maxValue'> & Omit<Partial<BaseFormControlProps>, 'children' | 'label'>;
66
66
  export declare const TimePicker: <TimeType extends TimeValue>({ selectedTime, onChange, disabled, className, style, label, labelTooltip, feedback, granularity, variant, locale: customLocale, showTimeZone, showSeconds, minuteIncrementForArrowButtons, leftArrowButtonAriaLabel, rightArrowButtonAriaLabel, inputRef, forcedReturnType, forcedTimeZone, append, prepend, ...rest }: TimePickerProps<TimeType>) => React.JSX.Element;
67
67
  export {};
@@ -52,7 +52,7 @@ var FieldSegment = function FieldSegment(_ref) {
52
52
  ref: ref,
53
53
  className: classNames('eds-date-and-time-field__segment', {
54
54
  'eds-date-and-time-field__segment--placeholder': segment.isPlaceholder,
55
- 'eds-date-and-time-field__segment--dot-separator': segment.text === '.'
55
+ 'eds-date-and-time-field__segment--dot-separator': segment.text === '.' || segment.text === ':'
56
56
  }),
57
57
  tabIndex: state.isDisabled ? -1 : segmentProps.tabIndex
58
58
  }, rest), segment.text);
@@ -205,17 +205,31 @@ function getWeekNumberForDate(date$1) {
205
205
  var weekNumber = Math.ceil((thursdayOfWeek.compare(firstDayOfYearForThursday) + 1) / 7);
206
206
  return weekNumber;
207
207
  }
208
+ function handleOnChange(_ref2) {
209
+ var value = _ref2.value,
210
+ selectedDate = _ref2.selectedDate,
211
+ forcedReturnType = _ref2.forcedReturnType,
212
+ onChange = _ref2.onChange;
213
+ if (forcedReturnType !== undefined || !selectedDate) {
214
+ return onChange == null ? void 0 : onChange(convertValueToType({
215
+ value: value,
216
+ type: forcedReturnType != null ? forcedReturnType : 'ZonedDateTime',
217
+ timezone: value !== null && 'timezone' in value ? value.timezone : undefined
218
+ }));
219
+ }
220
+ onChange == null || onChange(value);
221
+ }
208
222
 
209
- var _excluded$a = ["selectedDate", "onChange", "label", "locale", "showTimeZone", "showTime", "granularity", "disabled", "isDisabled", "variant", "feedback", "validationVariant", "validationFeedback", "labelTooltip", "minDate", "maxDate", "style", "className", "labelProps", "fieldProps", "groupProps", "append", "prepend", "dateFieldRef"];
223
+ var _excluded$a = ["selectedDate", "onChange", "label", "locale", "showTimeZone", "showTime", "granularity", "disabled", "isDisabled", "variant", "feedback", "validationVariant", "validationFeedback", "labelTooltip", "minDate", "maxDate", "forcedReturnType", "style", "className", "labelProps", "append", "prepend", "dateFieldRef"];
210
224
  var DateField = function DateField(_ref) {
211
225
  var selectedDate = _ref.selectedDate,
212
- onChange = _ref.onChange,
226
+ _onChange = _ref.onChange,
213
227
  label = _ref.label,
214
228
  customLocale = _ref.locale,
215
229
  showTimeZone = _ref.showTimeZone,
216
230
  showTime = _ref.showTime,
217
231
  _ref$granularity = _ref.granularity,
218
- granularity = _ref$granularity === void 0 ? 'day' : _ref$granularity,
232
+ granularity = _ref$granularity === void 0 ? showTime ? 'minute' : 'day' : _ref$granularity,
219
233
  disabled = _ref.disabled,
220
234
  isDisabled = _ref.isDisabled,
221
235
  variant = _ref.variant,
@@ -227,34 +241,40 @@ var DateField = function DateField(_ref) {
227
241
  labelTooltip = _ref.labelTooltip,
228
242
  minDate = _ref.minDate,
229
243
  maxDate = _ref.maxDate,
244
+ forcedReturnType = _ref.forcedReturnType,
230
245
  style = _ref.style,
231
246
  className = _ref.className,
232
247
  parentLabelProps = _ref.labelProps,
233
- parentFieldProps = _ref.fieldProps,
234
- parentGroupProps = _ref.groupProps,
235
248
  append = _ref.append,
236
249
  prepend = _ref.prepend,
237
250
  ref = _ref.dateFieldRef,
238
251
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$a);
239
252
  var _useLocale = i18n.useLocale(),
240
253
  locale = _useLocale.locale;
241
- var state = datepicker$1.useDateFieldState(_extends({}, rest, {
254
+ var _props = _extends({}, rest, {
255
+ label: label,
242
256
  locale: customLocale != null ? customLocale : locale,
243
257
  createCalendar: createCalendar,
244
258
  value: selectedDate,
245
- onChange: onChange,
259
+ onChange: function onChange(value) {
260
+ return handleOnChange({
261
+ value: value,
262
+ selectedDate: selectedDate,
263
+ forcedReturnType: forcedReturnType,
264
+ onChange: _onChange
265
+ });
266
+ },
246
267
  hideTimeZone: !showTimeZone,
247
- granularity: showTime ? 'minute' : granularity,
268
+ granularity: granularity,
248
269
  minValue: minDate,
249
270
  // this weird logic makes sure the entire day is included if no time is provided in maxDate
250
271
  maxValue: 'hour' in (maxDate != null ? maxDate : {}) ? maxDate : maxDate !== undefined ? lastMillisecondOfDay(maxDate) : undefined,
251
272
  isDisabled: isDisabled || disabled,
252
273
  shouldForceLeadingZeros: true
253
- }));
274
+ });
275
+ var state = datepicker$1.useDateFieldState(_props);
254
276
  var dateFieldRef = React.useRef(null);
255
- var _useDateField = datepicker.useDateField(_extends({}, parentFieldProps, rest, {
256
- label: label
257
- }), state, dateFieldRef),
277
+ var _useDateField = datepicker.useDateField(_props, state, dateFieldRef),
258
278
  labelProps = _useDateField.labelProps,
259
279
  fieldProps = _useDateField.fieldProps;
260
280
  var id = utils.useRandomId('datefield');
@@ -279,22 +299,16 @@ var DateField = function DateField(_ref) {
279
299
  labelProps: parentLabelProps != null ? parentLabelProps : labelProps,
280
300
  labelTooltip: labelTooltip,
281
301
  prepend: prepend,
282
- ref: ref,
302
+ ref: utils.mergeRefs(ref, dateFieldRef),
283
303
  style: style,
284
- variant: variant != null ? variant : state.validationState === 'invalid' ? validationVariant : undefined
285
- }, parentGroupProps), React.createElement("span", _extends({
286
- ref: dateFieldRef
287
- }, fieldProps, {
288
- style: {
289
- display: 'contents'
290
- }
291
- }), state.segments.map(function (segment, i) {
304
+ variant: variant != null ? variant : state.isInvalid ? validationVariant : undefined
305
+ }, fieldProps), state.segments.map(function (segment, i) {
292
306
  return React.createElement(FieldSegment, {
293
307
  segment: segment,
294
308
  state: state,
295
309
  key: i
296
310
  });
297
- }))));
311
+ })));
298
312
  };
299
313
 
300
314
  var _excluded$9 = ["children", "className", "style"];
@@ -400,9 +414,9 @@ var CalendarGrid = function CalendarGrid(_ref) {
400
414
  className: "eds-datepicker__calendar__grid"
401
415
  }), React.createElement("thead", _extends({}, headerProps), React.createElement("tr", null, showWeekNumbers && React.createElement("th", {
402
416
  className: "eds-datepicker__calendar__grid__weeknumber-header"
403
- }, weekNumberHeader), weekDaysMapped().map(function (day, index) {
417
+ }, weekNumberHeader), weekDaysMapped().map(function (day) {
404
418
  return React.createElement("th", {
405
- key: index
419
+ key: day
406
420
  }, day);
407
421
  }))), React.createElement("tbody", null, weeksArray.map(function (weekIndex) {
408
422
  var weekNumber = getWeekNumberForDate(state.getDatesInWeek(weekIndex)[0]);
@@ -413,7 +427,7 @@ var CalendarGrid = function CalendarGrid(_ref) {
413
427
  className: "eds-datepicker__calendar__grid__weeknumber"
414
428
  }, weekNumber), state.getDatesInWeek(weekIndex).map(function (date, i) {
415
429
  return date ? React.createElement(CalendarCell, {
416
- key: i,
430
+ key: date.month + "." + date.day,
417
431
  state: state,
418
432
  date: date,
419
433
  "aria-describedby": calendarGridId + 'description',
@@ -431,7 +445,7 @@ var CalendarGrid = function CalendarGrid(_ref) {
431
445
  };
432
446
 
433
447
  var _excluded$6 = ["locale"],
434
- _excluded2$3 = ["selectedDate", "onChange", "minDate", "maxDate", "showWeekNumbers", "weekNumberHeader", "style", "className", "navigationDescription", "onSelectedCellClick", "classNameForDate", "ariaLabelForDate", "calendarRef"];
448
+ _excluded2$3 = ["selectedDate", "onChange", "minDate", "maxDate", "showWeekNumbers", "weekNumberHeader", "forcedReturnType", "style", "className", "navigationDescription", "onSelectedCellClick", "classNameForDate", "ariaLabelForDate", "calendarRef"];
435
449
  var Calendar = function Calendar(_ref) {
436
450
  var localOverride = _ref.locale,
437
451
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
@@ -443,13 +457,14 @@ var Calendar = function Calendar(_ref) {
443
457
  };
444
458
  var CalendarBase = function CalendarBase(_ref2) {
445
459
  var selectedDate = _ref2.selectedDate,
446
- onChange = _ref2.onChange,
460
+ _onChange = _ref2.onChange,
447
461
  minDate = _ref2.minDate,
448
462
  maxDate = _ref2.maxDate,
449
463
  _ref2$showWeekNumbers = _ref2.showWeekNumbers,
450
464
  showWeekNumbers = _ref2$showWeekNumbers === void 0 ? false : _ref2$showWeekNumbers,
451
465
  _ref2$weekNumberHeade = _ref2.weekNumberHeader,
452
466
  weekNumberHeader = _ref2$weekNumberHeade === void 0 ? 'uke' : _ref2$weekNumberHeade,
467
+ forcedReturnType = _ref2.forcedReturnType,
453
468
  style = _ref2.style,
454
469
  className = _ref2.className,
455
470
  navigationDescription = _ref2.navigationDescription,
@@ -463,16 +478,23 @@ var CalendarBase = function CalendarBase(_ref2) {
463
478
  rest = _objectWithoutPropertiesLoose(_ref2, _excluded2$3);
464
479
  var _useLocale2 = i18n.useLocale(),
465
480
  locale = _useLocale2.locale;
466
- var allProps = _extends({}, rest, {
481
+ var _props = _extends({}, rest, {
467
482
  value: selectedDate,
468
- onChange: onChange,
483
+ onChange: function onChange(value) {
484
+ return handleOnChange({
485
+ value: value,
486
+ selectedDate: selectedDate,
487
+ forcedReturnType: forcedReturnType,
488
+ onChange: _onChange
489
+ });
490
+ },
469
491
  locale: locale,
470
492
  createCalendar: createCalendar,
471
493
  minValue: minDate,
472
494
  maxValue: maxDate
473
495
  });
474
- var state = calendar$1.useCalendarState(allProps);
475
- var _useCalendar = calendar.useCalendar(allProps, state),
496
+ var state = calendar$1.useCalendarState(_props);
497
+ var _useCalendar = calendar.useCalendar(_props, state),
476
498
  calendarProps = _useCalendar.calendarProps,
477
499
  prevButtonProps = _useCalendar.prevButtonProps,
478
500
  nextButtonProps = _useCalendar.nextButtonProps,
@@ -491,7 +513,7 @@ var CalendarBase = function CalendarBase(_ref2) {
491
513
  "aria-label": ariaLabelIfNorwegian('Neste måned', locale, nextButtonProps)
492
514
  }), React.createElement(icons.RightArrowIcon, {
493
515
  size: 20
494
- }))), React.createElement(CalendarGrid, {
516
+ }))), React.createElement(CalendarGrid, _extends({}, rest, {
495
517
  state: state,
496
518
  navigationDescription: navigationDescription,
497
519
  onSelectedCellClick: onSelectedCellClick,
@@ -499,13 +521,12 @@ var CalendarBase = function CalendarBase(_ref2) {
499
521
  ariaLabelForDate: ariaLabelForDate,
500
522
  showWeekNumbers: showWeekNumbers,
501
523
  weekNumberHeader: weekNumberHeader
502
- }));
524
+ })));
503
525
  };
504
526
 
505
- var _excluded$5 = ["selectedDate", "onChange", "locale", "disabled", "showTime", "showTimeZone", "classNameForDate", "className", "style", "variant", "feedback", "validationVariant", "validationFeedback", "showWeekNumbers", "weekNumberHeader", "disableModal", "labelTooltip", "navigationDescription", "minDate", "maxDate", "modalTreshold", "forcedReturnType", "ariaLabelForDate", "append", "prepend"];
527
+ var _excluded$5 = ["selectedDate", "locale", "disabled", "showTime", "showTimeZone", "classNameForDate", "className", "variant", "feedback", "validationVariant", "validationFeedback", "showWeekNumbers", "weekNumberHeader", "disableModal", "labelTooltip", "navigationDescription", "minDate", "maxDate", "modalTreshold", "forcedReturnType", "ariaLabelForDate", "append", "prepend", "granularity"];
506
528
  var DatePicker = function DatePicker(_ref) {
507
529
  var selectedDate = _ref.selectedDate,
508
- onChange = _ref.onChange,
509
530
  locale = _ref.locale,
510
531
  disabled = _ref.disabled,
511
532
  showTime = _ref.showTime,
@@ -513,7 +534,6 @@ var DatePicker = function DatePicker(_ref) {
513
534
  showTimeZone = _ref$showTimeZone === void 0 ? false : _ref$showTimeZone,
514
535
  classNameForDate = _ref.classNameForDate,
515
536
  className = _ref.className,
516
- style = _ref.style,
517
537
  variant = _ref.variant,
518
538
  feedback = _ref.feedback,
519
539
  validationVariant = _ref.validationVariant,
@@ -528,36 +548,27 @@ var DatePicker = function DatePicker(_ref) {
528
548
  maxDate = _ref.maxDate,
529
549
  _ref$modalTreshold = _ref.modalTreshold,
530
550
  modalTreshold = _ref$modalTreshold === void 0 ? 1000 : _ref$modalTreshold,
531
- forcedReturnType = _ref.forcedReturnType,
532
551
  ariaLabelForDate = _ref.ariaLabelForDate,
533
552
  append = _ref.append,
534
553
  prepend = _ref.prepend,
554
+ _ref$granularity = _ref.granularity,
555
+ granularity = _ref$granularity === void 0 ? showTime ? 'minute' : 'day' : _ref$granularity,
535
556
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
536
557
  var CALENDAR_MODAL_MAX_SCREEN_WIDTH = modalTreshold;
537
558
  var datePickerRef = React.useRef(null);
538
559
  var calendarRef = React.useRef(null);
539
560
  var _useWindowDimensions = utils.useWindowDimensions(),
540
561
  width = _useWindowDimensions.width;
541
- var handleOnChange = function handleOnChange(value) {
542
- if (forcedReturnType !== undefined) {
543
- return onChange(convertValueToType({
544
- value: value,
545
- type: forcedReturnType,
546
- timezone: value !== null && 'timezone' in value ? value.timezone : undefined
547
- }));
548
- }
549
- onChange(value);
550
- };
551
- var state = datepicker$1.useDatePickerState(_extends({}, rest, {
562
+ var _props = _extends({}, rest, {
552
563
  minValue: minDate,
553
564
  // this weird logic makes sure the entire day is included if no time is provided in maxDate
554
565
  maxValue: 'hour' in (maxDate != null ? maxDate : {}) ? maxDate : maxDate !== undefined ? lastMillisecondOfDay(maxDate) : undefined,
555
566
  value: selectedDate,
556
- onChange: handleOnChange,
557
- granularity: showTime ? 'minute' : rest.granularity,
567
+ granularity: granularity,
558
568
  isDisabled: disabled
559
- }));
560
- var _useDatePicker = datepicker.useDatePicker(_extends({}, rest), state, datePickerRef),
569
+ });
570
+ var state = datepicker$1.useDatePickerState(_props);
571
+ var _useDatePicker = datepicker.useDatePicker(_props, state, datePickerRef),
561
572
  groupProps = _useDatePicker.groupProps,
562
573
  labelProps = _useDatePicker.labelProps,
563
574
  fieldProps = _useDatePicker.fieldProps,
@@ -586,13 +597,13 @@ var DatePicker = function DatePicker(_ref) {
586
597
  state.setOpen(false);
587
598
  });
588
599
  var calendarSharedProps = _extends({}, dialogProps, calendarProps, {
600
+ onChange: rest.onChange,
589
601
  disabled: disabled,
590
602
  navigationDescription: navigationDescription,
591
603
  onSelectedCellClick: function onSelectedCellClick() {
592
604
  return state.setOpen(false);
593
605
  },
594
606
  selectedDate: selectedDate,
595
- onChange: handleOnChange,
596
607
  minDate: minDate,
597
608
  maxDate: maxDate,
598
609
  calendarRef: calendarRef,
@@ -601,14 +612,14 @@ var DatePicker = function DatePicker(_ref) {
601
612
  showWeekNumbers: showWeekNumbers,
602
613
  weekNumberHeader: weekNumberHeader
603
614
  });
604
- var useModal = typeof width !== 'undefined' && width <= CALENDAR_MODAL_MAX_SCREEN_WIDTH && !disableModal;
615
+ var isModal = typeof width !== 'undefined' && width <= CALENDAR_MODAL_MAX_SCREEN_WIDTH && !disableModal;
605
616
  var popoverCalendar = React.createElement("div", {
606
617
  style: _extends({}, floatingStyles, {
607
618
  zIndex: tokens.zIndexes.popover
608
619
  }),
609
620
  ref: refs.setFloating
610
621
  }, React.createElement(FocusLock, {
611
- disabled: !state.isOpen || useModal,
622
+ disabled: !state.isOpen || isModal,
612
623
  returnFocus: true
613
624
  }, state.isOpen && React.createElement(Calendar, _extends({}, calendarSharedProps))));
614
625
  var modalCalendar = React.createElement(modal.Modal, {
@@ -627,7 +638,7 @@ var DatePicker = function DatePicker(_ref) {
627
638
  locale: locale
628
639
  }, child);
629
640
  }
630
- }, React.createElement(DateField, {
641
+ }, React.createElement(DateField, _extends({}, groupProps, fieldProps, rest, {
631
642
  append: !disabled && React.createElement("div", {
632
643
  style: {
633
644
  display: 'flex',
@@ -646,14 +657,10 @@ var DatePicker = function DatePicker(_ref) {
646
657
  }),
647
658
  disabled: disabled,
648
659
  feedback: feedback,
649
- fieldProps: fieldProps,
650
- groupProps: groupProps,
651
- label: rest.label,
652
660
  labelProps: labelProps,
653
661
  labelTooltip: labelTooltip,
654
662
  maxDate: maxDate,
655
663
  minDate: minDate,
656
- onChange: handleOnChange,
657
664
  dateFieldRef: function dateFieldRef(node) {
658
665
  refs.setReference(node);
659
666
  datePickerRef.current = node;
@@ -661,11 +668,10 @@ var DatePicker = function DatePicker(_ref) {
661
668
  selectedDate: selectedDate,
662
669
  showTime: showTime,
663
670
  showTimeZone: showTimeZone,
664
- style: style,
665
671
  validationFeedback: validationFeedback,
666
672
  validationVariant: validationVariant,
667
673
  variant: variant
668
- }), useModal ? modalCalendar : popoverCalendar);
674
+ })), isModal ? modalCalendar : popoverCalendar);
669
675
  };
670
676
 
671
677
  var _excluded$4 = ["className", "style", "label", "onChange", "feedback", "variant", "disableLabelAnimation", "prepend"],
@@ -794,10 +800,10 @@ var TimePicker = function TimePicker(_ref) {
794
800
  var timePickerId = utils.useRandomId('eds-timepicker');
795
801
  var timeZone = forcedTimeZone != null ? forcedTimeZone : selectedTime !== null && 'timezone' in selectedTime ? selectedTime.timezone : 'Europe/Oslo';
796
802
  var handleOnChange = function handleOnChange(value) {
797
- if (forcedReturnType !== undefined) {
803
+ if (forcedReturnType !== undefined || !selectedTime) {
798
804
  return onChange(convertValueToType({
799
805
  value: value,
800
- type: forcedReturnType,
806
+ type: forcedReturnType != null ? forcedReturnType : 'ZonedDateTime',
801
807
  timezone: timeZone
802
808
  }));
803
809
  }
@@ -1201,6 +1207,7 @@ exports.convertValueToType = convertValueToType;
1201
1207
  exports.createCalendar = createCalendar;
1202
1208
  exports.focusSegment = focusSegment;
1203
1209
  exports.getWeekNumberForDate = getWeekNumberForDate;
1210
+ exports.handleOnChange = handleOnChange;
1204
1211
  exports.lastMillisecondOfDay = lastMillisecondOfDay;
1205
1212
  exports.modulo = modulo;
1206
1213
  exports.nativeDateToDateValue = nativeDateToDateValue;