@entur/datepicker 9.4.11 → 10.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { useRandomId, ConditionalWrapper, mergeRefs, useWindowDimensions, useOnClickOutside, useOnEscape, useOnMount, warnAboutMissingStyles } from '@entur/utils';
1
+ import { useRandomId, ConditionalWrapper, useWindowDimensions, useOnClickOutside, useOnEscape, useOnMount, mergeRefs, warnAboutMissingStyles } from '@entur/utils';
2
2
  import React, { useRef, useState, useEffect } from 'react';
3
3
  import { useDateFieldState, useDatePickerState, useTimeFieldState } from '@react-stately/datepicker';
4
4
  import { useDateSegment, useDateField, useDatePicker, useTimeField } from '@react-aria/datepicker';
@@ -15,7 +15,7 @@ import { IconButton } from '@entur/button';
15
15
  import { VisuallyHidden } from '@entur/a11y';
16
16
  import { useFloating, autoUpdate, offset, flip, shift } from '@floating-ui/react-dom';
17
17
  import FocusLock from 'react-focus-lock';
18
- import { space, zIndexes, timings } from '@entur/tokens';
18
+ import { space, zIndexes } from '@entur/tokens';
19
19
  import { Modal } from '@entur/modal';
20
20
 
21
21
  function _extends() {
@@ -211,8 +211,8 @@ function getWeekNumberForDate(date) {
211
211
  return weekNumber;
212
212
  }
213
213
 
214
- var _excluded$a = ["selectedDate", "onChange", "label", "locale", "showTimeZone", "showTime", "granularity", "disabled", "isDisabled", "variant", "feedback", "validationVariant", "validationFeedback", "labelTooltip", "minDate", "maxDate", "style", "className", "labelProps", "append"];
215
- var DateField = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
214
+ 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"];
215
+ var DateField = function DateField(_ref) {
216
216
  var selectedDate = _ref.selectedDate,
217
217
  onChange = _ref.onChange,
218
218
  label = _ref.label,
@@ -235,7 +235,11 @@ var DateField = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
235
235
  style = _ref.style,
236
236
  className = _ref.className,
237
237
  parentLabelProps = _ref.labelProps,
238
+ parentFieldProps = _ref.fieldProps,
239
+ parentGroupProps = _ref.groupProps,
238
240
  append = _ref.append,
241
+ prepend = _ref.prepend,
242
+ ref = _ref.dateFieldRef,
239
243
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$a);
240
244
  var _useLocale = useLocale(),
241
245
  locale = _useLocale.locale;
@@ -243,6 +247,7 @@ var DateField = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
243
247
  locale: customLocale != null ? customLocale : locale,
244
248
  createCalendar: createCalendar,
245
249
  value: selectedDate,
250
+ //@ts-expect-error incorrect type in package
246
251
  onChange: onChange,
247
252
  hideTimeZone: !showTimeZone,
248
253
  granularity: showTime ? 'minute' : granularity,
@@ -253,7 +258,7 @@ var DateField = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
253
258
  shouldForceLeadingZeros: true
254
259
  }));
255
260
  var dateFieldRef = useRef(null);
256
- var _useDateField = useDateField(_extends({}, rest, {
261
+ var _useDateField = useDateField(_extends({}, parentFieldProps, rest, {
257
262
  label: label
258
263
  }), state, dateFieldRef),
259
264
  labelProps = _useDateField.labelProps,
@@ -267,28 +272,36 @@ var DateField = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
267
272
  }, child);
268
273
  }
269
274
  }, React.createElement(BaseFormControl, _extends({
270
- style: style,
271
- className: classNames('eds-datefield', className),
272
- labelId: id,
273
- ref: mergeRefs(dateFieldRef, ref),
275
+ append: append,
276
+ ariaAlertOnFeedback: true,
277
+ className: classNames('eds-datefield', className, {
278
+ 'eds-datefield--has-tooltip': labelTooltip !== undefined
279
+ }),
274
280
  disabled: isDisabled || disabled,
275
281
  disableLabelAnimation: true,
282
+ feedback: feedback != null ? feedback : state.validationState === 'invalid' ? validationFeedback : undefined,
276
283
  label: label,
284
+ labelId: id,
285
+ labelProps: parentLabelProps != null ? parentLabelProps : labelProps,
277
286
  labelTooltip: labelTooltip,
278
- labelProps: parentLabelProps != null ? parentLabelProps : labelProps
287
+ prepend: prepend,
288
+ ref: ref,
289
+ style: style,
290
+ variant: variant != null ? variant : state.validationState === 'invalid' ? validationVariant : undefined
291
+ }, parentGroupProps), React.createElement("span", _extends({
292
+ ref: dateFieldRef
279
293
  }, fieldProps, {
280
- variant: variant != null ? variant : state.validationState === 'invalid' ? validationVariant : undefined,
281
- feedback: feedback != null ? feedback : state.validationState === 'invalid' ? validationFeedback : undefined,
282
- append: append,
283
- ariaAlertOnFeedback: true
294
+ style: {
295
+ display: 'contents'
296
+ }
284
297
  }), state.segments.map(function (segment, i) {
285
298
  return React.createElement(FieldSegment, {
286
299
  segment: segment,
287
300
  state: state,
288
301
  key: i
289
302
  });
290
- })));
291
- });
303
+ }))));
304
+ };
292
305
 
