@entur/datepicker 9.1.6 → 9.2.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,11 +1,13 @@
1
1
  import React from 'react';
2
- import { DateValue } from '@internationalized/date';
2
+ import { CalendarDate, DateValue } from '@internationalized/date';
3
3
  import './Calendar.scss';
4
- type CalendarProps = {
4
+ export type CalendarProps = {
5
5
  selectedDate: DateValue | null;
6
6
  onChange: (SelectedDate: DateValue | null) => void;
7
7
  navigationDescription?: string;
8
8
  style?: React.CSSProperties;
9
+ /** Ekstra klassenavn */
10
+ className?: string;
9
11
  onSelectedCellClick?: () => void;
10
12
  /** Tidligste gyldige datovalg.
11
13
  * Eks: today(getLocalTimeZone()) == i dag i lokal tidssone.
@@ -21,7 +23,21 @@ type CalendarProps = {
21
23
  * Gyldig til og med den tiden som legges inn som maxDate.
22
24
  * Dato uten tid vil være gyldig hele maxDate-dagen */
23
25
  maxDate?: DateValue;
26
+ /** Brukes for å legge til klassenavn på spesifikke datoer i kalenderen.
27
+ * Tar inn en dato og skal returnere klassenavnet som skal legges til den datoen.
28
+ * @default undefined
29
+ * @example (date) => isWeekend(date, 'no-NO') ? 'weekend' : ''
30
+ *
31
+ * OBS: hvis stylingen er meningsbærende bør du bruke ariaLabelForDate i tillegg for å beskrive
32
+ * meningen til skjermlesere o.l.
33
+ */
34
+ classNameForDate?: (date: CalendarDate) => string;
35
+ /** Legger til teksten som returneres på datoen i kalenderen sin aria-label.
36
+ * Bør brukes sammen med classNameForDate hvis styling-endringene gjort der er meningsbærende.
37
+ * @default undefined
38
+ * @example (date) => isWeekend(date, 'no-NO') ? 'helgedag' : ''
39
+ */
40
+ ariaLabelForDate?: (date: CalendarDate) => string;
24
41
  [key: string]: any;
25
42
  };
26
43
  export declare const Calendar: React.ForwardRefExoticComponent<Omit<CalendarProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
27
- export {};
@@ -5,6 +5,8 @@ type CalendarCellProps = {
5
5
  state: CalendarState;
6
6
  date: CalendarDate;
7
7
  onSelectedCellClick?: () => void;
8
+ classNameForDate?: (date: CalendarDate) => string;
9
+ ariaLabelForDate?: (date: CalendarDate) => string;
8
10
  };
9
- export declare const CalendarCell: ({ state, date, onSelectedCellClick, ...rest }: CalendarCellProps) => React.JSX.Element;
11
+ export declare const CalendarCell: ({ state, date, onSelectedCellClick, classNameForDate, ariaLabelForDate, ...rest }: CalendarCellProps) => React.JSX.Element;
10
12
  export {};
@@ -1,9 +1,12 @@
1
1
  import React from 'react';
2
2
  import { CalendarState } from '@react-stately/calendar';
3
+ import { CalendarDate } from '@internationalized/date';
3
4
  type CalendarGridProps = {
4
5
  state: CalendarState;
5
6
  navigationDescription?: string;
6
7
  onSelectedCellClick?: () => void;
8
+ classNameForDate?: (date: CalendarDate) => string;
9
+ ariaLabelForDate?: (date: CalendarDate) => string;
7
10
  };
8
- export declare const CalendarGrid: ({ state, navigationDescription, onSelectedCellClick, ...rest }: CalendarGridProps) => React.JSX.Element;
11
+ export declare const CalendarGrid: ({ state, navigationDescription, onSelectedCellClick, classNameForDate, ariaLabelForDate, ...rest }: CalendarGridProps) => React.JSX.Element;
9
12
  export {};
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
- import type { DateValue, AriaDatePickerProps, MappedDateValue } from '@react-types/datepicker';
2
+ import { CalendarDate, DateValue } from '@internationalized/date';
3
+ import type { AriaDatePickerProps, MappedDateValue } from '@react-types/datepicker';
3
4
  import type { VariantType } from '@entur/form';
4
5
  import './DatePicker.scss';
5
6
  export type DatePickerProps<DateType extends DateValue> = {
@@ -74,8 +75,23 @@ export type DatePickerProps<DateType extends DateValue> = {
74
75
  * @default undefined
75
76
  */
76
77
  forcedReturnType?: 'CalendarDate' | 'CalendarDateTime' | 'ZonedDateTime';
78
+ /** Brukes for å legge til klassenavn på spesifikke datoer i kalenderen.
79
+ * Tar inn en dato og skal returnere klassenavnet som skal legges til den datoen.
80
+ * @default undefined
81
+ * @example (date) => isWeekend(date, 'no-NO') ? 'weekend' : ''
82
+ *
83
+ * OBS: hvis stylingen er meningsbærende bør du bruke ariaLabelForDate i tillegg for å beskrive
84
+ * meningen til skjermlesere o.l.
85
+ */
86
+ classNameForDate?: (date: CalendarDate) => string;
87
+ /** Legger til teksten som returneres på datoen i kalenderen sin aria-label.
88
+ * Bør brukes sammen med classNameForDate hvis styling-endringene gjort der er meningsbærende.
89
+ * @default undefined
90
+ * @example (date) => isWeekend(date, 'no-NO') ? 'helgedag' : ''
91
+ */
92
+ ariaLabelForDate?: (date: CalendarDate) => string;
77
93
  /** Ekstra klassenavn */
78
94
  className?: string;
79
95
  style?: React.CSSProperties;
80
96
  } & Omit<AriaDatePickerProps<DateType>, 'value' | 'onChange' | 'label' | 'hideTimeZone' | 'placeholder' | 'minValue' | 'maxValue'>;
81
- export declare const DatePicker: <DateType extends DateValue>({ selectedDate, onChange, locale, disabled, showTime, showTimeZone, className, style, variant, feedback, validationVariant, validationFeedback, disableModal, labelTooltip, navigationDescription, minDate, maxDate, modalTreshold, forcedReturnType, ...rest }: DatePickerProps<DateType>) => React.JSX.Element;
97
+ export declare const DatePicker: <DateType extends DateValue>({ selectedDate, onChange, locale, disabled, showTime, showTimeZone, classNameForDate, className, style, variant, feedback, validationVariant, validationFeedback, disableModal, labelTooltip, navigationDescription, minDate, maxDate, modalTreshold, forcedReturnType, ariaLabelForDate, ...rest }: DatePickerProps<DateType>) => React.JSX.Element;
@@ -293,15 +293,17 @@ var CalendarButton = function CalendarButton(_ref) {
293
293
  }), children);
