@entur/datepicker 11.4.3 → 11.4.4

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.
@@ -197,6 +197,16 @@ function getAdjustedMaxDate(maxDate) {
197
197
  if (maxDate !== void 0) return lastMillisecondOfDay(maxDate);
198
198
  return void 0;
199
199
  }
200
+ function shouldUseAriaAlert(variant) {
201
+ if (!variant) return false;
202
+ if (variant === "negative" || variant === "error") {
203
+ return "alert";
204
+ }
205
+ if (variant === "warning") {
206
+ return "status";
207
+ }
208
+ return false;
209
+ }
200
210
  const DateField = ({
201
211
  selectedDate,
202
212
  onChange,
@@ -259,7 +269,9 @@ const DateField = ({
259
269
  form.BaseFormControl,
260
270
  {
261
271
  append,
262
- ariaAlertOnFeedback: true,
272
+ ariaAlertOnFeedback: shouldUseAriaAlert(
273
+ variant ?? (state.isInvalid ? validationVariant : void 0)
274
+ ),
263
275
  className: classNames("eds-datefield", className, {
264
276
  "eds-datefield--has-tooltip": labelTooltip !== void 0
265
277
  }),
@@ -930,7 +942,7 @@ const TimePicker = ({
930
942
  }
931
943
  )
932
944
  ] }),
933
- ariaAlertOnFeedback: true,
945
+ ariaAlertOnFeedback: shouldUseAriaAlert(variant),
934
946
  "aria-describedby": timePickerId + "description",
935
947
  className: classNames("eds-timepicker", className, {
936
948
  "eds-timepicker--disabled": disabled,
@@ -1268,5 +1280,6 @@ exports.lastMillisecondOfDay = lastMillisecondOfDay;
1268
1280
  exports.modulo = modulo;
1269
1281
  exports.nativeDateToDateValue = nativeDateToDateValue;
1270
1282
  exports.nativeDateToTimeValue = nativeDateToTimeValue;
1283
+ exports.shouldUseAriaAlert = shouldUseAriaAlert;
1271
1284
  exports.timeOrDateValueToNativeDate = timeOrDateValueToNativeDate;
1272
1285
  //# sourceMappingURL=datepicker.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"datepicker.cjs.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/DatePicker/NativeDatePicker.tsx","../src/TimePicker/TimePickerArrowButton.tsx","../src/TimePicker/TimePicker.tsx","../src/TimePicker/NativeTimePicker.tsx","../src/TimePicker/SimpleTimePicker.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 'aria-describedby'?: string;\n};\n\nexport const FieldSegment = ({ segment, state, ...rest }: TimeSegmentProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { segmentProps } = useDateSegment(segment, state, ref);\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':\n segment.text === '.' || segment.text === ':',\n })}\n tabIndex={state.isDisabled ? -1 : segmentProps.tabIndex}\n {...rest}\n >\n {segment.text}\n </div>\n );\n};\n","import {\n ZonedDateTime,\n CalendarDateTime,\n Time,\n parseAbsolute,\n DateValue,\n getLocalTimeZone,\n CalendarDate,\n toCalendarDateTime,\n toCalendarDate,\n toZoned,\n toTime,\n today,\n now,\n startOfWeek,\n startOfYear,\n} from '@internationalized/date';\nimport { MappedDateValue, TimeValue } from '@react-types/datepicker';\nimport { Calendar, GregorianCalendar } from '@internationalized/date';\n\nconst nativeDateToDateTime = (\n date: Date,\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 date.getMilliseconds(),\n );\n }\n return parseAbsolute(date.toISOString(), timeZone);\n }\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 date.getMilliseconds(),\n );\n};\n\n/**\n * Tar inn et JS Date-objekt og returnerer et av DateValue-objektene fra @internationalized/date-pakken\n * @param {Date | null} date JS Date-objekt som ønskes konvertert til et DateValue-objekt\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 {CalendarDateTime | ZonedDateTime | CalendarDate | null} et av DateValue-objektene med verdier fra date eller null\n */\nexport function nativeDateToDateValue(\n date: Date | null,\n noTimeOnlyDate = false,\n timeZone?: string,\n offset?: number,\n) {\n if (date === null) return null;\n\n if (noTimeOnlyDate)\n return new CalendarDate(\n date.getFullYear(),\n date.getMonth() + 1,\n date.getDate(),\n );\n\n return nativeDateToDateTime(date, timeZone, offset);\n}\n\n/**\n * Tar inn et JS Date-objekt og returnerer et av TimeValue-objektene fra @internationalized/date-pakken\n * @param {Date | null} 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 | null} et av TimeValue-objektene med verdier fra date eller null\n */\nexport function nativeDateToTimeValue(\n date: Date | null,\n noDateOnlyTime = false,\n timeZone?: string,\n offset?: number,\n) {\n if (date === null) return null;\n\n if (noDateOnlyTime)\n return new Time(\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds(),\n );\n\n return nativeDateToDateTime(date, timeZone, offset);\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 | null} 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 | null} et Date-objekt med verdier fra time eller null\n */\nexport function timeOrDateValueToNativeDate(\n value: TimeValue | DateValue | null,\n timeZoneForCalendarDateTime?: string,\n) {\n if (value === null) return null;\n\n // type is Time\n if (!('day' in value)) {\n const date = new Date();\n date.setHours(value.hour);\n date.setMinutes(value.minute);\n date.setSeconds(value.second);\n date.setMilliseconds(value.millisecond);\n return date;\n }\n\n // type is CalendarDate\n if (!('hour' in value)) {\n return value.toDate(timeZoneForCalendarDateTime ?? getLocalTimeZone());\n }\n\n // type is CalendarDateTime\n if (!('timeZone' in value)) {\n if (timeZoneForCalendarDateTime)\n return value.toDate(timeZoneForCalendarDateTime);\n\n return value.toDate(getLocalTimeZone());\n }\n\n // type is ZonedDateTime\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\nexport const lastMillisecondOfDay = (dateValue: DateValue) =>\n toCalendarDateTime(dateValue.add({ days: 1 })).add({\n milliseconds: -1,\n });\n\nexport const convertValueToType = ({\n value,\n type,\n timezone = 'Europe/Oslo',\n}: {\n value: DateValue | TimeValue | null;\n type: 'CalendarDate' | 'CalendarDateTime' | 'ZonedDateTime' | 'Time';\n timezone?: string;\n}) => {\n if (value === null) return null;\n switch (type) {\n case 'CalendarDate':\n if (!('day' in value)) return today(timezone);\n return toCalendarDate(value);\n\n case 'CalendarDateTime':\n if (!('day' in value)) return toCalendarDateTime(today(timezone), value);\n return toCalendarDateTime(value);\n\n case 'ZonedDateTime':\n if (!('day' in value))\n return toZoned(toCalendarDateTime(today(timezone), value), timezone);\n return toZoned(value, timezone);\n\n case 'Time':\n if (!('hour' in value)) return toTime(now(timezone));\n if (!('day' in value)) return value;\n return toTime(value);\n\n default:\n return value;\n }\n};\n\nexport const modulo = (a: number, b: number) => ((a % b) + b) % b;\n\nexport const focusSegment = (\n ref: React.RefObject<HTMLDivElement>,\n segment: 'first' | 'last',\n) => {\n if (ref.current) {\n const segments = ref.current.querySelectorAll(\n '.eds-date-and-time-field__segment',\n );\n const firstSegment = segments[0] as HTMLElement;\n const lastSegment = segments[segments.length - 1] as HTMLElement;\n switch (segment) {\n case 'first':\n return firstSegment.focus();\n case 'last':\n return lastSegment.focus();\n }\n }\n};\n\n/** Based on code from https://stackoverflow.com/questions/6117814/get-week-of-year-in-javascript-like-in-php */\nexport function getWeekNumberForDate(date: DateValue | null) {\n if (date === null) return -1;\n const calendarDate = convertValueToType({\n value: date,\n type: 'CalendarDate',\n }) as CalendarDate;\n const firstDayOfWeek = startOfWeek(calendarDate, 'no-NO');\n const thursdayOfWeek = firstDayOfWeek.add({ days: 3 });\n const firstDayOfYearForThursday = startOfYear(thursdayOfWeek);\n const weekNumber = Math.ceil(\n (thursdayOfWeek.compare(firstDayOfYearForThursday) + 1) / 7,\n );\n return weekNumber;\n}\n\nexport type ForcedReturnType =\n | 'CalendarDate'\n | 'CalendarDateTime'\n | 'ZonedDateTime'\n | undefined;\n\nexport function handleOnChange<DateType extends DateValue>({\n value,\n selectedDate,\n forcedReturnType,\n onChange,\n}: {\n value: MappedDateValue<DateType> | null;\n selectedDate: DateType | null;\n forcedReturnType: ForcedReturnType;\n onChange?:\n | ((value: MappedDateValue<DateType> | null) => void)\n | ((value: DateValue | null) => void);\n}) {\n if (forcedReturnType !== undefined || !selectedDate) {\n return onChange?.(\n convertValueToType({\n value,\n type: forcedReturnType ?? 'ZonedDateTime',\n timezone:\n value !== null && 'timezone' in value\n ? (value.timezone as string)\n : undefined,\n }) as MappedDateValue<typeof forcedReturnType> | null,\n );\n }\n\n onChange?.(value);\n}\n\n// this weird logic makes sure the entire day is included if no time is provided in maxDate\nexport function getAdjustedMaxDate(maxDate?: DateValue) {\n if ('hour' in (maxDate ?? {})) return maxDate;\n if (maxDate !== undefined) return lastMillisecondOfDay(maxDate);\n return undefined;\n}\n","import React, { ReactNode, useEffect, useRef } from 'react';\n\nimport {\n DateFieldStateOptions,\n useDateFieldState,\n} 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 DateValue,\n AriaDatePickerProps,\n MappedDateValue,\n Granularity,\n} from '@react-types/datepicker';\n\nimport { BaseFormControl, BaseFormControlProps } from '@entur/form';\nimport {\n ConditionalWrapper,\n mergeRefs,\n useRandomId,\n VariantType,\n} from '@entur/utils';\n\nimport { FieldSegment } from '../shared/FieldSegment';\nimport {\n createCalendar,\n ForcedReturnType,\n handleOnChange,\n getAdjustedMaxDate,\n} from '../shared/utils';\n\nimport './DateField.scss';\n\n/** @deprecated use variant=\"information\" instead */\nconst info = 'info';\n/** @deprecated use variant=\"negative\" instead */\nconst error = 'error';\n\nexport type ExtendedDateFieldProps<DateType extends DateValue> = Omit<\n AriaDatePickerProps<DateType>,\n | keyof BaseDateFieldProps<DateType>\n | 'value'\n | 'hideTimeZone'\n | 'placeholder'\n | 'placeholderValue'\n | 'defaultValue'\n | 'minValue'\n | 'maxValue'\n> &\n Partial<\n Omit<\n BaseFormControlProps,\n | keyof BaseDateFieldProps<DateType>\n | 'children'\n | 'defaultValue'\n | 'value'\n | 'isFilled'\n | 'size'\n >\n >;\n\nexport type BaseDateFieldProps<DateType extends DateValue> = {\n /** Den valgte tiden. Tid i '@internationalized/date'-pakkens format */\n selectedDate: DateType | null;\n /** Kalles når dato endres. Tid i '@internationalized/date'-pakkens format */\n onChange?: (value: MappedDateValue<DateType> | null) => void;\n /** Ledetekst til DateField */\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 /** Brukes for å vise tid i datovelgeren. Velg minste enhet som skal vises.\n * Hvis du vil vise tid vil \"minute\" vise minutt og ikke sekund, mens \"second\" viser\n * sekunder også.\n * @default \"day\"\n */\n granularity?: Granularity;\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 *\n * OBS: Hvis du bruker dato med tid vil tidspunktet også tas hensyn til.\n * Gyldig fra og med den tiden som legges inn som minDate.\n * Dato uten tid vil være gyldig hele minDate-dagen */\n minDate?: DateValue;\n /** Seneste gyldige datovalg.\n * Eks: today(getLocalTimeZone()).add({days: 1}) == i morgen i lokal tidssone\n *\n * OBS: Hvis du bruker dato med tid vil tidspunktet også tas hensyn til.\n * Gyldig til og med den tiden som legges inn som maxDate.\n * Dato uten tid vil være gyldig hele maxDate-dagen */\n maxDate?: DateValue;\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 /** Tvinger typen på onChange til den gitte typen.\n * Dette er nyttig når utgangsverdien din er 'null', men du ønsker at\n * DatePicker alltid skal returnere f.eks ZonedDateTime.\n *\n * Som standard returnerer onChange DateValue basert på selectedDate,\n * eller CalendarDate hvis selectedDate er 'null'.\n *\n * @default undefined\n */\n forcedReturnType?: ForcedReturnType;\n /** Varselmelding, som vil komme under TimePicker */\n feedback?: string;\n /** Valideringsvariant*/\n variant?: VariantType | typeof error | typeof info;\n /** Varselmelding som forteller om ugyldig dato\n * @default \"Ugyldig dato\"\n */\n validationFeedback?: string;\n /** Valideringsvariant for melding om ugyldig dato\n * @default \"negative\"\n */\n validationVariant?: VariantType | typeof error | typeof info;\n /** Callback-funksjon for når valideringen til datovelgeren endrer seg */\n onValidate?: (isValid?: boolean) => void;\n labelTooltip?: React.ReactNode;\n labelProps?: React.DOMAttributes<Element>;\n fieldProps?: DateFieldProps<DateType>;\n dateFieldRef?: React.Ref<HTMLDivElement>;\n disabled?: boolean;\n readOnly?: boolean;\n /** Ekstra klassenavn */\n className?: string;\n style?: React.CSSProperties;\n};\n\nexport type DateFieldProps<DateType extends DateValue> =\n BaseDateFieldProps<DateType> & ExtendedDateFieldProps<DateType>;\n\nexport const DateField = <DateType extends DateValue>({\n selectedDate,\n onChange,\n label,\n locale: customLocale,\n showTimeZone,\n showTime,\n granularity = showTime ? 'minute' : 'day',\n disabled,\n readOnly,\n isDisabled,\n variant,\n feedback,\n validationVariant = 'negative',\n validationFeedback = 'Ugyldig dato',\n labelTooltip,\n minDate,\n maxDate,\n forcedReturnType,\n style,\n className,\n labelProps: parentLabelProps,\n append,\n prepend,\n onValidate,\n dateFieldRef: ref,\n ...rest\n}: DateFieldProps<DateType>) => {\n const { locale } = useLocale();\n\n const _props: DateFieldStateOptions<DateType> = {\n ...rest,\n label,\n locale: customLocale ?? locale,\n createCalendar,\n value: selectedDate,\n onChange: value =>\n handleOnChange<DateType>({\n value,\n selectedDate,\n forcedReturnType,\n onChange,\n }),\n hideTimeZone: !showTimeZone,\n granularity,\n minValue: minDate,\n maxValue: getAdjustedMaxDate(maxDate),\n isDisabled: isDisabled || disabled || readOnly,\n shouldForceLeadingZeros: true,\n };\n\n const state = useDateFieldState(_props);\n\n const dateFieldRef = useRef(null);\n const { labelProps, fieldProps } = useDateField(_props, state, dateFieldRef);\n\n useEffect(() => onValidate?.(!state.isInvalid), [state.isInvalid]);\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 append={append}\n ariaAlertOnFeedback\n className={classNames('eds-datefield', className, {\n 'eds-datefield--has-tooltip': labelTooltip !== undefined,\n })}\n disabled={isDisabled || disabled}\n readOnly={readOnly}\n disableLabelAnimation\n feedback={\n feedback ??\n (state.validationState === 'invalid' ? validationFeedback : undefined)\n }\n label={label}\n labelId={id}\n labelProps={parentLabelProps ?? labelProps}\n labelTooltip={labelTooltip}\n prepend={prepend}\n ref={mergeRefs(ref, dateFieldRef)}\n style={style}\n variant={variant ?? (state.isInvalid ? validationVariant : undefined)}\n {...fieldProps}\n >\n {state.segments.map((segment, i) => (\n <FieldSegment segment={segment} state={state} key={i} />\n ))}\n </BaseFormControl>\n </ConditionalWrapper>\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 weekNumberString: string;\n showOutsideMonth?: boolean;\n onSelectedCellClick?: () => void;\n onCellClick?: () => void;\n classNameForDate?: (date: CalendarDate) => string;\n ariaLabelForDate?: (date: CalendarDate) => string;\n};\n\nexport const CalendarCell = ({\n state,\n date,\n showOutsideMonth = false,\n onSelectedCellClick = () => {\n return;\n },\n onCellClick = () => {\n return;\n },\n weekNumberString,\n classNameForDate,\n ariaLabelForDate,\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\n const ariaLabel = `${buttonProps['aria-label']}${weekNumberString} ${\n ariaLabelForDate?.(date) ?? ''\n }`;\n\n const cellCanBeSelected = showOutsideMonth\n ? !(isDisabled || isUnavailable)\n : !(isOutsideVisibleRange || isDisabled || isUnavailable);\n\n const shouldHideDate = !showOutsideMonth && isOutsideVisibleRange;\n\n // Override button props when showOutsideMonth is true and date is outside visible range\n const extendedButtonProps = {\n ...buttonProps,\n ...(showOutsideMonth &&\n isOutsideVisibleRange && {\n onClick: () => {\n state.selectDate(date);\n onCellClick();\n },\n onKeyUp: (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n state.selectDate(date);\n onCellClick();\n }\n },\n }),\n };\n\n return (\n <td {...cellProps} className=\"eds-datepicker__calendar__grid__cell__td\">\n <div\n {...extendedButtonProps}\n aria-label={ariaLabel}\n aria-hidden={shouldHideDate}\n ref={cellRef}\n hidden={shouldHideDate}\n className={classNames('eds-datepicker__calendar__grid__cell', {\n [classNameForDate?.(date) ?? '']: !shouldHideDate,\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 && !showOutsideMonth,\n 'eds-datepicker__calendar__grid__cell--outside-month--visible':\n isOutsideVisibleRange && showOutsideMonth,\n 'eds-datepicker__calendar__grid__cell--today': isEqualDay(\n date,\n now(state.timeZone ?? getLocalTimeZone()),\n ),\n })}\n {...rest}\n onClick={e => {\n extendedButtonProps?.onClick?.(e);\n // Used to force close calendar on select\n isSelected && onSelectedCellClick();\n cellCanBeSelected && onCellClick();\n }}\n onKeyUp={e => {\n extendedButtonProps?.onKeyUp?.(e);\n if (e.key === 'Enter') {\n // Used to force close calendar on select\n isSelected && onSelectedCellClick();\n cellCanBeSelected && onCellClick();\n }\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, CalendarDate } from '@internationalized/date';\n\nimport { useRandomId } from '@entur/utils';\nimport { VisuallyHidden } from '@entur/a11y';\n\nimport { getWeekNumberForDate } from '../shared/utils';\nimport { CalendarCell } from './CalendarCell';\n\ntype CalendarGridProps = {\n state: CalendarState;\n navigationDescription?: string;\n showWeekNumbers: boolean;\n weekNumberHeader: string;\n showOutsideMonth?: boolean;\n onSelectedCellClick?: () => void;\n onCellClick?: () => void;\n classNameForDate?: (date: CalendarDate) => string;\n ariaLabelForDate?: (date: CalendarDate) => string;\n};\n\nexport const CalendarGrid = ({\n state,\n navigationDescription,\n onSelectedCellClick = () => {\n return;\n },\n onCellClick = () => {\n return;\n },\n showWeekNumbers,\n weekNumberHeader,\n showOutsideMonth = false,\n classNameForDate,\n ariaLabelForDate,\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().includes('no'))\n return ['ma', 'ti', 'on', 'to', 'fr', 'lø', 'sø'];\n if (locale.toLowerCase().includes('en')) {\n if (weekDays[0] === 'M')\n return ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];\n if (weekDays[0] === 'S')\n return ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n }\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 {showWeekNumbers && (\n <th className=\"eds-datepicker__calendar__grid__weeknumber-header\">\n {weekNumberHeader}\n </th>\n )}\n {weekDaysMapped().map(day => (\n <th key={day}>{day}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {weeksArray.map(weekIndex => {\n const weekNumber = getWeekNumberForDate(\n state.getDatesInWeek(weekIndex)[0],\n );\n return (\n <tr key={weekIndex}>\n {showWeekNumbers && (\n <th\n aria-label={`${weekNumberHeader} ${weekNumber}`}\n className=\"eds-datepicker__calendar__grid__weeknumber\"\n >\n {weekNumber}\n </th>\n )}\n {state\n .getDatesInWeek(weekIndex)\n .map((date, i) =>\n date ? (\n <CalendarCell\n key={`${date.month}.${date.day}`}\n state={state}\n date={date}\n aria-describedby={calendarGridId + 'description'}\n weekNumberString={\n showWeekNumbers\n ? `, ${weekNumberHeader} ${weekNumber},`\n : ''\n }\n onSelectedCellClick={onSelectedCellClick}\n onCellClick={onCellClick}\n classNameForDate={classNameForDate}\n ariaLabelForDate={ariaLabelForDate}\n showOutsideMonth={showOutsideMonth}\n />\n ) : (\n <td key={i} />\n ),\n )}\n </tr>\n );\n })}\n </tbody>\n </table>\n <VisuallyHidden id={calendarGridId + 'description'}>\n {getNavigationDescription()}\n </VisuallyHidden>\n </>\n );\n};\n","import React, { useEffect } from 'react';\n\nimport classNames from 'classnames';\nimport { I18nProvider, useLocale } from '@react-aria/i18n';\nimport { AriaCalendarProps, useCalendar } from '@react-aria/calendar';\nimport {\n CalendarStateOptions,\n useCalendarState,\n} from '@react-stately/calendar';\nimport { CalendarDate, DateValue } from '@internationalized/date';\nimport { MappedDateValue } from '@react-types/datepicker';\n\nimport { LeftArrowIcon, RightArrowIcon } from '@entur/icons';\n\nimport {\n ariaLabelIfNorwegian,\n createCalendar,\n handleOnChange,\n getAdjustedMaxDate,\n} from '../shared/utils';\nimport { CalendarButton } from '../shared/CalendarButton';\nimport { CalendarGrid } from './CalendarGrid';\nimport { DateFieldProps } from './DateField';\n\nimport './Calendar.scss';\n\ntype ExtendedCalendarProps<DateType extends DateValue> = Omit<\n AriaCalendarProps<DateType>,\n | keyof BaseCalendarProps<DateType>\n | 'value'\n | 'label'\n | 'hideTimeZone'\n | 'placeholder'\n | 'placeholderValue'\n | 'defaultValue'\n | 'minValue'\n | 'maxValue'\n>;\n\ntype BaseCalendarProps<DateType extends DateValue> = {\n selectedDate: DateType | null;\n onChange?: (selectedDate: MappedDateValue<DateType> | null) => void;\n navigationDescription?: string;\n style?: React.CSSProperties;\n /** Ekstra klassenavn */\n className?: string;\n onSelectedCellClick?: () => void;\n onCellClick?: () => void;\n /** Tidligste gyldige datovalg.\n * Eks: today(getLocalTimeZone()) == i dag i lokal tidssone.\n *\n * OBS: Hvis du bruker dato med tid vil tidspunktet også tas hensyn til.\n * Gyldig fra og med den tiden som legges inn som minDate.\n * Dato uten tid vil være gyldig hele minDate-dagen */\n minDate?: DateValue;\n /** Seneste gyldige datovalg.\n * Eks: today(getLocalTimeZone()).add({days: 1}) == i morgen i lokal tidssone\n *\n * OBS: Hvis du bruker dato med tid vil tidspunktet også tas hensyn til.\n * Gyldig til og med den tiden som legges inn som maxDate.\n * Dato uten tid vil være gyldig hele maxDate-dagen */\n maxDate?: DateValue;\n /** Slå på visning av ukenummere i kalenderen. Overskriften for ukenummer-kolonnen\n * kan endres med prop-en 'weekNumberHeader'\n * @default false */\n showWeekNumbers?: boolean;\n /** Overskrift som vises for ukenummer-kolonnen. Vises kun hvis 'showWeekNumbers' er true.\n * @default 'uke' */\n weekNumberHeader?: string;\n /** Vis datoer som ligger utenfor den viste måneden.\n * @example Hvis uken starter på onsdag vises de to siste datoene i forrige måned i ruten til mandagen og tirsdagen før.\n * @default false */\n showOutsideMonth?: boolean;\n /** Brukes for å legge til klassenavn på spesifikke datoer i kalenderen.\n * Tar inn en dato og skal returnere klassenavnet som skal legges til den datoen.\n * @default undefined\n * @example (date) => isWeekend(date, 'no-NO') ? 'weekend' : ''\n *\n * OBS: hvis stylingen er meningsbærende bør du bruke ariaLabelForDate i tillegg for å beskrive\n * meningen til skjermlesere o.l.\n */\n classNameForDate?: (date: CalendarDate) => string;\n /** Legger til teksten som returneres på datoen i kalenderen sin aria-label.\n * Bør brukes sammen med classNameForDate hvis styling-endringene gjort der er meningsbærende.\n * @default undefined\n * @example (date) => isWeekend(date, 'no-NO') ? 'helgedag' : ''\n */\n ariaLabelForDate?: (date: CalendarDate) => string;\n /** Callback-funksjon for når valideringen til datovelgeren endrer seg */\n onValidate?: (isValid?: boolean) => void;\n disabled?: boolean;\n locale?: string;\n calendarRef?: React.MutableRefObject<HTMLDivElement | null>;\n forcedReturnType?: DateFieldProps<DateType>['forcedReturnType'];\n};\n\nexport type CalendarProps<DateType extends DateValue> =\n BaseCalendarProps<DateType> & ExtendedCalendarProps<DateType>;\n\nexport const Calendar = <DateType extends DateValue>({\n locale: localOverride,\n ...rest\n}: CalendarProps<DateType>) => {\n const props = { isDisabled: rest.disabled, ...rest };\n const { locale } = useLocale();\n return (\n <I18nProvider locale={localOverride ?? locale}>\n <CalendarBase {...props} />\n </I18nProvider>\n );\n};\n\nconst CalendarBase = <DateType extends DateValue>({\n selectedDate,\n onChange,\n minDate,\n maxDate,\n showWeekNumbers = false,\n weekNumberHeader = 'uke',\n showOutsideMonth = false,\n forcedReturnType,\n style,\n className,\n navigationDescription,\n onSelectedCellClick = () => {\n return;\n },\n onCellClick = () => {\n return;\n },\n classNameForDate,\n ariaLabelForDate,\n calendarRef,\n ...rest\n}: CalendarProps<DateType>) => {\n const { locale } = useLocale();\n\n const _props: CalendarStateOptions<DateType> = {\n ...rest,\n value: selectedDate,\n onChange: value =>\n handleOnChange<DateType>({\n value,\n selectedDate,\n forcedReturnType,\n onChange,\n }),\n locale,\n createCalendar,\n minValue: minDate,\n maxValue: getAdjustedMaxDate(maxDate),\n };\n\n const state = useCalendarState(_props);\n const { calendarProps, prevButtonProps, nextButtonProps, title } =\n useCalendar(_props, state);\n\n useEffect(\n () => rest.onValidate?.(!state.isValueInvalid),\n [state.isValueInvalid],\n );\n\n return (\n <div\n {...calendarProps}\n ref={calendarRef}\n className={classNames('eds-datepicker__calendar', className)}\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 {...rest}\n state={state}\n navigationDescription={navigationDescription}\n onSelectedCellClick={onSelectedCellClick}\n onCellClick={onCellClick}\n classNameForDate={classNameForDate}\n ariaLabelForDate={ariaLabelForDate}\n showWeekNumbers={showWeekNumbers}\n weekNumberHeader={weekNumberHeader}\n showOutsideMonth={showOutsideMonth}\n />\n </div>\n );\n};\n","import React, { ReactNode, useRef } from 'react';\n\nimport {\n DatePickerStateOptions,\n useDatePickerState,\n} 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 { CalendarDate, DateValue } from '@internationalized/date';\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 {\n BaseDateFieldProps,\n DateField,\n ExtendedDateFieldProps,\n} from './DateField';\nimport { Calendar, CalendarProps } from './Calendar';\nimport { CalendarButton } from '../shared/CalendarButton';\nimport { getAdjustedMaxDate, handleOnChange } from '../shared/utils';\n\nimport './DatePicker.scss';\n\ntype BaseDatePickerProps = {\n /** Slå på visning av ukenummere i kalenderen. Overskriften for ukenummer-kolonnen\n * kan endres med prop-en 'weekNumberHeader'\n * @default false */\n showWeekNumbers?: boolean;\n /** Overskrift som vises for ukenummer-kolonnen. Vises kun hvis 'showWeekNumbers' er true.\n * @default '#' */\n weekNumberHeader?: string;\n /** Vis datoer som ligger utenfor den viste måneden.\n * @example Hvis uken starter på onsdag vises de to siste datoene i forrige måned i ruten til mandagen og tirsdagen før.\n * @default false */\n showOutsideMonth?: 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 /** Brukes for å legge til klassenavn på spesifikke datoer i kalenderen.\n * Tar inn en dato og skal returnere klassenavnet som skal legges til den datoen.\n * @default undefined\n * @example (date) => isWeekend(date, 'no-NO') ? 'weekend' : ''\n *\n * OBS: hvis stylingen er meningsbærende bør du bruke ariaLabelForDate i tillegg for å beskrive\n * meningen til skjermlesere o.l.\n */\n classNameForDate?: (date: CalendarDate) => string;\n /** Legger til teksten som returneres på datoen i kalenderen sin aria-label.\n * Bør brukes sammen med classNameForDate hvis styling-endringene gjort der er meningsbærende.\n * @default undefined\n * @example (date) => isWeekend(date, 'no-NO') ? 'helgedag' : ''\n */\n ariaLabelForDate?: (date: CalendarDate) => string;\n};\n\nexport type DatePickerProps<DateType extends DateValue> = Omit<\n BaseDateFieldProps<DateType>,\n | keyof BaseDatePickerProps\n | 'labelProps'\n | 'fieldProps'\n | 'groupProps'\n | 'dateFieldRef'\n> &\n BaseDatePickerProps &\n ExtendedDateFieldProps<DateType>;\n\nexport const DatePicker = <DateType extends DateValue>({\n selectedDate,\n locale,\n disabled,\n readOnly,\n showTime,\n showTimeZone = false,\n classNameForDate,\n className,\n variant,\n feedback,\n validationVariant,\n validationFeedback,\n showWeekNumbers,\n weekNumberHeader,\n showOutsideMonth = false,\n disableModal = false,\n labelTooltip,\n navigationDescription,\n minDate,\n maxDate,\n modalTreshold = 1000,\n ariaLabelForDate,\n append,\n prepend,\n granularity = showTime ? 'minute' : 'day',\n ...rest\n}: DatePickerProps<DateType>) => {\n const CALENDAR_MODAL_MAX_SCREEN_WIDTH = modalTreshold;\n const datePickerRef = useRef<HTMLDivElement | null>(null);\n const calendarRef = useRef<HTMLDivElement | null>(null);\n\n const { width } = useWindowDimensions();\n\n const _props: DatePickerStateOptions<DateType> = {\n ...rest,\n onChange: value =>\n handleOnChange<DateType>({\n value,\n selectedDate,\n forcedReturnType: rest.forcedReturnType,\n onChange: rest.onChange,\n }),\n minValue: minDate,\n // this weird logic makes sure the entire day is included if no time is provided in maxDate\n maxValue: getAdjustedMaxDate(maxDate),\n value: selectedDate,\n granularity,\n isDisabled: disabled || readOnly,\n };\n\n const state = useDatePickerState(_props);\n const {\n groupProps,\n labelProps,\n fieldProps,\n buttonProps,\n dialogProps,\n calendarProps,\n } = useDatePicker(_props, state, datePickerRef);\n\n // calculations for floating-UI popover position\n const { refs, floatingStyles, update } = useFloating({\n whileElementsMounted: (ref, float, update) =>\n autoUpdate(ref, float, update, { elementResize: false }),\n placement: 'bottom-start',\n middleware: [\n offset(space.extraSmall2),\n flip(),\n shift({ padding: space.extraSmall }),\n ],\n });\n\n useOnClickOutside([calendarRef], () => state.setOpen(false));\n\n useOnEscape(calendarRef, () => state.setOpen(false));\n\n const calendarSharedProps: CalendarProps<DateType> = {\n ...dialogProps,\n ...calendarProps,\n // We don't use handleOnChange here since it's handled internally by Calendar\n onChange: rest.onChange,\n forcedReturnType: rest.forcedReturnType,\n disabled,\n navigationDescription,\n onSelectedCellClick: () => state.setOpen(false),\n // onCellClick is a temporary fix solving an issue where the\n // calendar sometimes doesn't close on date selection\n onCellClick: () => state.setOpen(false),\n selectedDate,\n minDate,\n maxDate,\n calendarRef,\n classNameForDate,\n ariaLabelForDate,\n showWeekNumbers,\n weekNumberHeader,\n showOutsideMonth,\n };\n\n const isModal =\n typeof width !== 'undefined' &&\n width <= CALENDAR_MODAL_MAX_SCREEN_WIDTH &&\n !disableModal;\n\n const popoverCalendar = (\n <div\n style={{ ...floatingStyles, zIndex: zIndexes.popover }}\n ref={refs.setFloating}\n >\n <FocusLock disabled={!state.isOpen || isModal} returnFocus>\n {state.isOpen && <Calendar {...calendarSharedProps} />}\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 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 <DateField\n {...(groupProps as any)}\n {...fieldProps}\n // We don't use handleOnChange here since it's handled internally by DateField\n {...rest}\n append={\n !disabled &&\n !readOnly && (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n {append}\n <CalendarButton\n {...buttonProps}\n onPress={() => {\n state.setOpen(!state.isOpen);\n update();\n }}\n className=\"eds-datepicker__open-calendar-button\"\n >\n <CalendarIcon />\n </CalendarButton>\n </div>\n )\n }\n prepend={prepend}\n className={classNames('eds-datepicker', className, {\n 'eds-datepicker--disabled': disabled,\n })}\n disabled={disabled}\n readOnly={readOnly}\n feedback={feedback}\n labelProps={labelProps}\n labelTooltip={labelTooltip}\n maxDate={maxDate}\n minDate={minDate}\n dateFieldRef={node => {\n refs.setReference(node);\n datePickerRef.current = node;\n }}\n selectedDate={selectedDate}\n showTime={showTime}\n showTimeZone={showTimeZone}\n validationFeedback={validationFeedback}\n validationVariant={validationVariant}\n variant={variant}\n />\n {isModal ? modalCalendar : popoverCalendar}\n </ConditionalWrapper>\n );\n};\n","import React from 'react';\nimport {\n BaseFormControl,\n isFilled,\n useInputGroupContext,\n useVariant,\n} from '@entur/form';\nimport { DateIcon } from '@entur/icons';\nimport { useOnMount, useRandomId, VariantType } from '@entur/utils';\n\n/** @deprecated use variant=\"information\" instead */\nconst info = 'info';\n/** @deprecated use variant=\"negative\" instead */\nconst error = 'error';\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 | typeof error | typeof info;\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 | typeof error | typeof info;\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 disabled?: boolean;\n readonly?: boolean;\n 'aria-label': string;\n onClick?: () => void;\n onFocus?: () => void;\n};\n\nexport const TimePickerArrowButton = ({\n direction,\n onClick,\n disabled,\n readonly,\n 'aria-label': ariaLabel,\n ...rest\n}: TimePickerArrowButtonProps) => {\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 {...rest}\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 { now } from '@internationalized/date';\n\nimport type {\n TimeValue,\n AriaTimeFieldProps,\n MappedTimeValue,\n} from '@react-types/datepicker';\n\nimport { VisuallyHidden } from '@entur/a11y';\nimport { BaseFormControl, BaseFormControlProps } from '@entur/form';\nimport { useRandomId, VariantType } from '@entur/utils';\n\nimport { FieldSegment } from '../shared/FieldSegment';\nimport { TimePickerArrowButton } from './TimePickerArrowButton';\nimport { convertValueToType, focusSegment, modulo } from '../shared/utils';\n\nimport './TimePicker.scss';\n\n/** @deprecated use variant=\"information\" instead */\nconst info = 'info';\n/** @deprecated use variant=\"negative\" instead */\nconst error = 'error';\n\ntype ExtendedTimePickerProps<TimeType extends TimeValue> = Omit<\n AriaTimeFieldProps<TimeType>,\n | keyof BaseTimePickerProps<TimeValue>\n | 'value'\n | 'hideTimeZone'\n | 'placeholder'\n | 'minValue'\n | 'maxValue'\n> &\n Omit<\n Partial<BaseFormControlProps>,\n | keyof BaseTimePickerProps<TimeType>\n | 'children'\n | 'defaultValue'\n | 'value'\n | 'isFilled'\n | 'size'\n >;\n\ntype BaseTimePickerProps<TimeType extends TimeValue> = {\n /** Den valgte tiden. Tid i '@internationalized/date'-pakkens format */\n selectedTime: TimeType | null;\n /** Kalles når tiden endres. Tid i '@internationalized/date'-pakkens format */\n onChange: (value: MappedTimeValue<TimeType> | null) => void;\n /** Label til TimePicker */\n label: string;\n /** Minutter som legges til eller trekkes fra ved klikk på pilene i TimePicker.\n * Rundes av til nærmeste hele 'minuteIncrement' som går opp i 60.\n *\n * OBS: Støtter kun verdier <= 60 og multiplum av 60.\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 /** Viser sekunder i tillegg til minutter og timer\n * @default false\n */\n showSeconds?: 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 | typeof error | typeof info;\n labelTooltip?: React.ReactNode;\n disabled?: boolean;\n readOnly?: boolean;\n inputRef?: React.ForwardedRef<HTMLDivElement>;\n /** Tvinger typen på onChange til den gitte typen.\n * Dette er nyttig når utgangsverdien din er 'null', men du ønsker at\n * TimePicker alltid skal returnere f.eks Time.\n *\n * Som standard returnerer onChange TimeValue basert på selectedTime,\n * eller ZonedDateTime hvis selectedTime er 'null'.\n *\n * @default undefined\n */\n forcedReturnType?: 'Time' | 'CalendarDateTime' | 'ZonedDateTime';\n forcedTimeZone?: string;\n /** Ekstra klassenavn */\n className?: string;\n style?: React.CSSProperties;\n};\n\nexport type TimePickerProps<TimeType extends TimeValue> =\n BaseTimePickerProps<TimeType> & ExtendedTimePickerProps<TimeType>;\n\nexport const TimePicker = <TimeType extends TimeValue>({\n selectedTime,\n onChange,\n disabled,\n readOnly,\n className,\n style,\n label,\n labelTooltip,\n feedback,\n granularity,\n variant,\n locale: customLocale,\n showTimeZone,\n showSeconds = false,\n minuteIncrementForArrowButtons = 30,\n leftArrowButtonAriaLabel = `Trekk fra ${minuteIncrementForArrowButtons} minutter`,\n rightArrowButtonAriaLabel = `Legg til ${minuteIncrementForArrowButtons} minutter`,\n inputRef,\n forcedReturnType,\n forcedTimeZone,\n append,\n prepend,\n ...rest\n}: TimePickerProps<TimeType>) => {\n let { locale } = useLocale();\n if (customLocale) locale = customLocale;\n const timePickerId = useRandomId('eds-timepicker');\n\n const timeZone =\n forcedTimeZone ??\n (selectedTime !== null && 'timezone' in selectedTime\n ? (selectedTime.timezone as string)\n : 'Europe/Oslo');\n\n const handleOnChange = (value: MappedTimeValue<TimeType> | null) => {\n if (forcedReturnType !== undefined || !selectedTime) {\n return onChange(\n convertValueToType({\n value,\n type: forcedReturnType ?? 'ZonedDateTime',\n timezone: timeZone,\n }) as MappedTimeValue<TimeType> | null,\n );\n }\n\n onChange(value);\n };\n\n const state = useTimeFieldState({\n onChange: handleOnChange,\n label: label,\n locale,\n value: selectedTime,\n granularity: granularity ?? showSeconds ? 'second' : 'minute',\n hideTimeZone: !showTimeZone,\n isDisabled: disabled || readOnly,\n shouldForceLeadingZeros: true,\n ...rest,\n });\n const timeFieldRef = useRef<HTMLDivElement>(null);\n const { labelProps, fieldProps } = useTimeField<TimeType>(\n { ...rest, label: label },\n state,\n timeFieldRef,\n );\n const id = useRandomId('timepicker');\n\n const getCurrentTime = () => {\n const getCurrentTimeWithCorrectType = convertValueToType({\n value: now(timeZone),\n type: forcedReturnType ?? 'ZonedDateTime',\n }) as MappedTimeValue<TimeType>;\n return getCurrentTimeWithCorrectType;\n };\n\n const handleOnClickArrowButton = (operation: 'add' | 'subtract') => {\n if (selectedTime === null) return handleOnChange(getCurrentTime());\n switch (operation) {\n case 'add':\n return handleOnChange(\n selectedTime.add({\n minutes:\n minuteIncrementForArrowButtons -\n modulo(selectedTime.minute, minuteIncrementForArrowButtons),\n }) as MappedTimeValue<TimeType>,\n );\n case 'subtract':\n return handleOnChange(\n selectedTime.subtract({\n minutes:\n modulo(selectedTime.minute - 1, minuteIncrementForArrowButtons) +\n 1,\n }) as MappedTimeValue<TimeType>,\n );\n }\n };\n\n return (\n <I18nProvider locale={locale}>\n <BaseFormControl\n append={\n <div style={{ display: 'flex', alignItems: 'center' }}>\n {append}\n <TimePickerArrowButton\n direction=\"right\"\n disabled={disabled || readOnly}\n aria-label={rightArrowButtonAriaLabel}\n onClick={() => handleOnClickArrowButton('add')}\n onFocus={() => focusSegment(timeFieldRef, 'last')}\n />\n </div>\n }\n ariaAlertOnFeedback\n aria-describedby={timePickerId + 'description'}\n className={classNames('eds-timepicker', className, {\n 'eds-timepicker--disabled': disabled,\n 'eds-timepicker--has-tooltip': labelTooltip !== undefined,\n 'eds-timepicker--readonly': readOnly,\n })}\n disabled={disabled}\n readOnly={readOnly}\n disableLabelAnimation\n feedback={feedback}\n label={label}\n labelId={id}\n labelProps={{\n ...labelProps,\n 'aria-describedby': timePickerId + 'description',\n }}\n labelTooltip={labelTooltip}\n prepend={\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <TimePickerArrowButton\n direction=\"left\"\n disabled={disabled || readOnly}\n aria-label={leftArrowButtonAriaLabel}\n onClick={() => handleOnClickArrowButton('subtract')}\n onFocus={() => focusSegment(timeFieldRef, 'first')}\n />\n {prepend}\n </div>\n }\n ref={inputRef}\n style={style}\n variant={variant}\n >\n <span\n ref={timeFieldRef}\n {...fieldProps}\n style={{ display: 'contents' }}\n >\n {state.segments.map((segment, i) => (\n <FieldSegment\n segment={segment}\n state={state}\n key={i}\n aria-describedby={timePickerId + 'description'}\n />\n ))}\n </span>\n <VisuallyHidden id={timePickerId + 'description'}>\n {selectedTime !== null\n ? 'valgt tid: ' +\n selectedTime.hour.toString().padStart(2, '0') +\n ':' +\n selectedTime.minute.toString().padStart(2, '0') +\n (showSeconds\n ? ':' + selectedTime.second.toString().padStart(2, '0')\n : '')\n : ''}\n </VisuallyHidden>\n </BaseFormControl>\n </I18nProvider>\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport {\n BaseFormControl,\n isFilled,\n useInputGroupContext,\n useVariant,\n} from '@entur/form';\nimport { useOnMount, useRandomId, VariantType } from '@entur/utils';\n\nimport './NativeTimePicker.scss';\n\n/** @deprecated use variant=\"information\" instead */\nconst info = 'info';\n/** @deprecated use variant=\"negative\" instead */\nconst error = 'error';\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 | typeof error | typeof info;\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 | typeof error | typeof info;\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 React, { useEffect, useRef, useState } from 'react';\nimport { Time, parseTime, toTime } from '@internationalized/date';\nimport { useTimeField } from '@react-aria/datepicker';\nimport { I18nProvider, useLocale } from '@react-aria/i18n';\nimport { useTimeFieldState } from '@react-stately/datepicker';\nimport classNames from 'classnames';\n\nimport type {\n TimeValue,\n AriaTimeFieldProps,\n MappedTimeValue,\n} from '@react-types/datepicker';\n\nimport { BaseFormControlProps, TextField } from '@entur/form';\nimport { ClockIcon } from '@entur/icons';\nimport { mergeRefs, VariantType } from '@entur/utils';\n\nimport './SimpleTimePicker.scss';\n\nenum inputResult {\n RESET_TIME,\n INVALID,\n}\n\n/** @deprecated use variant=\"information\" instead */\nconst info = 'info';\n/** @deprecated use variant=\"negative\" instead */\nconst error = 'error';\n\ntype ExtendedSimpleTimePickerProps<TimeType extends TimeValue> = Omit<\n AriaTimeFieldProps<TimeType>,\n | keyof BaseSimpleTimePickerProps<TimeType>\n | 'value'\n | 'hideTimeZone'\n | 'placeholder'\n | 'minValue'\n | 'maxValue'\n | 'locale'\n | 'isReadOnly'\n | 'isDisabled'\n | 'locale'\n> &\n Omit<\n Partial<BaseFormControlProps>,\n | keyof BaseSimpleTimePickerProps<TimeType>\n | 'children'\n | 'defaultValue'\n | 'value'\n | 'isFilled'\n | 'size'\n >;\n\ntype BaseSimpleTimePickerProps<TimeType extends TimeValue> = {\n /** Den valgte tiden. Tid i '@internationalized/date'-pakkens format */\n selectedTime: TimeType | null;\n /** Kalles når tiden endres. Tid i '@internationalized/date'-pakkens format */\n onChange?: (\n value: MappedTimeValue<TimeType> | null,\n ) => void | React.Dispatch<React.SetStateAction<TimeValue | null>>;\n /** Label til TimePicker */\n label: string;\n /** Viser sekund i tillegg til time og minutt\n * @default false\n */\n showSeconds?: boolean;\n /** Viser et klokkeikonet for å klarere indikere at dette\n * er en tidsvelger\n * @default false\n */\n showClockIcon?: boolean | 'right' | 'left';\n /** Velger hvor mye luft det skal være på sidene av klokkeslettet\n * @default 'default'\n */\n padding?: 'default' | 'large';\n /** Varselmelding, som vil komme under TimePicker */\n feedback?: string;\n /** Valideringsvariant*/\n variant?: VariantType | typeof error | typeof info;\n /** Tekst eller ikon som vises foran skjema-elementet */\n prepend?: React.ReactNode;\n /** Tekst eller ikon som vises etter skjema-elementet */\n append?: React.ReactNode;\n labelTooltip?: React.ReactNode;\n disabled?: boolean;\n readOnly?: boolean;\n inputRef?: React.ForwardedRef<HTMLInputElement>;\n /** Ekstra klassenavn */\n className?: string;\n style?: React.CSSProperties;\n};\n\nexport type SimpleTimePickerProps<TimeType extends TimeValue> =\n BaseSimpleTimePickerProps<TimeType> & ExtendedSimpleTimePickerProps<TimeType>;\n\nexport const SimpleTimePicker = <TimeType extends TimeValue>({\n append,\n className,\n disabled,\n feedback,\n showClockIcon = 'right',\n inputRef,\n label,\n labelTooltip,\n onChange,\n padding = 'default',\n prepend,\n readOnly,\n selectedTime,\n showSeconds,\n style,\n variant,\n ...rest\n}: SimpleTimePickerProps<TimeType>) => {\n const [inputText, setInputText] = useState('');\n const timeFieldRef = useRef<HTMLInputElement>(null);\n const [lastValidSelectedTime, setLastValidSelectedTime] =\n useState<MappedTimeValue<TimeType> | null>(null);\n\n const { locale } = useLocale();\n\n const state = useTimeFieldState({\n onChange,\n label: label,\n locale,\n value: selectedTime,\n hideTimeZone: true,\n isDisabled: disabled,\n isReadOnly: readOnly,\n ...rest,\n });\n const { labelProps, fieldProps } = useTimeField<TimeType>(\n { ...rest, label: label },\n state,\n timeFieldRef,\n );\n\n useEffect(() => {\n updateInputWithSelectedTime();\n // @ts-expect-error TimeType and MappedTimeValue<TimeType> is actually the same\n if (selectedTime !== null) setLastValidSelectedTime(selectedTime);\n }, [selectedTime?.toString()]);\n\n const updateInputWithSelectedTime = () => {\n const selectedTimeString = getStringFromTimeValue(selectedTime);\n setInputText(selectedTimeString);\n\n const timeFieldIsFocused = document.activeElement === timeFieldRef?.current;\n if (selectedTimeString === '' && !timeFieldIsFocused)\n addPlaceholderToInput();\n };\n\n const getStringFromTimeValue = (timeValue: TimeValue | null) => {\n if (timeValue === null) return '';\n\n const timeObject = 'day' in timeValue ? toTime(timeValue) : timeValue;\n\n if (showSeconds) return timeObject.toString().slice(0, 8);\n\n return timeObject.toString().slice(0, 5);\n };\n\n const addPlaceholderToInput = () => {\n if (showSeconds) setInputText('–– : –– : ––');\n else setInputText('–– : ––');\n };\n\n const handleChangeTime = () => {\n const newTime = getValueForOnChangeFromInput();\n\n if (newTime === inputResult.INVALID) {\n return updateInputWithSelectedTime();\n }\n\n if (newTime?.toString() !== selectedTime?.toString()) onChange?.(newTime);\n };\n\n const getValueForOnChangeFromInput = () => {\n const formatedTimeString = formatTimeString(inputText);\n const newTimeObject = formatedTimeStringToTimeObject(formatedTimeString);\n\n if (newTimeObject === inputResult.INVALID) {\n return inputResult.INVALID;\n }\n if (newTimeObject === inputResult.RESET_TIME) {\n return null;\n }\n\n const updatedSelectedTime =\n getSelectedTimeWithTimeFromObject(newTimeObject);\n\n return updatedSelectedTime;\n };\n\n const formatTimeString = (timeString: string): string | inputResult => {\n if (timeString.length === 0) return inputResult.RESET_TIME;\n if (timeString.length < 3 || timeString.length > 8)\n return inputResult.INVALID;\n\n const numberOfColons = (timeString.match(new RegExp(':', 'g')) || [])\n .length;\n const stringLength = timeString.length;\n\n // targets 'd:dd:dd' and 'dd:dd:dd'\n if (numberOfColons === 2 && stringLength >= 7) {\n return timeString.padStart(8, '0');\n }\n\n // targets 'd:dd' and 'dd:dd'\n if (numberOfColons === 1) {\n return timeString.padStart(5, '0');\n }\n\n if (stringLength > 6) return inputResult.INVALID;\n\n const stringLengthIsEven = stringLength % 2 == 0;\n\n const hourString = stringLengthIsEven\n ? timeString.slice(0, 2)\n : timeString.slice(0, 1);\n const minuteString = stringLengthIsEven\n ? timeString.slice(2, 4)\n : timeString.slice(1, 3);\n const secondString = (() => {\n const stringSlice = stringLengthIsEven\n ? timeString.slice(4, 6)\n : timeString.slice(3, 5);\n if (stringSlice === '') return '00';\n return stringSlice;\n })();\n\n const timeStringWithColon =\n hourString.padStart(2, '0') +\n ':' +\n minuteString +\n (showSeconds ? ':' + secondString : '');\n\n return timeStringWithColon;\n };\n\n const formatedTimeStringToTimeObject = (\n formatedTimeString: string | inputResult,\n ): Time | inputResult => {\n if (formatedTimeString === inputResult.INVALID) return inputResult.INVALID;\n if (formatedTimeString === inputResult.RESET_TIME)\n return inputResult.RESET_TIME;\n\n const isNumberTest = /^\\d+$/;\n const hourString = formatedTimeString.slice(0, 2);\n const minuteString = formatedTimeString.slice(3, 5);\n const secondString = formatedTimeString.slice(6, 8);\n if (\n hourString.match(isNumberTest) &&\n minuteString.match(isNumberTest) &&\n (secondString === '' || secondString.match(isNumberTest))\n ) {\n try {\n const timeObject = parseTime(formatedTimeString);\n return timeObject;\n } catch (e) {\n return inputResult.INVALID;\n }\n }\n\n return inputResult.INVALID;\n };\n\n const getSelectedTimeWithTimeFromObject = (\n newTime: Time,\n ): MappedTimeValue<TimeType> => {\n const selectedTimeWithUpdateTime = (\n lastValidSelectedTime ?? new Time()\n ).set({\n hour: newTime.hour,\n minute: newTime.minute,\n second: newTime.second,\n }) as MappedTimeValue<TimeType>;\n\n return selectedTimeWithUpdateTime;\n };\n\n const {\n onBlur,\n onClick,\n onDragStart,\n onFocus,\n onKeyDown,\n onKeyUp,\n onMouseDown,\n onPointerDown,\n onPointerUp,\n ...usedFieldProps\n } = fieldProps;\n\n return (\n <I18nProvider locale={locale}>\n <TextField\n append={\n append ||\n (showClockIcon === true || showClockIcon === 'right' ? (\n <ClockIcon onClick={() => timeFieldRef?.current?.focus()} inline />\n ) : undefined)\n }\n className={classNames('eds-simple-timepicker', {\n 'eds-simple-timepicker--padding-large': padding === 'large',\n 'eds-simple-timepicker--show-seconds': showSeconds,\n 'eds-simple-timepicker--hide-clock': !showClockIcon,\n 'eds-simple-timepicker--has-tooltip': labelTooltip !== undefined,\n })}\n disabled={disabled}\n disableLabelAnimation\n feedback={feedback}\n label={label}\n labelProps={labelProps}\n labelTooltip={labelTooltip}\n onBlur={() => {\n handleChangeTime();\n if (selectedTime === null) {\n addPlaceholderToInput();\n }\n }}\n onChange={e => setInputText(e.target.value)}\n onFocus={() => {\n if (selectedTime === null) {\n setInputText('');\n }\n }}\n onKeyDown={({ key }) => {\n if (key === 'Enter') handleChangeTime();\n }}\n placeholder={showSeconds ? '–– : –– : ––' : '–– : ––'}\n prepend={\n prepend ||\n (showClockIcon === 'left' ? (\n <ClockIcon onClick={() => timeFieldRef?.current?.focus()} />\n ) : undefined)\n }\n readOnly={readOnly}\n ref={mergeRefs(timeFieldRef, inputRef)}\n style={style}\n value={inputText}\n variant={variant}\n {...usedFieldProps}\n />\n </I18nProvider>\n );\n};\n","import { warnAboutMissingStyles } from '@entur/utils';\nimport './index.scss';\n\nwarnAboutMissingStyles('datepicker', 'form', 'icons');\n\nexport * from './DatePicker';\nexport * from './TimePicker';\nexport * from './shared';\n\nexport {\n CalendarDate,\n CalendarDateTime,\n ZonedDateTime,\n Time,\n} from '@internationalized/date';\nexport type { TimeValue, DateValue } from '@react-types/datepicker';\n"],"names":["useRef","useDateSegment","jsx","date","ZonedDateTime","parseAbsolute","CalendarDateTime","CalendarDate","Time","getLocalTimeZone","GregorianCalendar","toCalendarDateTime","today","toCalendarDate","toZoned","toTime","now","startOfWeek","startOfYear","useLocale","useDateFieldState","useDateField","useEffect","useRandomId","ConditionalWrapper","I18nProvider","BaseFormControl","mergeRefs","useButton","IconButton","useCalendarCell","isEqualDay","useCalendarGrid","getWeeksInMonth","jsxs","Fragment","VisuallyHidden","useCalendarState","useCalendar","LeftArrowIcon","RightArrowIcon","useWindowDimensions","useDatePickerState","useDatePicker","useFloating","update","autoUpdate","offset","space","flip","shift","useOnClickOutside","useOnEscape","zIndexes","Modal","CalendarIcon","DateIcon","useVariant","useInputGroupContext","useOnMount","isFilled","handleOnChange","useTimeFieldState","useTimeField","useState","parseTime","TextField","ClockIcon","warnAboutMissingStyles"],"mappings":"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"}
1
+ {"version":3,"file":"datepicker.cjs.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/DatePicker/NativeDatePicker.tsx","../src/TimePicker/TimePickerArrowButton.tsx","../src/TimePicker/TimePicker.tsx","../src/TimePicker/NativeTimePicker.tsx","../src/TimePicker/SimpleTimePicker.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 'aria-describedby'?: string;\n};\n\nexport const FieldSegment = ({ segment, state, ...rest }: TimeSegmentProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { segmentProps } = useDateSegment(segment, state, ref);\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':\n segment.text === '.' || segment.text === ':',\n })}\n tabIndex={state.isDisabled ? -1 : segmentProps.tabIndex}\n {...rest}\n >\n {segment.text}\n </div>\n );\n};\n","import {\n ZonedDateTime,\n CalendarDateTime,\n Time,\n parseAbsolute,\n DateValue,\n getLocalTimeZone,\n CalendarDate,\n toCalendarDateTime,\n toCalendarDate,\n toZoned,\n toTime,\n today,\n now,\n startOfWeek,\n startOfYear,\n} from '@internationalized/date';\nimport { MappedDateValue, TimeValue } from '@react-types/datepicker';\nimport { Calendar, GregorianCalendar } from '@internationalized/date';\n\nconst nativeDateToDateTime = (\n date: Date,\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 date.getMilliseconds(),\n );\n }\n return parseAbsolute(date.toISOString(), timeZone);\n }\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 date.getMilliseconds(),\n );\n};\n\n/**\n * Tar inn et JS Date-objekt og returnerer et av DateValue-objektene fra @internationalized/date-pakken\n * @param {Date | null} date JS Date-objekt som ønskes konvertert til et DateValue-objekt\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 {CalendarDateTime | ZonedDateTime | CalendarDate | null} et av DateValue-objektene med verdier fra date eller null\n */\nexport function nativeDateToDateValue(\n date: Date | null,\n noTimeOnlyDate = false,\n timeZone?: string,\n offset?: number,\n) {\n if (date === null) return null;\n\n if (noTimeOnlyDate)\n return new CalendarDate(\n date.getFullYear(),\n date.getMonth() + 1,\n date.getDate(),\n );\n\n return nativeDateToDateTime(date, timeZone, offset);\n}\n\n/**\n * Tar inn et JS Date-objekt og returnerer et av TimeValue-objektene fra @internationalized/date-pakken\n * @param {Date | null} 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 | null} et av TimeValue-objektene med verdier fra date eller null\n */\nexport function nativeDateToTimeValue(\n date: Date | null,\n noDateOnlyTime = false,\n timeZone?: string,\n offset?: number,\n) {\n if (date === null) return null;\n\n if (noDateOnlyTime)\n return new Time(\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds(),\n );\n\n return nativeDateToDateTime(date, timeZone, offset);\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 | null} 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 | null} et Date-objekt med verdier fra time eller null\n */\nexport function timeOrDateValueToNativeDate(\n value: TimeValue | DateValue | null,\n timeZoneForCalendarDateTime?: string,\n) {\n if (value === null) return null;\n\n // type is Time\n if (!('day' in value)) {\n const date = new Date();\n date.setHours(value.hour);\n date.setMinutes(value.minute);\n date.setSeconds(value.second);\n date.setMilliseconds(value.millisecond);\n return date;\n }\n\n // type is CalendarDate\n if (!('hour' in value)) {\n return value.toDate(timeZoneForCalendarDateTime ?? getLocalTimeZone());\n }\n\n // type is CalendarDateTime\n if (!('timeZone' in value)) {\n if (timeZoneForCalendarDateTime)\n return value.toDate(timeZoneForCalendarDateTime);\n\n return value.toDate(getLocalTimeZone());\n }\n\n // type is ZonedDateTime\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\nexport const lastMillisecondOfDay = (dateValue: DateValue) =>\n toCalendarDateTime(dateValue.add({ days: 1 })).add({\n milliseconds: -1,\n });\n\nexport const convertValueToType = ({\n value,\n type,\n timezone = 'Europe/Oslo',\n}: {\n value: DateValue | TimeValue | null;\n type: 'CalendarDate' | 'CalendarDateTime' | 'ZonedDateTime' | 'Time';\n timezone?: string;\n}) => {\n if (value === null) return null;\n switch (type) {\n case 'CalendarDate':\n if (!('day' in value)) return today(timezone);\n return toCalendarDate(value);\n\n case 'CalendarDateTime':\n if (!('day' in value)) return toCalendarDateTime(today(timezone), value);\n return toCalendarDateTime(value);\n\n case 'ZonedDateTime':\n if (!('day' in value))\n return toZoned(toCalendarDateTime(today(timezone), value), timezone);\n return toZoned(value, timezone);\n\n case 'Time':\n if (!('hour' in value)) return toTime(now(timezone));\n if (!('day' in value)) return value;\n return toTime(value);\n\n default:\n return value;\n }\n};\n\nexport const modulo = (a: number, b: number) => ((a % b) + b) % b;\n\nexport const focusSegment = (\n ref: React.RefObject<HTMLDivElement>,\n segment: 'first' | 'last',\n) => {\n if (ref.current) {\n const segments = ref.current.querySelectorAll(\n '.eds-date-and-time-field__segment',\n );\n const firstSegment = segments[0] as HTMLElement;\n const lastSegment = segments[segments.length - 1] as HTMLElement;\n switch (segment) {\n case 'first':\n return firstSegment.focus();\n case 'last':\n return lastSegment.focus();\n }\n }\n};\n\n/** Based on code from https://stackoverflow.com/questions/6117814/get-week-of-year-in-javascript-like-in-php */\nexport function getWeekNumberForDate(date: DateValue | null) {\n if (date === null) return -1;\n const calendarDate = convertValueToType({\n value: date,\n type: 'CalendarDate',\n }) as CalendarDate;\n const firstDayOfWeek = startOfWeek(calendarDate, 'no-NO');\n const thursdayOfWeek = firstDayOfWeek.add({ days: 3 });\n const firstDayOfYearForThursday = startOfYear(thursdayOfWeek);\n const weekNumber = Math.ceil(\n (thursdayOfWeek.compare(firstDayOfYearForThursday) + 1) / 7,\n );\n return weekNumber;\n}\n\nexport type ForcedReturnType =\n | 'CalendarDate'\n | 'CalendarDateTime'\n | 'ZonedDateTime'\n | undefined;\n\nexport function handleOnChange<DateType extends DateValue>({\n value,\n selectedDate,\n forcedReturnType,\n onChange,\n}: {\n value: MappedDateValue<DateType> | null;\n selectedDate: DateType | null;\n forcedReturnType: ForcedReturnType;\n onChange?:\n | ((value: MappedDateValue<DateType> | null) => void)\n | ((value: DateValue | null) => void);\n}) {\n if (forcedReturnType !== undefined || !selectedDate) {\n return onChange?.(\n convertValueToType({\n value,\n type: forcedReturnType ?? 'ZonedDateTime',\n timezone:\n value !== null && 'timezone' in value\n ? (value.timezone as string)\n : undefined,\n }) as MappedDateValue<typeof forcedReturnType> | null,\n );\n }\n\n onChange?.(value);\n}\n\n// this weird logic makes sure the entire day is included if no time is provided in maxDate\nexport function getAdjustedMaxDate(maxDate?: DateValue) {\n if ('hour' in (maxDate ?? {})) return maxDate;\n if (maxDate !== undefined) return lastMillisecondOfDay(maxDate);\n return undefined;\n}\n\n/**\n * Determines which ARIA role should be applied to feedback text based on the variant.\n * - Critical errors get role=\"alert\" (aria-live=\"assertive\") for immediate announcement\n * - Warnings get role=\"status\" (aria-live=\"polite\") for non-interrupting announcement\n * - Info and success messages get no role (visual only)\n * @param variant The variant type\n * @returns 'alert', 'status', or false (no role)\n */\nexport function shouldUseAriaAlert(\n variant?:\n | 'negative'\n | 'warning'\n | 'success'\n | 'information'\n | 'info'\n | 'error',\n): 'alert' | 'status' | false {\n if (!variant) return false;\n\n // Critical errors: interrupt immediately\n if (variant === 'negative' || variant === 'error') {\n return 'alert';\n }\n\n // Warnings: announce politely when user is idle\n if (variant === 'warning') {\n return 'status';\n }\n\n // Info and success: no automatic announcement\n return false;\n}\n","import React, { ReactNode, useEffect, useRef } from 'react';\n\nimport {\n DateFieldStateOptions,\n useDateFieldState,\n} 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 DateValue,\n AriaDatePickerProps,\n MappedDateValue,\n Granularity,\n} from '@react-types/datepicker';\n\nimport { BaseFormControl, BaseFormControlProps } from '@entur/form';\nimport {\n ConditionalWrapper,\n mergeRefs,\n useRandomId,\n VariantType,\n} from '@entur/utils';\n\nimport { FieldSegment } from '../shared/FieldSegment';\nimport {\n createCalendar,\n ForcedReturnType,\n handleOnChange,\n getAdjustedMaxDate,\n shouldUseAriaAlert,\n} from '../shared/utils';\n\nimport './DateField.scss';\n\n/** @deprecated use variant=\"information\" instead */\nconst info = 'info';\n/** @deprecated use variant=\"negative\" instead */\nconst error = 'error';\n\nexport type ExtendedDateFieldProps<DateType extends DateValue> = Omit<\n AriaDatePickerProps<DateType>,\n | keyof BaseDateFieldProps<DateType>\n | 'value'\n | 'hideTimeZone'\n | 'placeholder'\n | 'placeholderValue'\n | 'defaultValue'\n | 'minValue'\n | 'maxValue'\n> &\n Partial<\n Omit<\n BaseFormControlProps,\n | keyof BaseDateFieldProps<DateType>\n | 'children'\n | 'defaultValue'\n | 'value'\n | 'isFilled'\n | 'size'\n >\n >;\n\nexport type BaseDateFieldProps<DateType extends DateValue> = {\n /** Den valgte tiden. Tid i '@internationalized/date'-pakkens format */\n selectedDate: DateType | null;\n /** Kalles når dato endres. Tid i '@internationalized/date'-pakkens format */\n onChange?: (value: MappedDateValue<DateType> | null) => void;\n /** Ledetekst til DateField */\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 /** Brukes for å vise tid i datovelgeren. Velg minste enhet som skal vises.\n * Hvis du vil vise tid vil \"minute\" vise minutt og ikke sekund, mens \"second\" viser\n * sekunder også.\n * @default \"day\"\n */\n granularity?: Granularity;\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 *\n * OBS: Hvis du bruker dato med tid vil tidspunktet også tas hensyn til.\n * Gyldig fra og med den tiden som legges inn som minDate.\n * Dato uten tid vil være gyldig hele minDate-dagen */\n minDate?: DateValue;\n /** Seneste gyldige datovalg.\n * Eks: today(getLocalTimeZone()).add({days: 1}) == i morgen i lokal tidssone\n *\n * OBS: Hvis du bruker dato med tid vil tidspunktet også tas hensyn til.\n * Gyldig til og med den tiden som legges inn som maxDate.\n * Dato uten tid vil være gyldig hele maxDate-dagen */\n maxDate?: DateValue;\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 /** Tvinger typen på onChange til den gitte typen.\n * Dette er nyttig når utgangsverdien din er 'null', men du ønsker at\n * DatePicker alltid skal returnere f.eks ZonedDateTime.\n *\n * Som standard returnerer onChange DateValue basert på selectedDate,\n * eller CalendarDate hvis selectedDate er 'null'.\n *\n * @default undefined\n */\n forcedReturnType?: ForcedReturnType;\n /** Varselmelding, som vil komme under TimePicker */\n feedback?: string;\n /** Valideringsvariant*/\n variant?: VariantType | typeof error | typeof info;\n /** Varselmelding som forteller om ugyldig dato\n * @default \"Ugyldig dato\"\n */\n validationFeedback?: string;\n /** Valideringsvariant for melding om ugyldig dato\n * @default \"negative\"\n */\n validationVariant?: VariantType | typeof error | typeof info;\n /** Callback-funksjon for når valideringen til datovelgeren endrer seg */\n onValidate?: (isValid?: boolean) => void;\n labelTooltip?: React.ReactNode;\n labelProps?: React.DOMAttributes<Element>;\n fieldProps?: DateFieldProps<DateType>;\n dateFieldRef?: React.Ref<HTMLDivElement>;\n disabled?: boolean;\n readOnly?: boolean;\n /** Ekstra klassenavn */\n className?: string;\n style?: React.CSSProperties;\n};\n\nexport type DateFieldProps<DateType extends DateValue> =\n BaseDateFieldProps<DateType> & ExtendedDateFieldProps<DateType>;\n\nexport const DateField = <DateType extends DateValue>({\n selectedDate,\n onChange,\n label,\n locale: customLocale,\n showTimeZone,\n showTime,\n granularity = showTime ? 'minute' : 'day',\n disabled,\n readOnly,\n isDisabled,\n variant,\n feedback,\n validationVariant = 'negative',\n validationFeedback = 'Ugyldig dato',\n labelTooltip,\n minDate,\n maxDate,\n forcedReturnType,\n style,\n className,\n labelProps: parentLabelProps,\n append,\n prepend,\n onValidate,\n dateFieldRef: ref,\n ...rest\n}: DateFieldProps<DateType>) => {\n const { locale } = useLocale();\n\n const _props: DateFieldStateOptions<DateType> = {\n ...rest,\n label,\n locale: customLocale ?? locale,\n createCalendar,\n value: selectedDate,\n onChange: value =>\n handleOnChange<DateType>({\n value,\n selectedDate,\n forcedReturnType,\n onChange,\n }),\n hideTimeZone: !showTimeZone,\n granularity,\n minValue: minDate,\n maxValue: getAdjustedMaxDate(maxDate),\n isDisabled: isDisabled || disabled || readOnly,\n shouldForceLeadingZeros: true,\n };\n\n const state = useDateFieldState(_props);\n\n const dateFieldRef = useRef(null);\n const { labelProps, fieldProps } = useDateField(_props, state, dateFieldRef);\n\n useEffect(() => onValidate?.(!state.isInvalid), [state.isInvalid]);\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 append={append}\n ariaAlertOnFeedback={shouldUseAriaAlert(\n variant ?? (state.isInvalid ? validationVariant : undefined),\n )}\n className={classNames('eds-datefield', className, {\n 'eds-datefield--has-tooltip': labelTooltip !== undefined,\n })}\n disabled={isDisabled || disabled}\n readOnly={readOnly}\n disableLabelAnimation\n feedback={\n feedback ??\n (state.validationState === 'invalid' ? validationFeedback : undefined)\n }\n label={label}\n labelId={id}\n labelProps={parentLabelProps ?? labelProps}\n labelTooltip={labelTooltip}\n prepend={prepend}\n ref={mergeRefs(ref, dateFieldRef)}\n style={style}\n variant={variant ?? (state.isInvalid ? validationVariant : undefined)}\n {...fieldProps}\n >\n {state.segments.map((segment, i) => (\n <FieldSegment segment={segment} state={state} key={i} />\n ))}\n </BaseFormControl>\n </ConditionalWrapper>\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 weekNumberString: string;\n showOutsideMonth?: boolean;\n onSelectedCellClick?: () => void;\n onCellClick?: () => void;\n classNameForDate?: (date: CalendarDate) => string;\n ariaLabelForDate?: (date: CalendarDate) => string;\n};\n\nexport const CalendarCell = ({\n state,\n date,\n showOutsideMonth = false,\n onSelectedCellClick = () => {\n return;\n },\n onCellClick = () => {\n return;\n },\n weekNumberString,\n classNameForDate,\n ariaLabelForDate,\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\n const ariaLabel = `${buttonProps['aria-label']}${weekNumberString} ${\n ariaLabelForDate?.(date) ?? ''\n }`;\n\n const cellCanBeSelected = showOutsideMonth\n ? !(isDisabled || isUnavailable)\n : !(isOutsideVisibleRange || isDisabled || isUnavailable);\n\n const shouldHideDate = !showOutsideMonth && isOutsideVisibleRange;\n\n // Override button props when showOutsideMonth is true and date is outside visible range\n const extendedButtonProps = {\n ...buttonProps,\n ...(showOutsideMonth &&\n isOutsideVisibleRange && {\n onClick: () => {\n state.selectDate(date);\n onCellClick();\n },\n onKeyUp: (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n state.selectDate(date);\n onCellClick();\n }\n },\n }),\n };\n\n return (\n <td {...cellProps} className=\"eds-datepicker__calendar__grid__cell__td\">\n <div\n {...extendedButtonProps}\n aria-label={ariaLabel}\n aria-hidden={shouldHideDate}\n ref={cellRef}\n hidden={shouldHideDate}\n className={classNames('eds-datepicker__calendar__grid__cell', {\n [classNameForDate?.(date) ?? '']: !shouldHideDate,\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 && !showOutsideMonth,\n 'eds-datepicker__calendar__grid__cell--outside-month--visible':\n isOutsideVisibleRange && showOutsideMonth,\n 'eds-datepicker__calendar__grid__cell--today': isEqualDay(\n date,\n now(state.timeZone ?? getLocalTimeZone()),\n ),\n })}\n {...rest}\n onClick={e => {\n extendedButtonProps?.onClick?.(e);\n // Used to force close calendar on select\n isSelected && onSelectedCellClick();\n cellCanBeSelected && onCellClick();\n }}\n onKeyUp={e => {\n extendedButtonProps?.onKeyUp?.(e);\n if (e.key === 'Enter') {\n // Used to force close calendar on select\n isSelected && onSelectedCellClick();\n cellCanBeSelected && onCellClick();\n }\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, CalendarDate } from '@internationalized/date';\n\nimport { useRandomId } from '@entur/utils';\nimport { VisuallyHidden } from '@entur/a11y';\n\nimport { getWeekNumberForDate } from '../shared/utils';\nimport { CalendarCell } from './CalendarCell';\n\ntype CalendarGridProps = {\n state: CalendarState;\n navigationDescription?: string;\n showWeekNumbers: boolean;\n weekNumberHeader: string;\n showOutsideMonth?: boolean;\n onSelectedCellClick?: () => void;\n onCellClick?: () => void;\n classNameForDate?: (date: CalendarDate) => string;\n ariaLabelForDate?: (date: CalendarDate) => string;\n};\n\nexport const CalendarGrid = ({\n state,\n navigationDescription,\n onSelectedCellClick = () => {\n return;\n },\n onCellClick = () => {\n return;\n },\n showWeekNumbers,\n weekNumberHeader,\n showOutsideMonth = false,\n classNameForDate,\n ariaLabelForDate,\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().includes('no'))\n return ['ma', 'ti', 'on', 'to', 'fr', 'lø', 'sø'];\n if (locale.toLowerCase().includes('en')) {\n if (weekDays[0] === 'M')\n return ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];\n if (weekDays[0] === 'S')\n return ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n }\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 {showWeekNumbers && (\n <th className=\"eds-datepicker__calendar__grid__weeknumber-header\">\n {weekNumberHeader}\n </th>\n )}\n {weekDaysMapped().map(day => (\n <th key={day}>{day}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {weeksArray.map(weekIndex => {\n const weekNumber = getWeekNumberForDate(\n state.getDatesInWeek(weekIndex)[0],\n );\n return (\n <tr key={weekIndex}>\n {showWeekNumbers && (\n <th\n aria-label={`${weekNumberHeader} ${weekNumber}`}\n className=\"eds-datepicker__calendar__grid__weeknumber\"\n >\n {weekNumber}\n </th>\n )}\n {state\n .getDatesInWeek(weekIndex)\n .map((date, i) =>\n date ? (\n <CalendarCell\n key={`${date.month}.${date.day}`}\n state={state}\n date={date}\n aria-describedby={calendarGridId + 'description'}\n weekNumberString={\n showWeekNumbers\n ? `, ${weekNumberHeader} ${weekNumber},`\n : ''\n }\n onSelectedCellClick={onSelectedCellClick}\n onCellClick={onCellClick}\n classNameForDate={classNameForDate}\n ariaLabelForDate={ariaLabelForDate}\n showOutsideMonth={showOutsideMonth}\n />\n ) : (\n <td key={i} />\n ),\n )}\n </tr>\n );\n })}\n </tbody>\n </table>\n <VisuallyHidden id={calendarGridId + 'description'}>\n {getNavigationDescription()}\n </VisuallyHidden>\n </>\n );\n};\n","import React, { useEffect } from 'react';\n\nimport classNames from 'classnames';\nimport { I18nProvider, useLocale } from '@react-aria/i18n';\nimport { AriaCalendarProps, useCalendar } from '@react-aria/calendar';\nimport {\n CalendarStateOptions,\n useCalendarState,\n} from '@react-stately/calendar';\nimport { CalendarDate, DateValue } from '@internationalized/date';\nimport { MappedDateValue } from '@react-types/datepicker';\n\nimport { LeftArrowIcon, RightArrowIcon } from '@entur/icons';\n\nimport {\n ariaLabelIfNorwegian,\n createCalendar,\n handleOnChange,\n getAdjustedMaxDate,\n} from '../shared/utils';\nimport { CalendarButton } from '../shared/CalendarButton';\nimport { CalendarGrid } from './CalendarGrid';\nimport { DateFieldProps } from './DateField';\n\nimport './Calendar.scss';\n\ntype ExtendedCalendarProps<DateType extends DateValue> = Omit<\n AriaCalendarProps<DateType>,\n | keyof BaseCalendarProps<DateType>\n | 'value'\n | 'label'\n | 'hideTimeZone'\n | 'placeholder'\n | 'placeholderValue'\n | 'defaultValue'\n | 'minValue'\n | 'maxValue'\n>;\n\ntype BaseCalendarProps<DateType extends DateValue> = {\n selectedDate: DateType | null;\n onChange?: (selectedDate: MappedDateValue<DateType> | null) => void;\n navigationDescription?: string;\n style?: React.CSSProperties;\n /** Ekstra klassenavn */\n className?: string;\n onSelectedCellClick?: () => void;\n onCellClick?: () => void;\n /** Tidligste gyldige datovalg.\n * Eks: today(getLocalTimeZone()) == i dag i lokal tidssone.\n *\n * OBS: Hvis du bruker dato med tid vil tidspunktet også tas hensyn til.\n * Gyldig fra og med den tiden som legges inn som minDate.\n * Dato uten tid vil være gyldig hele minDate-dagen */\n minDate?: DateValue;\n /** Seneste gyldige datovalg.\n * Eks: today(getLocalTimeZone()).add({days: 1}) == i morgen i lokal tidssone\n *\n * OBS: Hvis du bruker dato med tid vil tidspunktet også tas hensyn til.\n * Gyldig til og med den tiden som legges inn som maxDate.\n * Dato uten tid vil være gyldig hele maxDate-dagen */\n maxDate?: DateValue;\n /** Slå på visning av ukenummere i kalenderen. Overskriften for ukenummer-kolonnen\n * kan endres med prop-en 'weekNumberHeader'\n * @default false */\n showWeekNumbers?: boolean;\n /** Overskrift som vises for ukenummer-kolonnen. Vises kun hvis 'showWeekNumbers' er true.\n * @default 'uke' */\n weekNumberHeader?: string;\n /** Vis datoer som ligger utenfor den viste måneden.\n * @example Hvis uken starter på onsdag vises de to siste datoene i forrige måned i ruten til mandagen og tirsdagen før.\n * @default false */\n showOutsideMonth?: boolean;\n /** Brukes for å legge til klassenavn på spesifikke datoer i kalenderen.\n * Tar inn en dato og skal returnere klassenavnet som skal legges til den datoen.\n * @default undefined\n * @example (date) => isWeekend(date, 'no-NO') ? 'weekend' : ''\n *\n * OBS: hvis stylingen er meningsbærende bør du bruke ariaLabelForDate i tillegg for å beskrive\n * meningen til skjermlesere o.l.\n */\n classNameForDate?: (date: CalendarDate) => string;\n /** Legger til teksten som returneres på datoen i kalenderen sin aria-label.\n * Bør brukes sammen med classNameForDate hvis styling-endringene gjort der er meningsbærende.\n * @default undefined\n * @example (date) => isWeekend(date, 'no-NO') ? 'helgedag' : ''\n */\n ariaLabelForDate?: (date: CalendarDate) => string;\n /** Callback-funksjon for når valideringen til datovelgeren endrer seg */\n onValidate?: (isValid?: boolean) => void;\n disabled?: boolean;\n locale?: string;\n calendarRef?: React.MutableRefObject<HTMLDivElement | null>;\n forcedReturnType?: DateFieldProps<DateType>['forcedReturnType'];\n};\n\nexport type CalendarProps<DateType extends DateValue> =\n BaseCalendarProps<DateType> & ExtendedCalendarProps<DateType>;\n\nexport const Calendar = <DateType extends DateValue>({\n locale: localOverride,\n ...rest\n}: CalendarProps<DateType>) => {\n const props = { isDisabled: rest.disabled, ...rest };\n const { locale } = useLocale();\n return (\n <I18nProvider locale={localOverride ?? locale}>\n <CalendarBase {...props} />\n </I18nProvider>\n );\n};\n\nconst CalendarBase = <DateType extends DateValue>({\n selectedDate,\n onChange,\n minDate,\n maxDate,\n showWeekNumbers = false,\n weekNumberHeader = 'uke',\n showOutsideMonth = false,\n forcedReturnType,\n style,\n className,\n navigationDescription,\n onSelectedCellClick = () => {\n return;\n },\n onCellClick = () => {\n return;\n },\n classNameForDate,\n ariaLabelForDate,\n calendarRef,\n ...rest\n}: CalendarProps<DateType>) => {\n const { locale } = useLocale();\n\n const _props: CalendarStateOptions<DateType> = {\n ...rest,\n value: selectedDate,\n onChange: value =>\n handleOnChange<DateType>({\n value,\n selectedDate,\n forcedReturnType,\n onChange,\n }),\n locale,\n createCalendar,\n minValue: minDate,\n maxValue: getAdjustedMaxDate(maxDate),\n };\n\n const state = useCalendarState(_props);\n const { calendarProps, prevButtonProps, nextButtonProps, title } =\n useCalendar(_props, state);\n\n useEffect(\n () => rest.onValidate?.(!state.isValueInvalid),\n [state.isValueInvalid],\n );\n\n return (\n <div\n {...calendarProps}\n ref={calendarRef}\n className={classNames('eds-datepicker__calendar', className)}\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 {...rest}\n state={state}\n navigationDescription={navigationDescription}\n onSelectedCellClick={onSelectedCellClick}\n onCellClick={onCellClick}\n classNameForDate={classNameForDate}\n ariaLabelForDate={ariaLabelForDate}\n showWeekNumbers={showWeekNumbers}\n weekNumberHeader={weekNumberHeader}\n showOutsideMonth={showOutsideMonth}\n />\n </div>\n );\n};\n","import React, { ReactNode, useRef } from 'react';\n\nimport {\n DatePickerStateOptions,\n useDatePickerState,\n} 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 { CalendarDate, DateValue } from '@internationalized/date';\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 {\n BaseDateFieldProps,\n DateField,\n ExtendedDateFieldProps,\n} from './DateField';\nimport { Calendar, CalendarProps } from './Calendar';\nimport { CalendarButton } from '../shared/CalendarButton';\nimport { getAdjustedMaxDate, handleOnChange } from '../shared/utils';\n\nimport './DatePicker.scss';\n\ntype BaseDatePickerProps = {\n /** Slå på visning av ukenummere i kalenderen. Overskriften for ukenummer-kolonnen\n * kan endres med prop-en 'weekNumberHeader'\n * @default false */\n showWeekNumbers?: boolean;\n /** Overskrift som vises for ukenummer-kolonnen. Vises kun hvis 'showWeekNumbers' er true.\n * @default '#' */\n weekNumberHeader?: string;\n /** Vis datoer som ligger utenfor den viste måneden.\n * @example Hvis uken starter på onsdag vises de to siste datoene i forrige måned i ruten til mandagen og tirsdagen før.\n * @default false */\n showOutsideMonth?: 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 /** Brukes for å legge til klassenavn på spesifikke datoer i kalenderen.\n * Tar inn en dato og skal returnere klassenavnet som skal legges til den datoen.\n * @default undefined\n * @example (date) => isWeekend(date, 'no-NO') ? 'weekend' : ''\n *\n * OBS: hvis stylingen er meningsbærende bør du bruke ariaLabelForDate i tillegg for å beskrive\n * meningen til skjermlesere o.l.\n */\n classNameForDate?: (date: CalendarDate) => string;\n /** Legger til teksten som returneres på datoen i kalenderen sin aria-label.\n * Bør brukes sammen med classNameForDate hvis styling-endringene gjort der er meningsbærende.\n * @default undefined\n * @example (date) => isWeekend(date, 'no-NO') ? 'helgedag' : ''\n */\n ariaLabelForDate?: (date: CalendarDate) => string;\n};\n\nexport type DatePickerProps<DateType extends DateValue> = Omit<\n BaseDateFieldProps<DateType>,\n | keyof BaseDatePickerProps\n | 'labelProps'\n | 'fieldProps'\n | 'groupProps'\n | 'dateFieldRef'\n> &\n BaseDatePickerProps &\n ExtendedDateFieldProps<DateType>;\n\nexport const DatePicker = <DateType extends DateValue>({\n selectedDate,\n locale,\n disabled,\n readOnly,\n showTime,\n showTimeZone = false,\n classNameForDate,\n className,\n variant,\n feedback,\n validationVariant,\n validationFeedback,\n showWeekNumbers,\n weekNumberHeader,\n showOutsideMonth = false,\n disableModal = false,\n labelTooltip,\n navigationDescription,\n minDate,\n maxDate,\n modalTreshold = 1000,\n ariaLabelForDate,\n append,\n prepend,\n granularity = showTime ? 'minute' : 'day',\n ...rest\n}: DatePickerProps<DateType>) => {\n const CALENDAR_MODAL_MAX_SCREEN_WIDTH = modalTreshold;\n const datePickerRef = useRef<HTMLDivElement | null>(null);\n const calendarRef = useRef<HTMLDivElement | null>(null);\n\n const { width } = useWindowDimensions();\n\n const _props: DatePickerStateOptions<DateType> = {\n ...rest,\n onChange: value =>\n handleOnChange<DateType>({\n value,\n selectedDate,\n forcedReturnType: rest.forcedReturnType,\n onChange: rest.onChange,\n }),\n minValue: minDate,\n // this weird logic makes sure the entire day is included if no time is provided in maxDate\n maxValue: getAdjustedMaxDate(maxDate),\n value: selectedDate,\n granularity,\n isDisabled: disabled || readOnly,\n };\n\n const state = useDatePickerState(_props);\n const {\n groupProps,\n labelProps,\n fieldProps,\n buttonProps,\n dialogProps,\n calendarProps,\n } = useDatePicker(_props, state, datePickerRef);\n\n // calculations for floating-UI popover position\n const { refs, floatingStyles, update } = useFloating({\n whileElementsMounted: (ref, float, update) =>\n autoUpdate(ref, float, update, { elementResize: false }),\n placement: 'bottom-start',\n middleware: [\n offset(space.extraSmall2),\n flip(),\n shift({ padding: space.extraSmall }),\n ],\n });\n\n useOnClickOutside([calendarRef], () => state.setOpen(false));\n\n useOnEscape(calendarRef, () => state.setOpen(false));\n\n const calendarSharedProps: CalendarProps<DateType> = {\n ...dialogProps,\n ...calendarProps,\n // We don't use handleOnChange here since it's handled internally by Calendar\n onChange: rest.onChange,\n forcedReturnType: rest.forcedReturnType,\n disabled,\n navigationDescription,\n onSelectedCellClick: () => state.setOpen(false),\n // onCellClick is a temporary fix solving an issue where the\n // calendar sometimes doesn't close on date selection\n onCellClick: () => state.setOpen(false),\n selectedDate,\n minDate,\n maxDate,\n calendarRef,\n classNameForDate,\n ariaLabelForDate,\n showWeekNumbers,\n weekNumberHeader,\n showOutsideMonth,\n };\n\n const isModal =\n typeof width !== 'undefined' &&\n width <= CALENDAR_MODAL_MAX_SCREEN_WIDTH &&\n !disableModal;\n\n const popoverCalendar = (\n <div\n style={{ ...floatingStyles, zIndex: zIndexes.popover }}\n ref={refs.setFloating}\n >\n <FocusLock disabled={!state.isOpen || isModal} returnFocus>\n {state.isOpen && <Calendar {...calendarSharedProps} />}\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 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 <DateField\n {...(groupProps as any)}\n {...fieldProps}\n // We don't use handleOnChange here since it's handled internally by DateField\n {...rest}\n append={\n !disabled &&\n !readOnly && (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n {append}\n <CalendarButton\n {...buttonProps}\n onPress={() => {\n state.setOpen(!state.isOpen);\n update();\n }}\n className=\"eds-datepicker__open-calendar-button\"\n >\n <CalendarIcon />\n </CalendarButton>\n </div>\n )\n }\n prepend={prepend}\n className={classNames('eds-datepicker', className, {\n 'eds-datepicker--disabled': disabled,\n })}\n disabled={disabled}\n readOnly={readOnly}\n feedback={feedback}\n labelProps={labelProps}\n labelTooltip={labelTooltip}\n maxDate={maxDate}\n minDate={minDate}\n dateFieldRef={node => {\n refs.setReference(node);\n datePickerRef.current = node;\n }}\n selectedDate={selectedDate}\n showTime={showTime}\n showTimeZone={showTimeZone}\n validationFeedback={validationFeedback}\n validationVariant={validationVariant}\n variant={variant}\n />\n {isModal ? modalCalendar : popoverCalendar}\n </ConditionalWrapper>\n );\n};\n","import React from 'react';\nimport {\n BaseFormControl,\n isFilled,\n useInputGroupContext,\n useVariant,\n} from '@entur/form';\nimport { DateIcon } from '@entur/icons';\nimport { useOnMount, useRandomId, VariantType } from '@entur/utils';\n\n/** @deprecated use variant=\"information\" instead */\nconst info = 'info';\n/** @deprecated use variant=\"negative\" instead */\nconst error = 'error';\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 | typeof error | typeof info;\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 | typeof error | typeof info;\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 disabled?: boolean;\n readonly?: boolean;\n 'aria-label': string;\n onClick?: () => void;\n onFocus?: () => void;\n};\n\nexport const TimePickerArrowButton = ({\n direction,\n onClick,\n disabled,\n readonly,\n 'aria-label': ariaLabel,\n ...rest\n}: TimePickerArrowButtonProps) => {\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 {...rest}\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 { now } from '@internationalized/date';\n\nimport type {\n TimeValue,\n AriaTimeFieldProps,\n MappedTimeValue,\n} from '@react-types/datepicker';\n\nimport { VisuallyHidden } from '@entur/a11y';\nimport { BaseFormControl, BaseFormControlProps } from '@entur/form';\nimport { useRandomId, VariantType } from '@entur/utils';\n\nimport { FieldSegment } from '../shared/FieldSegment';\nimport { TimePickerArrowButton } from './TimePickerArrowButton';\nimport {\n convertValueToType,\n focusSegment,\n modulo,\n shouldUseAriaAlert,\n} from '../shared/utils';\n\nimport './TimePicker.scss';\n\n/** @deprecated use variant=\"information\" instead */\nconst info = 'info';\n/** @deprecated use variant=\"negative\" instead */\nconst error = 'error';\n\ntype ExtendedTimePickerProps<TimeType extends TimeValue> = Omit<\n AriaTimeFieldProps<TimeType>,\n | keyof BaseTimePickerProps<TimeValue>\n | 'value'\n | 'hideTimeZone'\n | 'placeholder'\n | 'minValue'\n | 'maxValue'\n> &\n Omit<\n Partial<BaseFormControlProps>,\n | keyof BaseTimePickerProps<TimeType>\n | 'children'\n | 'defaultValue'\n | 'value'\n | 'isFilled'\n | 'size'\n >;\n\ntype BaseTimePickerProps<TimeType extends TimeValue> = {\n /** Den valgte tiden. Tid i '@internationalized/date'-pakkens format */\n selectedTime: TimeType | null;\n /** Kalles når tiden endres. Tid i '@internationalized/date'-pakkens format */\n onChange: (value: MappedTimeValue<TimeType> | null) => void;\n /** Label til TimePicker */\n label: string;\n /** Minutter som legges til eller trekkes fra ved klikk på pilene i TimePicker.\n * Rundes av til nærmeste hele 'minuteIncrement' som går opp i 60.\n *\n * OBS: Støtter kun verdier <= 60 og multiplum av 60.\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 /** Viser sekunder i tillegg til minutter og timer\n * @default false\n */\n showSeconds?: 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 | typeof error | typeof info;\n labelTooltip?: React.ReactNode;\n disabled?: boolean;\n readOnly?: boolean;\n inputRef?: React.ForwardedRef<HTMLDivElement>;\n /** Tvinger typen på onChange til den gitte typen.\n * Dette er nyttig når utgangsverdien din er 'null', men du ønsker at\n * TimePicker alltid skal returnere f.eks Time.\n *\n * Som standard returnerer onChange TimeValue basert på selectedTime,\n * eller ZonedDateTime hvis selectedTime er 'null'.\n *\n * @default undefined\n */\n forcedReturnType?: 'Time' | 'CalendarDateTime' | 'ZonedDateTime';\n forcedTimeZone?: string;\n /** Ekstra klassenavn */\n className?: string;\n style?: React.CSSProperties;\n};\n\nexport type TimePickerProps<TimeType extends TimeValue> =\n BaseTimePickerProps<TimeType> & ExtendedTimePickerProps<TimeType>;\n\nexport const TimePicker = <TimeType extends TimeValue>({\n selectedTime,\n onChange,\n disabled,\n readOnly,\n className,\n style,\n label,\n labelTooltip,\n feedback,\n granularity,\n variant,\n locale: customLocale,\n showTimeZone,\n showSeconds = false,\n minuteIncrementForArrowButtons = 30,\n leftArrowButtonAriaLabel = `Trekk fra ${minuteIncrementForArrowButtons} minutter`,\n rightArrowButtonAriaLabel = `Legg til ${minuteIncrementForArrowButtons} minutter`,\n inputRef,\n forcedReturnType,\n forcedTimeZone,\n append,\n prepend,\n ...rest\n}: TimePickerProps<TimeType>) => {\n let { locale } = useLocale();\n if (customLocale) locale = customLocale;\n const timePickerId = useRandomId('eds-timepicker');\n\n const timeZone =\n forcedTimeZone ??\n (selectedTime !== null && 'timezone' in selectedTime\n ? (selectedTime.timezone as string)\n : 'Europe/Oslo');\n\n const handleOnChange = (value: MappedTimeValue<TimeType> | null) => {\n if (forcedReturnType !== undefined || !selectedTime) {\n return onChange(\n convertValueToType({\n value,\n type: forcedReturnType ?? 'ZonedDateTime',\n timezone: timeZone,\n }) as MappedTimeValue<TimeType> | null,\n );\n }\n\n onChange(value);\n };\n\n const state = useTimeFieldState({\n onChange: handleOnChange,\n label: label,\n locale,\n value: selectedTime,\n granularity: granularity ?? showSeconds ? 'second' : 'minute',\n hideTimeZone: !showTimeZone,\n isDisabled: disabled || readOnly,\n shouldForceLeadingZeros: true,\n ...rest,\n });\n const timeFieldRef = useRef<HTMLDivElement>(null);\n const { labelProps, fieldProps } = useTimeField<TimeType>(\n { ...rest, label: label },\n state,\n timeFieldRef,\n );\n const id = useRandomId('timepicker');\n\n const getCurrentTime = () => {\n const getCurrentTimeWithCorrectType = convertValueToType({\n value: now(timeZone),\n type: forcedReturnType ?? 'ZonedDateTime',\n }) as MappedTimeValue<TimeType>;\n return getCurrentTimeWithCorrectType;\n };\n\n const handleOnClickArrowButton = (operation: 'add' | 'subtract') => {\n if (selectedTime === null) return handleOnChange(getCurrentTime());\n switch (operation) {\n case 'add':\n return handleOnChange(\n selectedTime.add({\n minutes:\n minuteIncrementForArrowButtons -\n modulo(selectedTime.minute, minuteIncrementForArrowButtons),\n }) as MappedTimeValue<TimeType>,\n );\n case 'subtract':\n return handleOnChange(\n selectedTime.subtract({\n minutes:\n modulo(selectedTime.minute - 1, minuteIncrementForArrowButtons) +\n 1,\n }) as MappedTimeValue<TimeType>,\n );\n }\n };\n\n return (\n <I18nProvider locale={locale}>\n <BaseFormControl\n append={\n <div style={{ display: 'flex', alignItems: 'center' }}>\n {append}\n <TimePickerArrowButton\n direction=\"right\"\n disabled={disabled || readOnly}\n aria-label={rightArrowButtonAriaLabel}\n onClick={() => handleOnClickArrowButton('add')}\n onFocus={() => focusSegment(timeFieldRef, 'last')}\n />\n </div>\n }\n ariaAlertOnFeedback={shouldUseAriaAlert(variant)}\n aria-describedby={timePickerId + 'description'}\n className={classNames('eds-timepicker', className, {\n 'eds-timepicker--disabled': disabled,\n 'eds-timepicker--has-tooltip': labelTooltip !== undefined,\n 'eds-timepicker--readonly': readOnly,\n })}\n disabled={disabled}\n readOnly={readOnly}\n disableLabelAnimation\n feedback={feedback}\n label={label}\n labelId={id}\n labelProps={{\n ...labelProps,\n 'aria-describedby': timePickerId + 'description',\n }}\n labelTooltip={labelTooltip}\n prepend={\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <TimePickerArrowButton\n direction=\"left\"\n disabled={disabled || readOnly}\n aria-label={leftArrowButtonAriaLabel}\n onClick={() => handleOnClickArrowButton('subtract')}\n onFocus={() => focusSegment(timeFieldRef, 'first')}\n />\n {prepend}\n </div>\n }\n ref={inputRef}\n style={style}\n variant={variant}\n >\n <span\n ref={timeFieldRef}\n {...fieldProps}\n style={{ display: 'contents' }}\n >\n {state.segments.map((segment, i) => (\n <FieldSegment\n segment={segment}\n state={state}\n key={i}\n aria-describedby={timePickerId + 'description'}\n />\n ))}\n </span>\n <VisuallyHidden id={timePickerId + 'description'}>\n {selectedTime !== null\n ? 'valgt tid: ' +\n selectedTime.hour.toString().padStart(2, '0') +\n ':' +\n selectedTime.minute.toString().padStart(2, '0') +\n (showSeconds\n ? ':' + selectedTime.second.toString().padStart(2, '0')\n : '')\n : ''}\n </VisuallyHidden>\n </BaseFormControl>\n </I18nProvider>\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport {\n BaseFormControl,\n isFilled,\n useInputGroupContext,\n useVariant,\n} from '@entur/form';\nimport { useOnMount, useRandomId, VariantType } from '@entur/utils';\n\nimport './NativeTimePicker.scss';\n\n/** @deprecated use variant=\"information\" instead */\nconst info = 'info';\n/** @deprecated use variant=\"negative\" instead */\nconst error = 'error';\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 | typeof error | typeof info;\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 | typeof error | typeof info;\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 React, { useEffect, useRef, useState } from 'react';\nimport { Time, parseTime, toTime } from '@internationalized/date';\nimport { useTimeField } from '@react-aria/datepicker';\nimport { I18nProvider, useLocale } from '@react-aria/i18n';\nimport { useTimeFieldState } from '@react-stately/datepicker';\nimport classNames from 'classnames';\n\nimport type {\n TimeValue,\n AriaTimeFieldProps,\n MappedTimeValue,\n} from '@react-types/datepicker';\n\nimport { BaseFormControlProps, TextField } from '@entur/form';\nimport { ClockIcon } from '@entur/icons';\nimport { mergeRefs, VariantType } from '@entur/utils';\n\nimport './SimpleTimePicker.scss';\n\nenum inputResult {\n RESET_TIME,\n INVALID,\n}\n\n/** @deprecated use variant=\"information\" instead */\nconst info = 'info';\n/** @deprecated use variant=\"negative\" instead */\nconst error = 'error';\n\ntype ExtendedSimpleTimePickerProps<TimeType extends TimeValue> = Omit<\n AriaTimeFieldProps<TimeType>,\n | keyof BaseSimpleTimePickerProps<TimeType>\n | 'value'\n | 'hideTimeZone'\n | 'placeholder'\n | 'minValue'\n | 'maxValue'\n | 'locale'\n | 'isReadOnly'\n | 'isDisabled'\n | 'locale'\n> &\n Omit<\n Partial<BaseFormControlProps>,\n | keyof BaseSimpleTimePickerProps<TimeType>\n | 'children'\n | 'defaultValue'\n | 'value'\n | 'isFilled'\n | 'size'\n >;\n\ntype BaseSimpleTimePickerProps<TimeType extends TimeValue> = {\n /** Den valgte tiden. Tid i '@internationalized/date'-pakkens format */\n selectedTime: TimeType | null;\n /** Kalles når tiden endres. Tid i '@internationalized/date'-pakkens format */\n onChange?: (\n value: MappedTimeValue<TimeType> | null,\n ) => void | React.Dispatch<React.SetStateAction<TimeValue | null>>;\n /** Label til TimePicker */\n label: string;\n /** Viser sekund i tillegg til time og minutt\n * @default false\n */\n showSeconds?: boolean;\n /** Viser et klokkeikonet for å klarere indikere at dette\n * er en tidsvelger\n * @default false\n */\n showClockIcon?: boolean | 'right' | 'left';\n /** Velger hvor mye luft det skal være på sidene av klokkeslettet\n * @default 'default'\n */\n padding?: 'default' | 'large';\n /** Varselmelding, som vil komme under TimePicker */\n feedback?: string;\n /** Valideringsvariant*/\n variant?: VariantType | typeof error | typeof info;\n /** Tekst eller ikon som vises foran skjema-elementet */\n prepend?: React.ReactNode;\n /** Tekst eller ikon som vises etter skjema-elementet */\n append?: React.ReactNode;\n labelTooltip?: React.ReactNode;\n disabled?: boolean;\n readOnly?: boolean;\n inputRef?: React.ForwardedRef<HTMLInputElement>;\n /** Ekstra klassenavn */\n className?: string;\n style?: React.CSSProperties;\n};\n\nexport type SimpleTimePickerProps<TimeType extends TimeValue> =\n BaseSimpleTimePickerProps<TimeType> & ExtendedSimpleTimePickerProps<TimeType>;\n\nexport const SimpleTimePicker = <TimeType extends TimeValue>({\n append,\n className,\n disabled,\n feedback,\n showClockIcon = 'right',\n inputRef,\n label,\n labelTooltip,\n onChange,\n padding = 'default',\n prepend,\n readOnly,\n selectedTime,\n showSeconds,\n style,\n variant,\n ...rest\n}: SimpleTimePickerProps<TimeType>) => {\n const [inputText, setInputText] = useState('');\n const timeFieldRef = useRef<HTMLInputElement>(null);\n const [lastValidSelectedTime, setLastValidSelectedTime] =\n useState<MappedTimeValue<TimeType> | null>(null);\n\n const { locale } = useLocale();\n\n const state = useTimeFieldState({\n onChange,\n label: label,\n locale,\n value: selectedTime,\n hideTimeZone: true,\n isDisabled: disabled,\n isReadOnly: readOnly,\n ...rest,\n });\n const { labelProps, fieldProps } = useTimeField<TimeType>(\n { ...rest, label: label },\n state,\n timeFieldRef,\n );\n\n useEffect(() => {\n updateInputWithSelectedTime();\n // @ts-expect-error TimeType and MappedTimeValue<TimeType> is actually the same\n if (selectedTime !== null) setLastValidSelectedTime(selectedTime);\n }, [selectedTime?.toString()]);\n\n const updateInputWithSelectedTime = () => {\n const selectedTimeString = getStringFromTimeValue(selectedTime);\n setInputText(selectedTimeString);\n\n const timeFieldIsFocused = document.activeElement === timeFieldRef?.current;\n if (selectedTimeString === '' && !timeFieldIsFocused)\n addPlaceholderToInput();\n };\n\n const getStringFromTimeValue = (timeValue: TimeValue | null) => {\n if (timeValue === null) return '';\n\n const timeObject = 'day' in timeValue ? toTime(timeValue) : timeValue;\n\n if (showSeconds) return timeObject.toString().slice(0, 8);\n\n return timeObject.toString().slice(0, 5);\n };\n\n const addPlaceholderToInput = () => {\n if (showSeconds) setInputText('–– : –– : ––');\n else setInputText('–– : ––');\n };\n\n const handleChangeTime = () => {\n const newTime = getValueForOnChangeFromInput();\n\n if (newTime === inputResult.INVALID) {\n return updateInputWithSelectedTime();\n }\n\n if (newTime?.toString() !== selectedTime?.toString()) onChange?.(newTime);\n };\n\n const getValueForOnChangeFromInput = () => {\n const formatedTimeString = formatTimeString(inputText);\n const newTimeObject = formatedTimeStringToTimeObject(formatedTimeString);\n\n if (newTimeObject === inputResult.INVALID) {\n return inputResult.INVALID;\n }\n if (newTimeObject === inputResult.RESET_TIME) {\n return null;\n }\n\n const updatedSelectedTime =\n getSelectedTimeWithTimeFromObject(newTimeObject);\n\n return updatedSelectedTime;\n };\n\n const formatTimeString = (timeString: string): string | inputResult => {\n if (timeString.length === 0) return inputResult.RESET_TIME;\n if (timeString.length < 3 || timeString.length > 8)\n return inputResult.INVALID;\n\n const numberOfColons = (timeString.match(new RegExp(':', 'g')) || [])\n .length;\n const stringLength = timeString.length;\n\n // targets 'd:dd:dd' and 'dd:dd:dd'\n if (numberOfColons === 2 && stringLength >= 7) {\n return timeString.padStart(8, '0');\n }\n\n // targets 'd:dd' and 'dd:dd'\n if (numberOfColons === 1) {\n return timeString.padStart(5, '0');\n }\n\n if (stringLength > 6) return inputResult.INVALID;\n\n const stringLengthIsEven = stringLength % 2 == 0;\n\n const hourString = stringLengthIsEven\n ? timeString.slice(0, 2)\n : timeString.slice(0, 1);\n const minuteString = stringLengthIsEven\n ? timeString.slice(2, 4)\n : timeString.slice(1, 3);\n const secondString = (() => {\n const stringSlice = stringLengthIsEven\n ? timeString.slice(4, 6)\n : timeString.slice(3, 5);\n if (stringSlice === '') return '00';\n return stringSlice;\n })();\n\n const timeStringWithColon =\n hourString.padStart(2, '0') +\n ':' +\n minuteString +\n (showSeconds ? ':' + secondString : '');\n\n return timeStringWithColon;\n };\n\n const formatedTimeStringToTimeObject = (\n formatedTimeString: string | inputResult,\n ): Time | inputResult => {\n if (formatedTimeString === inputResult.INVALID) return inputResult.INVALID;\n if (formatedTimeString === inputResult.RESET_TIME)\n return inputResult.RESET_TIME;\n\n const isNumberTest = /^\\d+$/;\n const hourString = formatedTimeString.slice(0, 2);\n const minuteString = formatedTimeString.slice(3, 5);\n const secondString = formatedTimeString.slice(6, 8);\n if (\n hourString.match(isNumberTest) &&\n minuteString.match(isNumberTest) &&\n (secondString === '' || secondString.match(isNumberTest))\n ) {\n try {\n const timeObject = parseTime(formatedTimeString);\n return timeObject;\n } catch (e) {\n return inputResult.INVALID;\n }\n }\n\n return inputResult.INVALID;\n };\n\n const getSelectedTimeWithTimeFromObject = (\n newTime: Time,\n ): MappedTimeValue<TimeType> => {\n const selectedTimeWithUpdateTime = (\n lastValidSelectedTime ?? new Time()\n ).set({\n hour: newTime.hour,\n minute: newTime.minute,\n second: newTime.second,\n }) as MappedTimeValue<TimeType>;\n\n return selectedTimeWithUpdateTime;\n };\n\n const {\n onBlur,\n onClick,\n onDragStart,\n onFocus,\n onKeyDown,\n onKeyUp,\n onMouseDown,\n onPointerDown,\n onPointerUp,\n ...usedFieldProps\n } = fieldProps;\n\n return (\n <I18nProvider locale={locale}>\n <TextField\n append={\n append ||\n (showClockIcon === true || showClockIcon === 'right' ? (\n <ClockIcon onClick={() => timeFieldRef?.current?.focus()} inline />\n ) : undefined)\n }\n className={classNames('eds-simple-timepicker', {\n 'eds-simple-timepicker--padding-large': padding === 'large',\n 'eds-simple-timepicker--show-seconds': showSeconds,\n 'eds-simple-timepicker--hide-clock': !showClockIcon,\n 'eds-simple-timepicker--has-tooltip': labelTooltip !== undefined,\n })}\n disabled={disabled}\n disableLabelAnimation\n feedback={feedback}\n label={label}\n labelProps={labelProps}\n labelTooltip={labelTooltip}\n onBlur={() => {\n handleChangeTime();\n if (selectedTime === null) {\n addPlaceholderToInput();\n }\n }}\n onChange={e => setInputText(e.target.value)}\n onFocus={() => {\n if (selectedTime === null) {\n setInputText('');\n }\n }}\n onKeyDown={({ key }) => {\n if (key === 'Enter') handleChangeTime();\n }}\n placeholder={showSeconds ? '–– : –– : ––' : '–– : ––'}\n prepend={\n prepend ||\n (showClockIcon === 'left' ? (\n <ClockIcon onClick={() => timeFieldRef?.current?.focus()} />\n ) : undefined)\n }\n readOnly={readOnly}\n ref={mergeRefs(timeFieldRef, inputRef)}\n style={style}\n value={inputText}\n variant={variant}\n {...usedFieldProps}\n />\n </I18nProvider>\n );\n};\n","import { warnAboutMissingStyles } from '@entur/utils';\nimport './index.scss';\n\nwarnAboutMissingStyles('datepicker', 'form', 'icons');\n\nexport * from './DatePicker';\nexport * from './TimePicker';\nexport * from './shared';\n\nexport {\n CalendarDate,\n CalendarDateTime,\n ZonedDateTime,\n Time,\n} from '@internationalized/date';\nexport type { TimeValue, DateValue } from '@react-types/datepicker';\n"],"names":["useRef","useDateSegment","jsx","date","ZonedDateTime","parseAbsolute","CalendarDateTime","CalendarDate","Time","getLocalTimeZone","GregorianCalendar","toCalendarDateTime","today","toCalendarDate","toZoned","toTime","now","startOfWeek","startOfYear","useLocale","useDateFieldState","useDateField","useEffect","useRandomId","ConditionalWrapper","I18nProvider","BaseFormControl","mergeRefs","useButton","IconButton","useCalendarCell","isEqualDay","useCalendarGrid","getWeeksInMonth","jsxs","Fragment","VisuallyHidden","useCalendarState","useCalendar","LeftArrowIcon","RightArrowIcon","useWindowDimensions","useDatePickerState","useDatePicker","useFloating","update","autoUpdate","offset","space","flip","shift","useOnClickOutside","useOnEscape","zIndexes","Modal","CalendarIcon","DateIcon","useVariant","useInputGroupContext","useOnMount","isFilled","handleOnChange","useTimeFieldState","useTimeField","useState","parseTime","TextField","ClockIcon","warnAboutMissingStyles"],"mappings":"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"}
@@ -196,6 +196,16 @@ function getAdjustedMaxDate(maxDate) {
196
196
  if (maxDate !== void 0) return lastMillisecondOfDay(maxDate);
197
197
  return void 0;
198
198
  }
199
+ function shouldUseAriaAlert(variant) {
200
+ if (!variant) return false;
201
+ if (variant === "negative" || variant === "error") {
202
+ return "alert";
203
+ }
204
+ if (variant === "warning") {
205
+ return "status";
206
+ }
207
+ return false;
208
+ }
199
209
  const DateField = ({
200
210
  selectedDate,
201
211
  onChange,
@@ -258,7 +268,9 @@ const DateField = ({
258
268
  BaseFormControl,
259
269
  {
260
270
  append,
261
- ariaAlertOnFeedback: true,
271
+ ariaAlertOnFeedback: shouldUseAriaAlert(
272
+ variant ?? (state.isInvalid ? validationVariant : void 0)
273
+ ),
262
274
  className: classNames("eds-datefield", className, {
263
275
  "eds-datefield--has-tooltip": labelTooltip !== void 0
264
276
  }),
@@ -929,7 +941,7 @@ const TimePicker = ({
929
941
  }
930
942
  )
931
943
  ] }),
932
- ariaAlertOnFeedback: true,
944
+ ariaAlertOnFeedback: shouldUseAriaAlert(variant),
933
945
  "aria-describedby": timePickerId + "description",
934
946
  className: classNames("eds-timepicker", className, {
935
947
  "eds-timepicker--disabled": disabled,
@@ -1256,6 +1268,7 @@ export {
1256
1268
  modulo,
1257
1269
  nativeDateToDateValue,
1258
1270
  nativeDateToTimeValue,
1271
+ shouldUseAriaAlert,
1259
1272
  timeOrDateValueToNativeDate
1260
1273
  };
1261
1274
  //# sourceMappingURL=datepicker.esm.js.map