293
306
  var _excluded$9 = ["children", "className", "style"];
294
307
  var CalendarButton = function CalendarButton(_ref) {
@@ -495,7 +508,7 @@ var CalendarBase = function CalendarBase(_ref2) {
495
508
  }));
496
509
  };
497
510
 
498
- 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"];
511
+ 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"];
499
512
  var DatePicker = function DatePicker(_ref) {
500
513
  var selectedDate = _ref.selectedDate,
501
514
  onChange = _ref.onChange,
@@ -506,6 +519,7 @@ var DatePicker = function DatePicker(_ref) {
506
519
  showTimeZone = _ref$showTimeZone === void 0 ? false : _ref$showTimeZone,
507
520
  classNameForDate = _ref.classNameForDate,
508
521
  className = _ref.className,
522
+ style = _ref.style,
509
523
  variant = _ref.variant,
510
524
  feedback = _ref.feedback,
511
525
  validationVariant = _ref.validationVariant,
@@ -522,14 +536,12 @@ var DatePicker = function DatePicker(_ref) {
522
536
  modalTreshold = _ref$modalTreshold === void 0 ? 1000 : _ref$modalTreshold,
523
537
  forcedReturnType = _ref.forcedReturnType,
524
538
  ariaLabelForDate = _ref.ariaLabelForDate,
539
+ append = _ref.append,
540
+ prepend = _ref.prepend,
525
541
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
526
542
  var CALENDAR_MODAL_MAX_SCREEN_WIDTH = modalTreshold;
527
543
  var datePickerRef = useRef(null);
528
544
  var calendarRef = useRef(null);
529
- var dateFieldRef = useRef(null);
530
- var _useState = useState(false),
531
- showAnimations = _useState[0],
532
- setShowAnimations = _useState[1];
533
545
  var _useWindowDimensions = useWindowDimensions(),
534
546
  width = _useWindowDimensions.width;
535
547
  var handleOnChange = function handleOnChange(value) {
@@ -566,14 +578,12 @@ var DatePicker = function DatePicker(_ref) {
566
578
  });
567
579
  },
568
580
  placement: 'bottom-start',
569
- middleware: [offset(space.extraSmall), flip(), shift({
581
+ middleware: [offset(space.extraSmall2), flip(), shift({
570
582
  padding: space.extraSmall
571
583
  })]
572
584
  }),
573
- x = _useFloating.x,
574
- y = _useFloating.y,
575
585
  refs = _useFloating.refs,
576
- strategy = _useFloating.strategy,
586
+ floatingStyles = _useFloating.floatingStyles,
577
587
  update = _useFloating.update;
578
588
  useOnClickOutside([calendarRef], function () {
579
589
  state.setOpen(false);
@@ -597,26 +607,12 @@ var DatePicker = function DatePicker(_ref) {
597
607
  showWeekNumbers: showWeekNumbers,
598
608
  weekNumberHeader: weekNumberHeader
599
609
  });
600
- // Initial position for popover is (0,0) before being moved to calculated position.
601
- // To avoid animating this move we delay turning on animation by a few ms.
602
- useEffect(function () {
603
- setTimeout(function () {
604
- return setShowAnimations(state.isOpen);
605
- }, 10);
606
- }, [state.isOpen]);
607
610
  var useModal = typeof width !== 'undefined' && width <= CALENDAR_MODAL_MAX_SCREEN_WIDTH && !disableModal;
608
611
  var popoverCalendar = React.createElement("div", {
609
- // styling for floating-UI popover
610
- style: {
611
- position: strategy,
612
- top: y,
613
- left: x,
614
- zIndex: zIndexes.popover,
615
- transition: showAnimations ? "top " + timings.medium + " ease-in-out" : 'unset'
616
- },
617
- ref: function ref(node) {
618
- refs.setFloating(node);
619
- }
612
+ style: _extends({}, floatingStyles, {
613
+ zIndex: zIndexes.popover
614
+ }),
615
+ ref: refs.setFloating
620
616
  }, React.createElement(FocusLock, {
621
617
  disabled: !state.isOpen || useModal,
622
618
  returnFocus: true
@@ -637,41 +633,45 @@ var DatePicker = function DatePicker(_ref) {
637
633
  locale: locale
638
634
  }, child);
639
635
  }
640
- }, React.createElement("div", {
641
- className: classNames('eds-datepicker', className)
642
- }, React.createElement("div", _extends({}, groupProps, {
643
- ref: function ref(node) {
644
- datePickerRef.current = node;
645
- refs.setReference(node);
646
- },
647
- id: undefined,
648
- className: "eds-datepicker__datefield__wrapper"
649
- }), React.createElement(DateField, _extends({}, fieldProps, {
650
- selectedDate: selectedDate,
651
- onChange: handleOnChange,
636
+ }, React.createElement(DateField, {
637
+ append: !disabled && React.createElement("div", {
638
+ style: {
639
+ display: 'flex',
640
+ alignItems: 'center'
641
+ }
642
+ }, append, React.createElement(CalendarButton, _extends({}, buttonProps, {
643
+ onPress: function onPress() {
644
+ state.setOpen(!state.isOpen);
645
+ update();
646
+ },
647
+ className: "eds-datepicker__open-calendar-button"
648
+ }), React.createElement(CalendarIcon, null))),
649
+ prepend: prepend,
650
+ className: classNames('eds-datepicker', className, {
651
+ 'eds-datepicker--disabled': disabled
652
+ }),
653
+ disabled: disabled,
654
+ feedback: feedback,
655
+ fieldProps: fieldProps,
656
+ groupProps: groupProps,
652
657
  label: rest.label,
653
658
  labelProps: labelProps,
654
- disabled: disabled,
655
- minDate: minDate,
659
+ labelTooltip: labelTooltip,
656
660
  maxDate: maxDate,
661
+ minDate: minDate,
662
+ onChange: handleOnChange,
663
+ dateFieldRef: function dateFieldRef(node) {
664
+ refs.setReference(node);
665
+ datePickerRef.current = node;
666
+ },
667
+ selectedDate: selectedDate,
657
668
  showTime: showTime,
658
669
  showTimeZone: showTimeZone,
659
- ref: dateFieldRef,
660
- variant: variant,
661
- feedback: feedback,
662
- validationVariant: validationVariant,
670
+ style: style,
663
671
  validationFeedback: validationFeedback,
664
- labelTooltip: labelTooltip,
665
- className: classNames('eds-datepicker__datefield', {
666
- 'eds-datepicker__datefield--disabled': disabled
667
- })
668
- })), !disabled && React.createElement(CalendarButton, _extends({}, buttonProps, {
669
- onPress: function onPress() {
670
- state.setOpen(!state.isOpen);
671
- update();
672
- },
673
- className: "eds-datepicker__open-calendar-button"
674
- }), React.createElement(CalendarIcon, null)), useModal ? modalCalendar : popoverCalendar)));
672
+ validationVariant: validationVariant,
673
+ variant: variant
674
+ }), useModal ? modalCalendar : popoverCalendar);
675
675
  };