294
294
  };
295
295
 
296
- var _excluded$8 = ["state", "date", "onSelectedCellClick"];
296
+ var _excluded$8 = ["state", "date", "onSelectedCellClick", "classNameForDate", "ariaLabelForDate"];
297
297
  var CalendarCell = function CalendarCell(_ref) {
298
- var _state$timeZone;
298
+ var _ariaLabelForDate, _classNameForDate, _state$timeZone, _classNames;
299
299
  var state = _ref.state,
300
300
  date$1 = _ref.date,
301
301
  _ref$onSelectedCellCl = _ref.onSelectedCellClick,
302
302
  onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
303
303
  return;
304
304
  } : _ref$onSelectedCellCl,
305
+ classNameForDate = _ref.classNameForDate,
306
+ ariaLabelForDate = _ref.ariaLabelForDate,
305
307
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$8);
306
308
  var cellRef = React.useRef(null);
307
309
  var _useCalendarCell = calendar.useCalendarCell({
@@ -314,17 +316,14 @@ var CalendarCell = function CalendarCell(_ref) {
314
316
  isDisabled = _useCalendarCell.isDisabled,
315
317
  isUnavailable = _useCalendarCell.isUnavailable,
316
318
  formattedDate = _useCalendarCell.formattedDate;
319
+ var ariaLabel = buttonProps['aria-label'] + " " + ((_ariaLabelForDate = ariaLabelForDate == null ? void 0 : ariaLabelForDate(date$1)) != null ? _ariaLabelForDate : '');
317
320
  return React.createElement("td", _extends({}, cellProps, {
318
321
  className: "eds-datepicker__calendar__grid__cell__td"
319
322
  }), React.createElement("div", _extends({}, buttonProps, {
323
+ "aria-label": ariaLabel,
320
324
  ref: cellRef,
321
325
  hidden: isOutsideVisibleRange,
322
- className: classNames('eds-datepicker__calendar__grid__cell', {
323
- 'eds-datepicker__calendar__grid__cell--selected': isSelected,
324
- 'eds-datepicker__calendar__grid__cell--disabled': isDisabled || isUnavailable,
325
- 'eds-datepicker__calendar__grid__cell--outside-month': isOutsideVisibleRange,
326
- 'eds-datepicker__calendar__grid__cell--today': date.isEqualDay(date$1, date.now((_state$timeZone = state.timeZone) != null ? _state$timeZone : date.getLocalTimeZone()))
327
- })
326
+ className: classNames('eds-datepicker__calendar__grid__cell', (_classNames = {}, _classNames[(_classNameForDate = classNameForDate == null ? void 0 : classNameForDate(date$1)) != null ? _classNameForDate : ''] = !isOutsideVisibleRange, _classNames['eds-datepicker__calendar__grid__cell--selected'] = isSelected, _classNames['eds-datepicker__calendar__grid__cell--disabled'] = isDisabled || isUnavailable, _classNames['eds-datepicker__calendar__grid__cell--outside-month'] = isOutsideVisibleRange, _classNames['eds-datepicker__calendar__grid__cell--today'] = date.isEqualDay(date$1, date.now((_state$timeZone = state.timeZone) != null ? _state$timeZone : date.getLocalTimeZone())), _classNames))
328
327
  }, rest, {
329
328
  onClick: function onClick(e) {
330
329
  buttonProps.onClick && buttonProps.onClick(e);
@@ -337,7 +336,7 @@ var CalendarCell = function CalendarCell(_ref) {
337
336
  }), formattedDate));
338
337
  };
339
338
 
340
- var _excluded$7 = ["state", "navigationDescription", "onSelectedCellClick"];
339
+ var _excluded$7 = ["state", "navigationDescription", "onSelectedCellClick", "classNameForDate", "ariaLabelForDate"];
341
340
  var CalendarGrid = function CalendarGrid(_ref) {
342
341
  var state = _ref.state,
343
342
  navigationDescription = _ref.navigationDescription,
@@ -345,6 +344,8 @@ var CalendarGrid = function CalendarGrid(_ref) {
345
344
  onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
346
345
  return;
347
346
  } : _ref$onSelectedCellCl,
347
+ classNameForDate = _ref.classNameForDate,
348
+ ariaLabelForDate = _ref.ariaLabelForDate,
348
349
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$7);
349
350
  var calendarGridId = utils.useRandomId('eds-calendar');
350
351
  var _useLocale = i18n.useLocale(),
@@ -386,7 +387,9 @@ var CalendarGrid = function CalendarGrid(_ref) {
386
387
  state: state,
387
388
  date: date,
388
389
  "aria-describedby": calendarGridId + 'description',
389
- onSelectedCellClick: onSelectedCellClick
390
+ onSelectedCellClick: onSelectedCellClick,
391
+ classNameForDate: classNameForDate,
392
+ ariaLabelForDate: ariaLabelForDate
390
393
  }) : React.createElement("td", {
391
394
  key: i
392
395
  });
@@ -396,7 +399,7 @@ var CalendarGrid = function CalendarGrid(_ref) {
396
399
  }, getNavigationDescription()));
397
400
  };
