@entur/datepicker 3.0.7 → 4.0.0-RC.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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/TimeSegment.tsx","../src/TimePicker/TimePickerArrowButton.tsx","../src/TimePicker/TimePicker.tsx","../src/TimePicker/NativeTimePicker.tsx","../src/TimePicker/utils.ts","../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\ntype DatePickerHeaderProps = {\n nextMonthAriaLabel: string;\n previousMonthAriaLabel: string;\n locale: globalThis.Locale;\n} & Partial<ReactDatePickerCustomHeaderProps>;\n\nexport const DatePickerHeader = ({\n date,\n decreaseMonth,\n increaseMonth,\n prevMonthButtonDisabled,\n nextMonthButtonDisabled,\n nextMonthAriaLabel,\n previousMonthAriaLabel,\n locale,\n}: DatePickerHeaderProps) => {\n const currentMonthIndex = date?.getMonth() ?? 0;\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 aria-label={`${previousMonthAriaLabel} (${getMonthName(\n currentMonthIndex - 1,\n locale,\n )})`}\n >\n <LeftArrowIcon />\n </IconButton>\n\n <Heading3 className=\"eds-datepicker__calender__header__month-text\">\n {getMonthName(currentMonthIndex, locale)}\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 aria-label={`${nextMonthAriaLabel} (${getMonthName(\n currentMonthIndex + 1,\n locale,\n )})`}\n >\n <RightArrowIcon />\n </IconButton>\n </div>\n );\n};\n\nfunction getMonthName(monthIndex: number, locale: globalThis.Locale) {\n const year = new Date().getFullYear();\n const formatter = new Intl.DateTimeFormat(locale.code, {\n month: 'long',\n });\n return formatter.format(new Date(year, monthIndex));\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';\nimport { mergeRefs } from '@entur/utils';\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 calendarButtonTooltipOpen: string;\n calendarButtonTooltipClose: 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 'aria-labelledby'?: string;\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 calendarButtonTooltipOpen,\n calendarButtonTooltipClose,\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 'aria-labelledby': ariaLabelledBy, // eslint-disable-line @typescript-eslint/no-unused-vars\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 const calendarButtonAriaLabel = () => {\n const buttonStateText = calendarGUIIsOpen()\n ? calendarButtonTooltipClose\n : calendarButtonTooltipOpen;\n const currentSelectionText = selectedDate\n ? `${inputRef.current?.value} valgt`\n : 'Ingen dato valgt';\n return `${buttonStateText}, ${currentSelectionText}`;\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 ariaAlertOnFeedback\n append={\n !hideCalendarButton && (\n <Tooltip\n placement=\"top\"\n content={\n calendarGUIIsOpen()\n ? calendarButtonTooltipClose\n : calendarButtonTooltipOpen\n }\n disableHoverListener={disabled}\n disableFocusListener={disabled}\n >\n <IconButton\n id={calendarButtonId}\n type=\"button\"\n onClick={handleOnClickCalendarButton}\n tabIndex={calendarGUIIsOpen() ? -1 : 0}\n aria-label={calendarButtonAriaLabel()}\n >\n <CalendarIcon />\n </IconButton>\n </Tooltip>\n )\n }\n {...rest}\n />\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 når kalender ikke er åpen på «Åpne/Lukk kalender»-knappen ved hover\n */\n calendarButtonTooltipOpen?: string;\n /**\n * Tekst som vises når kalender er åpen på «Åpne/Lukk kalender»-knappen ved hover\n */\n calendarButtonTooltipClose?: 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 /** Skjermlesertekst for forrige måned-knapen\n * @default \"Forrige måned\"\n */\n previousMonthAriaLabel?: string;\n /** Skjermlesertekst for neste måned-knapen\n * @default \"Neste måned\"\n */\n nextMonthAriaLabel?: string;\n /**\n * Skjermlesertekst som leses før dato i kalenderGUI-et\n * @default \"Velg\"\n */\n chooseDayAriaLabelPrefix?: string;\n // For testing\n 'data-cy'?: any;\n} & Omit<\n ReactDatePickerProps,\n | 'selected'\n | 'customInput'\n | 'onChangeRaw'\n | 'dateFormat'\n | 'locale'\n | 'previousMonthAriaLabel'\n | 'nextMonthAriaLabel'\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 calendarButtonTooltipOpen = 'Åpne\\xa0kalender',\n calendarButtonTooltipClose = 'Lukk\\xa0kalender',\n hideCalendarButton = false,\n hideCalendar = false,\n hideValidation = false,\n weekLabel = 'uke',\n chooseDayAriaLabelPrefix = 'Velg',\n previousMonthAriaLabel = 'Forrige måned',\n nextMonthAriaLabel = 'Neste måned',\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 const setFocusToCalendarGUI = () => {\n if (inline || hideCalendar || datePickerGUIIsOpen()) return;\n // 1 frame delay to allow calendar to spawn\n requestAnimationFrame(() => {\n const datepickerGUIWrapper =\n // @ts-expect-error .calendar does actually exist in ReactDatePicker ref\n datepickerRef.current?.calendar.componentNode;\n\n const dateToSetFocusTo = selectedDate\n ? (datepickerGUIWrapper.querySelector(\n '.eds-datepicker__calender__day[tabindex=\"0\"]',\n ) as HTMLElement | null)\n : (datepickerGUIWrapper.querySelector(\n '.eds-datepicker__calender__day[aria-current=\"date\"]',\n ) as HTMLElement | null);\n if (dateToSetFocusTo !== null) {\n datepickerRef.current?.setBlur();\n dateToSetFocusTo.focus({ preventScroll: true });\n }\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 chooseDayAriaLabelPrefix={chooseDayAriaLabelPrefix}\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 previousMonthAriaLabel={previousMonthAriaLabel}\n nextMonthAriaLabel={nextMonthAriaLabel}\n locale={locale}\n />\n )}\n customInput={\n <DatePickerInput\n style={style}\n label={label}\n inputPlaceholder={placeholder}\n calendarButtonTooltipOpen={calendarButtonTooltipOpen}\n calendarButtonTooltipClose={calendarButtonTooltipClose}\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, { useRef } from 'react';\nimport classNames from 'classnames';\nimport { useDateSegment } from '@react-aria/datepicker';\nimport { DateSegment, DateFieldState } from '@react-stately/datepicker';\n\ntype TimeSegmentProps = {\n segment: DateSegment;\n state: DateFieldState;\n};\n\nexport const TimeSegment = ({ segment, state }: TimeSegmentProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { segmentProps } = useDateSegment(segment, state, ref);\n\n const is12HourFormatted = state.segments.some(\n segment => segment.text === 'AM' || segment.text === 'PM',\n );\n\n const segmentDisplayText = () => {\n if (is12HourFormatted) return segment.text;\n // if number add '0' padding to start when one digit\n if (segment.text.match(/\\d+/)) return segment.text.padStart(2, '0');\n return segment.text;\n };\n\n return (\n <div\n {...segmentProps}\n ref={ref}\n className={classNames('eds-timepicker__segment', {\n 'eds-timepicker__segment--placeholder': segment.isPlaceholder,\n })}\n >\n {segmentDisplayText()}\n </div>\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\n\nimport { IconButton } from '@entur/button';\nimport { LeftArrowIcon, RightArrowIcon } from '@entur/icons';\n\ntype TimePickerArrowButtonProps = {\n direction: 'left' | 'right';\n} & React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n>;\n\nexport const TimePickerArrowButton: React.FC<TimePickerArrowButtonProps> = ({\n direction,\n onClick,\n disabled,\n 'aria-label': ariaLabel,\n}) => {\n return (\n <IconButton\n className={classNames(\n 'eds-timepicker__arrowbutton',\n `eds-timepicker__arrowbutton--${direction}`,\n { 'eds-timepicker__arrowbutton--disabled': disabled },\n )}\n type=\"button\"\n tabIndex={-1}\n onClick={onClick}\n aria-label={ariaLabel}\n disabled={disabled}\n >\n {direction === 'left' ? <LeftArrowIcon /> : <RightArrowIcon />}\n </IconButton>\n );\n};\n","import React, { useRef } from 'react';\nimport classNames from 'classnames';\nimport { useTimeField } from '@react-aria/datepicker';\nimport { I18nProvider, useLocale } from '@react-aria/i18n';\nimport { useTimeFieldState } from '@react-stately/datepicker';\nimport { getLocalTimeZone, now } from '@internationalized/date';\n\nimport type {\n TimePickerProps as ReactAriaTimePickerProps,\n TimeValue,\n} from '@react-types/datepicker';\n\nimport { BaseFormControl, VariantType } from '@entur/form';\nimport { useRandomId, mergeRefs } from '@entur/utils';\n\nimport { TimeSegment } from './TimeSegment';\nimport { TimePickerArrowButton } from './TimePickerArrowButton';\n\nimport './TimePicker.scss';\n\nexport type TimePickerProps = {\n /** Den valgte tiden. Tid i '@internationalized/date'-pakkens format */\n selectedTime: TimeValue | null;\n /** Kalles når tiden endres. Tid i '@internationalized/date'-pakkens format */\n onChange: (value: TimeValue) => void;\n /** Label til TimePicker */\n label: string;\n /** Minutter som legges til eller trekkes fra ved klikk på pilene i TimePicker\n * @default 30\n */\n minuteIncrementForArrowButtons?: number;\n /** BCP47-språkkoden til locale-en du ønsker å bruke.\n * @default Brukerenhetens selvvalgte locale\n */\n locale?: string;\n /** Viser den gjeldende tidssonen hvis en er valgt\n * @default false\n */\n showTimeZone?: boolean;\n /** Aria-label for venstrepil-knappen som trekker fra tid\n * @default `Trekk fra ${minuteIncrementForArrowButtons} minutter`\n */\n leftArrowButtonAriaLabel?: string;\n /** Aria-label for høyrepil-knappen som legger til tid\n * @default `Legg til ${minuteIncrementForArrowButtons} minutter`\n */\n rightArrowButtonAriaLabel?: string;\n /** Varselmelding, som vil komme under TimePicker */\n feedback?: string;\n /** Valideringsvariant */\n variant?: VariantType;\n labelTooltip?: React.ReactNode;\n disabled?: boolean;\n /** Ekstra klassenavn */\n className?: string;\n style?: React.CSSProperties;\n} & Omit<\n ReactAriaTimePickerProps<TimeValue>,\n 'onChange' | 'label' | 'hideTimeZone' | 'placeholder'\n>;\n\nexport const TimePicker = React.forwardRef<HTMLDivElement, TimePickerProps>(\n (\n {\n selectedTime,\n onChange,\n disabled,\n className,\n style,\n label,\n labelTooltip,\n feedback,\n variant,\n locale: customLocale,\n showTimeZone,\n minuteIncrementForArrowButtons = 30,\n leftArrowButtonAriaLabel = `Trekk fra ${minuteIncrementForArrowButtons} minutter`,\n rightArrowButtonAriaLabel = `Legg til ${minuteIncrementForArrowButtons} minutter`,\n ...rest\n },\n ref,\n ) => {\n let { locale } = useLocale();\n if (customLocale) locale = customLocale;\n\n const state = useTimeFieldState({\n onChange,\n label: label,\n locale,\n value: selectedTime === null ? undefined : selectedTime,\n hideTimeZone: !showTimeZone,\n isDisabled: disabled,\n ...rest,\n });\n const timeFieldRef = useRef(null);\n const { labelProps, fieldProps } = useTimeField(\n { ...rest, label: label },\n state,\n timeFieldRef,\n );\n const id = useRandomId('timepicker');\n\n const handleOnClickArrowButton = (minutes: number) => {\n if (someSegmentIsUndefined) {\n setTimeToNearestMinuteIncrement();\n } else {\n addMinutesToSelectedTime(minutes);\n }\n };\n\n const someSegmentIsUndefined = state.segments.some(\n segment => segment.text === '––',\n );\n\n const setTimeToNearestMinuteIncrement = () => {\n const currentTime = now(getLocalTimeZone());\n const roundedMinute =\n Math.floor(currentTime.minute / minuteIncrementForArrowButtons) *\n minuteIncrementForArrowButtons;\n const newTime = currentTime.set({ minute: roundedMinute });\n onChange(newTime);\n };\n\n const addMinutesToSelectedTime = (minutes: number) => {\n state.value &&\n state.setValue(\n state.value?.add({\n minutes: minutes,\n }),\n );\n };\n\n return (\n <I18nProvider locale={locale}>\n <div className={classNames(className, 'eds-timepicker__wrapper')}>\n <TimePickerArrowButton\n direction=\"left\"\n disabled={disabled}\n aria-label={leftArrowButtonAriaLabel}\n onClick={() =>\n handleOnClickArrowButton(minuteIncrementForArrowButtons * -1)\n }\n />\n <BaseFormControl\n style={style}\n className={'eds-timepicker'}\n labelId={id}\n label={label}\n labelProps={{ ...labelProps }}\n ref={mergeRefs(timeFieldRef, ref)}\n disabled={disabled}\n disableLabelAnimation\n labelTooltip={labelTooltip}\n {...fieldProps}\n variant={variant}\n feedback={feedback}\n >\n {state.segments.map((segment, i) => (\n <TimeSegment segment={segment} state={state} key={i} />\n ))}\n </BaseFormControl>\n <TimePickerArrowButton\n direction=\"right\"\n disabled={disabled}\n aria-label={rightArrowButtonAriaLabel}\n onClick={() =>\n handleOnClickArrowButton(minuteIncrementForArrowButtons)\n }\n />\n </div>\n </I18nProvider>\n );\n },\n);\n","import React from 'react';\nimport classNames from 'classnames';\nimport {\n BaseFormControl,\n isFilled,\n useInputGroupContext,\n useVariant,\n VariantType,\n} from '@entur/form';\nimport { useOnMount, useRandomId } from '@entur/utils';\n\nimport './NativeTimePicker.scss';\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 /** Tekst eller ikon som kommer før inputfelter */\n prepend?: React.ReactNode;\n} & React.InputHTMLAttributes<HTMLInputElement>;\n\nexport const NativeTimePicker = React.forwardRef<\n HTMLInputElement,\n NativeTimePickerProps\n>(\n (\n { className, style, onChange, label, feedback, variant, prepend, ...rest },\n ref: React.Ref<HTMLInputElement>,\n ) => {\n const nativetimepickerId = useRandomId('eds-native-timepicker');\n return (\n <BaseFormControl\n style={style}\n className={classNames(className, 'eds-native-timepicker')}\n prepend={prepend}\n label={label}\n feedback={feedback}\n variant={variant}\n labelId={nativetimepickerId}\n 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\"\n onChange={handleChange}\n value={value}\n {...rest}\n />\n );\n});\n","import {\n ZonedDateTime,\n CalendarDateTime,\n Time,\n parseAbsolute,\n} from '@internationalized/date';\nimport { TimeValue } from '@react-types/datepicker';\n\n/**\n * Tar inn et JS Date-objekt og returnerer et av TimeValue-objektene fra @internationalized/date-pakken\n * @param {Date} date JS Date-objekt som ønskes konvertert til et TimeValue-objekt\n * @param {boolean} noDateOnlyTime Hvis datoen er irrelevant kan denne settes til true, da får man et Time-objekt uten dato tilbake\n * @param {string} timeZone Tidssonen på IANA-formatet som tidpunktet skal konverteres til. Utelates denne får man et tidspunkt uten tidssone. Kan brukes med og uten en UTC-offset Vær obs på annen oppførsel med offset, les mer på beskrivelsen av offset\n * @param {number} offset UTC-offset i millisekunder, må brukes med en tidssone. Ved å legge på en offset lager du en variant av en tidssone. Det betyr at tidspunktet ikke endres (time, minutt, sekund uendret), men tidssonen, med tilhørende offset, tidspunktet er i endres.\n * @returns {Time | CalendarDateTime | ZonedDateTime} et av TimeValue-objektene med verdier fra date\n */\nexport const nativeDateToTimeValue = (\n date: Date,\n noDateOnlyTime = false,\n timeZone?: string,\n offset?: number,\n) => {\n if (timeZone) {\n if (offset) {\n return new ZonedDateTime(\n date.getFullYear(),\n date.getMonth() + 1,\n date.getDate(),\n timeZone,\n offset,\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n );\n }\n return parseAbsolute(date.toISOString(), timeZone);\n }\n if (noDateOnlyTime)\n return new Time(date.getHours(), date.getMinutes(), date.getSeconds(), 0);\n return new CalendarDateTime(\n date.getFullYear(),\n date.getMonth() + 1,\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n );\n};\n\n/**\n * Tar inn et av TimeValue-objektene fra @internationalized/date-pakken og returnerer et JS Date-objekt\n * @param {TimeValue} time Et tidspunkt på TimeValue-formatet som ønsket konvertert til et JS Date-objekt\n * @param {string} timeZoneForCalendarDateTime Tidssonen time er i. Fungerer kun med typen er CalendarDateTime\n * @returns {Date} et Date-objekt med verdier fra time\n */\n// This function uses a lot of @ts-expect-error to make it work with all TimeValue types. Sorry ...\nexport const timeValueToNativeDate = (\n time: TimeValue,\n timeZoneForCalendarDateTime?: string,\n): Date => {\n // @ts-expect-error .day does not exist on Time-object\n if (!time.day) {\n // type is Time\n const date = new Date();\n date.setHours(time.hour);\n date.setMinutes(time.minute);\n date.setSeconds(time.second);\n return date;\n }\n\n // @ts-expect-error .timeZone does not exist in type Time and CalendarDateTime\n if (!time.timeZone) {\n // type is CalendarDateTime\n if (timeZoneForCalendarDateTime)\n // @ts-expect-error .toDate(timeZone) does not exist in type Time\n return time.toDate(timeZoneForCalendarDateTime);\n\n return new Date(\n // @ts-expect-error not in type Time\n time.year,\n // @ts-expect-error not in type Time\n time.month - 1,\n // @ts-expect-error not in type Time\n time.day,\n time.hour,\n time.minute,\n time.second,\n );\n }\n\n // @ts-expect-error .toDate() does not exist in type Time or CalendarDateTime\n return time.toDate();\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';\n"],"names":["DatePickerHeader","date","decreaseMonth","increaseMonth","prevMonthButtonDisabled","nextMonthButtonDisabled","nextMonthAriaLabel","previousMonthAriaLabel","locale","currentMonthIndex","getMonth","React","className","IconButton","type","onClick","disabled","getMonthName","LeftArrowIcon","Heading3","getFullYear","RightArrowIcon","monthIndex","year","Date","formatter","Intl","DateTimeFormat","code","month","format","DatePickerInput","forwardRef","ref","style","label","inputPlaceholder","prepend","feedback","variant","calendarButtonTooltipOpen","calendarButtonTooltipClose","hideCalendarButton","disableLabelAnimation","inputRef","calendarButtonId","toggleCalendarGUI","onKeyDownInput","onBlurInput","selectedDate","setFocusToCalendarGUI","setShouldFocusOnCalendarButtonAfterSelect","calendarGUIIsOpen","rest","useEffect","current","addEventListener","handleOnKeyDown","handleOnBlur","handleOnFocus","removeEventListener","event","requestAnimationFrame","select","handleOnClickInputField","handleOnClickCalendarButton","calendarButtonAriaLabel","buttonStateText","currentSelectionText","value","TextField","placeholder","mergeRefs","ariaAlertOnFeedback","append","Tooltip","placement","content","disableHoverListener","disableFocusListener","id","tabIndex","CalendarIcon","registerLocale","nb","DatePicker","onChange","onKeyDown","dateFormats","minDate","maxDate","inline","validationFeedback","validationVariant","hideCalendar","hideValidation","weekLabel","chooseDayAriaLabelPrefix","open","datepickerId","useRandomId","datepickerRef","useRef","calendarButton","document","getElementById","useState","showValidation","setShowValidation","shouldFocusOnCalendarButtonAfterSelect","validateInput","handleOnChange","focus","key","datePickerGUIIsOpen","forceUpdateInputFormat","focusAndSelectInputField","handleOnClickOutside","handleOnBlurInput","inputValue","inputValueParsedWithAllDateFormats","map","parse","parsedDateFromInputIsTheSameAsSelectedDate","some","dateFormat","isSameDay","getFeedbackAndVariant","undefined","setState","setOpen","datepickerGUIWrapper","calendar","componentNode","dateToSetFocusTo","querySelector","setBlur","preventScroll","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","TimeSegment","segment","state","useDateSegment","segmentProps","is12HourFormatted","segments","text","segmentDisplayText","match","padStart","isPlaceholder","TimePickerArrowButton","direction","ariaLabel","TimePicker","selectedTime","labelTooltip","customLocale","showTimeZone","minuteIncrementForArrowButtons","leftArrowButtonAriaLabel","rightArrowButtonAriaLabel","useLocale","useTimeFieldState","hideTimeZone","isDisabled","timeFieldRef","useTimeField","labelProps","fieldProps","handleOnClickArrowButton","minutes","someSegmentIsUndefined","setTimeToNearestMinuteIncrement","addMinutesToSelectedTime","currentTime","now","getLocalTimeZone","roundedMinute","Math","floor","minute","newTime","set","setValue","add","I18nProvider","i","NativeTimePicker","nativetimepickerId","NativeTimePickerBase","isTimepickerFilled","nativeDateToTimeValue","noDateOnlyTime","timeZone","offset","ZonedDateTime","getDate","getHours","getMinutes","getSeconds","parseAbsolute","toISOString","Time","CalendarDateTime","timeValueToNativeDate","time","timeZoneForCalendarDateTime","day","setHours","hour","setMinutes","setSeconds","second","toDate","warnAboutMissingStyles"],"mappings":"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"}
1
+ {"version":3,"file":"datepicker.cjs.development.js","sources":["../src/shared/FieldSegment.tsx","../src/shared/utils.ts","../src/DatePicker/DateField.tsx","../src/shared/CalendarButton.tsx","../src/DatePicker/CalendarCell.tsx","../src/DatePicker/CalendarGrid.tsx","../src/DatePicker/Calendar.tsx","../src/DatePicker/DatePicker.tsx","../src/NativeDatePicker.tsx","../src/TimePicker/TimePickerArrowButton.tsx","../src/TimePicker/TimePicker.tsx","../src/TimePicker/NativeTimePicker.tsx","../src/index.tsx"],"sourcesContent":["import React, { useRef } from 'react';\nimport classNames from 'classnames';\nimport { useDateSegment } from '@react-aria/datepicker';\nimport { DateSegment, DateFieldState } from '@react-stately/datepicker';\n\nimport './FieldSegment.scss';\n\ntype TimeSegmentProps = {\n segment: DateSegment;\n state: DateFieldState;\n};\n\nexport const FieldSegment = ({ segment, state }: TimeSegmentProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { segmentProps } = useDateSegment(segment, state, ref);\n\n const is12HourFormatted = state.segments.some(\n segment => segment.text === 'AM' || segment.text === 'PM',\n );\n\n const segmentDisplayText = () => {\n if (is12HourFormatted) return segment.text;\n // if number add '0' padding to start when one digit\n if (segment.text.match(/\\d+/)) return segment.text.padStart(2, '0');\n return segment.text;\n };\n\n return (\n <div\n {...segmentProps}\n ref={ref}\n className={classNames('eds-date-and-time-field__segment', {\n 'eds-date-and-time-field__segment--placeholder': segment.isPlaceholder,\n 'eds-date-and-time-field__segment--dot-separator': segment.text === '.',\n })}\n tabIndex={state.isDisabled ? -1 : segmentProps.tabIndex}\n >\n {segmentDisplayText()}\n </div>\n );\n};\n","import {\n ZonedDateTime,\n CalendarDateTime,\n Time,\n parseAbsolute,\n DateValue,\n getLocalTimeZone,\n CalendarDate,\n} from '@internationalized/date';\nimport { TimeValue } from '@react-types/datepicker';\nimport { Calendar, GregorianCalendar } from '@internationalized/date';\n\n/**\n * Tar inn et JS Date-objekt og returnerer et av Date- eller TimeValue-objektene fra @internationalized/date-pakken\n * @param {Date} date JS Date-objekt som ønskes konvertert til et Date- eller TimeValue-objekt\n * @param {boolean} noDateOnlyTime Hvis datoen er irrelevant kan denne settes til true, da får man et Time-objekt uten dato tilbake\n * @param {boolean} noTimeOnlyDate Hvis tidspunktet er irrelevant kan denne settes til true, da får man et CalendarDate-objekt uten tidspunkt tilbake\n * @param {string} timeZone Tidssonen på IANA-formatet som tidpunktet skal konverteres til. Utelates denne får man et tidspunkt uten tidssone. Kan brukes med og uten en UTC-offset Vær obs på annen oppførsel med offset, les mer på beskrivelsen av offset\n * @param {number} offset UTC-offset i millisekunder, må brukes med en tidssone. Ved å legge på en offset lager du en variant av en tidssone. Det betyr at tidspunktet ikke endres (time, minutt, sekund uendret), men tidssonen, med tilhørende offset, tidspunktet er i endres.\n * @returns {Time | CalendarDateTime | ZonedDateTime | CalendarDate} et av Time- eller DateValue-objektene med verdier fra date\n */\nexport const nativeDateToTimeOrDateValue = (\n date: Date,\n noDateOnlyTime = false,\n noTimeOnlyDate = false,\n timeZone?: string,\n offset?: number,\n) => {\n if (timeZone) {\n if (offset) {\n return new ZonedDateTime(\n date.getFullYear(),\n date.getMonth() + 1,\n date.getDate(),\n timeZone,\n offset,\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n );\n }\n return parseAbsolute(date.toISOString(), timeZone);\n }\n if (noDateOnlyTime)\n return new Time(date.getHours(), date.getMinutes(), date.getSeconds(), 0);\n if (noTimeOnlyDate)\n return new CalendarDate(\n date.getFullYear(),\n date.getMonth() + 1,\n date.getDate(),\n );\n return new CalendarDateTime(\n date.getFullYear(),\n date.getMonth() + 1,\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n );\n};\n\n/**\n * Tar inn et av Date- eller TimeValue-objektene fra @internationalized/date-pakken og returnerer et JS Date-objekt\n * @param {DateValue | TimeValue} value En dato eller et tidspunkt på Date- eller TimeValue-formatet som ønskes konvertert til et JS Date-objekt\n * @param {string} timeZoneForCalendarDateTime Tidssonen value er i. Fungerer kun med typen er CalendarDateTime\n * @returns {Date} et Date-objekt med verdier fra time\n */\n// This function uses a lot of @ts-expect-error to make it work with all Date- and TimeValue types. Sorry ...\nexport const timeOrDateValueToNativeDate = (\n value: TimeValue | DateValue,\n timeZoneForCalendarDateTime?: string,\n): Date => {\n // @ts-expect-error .day does not exist on Time-object\n if (!value.day) {\n // type is Time\n const date = new Date();\n // @ts-expect-error hour does not exist on CalendarDate\n date.setHours(value.hour);\n // @ts-expect-error minute does not exist on CalendarDate\n date.setMinutes(value.minute);\n // @ts-expect-error second does not exist on CalendarDate\n date.setSeconds(value.second);\n return date;\n }\n\n // @ts-expect-error .day does not exist on Time-object\n if (!value.hour) {\n // type is CalendarDate\n // @ts-expect-error .toDate(timeZone) does not exist in type Time\n return value.toDate(timeZoneForCalendarDateTime ?? getLocalTimeZone());\n }\n\n // @ts-expect-error .timeZone does not exist in type Time and CalendarDateTime\n if (!value.timeZone) {\n // type is CalendarDateTime\n if (timeZoneForCalendarDateTime)\n // @ts-expect-error .toDate(timeZone) does not exist in type Time\n return value.toDate(timeZoneForCalendarDateTime);\n\n return new Date(\n // @ts-expect-error not in type Time\n value.year,\n // @ts-expect-error not in type Time\n value.month - 1,\n // @ts-expect-error not in type Time\n value.day,\n // @ts-expect-error not in type CalendarDate\n value.hour,\n // @ts-expect-error not in type CalendarDate\n value.minute,\n // @ts-expect-error not in type CalendarDate\n value.second,\n );\n }\n\n // @ts-expect-error .toDate() does not exist in type Time or CalendarDateTime\n return value.toDate();\n};\n\nexport const createCalendar = (identifier = 'gregory'): Calendar => {\n switch (identifier) {\n case 'gregory':\n return new GregorianCalendar();\n default:\n throw new Error(`Unsupported calendar ${identifier}`);\n }\n};\n\nexport const ariaLabelIfNorwegian = (\n norwegianAriaLabel: string,\n locale: string,\n propsCollection: any,\n) => {\n if (locale.toLowerCase() !== 'no-no') return propsCollection['aria-label'];\n return norwegianAriaLabel;\n};\n","import React, { ReactNode, useRef } from 'react';\n\nimport { useDateFieldState } from '@react-stately/datepicker';\nimport { useDateField } from '@react-aria/datepicker';\nimport { I18nProvider, useLocale } from '@react-aria/i18n';\nimport classNames from 'classnames';\n\nimport type {\n SpectrumDateFieldProps,\n DateValue,\n} from '@react-types/datepicker';\nimport type { CalendarDate } from '@internationalized/date';\n\nimport { BaseFormControl, VariantType } from '@entur/form';\nimport { ConditionalWrapper, mergeRefs, useRandomId } from '@entur/utils';\n\nimport { FieldSegment } from '../shared/FieldSegment';\nimport { createCalendar } from '../shared/utils';\n\nimport './DateField.scss';\n\nexport type DateFieldProps = {\n /** Den valgte tiden. Tid i '@internationalized/date'-pakkens format */\n selectedDate: DateValue | null;\n /** Kalles når tiden endres. Tid i '@internationalized/date'-pakkens format */\n onChange: (value: DateValue) => void;\n /** Label til TimePicker */\n label: string;\n /** BCP47-språkkoden til locale-en du ønsker å bruke.\n * @default Brukerenhetens selvvalgte locale\n */\n locale?: string;\n /** Viser den gjeldende tidssonen hvis en er valgt\n * @default false\n */\n showTimeZone?: boolean;\n showTime?: boolean;\n /** Tidligste gyldige datovalg.\n * Eks: today(getLocalTimeZone()) == i dag i lokal tidssone */\n minValue?: CalendarDate;\n /** Seneste gyldige datovalg. (se minValue) */\n maxValue?: CalendarDate;\n /** Varselmelding, som vil komme under TimePicker */\n feedback?: string;\n /** Valideringsvariant */\n variant?: VariantType;\n /** Varselmelding som forteller om ugyldig dato\n * @default \"Ugyldig dato\"\n */\n validationFeedback?: string;\n /** Valideringsvariant for melding om ugyldig dato\n * @default \"error\"\n */\n validationVariant?: VariantType;\n labelTooltip?: React.ReactNode;\n disabled?: boolean;\n /** Ekstra klassenavn */\n className?: string;\n style?: React.CSSProperties;\n [key: string]: any;\n} & Omit<\n SpectrumDateFieldProps<DateValue>,\n | 'value'\n | 'onChange'\n | 'label'\n | 'hideTimeZone'\n | 'placeholder'\n | 'minValue'\n | 'maxValue'\n>;\n\nexport const DateField = React.forwardRef<HTMLDivElement, DateFieldProps>(\n (\n {\n selectedDate: value,\n label,\n locale: customLocale,\n showTimeZone,\n showTime,\n granularity = 'day',\n disabled,\n variant,\n feedback,\n validationVariant = 'error',\n validationFeedback = 'Ugyldig dato',\n labelTooltip,\n style,\n className,\n labelProps: parentLabelProps,\n append,\n ...rest\n },\n ref,\n ) => {\n const { locale } = useLocale();\n\n const state = useDateFieldState({\n ...rest,\n locale: customLocale ?? locale,\n createCalendar: createCalendar,\n value: value === null ? undefined : value,\n hideTimeZone: !showTimeZone,\n granularity: showTime ? 'minute' : granularity,\n });\n\n const dateFieldRef = useRef(null);\n const { labelProps, fieldProps } = useDateField(\n { ...rest, label: label, isDisabled: disabled || rest.isDisabled },\n state,\n dateFieldRef,\n );\n\n const id = useRandomId('datefield');\n\n return (\n <ConditionalWrapper\n condition={customLocale !== undefined}\n wrapper={(child: ReactNode) => (\n <I18nProvider locale={customLocale}>{child}</I18nProvider>\n )}\n >\n <BaseFormControl\n style={style}\n className={classNames('eds-datefield', className)}\n labelId={id}\n ref={mergeRefs(dateFieldRef, ref)}\n disabled={state.isDisabled}\n disableLabelAnimation\n label={label}\n labelTooltip={labelTooltip}\n labelProps={parentLabelProps ?? labelProps}\n {...fieldProps}\n variant={\n variant ?? state.validationState === 'invalid'\n ? validationVariant\n : undefined\n }\n feedback={\n feedback ?? state.validationState === 'invalid'\n ? validationFeedback\n : undefined\n }\n append={append}\n ariaAlertOnFeedback\n >\n {state.segments.map((segment, i) => (\n <FieldSegment segment={segment} state={state} key={i} />\n ))}\n </BaseFormControl>\n </ConditionalWrapper>\n );\n },\n);\n","import React, { useRef } from 'react';\n\nimport { useButton } from '@react-aria/button';\n\nimport { IconButton } from '@entur/button';\n\ntype CalendarButtonProps = {\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n [key: string]: any;\n};\n\nexport const CalendarButton = ({\n children,\n className,\n style,\n ...props\n}: CalendarButtonProps) => {\n const ref = useRef(null);\n const { buttonProps } = useButton(props, ref);\n\n return (\n <IconButton {...buttonProps} ref={ref} className={className} style={style}>\n {children}\n </IconButton>\n );\n};\n","import React, { useRef } from 'react';\n\nimport { useCalendarCell } from '@react-aria/calendar';\nimport { CalendarState } from '@react-stately/calendar';\nimport {\n CalendarDate,\n getLocalTimeZone,\n isEqualDay,\n now,\n} from '@internationalized/date';\nimport classNames from 'classnames';\n\ntype CalendarCellProps = {\n state: CalendarState;\n date: CalendarDate;\n onSelectedCellClick?: () => void;\n};\n\nexport const CalendarCell = ({\n state,\n date,\n onSelectedCellClick = () => {\n return;\n },\n ...rest\n}: CalendarCellProps) => {\n const cellRef = useRef(null);\n\n const {\n cellProps,\n buttonProps,\n isSelected,\n isOutsideVisibleRange,\n isDisabled,\n isUnavailable,\n formattedDate,\n } = useCalendarCell({ date }, state, cellRef);\n return (\n <td {...cellProps} className=\"eds-datepicker__calendar__grid__cell__td\">\n <div\n {...buttonProps}\n ref={cellRef}\n hidden={isOutsideVisibleRange}\n className={classNames('eds-datepicker__calendar__grid__cell', {\n 'eds-datepicker__calendar__grid__cell--selected': isSelected,\n 'eds-datepicker__calendar__grid__cell--disabled':\n isDisabled || isUnavailable,\n 'eds-datepicker__calendar__grid__cell--outside-month':\n isOutsideVisibleRange,\n 'eds-datepicker__calendar__grid__cell--today': isEqualDay(\n date,\n now(state.timeZone ?? getLocalTimeZone()),\n ),\n })}\n {...rest}\n onClick={e => {\n buttonProps.onClick && buttonProps.onClick(e);\n isSelected && onSelectedCellClick();\n }}\n >\n {formattedDate}\n </div>\n </td>\n );\n};\n","import React from 'react';\n\nimport { useLocale } from '@react-aria/i18n';\nimport { useCalendarGrid } from '@react-aria/calendar';\nimport { CalendarState } from '@react-stately/calendar';\nimport { getWeeksInMonth } from '@internationalized/date';\n\nimport { useRandomId } from '@entur/utils';\nimport { VisuallyHidden } from '@entur/a11y';\n\nimport { CalendarCell } from './CalendarCell';\n\ntype CalendarGridProps = {\n state: CalendarState;\n navigationDescription?: string;\n onSelectedCellClick?: () => void;\n};\n\nexport const CalendarGrid = ({\n state,\n navigationDescription,\n onSelectedCellClick = () => {\n return;\n },\n ...rest\n}: CalendarGridProps) => {\n const calendarGridId = useRandomId('eds-calendar');\n const { locale } = useLocale();\n\n const { gridProps, headerProps, weekDays } = useCalendarGrid(rest, state);\n\n const weeksInMonth = getWeeksInMonth(state.visibleRange.start, locale);\n const weeksArray = Array.from(Array(weeksInMonth).keys());\n\n const weekDaysMapped = () => {\n if (locale.toLowerCase() === 'no-no' || locale.toLowerCase() === 'no')\n return ['ma', 'ti', 'on', 'to', 'fr', 'lø', 'sø'];\n if (weekDays.toString() === 'M,T,W,T,F,S,S')\n return ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];\n return weekDays.map(day => day.toLowerCase());\n };\n\n const getNavigationDescription = () => {\n if (navigationDescription) return navigationDescription;\n if (locale.toLowerCase().includes('en'))\n return 'Use the arrow keys to navigate between dates';\n return 'Bruk piltastene til å navigere mellom datoer';\n };\n\n return (\n <>\n <table\n {...gridProps}\n cellSpacing=\"0\"\n className=\"eds-datepicker__calendar__grid\"\n >\n <thead {...headerProps}>\n <tr>\n {weekDaysMapped().map((day, index) => (\n <th key={index}>{day}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {weeksArray.map(weekIndex => (\n <tr key={weekIndex}>\n {state\n .getDatesInWeek(weekIndex)\n .map((date, i) =>\n date ? (\n <CalendarCell\n key={i}\n state={state}\n date={date}\n aria-describedby={calendarGridId + 'description'}\n onSelectedCellClick={onSelectedCellClick}\n />\n ) : (\n <td key={i} />\n ),\n )}\n </tr>\n ))}\n </tbody>\n </table>\n <VisuallyHidden id={calendarGridId + 'description'}>\n {getNavigationDescription()}\n </VisuallyHidden>\n </>\n );\n};\n","import React, { ReactNode } from 'react';\n\nimport { I18nProvider, useLocale } from '@react-aria/i18n';\nimport { useCalendar } from '@react-aria/calendar';\nimport { useCalendarState } from '@react-stately/calendar';\nimport { DateValue } from '@internationalized/date';\n\nimport { LeftArrowIcon, RightArrowIcon } from '@entur/icons';\nimport { ConditionalWrapper } from '@entur/utils';\n\nimport { ariaLabelIfNorwegian, createCalendar } from '../shared/utils';\nimport { CalendarButton } from '../shared/CalendarButton';\nimport { CalendarGrid } from './CalendarGrid';\n\nimport './Calendar.scss';\n\ntype CalendarProps = {\n selectedDate: DateValue;\n onChange: (SelectedDate: DateValue) => void;\n navigationDescription?: string;\n style?: React.CSSProperties;\n onSelectedCellClick?: () => void;\n [key: string]: any;\n};\n\nexport const Calendar = React.forwardRef<HTMLDivElement, CalendarProps>(\n (\n {\n selectedDate: value,\n onChange,\n locale: customLocale,\n style,\n children: _,\n navigationDescription,\n onSelectedCellClick = () => {\n return;\n },\n ...rest\n },\n ref,\n ) => {\n const { locale } = useLocale();\n\n const state = useCalendarState({\n ...rest,\n onChange,\n locale: customLocale ?? locale,\n createCalendar,\n });\n const { calendarProps, prevButtonProps, nextButtonProps, title } =\n useCalendar(rest, state);\n\n return (\n <ConditionalWrapper\n condition={customLocale}\n wrapper={(child: ReactNode) => (\n <I18nProvider locale={customLocale}>{child}</I18nProvider>\n )}\n >\n <div\n {...calendarProps}\n ref={ref}\n className=\"eds-datepicker__calendar\"\n style={style}\n >\n <div className=\"eds-datepicker__calendar__header\">\n <CalendarButton\n {...prevButtonProps}\n aria-label={ariaLabelIfNorwegian(\n 'Forrige måned',\n locale,\n prevButtonProps,\n )}\n >\n <LeftArrowIcon size={20} />\n </CalendarButton>\n <h2>{title}</h2>\n <CalendarButton\n {...nextButtonProps}\n aria-label={ariaLabelIfNorwegian(\n 'Neste måned',\n locale,\n nextButtonProps,\n )}\n >\n <RightArrowIcon size={20} />\n </CalendarButton>\n </div>\n <CalendarGrid\n state={state}\n navigationDescription={navigationDescription}\n onSelectedCellClick={onSelectedCellClick}\n />\n </div>\n </ConditionalWrapper>\n );\n },\n);\n","import React, { ReactNode, useRef } from 'react';\n\nimport { useDatePickerState } from '@react-stately/datepicker';\nimport { useDatePicker } from '@react-aria/datepicker';\nimport { I18nProvider } from '@react-aria/i18n';\nimport {\n useFloating,\n offset,\n flip,\n shift,\n autoUpdate,\n} from '@floating-ui/react-dom';\nimport FocusLock from 'react-focus-lock';\nimport classNames from 'classnames';\n\nimport type { CalendarDate } from '@internationalized/date';\nimport type {\n DateValue,\n SpectrumDatePickerProps,\n} from '@react-types/datepicker';\n\nimport {\n ConditionalWrapper,\n useOnClickOutside,\n useOnEscape,\n useWindowDimensions,\n} from '@entur/utils';\nimport { space, zIndexes } from '@entur/tokens';\nimport { CalendarIcon } from '@entur/icons';\nimport { Modal } from '@entur/modal';\n\nimport type { VariantType } from '@entur/form';\n\nimport { DateField } from './DateField';\nimport { Calendar } from './Calendar';\nimport { CalendarButton } from '../shared/CalendarButton';\n\nimport './DatePicker.scss';\n\nexport type DatePickerProps = {\n /** Den valgte datoen. Dato i '@internationalized/date'-pakkens format */\n selectedDate: DateValue;\n /** Kalles når tiden endres. Dato i '@internationalized/date'-pakkens format */\n onChange: (date: DateValue) => void;\n /** Ledetekst for inputfeltet til DatePicker */\n label: string;\n /** BCP47-språkkoden til locale-en du ønsker å bruke.\n * @default Brukerenhetens selvvalgte locale\n */\n locale?: string;\n /** Viser den gjeldende tidssonen hvis en er valgt (krever at tid også vises)\n * @default false\n */\n showTimeZone?: boolean;\n /** Viser tidspunkt i tillegg til dato.\n * OBS: selectedDate må være av typen CalendarDateTime eller ZonedDateTime\n */\n showTime?: boolean;\n /** Tidligste gyldige datovalg.\n * Eks: today(getLocalTimeZone()) == i dag i lokal tidssone. */\n minDate?: CalendarDate;\n /** Seneste gyldige datovalg.\n * Eks: today(getLocalTimeZone()) == i dag i lokal tidssone\n *\n * OBS: Hvis du bruker dato med tid vil det være til, men ikke med denne datoen */\n maxDate?: CalendarDate;\n /** Funksjon som tar inn en dato og sier om den er utilgjengelig.\n * Eks. (date) => isWeekend(date, 'no-NO') == helgedager er ikke tilgjengelig */\n isDateUnavailable?: (date: DateValue) => boolean;\n /** Varselmelding, som vil komme under DatePicker sitt inputfelt */\n feedback?: string;\n /** Valideringsvariant */\n variant?: VariantType;\n /** Varselmelding som forteller om ugyldig dato\n * @default \"Ugyldig dato\"\n */\n validationFeedback?: string;\n /** Valideringsvariant for melding om ugyldig dato\n * @default \"error\"\n */\n validationVariant?: VariantType;\n disabled?: boolean;\n /** Hvis true vil kalenderen alltid vises i en popover når den åpnes\n * @default false\n */\n disableModal?: boolean;\n /** Maxbredden til viewport-en for at modal skal vises\n * @default 1000\n */\n modalTreshold?: number;\n labelTooltip?: React.ReactNode;\n /** Skjermlesertest som forklarer navigasjon i kalenderen. Oversettes automatisk for engelsk locale, men ikke andre språk.\n * @default 'Bruk piltastene til å navigere mellom datoer'\n */\n navigationDescription?: string;\n /** Ekstra klassenavn */\n className?: string;\n style?: React.CSSProperties;\n} & Omit<\n SpectrumDatePickerProps<DateValue>,\n | 'value'\n | 'onChange'\n | 'label'\n | 'hideTimeZone'\n | 'placeholder'\n | 'minValue'\n | 'maxValue'\n>;\n\nexport const DatePicker = ({\n selectedDate: value,\n onChange,\n locale,\n disabled: isDisabled,\n showTime,\n showTimeZone = false,\n className,\n style,\n variant,\n feedback,\n validationVariant,\n validationFeedback,\n disableModal = false,\n labelTooltip,\n navigationDescription,\n minDate: minValue,\n maxDate: maxValue,\n modalTreshold = 1000,\n ...rest\n}: DatePickerProps) => {\n const CALENDAR_MODAL_MAX_SCREEN_WIDTH = modalTreshold;\n const datePickerRef = useRef<HTMLDivElement | null>(null);\n const calendarRef = useRef<HTMLDivElement | null>(null);\n const dateFieldRef = useRef<HTMLDivElement | null>(null);\n\n const { width } = useWindowDimensions();\n\n const state = useDatePickerState({\n ...rest,\n minValue,\n maxValue,\n value,\n onChange,\n });\n const {\n groupProps,\n labelProps,\n fieldProps,\n buttonProps,\n dialogProps,\n calendarProps,\n } = useDatePicker(\n { isDisabled, minValue, maxValue, autoFocus: true, ...rest },\n state,\n datePickerRef,\n );\n\n // calculations for floating-UI popover position\n const { x, y, reference, floating, strategy } = useFloating({\n whileElementsMounted: autoUpdate,\n placement: 'bottom-start',\n middleware: [\n offset(space.extraSmall),\n flip(),\n shift({ padding: space.extraSmall }),\n ],\n });\n\n const onChangeCalendar = (newSelectedDate: DateValue) => {\n // Necessary to avoid state update on unmounted component\n requestAnimationFrame(() => {\n calendarProps.onChange && calendarProps.onChange(newSelectedDate);\n });\n };\n\n useOnClickOutside([calendarRef], () => {\n state.setOpen(false);\n });\n\n useOnEscape(calendarRef, () => {\n state.setOpen(false);\n });\n\n const calendarSharedProps = {\n ...dialogProps,\n ...calendarProps,\n disabled: calendarProps.isDisabled,\n navigationDescription: navigationDescription,\n onSelectedCellClick: () => state.setOpen(false),\n onChange: onChangeCalendar,\n };\n\n const useModal = width <= CALENDAR_MODAL_MAX_SCREEN_WIDTH && !disableModal;\n\n const popoverCalendar = (\n <div\n // styling for floating-UI popover\n style={{\n position: strategy,\n top: y ?? 0,\n left: x ?? 0,\n zIndex: zIndexes.popover,\n }}\n ref={node => {\n floating(node);\n }}\n >\n <FocusLock disabled={!state.isOpen || useModal} returnFocus>\n {state.isOpen && (\n <Calendar {...calendarSharedProps} ref={calendarRef} />\n )}\n </FocusLock>\n </div>\n );\n\n const modalCalendar = (\n <Modal\n size=\"small\"\n title=\"\"\n open={state.isOpen}\n onDismiss={() => state.setOpen(false)}\n closeOnClickOutside\n className=\"eds-datepicker__calendar-modal\"\n >\n <Calendar {...calendarSharedProps} />\n </Modal>\n );\n\n return (\n <ConditionalWrapper\n condition={locale !== undefined}\n wrapper={(child: ReactNode) => (\n <I18nProvider locale={locale}>{child}</I18nProvider>\n )}\n >\n <div className={classNames('eds-datepicker', className)}>\n <div\n {...groupProps}\n ref={node => {\n datePickerRef.current = node;\n reference(node);\n }}\n id={undefined}\n className=\"eds-datepicker__datefield__wrapper\"\n >\n <DateField\n {...fieldProps}\n selectedDate={state.value}\n label={rest.label}\n labelProps={labelProps}\n showTime={showTime}\n showTimeZone={showTimeZone}\n ref={dateFieldRef}\n variant={variant}\n feedback={feedback}\n validationVariant={validationVariant}\n validationFeedback={validationFeedback}\n labelTooltip={labelTooltip}\n className={classNames('eds-datepicker__datefield', {\n 'eds-datepicker__datefield--disabled': fieldProps.isDisabled,\n })}\n />\n {!fieldProps.isDisabled && (\n <CalendarButton\n {...buttonProps}\n onPress={() => state.setOpen(!state.isOpen)}\n className=\"eds-datepicker__open-calendar-button\"\n >\n <CalendarIcon />\n </CalendarButton>\n )}\n {useModal ? modalCalendar : popoverCalendar}\n </div>\n </div>\n </ConditionalWrapper>\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 classNames from 'classnames';\n\nimport { IconButton } from '@entur/button';\nimport { LeftArrowIcon, RightArrowIcon } from '@entur/icons';\n\ntype TimePickerArrowButtonProps = {\n direction: 'left' | 'right';\n} & React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n>;\n\nexport const TimePickerArrowButton: React.FC<TimePickerArrowButtonProps> = ({\n direction,\n onClick,\n disabled,\n 'aria-label': ariaLabel,\n}) => {\n return (\n <IconButton\n className={classNames(\n 'eds-timepicker__arrowbutton',\n `eds-timepicker__arrowbutton--${direction}`,\n { 'eds-timepicker__arrowbutton--disabled': disabled },\n )}\n type=\"button\"\n tabIndex={-1}\n onClick={onClick}\n aria-label={ariaLabel}\n disabled={disabled}\n >\n {direction === 'left' ? <LeftArrowIcon /> : <RightArrowIcon />}\n </IconButton>\n );\n};\n","import React, { useRef } from 'react';\nimport classNames from 'classnames';\nimport { useTimeField } from '@react-aria/datepicker';\nimport { I18nProvider, useLocale } from '@react-aria/i18n';\nimport { useTimeFieldState } from '@react-stately/datepicker';\nimport { getLocalTimeZone, now } from '@internationalized/date';\n\nimport type {\n TimePickerProps as ReactAriaTimePickerProps,\n TimeValue,\n} from '@react-types/datepicker';\n\nimport { BaseFormControl, VariantType } from '@entur/form';\nimport { useRandomId, mergeRefs } from '@entur/utils';\n\nimport { FieldSegment } from '../shared/FieldSegment';\nimport { TimePickerArrowButton } from './TimePickerArrowButton';\n\nimport './TimePicker.scss';\n\nexport type TimePickerProps = {\n /** Den valgte tiden. Tid i '@internationalized/date'-pakkens format */\n selectedTime: TimeValue | null;\n /** Kalles når tiden endres. Tid i '@internationalized/date'-pakkens format */\n onChange: (value: TimeValue) => void;\n /** Label til TimePicker */\n label: string;\n /** Minutter som legges til eller trekkes fra ved klikk på pilene i TimePicker\n * @default 30\n */\n minuteIncrementForArrowButtons?: number;\n /** BCP47-språkkoden til locale-en du ønsker å bruke.\n * @default Brukerenhetens selvvalgte locale\n */\n locale?: string;\n /** Viser den gjeldende tidssonen hvis en er valgt\n * @default false\n */\n showTimeZone?: boolean;\n /** Aria-label for venstrepil-knappen som trekker fra tid\n * @default `Trekk fra ${minuteIncrementForArrowButtons} minutter`\n */\n leftArrowButtonAriaLabel?: string;\n /** Aria-label for høyrepil-knappen som legger til tid\n * @default `Legg til ${minuteIncrementForArrowButtons} minutter`\n */\n rightArrowButtonAriaLabel?: string;\n /** Varselmelding, som vil komme under TimePicker */\n feedback?: string;\n /** Valideringsvariant */\n variant?: VariantType;\n labelTooltip?: React.ReactNode;\n disabled?: boolean;\n /** Ekstra klassenavn */\n className?: string;\n style?: React.CSSProperties;\n} & Omit<\n ReactAriaTimePickerProps<TimeValue>,\n 'onChange' | 'label' | 'hideTimeZone' | 'placeholder'\n>;\n\nexport const TimePicker = React.forwardRef<HTMLDivElement, TimePickerProps>(\n (\n {\n selectedTime,\n onChange,\n disabled,\n className,\n style,\n label,\n labelTooltip,\n feedback,\n variant,\n locale: customLocale,\n showTimeZone,\n minuteIncrementForArrowButtons = 30,\n leftArrowButtonAriaLabel = `Trekk fra ${minuteIncrementForArrowButtons} minutter`,\n rightArrowButtonAriaLabel = `Legg til ${minuteIncrementForArrowButtons} minutter`,\n ...rest\n },\n ref,\n ) => {\n let { locale } = useLocale();\n if (customLocale) locale = customLocale;\n\n const state = useTimeFieldState({\n onChange,\n label: label,\n locale,\n value: selectedTime === null ? undefined : selectedTime,\n hideTimeZone: !showTimeZone,\n isDisabled: disabled,\n ...rest,\n });\n const timeFieldRef = useRef(null);\n const { labelProps, fieldProps } = useTimeField(\n { ...rest, label: label },\n state,\n timeFieldRef,\n );\n const id = useRandomId('timepicker');\n\n const handleOnClickArrowButton = (minutes: number) => {\n if (someSegmentIsUndefined) {\n setTimeToNearestMinuteIncrement();\n } else {\n addMinutesToSelectedTime(minutes);\n }\n };\n\n const someSegmentIsUndefined = state.segments.some(\n segment => segment.text === '––',\n );\n\n const setTimeToNearestMinuteIncrement = () => {\n const currentTime = now(getLocalTimeZone());\n const roundedMinute =\n Math.floor(currentTime.minute / minuteIncrementForArrowButtons) *\n minuteIncrementForArrowButtons;\n const newTime = currentTime.set({ minute: roundedMinute });\n onChange(newTime);\n };\n\n const addMinutesToSelectedTime = (minutes: number) => {\n state.value &&\n state.setValue(\n state.value?.add({\n minutes: minutes,\n }),\n );\n };\n\n return (\n <I18nProvider locale={locale}>\n <div className={classNames(className, 'eds-timepicker__wrapper')}>\n <TimePickerArrowButton\n direction=\"left\"\n disabled={disabled}\n aria-label={leftArrowButtonAriaLabel}\n onClick={() =>\n handleOnClickArrowButton(minuteIncrementForArrowButtons * -1)\n }\n />\n <BaseFormControl\n style={style}\n className={'eds-timepicker'}\n labelId={id}\n label={label}\n labelProps={{ ...labelProps }}\n ref={mergeRefs(timeFieldRef, ref)}\n disabled={disabled}\n disableLabelAnimation\n labelTooltip={labelTooltip}\n {...fieldProps}\n variant={variant}\n feedback={feedback}\n >\n {state.segments.map((segment, i) => (\n <FieldSegment segment={segment} state={state} key={i} />\n ))}\n </BaseFormControl>\n <TimePickerArrowButton\n direction=\"right\"\n disabled={disabled}\n aria-label={rightArrowButtonAriaLabel}\n onClick={() =>\n handleOnClickArrowButton(minuteIncrementForArrowButtons)\n }\n />\n </div>\n </I18nProvider>\n );\n },\n);\n","import React from 'react';\nimport classNames from 'classnames';\nimport {\n BaseFormControl,\n isFilled,\n useInputGroupContext,\n useVariant,\n VariantType,\n} from '@entur/form';\nimport { useOnMount, useRandomId } from '@entur/utils';\n\nimport './NativeTimePicker.scss';\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 /** Tekst eller ikon som kommer før inputfelter */\n prepend?: React.ReactNode;\n} & React.InputHTMLAttributes<HTMLInputElement>;\n\nexport const NativeTimePicker = React.forwardRef<\n HTMLInputElement,\n NativeTimePickerProps\n>(\n (\n { className, style, onChange, label, feedback, variant, prepend, ...rest },\n ref: React.Ref<HTMLInputElement>,\n ) => {\n const nativetimepickerId = useRandomId('eds-native-timepicker');\n return (\n <BaseFormControl\n style={style}\n className={classNames(className, 'eds-native-timepicker')}\n prepend={prepend}\n label={label}\n feedback={feedback}\n variant={variant}\n labelId={nativetimepickerId}\n 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\"\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 './shared';\n"],"names":["FieldSegment","segment","state","ref","useRef","useDateSegment","segmentProps","is12HourFormatted","segments","some","text","segmentDisplayText","match","padStart","React","className","classNames","isPlaceholder","tabIndex","isDisabled","nativeDateToTimeOrDateValue","date","noDateOnlyTime","noTimeOnlyDate","timeZone","offset","ZonedDateTime","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","parseAbsolute","toISOString","Time","CalendarDate","CalendarDateTime","timeOrDateValueToNativeDate","value","timeZoneForCalendarDateTime","day","Date","setHours","hour","setMinutes","minute","setSeconds","second","toDate","getLocalTimeZone","year","month","createCalendar","identifier","GregorianCalendar","Error","ariaLabelIfNorwegian","norwegianAriaLabel","locale","propsCollection","toLowerCase","DateField","forwardRef","selectedDate","label","customLocale","showTimeZone","showTime","granularity","disabled","variant","feedback","validationVariant","validationFeedback","labelTooltip","style","parentLabelProps","labelProps","append","rest","useLocale","useDateFieldState","undefined","hideTimeZone","dateFieldRef","useDateField","fieldProps","id","useRandomId","ConditionalWrapper","condition","wrapper","child","I18nProvider","BaseFormControl","labelId","mergeRefs","disableLabelAnimation","validationState","ariaAlertOnFeedback","map","i","key","CalendarButton","children","props","useButton","buttonProps","IconButton","CalendarCell","onSelectedCellClick","cellRef","useCalendarCell","cellProps","isSelected","isOutsideVisibleRange","isUnavailable","formattedDate","hidden","isEqualDay","now","onClick","e","CalendarGrid","navigationDescription","calendarGridId","useCalendarGrid","gridProps","headerProps","weekDays","weeksInMonth","getWeeksInMonth","visibleRange","start","weeksArray","Array","from","keys","weekDaysMapped","toString","getNavigationDescription","includes","cellSpacing","index","weekIndex","getDatesInWeek","VisuallyHidden","Calendar","onChange","useCalendarState","useCalendar","calendarProps","prevButtonProps","nextButtonProps","title","LeftArrowIcon","size","RightArrowIcon","DatePicker","disableModal","minValue","minDate","maxValue","maxDate","modalTreshold","CALENDAR_MODAL_MAX_SCREEN_WIDTH","datePickerRef","calendarRef","useWindowDimensions","width","useDatePickerState","useDatePicker","autoFocus","groupProps","dialogProps","useFloating","whileElementsMounted","autoUpdate","placement","middleware","space","extraSmall","flip","shift","padding","x","y","reference","floating","strategy","onChangeCalendar","newSelectedDate","requestAnimationFrame","useOnClickOutside","setOpen","useOnEscape","calendarSharedProps","useModal","popoverCalendar","position","top","left","zIndex","zIndexes","popover","node","FocusLock","isOpen","returnFocus","modalCalendar","Modal","open","onDismiss","closeOnClickOutside","current","onPress","CalendarIcon","NativeDatePicker","prepend","DateIcon","inline","nativedatepickerId","isFilled","NativeDatePickerBase","contextVariant","useVariant","currentVariant","useInputGroupContext","isDatepickerFilled","setFiller","setFilled","useOnMount","useEffect","handleChange","event","target","type","TimePickerArrowButton","direction","ariaLabel","TimePicker","selectedTime","minuteIncrementForArrowButtons","leftArrowButtonAriaLabel","rightArrowButtonAriaLabel","useTimeFieldState","timeFieldRef","useTimeField","handleOnClickArrowButton","minutes","someSegmentIsUndefined","setTimeToNearestMinuteIncrement","addMinutesToSelectedTime","currentTime","roundedMinute","Math","floor","newTime","set","setValue","add","NativeTimePicker","nativetimepickerId","NativeTimePickerBase","isTimepickerFilled","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");require("react-datepicker/dist/react-datepicker.css");var s=require("@react-aria/datepicker"),f=require("@react-aria/i18n"),m=require("@react-stately/datepicker"),p=require("@internationalized/date");function b(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var v=b(t),h=b(a),g=b(l);function k(){return k=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},k.apply(this,arguments)}function y(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}var _=function(e){var t,a=e.date,n=e.decreaseMonth,r=e.increaseMonth,l=e.prevMonthButtonDisabled,u=e.nextMonthButtonDisabled,c=e.nextMonthAriaLabel,s=e.previousMonthAriaLabel,f=e.locale,m=null!=(t=null==a?void 0:a.getMonth())?t:0;return v.default.createElement("div",{className:"eds-datepicker__calender__header"},v.default.createElement(d.IconButton,{type:"button",className:"eds-datepicker__calender__header__month-button--left",onClick:n,disabled:l,"aria-label":s+" ("+C(m-1,f)+")"},v.default.createElement(o.LeftArrowIcon,null)),v.default.createElement(i.Heading3,{className:"eds-datepicker__calender__header__month-text"},C(m,f)),v.default.createElement(i.Heading3,{className:"eds-datepicker__calender__header__month-text"},null==a?void 0:a.getFullYear()),v.default.createElement(d.IconButton,{type:"button",className:"eds-datepicker__calender__header__month-button--right",onClick:r,disabled:u,"aria-label":c+" ("+C(m+1,f)+")"},v.default.createElement(o.RightArrowIcon,null)))};function C(e,t){var a=(new Date).getFullYear();return new Intl.DateTimeFormat(t.code,{month:"long"}).format(new Date(a,e))}var w=["style","label","inputPlaceholder","prepend","feedback","variant","disabled","calendarButtonTooltipOpen","calendarButtonTooltipClose","hideCalendarButton","disableLabelAnimation","inputRef","calendarButtonId","forwardRef","toggleCalendarGUI","onKeyDownInput","onBlurInput","selectedDate","setFocusToCalendarGUI","setShouldFocusOnCalendarButtonAfterSelect","calendarGUIIsOpen","placeholder","onClick","aria-labelledby"],I=v.default.forwardRef((function(t,a){var n=t.style,r=t.label,l=t.inputPlaceholder,i=t.prepend,s=t.feedback,f=t.variant,m=t.disabled,p=t.calendarButtonTooltipOpen,b=t.calendarButtonTooltipClose,h=t.hideCalendarButton,g=t.disableLabelAnimation,_=t.inputRef,C=t.calendarButtonId,I=t.forwardRef,D=t.toggleCalendarGUI,A=t.onKeyDownInput,B=t.onBlurInput,L=t.selectedDate,E=t.setFocusToCalendarGUI,M=t.setShouldFocusOnCalendarButtonAfterSelect,F=t.calendarGUIIsOpen,T=t.onClick,x=y(t,w);function N(e){A(e)}function O(e){B(e)}v.default.useEffect((function(){var e,t,a;return null==(e=_.current)||e.addEventListener("keydown",N),null==(t=_.current)||t.addEventListener("blur",O),null==(a=_.current)||a.addEventListener("focus",S),function(){var e,t,a;null==(e=_.current)||e.removeEventListener("keydown",N),null==(t=_.current)||t.removeEventListener("blur",O),null==(a=_.current)||a.removeEventListener("focus",S)}}),[_,L]);var R,S=function(){return requestAnimationFrame((function(){var e;return null==(e=_.current)?void 0:e.select()}))};return v.default.createElement(u.TextField,k({style:n,label:r,placeholder:l,prepend:i,feedback:s,variant:f,disableLabelAnimation:g,ref:e.mergeRefs(a,_,I),onClick:function(e){M(!1),T&&T(e)},ariaAlertOnFeedback:!0,append:!h&&v.default.createElement(c.Tooltip,{placement:"top",content:F()?b:p,disableHoverListener:m,disableFocusListener:m},v.default.createElement(d.IconButton,{id:C,type:"button",onClick:function(){D(),E(),M(!0)},tabIndex:F()?-1:0,"aria-label":(F()?b:p)+", "+(L?(null==(R=_.current)?void 0:R.value)+" valgt":"Ingen dato valgt")},v.default.createElement(o.CalendarIcon,null)))},x))})),D=["style","className","selectedDate","label","placeholder","onChange","onKeyDown","dateFormats","minDate","maxDate","inline","disabled","prepend","feedback","variant","validationFeedback","validationVariant","disableLabelAnimation","calendarButtonTooltipOpen","calendarButtonTooltipClose","hideCalendarButton","hideCalendar","hideValidation","weekLabel","chooseDayAriaLabelPrefix","previousMonthAriaLabel","nextMonthAriaLabel","locale","open"];a.registerLocale("nb",r.nb);var A=v.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,f=a.onChange,m=a.onKeyDown,p=void 0===m?function(){return null}:m,b=a.dateFormats,C=void 0===b?["dd.MM.yyyy","ddMMyyyy","dd/MM/yyyy","ddMMyy"]:b,w=a.minDate,A=a.maxDate,B=a.inline,L=void 0!==B&&B,E=a.disabled,M=a.prepend,F=a.feedback,T=void 0===F?"":F,x=a.variant,N=a.validationFeedback,O=void 0===N?"Ugyldig dato":N,R=a.validationVariant,S=void 0===R?"error":R,q=a.disableLabelAnimation,P=void 0!==q&&q,G=a.calendarButtonTooltipOpen,V=void 0===G?"Åpne kalender":G,U=a.calendarButtonTooltipClose,H=void 0===U?"Lukk kalender":U,Y=a.hideCalendarButton,Z=void 0!==Y&&Y,j=a.hideCalendar,K=void 0!==j&&j,z=a.hideValidation,W=void 0!==z&&z,J=a.weekLabel,Q=void 0===J?"uke":J,X=a.chooseDayAriaLabelPrefix,$=void 0===X?"Velg":X,ee=a.previousMonthAriaLabel,te=void 0===ee?"Forrige måned":ee,ae=a.nextMonthAriaLabel,ne=void 0===ae?"Neste måned":ae,re=a.locale,le=void 0===re?r.nb:re,oe=a.open,ie=y(a,D),de=e.useRandomId("eds-datepicker"),ue=t.useRef(null),ce=v.default.useRef(null),se=document.getElementById(de+"-button"),fe=t.useState(!1),me=fe[0],pe=fe[1],be=t.useState(!1),ve=be[0],he=be[1];v.default.useEffect((function(){return ge()}),[d]);var ge=function(){var e;pe(!1);var t=null==(e=ce.current)?void 0:e.value;if(t){var a=C.map((function(e){return n.parse(t,e,new Date,{locale:le})})),r=d&&a.some((function(e){return n.isSameDay(e,d)}));pe(!r)}},ke=function(){return T?{feedback:T,variant:x}:!W&&me?{feedback:O,variant:S}:{feedback:"",variant:void 0}},ye=function(){return requestAnimationFrame((function(){var e;return null==(e=ce.current)?void 0:e.select()}))},_e=function(){var e;return null==(e=ue.current)?void 0:e.setState({inputValue:null})},Ce=function(){var e;return null==(e=ue.current)?void 0:e.setOpen(!we())},we=function(){var e;return null==(e=ue.current)?void 0:e.isCalendarOpen()};return v.default.createElement(v.default.Fragment,null,v.default.createElement(h.default,k({selected:d,minDate:w,maxDate:A,dateFormat:C,showWeekNumbers:!0,weekLabel:Q,onChange:function(e,t){var a;ve&&!Z?(null==se||se.focus(),he(!1)):null==(a=ce.current)||a.focus(),f(e,t)},onClickOutside:function(){return he(!1)},id:de,ariaLabelledBy:de,showPopperArrow:!1,locale:le,inline:L,disabled:E,preventOpenOnFocus:!0,chooseDayAriaLabelPrefix:$,open:!K&&oe,ref:ue,calendarClassName:"eds-datepicker__calender",dayClassName:function(){return"eds-datepicker__calender__day"},weekDayClassName:function(){return"eds-datepicker__calender__day-name"},className:g.default(i,"eds-datepicker__input"),highlightDates:[{"eds-datepicker__calender__day--today":[new Date]},{"eds-datepicker__calender__day--selected":d?[d]:[]}],renderCustomHeader:function(e){return v.default.createElement(_,{date:e.date,changeYear:e.changeYear,changeMonth:e.changeMonth,increaseMonth:e.increaseMonth,decreaseMonth:e.decreaseMonth,prevMonthButtonDisabled:e.prevMonthButtonDisabled,nextMonthButtonDisabled:e.nextMonthButtonDisabled,previousMonthAriaLabel:te,nextMonthAriaLabel:ne,locale:le})},customInput:v.default.createElement(I,{style:o,label:u,inputPlaceholder:s,calendarButtonTooltipOpen:V,calendarButtonTooltipClose:H,prepend:M,feedback:ke().feedback,variant:ke().variant,inputRef:ce,calendarButtonId:de+"-button",forwardRef:l,onKeyDownInput:function(e){pe(!1),"Enter"===e.key?(we()||(ge(),_e()),ye()):"Tab"===e.key&&we()?_e():"Escape"===e.key&&(_e(),ye(),we()&&Ce()),p(e)},onBlurInput:function(){we()||(ge(),_e())},onFocus:void 0,toggleCalendarGUI:Ce,setFocusToCalendarGUI:function(){L||K||we()||(requestAnimationFrame((function(){var e,t,a=(null==(e=ue.current)?void 0:e.calendar.componentNode).querySelector(d?'.eds-datepicker__calender__day[tabindex="0"]':'.eds-datepicker__calender__day[aria-current="date"]');null!==a&&(null==(t=ue.current)||t.setBlur(),a.focus({preventScroll:!0}))})),he(!0),pe(!1))},setShouldFocusOnCalendarButtonAfterSelect:he,calendarGUIIsOpen:we,disableLabelAnimation:P,hideCalendarButton:Z,selectedDate:d})},ie)))})),B=["className","style","label","onChange","feedback","variant","disableLabelAnimation","prepend"],L=["onChange","variant","value"],E=v.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,f=t.prepend,m=void 0===f?v.default.createElement(o.DateIcon,{inline:!0}):f,p=y(t,B),b=e.useRandomId("eds-nativetimepicker");return v.default.createElement(u.BaseFormControl,{style:r,className:n,prepend:m,label:l,feedback:d,variant:c,labelId:b,disableLabelAnimation:s,isFilled:!0},v.default.createElement(M,k({onChange:i,"aria-labelledby":b,ref:a,variant:c},p)))})),M=v.default.forwardRef((function(t,a){var n=t.onChange,r=t.variant,l=t.value,o=y(t,L),i=u.useVariant(),d=r||i,c=u.useInputGroupContext(),s=c.isFilled,f=c.setFilled;return e.useOnMount((function(){f&&!s&&f(!0)})),v.default.useEffect((function(){l?f&&!s&&f(!0):f&&s&&f(!1)}),[l,f,s]),v.default.createElement("input",k({ref:a,"aria-invalid":"error"===d,type:"date",className:"eds-form-control eds-native-date-picker",onChange:function(e){u.isFilled(e.target)?f&&!s&&f(!0):f&&s&&f(!1),n&&n(e)},value:l},o))})),F=function(e){var a=e.segment,n=e.state,r=t.useRef(null),l=s.useDateSegment(a,n,r).segmentProps,o=n.segments.some((function(e){return"AM"===e.text||"PM"===e.text}));return v.default.createElement("div",k({},l,{ref:r,className:g.default("eds-timepicker__segment",{"eds-timepicker__segment--placeholder":a.isPlaceholder})}),o?a.text:a.text.match(/\d+/)?a.text.padStart(2,"0"):a.text)},T=function(e){var t=e.direction,a=e.onClick,n=e.disabled,r=e["aria-label"];return v.default.createElement(d.IconButton,{className:g.default("eds-timepicker__arrowbutton","eds-timepicker__arrowbutton--"+t,{"eds-timepicker__arrowbutton--disabled":n}),type:"button",tabIndex:-1,onClick:a,"aria-label":r,disabled:n},v.default.createElement("left"===t?o.LeftArrowIcon:o.RightArrowIcon,null))},x=["selectedTime","onChange","disabled","className","style","label","labelTooltip","feedback","variant","locale","showTimeZone","minuteIncrementForArrowButtons","leftArrowButtonAriaLabel","rightArrowButtonAriaLabel"],N=v.default.forwardRef((function(a,n){var r=a.selectedTime,l=a.onChange,o=a.disabled,i=a.className,d=a.style,c=a.label,b=a.labelTooltip,h=a.feedback,_=a.variant,C=a.locale,w=a.showTimeZone,I=a.minuteIncrementForArrowButtons,D=void 0===I?30:I,A=a.leftArrowButtonAriaLabel,B=void 0===A?"Trekk fra "+D+" minutter":A,L=a.rightArrowButtonAriaLabel,E=void 0===L?"Legg til "+D+" minutter":L,M=y(a,x),N=f.useLocale().locale;C&&(N=C);var O=m.useTimeFieldState(k({onChange:l,label:c,locale:N,value:null===r?void 0:r,hideTimeZone:!w,isDisabled:o},M)),R=t.useRef(null),S=s.useTimeField(k({},M,{label:c}),O,R),q=S.labelProps,P=S.fieldProps,G=e.useRandomId("timepicker"),V=function(e){U?H():Y(e)},U=O.segments.some((function(e){return"––"===e.text})),H=function(){var e=p.now(p.getLocalTimeZone()),t=Math.floor(e.minute/D)*D,a=e.set({minute:t});l(a)},Y=function(e){var t;O.value&&O.setValue(null==(t=O.value)?void 0:t.add({minutes:e}))};return v.default.createElement(f.I18nProvider,{locale:N},v.default.createElement("div",{className:g.default(i,"eds-timepicker__wrapper")},v.default.createElement(T,{direction:"left",disabled:o,"aria-label":B,onClick:function(){return V(-1*D)}}),v.default.createElement(u.BaseFormControl,k({style:d,className:"eds-timepicker",labelId:G,label:c,labelProps:k({},q),ref:e.mergeRefs(R,n),disabled:o,disableLabelAnimation:!0,labelTooltip:b},P,{variant:_,feedback:h}),O.segments.map((function(e,t){return v.default.createElement(F,{segment:e,state:O,key:t})}))),v.default.createElement(T,{direction:"right",disabled:o,"aria-label":E,onClick:function(){return V(D)}})))})),O=["className","style","onChange","label","feedback","variant","prepend"],R=["onChange","value"],S=v.default.forwardRef((function(t,a){var n=t.className,r=t.style,l=t.onChange,o=t.label,i=t.feedback,d=t.variant,c=t.prepend,s=y(t,O),f=e.useRandomId("eds-native-timepicker");return v.default.createElement(u.BaseFormControl,{style:r,className:g.default(n,"eds-native-timepicker"),prepend:c,label:o,feedback:i,variant:d,labelId:f,disableLabelAnimation:!0},v.default.createElement(q,k({onChange:l,"aria-labelledby":f,ref:a},s)))})),q=v.default.forwardRef((function(t,a){var n=t.onChange,r=t.value,l=y(t,R),o=u.useVariant(),i=l.variant||o,d=u.useInputGroupContext(),c=d.isFilled,s=d.setFilled;return e.useOnMount((function(){s&&!c&&s(!0)})),v.default.useEffect((function(){r?s&&!c&&s(!0):s&&c&&s(!1)}),[r,s,c]),v.default.createElement("input",k({ref:a,"aria-invalid":"error"===i,type:"time",className:"eds-form-control",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=A,exports.NativeDatePicker=E,exports.NativeTimePicker=S,exports.TimePicker=N,exports.nativeDateToTimeValue=function(e,t,a,n){return void 0===t&&(t=!1),a?n?new p.ZonedDateTime(e.getFullYear(),e.getMonth()+1,e.getDate(),a,n,e.getHours(),e.getMinutes(),e.getSeconds()):p.parseAbsolute(e.toISOString(),a):t?new p.Time(e.getHours(),e.getMinutes(),e.getSeconds(),0):new p.CalendarDateTime(e.getFullYear(),e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds())},exports.timeValueToNativeDate=function(e,t){if(!e.day){var a=new Date;return a.setHours(e.hour),a.setMinutes(e.minute),a.setSeconds(e.second),a}return e.timeZone?e.toDate():t?e.toDate(t):new Date(e.year,e.month-1,e.day,e.hour,e.minute,e.second)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@entur/utils"),a=require("react"),t=require("@react-stately/datepicker"),l=require("@react-aria/datepicker"),n=require("@react-aria/i18n"),r=require("classnames"),i=require("@entur/form"),o=require("@internationalized/date"),d=require("@react-aria/calendar"),s=require("@react-stately/calendar"),u=require("@entur/icons"),c=require("@react-aria/button"),f=require("@entur/button"),m=require("@entur/a11y"),p=require("@floating-ui/react-dom"),b=require("react-focus-lock"),v=require("@entur/tokens"),g=require("@entur/modal");function k(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var C=k(a),h=k(r),_=k(b);function w(){return w=Object.assign||function(e){for(var a=1;a<arguments.length;a++){var t=arguments[a];for(var l in t)Object.prototype.hasOwnProperty.call(t,l)&&(e[l]=t[l])}return e},w.apply(this,arguments)}function y(e,a){if(null==e)return{};var t,l,n={},r=Object.keys(e);for(l=0;l<r.length;l++)a.indexOf(t=r[l])>=0||(n[t]=e[t]);return n}var E=function(e){var t=e.segment,n=e.state,r=a.useRef(null),i=l.useDateSegment(t,n,r).segmentProps,o=n.segments.some((function(e){return"AM"===e.text||"PM"===e.text}));return C.default.createElement("div",w({},i,{ref:r,className:h.default("eds-date-and-time-field__segment",{"eds-date-and-time-field__segment--placeholder":t.isPlaceholder,"eds-date-and-time-field__segment--dot-separator":"."===t.text}),tabIndex:n.isDisabled?-1:i.tabIndex}),o?t.text:t.text.match(/\d+/)?t.text.padStart(2,"0"):t.text)},D=function(e){if(void 0===e&&(e="gregory"),"gregory"===e)return new o.GregorianCalendar;throw new Error("Unsupported calendar "+e)},T=function(e,a,t){return"no-no"!==a.toLowerCase()?t["aria-label"]:e},P=["selectedDate","label","locale","showTimeZone","showTime","granularity","disabled","variant","feedback","validationVariant","validationFeedback","labelTooltip","style","className","labelProps","append"],N=C.default.forwardRef((function(r,o){var d=r.selectedDate,s=r.label,u=r.locale,c=r.showTimeZone,f=r.showTime,m=r.granularity,p=void 0===m?"day":m,b=r.disabled,v=r.variant,g=r.feedback,k=r.validationVariant,_=void 0===k?"error":k,T=r.validationFeedback,N=void 0===T?"Ugyldig dato":T,x=r.labelTooltip,F=r.style,I=r.className,S=r.labelProps,A=r.append,O=y(r,P),L=n.useLocale(),R=t.useDateFieldState(w({},O,{locale:null!=u?u:L.locale,createCalendar:D,value:null===d?void 0:d,hideTimeZone:!c,granularity:f?"minute":p})),M=a.useRef(null),q=l.useDateField(w({},O,{label:s,isDisabled:b||O.isDisabled}),R,M),B=q.labelProps,V=q.fieldProps,Z=e.useRandomId("datefield");return C.default.createElement(e.ConditionalWrapper,{condition:void 0!==u,wrapper:function(e){return C.default.createElement(n.I18nProvider,{locale:u},e)}},C.default.createElement(i.BaseFormControl,w({style:F,className:h.default("eds-datefield",I),labelId:Z,ref:e.mergeRefs(M,o),disabled:R.isDisabled,disableLabelAnimation:!0,label:s,labelTooltip:x,labelProps:null!=S?S:B},V,{variant:(null!=v?v:"invalid"===R.validationState)?_:void 0,feedback:(null!=g?g:"invalid"===R.validationState)?N:void 0,append:A,ariaAlertOnFeedback:!0}),R.segments.map((function(e,a){return C.default.createElement(E,{segment:e,state:R,key:a})}))))})),x=["children","className","style"],F=function(e){var t=e.children,l=e.className,n=e.style,r=y(e,x),i=a.useRef(null),o=c.useButton(r,i);return C.default.createElement(f.IconButton,w({},o.buttonProps,{ref:i,className:l,style:n}),t)},I=["state","date","onSelectedCellClick"],S=function(e){var t,l=e.state,n=e.date,r=e.onSelectedCellClick,i=void 0===r?function(){}:r,s=y(e,I),u=a.useRef(null),c=d.useCalendarCell({date:n},l,u),f=c.buttonProps,m=c.isSelected,p=c.isOutsideVisibleRange,b=c.isDisabled,v=c.isUnavailable,g=c.formattedDate;return C.default.createElement("td",w({},c.cellProps,{className:"eds-datepicker__calendar__grid__cell__td"}),C.default.createElement("div",w({},f,{ref:u,hidden:p,className:h.default("eds-datepicker__calendar__grid__cell",{"eds-datepicker__calendar__grid__cell--selected":m,"eds-datepicker__calendar__grid__cell--disabled":b||v,"eds-datepicker__calendar__grid__cell--outside-month":p,"eds-datepicker__calendar__grid__cell--today":o.isEqualDay(n,o.now(null!=(t=l.timeZone)?t:o.getLocalTimeZone()))})},s,{onClick:function(e){f.onClick&&f.onClick(e),m&&i()}}),g))},A=["state","navigationDescription","onSelectedCellClick"],O=function(a){var t=a.state,l=a.navigationDescription,r=a.onSelectedCellClick,i=void 0===r?function(){}:r,s=y(a,A),u=e.useRandomId("eds-calendar"),c=n.useLocale().locale,f=d.useCalendarGrid(s,t),p=f.gridProps,b=f.headerProps,v=f.weekDays,g=o.getWeeksInMonth(t.visibleRange.start,c),k=Array.from(Array(g).keys());return C.default.createElement(C.default.Fragment,null,C.default.createElement("table",w({},p,{cellSpacing:"0",className:"eds-datepicker__calendar__grid"}),C.default.createElement("thead",w({},b),C.default.createElement("tr",null,("no-no"===c.toLowerCase()||"no"===c.toLowerCase()?["ma","ti","on","to","fr","lø","sø"]:"M,T,W,T,F,S,S"===v.toString()?["Mo","Tu","We","Th","Fr","Sa","Su"]:v.map((function(e){return e.toLowerCase()}))).map((function(e,a){return C.default.createElement("th",{key:a},e)})))),C.default.createElement("tbody",null,k.map((function(e){return C.default.createElement("tr",{key:e},t.getDatesInWeek(e).map((function(e,a){return e?C.default.createElement(S,{key:a,state:t,date:e,"aria-describedby":u+"description",onSelectedCellClick:i}):C.default.createElement("td",{key:a})})))})))),C.default.createElement(m.VisuallyHidden,{id:u+"description"},l||(c.toLowerCase().includes("en")?"Use the arrow keys to navigate between dates":"Bruk piltastene til å navigere mellom datoer")))},L=["selectedDate","onChange","locale","style","children","navigationDescription","onSelectedCellClick"],R=C.default.forwardRef((function(a,t){var l=a.onChange,r=a.locale,i=a.style,o=a.navigationDescription,c=a.onSelectedCellClick,f=void 0===c?function(){}:c,m=y(a,L),p=n.useLocale().locale,b=s.useCalendarState(w({},m,{onChange:l,locale:null!=r?r:p,createCalendar:D})),v=d.useCalendar(m,b),g=v.prevButtonProps,k=v.nextButtonProps,h=v.title;return C.default.createElement(e.ConditionalWrapper,{condition:r,wrapper:function(e){return C.default.createElement(n.I18nProvider,{locale:r},e)}},C.default.createElement("div",w({},v.calendarProps,{ref:t,className:"eds-datepicker__calendar",style:i}),C.default.createElement("div",{className:"eds-datepicker__calendar__header"},C.default.createElement(F,w({},g,{"aria-label":T("Forrige måned",p,g)}),C.default.createElement(u.LeftArrowIcon,{size:20})),C.default.createElement("h2",null,h),C.default.createElement(F,w({},k,{"aria-label":T("Neste måned",p,k)}),C.default.createElement(u.RightArrowIcon,{size:20}))),C.default.createElement(O,{state:b,navigationDescription:o,onSelectedCellClick:f})))})),M=["selectedDate","onChange","locale","disabled","showTime","showTimeZone","className","style","variant","feedback","validationVariant","validationFeedback","disableModal","labelTooltip","navigationDescription","minDate","maxDate","modalTreshold"],q=["className","style","label","onChange","feedback","variant","disableLabelAnimation","prepend"],B=["onChange","variant","value"],V=C.default.forwardRef((function(a,t){var l=a.className,n=a.style,r=a.label,o=a.onChange,d=a.feedback,s=a.variant,c=a.disableLabelAnimation,f=a.prepend,m=void 0===f?C.default.createElement(u.DateIcon,{inline:!0}):f,p=y(a,q),b=e.useRandomId("eds-nativetimepicker");return C.default.createElement(i.BaseFormControl,{style:n,className:l,prepend:m,label:r,feedback:d,variant:s,labelId:b,disableLabelAnimation:c,isFilled:!0},C.default.createElement(Z,w({onChange:o,"aria-labelledby":b,ref:t,variant:s},p)))})),Z=C.default.forwardRef((function(a,t){var l=a.onChange,n=a.variant,r=a.value,o=y(a,B),d=i.useVariant(),s=n||d,u=i.useInputGroupContext(),c=u.isFilled,f=u.setFilled;return e.useOnMount((function(){f&&!c&&f(!0)})),C.default.useEffect((function(){r?f&&!c&&f(!0):f&&c&&f(!1)}),[r,f,c]),C.default.createElement("input",w({ref:t,"aria-invalid":"error"===s,type:"date",className:"eds-form-control eds-native-date-picker",onChange:function(e){i.isFilled(e.target)?f&&!c&&f(!0):f&&c&&f(!1),l&&l(e)},value:r},o))})),W=function(e){var a=e.direction,t=e.onClick,l=e.disabled,n=e["aria-label"];return C.default.createElement(f.IconButton,{className:h.default("eds-timepicker__arrowbutton","eds-timepicker__arrowbutton--"+a,{"eds-timepicker__arrowbutton--disabled":l}),type:"button",tabIndex:-1,onClick:t,"aria-label":n,disabled:l},C.default.createElement("left"===a?u.LeftArrowIcon:u.RightArrowIcon,null))},z=["selectedTime","onChange","disabled","className","style","label","labelTooltip","feedback","variant","locale","showTimeZone","minuteIncrementForArrowButtons","leftArrowButtonAriaLabel","rightArrowButtonAriaLabel"],j=C.default.forwardRef((function(r,d){var s=r.selectedTime,u=r.onChange,c=r.disabled,f=r.className,m=r.style,p=r.label,b=r.labelTooltip,v=r.feedback,g=r.variant,k=r.locale,_=r.showTimeZone,D=r.minuteIncrementForArrowButtons,T=void 0===D?30:D,P=r.leftArrowButtonAriaLabel,N=void 0===P?"Trekk fra "+T+" minutter":P,x=r.rightArrowButtonAriaLabel,F=void 0===x?"Legg til "+T+" minutter":x,I=y(r,z),S=n.useLocale().locale;k&&(S=k);var A=t.useTimeFieldState(w({onChange:u,label:p,locale:S,value:null===s?void 0:s,hideTimeZone:!_,isDisabled:c},I)),O=a.useRef(null),L=l.useTimeField(w({},I,{label:p}),A,O),R=L.labelProps,M=L.fieldProps,q=e.useRandomId("timepicker"),B=function(e){V?Z():j(e)},V=A.segments.some((function(e){return"––"===e.text})),Z=function(){var e=o.now(o.getLocalTimeZone()),a=Math.floor(e.minute/T)*T,t=e.set({minute:a});u(t)},j=function(e){var a;A.value&&A.setValue(null==(a=A.value)?void 0:a.add({minutes:e}))};return C.default.createElement(n.I18nProvider,{locale:S},C.default.createElement("div",{className:h.default(f,"eds-timepicker__wrapper")},C.default.createElement(W,{direction:"left",disabled:c,"aria-label":N,onClick:function(){return B(-1*T)}}),C.default.createElement(i.BaseFormControl,w({style:m,className:"eds-timepicker",labelId:q,label:p,labelProps:w({},R),ref:e.mergeRefs(O,d),disabled:c,disableLabelAnimation:!0,labelTooltip:b},M,{variant:g,feedback:v}),A.segments.map((function(e,a){return C.default.createElement(E,{segment:e,state:A,key:a})}))),C.default.createElement(W,{direction:"right",disabled:c,"aria-label":F,onClick:function(){return B(T)}})))})),H=["className","style","onChange","label","feedback","variant","prepend"],U=["onChange","value"],G=C.default.forwardRef((function(a,t){var l=a.className,n=a.style,r=a.onChange,o=a.label,d=a.feedback,s=a.variant,u=a.prepend,c=y(a,H),f=e.useRandomId("eds-native-timepicker");return C.default.createElement(i.BaseFormControl,{style:n,className:h.default(l,"eds-native-timepicker"),prepend:u,label:o,feedback:d,variant:s,labelId:f,disableLabelAnimation:!0},C.default.createElement(Y,w({onChange:r,"aria-labelledby":f,ref:t},c)))})),Y=C.default.forwardRef((function(a,t){var l=a.onChange,n=a.value,r=y(a,U),o=i.useVariant(),d=r.variant||o,s=i.useInputGroupContext(),u=s.isFilled,c=s.setFilled;return e.useOnMount((function(){c&&!u&&c(!0)})),C.default.useEffect((function(){n?c&&!u&&c(!0):c&&u&&c(!1)}),[n,c,u]),C.default.createElement("input",w({ref:t,"aria-invalid":"error"===d,type:"time",className:"eds-form-control",onChange:function(e){i.isFilled(e.target)?c&&!u&&c(!0):c&&u&&c(!1),l&&l(e)},value:n},r))}));e.warnAboutMissingStyles("datepicker","form","icons"),exports.Calendar=R,exports.DateField=N,exports.DatePicker=function(r){var i=r.selectedDate,o=r.onChange,d=r.locale,s=r.disabled,c=r.showTime,f=r.showTimeZone,m=void 0!==f&&f,b=r.className,k=r.variant,E=r.feedback,D=r.validationVariant,T=r.validationFeedback,P=r.disableModal,x=void 0!==P&&P,I=r.labelTooltip,S=r.navigationDescription,A=r.minDate,O=r.maxDate,L=r.modalTreshold,q=void 0===L?1e3:L,B=y(r,M),V=q,Z=a.useRef(null),W=a.useRef(null),z=a.useRef(null),j=e.useWindowDimensions().width,H=t.useDatePickerState(w({},B,{minValue:A,maxValue:O,value:i,onChange:o})),U=l.useDatePicker(w({isDisabled:s,minValue:A,maxValue:O,autoFocus:!0},B),H,Z),G=U.groupProps,Y=U.labelProps,J=U.fieldProps,K=U.buttonProps,Q=U.dialogProps,X=U.calendarProps,$=p.useFloating({whileElementsMounted:p.autoUpdate,placement:"bottom-start",middleware:[p.offset(v.space.extraSmall),p.flip(),p.shift({padding:v.space.extraSmall})]}),ee=$.x,ae=$.y,te=$.reference,le=$.floating,ne=$.strategy;e.useOnClickOutside([W],(function(){H.setOpen(!1)})),e.useOnEscape(W,(function(){H.setOpen(!1)}));var re=w({},Q,X,{disabled:X.isDisabled,navigationDescription:S,onSelectedCellClick:function(){return H.setOpen(!1)},onChange:function(e){requestAnimationFrame((function(){X.onChange&&X.onChange(e)}))}}),ie=j<=V&&!x,oe=C.default.createElement("div",{style:{position:ne,top:null!=ae?ae:0,left:null!=ee?ee:0,zIndex:v.zIndexes.popover},ref:function(e){le(e)}},C.default.createElement(_.default,{disabled:!H.isOpen||ie,returnFocus:!0},H.isOpen&&C.default.createElement(R,w({},re,{ref:W})))),de=C.default.createElement(g.Modal,{size:"small",title:"",open:H.isOpen,onDismiss:function(){return H.setOpen(!1)},closeOnClickOutside:!0,className:"eds-datepicker__calendar-modal"},C.default.createElement(R,w({},re)));return C.default.createElement(e.ConditionalWrapper,{condition:void 0!==d,wrapper:function(e){return C.default.createElement(n.I18nProvider,{locale:d},e)}},C.default.createElement("div",{className:h.default("eds-datepicker",b)},C.default.createElement("div",w({},G,{ref:function(e){Z.current=e,te(e)},id:void 0,className:"eds-datepicker__datefield__wrapper"}),C.default.createElement(N,w({},J,{selectedDate:H.value,label:B.label,labelProps:Y,showTime:c,showTimeZone:m,ref:z,variant:k,feedback:E,validationVariant:D,validationFeedback:T,labelTooltip:I,className:h.default("eds-datepicker__datefield",{"eds-datepicker__datefield--disabled":J.isDisabled})})),!J.isDisabled&&C.default.createElement(F,w({},K,{onPress:function(){return H.setOpen(!H.isOpen)},className:"eds-datepicker__open-calendar-button"}),C.default.createElement(u.CalendarIcon,null)),ie?de:oe)))},exports.NativeDatePicker=V,exports.NativeTimePicker=G,exports.TimePicker=j,exports.ariaLabelIfNorwegian=T,exports.createCalendar=D,exports.nativeDateToTimeOrDateValue=function(e,a,t,l,n){return void 0===a&&(a=!1),void 0===t&&(t=!1),l?n?new o.ZonedDateTime(e.getFullYear(),e.getMonth()+1,e.getDate(),l,n,e.getHours(),e.getMinutes(),e.getSeconds()):o.parseAbsolute(e.toISOString(),l):a?new o.Time(e.getHours(),e.getMinutes(),e.getSeconds(),0):t?new o.CalendarDate(e.getFullYear(),e.getMonth()+1,e.getDate()):new o.CalendarDateTime(e.getFullYear(),e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds())},exports.timeOrDateValueToNativeDate=function(e,a){if(!e.day){var t=new Date;return t.setHours(e.hour),t.setMinutes(e.minute),t.setSeconds(e.second),t}return e.hour?e.timeZone?e.toDate():a?e.toDate(a):new Date(e.year,e.month-1,e.day,e.hour,e.minute,e.second):e.toDate(null!=a?a:o.getLocalTimeZone())};
2
2
  //# sourceMappingURL=datepicker.cjs.production.min.js.map