676
676
 
677
677
  var _excluded$4 = ["className", "style", "label", "onChange", "feedback", "variant", "disableLabelAnimation", "prepend"],
@@ -766,7 +766,7 @@ var TimePickerArrowButton = function TimePickerArrowButton(_ref) {
766
766
  }, rest), direction === 'left' ? React.createElement(LeftArrowIcon, null) : React.createElement(RightArrowIcon, null));
767
767
  };
768
768
 
769
- var _excluded$2 = ["selectedTime", "onChange", "disabled", "className", "style", "label", "labelTooltip", "feedback", "granularity", "variant", "locale", "showTimeZone", "showSeconds", "minuteIncrementForArrowButtons", "leftArrowButtonAriaLabel", "rightArrowButtonAriaLabel", "inputRef", "forcedReturnType", "forcedTimeZone"];
769
+ var _excluded$2 = ["selectedTime", "onChange", "disabled", "className", "style", "label", "labelTooltip", "feedback", "granularity", "variant", "locale", "showTimeZone", "showSeconds", "minuteIncrementForArrowButtons", "leftArrowButtonAriaLabel", "rightArrowButtonAriaLabel", "inputRef", "forcedReturnType", "forcedTimeZone", "append", "prepend"];
770
770
  var TimePicker = function TimePicker(_ref) {
771
771
  var selectedTime = _ref.selectedTime,
772
772
  onChange = _ref.onChange,
@@ -791,6 +791,8 @@ var TimePicker = function TimePicker(_ref) {
791
791
  inputRef = _ref.inputRef,
792
792
  forcedReturnType = _ref.forcedReturnType,
793
793
  forcedTimeZone = _ref.forcedTimeZone,
794
+ append = _ref.append,
795
+ prepend = _ref.prepend,
794
796
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$2);
795
797
  var _useLocale = useLocale(),
796
798
  locale = _useLocale.locale;
@@ -846,28 +848,44 @@ var TimePicker = function TimePicker(_ref) {
846
848
  };
847
849
  return React.createElement(I18nProvider, {
848
850
  locale: locale
849
- }, React.createElement("div", {
850
- className: classNames(className, 'eds-timepicker__wrapper')
851
- }, React.createElement(BaseFormControl, _extends({
852
- style: style,
853
- className: classNames('eds-timepicker', {
854
- 'eds-timepicker--disabled': disabled
851
+ }, React.createElement(BaseFormControl, {
852
+ append: React.createElement("div", {
853
+ style: {
854
+ display: 'flex',
855
+ alignItems: 'center'
856
+ }
857
+ }, append, React.createElement(TimePickerArrowButton, {
858
+ direction: "right",
859
+ disabled: disabled,
860
+ "aria-label": rightArrowButtonAriaLabel,
861
+ onClick: function onClick() {
862
+ return handleOnClickArrowButton('add');
863
+ },
864
+ onFocus: function onFocus() {
865
+ return focusSegment(timeFieldRef, 'last');
866
+ }
867
+ })),
868
+ ariaAlertOnFeedback: true,
869
+ "aria-describedby": timePickerId + 'description',
870
+ className: classNames('eds-timepicker', className, {
871
+ 'eds-timepicker--disabled': disabled,
872
+ 'eds-timepicker--has-tooltip': labelTooltip !== undefined
855
873
  }),
856
- labelId: id,
874
+ disabled: disabled,
875
+ disableLabelAnimation: true,
876
+ feedback: feedback,
857
877
  label: label,
878
+ labelId: id,
858
879
  labelProps: _extends({}, labelProps, {
859
880
  'aria-describedby': timePickerId + 'description'
860
881
  }),
861
- ref: mergeRefs(timeFieldRef, inputRef),
862
- disabled: disabled,
863
- disableLabelAnimation: true,
864
- labelTooltip: labelTooltip
865
- }, fieldProps, {
866
- variant: variant,
867
- feedback: feedback,
868
- ariaAlertOnFeedback: true,
869
- "aria-describedby": timePickerId + 'description',
870
- prepend: React.createElement(TimePickerArrowButton, {
882
+ labelTooltip: labelTooltip,
883
+ prepend: React.createElement("div", {
884
+ style: {
885
+ display: 'flex',
886
+ alignItems: 'center'
887
+ }
888
+ }, React.createElement(TimePickerArrowButton, {
871
889
  direction: "left",
872
890
  disabled: disabled,
873
891
  "aria-label": leftArrowButtonAriaLabel,
@@ -877,18 +895,16 @@ var TimePicker = function TimePicker(_ref) {
877
895
  onFocus: function onFocus() {
878
896
  return focusSegment(timeFieldRef, 'first');
879
897
  }
880
- }),
881
- append: React.createElement(TimePickerArrowButton, {
882
- direction: "right",
883
- disabled: disabled,
884
- "aria-label": rightArrowButtonAriaLabel,
885
- onClick: function onClick() {
886
- return handleOnClickArrowButton('add');
887
- },
888
- onFocus: function onFocus() {
889
- return focusSegment(timeFieldRef, 'last');
890
- }
891
- })
898
+ }), prepend),
899
+ ref: inputRef,
900
+ style: style,
901
+ variant: variant
902
+ }, React.createElement("span", _extends({
903
+ ref: timeFieldRef
904
+ }, fieldProps, {
905
+ style: {
906
+ display: 'contents'
907
+ }
892
908
  }), state.segments.map(function (segment, i) {
893
909
  return React.createElement(FieldSegment, {
894
910
  segment: segment,
@@ -1113,12 +1129,14 @@ var SimpleTimePicker = function SimpleTimePicker(_ref) {
1113
1129
  onClick: function onClick() {
1114
1130
  var _timeFieldRef$current;
1115
1131
  return timeFieldRef == null ? void 0 : (_timeFieldRef$current = timeFieldRef.current) == null ? void 0 : _timeFieldRef$current.focus();
1116
- }
1132
+ },
1133
+ inline: true
1117
1134
  }) : undefined),
1118
1135
  className: classNames('eds-simple-timepicker', {
1119
1136
  'eds-simple-timepicker--padding-large': padding === 'large',
1120
1137
  'eds-simple-timepicker--show-seconds': showSeconds,
1121
- 'eds-simple-timepicker--hide-clock': !showClockIcon
1138
+ 'eds-simple-timepicker--hide-clock': !showClockIcon,
1139
+ 'eds-simple-timepicker--has-tooltip': labelTooltip !== undefined
1122
1140
  }),
1123
1141
  disabled: disabled,
1124
1142
  disableLabelAnimation: true,