398
401
 
399
- var _excluded$6 = ["selectedDate", "onChange", "locale", "minDate", "maxDate", "style", "children", "navigationDescription", "onSelectedCellClick"];
402
+ var _excluded$6 = ["selectedDate", "onChange", "locale", "minDate", "maxDate", "style", "className", "children", "navigationDescription", "onSelectedCellClick", "classNameForDate", "ariaLabelForDate"];
400
403
  var Calendar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
401
404
  var selectedDate = _ref.selectedDate,
402
405
  onChange = _ref.onChange,
@@ -404,11 +407,14 @@ var Calendar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
404
407
  minDate = _ref.minDate,
405
408
  maxDate = _ref.maxDate,
406
409
  style = _ref.style,
410
+ className = _ref.className,
407
411
  navigationDescription = _ref.navigationDescription,
408
412
  _ref$onSelectedCellCl = _ref.onSelectedCellClick,
409
413
  onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
410
414
  return;
411
415
  } : _ref$onSelectedCellCl,
416
+ classNameForDate = _ref.classNameForDate,
417
+ ariaLabelForDate = _ref.ariaLabelForDate,
412
418
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
413
419
  var _useLocale = i18n.useLocale(),
414
420
  locale = _useLocale.locale;
@@ -435,7 +441,7 @@ var Calendar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
435
441
  }
