@entur/datepicker 2.0.2 → 2.0.5

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 CHANGED
@@ -3,6 +3,22 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [2.0.5](https://bitbucket.org/enturas/design-system/compare/@entur/datepicker@2.0.4...@entur/datepicker@2.0.5) (2022-06-02)
7
+
8
+ ### Bug Fixes
9
+
10
+ - **datepicker:** make keyboard navigation in datepicker more accessible ([ec7be40](https://bitbucket.org/enturas/design-system/commits/ec7be4018bfbdab9da48b996e83968297c6d4f4b))
11
+
12
+ ## [2.0.4](https://bitbucket.org/enturas/design-system/compare/@entur/datepicker@2.0.3...@entur/datepicker@2.0.4) (2022-05-13)
13
+
14
+ **Note:** Version bump only for package @entur/datepicker
15
+
16
+ ## [2.0.3](https://bitbucket.org/enturas/design-system/compare/@entur/datepicker@2.0.2...@entur/datepicker@2.0.3) (2022-05-04)
17
+
18
+ ### Bug Fixes
19
+
20
+ - **datepicker:** fix form being submitted on clicking month change buttons ([6c3a32d](https://bitbucket.org/enturas/design-system/commits/6c3a32de335a07c0ebbe06e2c7107a9c08cc7135))
21
+
6
22
  ## [2.0.2](https://bitbucket.org/enturas/design-system/compare/@entur/datepicker@2.0.1...@entur/datepicker@2.0.2) (2022-04-27)
7
23
 
8
24
  **Note:** Version bump only for package @entur/datepicker
@@ -12,11 +12,15 @@ declare type DatePickerInputProps = {
12
12
  calendarButtonTooltip: string;
13
13
  hideCalendarButton?: boolean;
14
14
  inputRef: React.RefObject<HTMLInputElement>;
15
+ calendarButtonId: string;
15
16
  forwardRef: React.ForwardedRef<HTMLInputElement>;
16
17
  toggleCalendarGUI: () => void;
17
- onClick?: React.MouseEventHandler<HTMLButtonElement | HTMLInputElement>;
18
+ setFocusToCalendarGUI: () => void;
19
+ setShouldFocusOnCalendarButtonAfterSelect: React.Dispatch<React.SetStateAction<boolean>>;
18
20
  onKeyDownInput: (event: KeyboardEvent) => any;
19
21
  onBlurInput: (event: FocusEvent) => any;
22
+ calendarGUIIsOpen: () => boolean | undefined;
23
+ onClick?: React.MouseEventHandler<HTMLInputElement>;
20
24
  onFocus: undefined;
21
25
  selectedDate: Date | null;
22
26
  placeholder?: null;
@@ -104,6 +104,7 @@ var DatePickerHeader = function DatePickerHeader(_ref) {
104
104
  return React__default["default"].createElement("div", {
105
105
  className: "eds-datepicker__calender__header"
106
106
  }, React__default["default"].createElement(button.IconButton, {
107
+ type: "button",
107
108
  className: "eds-datepicker__calender__header__month-button--left",
108
109
  onClick: decreaseMonth,
109
110
  disabled: prevMonthButtonDisabled
@@ -112,6 +113,7 @@ var DatePickerHeader = function DatePickerHeader(_ref) {
112
113
  }, monthNames[(_date$getMonth = date == null ? void 0 : date.getMonth()) != null ? _date$getMonth : 0]), React__default["default"].createElement(typography.Heading3, {
113
114
  className: "eds-datepicker__calender__header__month-text"
114
115
  }, date == null ? void 0 : date.getFullYear()), React__default["default"].createElement(button.IconButton, {
116
+ type: "button",
115
117
  className: "eds-datepicker__calender__header__month-button--right",
116
118
  onClick: increaseMonth,
117
119
  disabled: nextMonthButtonDisabled
@@ -136,7 +138,7 @@ function getMonthList(locale) {
136
138
  return Array.from(monthList, getMonthName);
137
139
  }
138
140
 
139
- var _excluded$4 = ["style", "label", "inputPlaceholder", "prepend", "feedback", "variant", "disabled", "calendarButtonTooltip", "hideCalendarButton", "disableLabelAnimation", "inputRef", "forwardRef", "toggleCalendarGUI", "onKeyDownInput", "onBlurInput", "selectedDate", "placeholder"];
141
+ var _excluded$4 = ["style", "label", "inputPlaceholder", "prepend", "feedback", "variant", "disabled", "calendarButtonTooltip", "hideCalendarButton", "disableLabelAnimation", "inputRef", "calendarButtonId", "forwardRef", "toggleCalendarGUI", "onKeyDownInput", "onBlurInput", "selectedDate", "setFocusToCalendarGUI", "setShouldFocusOnCalendarButtonAfterSelect", "calendarGUIIsOpen", "placeholder", "onClick"];
140
142
  var DatePickerInput = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
141
143
  var style = _ref.style,
142
144
  label = _ref.label,
@@ -149,11 +151,16 @@ var DatePickerInput = /*#__PURE__*/React__default["default"].forwardRef(function
149
151
  hideCalendarButton = _ref.hideCalendarButton,
150
152
  disableLabelAnimation = _ref.disableLabelAnimation,
151
153
  inputRef = _ref.inputRef,
154
+ calendarButtonId = _ref.calendarButtonId,
152
155
  forwardRef = _ref.forwardRef,
153
156
  toggleCalendarGUI = _ref.toggleCalendarGUI,
154
157
  onKeyDownInput = _ref.onKeyDownInput,
155
158
  onBlurInput = _ref.onBlurInput,
156
159
  selectedDate = _ref.selectedDate,
160
+ setFocusToCalendarGUI = _ref.setFocusToCalendarGUI,
161
+ setShouldFocusOnCalendarButtonAfterSelect = _ref.setShouldFocusOnCalendarButtonAfterSelect,
162
+ calendarGUIIsOpen = _ref.calendarGUIIsOpen,
163
+ onClick = _ref.onClick,
157
164
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
158
165
 
159
166
  React__default["default"].useEffect(function () {
@@ -168,7 +175,7 @@ var DatePickerInput = /*#__PURE__*/React__default["default"].forwardRef(function
168
175
  (_inputRef$current4 = inputRef.current) == null ? void 0 : _inputRef$current4.removeEventListener('keydown', handleOnKeyDown);
169
176
  (_inputRef$current5 = inputRef.current) == null ? void 0 : _inputRef$current5.removeEventListener('blur', handleOnBlur);
170
177
  (_inputRef$current6 = inputRef.current) == null ? void 0 : _inputRef$current6.removeEventListener('focus', handleOnFocus);
171
- };
178
+ }; // eslint-disable-next-line react-hooks/exhaustive-deps
172
179
  }, [inputRef, selectedDate]);
173
180
 
174
181
  function handleOnKeyDown(event) {
@@ -179,13 +186,24 @@ var DatePickerInput = /*#__PURE__*/React__default["default"].forwardRef(function
179
186
  onBlurInput(event);
180
187
  }
181
188
 
182
- function handleOnFocus() {
183
- setTimeout(function () {
189
+ var handleOnFocus = function handleOnFocus() {
190
+ return requestAnimationFrame(function () {
184
191
  var _inputRef$current7;
185
192
 
186
193
  return (_inputRef$current7 = inputRef.current) == null ? void 0 : _inputRef$current7.select();
187
- }, 5);
188
- }
194
+ });
195
+ };
196
+
197
+ var handleOnClickInputField = function handleOnClickInputField(event) {
198
+ setShouldFocusOnCalendarButtonAfterSelect(false);
199
+ onClick && onClick(event);
200
+ };
201
+
202
+ var handleOnClickCalendarButton = function handleOnClickCalendarButton() {
203
+ toggleCalendarGUI();
204
+ setFocusToCalendarGUI();
205
+ setShouldFocusOnCalendarButtonAfterSelect(true);
206
+ };
189
207
 
190
208
  return React__default["default"].createElement(form.TextField, _extends({
191
209
  style: style,
@@ -196,14 +214,17 @@ var DatePickerInput = /*#__PURE__*/React__default["default"].forwardRef(function
196
214
  variant: variant,
197
215
  disableLabelAnimation: disableLabelAnimation,
198
216
  ref: mergeRefs(ref, inputRef, forwardRef),
217
+ onClick: handleOnClickInputField,
199
218
  append: !hideCalendarButton && React__default["default"].createElement(tooltip.Tooltip, {
200
219
  placement: "top",
201
220
  content: calendarButtonTooltip,
202
221
  disableHoverListener: disabled,
203
222
  disableFocusListener: disabled
204
223
  }, React__default["default"].createElement(button.IconButton, {
224
+ id: calendarButtonId,
205
225
  type: "button",
206
- onClick: toggleCalendarGUI
226
+ onClick: handleOnClickCalendarButton,
227
+ tabIndex: calendarGUIIsOpen() ? -1 : 0
207
228
  }, React__default["default"].createElement(icons.CalendarIcon, null)))
208
229
  }, rest));
209
230
  });
@@ -271,40 +292,71 @@ var DatePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_re
271
292
  rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
272
293
 
273
294
  var datepickerId = utils.useRandomId('eds-datepicker');
295
+ var datepickerRef = React.useRef(null);
296
+ var inputRef = React__default["default"].useRef(null);
297
+ var calendarButton = document.getElementById(datepickerId + '-button');
274
298
 
275
299
  var _useState = React.useState(false),
276
300
  showValidation = _useState[0],
277
301
  setShowValidation = _useState[1];
278
302
 
279
- var datepickerRef = React.useRef(null);
280
- var inputRef = React__default["default"].useRef(null);
303
+ var _useState2 = React.useState(false),
304
+ shouldFocusOnCalendarButtonAfterSelect = _useState2[0],
305
+ setShouldFocusOnCalendarButtonAfterSelect = _useState2[1]; // eslint-disable-next-line react-hooks/exhaustive-deps
306
+
307
+
281
308
  React__default["default"].useEffect(function () {
282
309
  return validateInput();
283
310
  }, [selectedDate]);
284
311
 
285
- var handleOnKeyDown = function handleOnKeyDown(event) {
286
- var _datepickerRef$curren;
312
+ var handleOnChange = function handleOnChange(date, event) {
313
+ var _inputRef$current;
287
314
 
288
- var calendarIsClosed = !((_datepickerRef$curren = datepickerRef.current) != null && _datepickerRef$curren.isCalendarOpen());
315
+ if (shouldFocusOnCalendarButtonAfterSelect && !hideCalendarButton) {
316
+ calendarButton == null ? void 0 : calendarButton.focus();
317
+ setShouldFocusOnCalendarButtonAfterSelect(false);
318
+ } else (_inputRef$current = inputRef.current) == null ? void 0 : _inputRef$current.focus();
319
+
320
+ onChange(date, event);
321
+ };
322
+
323
+ var handleOnKeyDown = function handleOnKeyDown(event) {
289
324
  setShowValidation(false);
290
325
 
291
326
  if (event.key === 'Enter') {
292
- validateInput();
327
+ if (!datePickerGUIIsOpen()) {
328
+ // onBlurInput will validate if calendar is open
329
+ validateInput();
330
+ forceUpdateInputFormat();
331
+ }
332
+
293
333
  focusAndSelectInputField();
334
+ } else if (event.key === 'Tab' && datePickerGUIIsOpen()) {
294
335
  forceUpdateInputFormat();
295
- } else if (event.key === 'Tab' && calendarIsClosed) {
296
- validateInput();
336
+ } else if (event.key === 'Escape') {
297
337
  forceUpdateInputFormat();
338
+ focusAndSelectInputField();
339
+ if (datePickerGUIIsOpen()) toggleCalendarGUI();
298
340
  }
299
341
 
300
342
  onKeyDown(event);
301
343
  };
302
344
 
345
+ var handleOnClickOutside = function handleOnClickOutside() {
346
+ return setShouldFocusOnCalendarButtonAfterSelect(false);
347
+ };
348
+
349
+ var handleOnBlurInput = function handleOnBlurInput() {
350
+ if (datePickerGUIIsOpen()) return;
351
+ validateInput();
352
+ forceUpdateInputFormat();
353
+ };
354
+
303
355
  var validateInput = function validateInput() {
304
- var _inputRef$current;
356
+ var _inputRef$current2;
305
357
 
306
358
  setShowValidation(false);
307
- var inputValue = (_inputRef$current = inputRef.current) == null ? void 0 : _inputRef$current.value;
359
+ var inputValue = (_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.value;
308
360
  if (!inputValue) return;
309
361
  var inputValueParsedWithAllDateFormats = dateFormats.map(function (format) {
310
362
  return dateFns.parse(inputValue, format, new Date(), {
@@ -340,25 +392,43 @@ var DatePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_re
340
392
  };
341
393
 
342
394
  var focusAndSelectInputField = function focusAndSelectInputField() {
343
- return setTimeout(function () {
344
- var _inputRef$current2;
395
+ return requestAnimationFrame(function () {
396
+ var _inputRef$current3;
345
397
 
346
- (_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.select();
347
- }, 5);
398
+ return (_inputRef$current3 = inputRef.current) == null ? void 0 : _inputRef$current3.select();
399
+ });
348
400
  };
349
401
 
350
402
  var forceUpdateInputFormat = function forceUpdateInputFormat() {
351
- var _datepickerRef$curren2;
403
+ var _datepickerRef$curren;
352
404
 
353
- return (_datepickerRef$curren2 = datepickerRef.current) == null ? void 0 : _datepickerRef$curren2.setState({
405
+ return (_datepickerRef$curren = datepickerRef.current) == null ? void 0 : _datepickerRef$curren.setState({
354
406
  inputValue: null
355
407
  });
356
408
  };
357
409
 
358
410
  var toggleCalendarGUI = function toggleCalendarGUI() {
359
- var _datepickerRef$curren3, _datepickerRef$curren4;
411
+ var _datepickerRef$curren2;
360
412
 
361
- return (_datepickerRef$curren3 = datepickerRef.current) == null ? void 0 : _datepickerRef$curren3.setOpen(!((_datepickerRef$curren4 = datepickerRef.current) != null && _datepickerRef$curren4.isCalendarOpen()));
413
+ return (_datepickerRef$curren2 = datepickerRef.current) == null ? void 0 : _datepickerRef$curren2.setOpen(!datePickerGUIIsOpen());
414
+ }; // this focus function will fail if both an inline and a non-inline calendar is present in the same document
415
+
416
+
417
+ var setFocusToCalendarGUI = function setFocusToCalendarGUI() {
418
+ if (inline || hideCalendar || datePickerGUIIsOpen()) return; // 1 frame delay to allow calendar to spawn
419
+
420
+ requestAnimationFrame(function () {
421
+ var dateToSetFocusTo = selectedDate ? document.getElementsByClassName('eds-datepicker__calender__day--selected')[0] : document.getElementsByClassName('eds-datepicker__calender__day--today')[0];
422
+ if (dateToSetFocusTo !== null) dateToSetFocusTo.focus();
423
+ });
424
+ setShouldFocusOnCalendarButtonAfterSelect(true);
425
+ setShowValidation(false);
426
+ };
427
+
428
+ var datePickerGUIIsOpen = function datePickerGUIIsOpen() {
429
+ var _datepickerRef$curren3;
430
+
431
+ return (_datepickerRef$curren3 = datepickerRef.current) == null ? void 0 : _datepickerRef$curren3.isCalendarOpen();
362
432
  };
363
433
 
364
434
  return React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(ReactDatepicker__default["default"], _extends({
@@ -368,8 +438,8 @@ var DatePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_re
368
438
  dateFormat: dateFormats,
369
439
  showWeekNumbers: true,
370
440
  weekLabel: weekLabel,
371
- onChange: onChange,
372
- onClickOutside: validateInput,
441
+ onChange: handleOnChange,
442
+ onClickOutside: handleOnClickOutside,
373
443
  id: datepickerId,
374
444
  ariaLabelledBy: datepickerId,
375
445
  showPopperArrow: false,
@@ -419,15 +489,15 @@ var DatePicker = /*#__PURE__*/React__default["default"].forwardRef(function (_re
419
489
  feedback: getFeedbackAndVariant().feedback,
420
490
  variant: getFeedbackAndVariant().variant,
421
491
  inputRef: inputRef,
492
+ calendarButtonId: datepickerId + '-button',
422
493
  forwardRef: ref,
423
494
  onKeyDownInput: handleOnKeyDown,
424
- onBlurInput: function onBlurInput() {
425
- var _datepickerRef$curren5;
426
-
427
- return !((_datepickerRef$curren5 = datepickerRef.current) != null && _datepickerRef$curren5.isCalendarOpen()) && validateInput();
428
- },
495
+ onBlurInput: handleOnBlurInput,
429
496
  onFocus: undefined,
430
497
  toggleCalendarGUI: toggleCalendarGUI,
498
+ setFocusToCalendarGUI: setFocusToCalendarGUI,
499
+ setShouldFocusOnCalendarButtonAfterSelect: setShouldFocusOnCalendarButtonAfterSelect,
500
+ calendarGUIIsOpen: datePickerGUIIsOpen,
431
501
  disableLabelAnimation: disableLabelAnimation,
432
502
  hideCalendarButton: hideCalendarButton,
433
503
  selectedDate: selectedDate
@@ -1 +1 @@
1
- {"version":3,"file":"datepicker.cjs.development.js","sources":["../src/DatePicker/DatePickerHeader.tsx","../src/DatePicker/DatePickerInput.tsx","../src/DatePicker/DatePicker.tsx","../src/NativeDatePicker.tsx","../src/TimePicker.tsx","../src/NativeTimePicker.tsx","../src/index.tsx"],"sourcesContent":["import React from 'react';\nimport { ReactDatePickerCustomHeaderProps } from 'react-datepicker';\n\nimport { LeftArrowIcon, RightArrowIcon } from '@entur/icons';\nimport { Heading3 } from '@entur/typography';\nimport { IconButton } from '@entur/button';\n\nexport const DatePickerHeader = ({\n date,\n decreaseMonth,\n increaseMonth,\n prevMonthButtonDisabled,\n nextMonthButtonDisabled,\n}: Partial<ReactDatePickerCustomHeaderProps>) => {\n const monthNames = getMonthList();\n return (\n <div className=\"eds-datepicker__calender__header\">\n <IconButton\n className=\"eds-datepicker__calender__header__month-button--left\"\n onClick={decreaseMonth}\n disabled={prevMonthButtonDisabled}\n >\n <LeftArrowIcon />\n </IconButton>\n <Heading3 className=\"eds-datepicker__calender__header__month-text\">\n {monthNames[date?.getMonth() ?? 0]}\n </Heading3>\n <Heading3 className=\"eds-datepicker__calender__header__month-text\">\n {date?.getFullYear()}\n </Heading3>\n\n <IconButton\n className=\"eds-datepicker__calender__header__month-button--right\"\n onClick={increaseMonth}\n disabled={nextMonthButtonDisabled}\n >\n <RightArrowIcon />\n </IconButton>\n </div>\n );\n};\n\nfunction getMonthList(locale = 'nb') {\n const year = new Date().getFullYear();\n const monthList = Array(12).keys();\n const formatter = new Intl.DateTimeFormat(locale, {\n month: 'long',\n });\n const getMonthName = (monthIndex: number) =>\n formatter.format(new Date(year, monthIndex));\n\n return Array.from(monthList, getMonthName);\n}\n","import React from 'react';\n\nimport { TextField, VariantType } from '@entur/form';\nimport { Tooltip } from '@entur/tooltip';\nimport { IconButton } from '@entur/button';\nimport { CalendarIcon } from '@entur/icons';\n\ntype DatePickerInputProps = {\n style?: React.CSSProperties;\n label: string;\n inputPlaceholder: string;\n prepend?: React.ReactNode;\n feedback?: string;\n variant?: VariantType;\n disabled?: boolean;\n disableLabelAnimation?: boolean;\n calendarButtonTooltip: string;\n hideCalendarButton?: boolean;\n inputRef: React.RefObject<HTMLInputElement>;\n forwardRef: React.ForwardedRef<HTMLInputElement>;\n toggleCalendarGUI: () => void;\n onClick?: React.MouseEventHandler<HTMLButtonElement | HTMLInputElement>;\n onKeyDownInput: (event: KeyboardEvent) => any;\n onBlurInput: (event: FocusEvent) => any;\n onFocus: undefined; // To prevent open on focus\n selectedDate: Date | null; // Necessary to update component on state change\n placeholder?: null; // override react-datepickers placeholder prop\n};\n\nexport const DatePickerInput = React.forwardRef<\n HTMLInputElement,\n DatePickerInputProps\n>(\n (\n {\n style,\n label,\n inputPlaceholder,\n prepend,\n feedback,\n variant,\n disabled,\n calendarButtonTooltip,\n hideCalendarButton,\n disableLabelAnimation,\n inputRef,\n forwardRef,\n toggleCalendarGUI,\n onKeyDownInput,\n onBlurInput,\n selectedDate,\n placeholder, // eslint-disable-line\n ...rest // forwarded props from react-datepicker\n },\n ref,\n ) => {\n React.useEffect(() => {\n inputRef.current?.addEventListener('keydown', handleOnKeyDown);\n inputRef.current?.addEventListener('blur', handleOnBlur);\n inputRef.current?.addEventListener('focus', handleOnFocus);\n return () => {\n inputRef.current?.removeEventListener('keydown', handleOnKeyDown);\n inputRef.current?.removeEventListener('blur', handleOnBlur);\n inputRef.current?.removeEventListener('focus', handleOnFocus);\n };\n }, [inputRef, selectedDate]);\n\n function handleOnKeyDown(this: HTMLElement, event: KeyboardEvent) {\n onKeyDownInput(event);\n }\n function handleOnBlur(this: HTMLElement, event: FocusEvent) {\n onBlurInput(event);\n }\n function handleOnFocus() {\n setTimeout(() => inputRef.current?.select(), 5);\n }\n\n return (\n <TextField\n style={style}\n label={label}\n placeholder={inputPlaceholder}\n prepend={prepend}\n feedback={feedback}\n variant={variant}\n disableLabelAnimation={disableLabelAnimation}\n ref={mergeRefs(ref, inputRef, forwardRef)}\n append={\n !hideCalendarButton && (\n <Tooltip\n placement=\"top\"\n content={calendarButtonTooltip}\n disableHoverListener={disabled}\n disableFocusListener={disabled}\n >\n <IconButton type=\"button\" onClick={toggleCalendarGUI}>\n <CalendarIcon />\n </IconButton>\n </Tooltip>\n )\n }\n {...rest}\n />\n );\n },\n);\n\nconst mergeRefs = <T extends HTMLElement>(\n ...refs: React.MutableRefObject<T>[] | React.ForwardedRef<T>[]\n) => {\n return (node: T) => {\n for (const ref of refs) {\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) ref.current = node;\n }\n };\n};\n","import React, { useRef, useState } from 'react';\nimport ReactDatePicker, {\n default as ReactDatepicker,\n ReactDatePickerProps,\n registerLocale,\n} from 'react-datepicker';\nimport { parse, isSameDay, Locale } from 'date-fns';\nimport { nb } from 'date-fns/locale';\nimport classNames from 'classnames';\n\nimport { VariantType } from '@entur/form';\nimport { useRandomId } from '@entur/utils';\n\nimport { DatePickerHeader } from './DatePickerHeader';\nimport { DatePickerInput } from './DatePickerInput';\n\nimport './DatePicker.scss';\nimport 'react-datepicker/dist/react-datepicker.css';\n\nregisterLocale('nb', nb);\n\nexport type DatePickerProps = {\n /** Hva som er den valgte datoen */\n selectedDate: Date | null;\n /** Kalles når datoen/tiden endres */\n onChange: (\n date: Date | null,\n event: React.SyntheticEvent<any, Event> | undefined,\n ) => void;\n /**\n * Kalles når en tast trykkes i inputfeltet\n */\n onKeyDown?: (event: KeyboardEvent) => void;\n /**\n * Datoformater som skal støttes. Første i listen er formatet alt input omgjøres til.\n * Format-valg tilgjengelig her: https://date-fns.org/v2.28.0/docs/format\n * OBS: Noen kombinasjoner av datoformater kan gi rar og uønsket oppførsel,\n * test nøye ved endring\n * @default \"['dd.MM.yyyy', 'ddMMyyyy', 'dd/MM/yyyy', 'ddMMyy']\"\n */\n dateFormats?: string[];\n /**\n * Locale fra date-fns som brukes av Datepicker-en\n * @default nb\n */\n locale?: Locale;\n /** Placeholder om ingen dato er valgt\n * @default \"dd.mm.yyyy\"\n */\n placeholder?: string;\n /** Ekstra klassenavn */\n className?: string;\n /** Label over DatePicker */\n label: string;\n /**\n * Varselmelding, som vil komme under DatePicker\n */\n feedback?: string;\n /** Valideringsvariant\n */\n variant?: VariantType;\n /** Varselmelding for når datoen er på feil format\n * @default \"Ugyldig dato\"\n */\n validationFeedback?: string;\n /** Valideringsvariant for melding om feil datoformat\n * @default \"error\"\n */\n validationVariant?: VariantType;\n style?: React.CSSProperties;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n /** Tekst eller ikon som kommer før inputfelter\n * @default <DateIcon />\n */\n prepend?: React.ReactNode;\n /**\n * Tekst som vises ved hover på «Åpne kalender»-knappen\n */\n calendarButtonTooltip?: string;\n /** Skjuler knapp for åpning av kalender\n * @default false\n */\n hideCalendarButton?: boolean;\n /** Skjuler tilbakemeldingsteksten ved feil dato-input\n * @default false\n */\n hideValidation?: boolean;\n /** Skjuler kalender-GUI-et\n * @default false\n */\n hideCalendar?: boolean;\n /** Viser kun kalender-popover-en\n * @default false\n */\n inline?: boolean;\n // For testing\n 'data-cy'?: any;\n} & Omit<\n ReactDatePickerProps,\n 'selected' | 'customInput' | 'onChangeRaw' | 'dateFormat' | 'locale'\n>;\n\nexport const DatePicker = React.forwardRef<HTMLInputElement, DatePickerProps>(\n (\n {\n style,\n className,\n selectedDate,\n label,\n placeholder = 'dd.mm.yyyy',\n onChange,\n onKeyDown = () => null,\n dateFormats = ['dd.MM.yyyy', 'ddMMyyyy', 'dd/MM/yyyy', 'ddMMyy'],\n minDate,\n maxDate,\n inline = false,\n disabled,\n prepend,\n feedback = '',\n variant,\n validationFeedback = 'Ugyldig dato',\n validationVariant = 'error',\n disableLabelAnimation = false,\n calendarButtonTooltip = 'Åpne\\xa0kalender',\n hideCalendarButton = false,\n hideCalendar = false,\n hideValidation = false,\n weekLabel = 'uke',\n locale = nb,\n open,\n ...rest\n },\n ref,\n ) => {\n const datepickerId = useRandomId('eds-datepicker');\n\n const [showValidation, setShowValidation] = useState(false);\n\n const datepickerRef = useRef<ReactDatePicker>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => validateInput(), [selectedDate]);\n\n const handleOnKeyDown = (event: KeyboardEvent) => {\n const calendarIsClosed = !datepickerRef.current?.isCalendarOpen();\n\n setShowValidation(false);\n if (event.key === 'Enter') {\n validateInput();\n focusAndSelectInputField();\n forceUpdateInputFormat();\n } else if (event.key === 'Tab' && calendarIsClosed) {\n validateInput();\n forceUpdateInputFormat();\n }\n onKeyDown(event);\n };\n\n const validateInput = () => {\n setShowValidation(false);\n const inputValue = inputRef.current?.value;\n if (!inputValue) return;\n\n const inputValueParsedWithAllDateFormats = dateFormats.map(format =>\n parse(inputValue, format, new Date(), {\n locale: locale,\n }),\n );\n\n const parsedDateFromInputIsTheSameAsSelectedDate =\n selectedDate &&\n inputValueParsedWithAllDateFormats.some(dateFormat =>\n isSameDay(dateFormat, selectedDate),\n );\n\n if (parsedDateFromInputIsTheSameAsSelectedDate) {\n // valid date inputted\n setShowValidation(false);\n } else {\n // invalid date inputted\n setShowValidation(true);\n }\n };\n\n const getFeedbackAndVariant = (): {\n feedback: string;\n variant: VariantType | undefined;\n } => {\n if (feedback) return { feedback, variant };\n if (!hideValidation && showValidation)\n return { feedback: validationFeedback, variant: validationVariant };\n return { feedback: '', variant: undefined };\n };\n\n const focusAndSelectInputField = () =>\n setTimeout(() => {\n inputRef.current?.select();\n }, 5);\n\n const forceUpdateInputFormat = () =>\n datepickerRef.current?.setState({ inputValue: null });\n\n const toggleCalendarGUI = () =>\n datepickerRef.current?.setOpen(!datepickerRef.current?.isCalendarOpen());\n\n return (\n <>\n <ReactDatepicker\n selected={selectedDate}\n minDate={minDate}\n maxDate={maxDate}\n dateFormat={dateFormats}\n showWeekNumbers\n weekLabel={weekLabel}\n onChange={onChange}\n onClickOutside={validateInput}\n id={datepickerId}\n ariaLabelledBy={datepickerId}\n showPopperArrow={false}\n locale={locale}\n inline={inline}\n disabled={disabled}\n preventOpenOnFocus={true}\n open={hideCalendar ? false : open}\n ref={datepickerRef}\n calendarClassName=\"eds-datepicker__calender\"\n dayClassName={() => 'eds-datepicker__calender__day'}\n weekDayClassName={() => 'eds-datepicker__calender__day-name'}\n className={classNames(className, 'eds-datepicker__input')}\n highlightDates={[\n { 'eds-datepicker__calender__day--today': [new Date()] },\n {\n 'eds-datepicker__calender__day--selected': selectedDate\n ? [selectedDate]\n : [],\n },\n ]}\n renderCustomHeader={({\n date,\n changeYear,\n changeMonth,\n decreaseMonth,\n increaseMonth,\n prevMonthButtonDisabled,\n nextMonthButtonDisabled,\n }) => (\n <DatePickerHeader\n date={date}\n changeYear={changeYear}\n changeMonth={changeMonth}\n increaseMonth={increaseMonth}\n decreaseMonth={decreaseMonth}\n prevMonthButtonDisabled={prevMonthButtonDisabled}\n nextMonthButtonDisabled={nextMonthButtonDisabled}\n />\n )}\n customInput={\n <DatePickerInput\n style={style}\n label={label}\n inputPlaceholder={placeholder}\n calendarButtonTooltip={calendarButtonTooltip}\n prepend={prepend}\n feedback={getFeedbackAndVariant().feedback}\n variant={getFeedbackAndVariant().variant}\n inputRef={inputRef}\n forwardRef={ref}\n onKeyDownInput={handleOnKeyDown}\n onBlurInput={() =>\n !datepickerRef.current?.isCalendarOpen() && validateInput()\n }\n onFocus={undefined}\n toggleCalendarGUI={toggleCalendarGUI}\n disableLabelAnimation={disableLabelAnimation}\n hideCalendarButton={hideCalendarButton}\n selectedDate={selectedDate}\n />\n }\n {...rest}\n />\n </>\n );\n },\n);\n","import React from 'react';\nimport {\n BaseFormControl,\n isFilled,\n useInputGroupContext,\n useVariant,\n VariantType,\n} from '@entur/form';\nimport { DateIcon } from '@entur/icons';\nimport { useOnMount, useRandomId } from '@entur/utils';\n\nexport type NativeDatePickerProps = {\n /** Ekstra klassenavn */\n className?: string;\n /** Label over NativeDatePicker */\n label: string;\n /** Varselmelding, som vil komme under NativeDatePicker */\n feedback?: string;\n /** Valideringsvariant */\n variant?: VariantType;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n /** Tekst eller ikon som kommer før inputfelter\n * @default <DateIcon />\n */\n prepend?: React.ReactNode;\n} & React.InputHTMLAttributes<HTMLInputElement>;\n\nexport const NativeDatePicker = React.forwardRef<\n HTMLInputElement,\n NativeDatePickerProps\n>(\n (\n {\n className,\n style,\n label,\n onChange,\n feedback,\n variant,\n disableLabelAnimation,\n prepend = <DateIcon inline />,\n ...rest\n },\n ref: React.Ref<HTMLInputElement>,\n ) => {\n const nativedatepickerId = useRandomId('eds-nativetimepicker');\n return (\n <BaseFormControl\n style={style}\n className={className}\n prepend={prepend}\n label={label}\n feedback={feedback}\n variant={variant}\n labelId={nativedatepickerId}\n disableLabelAnimation={disableLabelAnimation}\n isFilled\n >\n <NativeDatePickerBase\n onChange={onChange}\n aria-labelledby={nativedatepickerId}\n ref={ref}\n variant={variant}\n {...rest}\n />\n </BaseFormControl>\n );\n },\n);\n\ntype NativeDatePickerBaseProps = {\n onChange?: any;\n variant?: VariantType;\n} & React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n>;\n\nconst NativeDatePickerBase = React.forwardRef<\n HTMLInputElement,\n NativeDatePickerBaseProps\n>(({ onChange, variant, value, ...rest }, ref) => {\n const contextVariant = useVariant();\n const currentVariant = variant || contextVariant;\n const { isFilled: isDatepickerFilled, setFilled: setFiller } =\n useInputGroupContext();\n\n useOnMount(() => {\n setFiller && !isDatepickerFilled && setFiller(true);\n });\n\n React.useEffect(() => {\n if (value) {\n setFiller && !isDatepickerFilled && setFiller(true);\n } else {\n setFiller && isDatepickerFilled && setFiller(false);\n }\n }, [value, setFiller, isDatepickerFilled]);\n\n const handleChange = (event: any) => {\n if (isFilled(event.target)) {\n setFiller && !isDatepickerFilled && setFiller(true);\n } else {\n setFiller && isDatepickerFilled && setFiller(false);\n }\n if (onChange) {\n onChange(event);\n }\n };\n return (\n <input\n ref={ref}\n aria-invalid={currentVariant === 'error'}\n type=\"date\"\n className=\"eds-form-control eds-native-date-picker\"\n onChange={handleChange}\n value={value}\n {...rest}\n />\n );\n});\n","import React from 'react';\nimport {\n default as ReactDatepicker,\n ReactDatePickerProps,\n registerLocale,\n} from 'react-datepicker';\nimport classNames from 'classnames';\nimport {\n BaseFormControl,\n useInputGroupContext,\n VariantType,\n} from '@entur/form';\nimport { LeftArrowIcon, RightArrowIcon } from '@entur/icons';\nimport { useOnMount, useRandomId } from '@entur/utils';\nimport { nb } from 'date-fns/locale';\nimport { add, sub } from 'date-fns';\nimport * as Popper from '@popperjs/core';\nimport './TimePicker.scss';\nregisterLocale('nb', nb);\n\nexport type TimePickerProps = {\n /** Hva som er den valgte datoen */\n selectedTime?: Date;\n /** Kalles når datoen/tiden endres */\n onChange: (\n date: Date | null,\n event: React.SyntheticEvent<any, Event>,\n ) => void;\n /** Placeholder om ingen dato er valgt\n * @default \"Velg tid\"\n */\n placeholder?: string;\n /** Ekstra klassenavn */\n className?: string;\n /** Label over TimePicker */\n label: string;\n /** Varselmelding, som vil komme under TimePicker */\n feedback?: string;\n /** Valideringsvariant */\n variant?: VariantType;\n style?: React.CSSProperties;\n labelTooltip?: React.ReactNode;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n /** Kalles ved klikk på pil venstre i TimePicker\n * @default Trekker fra 30 minutter av den valgte tiden\n */\n onLeftArrowClick?: (selectedTime?: Date | null, e?: React.MouseEvent) => void;\n /** Kalles ved klikk på pil høyre i TimePicker\n * @default Legger til 30 minutter av den valgte tiden\n */\n onRightArrowClick?: (\n selectedTime?: Date | null,\n e?: React.MouseEvent,\n ) => void;\n} & ReactDatePickerProps;\n\nexport const TimePicker = React.forwardRef<HTMLDivElement, TimePickerProps>(\n (\n {\n selectedTime = null,\n onChange,\n placeholder = 'Velg tid',\n disabled,\n className,\n style,\n label,\n labelTooltip,\n feedback,\n variant,\n disableLabelAnimation,\n locale = 'nb',\n onLeftArrowClick = (selectedTime, event) =>\n selectedTime && onChange(sub(selectedTime, { minutes: 30 }), event),\n onRightArrowClick = (selectedTime, event) =>\n selectedTime && onChange(add(selectedTime, { minutes: 30 }), event),\n ...rest\n },\n ref,\n ) => {\n const timepickerId = useRandomId('eds-timepicker');\n return (\n <BaseFormControl\n style={style}\n ref={ref}\n label={label}\n labelId={timepickerId}\n labelTooltip={labelTooltip}\n variant={variant}\n feedback={feedback}\n disableLabelAnimation={disableLabelAnimation}\n className=\"eds-timepicker-form-control\"\n disabled={disabled}\n prepend={\n <TimePickerArrowButton\n direction=\"left\"\n tabIndex={-1}\n onClick={(e: React.MouseEvent) => onLeftArrowClick(selectedTime, e)}\n disabled={disabled}\n />\n }\n >\n <TimePickerBase\n selectedTime={selectedTime}\n onChange={onChange}\n placeholder={placeholder}\n className={className}\n locale={locale}\n ariaLabelledBy={timepickerId}\n disabled={disabled}\n {...rest}\n />\n <TimePickerArrowButton\n direction=\"right\"\n tabIndex={-1}\n onClick={(e: React.MouseEvent) => onRightArrowClick(selectedTime, e)}\n disabled={disabled}\n />\n </BaseFormControl>\n );\n },\n);\n\ntype TimePickerBaseProps = {\n /** Hva som er den valgte datoen */\n selectedTime?: Date | null;\n /** Kalles når datoen/tiden endres */\n onChange: (\n date: Date | null,\n event: React.SyntheticEvent<any, Event>,\n ) => void;\n /** Placeholder om ingen dato er valgt\n * @default \"Velg tid\"\n */\n placeholder?: string;\n /** Ekstra klassenavn */\n className?: string;\n [key: string]: any;\n} & ReactDatePickerProps;\n\nconst POPPER_MODIFIERS: Popper.StrictModifiers[] = [\n {\n name: 'offset',\n enabled: true,\n options: {\n offset: [0, 0],\n },\n },\n];\nconst TimePickerBase: React.FC<TimePickerBaseProps> = ({\n className,\n onChange,\n selectedTime,\n placeholder,\n timeFormat = 'HH:mm',\n dateFormat = ['HH:mm', 'HHmm'],\n ...rest\n}) => {\n const { isFilled: isTimepickerFilled, setFilled: setFiller } =\n useInputGroupContext();\n\n useOnMount(() => {\n if (selectedTime) {\n setFiller && !isTimepickerFilled && setFiller(true);\n }\n });\n\n React.useEffect(() => {\n if (selectedTime) {\n setFiller && !isTimepickerFilled && setFiller(true);\n } else {\n setFiller && isTimepickerFilled && setFiller(false);\n }\n }, [selectedTime, setFiller, isTimepickerFilled]);\n\n const handleChange = (date: any, event: any) => {\n if (date) {\n setFiller && !isTimepickerFilled && setFiller(true);\n } else {\n setFiller && isTimepickerFilled && setFiller(false);\n }\n if (onChange) {\n onChange(date, event);\n }\n };\n return (\n <ReactDatepicker\n className={classNames(\n 'eds-form-control',\n 'eds-timepicker__input',\n className,\n )}\n calendarClassName=\"eds-timepicker\"\n selected={selectedTime}\n onChange={handleChange}\n dateFormat={dateFormat}\n timeFormat={timeFormat}\n showTimeSelect\n showTimeInput={true}\n showTimeSelectOnly\n showPopperArrow={false}\n placeholderText={placeholder}\n popperClassName=\"eds-datepicker__popper\"\n popperModifiers={POPPER_MODIFIERS}\n open={false}\n {...rest}\n />\n );\n};\n\ntype TimePickerArrowButtonProps = {\n direction: 'left' | 'right';\n} & React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n>;\n\nconst TimePickerArrowButton: React.FC<TimePickerArrowButtonProps> = ({\n direction,\n ...rest\n}) => {\n return (\n <button\n className={classNames(\n 'eds-timepicker__arrowbutton',\n `eds-timepicker__arrowbutton--${direction}`,\n )}\n type=\"button\"\n {...rest}\n >\n {direction === 'left' ? <LeftArrowIcon /> : <RightArrowIcon />}\n </button>\n );\n};\n","import React from 'react';\nimport {\n BaseFormControl,\n isFilled,\n useInputGroupContext,\n useVariant,\n VariantType,\n} from '@entur/form';\nimport { ClockIcon } from '@entur/icons';\nimport { useOnMount, useRandomId } from '@entur/utils';\n\nexport type NativeTimePickerProps = {\n /** Ekstra klassenavn */\n className?: string;\n /** Label over NativeTimePicker */\n label: string;\n /** Varselmelding, som vil komme under NativeTimePicker */\n feedback?: string;\n /** Valideringsvariant */\n variant?: VariantType;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n /** Tekst eller ikon som kommer før inputfelter\n * @default <ClockIcon />\n */\n prepend?: React.ReactNode;\n} & React.InputHTMLAttributes<HTMLInputElement>;\n\nexport const NativeTimePicker = React.forwardRef<\n HTMLInputElement,\n NativeTimePickerProps\n>(\n (\n {\n className,\n style,\n onChange,\n label,\n feedback,\n variant,\n disableLabelAnimation,\n prepend = <ClockIcon />,\n ...rest\n },\n ref: React.Ref<HTMLInputElement>,\n ) => {\n const nativetimepickerId = useRandomId('eds-nativetimepicker');\n return (\n <BaseFormControl\n style={style}\n className={className}\n prepend={prepend}\n label={label}\n feedback={feedback}\n variant={variant}\n labelId={nativetimepickerId}\n disableLabelAnimation={disableLabelAnimation}\n >\n <NativeTimePickerBase\n onChange={onChange}\n aria-labelledby={nativetimepickerId}\n ref={ref}\n {...rest}\n />\n </BaseFormControl>\n );\n },\n);\n\ntype NativeTimePickerBaseProps = {\n variant?: VariantType;\n} & React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n>;\n\nconst NativeTimePickerBase = React.forwardRef<\n HTMLInputElement,\n NativeTimePickerBaseProps\n>(({ onChange, value, ...rest }, ref) => {\n const contextVariant = useVariant();\n const currentVariant = rest.variant || contextVariant;\n const { isFilled: isTimepickerFilled, setFilled: setFiller } =\n useInputGroupContext();\n\n useOnMount(() => {\n setFiller && !isTimepickerFilled && setFiller(true);\n });\n\n React.useEffect(() => {\n if (value) {\n setFiller && !isTimepickerFilled && setFiller(true);\n } else {\n setFiller && isTimepickerFilled && setFiller(false);\n }\n }, [value, setFiller, isTimepickerFilled]);\n\n const handleChange = (event: any) => {\n if (isFilled(event.target)) {\n setFiller && !isTimepickerFilled && setFiller(true);\n } else {\n setFiller && isTimepickerFilled && setFiller(false);\n }\n if (onChange) {\n onChange(event);\n }\n };\n return (\n <input\n ref={ref}\n aria-invalid={currentVariant === 'error'}\n type=\"time\"\n className=\"eds-form-control eds-native-date-picker\"\n onChange={handleChange}\n value={value}\n {...rest}\n />\n );\n});\n","import { warnAboutMissingStyles } from '@entur/utils';\nimport './index.scss';\n\nwarnAboutMissingStyles('datepicker', 'form', 'icons');\n\nexport * from './DatePicker';\nexport * from './NativeDatePicker';\nexport * from './TimePicker';\nexport * from './NativeTimePicker';\n"],"names":["DatePickerHeader","date","decreaseMonth","increaseMonth","prevMonthButtonDisabled","nextMonthButtonDisabled","monthNames","getMonthList","React","className","IconButton","onClick","disabled","LeftArrowIcon","Heading3","getMonth","getFullYear","RightArrowIcon","locale","year","Date","monthList","Array","keys","formatter","Intl","DateTimeFormat","month","getMonthName","monthIndex","format","from","DatePickerInput","forwardRef","ref","style","label","inputPlaceholder","prepend","feedback","variant","calendarButtonTooltip","hideCalendarButton","disableLabelAnimation","inputRef","toggleCalendarGUI","onKeyDownInput","onBlurInput","selectedDate","rest","useEffect","current","addEventListener","handleOnKeyDown","handleOnBlur","handleOnFocus","removeEventListener","event","setTimeout","select","TextField","placeholder","mergeRefs","append","Tooltip","placement","content","disableHoverListener","disableFocusListener","type","CalendarIcon","refs","node","registerLocale","nb","DatePicker","onChange","onKeyDown","dateFormats","minDate","maxDate","inline","validationFeedback","validationVariant","hideCalendar","hideValidation","weekLabel","open","datepickerId","useRandomId","useState","showValidation","setShowValidation","datepickerRef","useRef","validateInput","calendarIsClosed","isCalendarOpen","key","focusAndSelectInputField","forceUpdateInputFormat","inputValue","value","inputValueParsedWithAllDateFormats","map","parse","parsedDateFromInputIsTheSameAsSelectedDate","some","dateFormat","isSameDay","getFeedbackAndVariant","undefined","setState","setOpen","ReactDatepicker","selected","showWeekNumbers","onClickOutside","id","ariaLabelledBy","showPopperArrow","preventOpenOnFocus","calendarClassName","dayClassName","weekDayClassName","classNames","highlightDates","renderCustomHeader","changeYear","changeMonth","customInput","onFocus","NativeDatePicker","DateIcon","nativedatepickerId","BaseFormControl","labelId","isFilled","NativeDatePickerBase","contextVariant","useVariant","currentVariant","useInputGroupContext","isDatepickerFilled","setFiller","setFilled","useOnMount","handleChange","target","TimePicker","selectedTime","labelTooltip","onLeftArrowClick","sub","minutes","onRightArrowClick","add","timepickerId","TimePickerArrowButton","direction","tabIndex","e","TimePickerBase","POPPER_MODIFIERS","name","enabled","options","offset","timeFormat","isTimepickerFilled","showTimeSelect","showTimeInput","showTimeSelectOnly","placeholderText","popperClassName","popperModifiers","NativeTimePicker","ClockIcon","nativetimepickerId","NativeTimePickerBase","warnAboutMissingStyles"],"mappings":"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"}
1
+ {"version":3,"file":"datepicker.cjs.development.js","sources":["../src/DatePicker/DatePickerHeader.tsx","../src/DatePicker/DatePickerInput.tsx","../src/DatePicker/DatePicker.tsx","../src/NativeDatePicker.tsx","../src/TimePicker.tsx","../src/NativeTimePicker.tsx","../src/index.tsx"],"sourcesContent":["import React from 'react';\nimport { ReactDatePickerCustomHeaderProps } from 'react-datepicker';\n\nimport { LeftArrowIcon, RightArrowIcon } from '@entur/icons';\nimport { Heading3 } from '@entur/typography';\nimport { IconButton } from '@entur/button';\n\nexport const DatePickerHeader = ({\n date,\n decreaseMonth,\n increaseMonth,\n prevMonthButtonDisabled,\n nextMonthButtonDisabled,\n}: Partial<ReactDatePickerCustomHeaderProps>) => {\n const monthNames = getMonthList();\n return (\n <div className=\"eds-datepicker__calender__header\">\n <IconButton\n type=\"button\"\n className=\"eds-datepicker__calender__header__month-button--left\"\n onClick={decreaseMonth}\n disabled={prevMonthButtonDisabled}\n >\n <LeftArrowIcon />\n </IconButton>\n <Heading3 className=\"eds-datepicker__calender__header__month-text\">\n {monthNames[date?.getMonth() ?? 0]}\n </Heading3>\n <Heading3 className=\"eds-datepicker__calender__header__month-text\">\n {date?.getFullYear()}\n </Heading3>\n\n <IconButton\n type=\"button\"\n className=\"eds-datepicker__calender__header__month-button--right\"\n onClick={increaseMonth}\n disabled={nextMonthButtonDisabled}\n >\n <RightArrowIcon />\n </IconButton>\n </div>\n );\n};\n\nfunction getMonthList(locale = 'nb') {\n const year = new Date().getFullYear();\n const monthList = Array(12).keys();\n const formatter = new Intl.DateTimeFormat(locale, {\n month: 'long',\n });\n const getMonthName = (monthIndex: number) =>\n formatter.format(new Date(year, monthIndex));\n\n return Array.from(monthList, getMonthName);\n}\n","import React from 'react';\n\nimport { TextField, VariantType } from '@entur/form';\nimport { Tooltip } from '@entur/tooltip';\nimport { IconButton } from '@entur/button';\nimport { CalendarIcon } from '@entur/icons';\n\ntype DatePickerInputProps = {\n style?: React.CSSProperties;\n label: string;\n inputPlaceholder: string;\n prepend?: React.ReactNode;\n feedback?: string;\n variant?: VariantType;\n disabled?: boolean;\n disableLabelAnimation?: boolean;\n calendarButtonTooltip: string;\n hideCalendarButton?: boolean;\n inputRef: React.RefObject<HTMLInputElement>;\n calendarButtonId: string;\n forwardRef: React.ForwardedRef<HTMLInputElement>;\n toggleCalendarGUI: () => void;\n setFocusToCalendarGUI: () => void;\n setShouldFocusOnCalendarButtonAfterSelect: React.Dispatch<\n React.SetStateAction<boolean>\n >;\n onKeyDownInput: (event: KeyboardEvent) => any;\n onBlurInput: (event: FocusEvent) => any;\n calendarGUIIsOpen: () => boolean | undefined;\n onClick?: React.MouseEventHandler<HTMLInputElement>; // react-datepicker's onClick prop\n onFocus: undefined; // To prevent open on focus\n selectedDate: Date | null; // Necessary to update component on state change\n placeholder?: null; // override react-datepickers placeholder prop\n};\n\nexport const DatePickerInput = React.forwardRef<\n HTMLInputElement,\n DatePickerInputProps\n>(\n (\n {\n style,\n label,\n inputPlaceholder,\n prepend,\n feedback,\n variant,\n disabled,\n calendarButtonTooltip,\n hideCalendarButton,\n disableLabelAnimation,\n inputRef,\n calendarButtonId,\n forwardRef,\n toggleCalendarGUI,\n onKeyDownInput,\n onBlurInput,\n selectedDate,\n setFocusToCalendarGUI,\n setShouldFocusOnCalendarButtonAfterSelect,\n calendarGUIIsOpen,\n placeholder, // eslint-disable-line\n onClick,\n ...rest // forwarded props from react-datepicker\n },\n ref,\n ) => {\n React.useEffect(() => {\n inputRef.current?.addEventListener('keydown', handleOnKeyDown);\n inputRef.current?.addEventListener('blur', handleOnBlur);\n inputRef.current?.addEventListener('focus', handleOnFocus);\n return () => {\n inputRef.current?.removeEventListener('keydown', handleOnKeyDown);\n inputRef.current?.removeEventListener('blur', handleOnBlur);\n inputRef.current?.removeEventListener('focus', handleOnFocus);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [inputRef, selectedDate]);\n\n function handleOnKeyDown(this: HTMLElement, event: KeyboardEvent) {\n onKeyDownInput(event);\n }\n function handleOnBlur(this: HTMLElement, event: FocusEvent) {\n onBlurInput(event);\n }\n const handleOnFocus = () =>\n requestAnimationFrame(() => inputRef.current?.select());\n\n const handleOnClickInputField = (\n event: React.MouseEvent<HTMLInputElement, MouseEvent>,\n ) => {\n setShouldFocusOnCalendarButtonAfterSelect(false);\n onClick && onClick(event);\n };\n\n const handleOnClickCalendarButton = () => {\n toggleCalendarGUI();\n setFocusToCalendarGUI();\n setShouldFocusOnCalendarButtonAfterSelect(true);\n };\n\n return (\n <TextField\n style={style}\n label={label}\n placeholder={inputPlaceholder}\n prepend={prepend}\n feedback={feedback}\n variant={variant}\n disableLabelAnimation={disableLabelAnimation}\n ref={mergeRefs(ref, inputRef, forwardRef)}\n onClick={handleOnClickInputField}\n append={\n !hideCalendarButton && (\n <Tooltip\n placement=\"top\"\n content={calendarButtonTooltip}\n disableHoverListener={disabled}\n disableFocusListener={disabled}\n >\n <IconButton\n id={calendarButtonId}\n type=\"button\"\n onClick={handleOnClickCalendarButton}\n tabIndex={calendarGUIIsOpen() ? -1 : 0}\n >\n <CalendarIcon />\n </IconButton>\n </Tooltip>\n )\n }\n {...rest}\n />\n );\n },\n);\n\nconst mergeRefs = <T extends HTMLElement>(\n ...refs: React.MutableRefObject<T>[] | React.ForwardedRef<T>[]\n) => {\n return (node: T) => {\n for (const ref of refs) {\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) ref.current = node;\n }\n };\n};\n","import React, { useRef, useState } from 'react';\nimport ReactDatePicker, {\n default as ReactDatepicker,\n ReactDatePickerProps,\n registerLocale,\n} from 'react-datepicker';\nimport { parse, isSameDay, Locale } from 'date-fns';\nimport { nb } from 'date-fns/locale';\nimport classNames from 'classnames';\n\nimport { VariantType } from '@entur/form';\nimport { useRandomId } from '@entur/utils';\n\nimport { DatePickerHeader } from './DatePickerHeader';\nimport { DatePickerInput } from './DatePickerInput';\n\nimport './DatePicker.scss';\nimport 'react-datepicker/dist/react-datepicker.css';\n\nregisterLocale('nb', nb);\n\nexport type DatePickerProps = {\n /** Hva som er den valgte datoen */\n selectedDate: Date | null;\n /** Kalles når datoen/tiden endres */\n onChange: (\n date: Date | null,\n event: React.SyntheticEvent<any, Event> | undefined,\n ) => void;\n /**\n * Kalles når en tast trykkes i inputfeltet\n */\n onKeyDown?: (event: KeyboardEvent) => void;\n /**\n * Datoformater som skal støttes. Første i listen er formatet alt input omgjøres til.\n * Format-valg tilgjengelig her: https://date-fns.org/v2.28.0/docs/format\n * OBS: Noen kombinasjoner av datoformater kan gi rar og uønsket oppførsel,\n * test nøye ved endring\n * @default \"['dd.MM.yyyy', 'ddMMyyyy', 'dd/MM/yyyy', 'ddMMyy']\"\n */\n dateFormats?: string[];\n /**\n * Locale fra date-fns som brukes av Datepicker-en\n * @default nb\n */\n locale?: Locale;\n /** Placeholder om ingen dato er valgt\n * @default \"dd.mm.yyyy\"\n */\n placeholder?: string;\n /** Ekstra klassenavn */\n className?: string;\n /** Label over DatePicker */\n label: string;\n /**\n * Varselmelding, som vil komme under DatePicker\n */\n feedback?: string;\n /** Valideringsvariant\n */\n variant?: VariantType;\n /** Varselmelding for når datoen er på feil format\n * @default \"Ugyldig dato\"\n */\n validationFeedback?: string;\n /** Valideringsvariant for melding om feil datoformat\n * @default \"error\"\n */\n validationVariant?: VariantType;\n style?: React.CSSProperties;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n /** Tekst eller ikon som kommer før inputfelter\n * @default <DateIcon />\n */\n prepend?: React.ReactNode;\n /**\n * Tekst som vises ved hover på «Åpne kalender»-knappen\n */\n calendarButtonTooltip?: string;\n /** Skjuler knapp for åpning av kalender\n * @default false\n */\n hideCalendarButton?: boolean;\n /** Skjuler tilbakemeldingsteksten ved feil dato-input\n * @default false\n */\n hideValidation?: boolean;\n /** Skjuler kalender-GUI-et\n * @default false\n */\n hideCalendar?: boolean;\n /** Viser kun kalender-popover-en\n * @default false\n */\n inline?: boolean;\n // For testing\n 'data-cy'?: any;\n} & Omit<\n ReactDatePickerProps,\n 'selected' | 'customInput' | 'onChangeRaw' | 'dateFormat' | 'locale'\n>;\n\nexport const DatePicker = React.forwardRef<HTMLInputElement, DatePickerProps>(\n (\n {\n style,\n className,\n selectedDate,\n label,\n placeholder = 'dd.mm.yyyy',\n onChange,\n onKeyDown = () => null,\n dateFormats = ['dd.MM.yyyy', 'ddMMyyyy', 'dd/MM/yyyy', 'ddMMyy'],\n minDate,\n maxDate,\n inline = false,\n disabled,\n prepend,\n feedback = '',\n variant,\n validationFeedback = 'Ugyldig dato',\n validationVariant = 'error',\n disableLabelAnimation = false,\n calendarButtonTooltip = 'Åpne\\xa0kalender',\n hideCalendarButton = false,\n hideCalendar = false,\n hideValidation = false,\n weekLabel = 'uke',\n locale = nb,\n open,\n ...rest\n },\n ref,\n ) => {\n const datepickerId = useRandomId('eds-datepicker');\n\n const datepickerRef = useRef<ReactDatePicker>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const calendarButton = document.getElementById(datepickerId + '-button');\n\n const [showValidation, setShowValidation] = useState(false);\n const [\n shouldFocusOnCalendarButtonAfterSelect,\n setShouldFocusOnCalendarButtonAfterSelect,\n ] = useState(false);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n React.useEffect(() => validateInput(), [selectedDate]);\n\n const handleOnChange = (\n date: Date | null,\n event: React.SyntheticEvent<any, Event> | undefined,\n ): void => {\n if (shouldFocusOnCalendarButtonAfterSelect && !hideCalendarButton) {\n calendarButton?.focus();\n setShouldFocusOnCalendarButtonAfterSelect(false);\n } else inputRef.current?.focus();\n\n onChange(date, event);\n };\n\n const handleOnKeyDown = (event: KeyboardEvent) => {\n setShowValidation(false);\n\n if (event.key === 'Enter') {\n if (!datePickerGUIIsOpen()) {\n // onBlurInput will validate if calendar is open\n validateInput();\n forceUpdateInputFormat();\n }\n focusAndSelectInputField();\n } else if (event.key === 'Tab' && datePickerGUIIsOpen()) {\n forceUpdateInputFormat();\n } else if (event.key === 'Escape') {\n forceUpdateInputFormat();\n focusAndSelectInputField();\n if (datePickerGUIIsOpen()) toggleCalendarGUI();\n }\n onKeyDown(event);\n };\n\n const handleOnClickOutside = () =>\n setShouldFocusOnCalendarButtonAfterSelect(false);\n\n const handleOnBlurInput = () => {\n if (datePickerGUIIsOpen()) return;\n validateInput();\n forceUpdateInputFormat();\n };\n\n const validateInput = () => {\n setShowValidation(false);\n const inputValue = inputRef.current?.value;\n if (!inputValue) return;\n\n const inputValueParsedWithAllDateFormats = dateFormats.map(format =>\n parse(inputValue, format, new Date(), {\n locale: locale,\n }),\n );\n\n const parsedDateFromInputIsTheSameAsSelectedDate =\n selectedDate &&\n inputValueParsedWithAllDateFormats.some(dateFormat =>\n isSameDay(dateFormat, selectedDate),\n );\n\n if (parsedDateFromInputIsTheSameAsSelectedDate) {\n // valid date inputted\n setShowValidation(false);\n } else {\n // invalid date inputted\n setShowValidation(true);\n }\n };\n\n const getFeedbackAndVariant = (): {\n feedback: string;\n variant: VariantType | undefined;\n } => {\n if (feedback) return { feedback, variant };\n if (!hideValidation && showValidation)\n return { feedback: validationFeedback, variant: validationVariant };\n return { feedback: '', variant: undefined };\n };\n\n const focusAndSelectInputField = () =>\n requestAnimationFrame(() => inputRef.current?.select());\n\n const forceUpdateInputFormat = () =>\n datepickerRef.current?.setState({ inputValue: null });\n\n const toggleCalendarGUI = () =>\n datepickerRef.current?.setOpen(!datePickerGUIIsOpen());\n\n // this focus function will fail if both an inline and a non-inline calendar is present in the same document\n const setFocusToCalendarGUI = () => {\n if (inline || hideCalendar || datePickerGUIIsOpen()) return;\n // 1 frame delay to allow calendar to spawn\n requestAnimationFrame(() => {\n const dateToSetFocusTo = selectedDate\n ? (document.getElementsByClassName(\n 'eds-datepicker__calender__day--selected',\n )[0] as HTMLElement | null)\n : (document.getElementsByClassName(\n 'eds-datepicker__calender__day--today',\n )[0] as HTMLElement | null);\n if (dateToSetFocusTo !== null) dateToSetFocusTo.focus();\n });\n setShouldFocusOnCalendarButtonAfterSelect(true);\n setShowValidation(false);\n };\n\n const datePickerGUIIsOpen = () => datepickerRef.current?.isCalendarOpen();\n\n return (\n <>\n <ReactDatepicker\n selected={selectedDate}\n minDate={minDate}\n maxDate={maxDate}\n dateFormat={dateFormats}\n showWeekNumbers\n weekLabel={weekLabel}\n onChange={handleOnChange}\n onClickOutside={handleOnClickOutside}\n id={datepickerId}\n ariaLabelledBy={datepickerId}\n showPopperArrow={false}\n locale={locale}\n inline={inline}\n disabled={disabled}\n preventOpenOnFocus={true}\n open={hideCalendar ? false : open}\n ref={datepickerRef}\n calendarClassName=\"eds-datepicker__calender\"\n dayClassName={() => 'eds-datepicker__calender__day'}\n weekDayClassName={() => 'eds-datepicker__calender__day-name'}\n className={classNames(className, 'eds-datepicker__input')}\n highlightDates={[\n { 'eds-datepicker__calender__day--today': [new Date()] },\n {\n 'eds-datepicker__calender__day--selected': selectedDate\n ? [selectedDate]\n : [],\n },\n ]}\n renderCustomHeader={({\n date,\n changeYear,\n changeMonth,\n decreaseMonth,\n increaseMonth,\n prevMonthButtonDisabled,\n nextMonthButtonDisabled,\n }) => (\n <DatePickerHeader\n date={date}\n changeYear={changeYear}\n changeMonth={changeMonth}\n increaseMonth={increaseMonth}\n decreaseMonth={decreaseMonth}\n prevMonthButtonDisabled={prevMonthButtonDisabled}\n nextMonthButtonDisabled={nextMonthButtonDisabled}\n />\n )}\n customInput={\n <DatePickerInput\n style={style}\n label={label}\n inputPlaceholder={placeholder}\n calendarButtonTooltip={calendarButtonTooltip}\n prepend={prepend}\n feedback={getFeedbackAndVariant().feedback}\n variant={getFeedbackAndVariant().variant}\n inputRef={inputRef}\n calendarButtonId={datepickerId + '-button'}\n forwardRef={ref}\n onKeyDownInput={handleOnKeyDown}\n onBlurInput={handleOnBlurInput}\n onFocus={undefined}\n toggleCalendarGUI={toggleCalendarGUI}\n setFocusToCalendarGUI={setFocusToCalendarGUI}\n setShouldFocusOnCalendarButtonAfterSelect={\n setShouldFocusOnCalendarButtonAfterSelect\n }\n calendarGUIIsOpen={datePickerGUIIsOpen}\n disableLabelAnimation={disableLabelAnimation}\n hideCalendarButton={hideCalendarButton}\n selectedDate={selectedDate}\n />\n }\n {...rest}\n />\n </>\n );\n },\n);\n","import React from 'react';\nimport {\n BaseFormControl,\n isFilled,\n useInputGroupContext,\n useVariant,\n VariantType,\n} from '@entur/form';\nimport { DateIcon } from '@entur/icons';\nimport { useOnMount, useRandomId } from '@entur/utils';\n\nexport type NativeDatePickerProps = {\n /** Ekstra klassenavn */\n className?: string;\n /** Label over NativeDatePicker */\n label: string;\n /** Varselmelding, som vil komme under NativeDatePicker */\n feedback?: string;\n /** Valideringsvariant */\n variant?: VariantType;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n /** Tekst eller ikon som kommer før inputfelter\n * @default <DateIcon />\n */\n prepend?: React.ReactNode;\n} & React.InputHTMLAttributes<HTMLInputElement>;\n\nexport const NativeDatePicker = React.forwardRef<\n HTMLInputElement,\n NativeDatePickerProps\n>(\n (\n {\n className,\n style,\n label,\n onChange,\n feedback,\n variant,\n disableLabelAnimation,\n prepend = <DateIcon inline />,\n ...rest\n },\n ref: React.Ref<HTMLInputElement>,\n ) => {\n const nativedatepickerId = useRandomId('eds-nativetimepicker');\n return (\n <BaseFormControl\n style={style}\n className={className}\n prepend={prepend}\n label={label}\n feedback={feedback}\n variant={variant}\n labelId={nativedatepickerId}\n disableLabelAnimation={disableLabelAnimation}\n isFilled\n >\n <NativeDatePickerBase\n onChange={onChange}\n aria-labelledby={nativedatepickerId}\n ref={ref}\n variant={variant}\n {...rest}\n />\n </BaseFormControl>\n );\n },\n);\n\ntype NativeDatePickerBaseProps = {\n onChange?: any;\n variant?: VariantType;\n} & React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n>;\n\nconst NativeDatePickerBase = React.forwardRef<\n HTMLInputElement,\n NativeDatePickerBaseProps\n>(({ onChange, variant, value, ...rest }, ref) => {\n const contextVariant = useVariant();\n const currentVariant = variant || contextVariant;\n const { isFilled: isDatepickerFilled, setFilled: setFiller } =\n useInputGroupContext();\n\n useOnMount(() => {\n setFiller && !isDatepickerFilled && setFiller(true);\n });\n\n React.useEffect(() => {\n if (value) {\n setFiller && !isDatepickerFilled && setFiller(true);\n } else {\n setFiller && isDatepickerFilled && setFiller(false);\n }\n }, [value, setFiller, isDatepickerFilled]);\n\n const handleChange = (event: any) => {\n if (isFilled(event.target)) {\n setFiller && !isDatepickerFilled && setFiller(true);\n } else {\n setFiller && isDatepickerFilled && setFiller(false);\n }\n if (onChange) {\n onChange(event);\n }\n };\n return (\n <input\n ref={ref}\n aria-invalid={currentVariant === 'error'}\n type=\"date\"\n className=\"eds-form-control eds-native-date-picker\"\n onChange={handleChange}\n value={value}\n {...rest}\n />\n );\n});\n","import React from 'react';\nimport {\n default as ReactDatepicker,\n ReactDatePickerProps,\n registerLocale,\n} from 'react-datepicker';\nimport classNames from 'classnames';\nimport {\n BaseFormControl,\n useInputGroupContext,\n VariantType,\n} from '@entur/form';\nimport { LeftArrowIcon, RightArrowIcon } from '@entur/icons';\nimport { useOnMount, useRandomId } from '@entur/utils';\nimport { nb } from 'date-fns/locale';\nimport { add, sub } from 'date-fns';\nimport * as Popper from '@popperjs/core';\nimport './TimePicker.scss';\nregisterLocale('nb', nb);\n\nexport type TimePickerProps = {\n /** Hva som er den valgte datoen */\n selectedTime?: Date;\n /** Kalles når datoen/tiden endres */\n onChange: (\n date: Date | null,\n event: React.SyntheticEvent<any, Event>,\n ) => void;\n /** Placeholder om ingen dato er valgt\n * @default \"Velg tid\"\n */\n placeholder?: string;\n /** Ekstra klassenavn */\n className?: string;\n /** Label over TimePicker */\n label: string;\n /** Varselmelding, som vil komme under TimePicker */\n feedback?: string;\n /** Valideringsvariant */\n variant?: VariantType;\n style?: React.CSSProperties;\n labelTooltip?: React.ReactNode;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n /** Kalles ved klikk på pil venstre i TimePicker\n * @default Trekker fra 30 minutter av den valgte tiden\n */\n onLeftArrowClick?: (selectedTime?: Date | null, e?: React.MouseEvent) => void;\n /** Kalles ved klikk på pil høyre i TimePicker\n * @default Legger til 30 minutter av den valgte tiden\n */\n onRightArrowClick?: (\n selectedTime?: Date | null,\n e?: React.MouseEvent,\n ) => void;\n} & ReactDatePickerProps;\n\nexport const TimePicker = React.forwardRef<HTMLDivElement, TimePickerProps>(\n (\n {\n selectedTime = null,\n onChange,\n placeholder = 'Velg tid',\n disabled,\n className,\n style,\n label,\n labelTooltip,\n feedback,\n variant,\n disableLabelAnimation,\n locale = 'nb',\n onLeftArrowClick = (selectedTime, event) =>\n selectedTime && onChange(sub(selectedTime, { minutes: 30 }), event),\n onRightArrowClick = (selectedTime, event) =>\n selectedTime && onChange(add(selectedTime, { minutes: 30 }), event),\n ...rest\n },\n ref,\n ) => {\n const timepickerId = useRandomId('eds-timepicker');\n return (\n <BaseFormControl\n style={style}\n ref={ref}\n label={label}\n labelId={timepickerId}\n labelTooltip={labelTooltip}\n variant={variant}\n feedback={feedback}\n disableLabelAnimation={disableLabelAnimation}\n className=\"eds-timepicker-form-control\"\n disabled={disabled}\n prepend={\n <TimePickerArrowButton\n direction=\"left\"\n tabIndex={-1}\n onClick={(e: React.MouseEvent) => onLeftArrowClick(selectedTime, e)}\n disabled={disabled}\n />\n }\n >\n <TimePickerBase\n selectedTime={selectedTime}\n onChange={onChange}\n placeholder={placeholder}\n className={className}\n locale={locale}\n ariaLabelledBy={timepickerId}\n disabled={disabled}\n {...rest}\n />\n <TimePickerArrowButton\n direction=\"right\"\n tabIndex={-1}\n onClick={(e: React.MouseEvent) => onRightArrowClick(selectedTime, e)}\n disabled={disabled}\n />\n </BaseFormControl>\n );\n },\n);\n\ntype TimePickerBaseProps = {\n /** Hva som er den valgte datoen */\n selectedTime?: Date | null;\n /** Kalles når datoen/tiden endres */\n onChange: (\n date: Date | null,\n event: React.SyntheticEvent<any, Event>,\n ) => void;\n /** Placeholder om ingen dato er valgt\n * @default \"Velg tid\"\n */\n placeholder?: string;\n /** Ekstra klassenavn */\n className?: string;\n [key: string]: any;\n} & ReactDatePickerProps;\n\nconst POPPER_MODIFIERS: Popper.StrictModifiers[] = [\n {\n name: 'offset',\n enabled: true,\n options: {\n offset: [0, 0],\n },\n },\n];\nconst TimePickerBase: React.FC<TimePickerBaseProps> = ({\n className,\n onChange,\n selectedTime,\n placeholder,\n timeFormat = 'HH:mm',\n dateFormat = ['HH:mm', 'HHmm'],\n ...rest\n}) => {\n const { isFilled: isTimepickerFilled, setFilled: setFiller } =\n useInputGroupContext();\n\n useOnMount(() => {\n if (selectedTime) {\n setFiller && !isTimepickerFilled && setFiller(true);\n }\n });\n\n React.useEffect(() => {\n if (selectedTime) {\n setFiller && !isTimepickerFilled && setFiller(true);\n } else {\n setFiller && isTimepickerFilled && setFiller(false);\n }\n }, [selectedTime, setFiller, isTimepickerFilled]);\n\n const handleChange = (date: any, event: any) => {\n if (date) {\n setFiller && !isTimepickerFilled && setFiller(true);\n } else {\n setFiller && isTimepickerFilled && setFiller(false);\n }\n if (onChange) {\n onChange(date, event);\n }\n };\n return (\n <ReactDatepicker\n className={classNames(\n 'eds-form-control',\n 'eds-timepicker__input',\n className,\n )}\n calendarClassName=\"eds-timepicker\"\n selected={selectedTime}\n onChange={handleChange}\n dateFormat={dateFormat}\n timeFormat={timeFormat}\n showTimeSelect\n showTimeInput={true}\n showTimeSelectOnly\n showPopperArrow={false}\n placeholderText={placeholder}\n popperClassName=\"eds-datepicker__popper\"\n popperModifiers={POPPER_MODIFIERS}\n open={false}\n {...rest}\n />\n );\n};\n\ntype TimePickerArrowButtonProps = {\n direction: 'left' | 'right';\n} & React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n>;\n\nconst TimePickerArrowButton: React.FC<TimePickerArrowButtonProps> = ({\n direction,\n ...rest\n}) => {\n return (\n <button\n className={classNames(\n 'eds-timepicker__arrowbutton',\n `eds-timepicker__arrowbutton--${direction}`,\n )}\n type=\"button\"\n {...rest}\n >\n {direction === 'left' ? <LeftArrowIcon /> : <RightArrowIcon />}\n </button>\n );\n};\n","import React from 'react';\nimport {\n BaseFormControl,\n isFilled,\n useInputGroupContext,\n useVariant,\n VariantType,\n} from '@entur/form';\nimport { ClockIcon } from '@entur/icons';\nimport { useOnMount, useRandomId } from '@entur/utils';\n\nexport type NativeTimePickerProps = {\n /** Ekstra klassenavn */\n className?: string;\n /** Label over NativeTimePicker */\n label: string;\n /** Varselmelding, som vil komme under NativeTimePicker */\n feedback?: string;\n /** Valideringsvariant */\n variant?: VariantType;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n /** Tekst eller ikon som kommer før inputfelter\n * @default <ClockIcon />\n */\n prepend?: React.ReactNode;\n} & React.InputHTMLAttributes<HTMLInputElement>;\n\nexport const NativeTimePicker = React.forwardRef<\n HTMLInputElement,\n NativeTimePickerProps\n>(\n (\n {\n className,\n style,\n onChange,\n label,\n feedback,\n variant,\n disableLabelAnimation,\n prepend = <ClockIcon />,\n ...rest\n },\n ref: React.Ref<HTMLInputElement>,\n ) => {\n const nativetimepickerId = useRandomId('eds-nativetimepicker');\n return (\n <BaseFormControl\n style={style}\n className={className}\n prepend={prepend}\n label={label}\n feedback={feedback}\n variant={variant}\n labelId={nativetimepickerId}\n disableLabelAnimation={disableLabelAnimation}\n >\n <NativeTimePickerBase\n onChange={onChange}\n aria-labelledby={nativetimepickerId}\n ref={ref}\n {...rest}\n />\n </BaseFormControl>\n );\n },\n);\n\ntype NativeTimePickerBaseProps = {\n variant?: VariantType;\n} & React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n>;\n\nconst NativeTimePickerBase = React.forwardRef<\n HTMLInputElement,\n NativeTimePickerBaseProps\n>(({ onChange, value, ...rest }, ref) => {\n const contextVariant = useVariant();\n const currentVariant = rest.variant || contextVariant;\n const { isFilled: isTimepickerFilled, setFilled: setFiller } =\n useInputGroupContext();\n\n useOnMount(() => {\n setFiller && !isTimepickerFilled && setFiller(true);\n });\n\n React.useEffect(() => {\n if (value) {\n setFiller && !isTimepickerFilled && setFiller(true);\n } else {\n setFiller && isTimepickerFilled && setFiller(false);\n }\n }, [value, setFiller, isTimepickerFilled]);\n\n const handleChange = (event: any) => {\n if (isFilled(event.target)) {\n setFiller && !isTimepickerFilled && setFiller(true);\n } else {\n setFiller && isTimepickerFilled && setFiller(false);\n }\n if (onChange) {\n onChange(event);\n }\n };\n return (\n <input\n ref={ref}\n aria-invalid={currentVariant === 'error'}\n type=\"time\"\n className=\"eds-form-control eds-native-date-picker\"\n onChange={handleChange}\n value={value}\n {...rest}\n />\n );\n});\n","import { warnAboutMissingStyles } from '@entur/utils';\nimport './index.scss';\n\nwarnAboutMissingStyles('datepicker', 'form', 'icons');\n\nexport * from './DatePicker';\nexport * from './NativeDatePicker';\nexport * from './TimePicker';\nexport * from './NativeTimePicker';\n"],"names":["DatePickerHeader","date","decreaseMonth","increaseMonth","prevMonthButtonDisabled","nextMonthButtonDisabled","monthNames","getMonthList","React","className","IconButton","type","onClick","disabled","LeftArrowIcon","Heading3","getMonth","getFullYear","RightArrowIcon","locale","year","Date","monthList","Array","keys","formatter","Intl","DateTimeFormat","month","getMonthName","monthIndex","format","from","DatePickerInput","forwardRef","ref","style","label","inputPlaceholder","prepend","feedback","variant","calendarButtonTooltip","hideCalendarButton","disableLabelAnimation","inputRef","calendarButtonId","toggleCalendarGUI","onKeyDownInput","onBlurInput","selectedDate","setFocusToCalendarGUI","setShouldFocusOnCalendarButtonAfterSelect","calendarGUIIsOpen","rest","useEffect","current","addEventListener","handleOnKeyDown","handleOnBlur","handleOnFocus","removeEventListener","event","requestAnimationFrame","select","handleOnClickInputField","handleOnClickCalendarButton","TextField","placeholder","mergeRefs","append","Tooltip","placement","content","disableHoverListener","disableFocusListener","id","tabIndex","CalendarIcon","refs","node","registerLocale","nb","DatePicker","onChange","onKeyDown","dateFormats","minDate","maxDate","inline","validationFeedback","validationVariant","hideCalendar","hideValidation","weekLabel","open","datepickerId","useRandomId","datepickerRef","useRef","calendarButton","document","getElementById","useState","showValidation","setShowValidation","shouldFocusOnCalendarButtonAfterSelect","validateInput","handleOnChange","focus","key","datePickerGUIIsOpen","forceUpdateInputFormat","focusAndSelectInputField","handleOnClickOutside","handleOnBlurInput","inputValue","value","inputValueParsedWithAllDateFormats","map","parse","parsedDateFromInputIsTheSameAsSelectedDate","some","dateFormat","isSameDay","getFeedbackAndVariant","undefined","setState","setOpen","dateToSetFocusTo","getElementsByClassName","isCalendarOpen","ReactDatepicker","selected","showWeekNumbers","onClickOutside","ariaLabelledBy","showPopperArrow","preventOpenOnFocus","calendarClassName","dayClassName","weekDayClassName","classNames","highlightDates","renderCustomHeader","changeYear","changeMonth","customInput","onFocus","NativeDatePicker","DateIcon","nativedatepickerId","BaseFormControl","labelId","isFilled","NativeDatePickerBase","contextVariant","useVariant","currentVariant","useInputGroupContext","isDatepickerFilled","setFiller","setFilled","useOnMount","handleChange","target","TimePicker","selectedTime","labelTooltip","onLeftArrowClick","sub","minutes","onRightArrowClick","add","timepickerId","TimePickerArrowButton","direction","e","TimePickerBase","POPPER_MODIFIERS","name","enabled","options","offset","timeFormat","isTimepickerFilled","showTimeSelect","showTimeInput","showTimeSelectOnly","placeholderText","popperClassName","popperModifiers","NativeTimePicker","ClockIcon","nativetimepickerId","NativeTimePickerBase","warnAboutMissingStyles"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@entur/utils"),t=require("react"),a=require("react-datepicker"),n=require("date-fns"),r=require("date-fns/locale"),l=require("classnames"),o=require("@entur/icons"),i=require("@entur/typography"),d=require("@entur/button"),u=require("@entur/form"),c=require("@entur/tooltip");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("react-datepicker/dist/react-datepicker.css");var f=s(t),m=s(a),p=s(l);function b(){return b=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},b.apply(this,arguments)}function v(e,t){if(null==e)return{};var a,n,r={},l=Object.keys(e);for(n=0;n<l.length;n++)t.indexOf(a=l[n])>=0||(r[a]=e[a]);return r}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=new Array(t);a<t;a++)n[a]=e[a];return n}function y(e,t){var a="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(a)return(a=a.call(e)).next.bind(a);if(Array.isArray(e)||(a=function(e,t){if(e){if("string"==typeof e)return h(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?h(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){a&&(e=a);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var k=function(e){var t,a=e.date,n=e.decreaseMonth,r=e.increaseMonth,l=e.prevMonthButtonDisabled,u=e.nextMonthButtonDisabled,c=function(e){void 0===e&&(e="nb");var t=(new Date).getFullYear(),a=Array(12).keys(),n=new Intl.DateTimeFormat(e,{month:"long"});return Array.from(a,(function(e){return n.format(new Date(t,e))}))}();return f.default.createElement("div",{className:"eds-datepicker__calender__header"},f.default.createElement(d.IconButton,{className:"eds-datepicker__calender__header__month-button--left",onClick:n,disabled:l},f.default.createElement(o.LeftArrowIcon,null)),f.default.createElement(i.Heading3,{className:"eds-datepicker__calender__header__month-text"},c[null!=(t=null==a?void 0:a.getMonth())?t:0]),f.default.createElement(i.Heading3,{className:"eds-datepicker__calender__header__month-text"},null==a?void 0:a.getFullYear()),f.default.createElement(d.IconButton,{className:"eds-datepicker__calender__header__month-button--right",onClick:r,disabled:u},f.default.createElement(o.RightArrowIcon,null)))},g=["style","label","inputPlaceholder","prepend","feedback","variant","disabled","calendarButtonTooltip","hideCalendarButton","disableLabelAnimation","inputRef","forwardRef","toggleCalendarGUI","onKeyDownInput","onBlurInput","selectedDate","placeholder"],C=f.default.forwardRef((function(e,t){var a=e.style,n=e.label,r=e.inputPlaceholder,l=e.prepend,i=e.feedback,s=e.variant,m=e.disabled,p=e.calendarButtonTooltip,h=e.hideCalendarButton,y=e.disableLabelAnimation,k=e.inputRef,C=e.forwardRef,w=e.toggleCalendarGUI,E=e.onKeyDownInput,I=e.onBlurInput,A=e.selectedDate,L=v(e,g);function D(e){E(e)}function N(e){I(e)}function F(){setTimeout((function(){var e;return null==(e=k.current)?void 0:e.select()}),5)}return f.default.useEffect((function(){var e,t,a;return null==(e=k.current)||e.addEventListener("keydown",D),null==(t=k.current)||t.addEventListener("blur",N),null==(a=k.current)||a.addEventListener("focus",F),function(){var e,t,a;null==(e=k.current)||e.removeEventListener("keydown",D),null==(t=k.current)||t.removeEventListener("blur",N),null==(a=k.current)||a.removeEventListener("focus",F)}}),[k,A]),f.default.createElement(u.TextField,b({style:a,label:n,placeholder:r,prepend:l,feedback:i,variant:s,disableLabelAnimation:y,ref:_(t,k,C),append:!h&&f.default.createElement(c.Tooltip,{placement:"top",content:p,disableHoverListener:m,disableFocusListener:m},f.default.createElement(d.IconButton,{type:"button",onClick:w},f.default.createElement(o.CalendarIcon,null)))},L))})),_=function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return function(e){for(var a,n=y(t);!(a=n()).done;){var r=a.value;"function"==typeof r?r(e):r&&(r.current=e)}}},w=["style","className","selectedDate","label","placeholder","onChange","onKeyDown","dateFormats","minDate","maxDate","inline","disabled","prepend","feedback","variant","validationFeedback","validationVariant","disableLabelAnimation","calendarButtonTooltip","hideCalendarButton","hideCalendar","hideValidation","weekLabel","locale","open"];a.registerLocale("nb",r.nb);var E=f.default.forwardRef((function(a,l){var o=a.style,i=a.className,d=a.selectedDate,u=a.label,c=a.placeholder,s=void 0===c?"dd.mm.yyyy":c,h=a.onChange,y=a.onKeyDown,g=void 0===y?function(){return null}:y,_=a.dateFormats,E=void 0===_?["dd.MM.yyyy","ddMMyyyy","dd/MM/yyyy","ddMMyy"]:_,I=a.minDate,A=a.maxDate,L=a.inline,D=void 0!==L&&L,N=a.disabled,F=a.prepend,M=a.feedback,B=void 0===M?"":M,T=a.variant,R=a.validationFeedback,x=void 0===R?"Ugyldig dato":R,O=a.validationVariant,q=void 0===O?"error":O,P=a.disableLabelAnimation,S=void 0!==P&&P,H=a.calendarButtonTooltip,j=void 0===H?"Åpne kalender":H,V=a.hideCalendarButton,G=void 0!==V&&V,K=a.hideCalendar,U=void 0!==K&&K,Y=a.hideValidation,W=void 0!==Y&&Y,$=a.weekLabel,z=void 0===$?"uke":$,J=a.locale,Q=void 0===J?r.nb:J,X=a.open,Z=v(a,w),ee=e.useRandomId("eds-datepicker"),te=t.useState(!1),ae=te[0],ne=te[1],re=t.useRef(null),le=f.default.useRef(null);f.default.useEffect((function(){return oe()}),[d]);var oe=function(){var e;ne(!1);var t=null==(e=le.current)?void 0:e.value;if(t){var a=E.map((function(e){return n.parse(t,e,new Date,{locale:Q})})),r=d&&a.some((function(e){return n.isSameDay(e,d)}));ne(!r)}},ie=function(){return B?{feedback:B,variant:T}:!W&&ae?{feedback:x,variant:q}:{feedback:"",variant:void 0}},de=function(){var e;return null==(e=re.current)?void 0:e.setState({inputValue:null})};return f.default.createElement(f.default.Fragment,null,f.default.createElement(m.default,b({selected:d,minDate:I,maxDate:A,dateFormat:E,showWeekNumbers:!0,weekLabel:z,onChange:h,onClickOutside:oe,id:ee,ariaLabelledBy:ee,showPopperArrow:!1,locale:Q,inline:D,disabled:N,preventOpenOnFocus:!0,open:!U&&X,ref:re,calendarClassName:"eds-datepicker__calender",dayClassName:function(){return"eds-datepicker__calender__day"},weekDayClassName:function(){return"eds-datepicker__calender__day-name"},className:p.default(i,"eds-datepicker__input"),highlightDates:[{"eds-datepicker__calender__day--today":[new Date]},{"eds-datepicker__calender__day--selected":d?[d]:[]}],renderCustomHeader:function(e){return f.default.createElement(k,{date:e.date,changeYear:e.changeYear,changeMonth:e.changeMonth,increaseMonth:e.increaseMonth,decreaseMonth:e.decreaseMonth,prevMonthButtonDisabled:e.prevMonthButtonDisabled,nextMonthButtonDisabled:e.nextMonthButtonDisabled})},customInput:f.default.createElement(C,{style:o,label:u,inputPlaceholder:s,calendarButtonTooltip:j,prepend:F,feedback:ie().feedback,variant:ie().variant,inputRef:le,forwardRef:l,onKeyDownInput:function(e){var t,a=!(null!=(t=re.current)&&t.isCalendarOpen());ne(!1),"Enter"===e.key?(oe(),setTimeout((function(){var e;null==(e=le.current)||e.select()}),5),de()):"Tab"===e.key&&a&&(oe(),de()),g(e)},onBlurInput:function(){var e;return!(null!=(e=re.current)&&e.isCalendarOpen())&&oe()},onFocus:void 0,toggleCalendarGUI:function(){var e,t;return null==(e=re.current)?void 0:e.setOpen(!(null!=(t=re.current)&&t.isCalendarOpen()))},disableLabelAnimation:S,hideCalendarButton:G,selectedDate:d})},Z)))})),I=["className","style","label","onChange","feedback","variant","disableLabelAnimation","prepend"],A=["onChange","variant","value"],L=f.default.forwardRef((function(t,a){var n=t.className,r=t.style,l=t.label,i=t.onChange,d=t.feedback,c=t.variant,s=t.disableLabelAnimation,m=t.prepend,p=void 0===m?f.default.createElement(o.DateIcon,{inline:!0}):m,h=v(t,I),y=e.useRandomId("eds-nativetimepicker");return f.default.createElement(u.BaseFormControl,{style:r,className:n,prepend:p,label:l,feedback:d,variant:c,labelId:y,disableLabelAnimation:s,isFilled:!0},f.default.createElement(D,b({onChange:i,"aria-labelledby":y,ref:a,variant:c},h)))})),D=f.default.forwardRef((function(t,a){var n=t.onChange,r=t.variant,l=t.value,o=v(t,A),i=u.useVariant(),d=r||i,c=u.useInputGroupContext(),s=c.isFilled,m=c.setFilled;return e.useOnMount((function(){m&&!s&&m(!0)})),f.default.useEffect((function(){l?m&&!s&&m(!0):m&&s&&m(!1)}),[l,m,s]),f.default.createElement("input",b({ref:a,"aria-invalid":"error"===d,type:"date",className:"eds-form-control eds-native-date-picker",onChange:function(e){u.isFilled(e.target)?m&&!s&&m(!0):m&&s&&m(!1),n&&n(e)},value:l},o))})),N=["selectedTime","onChange","placeholder","disabled","className","style","label","labelTooltip","feedback","variant","disableLabelAnimation","locale","onLeftArrowClick","onRightArrowClick"],F=["className","onChange","selectedTime","placeholder","timeFormat","dateFormat"],M=["direction"];a.registerLocale("nb",r.nb);var B=f.default.forwardRef((function(t,a){var r=t.selectedTime,l=void 0===r?null:r,o=t.onChange,i=t.placeholder,d=void 0===i?"Velg tid":i,c=t.disabled,s=t.className,m=t.style,p=t.label,h=t.labelTooltip,y=t.feedback,k=t.variant,g=t.disableLabelAnimation,C=t.locale,_=void 0===C?"nb":C,w=t.onLeftArrowClick,E=void 0===w?function(e,t){return e&&o(n.sub(e,{minutes:30}),t)}:w,I=t.onRightArrowClick,A=void 0===I?function(e,t){return e&&o(n.add(e,{minutes:30}),t)}:I,L=v(t,N),D=e.useRandomId("eds-timepicker");return f.default.createElement(u.BaseFormControl,{style:m,ref:a,label:p,labelId:D,labelTooltip:h,variant:k,feedback:y,disableLabelAnimation:g,className:"eds-timepicker-form-control",disabled:c,prepend:f.default.createElement(x,{direction:"left",tabIndex:-1,onClick:function(e){return E(l,e)},disabled:c})},f.default.createElement(R,b({selectedTime:l,onChange:o,placeholder:d,className:s,locale:_,ariaLabelledBy:D,disabled:c},L)),f.default.createElement(x,{direction:"right",tabIndex:-1,onClick:function(e){return A(l,e)},disabled:c}))})),T=[{name:"offset",enabled:!0,options:{offset:[0,0]}}],R=function(t){var a=t.className,n=t.onChange,r=t.selectedTime,l=t.placeholder,o=t.timeFormat,i=void 0===o?"HH:mm":o,d=t.dateFormat,c=void 0===d?["HH:mm","HHmm"]:d,s=v(t,F),h=u.useInputGroupContext(),y=h.isFilled,k=h.setFilled;return e.useOnMount((function(){r&&k&&!y&&k(!0)})),f.default.useEffect((function(){r?k&&!y&&k(!0):k&&y&&k(!1)}),[r,k,y]),f.default.createElement(m.default,b({className:p.default("eds-form-control","eds-timepicker__input",a),calendarClassName:"eds-timepicker",selected:r,onChange:function(e,t){e?k&&!y&&k(!0):k&&y&&k(!1),n&&n(e,t)},dateFormat:c,timeFormat:i,showTimeSelect:!0,showTimeInput:!0,showTimeSelectOnly:!0,showPopperArrow:!1,placeholderText:l,popperClassName:"eds-datepicker__popper",popperModifiers:T,open:!1},s))},x=function(e){var t=e.direction,a=v(e,M);return f.default.createElement("button",b({className:p.default("eds-timepicker__arrowbutton","eds-timepicker__arrowbutton--"+t),type:"button"},a),f.default.createElement("left"===t?o.LeftArrowIcon:o.RightArrowIcon,null))},O=["className","style","onChange","label","feedback","variant","disableLabelAnimation","prepend"],q=["onChange","value"],P=f.default.forwardRef((function(t,a){var n=t.className,r=t.style,l=t.onChange,i=t.label,d=t.feedback,c=t.variant,s=t.disableLabelAnimation,m=t.prepend,p=void 0===m?f.default.createElement(o.ClockIcon,null):m,h=v(t,O),y=e.useRandomId("eds-nativetimepicker");return f.default.createElement(u.BaseFormControl,{style:r,className:n,prepend:p,label:i,feedback:d,variant:c,labelId:y,disableLabelAnimation:s},f.default.createElement(S,b({onChange:l,"aria-labelledby":y,ref:a},h)))})),S=f.default.forwardRef((function(t,a){var n=t.onChange,r=t.value,l=v(t,q),o=u.useVariant(),i=l.variant||o,d=u.useInputGroupContext(),c=d.isFilled,s=d.setFilled;return e.useOnMount((function(){s&&!c&&s(!0)})),f.default.useEffect((function(){r?s&&!c&&s(!0):s&&c&&s(!1)}),[r,s,c]),f.default.createElement("input",b({ref:a,"aria-invalid":"error"===i,type:"time",className:"eds-form-control eds-native-date-picker",onChange:function(e){u.isFilled(e.target)?s&&!c&&s(!0):s&&c&&s(!1),n&&n(e)},value:r},l))}));e.warnAboutMissingStyles("datepicker","form","icons"),exports.DatePicker=E,exports.NativeDatePicker=L,exports.NativeTimePicker=P,exports.TimePicker=B;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@entur/utils"),t=require("react"),n=require("react-datepicker"),a=require("date-fns"),r=require("date-fns/locale"),l=require("classnames"),o=require("@entur/icons"),i=require("@entur/typography"),d=require("@entur/button"),u=require("@entur/form"),c=require("@entur/tooltip");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("react-datepicker/dist/react-datepicker.css");var f=s(t),m=s(n),p=s(l);function b(){return b=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},b.apply(this,arguments)}function v(e,t){if(null==e)return{};var n,a,r={},l=Object.keys(e);for(a=0;a<l.length;a++)t.indexOf(n=l[a])>=0||(r[n]=e[n]);return r}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function y(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return h(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?h(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var a=0;return function(){return a>=e.length?{done:!0}:{done:!1,value:e[a++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var k=function(e){var t,n=e.date,a=e.decreaseMonth,r=e.increaseMonth,l=e.prevMonthButtonDisabled,u=e.nextMonthButtonDisabled,c=function(e){void 0===e&&(e="nb");var t=(new Date).getFullYear(),n=Array(12).keys(),a=new Intl.DateTimeFormat(e,{month:"long"});return Array.from(n,(function(e){return a.format(new Date(t,e))}))}();return f.default.createElement("div",{className:"eds-datepicker__calender__header"},f.default.createElement(d.IconButton,{type:"button",className:"eds-datepicker__calender__header__month-button--left",onClick:a,disabled:l},f.default.createElement(o.LeftArrowIcon,null)),f.default.createElement(i.Heading3,{className:"eds-datepicker__calender__header__month-text"},c[null!=(t=null==n?void 0:n.getMonth())?t:0]),f.default.createElement(i.Heading3,{className:"eds-datepicker__calender__header__month-text"},null==n?void 0:n.getFullYear()),f.default.createElement(d.IconButton,{type:"button",className:"eds-datepicker__calender__header__month-button--right",onClick:r,disabled:u},f.default.createElement(o.RightArrowIcon,null)))},g=["style","label","inputPlaceholder","prepend","feedback","variant","disabled","calendarButtonTooltip","hideCalendarButton","disableLabelAnimation","inputRef","calendarButtonId","forwardRef","toggleCalendarGUI","onKeyDownInput","onBlurInput","selectedDate","setFocusToCalendarGUI","setShouldFocusOnCalendarButtonAfterSelect","calendarGUIIsOpen","placeholder","onClick"],C=f.default.forwardRef((function(e,t){var n=e.style,a=e.label,r=e.inputPlaceholder,l=e.prepend,i=e.feedback,s=e.variant,m=e.disabled,p=e.calendarButtonTooltip,h=e.hideCalendarButton,y=e.disableLabelAnimation,k=e.inputRef,C=e.calendarButtonId,I=e.forwardRef,w=e.toggleCalendarGUI,E=e.onKeyDownInput,A=e.onBlurInput,F=e.selectedDate,B=e.setFocusToCalendarGUI,L=e.setShouldFocusOnCalendarButtonAfterSelect,N=e.calendarGUIIsOpen,D=e.onClick,M=v(e,g);function T(e){E(e)}function x(e){A(e)}f.default.useEffect((function(){var e,t,n;return null==(e=k.current)||e.addEventListener("keydown",T),null==(t=k.current)||t.addEventListener("blur",x),null==(n=k.current)||n.addEventListener("focus",O),function(){var e,t,n;null==(e=k.current)||e.removeEventListener("keydown",T),null==(t=k.current)||t.removeEventListener("blur",x),null==(n=k.current)||n.removeEventListener("focus",O)}}),[k,F]);var O=function(){return requestAnimationFrame((function(){var e;return null==(e=k.current)?void 0:e.select()}))};return f.default.createElement(u.TextField,b({style:n,label:a,placeholder:r,prepend:l,feedback:i,variant:s,disableLabelAnimation:y,ref:_(t,k,I),onClick:function(e){L(!1),D&&D(e)},append:!h&&f.default.createElement(c.Tooltip,{placement:"top",content:p,disableHoverListener:m,disableFocusListener:m},f.default.createElement(d.IconButton,{id:C,type:"button",onClick:function(){w(),B(),L(!0)},tabIndex:N()?-1:0},f.default.createElement(o.CalendarIcon,null)))},M))})),_=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){for(var n,a=y(t);!(n=a()).done;){var r=n.value;"function"==typeof r?r(e):r&&(r.current=e)}}},I=["style","className","selectedDate","label","placeholder","onChange","onKeyDown","dateFormats","minDate","maxDate","inline","disabled","prepend","feedback","variant","validationFeedback","validationVariant","disableLabelAnimation","calendarButtonTooltip","hideCalendarButton","hideCalendar","hideValidation","weekLabel","locale","open"];n.registerLocale("nb",r.nb);var w=f.default.forwardRef((function(n,l){var o=n.style,i=n.className,d=n.selectedDate,u=n.label,c=n.placeholder,s=void 0===c?"dd.mm.yyyy":c,h=n.onChange,y=n.onKeyDown,g=void 0===y?function(){return null}:y,_=n.dateFormats,w=void 0===_?["dd.MM.yyyy","ddMMyyyy","dd/MM/yyyy","ddMMyy"]:_,E=n.minDate,A=n.maxDate,F=n.inline,B=void 0!==F&&F,L=n.disabled,N=n.prepend,D=n.feedback,M=void 0===D?"":D,T=n.variant,x=n.validationFeedback,O=void 0===x?"Ugyldig dato":x,R=n.validationVariant,S=void 0===R?"error":R,q=n.disableLabelAnimation,G=void 0!==q&&q,P=n.calendarButtonTooltip,U=void 0===P?"Åpne kalender":P,H=n.hideCalendarButton,j=void 0!==H&&H,V=n.hideCalendar,K=void 0!==V&&V,Y=n.hideValidation,W=void 0!==Y&&Y,$=n.weekLabel,z=void 0===$?"uke":$,J=n.locale,Q=void 0===J?r.nb:J,X=n.open,Z=v(n,I),ee=e.useRandomId("eds-datepicker"),te=t.useRef(null),ne=f.default.useRef(null),ae=document.getElementById(ee+"-button"),re=t.useState(!1),le=re[0],oe=re[1],ie=t.useState(!1),de=ie[0],ue=ie[1];f.default.useEffect((function(){return ce()}),[d]);var ce=function(){var e;oe(!1);var t=null==(e=ne.current)?void 0:e.value;if(t){var n=w.map((function(e){return a.parse(t,e,new Date,{locale:Q})})),r=d&&n.some((function(e){return a.isSameDay(e,d)}));oe(!r)}},se=function(){return M?{feedback:M,variant:T}:!W&&le?{feedback:O,variant:S}:{feedback:"",variant:void 0}},fe=function(){return requestAnimationFrame((function(){var e;return null==(e=ne.current)?void 0:e.select()}))},me=function(){var e;return null==(e=te.current)?void 0:e.setState({inputValue:null})},pe=function(){var e;return null==(e=te.current)?void 0:e.setOpen(!be())},be=function(){var e;return null==(e=te.current)?void 0:e.isCalendarOpen()};return f.default.createElement(f.default.Fragment,null,f.default.createElement(m.default,b({selected:d,minDate:E,maxDate:A,dateFormat:w,showWeekNumbers:!0,weekLabel:z,onChange:function(e,t){var n;de&&!j?(null==ae||ae.focus(),ue(!1)):null==(n=ne.current)||n.focus(),h(e,t)},onClickOutside:function(){return ue(!1)},id:ee,ariaLabelledBy:ee,showPopperArrow:!1,locale:Q,inline:B,disabled:L,preventOpenOnFocus:!0,open:!K&&X,ref:te,calendarClassName:"eds-datepicker__calender",dayClassName:function(){return"eds-datepicker__calender__day"},weekDayClassName:function(){return"eds-datepicker__calender__day-name"},className:p.default(i,"eds-datepicker__input"),highlightDates:[{"eds-datepicker__calender__day--today":[new Date]},{"eds-datepicker__calender__day--selected":d?[d]:[]}],renderCustomHeader:function(e){return f.default.createElement(k,{date:e.date,changeYear:e.changeYear,changeMonth:e.changeMonth,increaseMonth:e.increaseMonth,decreaseMonth:e.decreaseMonth,prevMonthButtonDisabled:e.prevMonthButtonDisabled,nextMonthButtonDisabled:e.nextMonthButtonDisabled})},customInput:f.default.createElement(C,{style:o,label:u,inputPlaceholder:s,calendarButtonTooltip:U,prepend:N,feedback:se().feedback,variant:se().variant,inputRef:ne,calendarButtonId:ee+"-button",forwardRef:l,onKeyDownInput:function(e){oe(!1),"Enter"===e.key?(be()||(ce(),me()),fe()):"Tab"===e.key&&be()?me():"Escape"===e.key&&(me(),fe(),be()&&pe()),g(e)},onBlurInput:function(){be()||(ce(),me())},onFocus:void 0,toggleCalendarGUI:pe,setFocusToCalendarGUI:function(){B||K||be()||(requestAnimationFrame((function(){var e=d?document.getElementsByClassName("eds-datepicker__calender__day--selected")[0]:document.getElementsByClassName("eds-datepicker__calender__day--today")[0];null!==e&&e.focus()})),ue(!0),oe(!1))},setShouldFocusOnCalendarButtonAfterSelect:ue,calendarGUIIsOpen:be,disableLabelAnimation:G,hideCalendarButton:j,selectedDate:d})},Z)))})),E=["className","style","label","onChange","feedback","variant","disableLabelAnimation","prepend"],A=["onChange","variant","value"],F=f.default.forwardRef((function(t,n){var a=t.className,r=t.style,l=t.label,i=t.onChange,d=t.feedback,c=t.variant,s=t.disableLabelAnimation,m=t.prepend,p=void 0===m?f.default.createElement(o.DateIcon,{inline:!0}):m,h=v(t,E),y=e.useRandomId("eds-nativetimepicker");return f.default.createElement(u.BaseFormControl,{style:r,className:a,prepend:p,label:l,feedback:d,variant:c,labelId:y,disableLabelAnimation:s,isFilled:!0},f.default.createElement(B,b({onChange:i,"aria-labelledby":y,ref:n,variant:c},h)))})),B=f.default.forwardRef((function(t,n){var a=t.onChange,r=t.variant,l=t.value,o=v(t,A),i=u.useVariant(),d=r||i,c=u.useInputGroupContext(),s=c.isFilled,m=c.setFilled;return e.useOnMount((function(){m&&!s&&m(!0)})),f.default.useEffect((function(){l?m&&!s&&m(!0):m&&s&&m(!1)}),[l,m,s]),f.default.createElement("input",b({ref:n,"aria-invalid":"error"===d,type:"date",className:"eds-form-control eds-native-date-picker",onChange:function(e){u.isFilled(e.target)?m&&!s&&m(!0):m&&s&&m(!1),a&&a(e)},value:l},o))})),L=["selectedTime","onChange","placeholder","disabled","className","style","label","labelTooltip","feedback","variant","disableLabelAnimation","locale","onLeftArrowClick","onRightArrowClick"],N=["className","onChange","selectedTime","placeholder","timeFormat","dateFormat"],D=["direction"];n.registerLocale("nb",r.nb);var M=f.default.forwardRef((function(t,n){var r=t.selectedTime,l=void 0===r?null:r,o=t.onChange,i=t.placeholder,d=void 0===i?"Velg tid":i,c=t.disabled,s=t.className,m=t.style,p=t.label,h=t.labelTooltip,y=t.feedback,k=t.variant,g=t.disableLabelAnimation,C=t.locale,_=void 0===C?"nb":C,I=t.onLeftArrowClick,w=void 0===I?function(e,t){return e&&o(a.sub(e,{minutes:30}),t)}:I,E=t.onRightArrowClick,A=void 0===E?function(e,t){return e&&o(a.add(e,{minutes:30}),t)}:E,F=v(t,L),B=e.useRandomId("eds-timepicker");return f.default.createElement(u.BaseFormControl,{style:m,ref:n,label:p,labelId:B,labelTooltip:h,variant:k,feedback:y,disableLabelAnimation:g,className:"eds-timepicker-form-control",disabled:c,prepend:f.default.createElement(O,{direction:"left",tabIndex:-1,onClick:function(e){return w(l,e)},disabled:c})},f.default.createElement(x,b({selectedTime:l,onChange:o,placeholder:d,className:s,locale:_,ariaLabelledBy:B,disabled:c},F)),f.default.createElement(O,{direction:"right",tabIndex:-1,onClick:function(e){return A(l,e)},disabled:c}))})),T=[{name:"offset",enabled:!0,options:{offset:[0,0]}}],x=function(t){var n=t.className,a=t.onChange,r=t.selectedTime,l=t.placeholder,o=t.timeFormat,i=void 0===o?"HH:mm":o,d=t.dateFormat,c=void 0===d?["HH:mm","HHmm"]:d,s=v(t,N),h=u.useInputGroupContext(),y=h.isFilled,k=h.setFilled;return e.useOnMount((function(){r&&k&&!y&&k(!0)})),f.default.useEffect((function(){r?k&&!y&&k(!0):k&&y&&k(!1)}),[r,k,y]),f.default.createElement(m.default,b({className:p.default("eds-form-control","eds-timepicker__input",n),calendarClassName:"eds-timepicker",selected:r,onChange:function(e,t){e?k&&!y&&k(!0):k&&y&&k(!1),a&&a(e,t)},dateFormat:c,timeFormat:i,showTimeSelect:!0,showTimeInput:!0,showTimeSelectOnly:!0,showPopperArrow:!1,placeholderText:l,popperClassName:"eds-datepicker__popper",popperModifiers:T,open:!1},s))},O=function(e){var t=e.direction,n=v(e,D);return f.default.createElement("button",b({className:p.default("eds-timepicker__arrowbutton","eds-timepicker__arrowbutton--"+t),type:"button"},n),f.default.createElement("left"===t?o.LeftArrowIcon:o.RightArrowIcon,null))},R=["className","style","onChange","label","feedback","variant","disableLabelAnimation","prepend"],S=["onChange","value"],q=f.default.forwardRef((function(t,n){var a=t.className,r=t.style,l=t.onChange,i=t.label,d=t.feedback,c=t.variant,s=t.disableLabelAnimation,m=t.prepend,p=void 0===m?f.default.createElement(o.ClockIcon,null):m,h=v(t,R),y=e.useRandomId("eds-nativetimepicker");return f.default.createElement(u.BaseFormControl,{style:r,className:a,prepend:p,label:i,feedback:d,variant:c,labelId:y,disableLabelAnimation:s},f.default.createElement(G,b({onChange:l,"aria-labelledby":y,ref:n},h)))})),G=f.default.forwardRef((function(t,n){var a=t.onChange,r=t.value,l=v(t,S),o=u.useVariant(),i=l.variant||o,d=u.useInputGroupContext(),c=d.isFilled,s=d.setFilled;return e.useOnMount((function(){s&&!c&&s(!0)})),f.default.useEffect((function(){r?s&&!c&&s(!0):s&&c&&s(!1)}),[r,s,c]),f.default.createElement("input",b({ref:n,"aria-invalid":"error"===i,type:"time",className:"eds-form-control eds-native-date-picker",onChange:function(e){u.isFilled(e.target)?s&&!c&&s(!0):s&&c&&s(!1),a&&a(e)},value:r},l))}));e.warnAboutMissingStyles("datepicker","form","icons"),exports.DatePicker=w,exports.NativeDatePicker=F,exports.NativeTimePicker=q,exports.TimePicker=M;
2
2
  //# sourceMappingURL=datepicker.cjs.production.min.js.map