@entur/datepicker 11.2.0 → 11.2.1-beta.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.
@@ -1,1269 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var utils = require('@entur/utils');
6
- var React = require('react');
7
- var datepicker$1 = require('@react-stately/datepicker');
8
- var datepicker = require('@react-aria/datepicker');
9
- var i18n = require('@react-aria/i18n');
10
- var classNames = require('classnames');
11
- var form = require('@entur/form');
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');
23
-
24
- function _extends() {
25
- return _extends = Object.assign ? Object.assign.bind() : function (n) {
26
- for (var e = 1; e < arguments.length; e++) {
27
- var t = arguments[e];
28
- for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
29
- }
30
- return n;
31
- }, _extends.apply(null, arguments);
32
- }
33
- function _objectWithoutPropertiesLoose(r, e) {
34
- if (null == r) return {};
35
- var t = {};
36
- for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
37
- if (e.includes(n)) continue;
38
- t[n] = r[n];
39
- }
40
- return t;
41
- }
42
-
43
- var _excluded$b = ["segment", "state"];
44
- var FieldSegment = function FieldSegment(_ref) {
45
- var segment = _ref.segment,
46
- state = _ref.state,
47
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$b);
48
- var ref = React.useRef(null);
49
- var _useDateSegment = datepicker.useDateSegment(segment, state, ref),
50
- segmentProps = _useDateSegment.segmentProps;
51
- return React.createElement("div", _extends({}, segmentProps, {
52
- ref: ref,
53
- className: classNames('eds-date-and-time-field__segment', {
54
- 'eds-date-and-time-field__segment--placeholder': segment.isPlaceholder,
55
- 'eds-date-and-time-field__segment--dot-separator': segment.text === '.' || segment.text === ':'
56
- }),
57
- tabIndex: state.isDisabled ? -1 : segmentProps.tabIndex
58
- }, rest), segment.text);
59
- };
60
-
61
- var nativeDateToDateTime = function nativeDateToDateTime(date$1, timeZone, offset) {
62
- if (timeZone) {
63
- if (offset) {
64
- 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(), date$1.getMilliseconds());
65
- }
66
- return date.parseAbsolute(date$1.toISOString(), timeZone);
67
- }
68
- return new date.CalendarDateTime(date$1.getFullYear(), date$1.getMonth() + 1, date$1.getDate(), date$1.getHours(), date$1.getMinutes(), date$1.getSeconds(), date$1.getMilliseconds());
69
- };
70
- /**
71
- * Tar inn et JS Date-objekt og returnerer et av DateValue-objektene fra @internationalized/date-pakken
72
- * @param {Date | null} date JS Date-objekt som ønskes konvertert til et DateValue-objekt
73
- * @param {boolean} noTimeOnlyDate Hvis tidspunktet er irrelevant kan denne settes til true, da får man et CalendarDate-objekt uten tidspunkt tilbake
74
- * @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
75
- * @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.
76
- * @returns {CalendarDateTime | ZonedDateTime | CalendarDate | null} et av DateValue-objektene med verdier fra date eller null
77
- */
78
- function nativeDateToDateValue(date$1, noTimeOnlyDate, timeZone, offset) {
79
- if (noTimeOnlyDate === void 0) {
80
- noTimeOnlyDate = false;
81
- }
82
- if (date$1 === null) return null;
83
- if (noTimeOnlyDate) return new date.CalendarDate(date$1.getFullYear(), date$1.getMonth() + 1, date$1.getDate());
84
- return nativeDateToDateTime(date$1, timeZone, offset);
85
- }
86
- /**
87
- * Tar inn et JS Date-objekt og returnerer et av TimeValue-objektene fra @internationalized/date-pakken
88
- * @param {Date | null} date JS Date-objekt som ønskes konvertert til et TimeValue-objekt
89
- * @param {boolean} noDateOnlyTime Hvis datoen er irrelevant kan denne settes til true, da får man et Time-objekt uten dato tilbake
90
- * @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
91
- * @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.
92
- * @returns {Time | CalendarDateTime | ZonedDateTime | null} et av TimeValue-objektene med verdier fra date eller null
93
- */
94
- function nativeDateToTimeValue(date$1, noDateOnlyTime, timeZone, offset) {
95
- if (noDateOnlyTime === void 0) {
96
- noDateOnlyTime = false;
97
- }
98
- if (date$1 === null) return null;
99
- if (noDateOnlyTime) return new date.Time(date$1.getHours(), date$1.getMinutes(), date$1.getSeconds(), date$1.getMilliseconds());
100
- return nativeDateToDateTime(date$1, timeZone, offset);
101
- }
102
- /**
103
- * Tar inn et av Date- eller TimeValue-objektene fra \@internationalized/date-pakken og returnerer et JS Date-objekt
104
- * @param {DateValue | TimeValue | null} value En dato eller et tidspunkt på Date- eller TimeValue-formatet som ønskes konvertert til et JS Date-objekt
105
- * @param {string} timeZoneForCalendarDateTime Tidssonen value er i. Fungerer kun med typen er CalendarDateTime
106
- * @returns {Date | null} et Date-objekt med verdier fra time eller null
107
- */
108
- function timeOrDateValueToNativeDate(value, timeZoneForCalendarDateTime) {
109
- if (value === null) return null;
110
- // type is Time
111
- if (!('day' in value)) {
112
- var date$1 = new Date();
113
- date$1.setHours(value.hour);
114
- date$1.setMinutes(value.minute);
115
- date$1.setSeconds(value.second);
116
- date$1.setMilliseconds(value.millisecond);
117
- return date$1;
118
- }
119
- // type is CalendarDate
120
- if (!('hour' in value)) {
121
- return value.toDate(timeZoneForCalendarDateTime != null ? timeZoneForCalendarDateTime : date.getLocalTimeZone());
122
- }
123
- // type is CalendarDateTime
124
- if (!('timeZone' in value)) {
125
- if (timeZoneForCalendarDateTime) return value.toDate(timeZoneForCalendarDateTime);
126
- return value.toDate(date.getLocalTimeZone());
127
- }
128
- // type is ZonedDateTime
129
- return value.toDate();
130
- }
131
- var createCalendar = function createCalendar(identifier) {
132
- if (identifier === void 0) {
133
- identifier = 'gregory';
134
- }
135
- switch (identifier) {
136
- case 'gregory':
137
- return new date.GregorianCalendar();
138
- default:
139
- throw new Error("Unsupported calendar " + identifier);
140
- }
141
- };
142
- var ariaLabelIfNorwegian = function ariaLabelIfNorwegian(norwegianAriaLabel, locale, propsCollection) {
143
- if (locale.toLowerCase() !== 'no-no') return propsCollection['aria-label'];
144
- return norwegianAriaLabel;
145
- };
146
- var lastMillisecondOfDay = function lastMillisecondOfDay(dateValue) {
147
- return date.toCalendarDateTime(dateValue.add({
148
- days: 1
149
- })).add({
150
- milliseconds: -1
151
- });
152
- };
153
- var convertValueToType = function convertValueToType(_ref) {
154
- var value = _ref.value,
155
- type = _ref.type,
156
- _ref$timezone = _ref.timezone,
157
- timezone = _ref$timezone === void 0 ? 'Europe/Oslo' : _ref$timezone;
158
- if (value === null) return null;
159
- switch (type) {
160
- case 'CalendarDate':
161
- if (!('day' in value)) return date.today(timezone);
162
- return date.toCalendarDate(value);
163
- case 'CalendarDateTime':
164
- if (!('day' in value)) return date.toCalendarDateTime(date.today(timezone), value);
165
- return date.toCalendarDateTime(value);
166
- case 'ZonedDateTime':
167
- if (!('day' in value)) return date.toZoned(date.toCalendarDateTime(date.today(timezone), value), timezone);
168
- return date.toZoned(value, timezone);
169
- case 'Time':
170
- if (!('hour' in value)) return date.toTime(date.now(timezone));
171
- if (!('day' in value)) return value;
172
- return date.toTime(value);
173
- default:
174
- return value;
175
- }
176
- };
177
- var modulo = function modulo(a, b) {
178
- return (a % b + b) % b;
179
- };
180
- var focusSegment = function focusSegment(ref, segment) {
181
- if (ref.current) {
182
- var segments = ref.current.querySelectorAll('.eds-date-and-time-field__segment');
183
- var firstSegment = segments[0];
184
- var lastSegment = segments[segments.length - 1];
185
- switch (segment) {
186
- case 'first':
187
- return firstSegment.focus();
188
- case 'last':
189
- return lastSegment.focus();
190
- }
191
- }
192
- };
193
- /** Based on code from https://stackoverflow.com/questions/6117814/get-week-of-year-in-javascript-like-in-php */
194
- function getWeekNumberForDate(date$1) {
195
- if (date$1 === null) return -1;
196
- var calendarDate = convertValueToType({
197
- value: date$1,
198
- type: 'CalendarDate'
199
- });
200
- var firstDayOfWeek = date.startOfWeek(calendarDate, 'no-NO');
201
- var thursdayOfWeek = firstDayOfWeek.add({
202
- days: 3
203
- });
204
- var firstDayOfYearForThursday = date.startOfYear(thursdayOfWeek);
205
- var weekNumber = Math.ceil((thursdayOfWeek.compare(firstDayOfYearForThursday) + 1) / 7);
206
- return weekNumber;
207
- }
208
- function handleOnChange(_ref2) {
209
- var value = _ref2.value,
210
- selectedDate = _ref2.selectedDate,
211
- forcedReturnType = _ref2.forcedReturnType,
212
- onChange = _ref2.onChange;
213
- if (forcedReturnType !== undefined || !selectedDate) {
214
- return onChange == null ? void 0 : onChange(convertValueToType({
215
- value: value,
216
- type: forcedReturnType != null ? forcedReturnType : 'ZonedDateTime',
217
- timezone: value !== null && 'timezone' in value ? value.timezone : undefined
218
- }));
219
- }
220
- onChange == null || onChange(value);
221
- }
222
-
223
- var _excluded$a = ["selectedDate", "onChange", "label", "locale", "showTimeZone", "showTime", "granularity", "disabled", "readOnly", "isDisabled", "variant", "feedback", "validationVariant", "validationFeedback", "labelTooltip", "minDate", "maxDate", "forcedReturnType", "style", "className", "labelProps", "append", "prepend", "onValidate", "dateFieldRef"];
224
- var DateField = function DateField(_ref) {
225
- var selectedDate = _ref.selectedDate,
226
- _onChange = _ref.onChange,
227
- label = _ref.label,
228
- customLocale = _ref.locale,
229
- showTimeZone = _ref.showTimeZone,
230
- showTime = _ref.showTime,
231
- _ref$granularity = _ref.granularity,
232
- granularity = _ref$granularity === void 0 ? showTime ? 'minute' : 'day' : _ref$granularity,
233
- disabled = _ref.disabled,
234
- readOnly = _ref.readOnly,
235
- isDisabled = _ref.isDisabled,
236
- variant = _ref.variant,
237
- feedback = _ref.feedback,
238
- _ref$validationVarian = _ref.validationVariant,
239
- validationVariant = _ref$validationVarian === void 0 ? 'negative' : _ref$validationVarian,
240
- _ref$validationFeedba = _ref.validationFeedback,
241
- validationFeedback = _ref$validationFeedba === void 0 ? 'Ugyldig dato' : _ref$validationFeedba,
242
- labelTooltip = _ref.labelTooltip,
243
- minDate = _ref.minDate,
244
- maxDate = _ref.maxDate,
245
- forcedReturnType = _ref.forcedReturnType,
246
- style = _ref.style,
247
- className = _ref.className,
248
- parentLabelProps = _ref.labelProps,
249
- append = _ref.append,
250
- prepend = _ref.prepend,
251
- onValidate = _ref.onValidate,
252
- ref = _ref.dateFieldRef,
253
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$a);
254
- var _useLocale = i18n.useLocale(),
255
- locale = _useLocale.locale;
256
- var _props = _extends({}, rest, {
257
- label: label,
258
- locale: customLocale != null ? customLocale : locale,
259
- createCalendar: createCalendar,
260
- value: selectedDate,
261
- onChange: function onChange(value) {
262
- return handleOnChange({
263
- value: value,
264
- selectedDate: selectedDate,
265
- forcedReturnType: forcedReturnType,
266
- onChange: _onChange
267
- });
268
- },
269
- hideTimeZone: !showTimeZone,
270
- granularity: granularity,
271
- minValue: minDate,
272
- // this weird logic makes sure the entire day is included if no time is provided in maxDate
273
- maxValue: 'hour' in (maxDate != null ? maxDate : {}) ? maxDate : maxDate !== undefined ? lastMillisecondOfDay(maxDate) : undefined,
274
- isDisabled: isDisabled || disabled || readOnly,
275
- shouldForceLeadingZeros: true
276
- });
277
- var state = datepicker$1.useDateFieldState(_props);
278
- var dateFieldRef = React.useRef(null);
279
- var _useDateField = datepicker.useDateField(_props, state, dateFieldRef),
280
- labelProps = _useDateField.labelProps,
281
- fieldProps = _useDateField.fieldProps;
282
- React.useEffect(function () {
283
- return onValidate == null ? void 0 : onValidate(!state.isInvalid);
284
- }, [state.isInvalid]);
285
- var id = utils.useRandomId('datefield');
286
- return React.createElement(utils.ConditionalWrapper, {
287
- condition: customLocale !== undefined,
288
- wrapper: function wrapper(child) {
289
- return React.createElement(i18n.I18nProvider, {
290
- locale: customLocale
291
- }, child);
292
- }
293
- }, React.createElement(form.BaseFormControl, _extends({
294
- append: append,
295
- ariaAlertOnFeedback: true,
296
- className: classNames('eds-datefield', className, {
297
- 'eds-datefield--has-tooltip': labelTooltip !== undefined
298
- }),
299
- disabled: isDisabled || disabled,
300
- readOnly: readOnly,
301
- disableLabelAnimation: true,
302
- feedback: feedback != null ? feedback : state.validationState === 'invalid' ? validationFeedback : undefined,
303
- label: label,
304
- labelId: id,
305
- labelProps: parentLabelProps != null ? parentLabelProps : labelProps,
306
- labelTooltip: labelTooltip,
307
- prepend: prepend,
308
- ref: utils.mergeRefs(ref, dateFieldRef),
309
- style: style,
310
- variant: variant != null ? variant : state.isInvalid ? validationVariant : undefined
311
- }, fieldProps), state.segments.map(function (segment, i) {
312
- return React.createElement(FieldSegment, {
313
- segment: segment,
314
- state: state,
315
- key: i
316
- });
317
- })));
318
- };
319
-
320
- var _excluded$9 = ["children", "className", "style"];
321
- var CalendarButton = function CalendarButton(_ref) {
322
- var children = _ref.children,
323
- className = _ref.className,
324
- style = _ref.style,
325
- props = _objectWithoutPropertiesLoose(_ref, _excluded$9);
326
- var ref = React.useRef(null);
327
- var _useButton = button.useButton(props, ref),
328
- buttonProps = _useButton.buttonProps;
329
- return React.createElement(button$1.IconButton, _extends({}, buttonProps, {
330
- ref: ref,
331
- className: className,
332
- style: style
333
- }), children);
334
- };
335
-
336
- var _excluded$8 = ["state", "date", "onSelectedCellClick", "onCellClick", "weekNumberString", "classNameForDate", "ariaLabelForDate"];
337
- var CalendarCell = function CalendarCell(_ref) {
338
- var _ariaLabelForDate, _classNameForDate, _state$timeZone, _classNames;
339
- var state = _ref.state,
340
- date$1 = _ref.date,
341
- _ref$onSelectedCellCl = _ref.onSelectedCellClick,
342
- onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
343
- return;
344
- } : _ref$onSelectedCellCl,
345
- _ref$onCellClick = _ref.onCellClick,
346
- onCellClick = _ref$onCellClick === void 0 ? function () {
347
- return;
348
- } : _ref$onCellClick,
349
- weekNumberString = _ref.weekNumberString,
350
- classNameForDate = _ref.classNameForDate,
351
- ariaLabelForDate = _ref.ariaLabelForDate,
352
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$8);
353
- var cellRef = React.useRef(null);
354
- var _useCalendarCell = calendar.useCalendarCell({
355
- date: date$1
356
- }, state, cellRef),
357
- cellProps = _useCalendarCell.cellProps,
358
- buttonProps = _useCalendarCell.buttonProps,
359
- isSelected = _useCalendarCell.isSelected,
360
- isOutsideVisibleRange = _useCalendarCell.isOutsideVisibleRange,
361
- isDisabled = _useCalendarCell.isDisabled,
362
- isUnavailable = _useCalendarCell.isUnavailable,
363
- formattedDate = _useCalendarCell.formattedDate;
364
- var ariaLabel = "" + buttonProps['aria-label'] + weekNumberString + " " + ((_ariaLabelForDate = ariaLabelForDate == null ? void 0 : ariaLabelForDate(date$1)) != null ? _ariaLabelForDate : '');
365
- var cellCanBeSelected = !(isOutsideVisibleRange || isDisabled || isUnavailable);
366
- return React.createElement("td", _extends({}, cellProps, {
367
- className: "eds-datepicker__calendar__grid__cell__td"
368
- }), React.createElement("div", _extends({}, buttonProps, {
369
- "aria-label": ariaLabel,
370
- "aria-hidden": isOutsideVisibleRange,
371
- ref: cellRef,
372
- hidden: isOutsideVisibleRange,
373
- className: classNames('eds-datepicker__calendar__grid__cell', (_classNames = {}, _classNames[(_classNameForDate = classNameForDate == null ? void 0 : classNameForDate(date$1)) != null ? _classNameForDate : ''] = !isOutsideVisibleRange, _classNames['eds-datepicker__calendar__grid__cell--selected'] = isSelected, _classNames['eds-datepicker__calendar__grid__cell--disabled'] = isDisabled || isUnavailable, _classNames['eds-datepicker__calendar__grid__cell--outside-month'] = isOutsideVisibleRange, _classNames['eds-datepicker__calendar__grid__cell--today'] = date.isEqualDay(date$1, date.now((_state$timeZone = state.timeZone) != null ? _state$timeZone : date.getLocalTimeZone())), _classNames))
374
- }, rest, {
375
- onClick: function onClick(e) {
376
- buttonProps.onClick && buttonProps.onClick(e);
377
- // Used to force close calendar on select
378
- isSelected && onSelectedCellClick();
379
- cellCanBeSelected && onCellClick();
380
- },
381
- onKeyUp: function onKeyUp(e) {
382
- buttonProps.onKeyUp && buttonProps.onKeyUp(e);
383
- if (e.key === 'Enter') {
384
- // Used to force close calendar on select
385
- isSelected && onSelectedCellClick();
386
- cellCanBeSelected && onCellClick();
387
- }
388
- }
389
- }), formattedDate));
390
- };
391
-
392
- var _excluded$7 = ["state", "navigationDescription", "onSelectedCellClick", "onCellClick", "showWeekNumbers", "weekNumberHeader", "classNameForDate", "ariaLabelForDate"];
393
- var CalendarGrid = function CalendarGrid(_ref) {
394
- var state = _ref.state,
395
- navigationDescription = _ref.navigationDescription,
396
- _ref$onSelectedCellCl = _ref.onSelectedCellClick,
397
- onSelectedCellClick = _ref$onSelectedCellCl === void 0 ? function () {
398
- return;
399
- } : _ref$onSelectedCellCl,
400
- _ref$onCellClick = _ref.onCellClick,
401
- onCellClick = _ref$onCellClick === void 0 ? function () {
402
- return;
403
- } : _ref$onCellClick,
404
- showWeekNumbers = _ref.showWeekNumbers,
405
- weekNumberHeader = _ref.weekNumberHeader,
406
- classNameForDate = _ref.classNameForDate,
407
- ariaLabelForDate = _ref.ariaLabelForDate,
408
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$7);
409
- var calendarGridId = utils.useRandomId('eds-calendar');
410
- var _useLocale = i18n.useLocale(),
411
- locale = _useLocale.locale;
412
- var _useCalendarGrid = calendar.useCalendarGrid(rest, state),
413
- gridProps = _useCalendarGrid.gridProps,
414
- headerProps = _useCalendarGrid.headerProps,
415
- weekDays = _useCalendarGrid.weekDays;
416
- var weeksInMonth = date.getWeeksInMonth(state.visibleRange.start, locale);
417
- var weeksArray = Array.from(Array(weeksInMonth).keys());
418
- var weekDaysMapped = function weekDaysMapped() {
419
- if (locale.toLowerCase().includes('no')) return ['ma', 'ti', 'on', 'to', 'fr', 'lø', 'sø'];
420
- if (locale.toLowerCase().includes('en')) {
421
- if (weekDays[0] === 'M') return ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];
422
- if (weekDays[0] === 'S') return ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];
423
- }
424
- return weekDays.map(function (day) {
425
- return day.toLowerCase();
426
- });
427
- };
428
- var getNavigationDescription = function getNavigationDescription() {
429
- if (navigationDescription) return navigationDescription;
430
- if (locale.toLowerCase().includes('en')) return 'Use the arrow keys to navigate between dates';
431
- return 'Bruk piltastene til å navigere mellom datoer';
432
- };
433
- return React.createElement(React.Fragment, null, React.createElement("table", _extends({}, gridProps, {
434
- cellSpacing: "0",
435
- className: "eds-datepicker__calendar__grid"
436
- }), React.createElement("thead", _extends({}, headerProps), React.createElement("tr", null, showWeekNumbers && React.createElement("th", {
437
- className: "eds-datepicker__calendar__grid__weeknumber-header"
438
- }, weekNumberHeader), weekDaysMapped().map(function (day) {
439
- return React.createElement("th", {
440
- key: day
441
- }, day);
442
- }))), React.createElement("tbody", null, weeksArray.map(function (weekIndex) {
443
- var weekNumber = getWeekNumberForDate(state.getDatesInWeek(weekIndex)[0]);
444
- return React.createElement("tr", {
445
- key: weekIndex
446
- }, showWeekNumbers && React.createElement("th", {
447
- "aria-hidden": true,
448
- className: "eds-datepicker__calendar__grid__weeknumber"
449
- }, weekNumber), state.getDatesInWeek(weekIndex).map(function (date, i) {
450
- return date ? React.createElement(CalendarCell, {
451
- key: date.month + "." + date.day,
452
- state: state,
453
- date: date,
454
- "aria-describedby": calendarGridId + 'description',
455
- weekNumberString: showWeekNumbers ? ", " + weekNumberHeader + " " + weekNumber + "," : '',
456
- onSelectedCellClick: onSelectedCellClick,
457
- onCellClick: onCellClick,
458
- classNameForDate: classNameForDate,
459
- ariaLabelForDate: ariaLabelForDate
460
- }) : React.createElement("td", {
461
- key: i
462
- });
463
- }));
464
- }))), React.createElement(a11y.VisuallyHidden, {
465
- id: calendarGridId + 'description'
466
- }, getNavigationDescription()));
467
- };
468
-
469
- var _excluded$6 = ["locale"],
470
- _excluded2$3 = ["selectedDate", "onChange", "minDate", "maxDate", "showWeekNumbers", "weekNumberHeader", "forcedReturnType", "style", "className", "navigationDescription", "onSelectedCellClick", "onCellClick", "classNameForDate", "ariaLabelForDate", "calendarRef"];
471
- var Calendar = function Calendar(_ref) {
472
- var localOverride = _ref.locale,
473
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
474
- var props = _extends({
475
- isDisabled: rest.disabled
476
- }, rest);
477
- var _useLocale = i18n.useLocale(),
478
- locale = _useLocale.locale;
479
- return React.createElement(i18n.I18nProvider, {
480
- locale: localOverride != null ? localOverride : locale
481
- }, React.createElement(CalendarBase, _extends({}, props)));
482
- };
483
- var CalendarBase = function CalendarBase(_ref2) {
484
- var selectedDate = _ref2.selectedDate,
485
- _onChange = _ref2.onChange,
486
- minDate = _ref2.minDate,
487
- maxDate = _ref2.maxDate,
488
- _ref2$showWeekNumbers = _ref2.showWeekNumbers,
489
- showWeekNumbers = _ref2$showWeekNumbers === void 0 ? false : _ref2$showWeekNumbers,
490
- _ref2$weekNumberHeade = _ref2.weekNumberHeader,
491
- weekNumberHeader = _ref2$weekNumberHeade === void 0 ? 'uke' : _ref2$weekNumberHeade,
492
- forcedReturnType = _ref2.forcedReturnType,
493
- style = _ref2.style,
494
- className = _ref2.className,
495
- navigationDescription = _ref2.navigationDescription,
496
- _ref2$onSelectedCellC = _ref2.onSelectedCellClick,
497
- onSelectedCellClick = _ref2$onSelectedCellC === void 0 ? function () {
498
- return;
499
- } : _ref2$onSelectedCellC,
500
- _ref2$onCellClick = _ref2.onCellClick,
501
- onCellClick = _ref2$onCellClick === void 0 ? function () {
502
- return;
503
- } : _ref2$onCellClick,
504
- classNameForDate = _ref2.classNameForDate,
505
- ariaLabelForDate = _ref2.ariaLabelForDate,
506
- calendarRef = _ref2.calendarRef,
507
- rest = _objectWithoutPropertiesLoose(_ref2, _excluded2$3);
508
- var _useLocale2 = i18n.useLocale(),
509
- locale = _useLocale2.locale;
510
- var _props = _extends({}, rest, {
511
- value: selectedDate,
512
- onChange: function onChange(value) {
513
- return handleOnChange({
514
- value: value,
515
- selectedDate: selectedDate,
516
- forcedReturnType: forcedReturnType,
517
- onChange: _onChange
518
- });
519
- },
520
- locale: locale,
521
- createCalendar: createCalendar,
522
- minValue: minDate,
523
- maxValue: maxDate
524
- });
525
- var state = calendar$1.useCalendarState(_props);
526
- var _useCalendar = calendar.useCalendar(_props, state),
527
- calendarProps = _useCalendar.calendarProps,
528
- prevButtonProps = _useCalendar.prevButtonProps,
529
- nextButtonProps = _useCalendar.nextButtonProps,
530
- title = _useCalendar.title;
531
- React.useEffect(function () {
532
- return rest.onValidate == null ? void 0 : rest.onValidate(!state.isValueInvalid);
533
- }, [state.isValueInvalid]);
534
- return React.createElement("div", _extends({}, calendarProps, {
535
- ref: calendarRef,
536
- className: classNames('eds-datepicker__calendar', className),
537
- style: style
538
- }), React.createElement("div", {
539
- className: "eds-datepicker__calendar__header"
540
- }, React.createElement(CalendarButton, _extends({}, prevButtonProps, {
541
- "aria-label": ariaLabelIfNorwegian('Forrige måned', locale, prevButtonProps)
542
- }), React.createElement(icons.LeftArrowIcon, {
543
- size: 20
544
- })), React.createElement("h2", null, title), React.createElement(CalendarButton, _extends({}, nextButtonProps, {
545
- "aria-label": ariaLabelIfNorwegian('Neste måned', locale, nextButtonProps)
546
- }), React.createElement(icons.RightArrowIcon, {
547
- size: 20
548
- }))), React.createElement(CalendarGrid, _extends({}, rest, {
549
- state: state,
550
- navigationDescription: navigationDescription,
551
- onSelectedCellClick: onSelectedCellClick,
552
- onCellClick: onCellClick,
553
- classNameForDate: classNameForDate,
554
- ariaLabelForDate: ariaLabelForDate,
555
- showWeekNumbers: showWeekNumbers,
556
- weekNumberHeader: weekNumberHeader
557
- })));
558
- };
559
-
560
- var _excluded$5 = ["selectedDate", "locale", "disabled", "readOnly", "showTime", "showTimeZone", "classNameForDate", "className", "variant", "feedback", "validationVariant", "validationFeedback", "showWeekNumbers", "weekNumberHeader", "disableModal", "labelTooltip", "navigationDescription", "minDate", "maxDate", "modalTreshold", "ariaLabelForDate", "append", "prepend", "granularity"];
561
- var DatePicker = function DatePicker(_ref) {
562
- var selectedDate = _ref.selectedDate,
563
- locale = _ref.locale,
564
- disabled = _ref.disabled,
565
- readOnly = _ref.readOnly,
566
- showTime = _ref.showTime,
567
- _ref$showTimeZone = _ref.showTimeZone,
568
- showTimeZone = _ref$showTimeZone === void 0 ? false : _ref$showTimeZone,
569
- classNameForDate = _ref.classNameForDate,
570
- className = _ref.className,
571
- variant = _ref.variant,
572
- feedback = _ref.feedback,
573
- validationVariant = _ref.validationVariant,
574
- validationFeedback = _ref.validationFeedback,
575
- showWeekNumbers = _ref.showWeekNumbers,
576
- weekNumberHeader = _ref.weekNumberHeader,
577
- _ref$disableModal = _ref.disableModal,
578
- disableModal = _ref$disableModal === void 0 ? false : _ref$disableModal,
579
- labelTooltip = _ref.labelTooltip,
580
- navigationDescription = _ref.navigationDescription,
581
- minDate = _ref.minDate,
582
- maxDate = _ref.maxDate,
583
- _ref$modalTreshold = _ref.modalTreshold,
584
- modalTreshold = _ref$modalTreshold === void 0 ? 1000 : _ref$modalTreshold,
585
- ariaLabelForDate = _ref.ariaLabelForDate,
586
- append = _ref.append,
587
- prepend = _ref.prepend,
588
- _ref$granularity = _ref.granularity,
589
- granularity = _ref$granularity === void 0 ? showTime ? 'minute' : 'day' : _ref$granularity,
590
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
591
- var CALENDAR_MODAL_MAX_SCREEN_WIDTH = modalTreshold;
592
- var datePickerRef = React.useRef(null);
593
- var calendarRef = React.useRef(null);
594
- var _useWindowDimensions = utils.useWindowDimensions(),
595
- width = _useWindowDimensions.width;
596
- var _props = _extends({}, rest, {
597
- onChange: function onChange(value) {
598
- return handleOnChange({
599
- value: value,
600
- selectedDate: selectedDate,
601
- forcedReturnType: rest.forcedReturnType,
602
- onChange: rest.onChange
603
- });
604
- },
605
- minValue: minDate,
606
- // this weird logic makes sure the entire day is included if no time is provided in maxDate
607
- maxValue: 'hour' in (maxDate != null ? maxDate : {}) ? maxDate : maxDate !== undefined ? lastMillisecondOfDay(maxDate) : undefined,
608
- value: selectedDate,
609
- granularity: granularity,
610
- isDisabled: disabled || readOnly
611
- });
612
- var state = datepicker$1.useDatePickerState(_props);
613
- var _useDatePicker = datepicker.useDatePicker(_props, state, datePickerRef),
614
- groupProps = _useDatePicker.groupProps,
615
- labelProps = _useDatePicker.labelProps,
616
- fieldProps = _useDatePicker.fieldProps,
617
- buttonProps = _useDatePicker.buttonProps,
618
- dialogProps = _useDatePicker.dialogProps,
619
- calendarProps = _useDatePicker.calendarProps;
620
- // calculations for floating-UI popover position
621
- var _useFloating = reactDom.useFloating({
622
- whileElementsMounted: function whileElementsMounted(ref, _float, update) {
623
- return reactDom.autoUpdate(ref, _float, update, {
624
- elementResize: false
625
- });
626
- },
627
- placement: 'bottom-start',
628
- middleware: [reactDom.offset(tokens.space.extraSmall2), reactDom.flip(), reactDom.shift({
629
- padding: tokens.space.extraSmall
630
- })]
631
- }),
632
- refs = _useFloating.refs,
633
- floatingStyles = _useFloating.floatingStyles,
634
- update = _useFloating.update;
635
- utils.useOnClickOutside([calendarRef], function () {
636
- return state.setOpen(false);
637
- });
638
- utils.useOnEscape(calendarRef, function () {
639
- return state.setOpen(false);
640
- });
641
- var calendarSharedProps = _extends({}, dialogProps, calendarProps, {
642
- // We don't use handleOnChange here since it's handled internally by Calendar
643
- onChange: rest.onChange,
644
- forcedReturnType: rest.forcedReturnType,
645
- disabled: disabled,
646
- navigationDescription: navigationDescription,
647
- onSelectedCellClick: function onSelectedCellClick() {
648
- return state.setOpen(false);
649
- },
650
- // onCellClick is a temporary fix solving an issue where the
651
- // calendar sometimes doesn't close on date selection
652
- onCellClick: function onCellClick() {
653
- return state.setOpen(false);
654
- },
655
- selectedDate: selectedDate,
656
- minDate: minDate,
657
- maxDate: maxDate,
658
- calendarRef: calendarRef,
659
- classNameForDate: classNameForDate,
660
- ariaLabelForDate: ariaLabelForDate,
661
- showWeekNumbers: showWeekNumbers,
662
- weekNumberHeader: weekNumberHeader
663
- });
664
- var isModal = typeof width !== 'undefined' && width <= CALENDAR_MODAL_MAX_SCREEN_WIDTH && !disableModal;
665
- var popoverCalendar = React.createElement("div", {
666
- style: _extends({}, floatingStyles, {
667
- zIndex: tokens.zIndexes.popover
668
- }),
669
- ref: refs.setFloating
670
- }, React.createElement(FocusLock, {
671
- disabled: !state.isOpen || isModal,
672
- returnFocus: true
673
- }, state.isOpen && React.createElement(Calendar, _extends({}, calendarSharedProps))));
674
- var modalCalendar = React.createElement(modal.Modal, {
675
- size: "small",
676
- title: "",
677
- open: state.isOpen,
678
- onDismiss: function onDismiss() {
679
- return state.setOpen(false);
680
- },
681
- className: "eds-datepicker__calendar-modal"
682
- }, React.createElement(Calendar, _extends({}, calendarSharedProps)));
683
- return React.createElement(utils.ConditionalWrapper, {
684
- condition: locale !== undefined,
685
- wrapper: function wrapper(child) {
686
- return React.createElement(i18n.I18nProvider, {
687
- locale: locale
688
- }, child);
689
- }
690
- }, React.createElement(DateField, _extends({}, groupProps, fieldProps, rest, {
691
- append: !disabled && !readOnly && React.createElement("div", {
692
- style: {
693
- display: 'flex',
694
- alignItems: 'center'
695
- }
696
- }, append, React.createElement(CalendarButton, _extends({}, buttonProps, {
697
- onPress: function onPress() {
698
- state.setOpen(!state.isOpen);
699
- update();
700
- },
701
- className: "eds-datepicker__open-calendar-button"
702
- }), React.createElement(icons.CalendarIcon, null))),
703
- prepend: prepend,
704
- className: classNames('eds-datepicker', className, {
705
- 'eds-datepicker--disabled': disabled
706
- }),
707
- disabled: disabled,
708
- readOnly: readOnly,
709
- feedback: feedback,
710
- labelProps: labelProps,
711
- labelTooltip: labelTooltip,
712
- maxDate: maxDate,
713
- minDate: minDate,
714
- dateFieldRef: function dateFieldRef(node) {
715
- refs.setReference(node);
716
- datePickerRef.current = node;
717
- },
718
- selectedDate: selectedDate,
719
- showTime: showTime,
720
- showTimeZone: showTimeZone,
721
- validationFeedback: validationFeedback,
722
- validationVariant: validationVariant,
723
- variant: variant
724
- })), isModal ? modalCalendar : popoverCalendar);
725
- };
726
-
727
- var _excluded$4 = ["className", "style", "label", "onChange", "feedback", "variant", "disableLabelAnimation", "prepend"],
728
- _excluded2$2 = ["onChange", "variant", "value"];
729
- var NativeDatePicker = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
730
- var className = _ref.className,
731
- style = _ref.style,
732
- label = _ref.label,
733
- onChange = _ref.onChange,
734
- feedback = _ref.feedback,
735
- variant = _ref.variant,
736
- disableLabelAnimation = _ref.disableLabelAnimation,
737
- _ref$prepend = _ref.prepend,
738
- prepend = _ref$prepend === void 0 ? React.createElement(icons.DateIcon, {
739
- inline: true
740
- }) : _ref$prepend,
741
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
742
- var nativedatepickerId = utils.useRandomId('eds-nativetimepicker');
743
- return React.createElement(form.BaseFormControl, {
744
- style: style,
745
- className: className,
746
- prepend: prepend,
747
- label: label,
748
- feedback: feedback,
749
- variant: variant,
750
- labelId: nativedatepickerId,
751
- disableLabelAnimation: disableLabelAnimation,
752
- isFilled: true
753
- }, React.createElement(NativeDatePickerBase, _extends({
754
- onChange: onChange,
755
- "aria-labelledby": nativedatepickerId,
756
- ref: ref,
757
- variant: variant
758
- }, rest)));
759
- });
760
- var NativeDatePickerBase = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {
761
- var onChange = _ref2.onChange,
762
- variant = _ref2.variant,
763
- value = _ref2.value,
764
- rest = _objectWithoutPropertiesLoose(_ref2, _excluded2$2);
765
- var contextVariant = form.useVariant();
766
- var currentVariant = variant || contextVariant;
767
- var _useInputGroupContext = form.useInputGroupContext(),
768
- isDatepickerFilled = _useInputGroupContext.isFilled,
769
- setFiller = _useInputGroupContext.setFilled;
770
- utils.useOnMount(function () {
771
- setFiller && !isDatepickerFilled && setFiller(true);
772
- });
773
- React.useEffect(function () {
774
- if (value) {
775
- setFiller && !isDatepickerFilled && setFiller(true);
776
- } else {
777
- setFiller && isDatepickerFilled && setFiller(false);
778
- }
779
- }, [value, setFiller, isDatepickerFilled]);
780
- var handleChange = function handleChange(event) {
781
- if (form.isFilled(event.target)) {
782
- setFiller && !isDatepickerFilled && setFiller(true);
783
- } else {
784
- setFiller && isDatepickerFilled && setFiller(false);
785
- }
786
- if (onChange) {
787
- onChange(event);
788
- }
789
- };
790
- return React.createElement("input", _extends({
791
- ref: ref,
792
- "aria-invalid": currentVariant === 'error',
793
- type: "date",
794
- className: "eds-form-control eds-native-date-picker",
795
- onChange: handleChange,
796
- value: value
797
- }, rest));
798
- });
799
-
800
- var _excluded$3 = ["direction", "onClick", "disabled", "readonly", "aria-label"];
801
- var TimePickerArrowButton = function TimePickerArrowButton(_ref) {
802
- var direction = _ref.direction,
803
- onClick = _ref.onClick,
804
- disabled = _ref.disabled,
805
- ariaLabel = _ref['aria-label'],
806
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
807
- return React.createElement(button$1.IconButton, _extends({
808
- className: classNames('eds-timepicker__arrowbutton', "eds-timepicker__arrowbutton--" + direction, {
809
- 'eds-timepicker__arrowbutton--disabled': disabled
810
- }),
811
- type: "button",
812
- tabIndex: -1,
813
- onClick: onClick,
814
- "aria-label": ariaLabel,
815
- disabled: disabled
816
- }, rest), direction === 'left' ? React.createElement(icons.LeftArrowIcon, null) : React.createElement(icons.RightArrowIcon, null));
817
- };
818
-
819
- var _excluded$2 = ["selectedTime", "onChange", "disabled", "readOnly", "className", "style", "label", "labelTooltip", "feedback", "granularity", "variant", "locale", "showTimeZone", "showSeconds", "minuteIncrementForArrowButtons", "leftArrowButtonAriaLabel", "rightArrowButtonAriaLabel", "inputRef", "forcedReturnType", "forcedTimeZone", "append", "prepend"];
820
- var TimePicker = function TimePicker(_ref) {
821
- var selectedTime = _ref.selectedTime,
822
- onChange = _ref.onChange,
823
- disabled = _ref.disabled,
824
- readOnly = _ref.readOnly,
825
- className = _ref.className,
826
- style = _ref.style,
827
- label = _ref.label,
828
- labelTooltip = _ref.labelTooltip,
829
- feedback = _ref.feedback,
830
- granularity = _ref.granularity,
831
- variant = _ref.variant,
832
- customLocale = _ref.locale,
833
- showTimeZone = _ref.showTimeZone,
834
- _ref$showSeconds = _ref.showSeconds,
835
- showSeconds = _ref$showSeconds === void 0 ? false : _ref$showSeconds,
836
- _ref$minuteIncrementF = _ref.minuteIncrementForArrowButtons,
837
- minuteIncrementForArrowButtons = _ref$minuteIncrementF === void 0 ? 30 : _ref$minuteIncrementF,
838
- _ref$leftArrowButtonA = _ref.leftArrowButtonAriaLabel,
839
- leftArrowButtonAriaLabel = _ref$leftArrowButtonA === void 0 ? "Trekk fra " + minuteIncrementForArrowButtons + " minutter" : _ref$leftArrowButtonA,
840
- _ref$rightArrowButton = _ref.rightArrowButtonAriaLabel,
841
- rightArrowButtonAriaLabel = _ref$rightArrowButton === void 0 ? "Legg til " + minuteIncrementForArrowButtons + " minutter" : _ref$rightArrowButton,
842
- inputRef = _ref.inputRef,
843
- forcedReturnType = _ref.forcedReturnType,
844
- forcedTimeZone = _ref.forcedTimeZone,
845
- append = _ref.append,
846
- prepend = _ref.prepend,
847
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$2);
848
- var _useLocale = i18n.useLocale(),
849
- locale = _useLocale.locale;
850
- if (customLocale) locale = customLocale;
851
- var timePickerId = utils.useRandomId('eds-timepicker');
852
- var timeZone = forcedTimeZone != null ? forcedTimeZone : selectedTime !== null && 'timezone' in selectedTime ? selectedTime.timezone : 'Europe/Oslo';
853
- var handleOnChange = function handleOnChange(value) {
854
- if (forcedReturnType !== undefined || !selectedTime) {
855
- return onChange(convertValueToType({
856
- value: value,
857
- type: forcedReturnType != null ? forcedReturnType : 'ZonedDateTime',
858
- timezone: timeZone
859
- }));
860
- }
861
- onChange(value);
862
- };
863
- var state = datepicker$1.useTimeFieldState(_extends({
864
- onChange: handleOnChange,
865
- label: label,
866
- locale: locale,
867
- value: selectedTime,
868
- granularity: (granularity != null ? granularity : showSeconds) ? 'second' : 'minute',
869
- hideTimeZone: !showTimeZone,
870
- isDisabled: disabled || readOnly,
871
- shouldForceLeadingZeros: true
872
- }, rest));
873
- var timeFieldRef = React.useRef(null);
874
- var _useTimeField = datepicker.useTimeField(_extends({}, rest, {
875
- label: label
876
- }), state, timeFieldRef),
877
- labelProps = _useTimeField.labelProps,
878
- fieldProps = _useTimeField.fieldProps;
879
- var id = utils.useRandomId('timepicker');
880
- var getCurrentTime = function getCurrentTime() {
881
- var getCurrentTimeWithCorrectType = convertValueToType({
882
- value: date.now(timeZone),
883
- type: forcedReturnType != null ? forcedReturnType : 'ZonedDateTime'
884
- });
885
- return getCurrentTimeWithCorrectType;
886
- };
887
- var handleOnClickArrowButton = function handleOnClickArrowButton(operation) {
888
- if (selectedTime === null) return handleOnChange(getCurrentTime());
889
- switch (operation) {
890
- case 'add':
891
- return handleOnChange(selectedTime.add({
892
- minutes: minuteIncrementForArrowButtons - modulo(selectedTime.minute, minuteIncrementForArrowButtons)
893
- }));
894
- case 'subtract':
895
- return handleOnChange(selectedTime.subtract({
896
- minutes: modulo(selectedTime.minute - 1, minuteIncrementForArrowButtons) + 1
897
- }));
898
- }
899
- };
900
- return React.createElement(i18n.I18nProvider, {
901
- locale: locale
902
- }, React.createElement(form.BaseFormControl, {
903
- append: React.createElement("div", {
904
- style: {
905
- display: 'flex',
906
- alignItems: 'center'
907
- }
908
- }, append, React.createElement(TimePickerArrowButton, {
909
- direction: "right",
910
- disabled: disabled || readOnly,
911
- "aria-label": rightArrowButtonAriaLabel,
912
- onClick: function onClick() {
913
- return handleOnClickArrowButton('add');
914
- },
915
- onFocus: function onFocus() {
916
- return focusSegment(timeFieldRef, 'last');
917
- }
918
- })),
919
- ariaAlertOnFeedback: true,
920
- "aria-describedby": timePickerId + 'description',
921
- className: classNames('eds-timepicker', className, {
922
- 'eds-timepicker--disabled': disabled,
923
- 'eds-timepicker--has-tooltip': labelTooltip !== undefined,
924
- 'eds-timepicker--readonly': readOnly
925
- }),
926
- disabled: disabled,
927
- readOnly: readOnly,
928
- disableLabelAnimation: true,
929
- feedback: feedback,
930
- label: label,
931
- labelId: id,
932
- labelProps: _extends({}, labelProps, {
933
- 'aria-describedby': timePickerId + 'description'
934
- }),
935
- labelTooltip: labelTooltip,
936
- prepend: React.createElement("div", {
937
- style: {
938
- display: 'flex',
939
- alignItems: 'center'
940
- }
941
- }, React.createElement(TimePickerArrowButton, {
942
- direction: "left",
943
- disabled: disabled || readOnly,
944
- "aria-label": leftArrowButtonAriaLabel,
945
- onClick: function onClick() {
946
- return handleOnClickArrowButton('subtract');
947
- },
948
- onFocus: function onFocus() {
949
- return focusSegment(timeFieldRef, 'first');
950
- }
951
- }), prepend),
952
- ref: inputRef,
953
- style: style,
954
- variant: variant
955
- }, React.createElement("span", _extends({
956
- ref: timeFieldRef
957
- }, fieldProps, {
958
- style: {
959
- display: 'contents'
960
- }
961
- }), state.segments.map(function (segment, i) {
962
- return React.createElement(FieldSegment, {
963
- segment: segment,
964
- state: state,
965
- key: i,
966
- "aria-describedby": timePickerId + 'description'
967
- });
968
- })), React.createElement(a11y.VisuallyHidden, {
969
- id: timePickerId + 'description'
970
- }, selectedTime !== null ? 'valgt tid: ' + selectedTime.hour.toString().padStart(2, '0') + ':' + selectedTime.minute.toString().padStart(2, '0') + (showSeconds ? ':' + selectedTime.second.toString().padStart(2, '0') : '') : '')));
971
- };
972
-
973
- var _excluded$1 = ["className", "style", "onChange", "label", "feedback", "variant", "prepend"],
974
- _excluded2$1 = ["onChange", "value"];
975
- var NativeTimePicker = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
976
- var className = _ref.className,
977
- style = _ref.style,
978
- onChange = _ref.onChange,
979
- label = _ref.label,
980
- feedback = _ref.feedback,
981
- variant = _ref.variant,
982
- prepend = _ref.prepend,
983
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$1);
984
- var nativetimepickerId = utils.useRandomId('eds-native-timepicker');
985
- return React.createElement(form.BaseFormControl, {
986
- style: style,
987
- className: classNames(className, 'eds-native-timepicker'),
988
- prepend: prepend,
989
- label: label,
990
- feedback: feedback,
991
- variant: variant,
992
- labelId: nativetimepickerId,
993
- disableLabelAnimation: true
994
- }, React.createElement(NativeTimePickerBase, _extends({
995
- onChange: onChange,
996
- "aria-labelledby": nativetimepickerId,
997
- ref: ref
998
- }, rest)));
999
- });
1000
- var NativeTimePickerBase = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {
1001
- var onChange = _ref2.onChange,
1002
- value = _ref2.value,
1003
- rest = _objectWithoutPropertiesLoose(_ref2, _excluded2$1);
1004
- var contextVariant = form.useVariant();
1005
- var currentVariant = rest.variant || contextVariant;
1006
- var _useInputGroupContext = form.useInputGroupContext(),
1007
- isTimepickerFilled = _useInputGroupContext.isFilled,
1008
- setFiller = _useInputGroupContext.setFilled;
1009
- utils.useOnMount(function () {
1010
- setFiller && !isTimepickerFilled && setFiller(true);
1011
- });
1012
- React.useEffect(function () {
1013
- if (value) {
1014
- setFiller && !isTimepickerFilled && setFiller(true);
1015
- } else {
1016
- setFiller && isTimepickerFilled && setFiller(false);
1017
- }
1018
- }, [value, setFiller, isTimepickerFilled]);
1019
- var handleChange = function handleChange(event) {
1020
- if (form.isFilled(event.target)) {
1021
- setFiller && !isTimepickerFilled && setFiller(true);
1022
- } else {
1023
- setFiller && isTimepickerFilled && setFiller(false);
1024
- }
1025
- if (onChange) {
1026
- onChange(event);
1027
- }
1028
- };
1029
- return React.createElement("input", _extends({
1030
- ref: ref,
1031
- "aria-invalid": currentVariant === 'error',
1032
- type: "time",
1033
- className: "eds-form-control",
1034
- onChange: handleChange,
1035
- value: value
1036
- }, rest));
1037
- });
1038
-
1039
- var _excluded = ["append", "className", "disabled", "feedback", "showClockIcon", "inputRef", "label", "labelTooltip", "onChange", "padding", "prepend", "readOnly", "selectedTime", "showSeconds", "style", "variant"],
1040
- _excluded2 = ["onBlur", "onClick", "onDragStart", "onFocus", "onKeyDown", "onKeyUp", "onMouseDown", "onPointerDown", "onPointerUp"];
1041
- var inputResult;
1042
- (function (inputResult) {
1043
- inputResult[inputResult["RESET_TIME"] = 0] = "RESET_TIME";
1044
- inputResult[inputResult["INVALID"] = 1] = "INVALID";
1045
- })(inputResult || (inputResult = {}));
1046
- var SimpleTimePicker = function SimpleTimePicker(_ref) {
1047
- var append = _ref.append,
1048
- disabled = _ref.disabled,
1049
- feedback = _ref.feedback,
1050
- _ref$showClockIcon = _ref.showClockIcon,
1051
- showClockIcon = _ref$showClockIcon === void 0 ? 'right' : _ref$showClockIcon,
1052
- inputRef = _ref.inputRef,
1053
- label = _ref.label,
1054
- labelTooltip = _ref.labelTooltip,
1055
- onChange = _ref.onChange,
1056
- _ref$padding = _ref.padding,
1057
- padding = _ref$padding === void 0 ? 'default' : _ref$padding,
1058
- prepend = _ref.prepend,
1059
- readOnly = _ref.readOnly,
1060
- selectedTime = _ref.selectedTime,
1061
- showSeconds = _ref.showSeconds,
1062
- style = _ref.style,
1063
- variant = _ref.variant,
1064
- rest = _objectWithoutPropertiesLoose(_ref, _excluded);
1065
- var _useState = React.useState(''),
1066
- inputText = _useState[0],
1067
- setInputText = _useState[1];
1068
- var timeFieldRef = React.useRef(null);
1069
- var _useState2 = React.useState(null),
1070
- lastValidSelectedTime = _useState2[0],
1071
- setLastValidSelectedTime = _useState2[1];
1072
- var _useLocale = i18n.useLocale(),
1073
- locale = _useLocale.locale;
1074
- var state = datepicker$1.useTimeFieldState(_extends({
1075
- onChange: onChange,
1076
- label: label,
1077
- locale: locale,
1078
- value: selectedTime,
1079
- hideTimeZone: true,
1080
- isDisabled: disabled,
1081
- isReadOnly: readOnly
1082
- }, rest));
1083
- var _useTimeField = datepicker.useTimeField(_extends({}, rest, {
1084
- label: label
1085
- }), state, timeFieldRef),
1086
- labelProps = _useTimeField.labelProps,
1087
- fieldProps = _useTimeField.fieldProps;
1088
- React.useEffect(function () {
1089
- updateInputWithSelectedTime();
1090
- // @ts-expect-error TimeType and MappedTimeValue<TimeType> is actually the same
1091
- if (selectedTime !== null) setLastValidSelectedTime(selectedTime);
1092
- }, [selectedTime == null ? void 0 : selectedTime.toString()]);
1093
- var updateInputWithSelectedTime = function updateInputWithSelectedTime() {
1094
- var selectedTimeString = getStringFromTimeValue(selectedTime);
1095
- setInputText(selectedTimeString);
1096
- var timeFieldIsFocused = document.activeElement === (timeFieldRef == null ? void 0 : timeFieldRef.current);
1097
- if (selectedTimeString === '' && !timeFieldIsFocused) addPlaceholderToInput();
1098
- };
1099
- var getStringFromTimeValue = function getStringFromTimeValue(timeValue) {
1100
- if (timeValue === null) return '';
1101
- var timeObject = 'day' in timeValue ? date.toTime(timeValue) : timeValue;
1102
- if (showSeconds) return timeObject.toString().slice(0, 8);
1103
- return timeObject.toString().slice(0, 5);
1104
- };
1105
- var addPlaceholderToInput = function addPlaceholderToInput() {
1106
- if (showSeconds) setInputText('–– : –– : ––');else setInputText('–– : ––');
1107
- };
1108
- var handleChangeTime = function handleChangeTime() {
1109
- var newTime = getValueForOnChangeFromInput();
1110
- if (newTime === inputResult.INVALID) {
1111
- return updateInputWithSelectedTime();
1112
- }
1113
- if ((newTime == null ? void 0 : newTime.toString()) !== (selectedTime == null ? void 0 : selectedTime.toString())) onChange == null || onChange(newTime);
1114
- };
1115
- var getValueForOnChangeFromInput = function getValueForOnChangeFromInput() {
1116
- var formatedTimeString = formatTimeString(inputText);
1117
- var newTimeObject = formatedTimeStringToTimeObject(formatedTimeString);
1118
- if (newTimeObject === inputResult.INVALID) {
1119
- return inputResult.INVALID;
1120
- }
1121
- if (newTimeObject === inputResult.RESET_TIME) {
1122
- return null;
1123
- }
1124
- var updatedSelectedTime = getSelectedTimeWithTimeFromObject(newTimeObject);
1125
- return updatedSelectedTime;
1126
- };
1127
- var formatTimeString = function formatTimeString(timeString) {
1128
- if (timeString.length === 0) return inputResult.RESET_TIME;
1129
- if (timeString.length < 3 || timeString.length > 8) return inputResult.INVALID;
1130
- var numberOfColons = (timeString.match(new RegExp(':', 'g')) || []).length;
1131
- var stringLength = timeString.length;
1132
- // targets 'd:dd:dd' and 'dd:dd:dd'
1133
- if (numberOfColons === 2 && stringLength >= 7) {
1134
- return timeString.padStart(8, '0');
1135
- }
1136
- // targets 'd:dd' and 'dd:dd'
1137
- if (numberOfColons === 1) {
1138
- return timeString.padStart(5, '0');
1139
- }
1140
- if (stringLength > 6) return inputResult.INVALID;
1141
- var stringLengthIsEven = stringLength % 2 == 0;
1142
- var hourString = stringLengthIsEven ? timeString.slice(0, 2) : timeString.slice(0, 1);
1143
- var minuteString = stringLengthIsEven ? timeString.slice(2, 4) : timeString.slice(1, 3);
1144
- var secondString = function () {
1145
- var stringSlice = stringLengthIsEven ? timeString.slice(4, 6) : timeString.slice(3, 5);
1146
- if (stringSlice === '') return '00';
1147
- return stringSlice;
1148
- }();
1149
- var timeStringWithColon = hourString.padStart(2, '0') + ':' + minuteString + (showSeconds ? ':' + secondString : '');
1150
- return timeStringWithColon;
1151
- };
1152
- var formatedTimeStringToTimeObject = function formatedTimeStringToTimeObject(formatedTimeString) {
1153
- if (formatedTimeString === inputResult.INVALID) return inputResult.INVALID;
1154
- if (formatedTimeString === inputResult.RESET_TIME) return inputResult.RESET_TIME;
1155
- var isNumberTest = /^\d+$/;
1156
- var hourString = formatedTimeString.slice(0, 2);
1157
- var minuteString = formatedTimeString.slice(3, 5);
1158
- var secondString = formatedTimeString.slice(6, 8);
1159
- if (hourString.match(isNumberTest) && minuteString.match(isNumberTest) && (secondString === '' || secondString.match(isNumberTest))) {
1160
- try {
1161
- var timeObject = date.parseTime(formatedTimeString);
1162
- return timeObject;
1163
- } catch (e) {
1164
- return inputResult.INVALID;
1165
- }
1166
- }
1167
- return inputResult.INVALID;
1168
- };
1169
- var getSelectedTimeWithTimeFromObject = function getSelectedTimeWithTimeFromObject(newTime) {
1170
- var selectedTimeWithUpdateTime = (lastValidSelectedTime != null ? lastValidSelectedTime : new date.Time()).set({
1171
- hour: newTime.hour,
1172
- minute: newTime.minute,
1173
- second: newTime.second
1174
- });
1175
- return selectedTimeWithUpdateTime;
1176
- };
1177
- var usedFieldProps = _objectWithoutPropertiesLoose(fieldProps, _excluded2);
1178
- return React.createElement(i18n.I18nProvider, {
1179
- locale: locale
1180
- }, React.createElement(form.TextField, _extends({
1181
- append: append || (showClockIcon === true || showClockIcon === 'right' ? React.createElement(icons.ClockIcon, {
1182
- onClick: function onClick() {
1183
- var _timeFieldRef$current;
1184
- return timeFieldRef == null || (_timeFieldRef$current = timeFieldRef.current) == null ? void 0 : _timeFieldRef$current.focus();
1185
- },
1186
- inline: true
1187
- }) : undefined),
1188
- className: classNames('eds-simple-timepicker', {
1189
- 'eds-simple-timepicker--padding-large': padding === 'large',
1190
- 'eds-simple-timepicker--show-seconds': showSeconds,
1191
- 'eds-simple-timepicker--hide-clock': !showClockIcon,
1192
- 'eds-simple-timepicker--has-tooltip': labelTooltip !== undefined
1193
- }),
1194
- disabled: disabled,
1195
- disableLabelAnimation: true,
1196
- feedback: feedback,
1197
- label: label,
1198
- labelProps: labelProps,
1199
- labelTooltip: labelTooltip,
1200
- onBlur: function onBlur() {
1201
- handleChangeTime();
1202
- if (selectedTime === null) {
1203
- addPlaceholderToInput();
1204
- }
1205
- },
1206
- onChange: function onChange(e) {
1207
- return setInputText(e.target.value);
1208
- },
1209
- onFocus: function onFocus() {
1210
- if (selectedTime === null) {
1211
- setInputText('');
1212
- }
1213
- },
1214
- onKeyDown: function onKeyDown(_ref2) {
1215
- var key = _ref2.key;
1216
- if (key === 'Enter') handleChangeTime();
1217
- },
1218
- placeholder: showSeconds ? '–– : –– : ––' : '–– : ––',
1219
- prepend: prepend || (showClockIcon === 'left' ? React.createElement(icons.ClockIcon, {
1220
- onClick: function onClick() {
1221
- var _timeFieldRef$current2;
1222
- return timeFieldRef == null || (_timeFieldRef$current2 = timeFieldRef.current) == null ? void 0 : _timeFieldRef$current2.focus();
1223
- }
1224
- }) : undefined),
1225
- readOnly: readOnly,
1226
- ref: utils.mergeRefs(timeFieldRef, inputRef),
1227
- style: style,
1228
- value: inputText,
1229
- variant: variant
1230
- }, usedFieldProps)));
1231
- };
1232
-
1233
- utils.warnAboutMissingStyles('datepicker', 'form', 'icons');
1234
-
1235
- Object.defineProperty(exports, 'CalendarDate', {
1236
- enumerable: true,
1237
- get: function () { return date.CalendarDate; }
1238
- });
1239
- Object.defineProperty(exports, 'CalendarDateTime', {
1240
- enumerable: true,
1241
- get: function () { return date.CalendarDateTime; }
1242
- });
1243
- Object.defineProperty(exports, 'Time', {
1244
- enumerable: true,
1245
- get: function () { return date.Time; }
1246
- });
1247
- Object.defineProperty(exports, 'ZonedDateTime', {
1248
- enumerable: true,
1249
- get: function () { return date.ZonedDateTime; }
1250
- });
1251
- exports.Calendar = Calendar;
1252
- exports.DateField = DateField;
1253
- exports.DatePicker = DatePicker;
1254
- exports.NativeDatePicker = NativeDatePicker;
1255
- exports.NativeTimePicker = NativeTimePicker;
1256
- exports.SimpleTimePicker = SimpleTimePicker;
1257
- exports.TimePicker = TimePicker;
1258
- exports.ariaLabelIfNorwegian = ariaLabelIfNorwegian;
1259
- exports.convertValueToType = convertValueToType;
1260
- exports.createCalendar = createCalendar;
1261
- exports.focusSegment = focusSegment;
1262
- exports.getWeekNumberForDate = getWeekNumberForDate;
1263
- exports.handleOnChange = handleOnChange;
1264
- exports.lastMillisecondOfDay = lastMillisecondOfDay;
1265
- exports.modulo = modulo;
1266
- exports.nativeDateToDateValue = nativeDateToDateValue;
1267
- exports.nativeDateToTimeValue = nativeDateToTimeValue;
1268
- exports.timeOrDateValueToNativeDate = timeOrDateValueToNativeDate;
1269
- //# sourceMappingURL=datepicker.cjs.development.js.map