@entur/datepicker 9.2.0-beta.0 → 9.3.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.
@@ -5,7 +5,7 @@ import { useDateSegment, useDateField, useDatePicker, useTimeField } from '@reac
5
5
  import { useLocale, I18nProvider } from '@react-aria/i18n';
6
6
  import classNames from 'classnames';
7
7
  import { BaseFormControl, useVariant, useInputGroupContext, isFilled, TextField } from '@entur/form';
8
- import { CalendarDate, Time, getLocalTimeZone, GregorianCalendar, toCalendarDateTime, toTime, now, toZoned, today, toCalendarDate, ZonedDateTime, parseAbsolute, CalendarDateTime, isEqualDay, getWeeksInMonth, parseTime } from '@internationalized/date';
8
+ import { CalendarDate, Time, getLocalTimeZone, GregorianCalendar, toCalendarDateTime, toTime, now, toZoned, today, toCalendarDate, startOfWeek, startOfYear, ZonedDateTime, parseAbsolute, CalendarDateTime, isEqualDay, getWeeksInMonth, parseTime } from '@internationalized/date';
9
9
  export { CalendarDate, CalendarDateTime, Time, ZonedDateTime } from '@internationalized/date';
10
10
  import { useCalendarCell, useCalendarGrid, useCalendar } from '@react-aria/calendar';
11
11
  import { useCalendarState } from '@react-stately/calendar';
@@ -194,6 +194,21 @@ var focusSegment = function focusSegment(ref, segment) {
194
194
  }
195
195
  }
196
196
  };
197
+ /** Based on code from https://stackoverflow.com/questions/6117814/get-week-of-year-in-javascript-like-in-php */
198
+ function getWeekNumberForDate(date) {
199
+ if (date === null) return -1;
200
+ var calendarDate = convertValueToType({
201
+ value: date,
202
+ type: 'CalendarDate'
203
+ });
204
+ var firstDayOfWeek = startOfWeek(calendarDate, 'no-NO');
205
+ var thursdayOfWeek = firstDayOfWeek.add({
206
+ days: 3
207
+ });
208
+ var firstDayOfYearForThursday = startOfYear(thursdayOfWeek);
209
+ var weekNumber = Math.ceil((thursdayOfWeek.compare(firstDayOfYearForThursday) + 1) / 7);
210
+ return weekNumber;
211
+ }
197
212
 
198
213
  var _excluded$a = ["selectedDate", "onChange", "label", "locale", "showTimeZone", "showTime", "granularity", "disabled", "isDisabled", "variant", "feedback", "validationVariant", "validationFeedback", "labelTooltip", "minDate", "maxDate", "style", "className", "labelProps", "append"];
199
214
  var DateField = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
@@ -290,15 +305,16 @@ var CalendarButton = function CalendarButton(_ref) {
290
305
  }), children);
291
306
  };
292
307
 
293
- var _excluded$8 = ["state", "date", "onSelectedCellClick", "classNameForDate", "ariaLabelForDate"];
308
+ var _excluded$8 = ["state", "date", "onSelectedCellClick", "weekNumberString", "classNameForDate", "ariaLabelForDate"];
294
309
  var CalendarCell = function CalendarCell(_ref) {
295
- var _ariaLabelForDate, _classNameForDate, _state$timeZone;
310
+ var _ariaLabelForDate, _classNameForDate, _state$timeZone, _classNames;
296
311
  var state = _ref.state,
297
312
  date = _ref.date,
298
313
  _ref$onSelectedCellCl = _ref.onSelectedCellClick,
299
314
  onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
300
315
  return;
301
316
  } : _ref$onSelectedCellCl,
317
+ weekNumberString = _ref.weekNumberString,
302
318
  classNameForDate = _ref.classNameForDate,
303
319
  ariaLabelForDate = _ref.ariaLabelForDate,