436
442
  }, React.createElement("div", _extends({}, calendarProps, {
437
443
  ref: ref,
438
- className: "eds-datepicker__calendar",
444
+ className: classNames('eds-datepicker__calendar', className),
439
445
  style: style
440
446
  }), React.createElement("div", {
441
447
  className: "eds-datepicker__calendar__header"
@@ -450,11 +456,13 @@ var Calendar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
450
456
  }))), React.createElement(CalendarGrid, {
451
457
  state: state,
452
458
  navigationDescription: navigationDescription,
453
- onSelectedCellClick: onSelectedCellClick
459
+ onSelectedCellClick: onSelectedCellClick,
460
+ classNameForDate: classNameForDate,
461
+ ariaLabelForDate: ariaLabelForDate
454
462
  })));
455
463
  });
456
464
 
457
- var _excluded$5 = ["selectedDate", "onChange", "locale", "disabled", "showTime", "showTimeZone", "className", "style", "variant", "feedback", "validationVariant", "validationFeedback", "disableModal", "labelTooltip", "navigationDescription", "minDate", "maxDate", "modalTreshold", "forcedReturnType"];
465
+ var _excluded$5 = ["selectedDate", "onChange", "locale", "disabled", "showTime", "showTimeZone", "classNameForDate", "className", "style", "variant", "feedback", "validationVariant", "validationFeedback", "disableModal", "labelTooltip", "navigationDescription", "minDate", "maxDate", "modalTreshold", "forcedReturnType", "ariaLabelForDate"];
458
466
  var DatePicker = function DatePicker(_ref) {
459
467
  var selectedDate = _ref.selectedDate,
460
468
  onChange = _ref.onChange,
@@ -463,6 +471,7 @@ var DatePicker = function DatePicker(_ref) {
463
471
  showTime = _ref.showTime,
464
472
  _ref$showTimeZone = _ref.showTimeZone,
465
473
  showTimeZone = _ref$showTimeZone === void 0 ? false : _ref$showTimeZone,
474
+ classNameForDate = _ref.classNameForDate,
466
475
  className = _ref.className,
467
476
  variant = _ref.variant,
468
477
  feedback = _ref.feedback,
@@ -477,6 +486,7 @@ var DatePicker = function DatePicker(_ref) {
477
486
  _ref$modalTreshold = _ref.modalTreshold,
478
487
  modalTreshold = _ref$modalTreshold === void 0 ? 1000 : _ref$modalTreshold,
479
488
  forcedReturnType = _ref.forcedReturnType,
489
+ ariaLabelForDate = _ref.ariaLabelForDate,
480
490
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
481
491
  var CALENDAR_MODAL_MAX_SCREEN_WIDTH = modalTreshold;
482
492
  var datePickerRef = React.useRef(null);
@@ -539,7 +549,9 @@ var DatePicker = function DatePicker(_ref) {
539
549
  onChange: handleOnChange,
540
550
  minDate: minDate,
541
551
  maxDate: maxDate,
542
- ref: calendarRef
552
+ ref: calendarRef,
553
+ classNameForDate: classNameForDate,
554
+ ariaLabelForDate: ariaLabelForDate
543
555
  });
544
556
  var useModal = typeof width !== 'undefined' && width <= CALENDAR_MODAL_MAX_SCREEN_WIDTH && !disableModal;
545
557
  var popoverCalendar = React.createElement("div", {