@entur/datepicker 9.2.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,7 +305,7 @@ 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
310
  var _ariaLabelForDate, _classNameForDate, _state$timeZone, _classNames;
296
311
  var state = _ref.state,
@@ -299,6 +314,7 @@ var CalendarCell = function CalendarCell(_ref) {
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,11 +329,12 @@ 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
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))
@@ -333,7 +350,7 @@ var CalendarCell = function CalendarCell(_ref) {
333
350
  }), formattedDate));
334
351
  };
335
352
 
336
- var _excluded$7 = ["state", "navigationDescription", "onSelectedCellClick", "classNameForDate", "ariaLabelForDate"];
353
+ var _excluded$7 = ["state", "navigationDescription", "onSelectedCellClick", "showWeekNumbers", "weekNumberHeader", "classNameForDate", "ariaLabelForDate"];
337
354
  var CalendarGrid = function CalendarGrid(_ref) {
338
355
  var state = _ref.state,
339
356
  navigationDescription = _ref.navigationDescription,
@@ -341,6 +358,8 @@ var CalendarGrid = function CalendarGrid(_ref) {
341
358
  onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
342
359
  return;
343
360
  } : _ref$onSelectedCellCl,
361
+ showWeekNumbers = _ref.showWeekNumbers,
362
+ weekNumberHeader = _ref.weekNumberHeader,
344
363
  classNameForDate = _ref.classNameForDate,
345
364
  ariaLabelForDate = _ref.ariaLabelForDate,
346
365
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$7);
@@ -371,19 +390,26 @@ var CalendarGrid = function CalendarGrid(_ref) {
371
390
  return React.createElement(React.Fragment, null, React.createElement("table", _extends({}, gridProps, {
372
391
  cellSpacing: "0",
373
392
  className: "eds-datepicker__calendar__grid"
374
- }), 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) {
375
396
  return React.createElement("th", {
376
397
  key: index
377
398
  }, day);
378
399
  }))), React.createElement("tbody", null, weeksArray.map(function (weekIndex) {
400
+ var weekNumber = getWeekNumberForDate(state.getDatesInWeek(weekIndex)[0]);
379
401
  return React.createElement("tr", {
380
402
  key: weekIndex
381
- }, 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) {
382
407
  return date ? React.createElement(CalendarCell, {
383
408
  key: i,
384
409
  state: state,
385
410
  date: date,
386
411
  "aria-describedby": calendarGridId + 'description',
412
+ weekNumberString: showWeekNumbers ? ", " + weekNumberHeader + " " + weekNumber + "," : '',
387
413
  onSelectedCellClick: onSelectedCellClick,
388
414
  classNameForDate: classNameForDate,
389
415
  ariaLabelForDate: ariaLabelForDate
@@ -396,29 +422,43 @@ var CalendarGrid = function CalendarGrid(_ref) {
396
422
  }, getNavigationDescription()));
397
423
  };
398
424
 
399
- var _excluded$6 = ["selectedDate", "onChange", "locale", "minDate", "maxDate", "style", "className", "children", "navigationDescription", "onSelectedCellClick", "classNameForDate", "ariaLabelForDate"];
400
- var Calendar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
401
- var selectedDate = _ref.selectedDate,
402
- onChange = _ref.onChange,
403
- customLocale = _ref.locale,
404
- minDate = _ref.minDate,
405
- maxDate = _ref.maxDate,
406
- style = _ref.style,
407
- className = _ref.className,
408
- navigationDescription = _ref.navigationDescription,
409
- _ref$onSelectedCellCl = _ref.onSelectedCellClick,
410
- onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
411
- return;
412
- } : _ref$onSelectedCellCl,
413
- classNameForDate = _ref.classNameForDate,
414
- 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,
415
429
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
416
430
  var _useLocale = useLocale(),
417
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;
418
458
  var allProps = _extends({}, rest, {
419
459
  value: selectedDate,
420
460
  onChange: onChange,
421
- locale: customLocale != null ? customLocale : locale,
461
+ locale: locale,
422
462
  createCalendar: createCalendar,
423
463
  minValue: minDate,
424
464
  maxValue: maxDate
@@ -429,15 +469,8 @@ var Calendar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
429
469
  prevButtonProps = _useCalendar.prevButtonProps,
430
470
  nextButtonProps = _useCalendar.nextButtonProps,
431
471
  title = _useCalendar.title;
432
- return React.createElement(ConditionalWrapper, {
433
- condition: customLocale,
434
- wrapper: function wrapper(child) {
435
- return React.createElement(I18nProvider, {
436
- locale: customLocale
437
- }, child);
438
- }
439
- }, React.createElement("div", _extends({}, calendarProps, {
440
- ref: ref,
472
+ return React.createElement("div", _extends({}, calendarProps, {
473
+ ref: calendarRef,
441
474
  className: classNames('eds-datepicker__calendar', className),
442
475
  style: style
443
476
  }), React.createElement("div", {
@@ -455,11 +488,13 @@ var Calendar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
455
488
  navigationDescription: navigationDescription,
456
489
  onSelectedCellClick: onSelectedCellClick,
457
490
  classNameForDate: classNameForDate,
458
- ariaLabelForDate: ariaLabelForDate
459
- })));
460
- });
491
+ ariaLabelForDate: ariaLabelForDate,
492
+ showWeekNumbers: showWeekNumbers,
493
+ weekNumberHeader: weekNumberHeader
494
+ }));
495
+ };
461
496
 
462
- 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"];
463
498
  var DatePicker = function DatePicker(_ref) {
464
499
  var selectedDate = _ref.selectedDate,
465
500
  onChange = _ref.onChange,
@@ -474,6 +509,8 @@ var DatePicker = function DatePicker(_ref) {
474
509
  feedback = _ref.feedback,
475
510
  validationVariant = _ref.validationVariant,
476
511
  validationFeedback = _ref.validationFeedback,
512
+ showWeekNumbers = _ref.showWeekNumbers,
513
+ weekNumberHeader = _ref.weekNumberHeader,
477
514
  _ref$disableModal = _ref.disableModal,
478
515
  disableModal = _ref$disableModal === void 0 ? false : _ref$disableModal,
479
516
  labelTooltip = _ref.labelTooltip,
@@ -546,9 +583,11 @@ var DatePicker = function DatePicker(_ref) {
546
583
  onChange: handleOnChange,
547
584
  minDate: minDate,
548
585
  maxDate: maxDate,
549
- ref: calendarRef,
586
+ calendarRef: calendarRef,
550
587
  classNameForDate: classNameForDate,
551
- ariaLabelForDate: ariaLabelForDate
588
+ ariaLabelForDate: ariaLabelForDate,
589
+ showWeekNumbers: showWeekNumbers,
590
+ weekNumberHeader: weekNumberHeader
552
591
  });
553
592
  var useModal = typeof width !== 'undefined' && width <= CALENDAR_MODAL_MAX_SCREEN_WIDTH && !disableModal;
554
593
  var popoverCalendar = React.createElement("div", {
@@ -1105,5 +1144,5 @@ var SimpleTimePicker = function SimpleTimePicker(_ref) {
1105
1144
 
1106
1145
  warnAboutMissingStyles('datepicker', 'form', 'icons');
1107
1146
 
1108
- 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 };
1109
1148
  //# sourceMappingURL=datepicker.esm.js.map