304
320
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$8);
@@ -313,19 +329,15 @@ var CalendarCell = function CalendarCell(_ref) {
313
329
  isDisabled = _useCalendarCell.isDisabled,
314
330
  isUnavailable = _useCalendarCell.isUnavailable,
315
331
  formattedDate = _useCalendarCell.formattedDate;
316
- var ariaLabel = buttonProps['aria-label'] + " " + ((_ariaLabelForDate = ariaLabelForDate == null ? void 0 : ariaLabelForDate(date)) != null ? _ariaLabelForDate : '');
332
+ var ariaLabel = "" + buttonProps['aria-label'] + weekNumberString + " " + ((_ariaLabelForDate = ariaLabelForDate == null ? void 0 : ariaLabelForDate(date)) != null ? _ariaLabelForDate : '');
317
333
  return React.createElement("td", _extends({}, cellProps, {
318
334
  className: "eds-datepicker__calendar__grid__cell__td"
319
335
  }), React.createElement("div", _extends({}, buttonProps, {
320
336
  "aria-label": ariaLabel,
337
+ "aria-hidden": isOutsideVisibleRange,
321
338
  ref: cellRef,
322
339
  hidden: isOutsideVisibleRange,
323
- className: classNames('eds-datepicker__calendar__grid__cell', [(_classNameForDate = classNameForDate == null ? void 0 : classNameForDate(date)) != null ? _classNameForDate : ''], {
324
- 'eds-datepicker__calendar__grid__cell--selected': isSelected,
325
- 'eds-datepicker__calendar__grid__cell--disabled': isDisabled || isUnavailable,
326
- 'eds-datepicker__calendar__grid__cell--outside-month': isOutsideVisibleRange,
327
- 'eds-datepicker__calendar__grid__cell--today': isEqualDay(date, now((_state$timeZone = state.timeZone) != null ? _state$timeZone : getLocalTimeZone()))
328
- })
340
+ className: classNames('eds-datepicker__calendar__grid__cell', (_classNames = {}, _classNames[(_classNameForDate = classNameForDate == null ? void 0 : classNameForDate(date)) != 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'] = isEqualDay(date, now((_state$timeZone = state.timeZone) != null ? _state$timeZone : getLocalTimeZone())), _classNames))
329
341
  }, rest, {
330
342
  onClick: function onClick(e) {
331
343
  buttonProps.onClick && buttonProps.onClick(e);
@@ -338,7 +350,7 @@ var CalendarCell = function CalendarCell(_ref) {
338
350
  }), formattedDate));
339
351
  };
340
352
 
341
- var _excluded$7 = ["state", "navigationDescription", "onSelectedCellClick", "classNameForDate", "ariaLabelForDate"];
353
+ var _excluded$7 = ["state", "navigationDescription", "onSelectedCellClick", "showWeekNumbers", "weekNumberHeader", "classNameForDate", "ariaLabelForDate"];
342
354
  var CalendarGrid = function CalendarGrid(_ref) {
343
355
  var state = _ref.state,
344
356
  navigationDescription = _ref.navigationDescription,
@@ -346,6 +358,8 @@ var CalendarGrid = function CalendarGrid(_ref) {
346
358
  onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
347
359
  return;
348
360
  } : _ref$onSelectedCellCl,
361
+ showWeekNumbers = _ref.showWeekNumbers,
362
+ weekNumberHeader = _ref.weekNumberHeader,
349
363
  classNameForDate = _ref.classNameForDate,
350
364
  ariaLabelForDate = _ref.ariaLabelForDate,
351
365
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$7);
@@ -376,19 +390,26 @@ var CalendarGrid = function CalendarGrid(_ref) {
376
390
  return React.createElement(React.Fragment, null, React.createElement("table", _extends({}, gridProps, {
377
391
  cellSpacing: "0",
378
392
  className: "eds-datepicker__calendar__grid"
379
- }), React.createElement("thead", _extends({}, headerProps), React.createElement("tr", null, weekDaysMapped().map(function (day, index) {
393
+ }), React.createElement("thead", _extends({}, headerProps), React.createElement("tr", null, showWeekNumbers && React.createElement("th", {
394
+ className: "eds-datepicker__calendar__grid__weeknumber-header"
395
+ }, weekNumberHeader), weekDaysMapped().map(function (day, index) {
380
396
  return React.createElement("th", {
381
397
  key: index
382
398
  }, day);
383
399
  }))), React.createElement("tbody", null, weeksArray.map(function (weekIndex) {
400
+ var weekNumber = getWeekNumberForDate(state.getDatesInWeek(weekIndex)[0]);
384
401
  return React.createElement("tr", {
385
402
  key: weekIndex
386
- }, state.getDatesInWeek(weekIndex).map(function (date, i) {
403
+ }, showWeekNumbers && React.createElement("th", {
404
+ "aria-hidden": true,
405
+ className: "eds-datepicker__calendar__grid__weeknumber"
406
+ }, weekNumber), state.getDatesInWeek(weekIndex).map(function (date, i) {
387
407
  return date ? React.createElement(CalendarCell, {
388
408
  key: i,
389
409
  state: state,
390
410
  date: date,
391
411
  "aria-describedby": calendarGridId + 'description',
412
+ weekNumberString: showWeekNumbers ? ", " + weekNumberHeader + " " + weekNumber + "," : '',
392
413
  onSelectedCellClick: onSelectedCellClick,
393
414
  classNameForDate: classNameForDate,
394
415
  ariaLabelForDate: ariaLabelForDate
@@ -401,28 +422,43 @@ var CalendarGrid = function CalendarGrid(_ref) {
401
422
  }, getNavigationDescription()));
402
423
  };
403
424
 
404
- var _excluded$6 = ["selectedDate", "onChange", "locale", "minDate", "maxDate", "style", "children", "navigationDescription", "onSelectedCellClick", "classNameForDate", "ariaLabelForDate"];
405
- var Calendar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
406
- var selectedDate = _ref.selectedDate,
407
- onChange = _ref.onChange,
408
- customLocale = _ref.locale,
409
- minDate = _ref.minDate,
410
- maxDate = _ref.maxDate,
411
- style = _ref.style,
412
- navigationDescription = _ref.navigationDescription,
413
- _ref$onSelectedCellCl = _ref.onSelectedCellClick,
414
- onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
415
- return;
416
- } : _ref$onSelectedCellCl,
417
- classNameForDate = _ref.classNameForDate,
418
- ariaLabelForDate = _ref.ariaLabelForDate,
425
+ var _excluded$6 = ["locale"],
426
+ _excluded2$3 = ["selectedDate", "onChange", "minDate", "maxDate", "showWeekNumbers", "weekNumberHeader", "style", "className", "navigationDescription", "onSelectedCellClick", "classNameForDate", "ariaLabelForDate", "calendarRef"];
427
+ var Calendar = function Calendar(_ref) {
428
+ var localOverride = _ref.locale,
419
429
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
420
430
  var _useLocale = useLocale(),
421
431
  locale = _useLocale.locale;
432
+ return React.createElement(I18nProvider, {
433
+ locale: localOverride != null ? localOverride : locale
434
+ }, React.createElement(CalendarBase, _extends({}, rest)));
435
+ };
436
+ var CalendarBase = function CalendarBase(_ref2) {
437
+ var selectedDate = _ref2.selectedDate,
438
+ onChange = _ref2.onChange,
439
+ minDate = _ref2.minDate,
440
+ maxDate = _ref2.maxDate,
441
+ _ref2$showWeekNumbers = _ref2.showWeekNumbers,
442
+ showWeekNumbers = _ref2$showWeekNumbers === void 0 ? false : _ref2$showWeekNumbers,
443
+ _ref2$weekNumberHeade = _ref2.weekNumberHeader,
444
+ weekNumberHeader = _ref2$weekNumberHeade === void 0 ? 'uke' : _ref2$weekNumberHeade,
445
+ style = _ref2.style,
446
+ className = _ref2.className,
447
+ navigationDescription = _ref2.navigationDescription,
448
+ _ref2$onSelectedCellC = _ref2.onSelectedCellClick,
449
+ onSelectedCellClick = _ref2$onSelectedCellC === void 0 ? function () {
450
+ return;
451
+ } : _ref2$onSelectedCellC,
452
+ classNameForDate = _ref2.classNameForDate,
453
+ ariaLabelForDate = _ref2.ariaLabelForDate,
454
+ calendarRef = _ref2.calendarRef,
455
+ rest = _objectWithoutPropertiesLoose(_ref2, _excluded2$3);
456
+ var _useLocale2 = useLocale(),
457
+ locale = _useLocale2.locale;
422
458
  var allProps = _extends({}, rest, {
423
459
  value: selectedDate,
424
460
  onChange: onChange,
425
- locale: customLocale != null ? customLocale : locale,
461
+ locale: locale,
426
462
  createCalendar: createCalendar,
427
463
  minValue: minDate,
428
464
  maxValue: maxDate
@@ -433,16 +469,9 @@ var Calendar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
433
469
  prevButtonProps = _useCalendar.prevButtonProps,
434
470
  nextButtonProps = _useCalendar.nextButtonProps,
435
471
  title = _useCalendar.title;
436
- return React.createElement(ConditionalWrapper, {
437
- condition: customLocale,
438
- wrapper: function wrapper(child) {
439
- return React.createElement(I18nProvider, {
440
- locale: customLocale
441
- }, child);
442
- }
443
- }, React.createElement("div", _extends({}, calendarProps, {
444
- ref: ref,
445
- className: "eds-datepicker__calendar",
472
+ return React.createElement("div", _extends({}, calendarProps, {
473
+ ref: calendarRef,
474
+ className: classNames('eds-datepicker__calendar', className),
446
475
  style: style
447
476
  }), React.createElement("div", {
448
477
  className: "eds-datepicker__calendar__header"
@@ -459,11 +488,13 @@ var Calendar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
459
488
  navigationDescription: navigationDescription,
460
489
  onSelectedCellClick: onSelectedCellClick,
461
490
  classNameForDate: classNameForDate,
462
- ariaLabelForDate: ariaLabelForDate
463
- })));
464
- });
491
+ ariaLabelForDate: ariaLabelForDate,
492
+ showWeekNumbers: showWeekNumbers,
493
+ weekNumberHeader: weekNumberHeader
494
+ }));
495
+ };
465
496
 
466
- var _excluded$5 = ["selectedDate", "onChange", "locale", "disabled", "showTime", "showTimeZone", "classNameForDate", "className", "style", "variant", "feedback", "validationVariant", "validationFeedback", "disableModal", "labelTooltip", "navigationDescription", "minDate", "maxDate", "modalTreshold", "forcedReturnType", "ariaLabelForDate"];
497
+ 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"];
467
498
  var DatePicker = function DatePicker(_ref) {
468
499
  var selectedDate = _ref.selectedDate,
469
500
  onChange = _ref.onChange,
@@ -478,6 +509,8 @@ var DatePicker = function DatePicker(_ref) {
478
509
  feedback = _ref.feedback,
479
510
  validationVariant = _ref.validationVariant,
480
511
  validationFeedback = _ref.validationFeedback,
512
+ showWeekNumbers = _ref.showWeekNumbers,
513
+ weekNumberHeader = _ref.weekNumberHeader,
481
514
  _ref$disableModal = _ref.disableModal,
482
515
  disableModal = _ref$disableModal === void 0 ? false : _ref$disableModal,
483
516
  labelTooltip = _ref.labelTooltip,
@@ -550,9 +583,11 @@ var DatePicker = function DatePicker(_ref) {
550
583
  onChange: handleOnChange,
551
584
  minDate: minDate,
552
585
  maxDate: maxDate,
553
- ref: calendarRef,
586
+ calendarRef: calendarRef,
554
587
  classNameForDate: classNameForDate,
555
- ariaLabelForDate: ariaLabelForDate
588
+ ariaLabelForDate: ariaLabelForDate,
589
+ showWeekNumbers: showWeekNumbers,
590
+ weekNumberHeader: weekNumberHeader
556
591
  });
557
592
  var useModal = typeof width !== 'undefined' && width <= CALENDAR_MODAL_MAX_SCREEN_WIDTH && !disableModal;
558
593
  var popoverCalendar = React.createElement("div", {
@@ -1109,5 +1144,5 @@ var SimpleTimePicker = function SimpleTimePicker(_ref) {
1109
1144
 
1110
1145
  warnAboutMissingStyles('datepicker', 'form', 'icons');
1111
1146
 
1112
- export { Calendar, DateField, DatePicker, NativeDatePicker, NativeTimePicker, SimpleTimePicker, TimePicker, ariaLabelIfNorwegian, convertValueToType, createCalendar, focusSegment, lastMillisecondOfDay, modulo, nativeDateToDateValue, nativeDateToTimeValue, timeOrDateValueToNativeDate };
1147
+ export { Calendar, DateField, DatePicker, NativeDatePicker, NativeTimePicker, SimpleTimePicker, TimePicker, ariaLabelIfNorwegian, convertValueToType, createCalendar, focusSegment, getWeekNumberForDate, lastMillisecondOfDay, modulo, nativeDateToDateValue, nativeDateToTimeValue, timeOrDateValueToNativeDate };
1113
1148
  //# sourceMappingURL=datepicker.esm.js.map