@entur/datepicker 3.0.7 → 4.0.0-RC.1
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 +60 -8
- package/dist/DatePicker/Calendar.d.ts +13 -0
- package/dist/DatePicker/CalendarCell.d.ts +10 -0
- package/dist/DatePicker/CalendarGrid.d.ts +9 -0
- package/dist/DatePicker/DateField.d.ts +46 -0
- package/dist/DatePicker/DatePicker.d.ts +49 -175
- package/dist/DatePicker/index.d.ts +2 -0
- package/dist/TimePicker/index.d.ts +1 -1
- package/dist/datepicker.cjs.development.js +500 -472
- 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 +494 -470
- 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/shared/utils.d.ts +22 -0
- package/dist/styles.css +209 -139
- package/package.json +15 -7
- package/dist/DatePicker/DatePickerHeader.d.ts +0 -9
- package/dist/DatePicker/DatePickerInput.d.ts +0 -31
- package/dist/TimePicker/utils.d.ts +0 -18
|
@@ -4,26 +4,28 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var utils = require('@entur/utils');
|
|
6
6
|
var React = require('react');
|
|
7
|
-
var
|
|
8
|
-
var dateFns = require('date-fns');
|
|
9
|
-
var locale = require('date-fns/locale');
|
|
10
|
-
var classNames = require('classnames');
|
|
11
|
-
var icons = require('@entur/icons');
|
|
12
|
-
var typography = require('@entur/typography');
|
|
13
|
-
var button = require('@entur/button');
|
|
14
|
-
var form = require('@entur/form');
|
|
15
|
-
var tooltip = require('@entur/tooltip');
|
|
16
|
-
require('react-datepicker/dist/react-datepicker.css');
|
|
7
|
+
var datepicker$1 = require('@react-stately/datepicker');
|
|
17
8
|
var datepicker = require('@react-aria/datepicker');
|
|
18
9
|
var i18n = require('@react-aria/i18n');
|
|
19
|
-
var
|
|
10
|
+
var classNames = require('classnames');
|
|
11
|
+
var form = require('@entur/form');
|
|
20
12
|
var date = require('@internationalized/date');
|
|
13
|
+
var calendar = require('@react-aria/calendar');
|
|
14
|
+
var calendar$1 = require('@react-stately/calendar');
|
|
15
|
+
var icons = require('@entur/icons');
|
|
16
|
+
var button = require('@react-aria/button');
|
|
17
|
+
var button$1 = require('@entur/button');
|
|
18
|
+
var a11y = require('@entur/a11y');
|
|
19
|
+
var reactDom = require('@floating-ui/react-dom');
|
|
20
|
+
var FocusLock = require('react-focus-lock');
|
|
21
|
+
var tokens = require('@entur/tokens');
|
|
22
|
+
var modal = require('@entur/modal');
|
|
21
23
|
|
|
22
24
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
23
25
|
|
|
24
26
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
25
|
-
var ReactDatepicker__default = /*#__PURE__*/_interopDefaultLegacy(ReactDatepicker);
|
|
26
27
|
var classNames__default = /*#__PURE__*/_interopDefaultLegacy(classNames);
|
|
28
|
+
var FocusLock__default = /*#__PURE__*/_interopDefaultLegacy(FocusLock);
|
|
27
29
|
|
|
28
30
|
function _extends() {
|
|
29
31
|
_extends = Object.assign || function (target) {
|
|
@@ -58,432 +60,540 @@ function _objectWithoutPropertiesLoose(source, excluded) {
|
|
|
58
60
|
return target;
|
|
59
61
|
}
|
|
60
62
|
|
|
61
|
-
var
|
|
62
|
-
var
|
|
63
|
-
|
|
64
|
-
var
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
nextMonthButtonDisabled = _ref.nextMonthButtonDisabled,
|
|
69
|
-
nextMonthAriaLabel = _ref.nextMonthAriaLabel,
|
|
70
|
-
previousMonthAriaLabel = _ref.previousMonthAriaLabel,
|
|
71
|
-
locale = _ref.locale;
|
|
72
|
-
var currentMonthIndex = (_date$getMonth = date == null ? void 0 : date.getMonth()) != null ? _date$getMonth : 0;
|
|
73
|
-
return React__default["default"].createElement("div", {
|
|
74
|
-
className: "eds-datepicker__calender__header"
|
|
75
|
-
}, React__default["default"].createElement(button.IconButton, {
|
|
76
|
-
type: "button",
|
|
77
|
-
className: "eds-datepicker__calender__header__month-button--left",
|
|
78
|
-
onClick: decreaseMonth,
|
|
79
|
-
disabled: prevMonthButtonDisabled,
|
|
80
|
-
"aria-label": previousMonthAriaLabel + " (" + getMonthName(currentMonthIndex - 1, locale) + ")"
|
|
81
|
-
}, React__default["default"].createElement(icons.LeftArrowIcon, null)), React__default["default"].createElement(typography.Heading3, {
|
|
82
|
-
className: "eds-datepicker__calender__header__month-text"
|
|
83
|
-
}, getMonthName(currentMonthIndex, locale)), React__default["default"].createElement(typography.Heading3, {
|
|
84
|
-
className: "eds-datepicker__calender__header__month-text"
|
|
85
|
-
}, date == null ? void 0 : date.getFullYear()), React__default["default"].createElement(button.IconButton, {
|
|
86
|
-
type: "button",
|
|
87
|
-
className: "eds-datepicker__calender__header__month-button--right",
|
|
88
|
-
onClick: increaseMonth,
|
|
89
|
-
disabled: nextMonthButtonDisabled,
|
|
90
|
-
"aria-label": nextMonthAriaLabel + " (" + getMonthName(currentMonthIndex + 1, locale) + ")"
|
|
91
|
-
}, React__default["default"].createElement(icons.RightArrowIcon, null)));
|
|
92
|
-
};
|
|
63
|
+
var FieldSegment = function FieldSegment(_ref) {
|
|
64
|
+
var segment = _ref.segment,
|
|
65
|
+
state = _ref.state;
|
|
66
|
+
var ref = React.useRef(null);
|
|
67
|
+
|
|
68
|
+
var _useDateSegment = datepicker.useDateSegment(segment, state, ref),
|
|
69
|
+
segmentProps = _useDateSegment.segmentProps;
|
|
93
70
|
|
|
94
|
-
function
|
|
95
|
-
|
|
96
|
-
var formatter = new Intl.DateTimeFormat(locale.code, {
|
|
97
|
-
month: 'long'
|
|
71
|
+
var is12HourFormatted = state.segments.some(function (segment) {
|
|
72
|
+
return segment.text === 'AM' || segment.text === 'PM';
|
|
98
73
|
});
|
|
99
|
-
return formatter.format(new Date(year, monthIndex));
|
|
100
|
-
}
|
|
101
74
|
|
|
102
|
-
var
|
|
103
|
-
|
|
104
|
-
var style = _ref.style,
|
|
105
|
-
label = _ref.label,
|
|
106
|
-
inputPlaceholder = _ref.inputPlaceholder,
|
|
107
|
-
prepend = _ref.prepend,
|
|
108
|
-
feedback = _ref.feedback,
|
|
109
|
-
variant = _ref.variant,
|
|
110
|
-
disabled = _ref.disabled,
|
|
111
|
-
calendarButtonTooltipOpen = _ref.calendarButtonTooltipOpen,
|
|
112
|
-
calendarButtonTooltipClose = _ref.calendarButtonTooltipClose,
|
|
113
|
-
hideCalendarButton = _ref.hideCalendarButton,
|
|
114
|
-
disableLabelAnimation = _ref.disableLabelAnimation,
|
|
115
|
-
inputRef = _ref.inputRef,
|
|
116
|
-
calendarButtonId = _ref.calendarButtonId,
|
|
117
|
-
forwardRef = _ref.forwardRef,
|
|
118
|
-
toggleCalendarGUI = _ref.toggleCalendarGUI,
|
|
119
|
-
onKeyDownInput = _ref.onKeyDownInput,
|
|
120
|
-
onBlurInput = _ref.onBlurInput,
|
|
121
|
-
selectedDate = _ref.selectedDate,
|
|
122
|
-
setFocusToCalendarGUI = _ref.setFocusToCalendarGUI,
|
|
123
|
-
setShouldFocusOnCalendarButtonAfterSelect = _ref.setShouldFocusOnCalendarButtonAfterSelect,
|
|
124
|
-
calendarGUIIsOpen = _ref.calendarGUIIsOpen,
|
|
125
|
-
onClick = _ref.onClick,
|
|
126
|
-
rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
|
|
75
|
+
var segmentDisplayText = function segmentDisplayText() {
|
|
76
|
+
if (is12HourFormatted) return segment.text; // if number add '0' padding to start when one digit
|
|
127
77
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
78
|
+
if (segment.text.match(/\d+/)) return segment.text.padStart(2, '0');
|
|
79
|
+
return segment.text;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
return React__default["default"].createElement("div", _extends({}, segmentProps, {
|
|
83
|
+
ref: ref,
|
|
84
|
+
className: classNames__default["default"]('eds-date-and-time-field__segment', {
|
|
85
|
+
'eds-date-and-time-field__segment--placeholder': segment.isPlaceholder,
|
|
86
|
+
'eds-date-and-time-field__segment--dot-separator': segment.text === '.'
|
|
87
|
+
}),
|
|
88
|
+
tabIndex: state.isDisabled ? -1 : segmentProps.tabIndex
|
|
89
|
+
}), segmentDisplayText());
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Tar inn et JS Date-objekt og returnerer et av Date- eller TimeValue-objektene fra @internationalized/date-pakken
|
|
94
|
+
* @param {Date} date JS Date-objekt som ønskes konvertert til et Date- eller TimeValue-objekt
|
|
95
|
+
* @param {boolean} noDateOnlyTime Hvis datoen er irrelevant kan denne settes til true, da får man et Time-objekt uten dato tilbake
|
|
96
|
+
* @param {boolean} noTimeOnlyDate Hvis tidspunktet er irrelevant kan denne settes til true, da får man et CalendarDate-objekt uten tidspunkt tilbake
|
|
97
|
+
* @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
|
|
98
|
+
* @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.
|
|
99
|
+
* @returns {Time | CalendarDateTime | ZonedDateTime | CalendarDate} et av Time- eller DateValue-objektene med verdier fra date
|
|
100
|
+
*/
|
|
101
|
+
|
|
102
|
+
var nativeDateToTimeOrDateValue = function nativeDateToTimeOrDateValue(date$1, noDateOnlyTime, noTimeOnlyDate, timeZone, offset) {
|
|
103
|
+
if (noDateOnlyTime === void 0) {
|
|
104
|
+
noDateOnlyTime = false;
|
|
145
105
|
}
|
|
146
106
|
|
|
147
|
-
|
|
148
|
-
|
|
107
|
+
if (noTimeOnlyDate === void 0) {
|
|
108
|
+
noTimeOnlyDate = false;
|
|
149
109
|
}
|
|
150
110
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
111
|
+
if (timeZone) {
|
|
112
|
+
if (offset) {
|
|
113
|
+
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());
|
|
114
|
+
}
|
|
154
115
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
};
|
|
116
|
+
return date.parseAbsolute(date$1.toISOString(), timeZone);
|
|
117
|
+
}
|
|
158
118
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
119
|
+
if (noDateOnlyTime) return new date.Time(date$1.getHours(), date$1.getMinutes(), date$1.getSeconds(), 0);
|
|
120
|
+
if (noTimeOnlyDate) return new date.CalendarDate(date$1.getFullYear(), date$1.getMonth() + 1, date$1.getDate());
|
|
121
|
+
return new date.CalendarDateTime(date$1.getFullYear(), date$1.getMonth() + 1, date$1.getDate(), date$1.getHours(), date$1.getMinutes(), date$1.getSeconds());
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* Tar inn et av Date- eller TimeValue-objektene fra @internationalized/date-pakken og returnerer et JS Date-objekt
|
|
125
|
+
* @param {DateValue | TimeValue} value En dato eller et tidspunkt på Date- eller TimeValue-formatet som ønskes konvertert til et JS Date-objekt
|
|
126
|
+
* @param {string} timeZoneForCalendarDateTime Tidssonen value er i. Fungerer kun med typen er CalendarDateTime
|
|
127
|
+
* @returns {Date} et Date-objekt med verdier fra time
|
|
128
|
+
*/
|
|
129
|
+
// This function uses a lot of @ts-expect-error to make it work with all Date- and TimeValue types. Sorry ...
|
|
163
130
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
131
|
+
var timeOrDateValueToNativeDate = function timeOrDateValueToNativeDate(value, timeZoneForCalendarDateTime) {
|
|
132
|
+
// @ts-expect-error .day does not exist on Time-object
|
|
133
|
+
if (!value.day) {
|
|
134
|
+
// type is Time
|
|
135
|
+
var date$1 = new Date(); // @ts-expect-error hour does not exist on CalendarDate
|
|
169
136
|
|
|
170
|
-
|
|
171
|
-
var _inputRef$current8;
|
|
137
|
+
date$1.setHours(value.hour); // @ts-expect-error minute does not exist on CalendarDate
|
|
172
138
|
|
|
173
|
-
|
|
174
|
-
var currentSelectionText = selectedDate ? ((_inputRef$current8 = inputRef.current) == null ? void 0 : _inputRef$current8.value) + " valgt" : 'Ingen dato valgt';
|
|
175
|
-
return buttonStateText + ", " + currentSelectionText;
|
|
176
|
-
};
|
|
139
|
+
date$1.setMinutes(value.minute); // @ts-expect-error second does not exist on CalendarDate
|
|
177
140
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
placeholder: inputPlaceholder,
|
|
182
|
-
prepend: prepend,
|
|
183
|
-
feedback: feedback,
|
|
184
|
-
variant: variant,
|
|
185
|
-
disableLabelAnimation: disableLabelAnimation,
|
|
186
|
-
ref: utils.mergeRefs(ref, inputRef, forwardRef),
|
|
187
|
-
onClick: handleOnClickInputField,
|
|
188
|
-
ariaAlertOnFeedback: true,
|
|
189
|
-
append: !hideCalendarButton && React__default["default"].createElement(tooltip.Tooltip, {
|
|
190
|
-
placement: "top",
|
|
191
|
-
content: calendarGUIIsOpen() ? calendarButtonTooltipClose : calendarButtonTooltipOpen,
|
|
192
|
-
disableHoverListener: disabled,
|
|
193
|
-
disableFocusListener: disabled
|
|
194
|
-
}, React__default["default"].createElement(button.IconButton, {
|
|
195
|
-
id: calendarButtonId,
|
|
196
|
-
type: "button",
|
|
197
|
-
onClick: handleOnClickCalendarButton,
|
|
198
|
-
tabIndex: calendarGUIIsOpen() ? -1 : 0,
|
|
199
|
-
"aria-label": calendarButtonAriaLabel()
|
|
200
|
-
}, React__default["default"].createElement(icons.CalendarIcon, null)))
|
|
201
|
-
}, rest));
|
|
202
|
-
});
|
|
141
|
+
date$1.setSeconds(value.second);
|
|
142
|
+
return date$1;
|
|
143
|
+
} // @ts-expect-error .day does not exist on Time-object
|
|
203
144
|
|
|
204
|
-
var _excluded$3 = ["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
|
-
ReactDatepicker.registerLocale('nb', locale.nb);
|
|
206
|
-
var DatePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
|
|
207
|
-
var style = _ref.style,
|
|
208
|
-
className = _ref.className,
|
|
209
|
-
selectedDate = _ref.selectedDate,
|
|
210
|
-
label = _ref.label,
|
|
211
|
-
_ref$placeholder = _ref.placeholder,
|
|
212
|
-
placeholder = _ref$placeholder === void 0 ? 'dd.mm.yyyy' : _ref$placeholder,
|
|
213
|
-
onChange = _ref.onChange,
|
|
214
|
-
_ref$onKeyDown = _ref.onKeyDown,
|
|
215
|
-
onKeyDown = _ref$onKeyDown === void 0 ? function () {
|
|
216
|
-
return null;
|
|
217
|
-
} : _ref$onKeyDown,
|
|
218
|
-
_ref$dateFormats = _ref.dateFormats,
|
|
219
|
-
dateFormats = _ref$dateFormats === void 0 ? ['dd.MM.yyyy', 'ddMMyyyy', 'dd/MM/yyyy', 'ddMMyy'] : _ref$dateFormats,
|
|
220
|
-
minDate = _ref.minDate,
|
|
221
|
-
maxDate = _ref.maxDate,
|
|
222
|
-
_ref$inline = _ref.inline,
|
|
223
|
-
inline = _ref$inline === void 0 ? false : _ref$inline,
|
|
224
|
-
disabled = _ref.disabled,
|
|
225
|
-
prepend = _ref.prepend,
|
|
226
|
-
_ref$feedback = _ref.feedback,
|
|
227
|
-
feedback = _ref$feedback === void 0 ? '' : _ref$feedback,
|
|
228
|
-
variant = _ref.variant,
|
|
229
|
-
_ref$validationFeedba = _ref.validationFeedback,
|
|
230
|
-
validationFeedback = _ref$validationFeedba === void 0 ? 'Ugyldig dato' : _ref$validationFeedba,
|
|
231
|
-
_ref$validationVarian = _ref.validationVariant,
|
|
232
|
-
validationVariant = _ref$validationVarian === void 0 ? 'error' : _ref$validationVarian,
|
|
233
|
-
_ref$disableLabelAnim = _ref.disableLabelAnimation,
|
|
234
|
-
disableLabelAnimation = _ref$disableLabelAnim === void 0 ? false : _ref$disableLabelAnim,
|
|
235
|
-
_ref$calendarButtonTo = _ref.calendarButtonTooltipOpen,
|
|
236
|
-
calendarButtonTooltipOpen = _ref$calendarButtonTo === void 0 ? 'Åpne\xa0kalender' : _ref$calendarButtonTo,
|
|
237
|
-
_ref$calendarButtonTo2 = _ref.calendarButtonTooltipClose,
|
|
238
|
-
calendarButtonTooltipClose = _ref$calendarButtonTo2 === void 0 ? 'Lukk\xa0kalender' : _ref$calendarButtonTo2,
|
|
239
|
-
_ref$hideCalendarButt = _ref.hideCalendarButton,
|
|
240
|
-
hideCalendarButton = _ref$hideCalendarButt === void 0 ? false : _ref$hideCalendarButt,
|
|
241
|
-
_ref$hideCalendar = _ref.hideCalendar,
|
|
242
|
-
hideCalendar = _ref$hideCalendar === void 0 ? false : _ref$hideCalendar,
|
|
243
|
-
_ref$hideValidation = _ref.hideValidation,
|
|
244
|
-
hideValidation = _ref$hideValidation === void 0 ? false : _ref$hideValidation,
|
|
245
|
-
_ref$weekLabel = _ref.weekLabel,
|
|
246
|
-
weekLabel = _ref$weekLabel === void 0 ? 'uke' : _ref$weekLabel,
|
|
247
|
-
_ref$chooseDayAriaLab = _ref.chooseDayAriaLabelPrefix,
|
|
248
|
-
chooseDayAriaLabelPrefix = _ref$chooseDayAriaLab === void 0 ? 'Velg' : _ref$chooseDayAriaLab,
|
|
249
|
-
_ref$previousMonthAri = _ref.previousMonthAriaLabel,
|
|
250
|
-
previousMonthAriaLabel = _ref$previousMonthAri === void 0 ? 'Forrige måned' : _ref$previousMonthAri,
|
|
251
|
-
_ref$nextMonthAriaLab = _ref.nextMonthAriaLabel,
|
|
252
|
-
nextMonthAriaLabel = _ref$nextMonthAriaLab === void 0 ? 'Neste måned' : _ref$nextMonthAriaLab,
|
|
253
|
-
_ref$locale = _ref.locale,
|
|
254
|
-
locale$1 = _ref$locale === void 0 ? locale.nb : _ref$locale,
|
|
255
|
-
open = _ref.open,
|
|
256
|
-
rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
|
|
257
145
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
146
|
+
if (!value.hour) {
|
|
147
|
+
// type is CalendarDate
|
|
148
|
+
// @ts-expect-error .toDate(timeZone) does not exist in type Time
|
|
149
|
+
return value.toDate(timeZoneForCalendarDateTime != null ? timeZoneForCalendarDateTime : date.getLocalTimeZone());
|
|
150
|
+
} // @ts-expect-error .timeZone does not exist in type Time and CalendarDateTime
|
|
262
151
|
|
|
263
|
-
var _useState = React.useState(false),
|
|
264
|
-
showValidation = _useState[0],
|
|
265
|
-
setShowValidation = _useState[1];
|
|
266
152
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
153
|
+
if (!value.timeZone) {
|
|
154
|
+
// type is CalendarDateTime
|
|
155
|
+
if (timeZoneForCalendarDateTime) // @ts-expect-error .toDate(timeZone) does not exist in type Time
|
|
156
|
+
return value.toDate(timeZoneForCalendarDateTime);
|
|
157
|
+
return new Date( // @ts-expect-error not in type Time
|
|
158
|
+
value.year, // @ts-expect-error not in type Time
|
|
159
|
+
value.month - 1, // @ts-expect-error not in type Time
|
|
160
|
+
value.day, // @ts-expect-error not in type CalendarDate
|
|
161
|
+
value.hour, // @ts-expect-error not in type CalendarDate
|
|
162
|
+
value.minute, // @ts-expect-error not in type CalendarDate
|
|
163
|
+
value.second);
|
|
164
|
+
} // @ts-expect-error .toDate() does not exist in type Time or CalendarDateTime
|
|
270
165
|
|
|
271
166
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
167
|
+
return value.toDate();
|
|
168
|
+
};
|
|
169
|
+
var createCalendar = function createCalendar(identifier) {
|
|
170
|
+
if (identifier === void 0) {
|
|
171
|
+
identifier = 'gregory';
|
|
172
|
+
}
|
|
275
173
|
|
|
276
|
-
|
|
277
|
-
|
|
174
|
+
switch (identifier) {
|
|
175
|
+
case 'gregory':
|
|
176
|
+
return new date.GregorianCalendar();
|
|
278
177
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
178
|
+
default:
|
|
179
|
+
throw new Error("Unsupported calendar " + identifier);
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
var ariaLabelIfNorwegian = function ariaLabelIfNorwegian(norwegianAriaLabel, locale, propsCollection) {
|
|
183
|
+
if (locale.toLowerCase() !== 'no-no') return propsCollection['aria-label'];
|
|
184
|
+
return norwegianAriaLabel;
|
|
185
|
+
};
|
|
283
186
|
|
|
284
|
-
|
|
285
|
-
|
|
187
|
+
var _excluded$8 = ["selectedDate", "label", "locale", "showTimeZone", "showTime", "granularity", "disabled", "variant", "feedback", "validationVariant", "validationFeedback", "labelTooltip", "style", "className", "labelProps", "append"];
|
|
188
|
+
var DateField = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
|
|
189
|
+
var value = _ref.selectedDate,
|
|
190
|
+
label = _ref.label,
|
|
191
|
+
customLocale = _ref.locale,
|
|
192
|
+
showTimeZone = _ref.showTimeZone,
|
|
193
|
+
showTime = _ref.showTime,
|
|
194
|
+
_ref$granularity = _ref.granularity,
|
|
195
|
+
granularity = _ref$granularity === void 0 ? 'day' : _ref$granularity,
|
|
196
|
+
disabled = _ref.disabled,
|
|
197
|
+
variant = _ref.variant,
|
|
198
|
+
feedback = _ref.feedback,
|
|
199
|
+
_ref$validationVarian = _ref.validationVariant,
|
|
200
|
+
validationVariant = _ref$validationVarian === void 0 ? 'error' : _ref$validationVarian,
|
|
201
|
+
_ref$validationFeedba = _ref.validationFeedback,
|
|
202
|
+
validationFeedback = _ref$validationFeedba === void 0 ? 'Ugyldig dato' : _ref$validationFeedba,
|
|
203
|
+
labelTooltip = _ref.labelTooltip,
|
|
204
|
+
style = _ref.style,
|
|
205
|
+
className = _ref.className,
|
|
206
|
+
parentLabelProps = _ref.labelProps,
|
|
207
|
+
append = _ref.append,
|
|
208
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$8);
|
|
286
209
|
|
|
287
|
-
var
|
|
288
|
-
|
|
210
|
+
var _useLocale = i18n.useLocale(),
|
|
211
|
+
locale = _useLocale.locale;
|
|
289
212
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
213
|
+
var state = datepicker$1.useDateFieldState(_extends({}, rest, {
|
|
214
|
+
locale: customLocale != null ? customLocale : locale,
|
|
215
|
+
createCalendar: createCalendar,
|
|
216
|
+
value: value === null ? undefined : value,
|
|
217
|
+
hideTimeZone: !showTimeZone,
|
|
218
|
+
granularity: showTime ? 'minute' : granularity
|
|
219
|
+
}));
|
|
220
|
+
var dateFieldRef = React.useRef(null);
|
|
296
221
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
222
|
+
var _useDateField = datepicker.useDateField(_extends({}, rest, {
|
|
223
|
+
label: label,
|
|
224
|
+
isDisabled: disabled || rest.isDisabled
|
|
225
|
+
}), state, dateFieldRef),
|
|
226
|
+
labelProps = _useDateField.labelProps,
|
|
227
|
+
fieldProps = _useDateField.fieldProps;
|
|
228
|
+
|
|
229
|
+
var id = utils.useRandomId('datefield');
|
|
230
|
+
return React__default["default"].createElement(utils.ConditionalWrapper, {
|
|
231
|
+
condition: customLocale !== undefined,
|
|
232
|
+
wrapper: function wrapper(child) {
|
|
233
|
+
return React__default["default"].createElement(i18n.I18nProvider, {
|
|
234
|
+
locale: customLocale
|
|
235
|
+
}, child);
|
|
304
236
|
}
|
|
237
|
+
}, React__default["default"].createElement(form.BaseFormControl, _extends({
|
|
238
|
+
style: style,
|
|
239
|
+
className: classNames__default["default"]('eds-datefield', className),
|
|
240
|
+
labelId: id,
|
|
241
|
+
ref: utils.mergeRefs(dateFieldRef, ref),
|
|
242
|
+
disabled: state.isDisabled,
|
|
243
|
+
disableLabelAnimation: true,
|
|
244
|
+
label: label,
|
|
245
|
+
labelTooltip: labelTooltip,
|
|
246
|
+
labelProps: parentLabelProps != null ? parentLabelProps : labelProps
|
|
247
|
+
}, fieldProps, {
|
|
248
|
+
variant: (variant != null ? variant : state.validationState === 'invalid') ? validationVariant : undefined,
|
|
249
|
+
feedback: (feedback != null ? feedback : state.validationState === 'invalid') ? validationFeedback : undefined,
|
|
250
|
+
append: append,
|
|
251
|
+
ariaAlertOnFeedback: true
|
|
252
|
+
}), state.segments.map(function (segment, i) {
|
|
253
|
+
return React__default["default"].createElement(FieldSegment, {
|
|
254
|
+
segment: segment,
|
|
255
|
+
state: state,
|
|
256
|
+
key: i
|
|
257
|
+
});
|
|
258
|
+
})));
|
|
259
|
+
});
|
|
305
260
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
261
|
+
var _excluded$7 = ["children", "className", "style"];
|
|
262
|
+
var CalendarButton = function CalendarButton(_ref) {
|
|
263
|
+
var children = _ref.children,
|
|
264
|
+
className = _ref.className,
|
|
265
|
+
style = _ref.style,
|
|
266
|
+
props = _objectWithoutPropertiesLoose(_ref, _excluded$7);
|
|
312
267
|
|
|
313
|
-
var
|
|
314
|
-
if (datePickerGUIIsOpen()) return;
|
|
315
|
-
validateInput();
|
|
316
|
-
forceUpdateInputFormat();
|
|
317
|
-
};
|
|
268
|
+
var ref = React.useRef(null);
|
|
318
269
|
|
|
319
|
-
var
|
|
320
|
-
|
|
270
|
+
var _useButton = button.useButton(props, ref),
|
|
271
|
+
buttonProps = _useButton.buttonProps;
|
|
321
272
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
});
|
|
329
|
-
});
|
|
330
|
-
var parsedDateFromInputIsTheSameAsSelectedDate = selectedDate && inputValueParsedWithAllDateFormats.some(function (dateFormat) {
|
|
331
|
-
return dateFns.isSameDay(dateFormat, selectedDate);
|
|
332
|
-
});
|
|
273
|
+
return React__default["default"].createElement(button$1.IconButton, _extends({}, buttonProps, {
|
|
274
|
+
ref: ref,
|
|
275
|
+
className: className,
|
|
276
|
+
style: style
|
|
277
|
+
}), children);
|
|
278
|
+
};
|
|
333
279
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
280
|
+
var _excluded$6 = ["state", "date", "onSelectedCellClick"];
|
|
281
|
+
var CalendarCell = function CalendarCell(_ref) {
|
|
282
|
+
var _state$timeZone;
|
|
283
|
+
|
|
284
|
+
var state = _ref.state,
|
|
285
|
+
date$1 = _ref.date,
|
|
286
|
+
_ref$onSelectedCellCl = _ref.onSelectedCellClick,
|
|
287
|
+
onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
|
|
288
|
+
return;
|
|
289
|
+
} : _ref$onSelectedCellCl,
|
|
290
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
|
|
291
|
+
|
|
292
|
+
var cellRef = React.useRef(null);
|
|
293
|
+
|
|
294
|
+
var _useCalendarCell = calendar.useCalendarCell({
|
|
295
|
+
date: date$1
|
|
296
|
+
}, state, cellRef),
|
|
297
|
+
cellProps = _useCalendarCell.cellProps,
|
|
298
|
+
buttonProps = _useCalendarCell.buttonProps,
|
|
299
|
+
isSelected = _useCalendarCell.isSelected,
|
|
300
|
+
isOutsideVisibleRange = _useCalendarCell.isOutsideVisibleRange,
|
|
301
|
+
isDisabled = _useCalendarCell.isDisabled,
|
|
302
|
+
isUnavailable = _useCalendarCell.isUnavailable,
|
|
303
|
+
formattedDate = _useCalendarCell.formattedDate;
|
|
304
|
+
|
|
305
|
+
return React__default["default"].createElement("td", _extends({}, cellProps, {
|
|
306
|
+
className: "eds-datepicker__calendar__grid__cell__td"
|
|
307
|
+
}), React__default["default"].createElement("div", _extends({}, buttonProps, {
|
|
308
|
+
ref: cellRef,
|
|
309
|
+
hidden: isOutsideVisibleRange,
|
|
310
|
+
className: classNames__default["default"]('eds-datepicker__calendar__grid__cell', {
|
|
311
|
+
'eds-datepicker__calendar__grid__cell--selected': isSelected,
|
|
312
|
+
'eds-datepicker__calendar__grid__cell--disabled': isDisabled || isUnavailable,
|
|
313
|
+
'eds-datepicker__calendar__grid__cell--outside-month': isOutsideVisibleRange,
|
|
314
|
+
'eds-datepicker__calendar__grid__cell--today': date.isEqualDay(date$1, date.now((_state$timeZone = state.timeZone) != null ? _state$timeZone : date.getLocalTimeZone()))
|
|
315
|
+
})
|
|
316
|
+
}, rest, {
|
|
317
|
+
onClick: function onClick(e) {
|
|
318
|
+
buttonProps.onClick && buttonProps.onClick(e);
|
|
319
|
+
isSelected && onSelectedCellClick();
|
|
340
320
|
}
|
|
341
|
-
};
|
|
321
|
+
}), formattedDate));
|
|
322
|
+
};
|
|
342
323
|
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
return {
|
|
353
|
-
feedback: '',
|
|
354
|
-
variant: undefined
|
|
355
|
-
};
|
|
356
|
-
};
|
|
324
|
+
var _excluded$5 = ["state", "navigationDescription", "onSelectedCellClick"];
|
|
325
|
+
var CalendarGrid = function CalendarGrid(_ref) {
|
|
326
|
+
var state = _ref.state,
|
|
327
|
+
navigationDescription = _ref.navigationDescription,
|
|
328
|
+
_ref$onSelectedCellCl = _ref.onSelectedCellClick,
|
|
329
|
+
onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
|
|
330
|
+
return;
|
|
331
|
+
} : _ref$onSelectedCellCl,
|
|
332
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
|
|
357
333
|
|
|
358
|
-
var
|
|
359
|
-
return requestAnimationFrame(function () {
|
|
360
|
-
var _inputRef$current3;
|
|
334
|
+
var calendarGridId = utils.useRandomId('eds-calendar');
|
|
361
335
|
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
336
|
+
var _useLocale = i18n.useLocale(),
|
|
337
|
+
locale = _useLocale.locale;
|
|
338
|
+
|
|
339
|
+
var _useCalendarGrid = calendar.useCalendarGrid(rest, state),
|
|
340
|
+
gridProps = _useCalendarGrid.gridProps,
|
|
341
|
+
headerProps = _useCalendarGrid.headerProps,
|
|
342
|
+
weekDays = _useCalendarGrid.weekDays;
|
|
365
343
|
|
|
366
|
-
var
|
|
367
|
-
|
|
344
|
+
var weeksInMonth = date.getWeeksInMonth(state.visibleRange.start, locale);
|
|
345
|
+
var weeksArray = Array.from(Array(weeksInMonth).keys());
|
|
368
346
|
|
|
369
|
-
|
|
370
|
-
|
|
347
|
+
var weekDaysMapped = function weekDaysMapped() {
|
|
348
|
+
if (locale.toLowerCase() === 'no-no' || locale.toLowerCase() === 'no') return ['ma', 'ti', 'on', 'to', 'fr', 'lø', 'sø'];
|
|
349
|
+
if (weekDays.toString() === 'M,T,W,T,F,S,S') return ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];
|
|
350
|
+
return weekDays.map(function (day) {
|
|
351
|
+
return day.toLowerCase();
|
|
371
352
|
});
|
|
372
353
|
};
|
|
373
354
|
|
|
374
|
-
var
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
return
|
|
355
|
+
var getNavigationDescription = function getNavigationDescription() {
|
|
356
|
+
if (navigationDescription) return navigationDescription;
|
|
357
|
+
if (locale.toLowerCase().includes('en')) return 'Use the arrow keys to navigate between dates';
|
|
358
|
+
return 'Bruk piltastene til å navigere mellom datoer';
|
|
378
359
|
};
|
|
379
360
|
|
|
380
|
-
|
|
381
|
-
|
|
361
|
+
return React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement("table", _extends({}, gridProps, {
|
|
362
|
+
cellSpacing: "0",
|
|
363
|
+
className: "eds-datepicker__calendar__grid"
|
|
364
|
+
}), React__default["default"].createElement("thead", _extends({}, headerProps), React__default["default"].createElement("tr", null, weekDaysMapped().map(function (day, index) {
|
|
365
|
+
return React__default["default"].createElement("th", {
|
|
366
|
+
key: index
|
|
367
|
+
}, day);
|
|
368
|
+
}))), React__default["default"].createElement("tbody", null, weeksArray.map(function (weekIndex) {
|
|
369
|
+
return React__default["default"].createElement("tr", {
|
|
370
|
+
key: weekIndex
|
|
371
|
+
}, state.getDatesInWeek(weekIndex).map(function (date, i) {
|
|
372
|
+
return date ? React__default["default"].createElement(CalendarCell, {
|
|
373
|
+
key: i,
|
|
374
|
+
state: state,
|
|
375
|
+
date: date,
|
|
376
|
+
"aria-describedby": calendarGridId + 'description',
|
|
377
|
+
onSelectedCellClick: onSelectedCellClick
|
|
378
|
+
}) : React__default["default"].createElement("td", {
|
|
379
|
+
key: i
|
|
380
|
+
});
|
|
381
|
+
}));
|
|
382
|
+
}))), React__default["default"].createElement(a11y.VisuallyHidden, {
|
|
383
|
+
id: calendarGridId + 'description'
|
|
384
|
+
}, getNavigationDescription()));
|
|
385
|
+
};
|
|
382
386
|
|
|
383
|
-
|
|
384
|
-
|
|
387
|
+
var _excluded$4 = ["selectedDate", "onChange", "locale", "style", "children", "navigationDescription", "onSelectedCellClick"];
|
|
388
|
+
var Calendar = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
|
|
389
|
+
var onChange = _ref.onChange,
|
|
390
|
+
customLocale = _ref.locale,
|
|
391
|
+
style = _ref.style,
|
|
392
|
+
navigationDescription = _ref.navigationDescription,
|
|
393
|
+
_ref$onSelectedCellCl = _ref.onSelectedCellClick,
|
|
394
|
+
onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
|
|
395
|
+
return;
|
|
396
|
+
} : _ref$onSelectedCellCl,
|
|
397
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
|
|
398
|
+
|
|
399
|
+
var _useLocale = i18n.useLocale(),
|
|
400
|
+
locale = _useLocale.locale;
|
|
385
401
|
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
402
|
+
var state = calendar$1.useCalendarState(_extends({}, rest, {
|
|
403
|
+
onChange: onChange,
|
|
404
|
+
locale: customLocale != null ? customLocale : locale,
|
|
405
|
+
createCalendar: createCalendar
|
|
406
|
+
}));
|
|
407
|
+
|
|
408
|
+
var _useCalendar = calendar.useCalendar(rest, state),
|
|
409
|
+
calendarProps = _useCalendar.calendarProps,
|
|
410
|
+
prevButtonProps = _useCalendar.prevButtonProps,
|
|
411
|
+
nextButtonProps = _useCalendar.nextButtonProps,
|
|
412
|
+
title = _useCalendar.title;
|
|
413
|
+
|
|
414
|
+
return React__default["default"].createElement(utils.ConditionalWrapper, {
|
|
415
|
+
condition: customLocale,
|
|
416
|
+
wrapper: function wrapper(child) {
|
|
417
|
+
return React__default["default"].createElement(i18n.I18nProvider, {
|
|
418
|
+
locale: customLocale
|
|
419
|
+
}, child);
|
|
420
|
+
}
|
|
421
|
+
}, React__default["default"].createElement("div", _extends({}, calendarProps, {
|
|
422
|
+
ref: ref,
|
|
423
|
+
className: "eds-datepicker__calendar",
|
|
424
|
+
style: style
|
|
425
|
+
}), React__default["default"].createElement("div", {
|
|
426
|
+
className: "eds-datepicker__calendar__header"
|
|
427
|
+
}, React__default["default"].createElement(CalendarButton, _extends({}, prevButtonProps, {
|
|
428
|
+
"aria-label": ariaLabelIfNorwegian('Forrige måned', locale, prevButtonProps)
|
|
429
|
+
}), React__default["default"].createElement(icons.LeftArrowIcon, {
|
|
430
|
+
size: 20
|
|
431
|
+
})), React__default["default"].createElement("h2", null, title), React__default["default"].createElement(CalendarButton, _extends({}, nextButtonProps, {
|
|
432
|
+
"aria-label": ariaLabelIfNorwegian('Neste måned', locale, nextButtonProps)
|
|
433
|
+
}), React__default["default"].createElement(icons.RightArrowIcon, {
|
|
434
|
+
size: 20
|
|
435
|
+
}))), React__default["default"].createElement(CalendarGrid, {
|
|
436
|
+
state: state,
|
|
437
|
+
navigationDescription: navigationDescription,
|
|
438
|
+
onSelectedCellClick: onSelectedCellClick
|
|
439
|
+
})));
|
|
440
|
+
});
|
|
389
441
|
|
|
390
|
-
|
|
391
|
-
|
|
442
|
+
var _excluded$3 = ["selectedDate", "onChange", "locale", "disabled", "showTime", "showTimeZone", "className", "style", "variant", "feedback", "validationVariant", "validationFeedback", "disableModal", "labelTooltip", "navigationDescription", "minDate", "maxDate", "modalTreshold"];
|
|
443
|
+
var DatePicker = function DatePicker(_ref) {
|
|
444
|
+
var value = _ref.selectedDate,
|
|
445
|
+
onChange = _ref.onChange,
|
|
446
|
+
locale = _ref.locale,
|
|
447
|
+
isDisabled = _ref.disabled,
|
|
448
|
+
showTime = _ref.showTime,
|
|
449
|
+
_ref$showTimeZone = _ref.showTimeZone,
|
|
450
|
+
showTimeZone = _ref$showTimeZone === void 0 ? false : _ref$showTimeZone,
|
|
451
|
+
className = _ref.className,
|
|
452
|
+
variant = _ref.variant,
|
|
453
|
+
feedback = _ref.feedback,
|
|
454
|
+
validationVariant = _ref.validationVariant,
|
|
455
|
+
validationFeedback = _ref.validationFeedback,
|
|
456
|
+
_ref$disableModal = _ref.disableModal,
|
|
457
|
+
disableModal = _ref$disableModal === void 0 ? false : _ref$disableModal,
|
|
458
|
+
labelTooltip = _ref.labelTooltip,
|
|
459
|
+
navigationDescription = _ref.navigationDescription,
|
|
460
|
+
minValue = _ref.minDate,
|
|
461
|
+
maxValue = _ref.maxDate,
|
|
462
|
+
_ref$modalTreshold = _ref.modalTreshold,
|
|
463
|
+
modalTreshold = _ref$modalTreshold === void 0 ? 1000 : _ref$modalTreshold,
|
|
464
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
|
|
392
465
|
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
466
|
+
var CALENDAR_MODAL_MAX_SCREEN_WIDTH = modalTreshold;
|
|
467
|
+
var datePickerRef = React.useRef(null);
|
|
468
|
+
var calendarRef = React.useRef(null);
|
|
469
|
+
var dateFieldRef = React.useRef(null);
|
|
470
|
+
|
|
471
|
+
var _useWindowDimensions = utils.useWindowDimensions(),
|
|
472
|
+
width = _useWindowDimensions.width;
|
|
473
|
+
|
|
474
|
+
var state = datepicker$1.useDatePickerState(_extends({}, rest, {
|
|
475
|
+
minValue: minValue,
|
|
476
|
+
maxValue: maxValue,
|
|
477
|
+
value: value,
|
|
478
|
+
onChange: onChange
|
|
479
|
+
}));
|
|
480
|
+
|
|
481
|
+
var _useDatePicker = datepicker.useDatePicker(_extends({
|
|
482
|
+
isDisabled: isDisabled,
|
|
483
|
+
minValue: minValue,
|
|
484
|
+
maxValue: maxValue,
|
|
485
|
+
autoFocus: true
|
|
486
|
+
}, rest), state, datePickerRef),
|
|
487
|
+
groupProps = _useDatePicker.groupProps,
|
|
488
|
+
labelProps = _useDatePicker.labelProps,
|
|
489
|
+
fieldProps = _useDatePicker.fieldProps,
|
|
490
|
+
buttonProps = _useDatePicker.buttonProps,
|
|
491
|
+
dialogProps = _useDatePicker.dialogProps,
|
|
492
|
+
calendarProps = _useDatePicker.calendarProps; // calculations for floating-UI popover position
|
|
493
|
+
|
|
494
|
+
|
|
495
|
+
var _useFloating = reactDom.useFloating({
|
|
496
|
+
whileElementsMounted: reactDom.autoUpdate,
|
|
497
|
+
placement: 'bottom-start',
|
|
498
|
+
middleware: [reactDom.offset(tokens.space.extraSmall), reactDom.flip(), reactDom.shift({
|
|
499
|
+
padding: tokens.space.extraSmall
|
|
500
|
+
})]
|
|
501
|
+
}),
|
|
502
|
+
x = _useFloating.x,
|
|
503
|
+
y = _useFloating.y,
|
|
504
|
+
reference = _useFloating.reference,
|
|
505
|
+
floating = _useFloating.floating,
|
|
506
|
+
strategy = _useFloating.strategy;
|
|
507
|
+
|
|
508
|
+
var onChangeCalendar = function onChangeCalendar(newSelectedDate) {
|
|
509
|
+
// Necessary to avoid state update on unmounted component
|
|
510
|
+
requestAnimationFrame(function () {
|
|
511
|
+
calendarProps.onChange && calendarProps.onChange(newSelectedDate);
|
|
398
512
|
});
|
|
399
|
-
setShouldFocusOnCalendarButtonAfterSelect(true);
|
|
400
|
-
setShowValidation(false);
|
|
401
513
|
};
|
|
402
514
|
|
|
403
|
-
|
|
404
|
-
|
|
515
|
+
utils.useOnClickOutside([calendarRef], function () {
|
|
516
|
+
state.setOpen(false);
|
|
517
|
+
});
|
|
518
|
+
utils.useOnEscape(calendarRef, function () {
|
|
519
|
+
state.setOpen(false);
|
|
520
|
+
});
|
|
405
521
|
|
|
406
|
-
|
|
407
|
-
|
|
522
|
+
var calendarSharedProps = _extends({}, dialogProps, calendarProps, {
|
|
523
|
+
disabled: calendarProps.isDisabled,
|
|
524
|
+
navigationDescription: navigationDescription,
|
|
525
|
+
onSelectedCellClick: function onSelectedCellClick() {
|
|
526
|
+
return state.setOpen(false);
|
|
527
|
+
},
|
|
528
|
+
onChange: onChangeCalendar
|
|
529
|
+
});
|
|
408
530
|
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
onClickOutside: handleOnClickOutside,
|
|
418
|
-
id: datepickerId,
|
|
419
|
-
ariaLabelledBy: datepickerId,
|
|
420
|
-
showPopperArrow: false,
|
|
421
|
-
locale: locale$1,
|
|
422
|
-
inline: inline,
|
|
423
|
-
disabled: disabled,
|
|
424
|
-
preventOpenOnFocus: true,
|
|
425
|
-
chooseDayAriaLabelPrefix: chooseDayAriaLabelPrefix,
|
|
426
|
-
open: hideCalendar ? false : open,
|
|
427
|
-
ref: datepickerRef,
|
|
428
|
-
calendarClassName: "eds-datepicker__calender",
|
|
429
|
-
dayClassName: function dayClassName() {
|
|
430
|
-
return 'eds-datepicker__calender__day';
|
|
531
|
+
var useModal = width <= CALENDAR_MODAL_MAX_SCREEN_WIDTH && !disableModal;
|
|
532
|
+
var popoverCalendar = React__default["default"].createElement("div", {
|
|
533
|
+
// styling for floating-UI popover
|
|
534
|
+
style: {
|
|
535
|
+
position: strategy,
|
|
536
|
+
top: y != null ? y : 0,
|
|
537
|
+
left: x != null ? x : 0,
|
|
538
|
+
zIndex: tokens.zIndexes.popover
|
|
431
539
|
},
|
|
432
|
-
|
|
433
|
-
|
|
540
|
+
ref: function ref(node) {
|
|
541
|
+
floating(node);
|
|
542
|
+
}
|
|
543
|
+
}, React__default["default"].createElement(FocusLock__default["default"], {
|
|
544
|
+
disabled: !state.isOpen || useModal,
|
|
545
|
+
returnFocus: true
|
|
546
|
+
}, state.isOpen && React__default["default"].createElement(Calendar, _extends({}, calendarSharedProps, {
|
|
547
|
+
ref: calendarRef
|
|
548
|
+
}))));
|
|
549
|
+
var modalCalendar = React__default["default"].createElement(modal.Modal, {
|
|
550
|
+
size: "small",
|
|
551
|
+
title: "",
|
|
552
|
+
open: state.isOpen,
|
|
553
|
+
onDismiss: function onDismiss() {
|
|
554
|
+
return state.setOpen(false);
|
|
434
555
|
},
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
changeYear: changeYear,
|
|
452
|
-
changeMonth: changeMonth,
|
|
453
|
-
increaseMonth: increaseMonth,
|
|
454
|
-
decreaseMonth: decreaseMonth,
|
|
455
|
-
prevMonthButtonDisabled: prevMonthButtonDisabled,
|
|
456
|
-
nextMonthButtonDisabled: nextMonthButtonDisabled,
|
|
457
|
-
previousMonthAriaLabel: previousMonthAriaLabel,
|
|
458
|
-
nextMonthAriaLabel: nextMonthAriaLabel,
|
|
459
|
-
locale: locale$1
|
|
460
|
-
});
|
|
556
|
+
closeOnClickOutside: true,
|
|
557
|
+
className: "eds-datepicker__calendar-modal"
|
|
558
|
+
}, React__default["default"].createElement(Calendar, _extends({}, calendarSharedProps)));
|
|
559
|
+
return React__default["default"].createElement(utils.ConditionalWrapper, {
|
|
560
|
+
condition: locale !== undefined,
|
|
561
|
+
wrapper: function wrapper(child) {
|
|
562
|
+
return React__default["default"].createElement(i18n.I18nProvider, {
|
|
563
|
+
locale: locale
|
|
564
|
+
}, child);
|
|
565
|
+
}
|
|
566
|
+
}, React__default["default"].createElement("div", {
|
|
567
|
+
className: classNames__default["default"]('eds-datepicker', className)
|
|
568
|
+
}, React__default["default"].createElement("div", _extends({}, groupProps, {
|
|
569
|
+
ref: function ref(node) {
|
|
570
|
+
datePickerRef.current = node;
|
|
571
|
+
reference(node);
|
|
461
572
|
},
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
setFocusToCalendarGUI: setFocusToCalendarGUI,
|
|
479
|
-
setShouldFocusOnCalendarButtonAfterSelect: setShouldFocusOnCalendarButtonAfterSelect,
|
|
480
|
-
calendarGUIIsOpen: datePickerGUIIsOpen,
|
|
481
|
-
disableLabelAnimation: disableLabelAnimation,
|
|
482
|
-
hideCalendarButton: hideCalendarButton,
|
|
483
|
-
selectedDate: selectedDate
|
|
573
|
+
id: undefined,
|
|
574
|
+
className: "eds-datepicker__datefield__wrapper"
|
|
575
|
+
}), React__default["default"].createElement(DateField, _extends({}, fieldProps, {
|
|
576
|
+
selectedDate: state.value,
|
|
577
|
+
label: rest.label,
|
|
578
|
+
labelProps: labelProps,
|
|
579
|
+
showTime: showTime,
|
|
580
|
+
showTimeZone: showTimeZone,
|
|
581
|
+
ref: dateFieldRef,
|
|
582
|
+
variant: variant,
|
|
583
|
+
feedback: feedback,
|
|
584
|
+
validationVariant: validationVariant,
|
|
585
|
+
validationFeedback: validationFeedback,
|
|
586
|
+
labelTooltip: labelTooltip,
|
|
587
|
+
className: classNames__default["default"]('eds-datepicker__datefield', {
|
|
588
|
+
'eds-datepicker__datefield--disabled': fieldProps.isDisabled
|
|
484
589
|
})
|
|
485
|
-
},
|
|
486
|
-
|
|
590
|
+
})), !fieldProps.isDisabled && React__default["default"].createElement(CalendarButton, _extends({}, buttonProps, {
|
|
591
|
+
onPress: function onPress() {
|
|
592
|
+
return state.setOpen(!state.isOpen);
|
|
593
|
+
},
|
|
594
|
+
className: "eds-datepicker__open-calendar-button"
|
|
595
|
+
}), React__default["default"].createElement(icons.CalendarIcon, null)), useModal ? modalCalendar : popoverCalendar)));
|
|
596
|
+
};
|
|
487
597
|
|
|
488
598
|
var _excluded$2 = ["className", "style", "label", "onChange", "feedback", "variant", "disableLabelAnimation", "prepend"],
|
|
489
599
|
_excluded2$1 = ["onChange", "variant", "value"];
|
|
@@ -565,39 +675,12 @@ var NativeDatePickerBase = /*#__PURE__*/React__default["default"].forwardRef(fun
|
|
|
565
675
|
}, rest));
|
|
566
676
|
});
|
|
567
677
|
|
|
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
678
|
var TimePickerArrowButton = function TimePickerArrowButton(_ref) {
|
|
596
679
|
var direction = _ref.direction,
|
|
597
680
|
onClick = _ref.onClick,
|
|
598
681
|
disabled = _ref.disabled,
|
|
599
682
|
ariaLabel = _ref['aria-label'];
|
|
600
|
-
return React__default["default"].createElement(button.IconButton, {
|
|
683
|
+
return React__default["default"].createElement(button$1.IconButton, {
|
|
601
684
|
className: classNames__default["default"]('eds-timepicker__arrowbutton', "eds-timepicker__arrowbutton--" + direction, {
|
|
602
685
|
'eds-timepicker__arrowbutton--disabled': disabled
|
|
603
686
|
}),
|
|
@@ -706,7 +789,7 @@ var TimePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_re
|
|
|
706
789
|
variant: variant,
|
|
707
790
|
feedback: feedback
|
|
708
791
|
}), state.segments.map(function (segment, i) {
|
|
709
|
-
return React__default["default"].createElement(
|
|
792
|
+
return React__default["default"].createElement(FieldSegment, {
|
|
710
793
|
segment: segment,
|
|
711
794
|
state: state,
|
|
712
795
|
key: i
|
|
@@ -794,71 +877,16 @@ var NativeTimePickerBase = /*#__PURE__*/React__default["default"].forwardRef(fun
|
|
|
794
877
|
}, rest));
|
|
795
878
|
});
|
|
796
879
|
|
|
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
880
|
utils.warnAboutMissingStyles('datepicker', 'form', 'icons');
|
|
857
881
|
|
|
882
|
+
exports.Calendar = Calendar;
|
|
883
|
+
exports.DateField = DateField;
|
|
858
884
|
exports.DatePicker = DatePicker;
|
|
859
885
|
exports.NativeDatePicker = NativeDatePicker;
|
|
860
886
|
exports.NativeTimePicker = NativeTimePicker;
|
|
861
887
|
exports.TimePicker = TimePicker;
|
|
862
|
-
exports.
|
|
863
|
-
exports.
|
|
888
|
+
exports.ariaLabelIfNorwegian = ariaLabelIfNorwegian;
|
|
889
|
+
exports.createCalendar = createCalendar;
|
|
890
|
+
exports.nativeDateToTimeOrDateValue = nativeDateToTimeOrDateValue;
|
|
891
|
+
exports.timeOrDateValueToNativeDate = timeOrDateValueToNativeDate;
|
|
864
892
|
//# sourceMappingURL=datepicker.cjs.development.js.map
|