@entur/datepicker 3.0.3 → 4.0.0-alpha.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/CHANGELOG.md +14 -2
- package/dist/DatePicker/beta/Calendar.d.ts +10 -0
- package/dist/DatePicker/beta/CalendarCell.d.ts +9 -0
- package/dist/DatePicker/beta/CalendarGrid.d.ts +7 -0
- package/dist/DatePicker/beta/DateField.d.ts +32 -0
- package/dist/DatePicker/beta/DatePicker.d.ts +33 -0
- package/dist/DatePicker/beta/index.d.ts +3 -0
- package/dist/DatePicker/index.d.ts +1 -0
- package/dist/TimePicker/index.d.ts +1 -1
- package/dist/datepicker.cjs.development.js +461 -92
- package/dist/datepicker.cjs.development.js.map +1 -1
- package/dist/datepicker.cjs.production.min.js +1 -1
- package/dist/datepicker.cjs.production.min.js.map +1 -1
- package/dist/datepicker.esm.js +460 -97
- package/dist/datepicker.esm.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/shared/CalendarButton.d.ts +9 -0
- package/dist/{TimePicker/TimeSegment.d.ts → shared/FieldSegment.d.ts} +2 -1
- package/dist/shared/index.d.ts +1 -0
- package/dist/{TimePicker → shared}/utils.d.ts +3 -0
- package/dist/styles.css +223 -68
- package/package.json +13 -7
|
@@ -14,16 +14,23 @@ var button = require('@entur/button');
|
|
|
14
14
|
var form = require('@entur/form');
|
|
15
15
|
var tooltip = require('@entur/tooltip');
|
|
16
16
|
require('react-datepicker/dist/react-datepicker.css');
|
|
17
|
+
var datepicker$1 = require('@react-stately/datepicker');
|
|
17
18
|
var datepicker = require('@react-aria/datepicker');
|
|
18
19
|
var i18n = require('@react-aria/i18n');
|
|
19
|
-
var datepicker$1 = require('@react-stately/datepicker');
|
|
20
20
|
var date = require('@internationalized/date');
|
|
21
|
+
var calendar = require('@react-aria/calendar');
|
|
22
|
+
var calendar$1 = require('@react-stately/calendar');
|
|
23
|
+
var button$1 = require('@react-aria/button');
|
|
24
|
+
var reactDom = require('@floating-ui/react-dom');
|
|
25
|
+
var FocusLock = require('react-focus-lock');
|
|
26
|
+
var tokens = require('@entur/tokens');
|
|
21
27
|
|
|
22
28
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
23
29
|
|
|
24
30
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
25
31
|
var ReactDatepicker__default = /*#__PURE__*/_interopDefaultLegacy(ReactDatepicker);
|
|
26
32
|
var classNames__default = /*#__PURE__*/_interopDefaultLegacy(classNames);
|
|
33
|
+
var FocusLock__default = /*#__PURE__*/_interopDefaultLegacy(FocusLock);
|
|
27
34
|
|
|
28
35
|
function _extends() {
|
|
29
36
|
_extends = Object.assign || function (target) {
|
|
@@ -99,7 +106,7 @@ function getMonthName(monthIndex, locale) {
|
|
|
99
106
|
return formatter.format(new Date(year, monthIndex));
|
|
100
107
|
}
|
|
101
108
|
|
|
102
|
-
var _excluded$
|
|
109
|
+
var _excluded$9 = ["style", "label", "inputPlaceholder", "prepend", "feedback", "variant", "disabled", "calendarButtonTooltipOpen", "calendarButtonTooltipClose", "hideCalendarButton", "disableLabelAnimation", "inputRef", "calendarButtonId", "forwardRef", "toggleCalendarGUI", "onKeyDownInput", "onBlurInput", "selectedDate", "setFocusToCalendarGUI", "setShouldFocusOnCalendarButtonAfterSelect", "calendarGUIIsOpen", "placeholder", "onClick", "aria-labelledby"];
|
|
103
110
|
var DatePickerInput = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
|
|
104
111
|
var style = _ref.style,
|
|
105
112
|
label = _ref.label,
|
|
@@ -123,7 +130,7 @@ var DatePickerInput = /*#__PURE__*/React__default["default"].forwardRef(function
|
|
|
123
130
|
setShouldFocusOnCalendarButtonAfterSelect = _ref.setShouldFocusOnCalendarButtonAfterSelect,
|
|
124
131
|
calendarGUIIsOpen = _ref.calendarGUIIsOpen,
|
|
125
132
|
onClick = _ref.onClick,
|
|
126
|
-
rest = _objectWithoutPropertiesLoose(_ref, _excluded$
|
|
133
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$9);
|
|
127
134
|
|
|
128
135
|
React__default["default"].useEffect(function () {
|
|
129
136
|
var _inputRef$current, _inputRef$current2, _inputRef$current3;
|
|
@@ -201,7 +208,7 @@ var DatePickerInput = /*#__PURE__*/React__default["default"].forwardRef(function
|
|
|
201
208
|
}, rest));
|
|
202
209
|
});
|
|
203
210
|
|
|
204
|
-
var _excluded$
|
|
211
|
+
var _excluded$8 = ["style", "className", "selectedDate", "label", "placeholder", "onChange", "onKeyDown", "dateFormats", "minDate", "maxDate", "inline", "disabled", "prepend", "feedback", "variant", "validationFeedback", "validationVariant", "disableLabelAnimation", "calendarButtonTooltipOpen", "calendarButtonTooltipClose", "hideCalendarButton", "hideCalendar", "hideValidation", "weekLabel", "chooseDayAriaLabelPrefix", "previousMonthAriaLabel", "nextMonthAriaLabel", "locale", "open"];
|
|
205
212
|
ReactDatepicker.registerLocale('nb', locale.nb);
|
|
206
213
|
var DatePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
|
|
207
214
|
var style = _ref.style,
|
|
@@ -253,7 +260,7 @@ var DatePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_re
|
|
|
253
260
|
_ref$locale = _ref.locale,
|
|
254
261
|
locale$1 = _ref$locale === void 0 ? locale.nb : _ref$locale,
|
|
255
262
|
open = _ref.open,
|
|
256
|
-
rest = _objectWithoutPropertiesLoose(_ref, _excluded$
|
|
263
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$8);
|
|
257
264
|
|
|
258
265
|
var datepickerId = utils.useRandomId('eds-datepicker');
|
|
259
266
|
var datepickerRef = React.useRef(null);
|
|
@@ -485,6 +492,449 @@ var DatePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_re
|
|
|
485
492
|
}, rest)));
|
|
486
493
|
});
|
|
487
494
|
|
|
495
|
+
var FieldSegment = function FieldSegment(_ref) {
|
|
496
|
+
var segment = _ref.segment,
|
|
497
|
+
state = _ref.state;
|
|
498
|
+
var ref = React.useRef(null);
|
|
499
|
+
|
|
500
|
+
var _useDateSegment = datepicker.useDateSegment(segment, state, ref),
|
|
501
|
+
segmentProps = _useDateSegment.segmentProps;
|
|
502
|
+
|
|
503
|
+
var is12HourFormatted = state.segments.some(function (segment) {
|
|
504
|
+
return segment.text === 'AM' || segment.text === 'PM';
|
|
505
|
+
});
|
|
506
|
+
|
|
507
|
+
var segmentDisplayText = function segmentDisplayText() {
|
|
508
|
+
if (is12HourFormatted) return segment.text; // if number add '0' padding to start when one digit
|
|
509
|
+
|
|
510
|
+
if (segment.text.match(/\d+/)) return segment.text.padStart(2, '0');
|
|
511
|
+
return segment.text;
|
|
512
|
+
};
|
|
513
|
+
|
|
514
|
+
return React__default["default"].createElement("div", _extends({}, segmentProps, {
|
|
515
|
+
ref: ref,
|
|
516
|
+
className: classNames__default["default"]('eds-date-and-time-field__segment', {
|
|
517
|
+
'eds-date-and-time-field__segment--placeholder': segment.isPlaceholder,
|
|
518
|
+
'eds-date-and-time-field__segment--dot-separator': segment.text === '.'
|
|
519
|
+
}),
|
|
520
|
+
tabIndex: state.isDisabled ? -1 : segmentProps.tabIndex
|
|
521
|
+
}), segmentDisplayText());
|
|
522
|
+
};
|
|
523
|
+
|
|
524
|
+
/**
|
|
525
|
+
* Tar inn et JS Date-objekt og returnerer et av TimeValue-objektene fra @internationalized/date-pakken
|
|
526
|
+
* @param {Date} date JS Date-objekt som ønskes konvertert til et TimeValue-objekt
|
|
527
|
+
* @param {boolean} noDateOnlyTime Hvis datoen er irrelevant kan denne settes til true, da får man et Time-objekt uten dato tilbake
|
|
528
|
+
* @param {string} timeZone Tidssonen på IANA-formatet som tidpunktet skal konverteres til. Utelates denne får man et tidspunkt uten tidssone. Kan brukes med og uten en UTC-offset Vær obs på annen oppførsel med offset, les mer på beskrivelsen av offset
|
|
529
|
+
* @param {number} offset UTC-offset i millisekunder, må brukes med en tidssone. Ved å legge på en offset lager du en variant av en tidssone. Det betyr at tidspunktet ikke endres (time, minutt, sekund uendret), men tidssonen, med tilhørende offset, tidspunktet er i endres.
|
|
530
|
+
* @returns {Time | CalendarDateTime | ZonedDateTime} et av TimeValue-objektene med verdier fra date
|
|
531
|
+
*/
|
|
532
|
+
|
|
533
|
+
var nativeDateToTimeValue = function nativeDateToTimeValue(date$1, noDateOnlyTime, timeZone, offset) {
|
|
534
|
+
if (noDateOnlyTime === void 0) {
|
|
535
|
+
noDateOnlyTime = false;
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
if (timeZone) {
|
|
539
|
+
if (offset) {
|
|
540
|
+
return new date.ZonedDateTime(date$1.getFullYear(), date$1.getMonth() + 1, date$1.getDate(), timeZone, offset, date$1.getHours(), date$1.getMinutes(), date$1.getSeconds());
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
return date.parseAbsolute(date$1.toISOString(), timeZone);
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
if (noDateOnlyTime) return new date.Time(date$1.getHours(), date$1.getMinutes(), date$1.getSeconds(), 0);
|
|
547
|
+
return new date.CalendarDateTime(date$1.getFullYear(), date$1.getMonth() + 1, date$1.getDate(), date$1.getHours(), date$1.getMinutes(), date$1.getSeconds());
|
|
548
|
+
};
|
|
549
|
+
/**
|
|
550
|
+
* Tar inn et av TimeValue-objektene fra @internationalized/date-pakken og returnerer et JS Date-objekt
|
|
551
|
+
* @param {TimeValue} time Et tidspunkt på TimeValue-formatet som ønsket konvertert til et JS Date-objekt
|
|
552
|
+
* @param {string} timeZoneForCalendarDateTime Tidssonen time er i. Fungerer kun med typen er CalendarDateTime
|
|
553
|
+
* @returns {Date} et Date-objekt med verdier fra time
|
|
554
|
+
*/
|
|
555
|
+
// This function uses a lot of @ts-expect-error to make it work with all TimeValue types. Sorry ...
|
|
556
|
+
|
|
557
|
+
var timeValueToNativeDate = function timeValueToNativeDate(time, timeZoneForCalendarDateTime) {
|
|
558
|
+
// @ts-expect-error .day does not exist on Time-object
|
|
559
|
+
if (!time.day) {
|
|
560
|
+
// type is Time
|
|
561
|
+
var date = new Date();
|
|
562
|
+
date.setHours(time.hour);
|
|
563
|
+
date.setMinutes(time.minute);
|
|
564
|
+
date.setSeconds(time.second);
|
|
565
|
+
return date;
|
|
566
|
+
} // @ts-expect-error .timeZone does not exist in type Time and CalendarDateTime
|
|
567
|
+
|
|
568
|
+
|
|
569
|
+
if (!time.timeZone) {
|
|
570
|
+
// type is CalendarDateTime
|
|
571
|
+
if (timeZoneForCalendarDateTime) // @ts-expect-error .toDate(timeZone) does not exist in type Time
|
|
572
|
+
return time.toDate(timeZoneForCalendarDateTime);
|
|
573
|
+
return new Date( // @ts-expect-error not in type Time
|
|
574
|
+
time.year, // @ts-expect-error not in type Time
|
|
575
|
+
time.month - 1, // @ts-expect-error not in type Time
|
|
576
|
+
time.day, time.hour, time.minute, time.second);
|
|
577
|
+
} // @ts-expect-error .toDate() does not exist in type Time or CalendarDateTime
|
|
578
|
+
|
|
579
|
+
|
|
580
|
+
return time.toDate();
|
|
581
|
+
};
|
|
582
|
+
var createCalendar = function createCalendar(identifier) {
|
|
583
|
+
if (identifier === void 0) {
|
|
584
|
+
identifier = 'gregory';
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
switch (identifier) {
|
|
588
|
+
case 'gregory':
|
|
589
|
+
return new date.GregorianCalendar();
|
|
590
|
+
|
|
591
|
+
default:
|
|
592
|
+
throw new Error("Unsupported calendar " + identifier);
|
|
593
|
+
}
|
|
594
|
+
};
|
|
595
|
+
var ariaLabelIfNorwegian = function ariaLabelIfNorwegian(norwegianAriaLabel, locale, propsCollection) {
|
|
596
|
+
if (locale !== 'no-NO') return propsCollection['aria-label'];
|
|
597
|
+
return norwegianAriaLabel;
|
|
598
|
+
};
|
|
599
|
+
|
|
600
|
+
var _excluded$7 = ["selectedDate", "label", "showTimeZone", "showTime", "granularity", "disabled", "variant", "feedback", "labelTooltip", "style", "className", "labelProps", "append"];
|
|
601
|
+
var DateField = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
|
|
602
|
+
var value = _ref.selectedDate,
|
|
603
|
+
label = _ref.label,
|
|
604
|
+
showTimeZone = _ref.showTimeZone,
|
|
605
|
+
showTime = _ref.showTime,
|
|
606
|
+
_ref$granularity = _ref.granularity,
|
|
607
|
+
granularity = _ref$granularity === void 0 ? 'day' : _ref$granularity,
|
|
608
|
+
disabled = _ref.disabled,
|
|
609
|
+
variant = _ref.variant,
|
|
610
|
+
feedback = _ref.feedback,
|
|
611
|
+
labelTooltip = _ref.labelTooltip,
|
|
612
|
+
style = _ref.style,
|
|
613
|
+
className = _ref.className,
|
|
614
|
+
parentLabelProps = _ref.labelProps,
|
|
615
|
+
append = _ref.append,
|
|
616
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$7);
|
|
617
|
+
|
|
618
|
+
var _useLocale = i18n.useLocale(),
|
|
619
|
+
locale = _useLocale.locale;
|
|
620
|
+
|
|
621
|
+
var state = datepicker$1.useDateFieldState(_extends({}, rest, {
|
|
622
|
+
locale: locale,
|
|
623
|
+
createCalendar: createCalendar,
|
|
624
|
+
value: value === null ? undefined : value,
|
|
625
|
+
hideTimeZone: !showTimeZone,
|
|
626
|
+
granularity: showTime ? 'minute' : granularity
|
|
627
|
+
}));
|
|
628
|
+
var dateFieldRef = React.useRef(null);
|
|
629
|
+
|
|
630
|
+
var _useDateField = datepicker.useDateField(_extends({}, rest, {
|
|
631
|
+
label: label,
|
|
632
|
+
isDisabled: disabled || rest.isDisabled
|
|
633
|
+
}), state, dateFieldRef),
|
|
634
|
+
labelProps = _useDateField.labelProps,
|
|
635
|
+
fieldProps = _useDateField.fieldProps;
|
|
636
|
+
|
|
637
|
+
var id = utils.useRandomId('datefield');
|
|
638
|
+
return React__default["default"].createElement(form.BaseFormControl, _extends({
|
|
639
|
+
style: style,
|
|
640
|
+
className: classNames__default["default"]('eds-datefield', className),
|
|
641
|
+
labelId: id,
|
|
642
|
+
ref: utils.mergeRefs(dateFieldRef, ref),
|
|
643
|
+
disabled: state.isDisabled,
|
|
644
|
+
disableLabelAnimation: true,
|
|
645
|
+
label: label,
|
|
646
|
+
labelTooltip: labelTooltip,
|
|
647
|
+
labelProps: parentLabelProps != null ? parentLabelProps : labelProps
|
|
648
|
+
}, fieldProps, {
|
|
649
|
+
variant: variant,
|
|
650
|
+
feedback: feedback,
|
|
651
|
+
append: append
|
|
652
|
+
}), state.segments.map(function (segment, i) {
|
|
653
|
+
return React__default["default"].createElement(FieldSegment, {
|
|
654
|
+
segment: segment,
|
|
655
|
+
state: state,
|
|
656
|
+
key: i
|
|
657
|
+
});
|
|
658
|
+
}));
|
|
659
|
+
});
|
|
660
|
+
|
|
661
|
+
var _excluded$6 = ["children", "className", "style"];
|
|
662
|
+
var CalendarButton = function CalendarButton(_ref) {
|
|
663
|
+
var children = _ref.children,
|
|
664
|
+
className = _ref.className,
|
|
665
|
+
style = _ref.style,
|
|
666
|
+
props = _objectWithoutPropertiesLoose(_ref, _excluded$6);
|
|
667
|
+
|
|
668
|
+
var ref = React.useRef(null);
|
|
669
|
+
|
|
670
|
+
var _useButton = button$1.useButton(props, ref),
|
|
671
|
+
buttonProps = _useButton.buttonProps;
|
|
672
|
+
|
|
673
|
+
return React__default["default"].createElement(button.IconButton, _extends({}, buttonProps, {
|
|
674
|
+
ref: ref,
|
|
675
|
+
className: className,
|
|
676
|
+
style: style
|
|
677
|
+
}), children);
|
|
678
|
+
};
|
|
679
|
+
|
|
680
|
+
var CalendarCell = function CalendarCell(_ref) {
|
|
681
|
+
var _state$timeZone;
|
|
682
|
+
|
|
683
|
+
var state = _ref.state,
|
|
684
|
+
date$1 = _ref.date;
|
|
685
|
+
var cellRef = React.useRef(null);
|
|
686
|
+
|
|
687
|
+
var _useCalendarCell = calendar.useCalendarCell({
|
|
688
|
+
date: date$1
|
|
689
|
+
}, state, cellRef),
|
|
690
|
+
cellProps = _useCalendarCell.cellProps,
|
|
691
|
+
buttonProps = _useCalendarCell.buttonProps,
|
|
692
|
+
isSelected = _useCalendarCell.isSelected,
|
|
693
|
+
isOutsideVisibleRange = _useCalendarCell.isOutsideVisibleRange,
|
|
694
|
+
isDisabled = _useCalendarCell.isDisabled,
|
|
695
|
+
isUnavailable = _useCalendarCell.isUnavailable,
|
|
696
|
+
formattedDate = _useCalendarCell.formattedDate;
|
|
697
|
+
|
|
698
|
+
return React__default["default"].createElement("td", _extends({}, cellProps, {
|
|
699
|
+
className: "eds-datepicker__calendar__grid__cell__td"
|
|
700
|
+
}), React__default["default"].createElement("div", _extends({}, buttonProps, {
|
|
701
|
+
ref: cellRef,
|
|
702
|
+
hidden: isOutsideVisibleRange,
|
|
703
|
+
className: classNames__default["default"]('eds-datepicker__calendar__grid__cell', {
|
|
704
|
+
'eds-datepicker__calendar__grid__cell--selected': isSelected,
|
|
705
|
+
'eds-datepicker__calendar__grid__cell--disabled': isDisabled,
|
|
706
|
+
'eds-datepicker__calendar__grid__cell--unavailable': isUnavailable,
|
|
707
|
+
'eds-datepicker__calendar__grid__cell--today': date.isEqualDay(date$1, date.now((_state$timeZone = state.timeZone) != null ? _state$timeZone : date.getLocalTimeZone()))
|
|
708
|
+
})
|
|
709
|
+
}), formattedDate));
|
|
710
|
+
};
|
|
711
|
+
|
|
712
|
+
var _excluded$5 = ["state"];
|
|
713
|
+
var CalendarGrid = function CalendarGrid(_ref) {
|
|
714
|
+
var state = _ref.state,
|
|
715
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
|
|
716
|
+
|
|
717
|
+
var _useLocale = i18n.useLocale(),
|
|
718
|
+
locale = _useLocale.locale;
|
|
719
|
+
|
|
720
|
+
var _useCalendarGrid = calendar.useCalendarGrid(rest, state),
|
|
721
|
+
gridProps = _useCalendarGrid.gridProps,
|
|
722
|
+
headerProps = _useCalendarGrid.headerProps,
|
|
723
|
+
weekDays = _useCalendarGrid.weekDays;
|
|
724
|
+
|
|
725
|
+
var weeksInMonth = date.getWeeksInMonth(state.visibleRange.start, locale);
|
|
726
|
+
var weeksArray = Array.from(Array(weeksInMonth).keys());
|
|
727
|
+
|
|
728
|
+
var weekDaysMapped = function weekDaysMapped() {
|
|
729
|
+
if (locale.toLowerCase() === 'no-no' || locale.toLowerCase() === 'no') return ['ma', 'ti', 'on', 'to', 'fr', 'lø', 'sø'];
|
|
730
|
+
if (weekDays.toString() === 'M,T,W,T,F,S,S') return ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];
|
|
731
|
+
return weekDays.map(function (day) {
|
|
732
|
+
return day.toLowerCase();
|
|
733
|
+
});
|
|
734
|
+
};
|
|
735
|
+
|
|
736
|
+
return React__default["default"].createElement("table", _extends({}, gridProps, {
|
|
737
|
+
cellSpacing: "0",
|
|
738
|
+
className: "eds-datepicker__calendar__grid"
|
|
739
|
+
}), React__default["default"].createElement("thead", _extends({}, headerProps), React__default["default"].createElement("tr", null, weekDaysMapped().map(function (day, index) {
|
|
740
|
+
return React__default["default"].createElement("th", {
|
|
741
|
+
key: index
|
|
742
|
+
}, day);
|
|
743
|
+
}))), React__default["default"].createElement("tbody", null, weeksArray.map(function (weekIndex) {
|
|
744
|
+
return React__default["default"].createElement("tr", {
|
|
745
|
+
key: weekIndex
|
|
746
|
+
}, state.getDatesInWeek(weekIndex).map(function (date, i) {
|
|
747
|
+
return date ? React__default["default"].createElement(CalendarCell, {
|
|
748
|
+
key: i,
|
|
749
|
+
state: state,
|
|
750
|
+
date: date
|
|
751
|
+
}) : React__default["default"].createElement("td", {
|
|
752
|
+
key: i
|
|
753
|
+
});
|
|
754
|
+
}));
|
|
755
|
+
})));
|
|
756
|
+
};
|
|
757
|
+
|
|
758
|
+
var _excluded$4 = ["selectedDate", "style", "children"];
|
|
759
|
+
var Calendar = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
|
|
760
|
+
var style = _ref.style,
|
|
761
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
|
|
762
|
+
|
|
763
|
+
var _useLocale = i18n.useLocale(),
|
|
764
|
+
locale = _useLocale.locale;
|
|
765
|
+
|
|
766
|
+
var state = calendar$1.useCalendarState(_extends({}, rest, {
|
|
767
|
+
locale: locale,
|
|
768
|
+
createCalendar: createCalendar
|
|
769
|
+
}));
|
|
770
|
+
|
|
771
|
+
var _useCalendar = calendar.useCalendar(rest, state),
|
|
772
|
+
calendarProps = _useCalendar.calendarProps,
|
|
773
|
+
prevButtonProps = _useCalendar.prevButtonProps,
|
|
774
|
+
nextButtonProps = _useCalendar.nextButtonProps,
|
|
775
|
+
title = _useCalendar.title; // const monthAndYear = title.split(' ');
|
|
776
|
+
|
|
777
|
+
|
|
778
|
+
return React__default["default"].createElement("div", _extends({}, calendarProps, {
|
|
779
|
+
ref: ref,
|
|
780
|
+
className: "eds-datepicker__calendar",
|
|
781
|
+
style: style
|
|
782
|
+
}), React__default["default"].createElement("div", {
|
|
783
|
+
className: "eds-datepicker__calendar__header"
|
|
784
|
+
}, React__default["default"].createElement(CalendarButton, _extends({}, prevButtonProps, {
|
|
785
|
+
"aria-label": ariaLabelIfNorwegian('Forrige måned', locale, prevButtonProps)
|
|
786
|
+
}), React__default["default"].createElement(icons.LeftArrowIcon, {
|
|
787
|
+
size: 20
|
|
788
|
+
})), React__default["default"].createElement("h2", null, title), React__default["default"].createElement(CalendarButton, _extends({}, nextButtonProps, {
|
|
789
|
+
"aria-label": ariaLabelIfNorwegian('Neste måned', locale, nextButtonProps)
|
|
790
|
+
}), React__default["default"].createElement(icons.RightArrowIcon, {
|
|
791
|
+
size: 20
|
|
792
|
+
}))), React__default["default"].createElement(CalendarGrid, {
|
|
793
|
+
state: state
|
|
794
|
+
}));
|
|
795
|
+
}); // const getTitle = (monthYearList: string[], locale: string) => {
|
|
796
|
+
// const month = monthYearList[0];
|
|
797
|
+
// const year = monthYearList[1];
|
|
798
|
+
// if (locale.toLowerCase() !== 'no-no' && locale.toLowerCase() !== 'no')
|
|
799
|
+
// return month + ' ' + year;
|
|
800
|
+
// switch (month.toLowerCase()) {
|
|
801
|
+
// case 'january':
|
|
802
|
+
// return 'januar ' + year;
|
|
803
|
+
// case 'february':
|
|
804
|
+
// return 'februar ' + year;
|
|
805
|
+
// case 'march':
|
|
806
|
+
// return 'mars ' + year;
|
|
807
|
+
// case 'may':
|
|
808
|
+
// return 'mai ' + year;
|
|
809
|
+
// case 'june':
|
|
810
|
+
// return 'juni ' + year;
|
|
811
|
+
// case 'july':
|
|
812
|
+
// return 'juli ' + year;
|
|
813
|
+
// case 'october':
|
|
814
|
+
// return 'oktober ' + year;
|
|
815
|
+
// case 'december':
|
|
816
|
+
// return 'desember ' + year;
|
|
817
|
+
// default:
|
|
818
|
+
// return month.toLowerCase() + ' ' + year.toLowerCase();
|
|
819
|
+
// }
|
|
820
|
+
// };
|
|
821
|
+
|
|
822
|
+
var _excluded$3 = ["selectedDate", "onChange", "disabled", "className", "style", "variant", "feedback"];
|
|
823
|
+
var DatePickerBeta = function DatePickerBeta(_ref) {
|
|
824
|
+
var value = _ref.selectedDate,
|
|
825
|
+
_onChange = _ref.onChange,
|
|
826
|
+
isDisabled = _ref.disabled,
|
|
827
|
+
className = _ref.className,
|
|
828
|
+
variant = _ref.variant,
|
|
829
|
+
feedback = _ref.feedback,
|
|
830
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
|
|
831
|
+
|
|
832
|
+
var datePickerRef = React.useRef(null);
|
|
833
|
+
var calendarRef = React.useRef(null);
|
|
834
|
+
var dateFieldRef = React.useRef(null); // TODO SE PÅ OM VERDIER I USE...STATE BURDE VÆRE I USE... I STEDET
|
|
835
|
+
|
|
836
|
+
var state = datepicker$1.useDatePickerState(_extends({}, rest, {
|
|
837
|
+
value: value,
|
|
838
|
+
onChange: _onChange
|
|
839
|
+
}));
|
|
840
|
+
|
|
841
|
+
var _useDatePicker = datepicker.useDatePicker(_extends({
|
|
842
|
+
isDisabled: isDisabled
|
|
843
|
+
}, rest), state, datePickerRef),
|
|
844
|
+
groupProps = _useDatePicker.groupProps,
|
|
845
|
+
labelProps = _useDatePicker.labelProps,
|
|
846
|
+
fieldProps = _useDatePicker.fieldProps,
|
|
847
|
+
buttonProps = _useDatePicker.buttonProps,
|
|
848
|
+
dialogProps = _useDatePicker.dialogProps,
|
|
849
|
+
calendarProps = _useDatePicker.calendarProps; // calculations for floating-UI popover position
|
|
850
|
+
|
|
851
|
+
|
|
852
|
+
var _useFloating = reactDom.useFloating({
|
|
853
|
+
placement: 'bottom-start',
|
|
854
|
+
middleware: [reactDom.offset(tokens.space.extraSmall), reactDom.flip(), reactDom.shift({
|
|
855
|
+
padding: tokens.space.extraSmall
|
|
856
|
+
})]
|
|
857
|
+
}),
|
|
858
|
+
x = _useFloating.x,
|
|
859
|
+
y = _useFloating.y,
|
|
860
|
+
reference = _useFloating.reference,
|
|
861
|
+
floating = _useFloating.floating,
|
|
862
|
+
strategy = _useFloating.strategy; // set focus to selected date or today if available on open calendar
|
|
863
|
+
|
|
864
|
+
|
|
865
|
+
React.useEffect(function () {
|
|
866
|
+
var _calendarRef$current, _calendarRef$current2;
|
|
867
|
+
|
|
868
|
+
var gridCellPrefix = 'eds-datepicker__calendar__grid__cell';
|
|
869
|
+
var selectedCell = (_calendarRef$current = calendarRef.current) == null ? void 0 : _calendarRef$current.getElementsByClassName(gridCellPrefix + '--selected')[0];
|
|
870
|
+
var todayCell = (_calendarRef$current2 = calendarRef.current) == null ? void 0 : _calendarRef$current2.getElementsByClassName(gridCellPrefix + '--today')[0];
|
|
871
|
+
if (selectedCell) selectedCell.focus();else if (todayCell) todayCell.focus();
|
|
872
|
+
}, [state.isOpen]);
|
|
873
|
+
utils.useOnClickOutside([calendarRef], function () {
|
|
874
|
+
state.setOpen(false);
|
|
875
|
+
});
|
|
876
|
+
React.useEffect(function () {
|
|
877
|
+
var _calendarRef$current3;
|
|
878
|
+
|
|
879
|
+
var keyDownHandler = function keyDownHandler(event) {
|
|
880
|
+
if (event.key === 'Escape') state.setOpen(false);
|
|
881
|
+
};
|
|
882
|
+
|
|
883
|
+
(_calendarRef$current3 = calendarRef.current) == null ? void 0 : _calendarRef$current3.addEventListener('keydown', keyDownHandler);
|
|
884
|
+
return function () {
|
|
885
|
+
var _calendarRef$current4;
|
|
886
|
+
|
|
887
|
+
return (_calendarRef$current4 = calendarRef.current) == null ? void 0 : _calendarRef$current4.removeEventListener('keydown', keyDownHandler);
|
|
888
|
+
}; // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
889
|
+
}, []);
|
|
890
|
+
return React__default["default"].createElement("div", {
|
|
891
|
+
className: classNames__default["default"]('eds-datepicker', className)
|
|
892
|
+
}, React__default["default"].createElement("div", _extends({}, groupProps, {
|
|
893
|
+
ref: function ref(node) {
|
|
894
|
+
datePickerRef.current = node;
|
|
895
|
+
reference(node);
|
|
896
|
+
},
|
|
897
|
+
className: "eds-datepicker__datefield__wrapper"
|
|
898
|
+
}), React__default["default"].createElement(DateField, _extends({}, fieldProps, {
|
|
899
|
+
selectedDate: state.value,
|
|
900
|
+
label: rest.label,
|
|
901
|
+
labelProps: labelProps,
|
|
902
|
+
ref: dateFieldRef,
|
|
903
|
+
className: classNames__default["default"]('eds-datepicker__datefield', {
|
|
904
|
+
'eds-datepicker__datefield--disabled': fieldProps.isDisabled
|
|
905
|
+
}),
|
|
906
|
+
variant: variant,
|
|
907
|
+
feedback: feedback
|
|
908
|
+
})), !fieldProps.isDisabled && React__default["default"].createElement(CalendarButton, _extends({}, buttonProps, {
|
|
909
|
+
onPress: function onPress() {
|
|
910
|
+
return state.setOpen(!state.isOpen);
|
|
911
|
+
},
|
|
912
|
+
className: "eds-datepicker__open-calendar-button"
|
|
913
|
+
}), React__default["default"].createElement(icons.CalendarIcon, null))), React__default["default"].createElement(FocusLock__default["default"], {
|
|
914
|
+
disabled: !state.isOpen,
|
|
915
|
+
returnFocus: true
|
|
916
|
+
}, React__default["default"].createElement(Calendar, _extends({}, dialogProps, calendarProps, {
|
|
917
|
+
onChange: function onChange(dateValue) {
|
|
918
|
+
_onChange(dateValue);
|
|
919
|
+
|
|
920
|
+
state.setOpen(false);
|
|
921
|
+
},
|
|
922
|
+
disabled: calendarProps.isDisabled,
|
|
923
|
+
ref: function ref(node) {
|
|
924
|
+
calendarRef.current = node;
|
|
925
|
+
floating(node);
|
|
926
|
+
},
|
|
927
|
+
// styling for floating-UI popover
|
|
928
|
+
style: {
|
|
929
|
+
display: state.isOpen ? 'block' : 'none',
|
|
930
|
+
position: strategy,
|
|
931
|
+
top: y != null ? y : 0,
|
|
932
|
+
left: x != null ? x : 0,
|
|
933
|
+
zIndex: 10
|
|
934
|
+
}
|
|
935
|
+
}))));
|
|
936
|
+
};
|
|
937
|
+
|
|
488
938
|
var _excluded$2 = ["className", "style", "label", "onChange", "feedback", "variant", "disableLabelAnimation", "prepend"],
|
|
489
939
|
_excluded2$1 = ["onChange", "variant", "value"];
|
|
490
940
|
var NativeDatePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
|
|
@@ -565,33 +1015,6 @@ var NativeDatePickerBase = /*#__PURE__*/React__default["default"].forwardRef(fun
|
|
|
565
1015
|
}, rest));
|
|
566
1016
|
});
|
|
567
1017
|
|
|
568
|
-
var TimeSegment = function TimeSegment(_ref) {
|
|
569
|
-
var segment = _ref.segment,
|
|
570
|
-
state = _ref.state;
|
|
571
|
-
var ref = React.useRef(null);
|
|
572
|
-
|
|
573
|
-
var _useDateSegment = datepicker.useDateSegment(segment, state, ref),
|
|
574
|
-
segmentProps = _useDateSegment.segmentProps;
|
|
575
|
-
|
|
576
|
-
var is12HourFormatted = state.segments.some(function (segment) {
|
|
577
|
-
return segment.text === 'AM' || segment.text === 'PM';
|
|
578
|
-
});
|
|
579
|
-
|
|
580
|
-
var segmentDisplayText = function segmentDisplayText() {
|
|
581
|
-
if (is12HourFormatted) return segment.text; // if number add '0' padding to start when one digit
|
|
582
|
-
|
|
583
|
-
if (segment.text.match(/\d+/)) return segment.text.padStart(2, '0');
|
|
584
|
-
return segment.text;
|
|
585
|
-
};
|
|
586
|
-
|
|
587
|
-
return React__default["default"].createElement("div", _extends({}, segmentProps, {
|
|
588
|
-
ref: ref,
|
|
589
|
-
className: classNames__default["default"]('eds-timepicker__segment', {
|
|
590
|
-
'eds-timepicker__segment--placeholder': segment.isPlaceholder
|
|
591
|
-
})
|
|
592
|
-
}), segmentDisplayText());
|
|
593
|
-
};
|
|
594
|
-
|
|
595
1018
|
var TimePickerArrowButton = function TimePickerArrowButton(_ref) {
|
|
596
1019
|
var direction = _ref.direction,
|
|
597
1020
|
onClick = _ref.onClick,
|
|
@@ -706,7 +1129,7 @@ var TimePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_re
|
|
|
706
1129
|
variant: variant,
|
|
707
1130
|
feedback: feedback
|
|
708
1131
|
}), state.segments.map(function (segment, i) {
|
|
709
|
-
return React__default["default"].createElement(
|
|
1132
|
+
return React__default["default"].createElement(FieldSegment, {
|
|
710
1133
|
segment: segment,
|
|
711
1134
|
state: state,
|
|
712
1135
|
key: i
|
|
@@ -794,71 +1217,17 @@ var NativeTimePickerBase = /*#__PURE__*/React__default["default"].forwardRef(fun
|
|
|
794
1217
|
}, rest));
|
|
795
1218
|
});
|
|
796
1219
|
|
|
797
|
-
/**
|
|
798
|
-
* Tar inn et JS Date-objekt og returnerer et av TimeValue-objektene fra @internationalized/date-pakken
|
|
799
|
-
* @param {Date} date JS Date-objekt som ønskes konvertert til et TimeValue-objekt
|
|
800
|
-
* @param {boolean} noDateOnlyTime Hvis datoen er irrelevant kan denne settes til true, da får man et Time-objekt uten dato tilbake
|
|
801
|
-
* @param {string} timeZone Tidssonen på IANA-formatet som tidpunktet skal konverteres til. Utelates denne får man et tidspunkt uten tidssone. Kan brukes med og uten en UTC-offset Vær obs på annen oppførsel med offset, les mer på beskrivelsen av offset
|
|
802
|
-
* @param {number} offset UTC-offset i millisekunder, må brukes med en tidssone. Ved å legge på en offset lager du en variant av en tidssone. Det betyr at tidspunktet ikke endres (time, minutt, sekund uendret), men tidssonen, med tilhørende offset, tidspunktet er i endres.
|
|
803
|
-
* @returns {Time | CalendarDateTime | ZonedDateTime} et av TimeValue-objektene med verdier fra date
|
|
804
|
-
*/
|
|
805
|
-
|
|
806
|
-
var nativeDateToTimeValue = function nativeDateToTimeValue(date$1, noDateOnlyTime, timeZone, offset) {
|
|
807
|
-
if (noDateOnlyTime === void 0) {
|
|
808
|
-
noDateOnlyTime = false;
|
|
809
|
-
}
|
|
810
|
-
|
|
811
|
-
if (timeZone) {
|
|
812
|
-
if (offset) {
|
|
813
|
-
return new date.ZonedDateTime(date$1.getFullYear(), date$1.getMonth() + 1, date$1.getDate(), timeZone, offset, date$1.getHours(), date$1.getMinutes(), date$1.getSeconds());
|
|
814
|
-
}
|
|
815
|
-
|
|
816
|
-
return date.parseAbsolute(date$1.toISOString(), timeZone);
|
|
817
|
-
}
|
|
818
|
-
|
|
819
|
-
if (noDateOnlyTime) return new date.Time(date$1.getHours(), date$1.getMinutes(), date$1.getSeconds(), 0);
|
|
820
|
-
return new date.CalendarDateTime(date$1.getFullYear(), date$1.getMonth() + 1, date$1.getDate(), date$1.getHours(), date$1.getMinutes(), date$1.getSeconds());
|
|
821
|
-
};
|
|
822
|
-
/**
|
|
823
|
-
* Tar inn et av TimeValue-objektene fra @internationalized/date-pakken og returnerer et JS Date-objekt
|
|
824
|
-
* @param {TimeValue} time Et tidspunkt på TimeValue-formatet som ønsket konvertert til et JS Date-objekt
|
|
825
|
-
* @param {string} timeZoneForCalendarDateTime Tidssonen time er i. Fungerer kun med typen er CalendarDateTime
|
|
826
|
-
* @returns {Date} et Date-objekt med verdier fra time
|
|
827
|
-
*/
|
|
828
|
-
// This function uses a lot of @ts-expect-error to make it work with all TimeValue types. Sorry ...
|
|
829
|
-
|
|
830
|
-
var timeValueToNativeDate = function timeValueToNativeDate(time, timeZoneForCalendarDateTime) {
|
|
831
|
-
// @ts-expect-error .day does not exist on Time-object
|
|
832
|
-
if (!time.day) {
|
|
833
|
-
// type is Time
|
|
834
|
-
var date = new Date();
|
|
835
|
-
date.setHours(time.hour);
|
|
836
|
-
date.setMinutes(time.minute);
|
|
837
|
-
date.setSeconds(time.second);
|
|
838
|
-
return date;
|
|
839
|
-
} // @ts-expect-error .timeZone does not exist in type Time and CalendarDateTime
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
if (!time.timeZone) {
|
|
843
|
-
// type is CalendarDateTime
|
|
844
|
-
if (timeZoneForCalendarDateTime) // @ts-expect-error .toDate(timeZone) does not exist in type Time
|
|
845
|
-
return time.toDate(timeZoneForCalendarDateTime);
|
|
846
|
-
return new Date( // @ts-expect-error not in type Time
|
|
847
|
-
time.year, // @ts-expect-error not in type Time
|
|
848
|
-
time.month - 1, // @ts-expect-error not in type Time
|
|
849
|
-
time.day, time.hour, time.minute, time.second);
|
|
850
|
-
} // @ts-expect-error .toDate() does not exist in type Time or CalendarDateTime
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
return time.toDate();
|
|
854
|
-
};
|
|
855
|
-
|
|
856
1220
|
utils.warnAboutMissingStyles('datepicker', 'form', 'icons');
|
|
857
1221
|
|
|
1222
|
+
exports.Calendar = Calendar;
|
|
1223
|
+
exports.DateField = DateField;
|
|
858
1224
|
exports.DatePicker = DatePicker;
|
|
1225
|
+
exports.DatePickerBeta = DatePickerBeta;
|
|
859
1226
|
exports.NativeDatePicker = NativeDatePicker;
|
|
860
1227
|
exports.NativeTimePicker = NativeTimePicker;
|
|
861
1228
|
exports.TimePicker = TimePicker;
|
|
1229
|
+
exports.ariaLabelIfNorwegian = ariaLabelIfNorwegian;
|
|
1230
|
+
exports.createCalendar = createCalendar;
|
|
862
1231
|
exports.nativeDateToTimeValue = nativeDateToTimeValue;
|
|
863
1232
|
exports.timeValueToNativeDate = timeValueToNativeDate;
|
|
864
1233
|
//# sourceMappingURL=datepicker.cjs.development.js.map
|