@react-aria/calendar 3.0.0-nightly.3168 → 3.0.0-nightly.3180
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.js +45 -15
- package/dist/main.js.map +1 -1
- package/dist/module.js +46 -16
- package/dist/module.js.map +1 -1
- package/dist/types.d.ts +14 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +11 -11
- package/src/useCalendarBase.ts +22 -2
- package/src/useCalendarCell.ts +28 -9
- package/src/useCalendarGrid.ts +2 -2
- package/src/useRangeCalendar.ts +1 -1
- package/src/utils.ts +4 -2
package/dist/module.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {announce as $amWdn$announce} from "@react-aria/live-announcer";
|
|
2
2
|
import {useId as $amWdn$useId, useUpdateEffect as $amWdn$useUpdateEffect, useDescription as $amWdn$useDescription, mergeProps as $amWdn$mergeProps, useEvent as $amWdn$useEvent, useLabels as $amWdn$useLabels, focusWithoutScrolling as $amWdn$focusWithoutScrolling} from "@react-aria/utils";
|
|
3
3
|
import {useMessageFormatter as $amWdn$useMessageFormatter, useDateFormatter as $amWdn$useDateFormatter, useLocale as $amWdn$useLocale} from "@react-aria/i18n";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import {useRef as $amWdn$useRef, useMemo as $amWdn$useMemo, useEffect as $amWdn$useEffect} from "react";
|
|
5
|
+
import {isSameDay as $amWdn$isSameDay, startOfMonth as $amWdn$startOfMonth, endOfMonth as $amWdn$endOfMonth, startOfWeek as $amWdn$startOfWeek, isEqualDay as $amWdn$isEqualDay, isToday as $amWdn$isToday} from "@internationalized/date";
|
|
6
6
|
import {usePress as $amWdn$usePress} from "@react-aria/interactions";
|
|
7
7
|
|
|
8
8
|
function $parcel$export(e, n, v, s) {
|
|
@@ -228,11 +228,13 @@ function $a074e1e2d0f0a665$export$31afe65d91ef6e8(startDate, endDate, timeZone)
|
|
|
228
228
|
month: 'long',
|
|
229
229
|
year: 'numeric',
|
|
230
230
|
era: startDate.calendar.identifier !== 'gregory' ? 'long' : undefined,
|
|
231
|
-
calendar: startDate.calendar.identifier
|
|
231
|
+
calendar: startDate.calendar.identifier,
|
|
232
|
+
timeZone: timeZone
|
|
232
233
|
});
|
|
233
234
|
let dateFormatter = $amWdn$useDateFormatter({
|
|
234
235
|
dateStyle: 'long',
|
|
235
|
-
calendar: startDate.calendar.identifier
|
|
236
|
+
calendar: startDate.calendar.identifier,
|
|
237
|
+
timeZone: timeZone
|
|
236
238
|
});
|
|
237
239
|
return $amWdn$useMemo(()=>{
|
|
238
240
|
// Special case for month granularity. Format as a single month if only a
|
|
@@ -255,6 +257,7 @@ function $a074e1e2d0f0a665$export$31afe65d91ef6e8(startDate, endDate, timeZone)
|
|
|
255
257
|
|
|
256
258
|
|
|
257
259
|
|
|
260
|
+
|
|
258
261
|
function $c4acc1de3ab169cf$export$d652b3ea2d672d5b(props, state) {
|
|
259
262
|
let formatMessage = $amWdn$useMessageFormatter((/*@__PURE__*/$parcel$interopDefault($0fbdc3429b133a50$exports)));
|
|
260
263
|
let calendarId = $amWdn$useId(props.id);
|
|
@@ -277,6 +280,19 @@ function $c4acc1de3ab169cf$export$d652b3ea2d672d5b(props, state) {
|
|
|
277
280
|
let descriptionProps = $amWdn$useDescription(visibleRangeDescription);
|
|
278
281
|
// Label the child grid elements by the group element if it is labelled.
|
|
279
282
|
$a074e1e2d0f0a665$export$3ddff89c59628ee7.set(state, props['aria-label'] || props['aria-labelledby'] ? calendarId : null);
|
|
283
|
+
// If the next or previous buttons become disabled while they are focused, move focus to the calendar body.
|
|
284
|
+
let nextFocused = $amWdn$useRef(false);
|
|
285
|
+
let nextDisabled = props.isDisabled || state.isNextVisibleRangeInvalid();
|
|
286
|
+
if (nextDisabled && nextFocused.current) {
|
|
287
|
+
nextFocused.current = false;
|
|
288
|
+
state.setFocused(true);
|
|
289
|
+
}
|
|
290
|
+
let previousFocused = $amWdn$useRef(false);
|
|
291
|
+
let previousDisabled = props.isDisabled || state.isPreviousVisibleRangeInvalid();
|
|
292
|
+
if (previousDisabled && previousFocused.current) {
|
|
293
|
+
previousFocused.current = false;
|
|
294
|
+
state.setFocused(true);
|
|
295
|
+
}
|
|
280
296
|
return {
|
|
281
297
|
calendarProps: $amWdn$mergeProps(descriptionProps, {
|
|
282
298
|
role: 'group',
|
|
@@ -288,13 +304,19 @@ function $c4acc1de3ab169cf$export$d652b3ea2d672d5b(props, state) {
|
|
|
288
304
|
onPress: ()=>state.focusNextPage()
|
|
289
305
|
,
|
|
290
306
|
'aria-label': formatMessage('next'),
|
|
291
|
-
isDisabled:
|
|
307
|
+
isDisabled: nextDisabled,
|
|
308
|
+
onFocus: ()=>nextFocused.current = true
|
|
309
|
+
,
|
|
310
|
+
onBlur: ()=>nextFocused.current = false
|
|
292
311
|
},
|
|
293
312
|
prevButtonProps: {
|
|
294
313
|
onPress: ()=>state.focusPreviousPage()
|
|
295
314
|
,
|
|
296
315
|
'aria-label': formatMessage('previous'),
|
|
297
|
-
isDisabled:
|
|
316
|
+
isDisabled: previousDisabled,
|
|
317
|
+
onFocus: ()=>previousFocused.current = true
|
|
318
|
+
,
|
|
319
|
+
onBlur: ()=>previousFocused.current = false
|
|
298
320
|
},
|
|
299
321
|
title: visibleRangeDescription
|
|
300
322
|
};
|
|
@@ -338,7 +360,7 @@ function $46a4342aab3d8076$export$87e0539f600c24e5(props, state, ref2) {
|
|
|
338
360
|
if (!state.anchorDate) return;
|
|
339
361
|
let target = e.target;
|
|
340
362
|
let body = document.getElementById(res.calendarProps.id);
|
|
341
|
-
if ((!body.contains(target) || target.
|
|
363
|
+
if ((!body.contains(target) || !target.closest('[role="button"]')) && !((ref = document.getElementById(res.nextButtonProps.id)) === null || ref === void 0 ? void 0 : ref.contains(target)) && !((ref1 = document.getElementById(res.prevButtonProps.id)) === null || ref1 === void 0 ? void 0 : ref1.contains(target))) state.selectFocusedDate();
|
|
342
364
|
};
|
|
343
365
|
$amWdn$useEvent($amWdn$useRef(window), 'pointerup', endDragging);
|
|
344
366
|
$amWdn$useEvent($amWdn$useRef(window), 'pointercancel', endDragging);
|
|
@@ -423,10 +445,12 @@ function $e3031d1f8c9d64eb$export$cb95147730a423f5(props, state) {
|
|
|
423
445
|
'aria-labelledby': $a074e1e2d0f0a665$export$3ddff89c59628ee7.get(state)
|
|
424
446
|
});
|
|
425
447
|
let dayFormatter = $amWdn$useDateFormatter({
|
|
426
|
-
weekday: 'narrow'
|
|
448
|
+
weekday: 'narrow',
|
|
449
|
+
timeZone: state.timeZone
|
|
427
450
|
});
|
|
428
451
|
let dayFormatterLong = $amWdn$useDateFormatter({
|
|
429
|
-
weekday: 'long'
|
|
452
|
+
weekday: 'long',
|
|
453
|
+
timeZone: state.timeZone
|
|
430
454
|
});
|
|
431
455
|
let { locale: locale } = $amWdn$useLocale();
|
|
432
456
|
let weekStart = $amWdn$startOfWeek(state.visibleRange.start, locale);
|
|
@@ -484,6 +508,8 @@ function $36a0ac60f04457c5$export$136073280381448e(props, state, ref) {
|
|
|
484
508
|
let isSelected = state.isSelected(date);
|
|
485
509
|
let isFocused = state.isCellFocused(date);
|
|
486
510
|
isDisabled = isDisabled || state.isCellDisabled(date);
|
|
511
|
+
let isUnavailable = state.isCellUnavailable(date);
|
|
512
|
+
let isSelectable = !isDisabled && !isUnavailable;
|
|
487
513
|
// For performance, reuse the same date object as before if the new date prop is the same.
|
|
488
514
|
// This allows subsequent useMemo results to be reused.
|
|
489
515
|
let lastDate = $amWdn$useRef(null);
|
|
@@ -515,7 +541,7 @@ function $36a0ac60f04457c5$export$136073280381448e(props, state, ref) {
|
|
|
515
541
|
]);
|
|
516
542
|
// When a cell is focused and this is a range calendar, add a prompt to help
|
|
517
543
|
// screenreader users know that they are in a range selection mode.
|
|
518
|
-
if ('anchorDate' in state && isFocused && !state.isReadOnly) {
|
|
544
|
+
if ('anchorDate' in state && isFocused && !state.isReadOnly && isSelectable) {
|
|
519
545
|
let rangeSelectionPrompt = '';
|
|
520
546
|
// If selection has started add "click to finish selecting range"
|
|
521
547
|
if (state.anchorDate) rangeSelectionPrompt = formatMessage('finishRangeSelectionPrompt');
|
|
@@ -531,7 +557,7 @@ function $36a0ac60f04457c5$export$136073280381448e(props, state, ref) {
|
|
|
531
557
|
// again to trigger onPressStart. Cancel presses immediately when the pointer exits.
|
|
532
558
|
shouldCancelOnPointerExit: 'anchorDate' in state && !!state.anchorDate,
|
|
533
559
|
preventFocusOnPress: true,
|
|
534
|
-
isDisabled:
|
|
560
|
+
isDisabled: !isSelectable,
|
|
535
561
|
onPressStart (e) {
|
|
536
562
|
if (state.isReadOnly) {
|
|
537
563
|
state.setFocusedDate(date);
|
|
@@ -608,7 +634,10 @@ function $36a0ac60f04457c5$export$136073280381448e(props, state, ref) {
|
|
|
608
634
|
let nextDay = date.add({
|
|
609
635
|
days: 1
|
|
610
636
|
});
|
|
611
|
-
if (
|
|
637
|
+
if (state.isInvalid(nextDay)) nextDay = date.subtract({
|
|
638
|
+
days: 1
|
|
639
|
+
});
|
|
640
|
+
if (!state.isInvalid(nextDay)) state.setFocusedDate(nextDay);
|
|
612
641
|
} else if (e.pointerType === 'virtual') {
|
|
613
642
|
// For screen readers, just select the date on click.
|
|
614
643
|
state.selectDate(date);
|
|
@@ -639,8 +668,8 @@ function $36a0ac60f04457c5$export$136073280381448e(props, state, ref) {
|
|
|
639
668
|
return {
|
|
640
669
|
cellProps: {
|
|
641
670
|
role: 'gridcell',
|
|
642
|
-
'aria-disabled':
|
|
643
|
-
'aria-selected': isSelected
|
|
671
|
+
'aria-disabled': !isSelectable || null,
|
|
672
|
+
'aria-selected': isSelectable ? isSelected : null
|
|
644
673
|
},
|
|
645
674
|
buttonProps: $amWdn$mergeProps(pressProps, {
|
|
646
675
|
onFocus () {
|
|
@@ -648,11 +677,11 @@ function $36a0ac60f04457c5$export$136073280381448e(props, state, ref) {
|
|
|
648
677
|
},
|
|
649
678
|
tabIndex: tabIndex,
|
|
650
679
|
role: 'button',
|
|
651
|
-
'aria-disabled':
|
|
680
|
+
'aria-disabled': !isSelectable || null,
|
|
652
681
|
'aria-label': label,
|
|
653
682
|
onPointerEnter (e) {
|
|
654
683
|
// Highlight the date on hover or drag over a date when selecting a range.
|
|
655
|
-
if ('highlightDate' in state && (e.pointerType !== 'touch' || state.isDragging)) state.highlightDate(date);
|
|
684
|
+
if ('highlightDate' in state && (e.pointerType !== 'touch' || state.isDragging) && isSelectable) state.highlightDate(date);
|
|
656
685
|
},
|
|
657
686
|
onPointerDown (e) {
|
|
658
687
|
// This is necessary on touch devices to allow dragging
|
|
@@ -669,6 +698,7 @@ function $36a0ac60f04457c5$export$136073280381448e(props, state, ref) {
|
|
|
669
698
|
isFocused: isFocused,
|
|
670
699
|
isSelected: isSelected,
|
|
671
700
|
isDisabled: isDisabled,
|
|
701
|
+
isUnavailable: isUnavailable,
|
|
672
702
|
isOutsideVisibleRange: date.compare(state.visibleRange.start) < 0 || date.compare(state.visibleRange.end) > 0,
|
|
673
703
|
formattedDate: formattedDate
|
|
674
704
|
};
|
package/dist/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/@react-aria/calendar/src/index.ts","packages/@react-aria/calendar/src/useCalendar.ts","packages/@react-aria/calendar/src/useCalendarBase.ts","packages/@react-aria/calendar/src/utils.ts","packages/@react-aria/calendar/intl/*.js","packages/@react-aria/calendar/intl/ar-AE.json","packages/@react-aria/calendar/intl/bg-BG.json","packages/@react-aria/calendar/intl/cs-CZ.json","packages/@react-aria/calendar/intl/da-DK.json","packages/@react-aria/calendar/intl/de-DE.json","packages/@react-aria/calendar/intl/el-GR.json","packages/@react-aria/calendar/intl/en-US.json","packages/@react-aria/calendar/intl/es-ES.json","packages/@react-aria/calendar/intl/et-EE.json","packages/@react-aria/calendar/intl/fi-FI.json","packages/@react-aria/calendar/intl/fr-FR.json","packages/@react-aria/calendar/intl/he-IL.json","packages/@react-aria/calendar/intl/hr-HR.json","packages/@react-aria/calendar/intl/hu-HU.json","packages/@react-aria/calendar/intl/it-IT.json","packages/@react-aria/calendar/intl/ja-JP.json","packages/@react-aria/calendar/intl/ko-KR.json","packages/@react-aria/calendar/intl/lt-LT.json","packages/@react-aria/calendar/intl/lv-LV.json","packages/@react-aria/calendar/intl/nb-NO.json","packages/@react-aria/calendar/intl/nl-NL.json","packages/@react-aria/calendar/intl/pl-PL.json","packages/@react-aria/calendar/intl/pt-BR.json","packages/@react-aria/calendar/intl/pt-PT.json","packages/@react-aria/calendar/intl/ro-RO.json","packages/@react-aria/calendar/intl/ru-RU.json","packages/@react-aria/calendar/intl/sk-SK.json","packages/@react-aria/calendar/intl/sl-SI.json","packages/@react-aria/calendar/intl/sr-SP.json","packages/@react-aria/calendar/intl/sv-SE.json","packages/@react-aria/calendar/intl/tr-TR.json","packages/@react-aria/calendar/intl/uk-UA.json","packages/@react-aria/calendar/intl/zh-CN.json","packages/@react-aria/calendar/intl/zh-TW.json","packages/@react-aria/calendar/src/useRangeCalendar.ts","packages/@react-aria/calendar/src/useCalendarGrid.ts","packages/@react-aria/calendar/src/useCalendarCell.ts","packages/@react-aria/calendar/src/types.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nexport * from './useCalendar';\nexport * from './useRangeCalendar';\nexport * from './useCalendarGrid';\nexport * from './useCalendarCell';\nexport * from './types';\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CalendarAria} from './types';\nimport {CalendarProps, DateValue} from '@react-types/calendar';\nimport {CalendarState} from '@react-stately/calendar';\nimport {useCalendarBase} from './useCalendarBase';\n\n/**\n * Provides the behavior and accessibility implementation for a calendar component.\n * A calendar displays one or more date grids and allows users to select a single date.\n */\nexport function useCalendar<T extends DateValue>(props: CalendarProps<T>, state: CalendarState): CalendarAria {\n return useCalendarBase(props, state);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {announce} from '@react-aria/live-announcer';\nimport {CalendarAria} from './types';\nimport {calendarIds, useSelectedDateDescription, useVisibleRangeDescription} from './utils';\nimport {CalendarPropsBase} from '@react-types/calendar';\nimport {CalendarState, RangeCalendarState} from '@react-stately/calendar';\nimport {DOMProps} from '@react-types/shared';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {mergeProps, useDescription, useId, useUpdateEffect} from '@react-aria/utils';\nimport {useMessageFormatter} from '@react-aria/i18n';\n\nexport function useCalendarBase(props: CalendarPropsBase & DOMProps, state: CalendarState | RangeCalendarState): CalendarAria {\n let formatMessage = useMessageFormatter(intlMessages);\n let calendarId = useId(props.id);\n\n let visibleRangeDescription = useVisibleRangeDescription(state.visibleRange.start, state.visibleRange.end, state.timeZone);\n\n // Announce when the visible date range changes\n useUpdateEffect(() => {\n // only when pressing the Previous or Next button\n if (!state.isFocused) {\n announce(visibleRangeDescription);\n }\n }, [visibleRangeDescription]);\n\n // Announce when the selected value changes\n let selectedDateDescription = useSelectedDateDescription(state);\n useUpdateEffect(() => {\n if (selectedDateDescription) {\n announce(selectedDateDescription, 'polite', 4000);\n }\n // handle an update to the caption that describes the currently selected range, to announce the new value\n }, [selectedDateDescription]);\n\n let descriptionProps = useDescription(visibleRangeDescription);\n\n // Label the child grid elements by the group element if it is labelled.\n calendarIds.set(state, props['aria-label'] || props['aria-labelledby'] ? calendarId : null);\n\n return {\n calendarProps: mergeProps(descriptionProps, {\n role: 'group',\n id: calendarId,\n 'aria-label': props['aria-label'],\n 'aria-labelledby': props['aria-labelledby']\n }),\n nextButtonProps: {\n onPress: () => state.focusNextPage(),\n 'aria-label': formatMessage('next'),\n isDisabled: props.isDisabled || state.isNextVisibleRangeInvalid()\n },\n prevButtonProps: {\n onPress: () => state.focusPreviousPage(),\n 'aria-label': formatMessage('previous'),\n isDisabled: props.isDisabled || state.isPreviousVisibleRangeInvalid()\n },\n title: visibleRangeDescription\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CalendarDate, endOfMonth, isSameDay, startOfMonth} from '@internationalized/date';\nimport {CalendarState, RangeCalendarState} from '@react-stately/calendar';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {useDateFormatter, useMessageFormatter} from '@react-aria/i18n';\nimport {useMemo} from 'react';\n\nexport const calendarIds = new WeakMap<CalendarState | RangeCalendarState, string>();\n\nexport function useSelectedDateDescription(state: CalendarState | RangeCalendarState) {\n let formatMessage = useMessageFormatter(intlMessages);\n\n let start: CalendarDate, end: CalendarDate;\n if ('highlightedRange' in state) {\n ({start, end} = state.highlightedRange || {});\n } else {\n start = end = state.value;\n }\n\n let anchorDate = 'anchorDate' in state ? state.anchorDate : null;\n return useMemo(() => {\n // No message if currently selecting a range, or there is nothing highlighted.\n if (!anchorDate && start && end) {\n // Use a single date message if the start and end dates are the same day,\n // otherwise include both dates.\n if (isSameDay(start, end)) {\n return formatMessage('selectedDateDescription', {date: start.toDate(state.timeZone)});\n } else {\n return formatMessage('selectedRangeDescription', {start: start.toDate(state.timeZone), end: end.toDate(state.timeZone)});\n }\n }\n return '';\n }, [start, end, anchorDate, state.timeZone, formatMessage]);\n}\n\nexport function useVisibleRangeDescription(startDate: CalendarDate, endDate: CalendarDate, timeZone: string) {\n let monthFormatter = useDateFormatter({\n month: 'long',\n year: 'numeric',\n era: startDate.calendar.identifier !== 'gregory' ? 'long' : undefined,\n calendar: startDate.calendar.identifier\n });\n\n let dateFormatter = useDateFormatter({\n dateStyle: 'long',\n calendar: startDate.calendar.identifier\n });\n\n return useMemo(() => {\n // Special case for month granularity. Format as a single month if only a\n // single month is visible, otherwise format as a range of months.\n if (isSameDay(startDate, startOfMonth(startDate))) {\n if (isSameDay(endDate, endOfMonth(startDate))) {\n return monthFormatter.format(startDate.toDate(timeZone));\n } else if (isSameDay(endDate, endOfMonth(endDate))) {\n return monthFormatter.formatRange(startDate.toDate(timeZone), endDate.toDate(timeZone));\n }\n }\n\n return dateFormatter.formatRange(startDate.toDate(timeZone), endDate.toDate(timeZone));\n }, [startDate, endDate, monthFormatter, dateFormatter, timeZone]);\n}\n","const _temp0 = require(\"./ar-AE.json\");\nconst _temp1 = require(\"./bg-BG.json\");\nconst _temp2 = require(\"./cs-CZ.json\");\nconst _temp3 = require(\"./da-DK.json\");\nconst _temp4 = require(\"./de-DE.json\");\nconst _temp5 = require(\"./el-GR.json\");\nconst _temp6 = require(\"./en-US.json\");\nconst _temp7 = require(\"./es-ES.json\");\nconst _temp8 = require(\"./et-EE.json\");\nconst _temp9 = require(\"./fi-FI.json\");\nconst _temp10 = require(\"./fr-FR.json\");\nconst _temp11 = require(\"./he-IL.json\");\nconst _temp12 = require(\"./hr-HR.json\");\nconst _temp13 = require(\"./hu-HU.json\");\nconst _temp14 = require(\"./it-IT.json\");\nconst _temp15 = require(\"./ja-JP.json\");\nconst _temp16 = require(\"./ko-KR.json\");\nconst _temp17 = require(\"./lt-LT.json\");\nconst _temp18 = require(\"./lv-LV.json\");\nconst _temp19 = require(\"./nb-NO.json\");\nconst _temp20 = require(\"./nl-NL.json\");\nconst _temp21 = require(\"./pl-PL.json\");\nconst _temp22 = require(\"./pt-BR.json\");\nconst _temp23 = require(\"./pt-PT.json\");\nconst _temp24 = require(\"./ro-RO.json\");\nconst _temp25 = require(\"./ru-RU.json\");\nconst _temp26 = require(\"./sk-SK.json\");\nconst _temp27 = require(\"./sl-SI.json\");\nconst _temp28 = require(\"./sr-SP.json\");\nconst _temp29 = require(\"./sv-SE.json\");\nconst _temp30 = require(\"./tr-TR.json\");\nconst _temp31 = require(\"./uk-UA.json\");\nconst _temp32 = require(\"./zh-CN.json\");\nconst _temp33 = require(\"./zh-TW.json\");\nmodule.exports = {\n \"ar-AE\": _temp0,\n \"bg-BG\": _temp1,\n \"cs-CZ\": _temp2,\n \"da-DK\": _temp3,\n \"de-DE\": _temp4,\n \"el-GR\": _temp5,\n \"en-US\": _temp6,\n \"es-ES\": _temp7,\n \"et-EE\": _temp8,\n \"fi-FI\": _temp9,\n \"fr-FR\": _temp10,\n \"he-IL\": _temp11,\n \"hr-HR\": _temp12,\n \"hu-HU\": _temp13,\n \"it-IT\": _temp14,\n \"ja-JP\": _temp15,\n \"ko-KR\": _temp16,\n \"lt-LT\": _temp17,\n \"lv-LV\": _temp18,\n \"nb-NO\": _temp19,\n \"nl-NL\": _temp20,\n \"pl-PL\": _temp21,\n \"pt-BR\": _temp22,\n \"pt-PT\": _temp23,\n \"ro-RO\": _temp24,\n \"ru-RU\": _temp25,\n \"sk-SK\": _temp26,\n \"sl-SI\": _temp27,\n \"sr-SP\": _temp28,\n \"sv-SE\": _temp29,\n \"tr-TR\": _temp30,\n \"uk-UA\": _temp31,\n \"zh-CN\": _temp32,\n \"zh-TW\": _temp33\n}","{\n \"dateSelected\": \"تم تحديد {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"انقر لإنهاء عملية تحديد نطاق التاريخ\",\n \"next\": \"التالي\",\n \"previous\": \"السابق\",\n \"selectedDateDescription\": \"التاريخ المحدد: {date, date, full}\",\n \"selectedRangeDescription\": \"النطاق المحدد: {start, date, long} إلى {end, date, long}\",\n \"startRangeSelectionPrompt\": \"انقر لبدء عملية تحديد نطاق التاريخ\",\n \"todayDate\": \"اليوم، {date, date, full}\",\n \"todayDateSelected\": \"اليوم، تم تحديد {date, date, full}\"\n}\n","{\n \"dateSelected\": \"избрани {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Натиснете, за да довършите избора на времеви интервал\",\n \"next\": \"Напред\",\n \"previous\": \"Назад\",\n \"selectedDateDescription\": \"Избрана дата: {date, date, full}\",\n \"selectedRangeDescription\": \"Избран интервал: от {start, date, long} до {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Натиснете, за да пристъпите към избора на времеви интервал\",\n \"todayDate\": \"Днес {date, date, full}\",\n \"todayDateSelected\": \"Днес са избрани {date, date, full}\"\n}\n","{\n \"dateSelected\": \"Vybráno: {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Kliknutím dokončíte výběr rozsahu dat\",\n \"next\": \"Další\",\n \"previous\": \"Předchozí\",\n \"selectedDateDescription\": \"Zvolené datum: {date, date, full}\",\n \"selectedRangeDescription\": \"Zvolený rozsah: {start, date, long} až {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Kliknutím zahájíte výběr rozsahu dat\",\n \"todayDate\": \"Dnes, {date, date, full}\",\n \"todayDateSelected\": \"Vybrán dnešek: {date, date, full}\"\n}\n","{\n \"dateSelected\": \"{date, date, full} valgt\",\n \"finishRangeSelectionPrompt\": \"Klik for at fuldføre valg af datoområde\",\n \"next\": \"Næste\",\n \"previous\": \"Forrige\",\n \"selectedDateDescription\": \"Valgt dato: {date, date, full}\",\n \"selectedRangeDescription\": \"Valgt område: {start, date, long} til {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Klik for at starte valg af datoområde\",\n \"todayDate\": \"I dag, {date, date, full}\",\n \"todayDateSelected\": \"I dag, {date, date, full} valgt\"\n}\n","{\n \"dateSelected\": \"{date, date, full} ausgewählt\",\n \"finishRangeSelectionPrompt\": \"Klicken, um die Auswahl des Datumsbereichs zu beenden\",\n \"next\": \"Weiter\",\n \"previous\": \"Zurück\",\n \"selectedDateDescription\": \"Ausgewähltes Datum: {date, date, full}\",\n \"selectedRangeDescription\": \"Bereich auswählen: {start, date, long} bis {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Klicken, um die Auswahl des Datumsbereichs zu beginnen\",\n \"todayDate\": \"Heute, {date, date, full}\",\n \"todayDateSelected\": \"Heute, {date, date, full} ausgewählt\"\n}\n","{\n \"dateSelected\": \"Επιλέχτηκε {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Κάντε κλικ για να ολοκληρώσετε την επιλογή εύρους ημερομηνιών\",\n \"next\": \"Επόμενο\",\n \"previous\": \"Προηγούμενο\",\n \"selectedDateDescription\": \"Επιλεγμένη ημερομηνία: {date, date, full}\",\n \"selectedRangeDescription\": \"Επιλεγμένο εύρος: {start, date, long} έως {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Κάντε κλικ για να ξεκινήσετε την επιλογή εύρους ημερομηνιών\",\n \"todayDate\": \"Σήμερα, {date, date, full}\",\n \"todayDateSelected\": \"Σήμερα, επιλέχτηκε {date, date, full}\"\n}\n","{\n \"previous\": \"Previous\",\n \"next\": \"Next\",\n \"selectedDateDescription\": \"Selected Date: {date, date, full}\",\n \"selectedRangeDescription\": \"Selected Range: {start, date, long} to {end, date, long}\",\n \"todayDate\": \"Today, {date, date, full}\",\n \"todayDateSelected\": \"Today, {date, date, full} selected\",\n \"dateSelected\": \"{date, date, full} selected\",\n \"startRangeSelectionPrompt\": \"Click to start selecting date range\",\n \"finishRangeSelectionPrompt\": \"Click to finish selecting date range\"\n}\n","{\n \"dateSelected\": \"{date, date, full} seleccionado\",\n \"finishRangeSelectionPrompt\": \"Haga clic para terminar de seleccionar rango de fechas\",\n \"next\": \"Siguiente\",\n \"previous\": \"Anterior\",\n \"selectedDateDescription\": \"Fecha seleccionada: {date, date, full}\",\n \"selectedRangeDescription\": \"Seleccionar rango: {start, date, long} a {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Haga clic para comenzar a seleccionar un rango de fechas\",\n \"todayDate\": \"Hoy, {date, date, full}\",\n \"todayDateSelected\": \"Hoy, {date, date, full} seleccionado\"\n}\n","{\n \"dateSelected\": \"{date, date, full} valitud\",\n \"finishRangeSelectionPrompt\": \"Klõpsake kuupäevavahemiku valimise lõpetamiseks\",\n \"next\": \"Järgmine\",\n \"previous\": \"Eelmine\",\n \"selectedDateDescription\": \"Valitud kuupäev: {date, date, full}\",\n \"selectedRangeDescription\": \"Valitud vahemik: {start, date, long} kuni {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Klõpsake kuupäevavahemiku valimiseks\",\n \"todayDate\": \"Täna {date, date, full}\",\n \"todayDateSelected\": \"Täna {date, date, full} valitud\"\n}\n","{\n \"dateSelected\": \"{date, date, full} valittu\",\n \"finishRangeSelectionPrompt\": \"Lopeta päivämääräalueen valinta napsauttamalla tätä.\",\n \"next\": \"Seuraava\",\n \"previous\": \"Edellinen\",\n \"selectedDateDescription\": \"Valittu päivämäärä: {date, date, full}\",\n \"selectedRangeDescription\": \"Valittu alue: {start, date, long} - {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Aloita päivämääräalueen valinta napsauttamalla tätä.\",\n \"todayDate\": \"Tänään, {date, date, full}\",\n \"todayDateSelected\": \"Tänään, {date, date, full} valittu\"\n}\n","{\n \"dateSelected\": \"{date, date, full} sélectionné\",\n \"finishRangeSelectionPrompt\": \"Cliquer pour finir de sélectionner la plage de dates\",\n \"next\": \"Suivant\",\n \"previous\": \"Précédent\",\n \"selectedDateDescription\": \"Date sélectionnée : {date, date, full}\",\n \"selectedRangeDescription\": \"Plage sélectionnée : {start, date, long} à {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Cliquer pour commencer à sélectionner la plage de dates\",\n \"todayDate\": \"Aujourd’hui, {date, date, full}\",\n \"todayDateSelected\": \"Aujourd’hui, {date, date, full} sélectionné\"\n}\n","{\n \"dateSelected\": \"התאריך {date, date, full} שנבחר\",\n \"finishRangeSelectionPrompt\": \"חץ כדי לסיים את בחירת טווח התאריכים\",\n \"next\": \"הבא\",\n \"previous\": \"הקודם\",\n \"selectedDateDescription\": \"התאריך שנבחר: {date, date, full}\",\n \"selectedRangeDescription\": \"הטווח שנבחר: מ-{start, date, long} ועד {end, date, long}\",\n \"startRangeSelectionPrompt\": \"לחץ כדי להתחיל בבחירת טווח התאריכים\",\n \"todayDate\": \"היום, {date, date, full}\",\n \"todayDateSelected\": \"היום, התאריך {date, date, full} שנבחר\"\n}\n","{\n \"dateSelected\": \"Odabran {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Kliknite da dovršite raspon odabranih datuma\",\n \"next\": \"Sljedeći\",\n \"previous\": \"Prethodni\",\n \"selectedDateDescription\": \"Odabrani datum: {date, date, full}\",\n \"selectedRangeDescription\": \"Odabrani raspon: od {start, date, long} do {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Kliknite da započnete raspon odabranih datuma\",\n \"todayDate\": \"Danas, {date, date, full}\",\n \"todayDateSelected\": \"Danas, odabran {date, date, full}\"\n}\n","{\n \"dateSelected\": \"{date, date, full} kijelölve\",\n \"finishRangeSelectionPrompt\": \"Kattintson a dátumtartomány kijelölésének befejezéséhez\",\n \"next\": \"Következő\",\n \"previous\": \"Előző\",\n \"selectedDateDescription\": \"Kijelölt dátum: {date, date, full}\",\n \"selectedRangeDescription\": \"Kijelölt tartomány: {start, date, long} – {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Kattintson a dátumtartomány kijelölésének indításához\",\n \"todayDate\": \"Ma, {date, date, full}\",\n \"todayDateSelected\": \"Ma, {date, date, full} kijelölve\"\n}\n","{\n \"dateSelected\": \"{date, date, full} selezionato\",\n \"finishRangeSelectionPrompt\": \"Fai clic per completare la selezione dell’intervallo di date\",\n \"next\": \"Successivo\",\n \"previous\": \"Precedente\",\n \"selectedDateDescription\": \"Data selezionata: {date, date, full}\",\n \"selectedRangeDescription\": \"Intervallo selezionato: da {start, date, long} a {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Fai clic per selezionare l’intervallo di date\",\n \"todayDate\": \"Oggi, {date, date, full}\",\n \"todayDateSelected\": \"Oggi, {date, date, full} selezionato\"\n}\n","{\n \"dateSelected\": \"{date, date, full} を選択\",\n \"finishRangeSelectionPrompt\": \"クリックして日付範囲の選択を終了\",\n \"next\": \"次へ\",\n \"previous\": \"前へ\",\n \"selectedDateDescription\": \"日付を選択:{date, date, full}\",\n \"selectedRangeDescription\": \"範囲を選択:{start, date, long} から {end, date, long}\",\n \"startRangeSelectionPrompt\": \"クリックして日付範囲の選択を開始\",\n \"todayDate\": \"本日、{date, date, full}\",\n \"todayDateSelected\": \"本日、{date, date, full} を選択\"\n}\n","{\n \"dateSelected\": \"{date, date, full} 선택함\",\n \"finishRangeSelectionPrompt\": \"날짜 범위 선택을 완료하려면 클릭하십시오.\",\n \"next\": \"다음\",\n \"previous\": \"이전\",\n \"selectedDateDescription\": \"선택한 날짜: {date, date, full}\",\n \"selectedRangeDescription\": \"선택한 범위: {start, date, long} ~ {end, date, long}\",\n \"startRangeSelectionPrompt\": \"날짜 범위 선택을 시작하려면 클릭하십시오.\",\n \"todayDate\": \"오늘, {date, date, full}\",\n \"todayDateSelected\": \"오늘, {date, date, full} 선택함\"\n}\n","{\n \"dateSelected\": \"Pasirinkta {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Spustelėkite, kad baigtumėte pasirinkti datų intervalą\",\n \"next\": \"Paskesnis\",\n \"previous\": \"Ankstesnis\",\n \"selectedDateDescription\": \"Pasirinkta data: {date, date, full}\",\n \"selectedRangeDescription\": \"Pasirinktas intervalas: nuo {start, date, long} iki {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Spustelėkite, kad pradėtumėte pasirinkti datų intervalą\",\n \"todayDate\": \"Šiandien, {date, date, full}\",\n \"todayDateSelected\": \"Šiandien, pasirinkta {date, date, full}\"\n}\n","{\n \"dateSelected\": \"Atlasīts {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Noklikšķiniet, lai pabeigtu datumu diapazona atlasi\",\n \"next\": \"Tālāk\",\n \"previous\": \"Atpakaļ\",\n \"selectedDateDescription\": \"Atlasītais datums: {date, date, full}\",\n \"selectedRangeDescription\": \"Atlasītais diapazons: {start, date, long} līdz {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Noklikšķiniet, lai sāktu datumu diapazona atlasi\",\n \"todayDate\": \"Šodiena, {date, date, full}\",\n \"todayDateSelected\": \"Atlasīta šodiena, {date, date, full}\"\n}\n","{\n \"dateSelected\": \"{date, date, full} valgt\",\n \"finishRangeSelectionPrompt\": \"Klikk for å fullføre valg av datoområde\",\n \"next\": \"Neste\",\n \"previous\": \"Forrige\",\n \"selectedDateDescription\": \"Valgt dato: {date, date, full}\",\n \"selectedRangeDescription\": \"Valgt område: {start, date, long} til {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Klikk for å starte valg av datoområde\",\n \"todayDate\": \"I dag, {date, date, full}\",\n \"todayDateSelected\": \"I dag, {date, date, full} valgt\"\n}\n","{\n \"dateSelected\": \"{date, date, full} geselecteerd\",\n \"finishRangeSelectionPrompt\": \"Klik om de selectie van het datumbereik te voltooien\",\n \"next\": \"Volgende\",\n \"previous\": \"Vorige\",\n \"selectedDateDescription\": \"Geselecteerde datum: {date, date, full}\",\n \"selectedRangeDescription\": \"Geselecteerd bereik: {start, date, long} t/m {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Klik om het datumbereik te selecteren\",\n \"todayDate\": \"Vandaag, {date, date, full}\",\n \"todayDateSelected\": \"Vandaag, {date, date, full} geselecteerd\"\n}\n","{\n \"dateSelected\": \"Wybrano {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Kliknij, aby zakończyć wybór zakresu dat\",\n \"next\": \"Dalej\",\n \"previous\": \"Wstecz\",\n \"selectedDateDescription\": \"Wybrana data: {date, date, full}\",\n \"selectedRangeDescription\": \"Wybrany zakres: {start, date, long} do {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Kliknij, aby rozpocząć wybór zakresu dat\",\n \"todayDate\": \"Dzisiaj {date, date, full}\",\n \"todayDateSelected\": \"Dzisiaj wybrano {date, date, full}\"\n}\n","{\n \"dateSelected\": \"{date, date, full} selecionado\",\n \"finishRangeSelectionPrompt\": \"Clique para concluir a seleção do intervalo de datas\",\n \"next\": \"Próximo\",\n \"previous\": \"Anterior\",\n \"selectedDateDescription\": \"Data selecionada: {date, date, full}\",\n \"selectedRangeDescription\": \"Intervalo selecionado: {start, date, long} até {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Clique para iniciar a seleção do intervalo de datas\",\n \"todayDate\": \"Hoje, {date, date, full}\",\n \"todayDateSelected\": \"Hoje, {date, date, full} selecionado\"\n}\n","{\n \"dateSelected\": \"{data, data, completo} selecionado\",\n \"finishRangeSelectionPrompt\": \"Clique para terminar de selecionar o intervalo de datas\",\n \"next\": \"Próximo\",\n \"previous\": \"Anterior\",\n \"selectedDateDescription\": \"Data Selecionada: {data, data, completo}\",\n \"selectedRangeDescription\": \"Selecionar Intervalo: {início, data, longo} a {término, data, longo}\",\n \"startRangeSelectionPrompt\": \"Clique para começar a selecionar o intervalo de datas\",\n \"todayDate\": \"Hoje, {date, date, full}\",\n \"todayDateSelected\": \"Hoje, {date, date, full} selecionado\"\n}\n","{\n \"dateSelected\": \"{date, date, full} selectată\",\n \"finishRangeSelectionPrompt\": \"Apăsaţi pentru a finaliza selecţia razei pentru dată\",\n \"next\": \"Următorul\",\n \"previous\": \"Înainte\",\n \"selectedDateDescription\": \"Dată selectată: {date, date, full}\",\n \"selectedRangeDescription\": \"Selectaţi raza: {start, date, long} la {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Apăsaţi pentru a începe selecţia razei pentru dată\",\n \"todayDate\": \"Astăzi, {date, date, full}\",\n \"todayDateSelected\": \"Dată, {date, date, full} selectată\"\n}\n","{\n \"dateSelected\": \"выбрано {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Щелкните, чтобы завершить выбор диапазона дат\",\n \"next\": \"Далее\",\n \"previous\": \"Назад\",\n \"selectedDateDescription\": \"Выбранная дата: {date, date, full}\",\n \"selectedRangeDescription\": \"Выбранный диапазон: {start, date, long} – {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Щелкните, чтобы начать выбор диапазона дат\",\n \"todayDate\": \"Сегодня, {date, date, full}\",\n \"todayDateSelected\": \"Сегодня, выбрано {date, date, full}\"\n}\n","{\n \"dateSelected\": \"Vybratý dátum {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Kliknutím dokončíte výber rozsahu dátumov\",\n \"next\": \"Nasledujúce\",\n \"previous\": \"Predchádzajúce\",\n \"selectedDateDescription\": \"Vybratý dátum: {date, date, full}\",\n \"selectedRangeDescription\": \"Vybratý rozsah dátumov: {start, date, long} do {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Kliknutím spustíte výber rozsahu dátumov\",\n \"todayDate\": \"Dnešný dátum, {date, date, full}\",\n \"todayDateSelected\": \"Vybratý dnešný dátum, {date, date, full}\"\n}\n","{\n \"dateSelected\": \"izbrano: {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Kliknite za dokončanje izbire datumskega obsega\",\n \"next\": \"Naprej\",\n \"previous\": \"Nazaj\",\n \"selectedDateDescription\": \"Izbrani datum: {date, date, full}\",\n \"selectedRangeDescription\": \"Izbrani razpon: {start, date, long} do {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Kliknite za začetek izbire datumskega obsega\",\n \"todayDate\": \"Danes, {date, date, full}\",\n \"todayDateSelected\": \"Danes, izbrano: {date, date, full}\"\n}\n","{\n \"dateSelected\": \"Izabran {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Kliknite da dovršite opseg izabranih datuma\",\n \"next\": \"Sledeći\",\n \"previous\": \"Prethodni\",\n \"selectedDateDescription\": \"Izabrani datum: {date, date, full}\",\n \"selectedRangeDescription\": \"Izabrani opseg: od {start, date, long} do {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Kliknite da započnete opseg izabranih datuma\",\n \"todayDate\": \"Danas, {date, date, full}\",\n \"todayDateSelected\": \"Danas, izabran {date, date, full}\"\n}\n","{\n \"dateSelected\": \"{date, date, full} har valts\",\n \"finishRangeSelectionPrompt\": \"Klicka för att avsluta val av datumintervall\",\n \"next\": \"Nästa\",\n \"previous\": \"Föregående\",\n \"selectedDateDescription\": \"Valt datum: {date, date, full}\",\n \"selectedRangeDescription\": \"Valt intervall: {start, date, long} till {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Klicka för att välja datumintervall\",\n \"todayDate\": \"I dag, {date, date, full}\",\n \"todayDateSelected\": \"I dag, {date, date, full} har valts\"\n}\n","{\n \"dateSelected\": \"{date, date, full} seçildi\",\n \"finishRangeSelectionPrompt\": \"Tarih aralığı seçimini tamamlamak için tıklayın\",\n \"next\": \"Sonraki\",\n \"previous\": \"Önceki\",\n \"selectedDateDescription\": \"Seçili Tarih: {date, date, full}\",\n \"selectedRangeDescription\": \"Seçili Aralık: {start, date, long} - {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Tarih aralığı seçimini başlatmak için tıklayın\",\n \"todayDate\": \"Bugün, {date, date, full}\",\n \"todayDateSelected\": \"Bugün, {date, date, full} seçildi\"\n}\n","{\n \"dateSelected\": \"Вибрано: {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Натисніть, щоб завершити вибір діапазону дат\",\n \"next\": \"Наступний\",\n \"previous\": \"Попередній\",\n \"selectedDateDescription\": \"Вибрана дата: {date, date, full}\",\n \"selectedRangeDescription\": \"Вибраний діапазон: від {start, date, long} до {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Натисніть, щоб почати вибір діапазону дат\",\n \"todayDate\": \"Сьогодні: {date, date, full}\",\n \"todayDateSelected\": \"Сьогодні вибрано: {date, date, full}\"\n}\n","{\n \"dateSelected\": \"已选择 {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"单击以完成选择日期范围\",\n \"next\": \"下一页\",\n \"previous\": \"上一页\",\n \"selectedDateDescription\": \"选定的日期: {date, date, full}\",\n \"selectedRangeDescription\": \"选定的范围: {start, date, long} 到 {end, date, long}\",\n \"startRangeSelectionPrompt\": \"单击以开始选择日期范围\",\n \"todayDate\": \"今天({date, date, full})\",\n \"todayDateSelected\": \"已选择今天({date, date, full})\"\n}\n","{\n \"dateSelected\": \"已選取 {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"按一下以完成選取日期範圍\",\n \"next\": \"下一頁\",\n \"previous\": \"上一頁\",\n \"selectedDateDescription\": \"選取日期: {date, date, full}\",\n \"selectedRangeDescription\": \"選取範圍: {start, date, long} 至 {end, date, long}\",\n \"startRangeSelectionPrompt\": \"按一下以開始選取日期範圍\",\n \"todayDate\": \"今日,{date, date, full}\",\n \"todayDateSelected\": \"今日,已選取 {date, date, full}\"\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CalendarAria} from './types';\nimport {DateValue, RangeCalendarProps} from '@react-types/calendar';\nimport {RangeCalendarState} from '@react-stately/calendar';\nimport {RefObject, useRef} from 'react';\nimport {useCalendarBase} from './useCalendarBase';\nimport {useEvent, useId} from '@react-aria/utils';\n\n/**\n * Provides the behavior and accessibility implementation for a range calendar component.\n * A range calendar displays one or more date grids and allows users to select a contiguous range of dates.\n */\nexport function useRangeCalendar<T extends DateValue>(props: RangeCalendarProps<T>, state: RangeCalendarState, ref: RefObject<HTMLElement>): CalendarAria {\n let res = useCalendarBase(props, state);\n res.nextButtonProps.id = useId();\n res.prevButtonProps.id = useId();\n\n // We need to ignore virtual pointer events from VoiceOver due to these bugs.\n // https://bugs.webkit.org/show_bug.cgi?id=222627\n // https://bugs.webkit.org/show_bug.cgi?id=223202\n // usePress also does this and waits for the following click event before firing.\n // We need to match that here otherwise this will fire before the press event in\n // useCalendarCell, causing range selection to not work properly.\n let isVirtualClick = useRef(false);\n useEvent(useRef(window), 'pointerdown', e => {\n isVirtualClick.current = e.width === 0 && e.height === 0;\n });\n\n // Stop range selection when pressing or releasing a pointer outside the calendar body,\n // except when pressing the next or previous buttons to switch months.\n let endDragging = e => {\n if (isVirtualClick.current) {\n isVirtualClick.current = false;\n return;\n }\n\n state.setDragging(false);\n if (!state.anchorDate) {\n return;\n }\n\n let target = e.target as HTMLElement;\n let body = document.getElementById(res.calendarProps.id);\n if (\n (!body.contains(target) || target.getAttribute('role') !== 'button') &&\n !document.getElementById(res.nextButtonProps.id)?.contains(target) &&\n !document.getElementById(res.prevButtonProps.id)?.contains(target)\n ) {\n state.selectFocusedDate();\n }\n };\n\n useEvent(useRef(window), 'pointerup', endDragging);\n useEvent(useRef(window), 'pointercancel', endDragging);\n\n // Prevent touch scrolling while dragging\n useEvent(ref, 'touchmove', e => {\n if (state.isDragging) {\n e.preventDefault();\n }\n }, {passive: false, capture: true});\n\n return res;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CalendarDate, startOfWeek} from '@internationalized/date';\nimport {CalendarGridAria} from './types';\nimport {calendarIds, useSelectedDateDescription, useVisibleRangeDescription} from './utils';\nimport {CalendarState, RangeCalendarState} from '@react-stately/calendar';\nimport {KeyboardEvent} from 'react';\nimport {mergeProps, useDescription, useLabels} from '@react-aria/utils';\nimport {useDateFormatter, useLocale} from '@react-aria/i18n';\n\ninterface CalendarGridProps {\n /**\n * The first date displayed in the calendar grid.\n * Defaults to the first visible date in the calendar.\n * Override this to display multiple date grids in a calendar.\n */\n startDate?: CalendarDate,\n /**\n * The last date displayed in the calendar grid.\n * Defaults to the last visible date in the calendar.\n * Override this to display multiple date grids in a calendar.\n */\n endDate?: CalendarDate\n}\n\n/**\n * Provides the behavior and accessibility implementation for a calendar grid component.\n * A calendar grid displays a single grid of days within a calendar or range calendar which\n * can be keyboard navigated and selected by the user.\n */\nexport function useCalendarGrid(props: CalendarGridProps, state: CalendarState | RangeCalendarState): CalendarGridAria {\n let {\n startDate = state.visibleRange.start,\n endDate = state.visibleRange.end\n } = props;\n\n let {direction} = useLocale();\n\n let onKeyDown = (e: KeyboardEvent) => {\n switch (e.key) {\n case 'Enter':\n case ' ':\n e.preventDefault();\n state.selectFocusedDate();\n break;\n case 'PageUp':\n e.preventDefault();\n if (e.shiftKey) {\n state.focusPreviousSection();\n } else {\n state.focusPreviousPage();\n }\n break;\n case 'PageDown':\n e.preventDefault();\n if (e.shiftKey) {\n state.focusNextSection();\n } else {\n state.focusNextPage();\n }\n break;\n case 'End':\n e.preventDefault();\n state.focusPageEnd();\n break;\n case 'Home':\n e.preventDefault();\n state.focusPageStart();\n break;\n case 'ArrowLeft':\n e.preventDefault();\n if (direction === 'rtl') {\n state.focusNextDay();\n } else {\n state.focusPreviousDay();\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n state.focusPreviousRow();\n break;\n case 'ArrowRight':\n e.preventDefault();\n if (direction === 'rtl') {\n state.focusPreviousDay();\n } else {\n state.focusNextDay();\n }\n break;\n case 'ArrowDown':\n e.preventDefault();\n state.focusNextRow();\n break;\n case 'Escape':\n // Cancel the selection.\n if ('setAnchorDate' in state) {\n e.preventDefault();\n state.setAnchorDate(null);\n }\n break;\n }\n };\n\n let selectedDateDescription = useSelectedDateDescription(state);\n let descriptionProps = useDescription(selectedDateDescription);\n let visibleRangeDescription = useVisibleRangeDescription(startDate, endDate, state.timeZone);\n\n let labelProps = useLabels({\n 'aria-label': visibleRangeDescription,\n 'aria-labelledby': calendarIds.get(state)\n });\n\n let dayFormatter = useDateFormatter({weekday: 'narrow'});\n let dayFormatterLong = useDateFormatter({weekday: 'long'});\n let {locale} = useLocale();\n let weekStart = startOfWeek(state.visibleRange.start, locale);\n let weekDays = [...new Array(7).keys()].map((index) => {\n let date = weekStart.add({days: index});\n let dateDay = date.toDate(state.timeZone);\n let narrow = dayFormatter.format(dateDay);\n let long = dayFormatterLong.format(dateDay);\n return {\n narrow,\n long\n };\n });\n\n return {\n gridProps: mergeProps(descriptionProps, labelProps, {\n role: 'grid',\n 'aria-readonly': state.isReadOnly || null,\n 'aria-disabled': state.isDisabled || null,\n 'aria-multiselectable': ('highlightedRange' in state) || undefined,\n onKeyDown,\n onFocus: () => state.setFocused(true),\n onBlur: () => state.setFocused(false)\n }),\n weekDays\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CalendarDate, isEqualDay, isSameDay, isSameMonth, isToday} from '@internationalized/date';\nimport {CalendarState, RangeCalendarState} from '@react-stately/calendar';\nimport {focusWithoutScrolling} from '@react-aria/utils';\nimport {HTMLAttributes, RefObject, useEffect, useMemo, useRef} from 'react';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {mergeProps} from '@react-aria/utils';\nimport {useDateFormatter, useMessageFormatter} from '@react-aria/i18n';\nimport {usePress} from '@react-aria/interactions';\n\nexport interface AriaCalendarCellProps {\n /** The date that this cell represents. */\n date: CalendarDate,\n /**\n * Whether the cell is disabled. By default, this is determined by the\n * Calendar's `minValue`, `maxValue`, and `isDisabled` props.\n */\n isDisabled?: boolean\n}\n\ninterface CalendarCellAria {\n /** Props for the grid cell element (e.g. `<td>`). */\n cellProps: HTMLAttributes<HTMLElement>,\n /** Props for the button element within the cell. */\n buttonProps: HTMLAttributes<HTMLElement>,\n /** Whether the cell is currently being pressed. */\n isPressed: boolean,\n /** Whether the cell is selected. */\n isSelected: boolean,\n /** Whether the cell is focused. */\n isFocused: boolean,\n /** Whether the cell is disabled. */\n isDisabled: boolean,\n /**\n * Whether the cell is outside the visible range of the calendar.\n * For example, dates before the first day of a month in the same week.\n */\n isOutsideVisibleRange: boolean,\n /** The day number formatted according to the current locale. */\n formattedDate: string\n}\n\n/**\n * Provides the behavior and accessibility implementation for a calendar cell component.\n * A calendar cell displays a date cell within a calendar grid which can be selected by the user.\n */\nexport function useCalendarCell(props: AriaCalendarCellProps, state: CalendarState | RangeCalendarState, ref: RefObject<HTMLElement>): CalendarCellAria {\n let {date, isDisabled} = props;\n let formatMessage = useMessageFormatter(intlMessages);\n let dateFormatter = useDateFormatter({\n weekday: 'long',\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n era: date.calendar.identifier !== 'gregory' ? 'long' : undefined,\n timeZone: state.timeZone\n });\n let isSelected = state.isSelected(date);\n let isFocused = state.isCellFocused(date);\n isDisabled = isDisabled || state.isCellDisabled(date);\n\n // For performance, reuse the same date object as before if the new date prop is the same.\n // This allows subsequent useMemo results to be reused.\n let lastDate = useRef(null);\n if (lastDate.current && isEqualDay(date, lastDate.current)) {\n date = lastDate.current;\n }\n\n lastDate.current = date;\n\n let nativeDate = useMemo(() => date.toDate(state.timeZone), [date, state.timeZone]);\n\n // aria-label should be localize Day of week, Month, Day and Year without Time.\n let isDateToday = isToday(date, state.timeZone);\n let label = useMemo(() => {\n if (isDateToday) {\n // If date is today, set appropriate string depending on selected state:\n return formatMessage(isSelected ? 'todayDateSelected' : 'todayDate', {\n date: nativeDate\n });\n } else if (isSelected) {\n // If date is selected but not today:\n return formatMessage('dateSelected', {\n date: nativeDate\n });\n }\n\n return dateFormatter.format(nativeDate);\n }, [dateFormatter, nativeDate, formatMessage, isSelected, isDateToday]);\n\n // When a cell is focused and this is a range calendar, add a prompt to help\n // screenreader users know that they are in a range selection mode.\n if ('anchorDate' in state && isFocused && !state.isReadOnly) {\n let rangeSelectionPrompt = '';\n\n // If selection has started add \"click to finish selecting range\"\n if (state.anchorDate) {\n rangeSelectionPrompt = formatMessage('finishRangeSelectionPrompt');\n // Otherwise, add \"click to start selecting range\" prompt\n } else {\n rangeSelectionPrompt = formatMessage('startRangeSelectionPrompt');\n }\n\n // Append to aria-label\n if (rangeSelectionPrompt) {\n label = `${label} (${rangeSelectionPrompt})`;\n }\n }\n\n let isAnchorPressed = useRef(false);\n let isRangeBoundaryPressed = useRef(false);\n let touchDragTimerRef = useRef(null);\n let {pressProps, isPressed} = usePress({\n // When dragging to select a range, we don't want dragging over the original anchor\n // again to trigger onPressStart. Cancel presses immediately when the pointer exits.\n shouldCancelOnPointerExit: 'anchorDate' in state && !!state.anchorDate,\n preventFocusOnPress: true,\n isDisabled,\n onPressStart(e) {\n if (state.isReadOnly) {\n state.setFocusedDate(date);\n return;\n }\n\n if ('highlightedRange' in state && !state.anchorDate && (e.pointerType === 'mouse' || e.pointerType === 'touch')) {\n // Allow dragging the start or end date of a range to modify it\n // rather than starting a new selection.\n if (state.highlightedRange) {\n if (isSameDay(date, state.highlightedRange.start)) {\n state.setAnchorDate(state.highlightedRange.end);\n state.setFocusedDate(date);\n state.setDragging(true);\n isRangeBoundaryPressed.current = true;\n return;\n } else if (isSameDay(date, state.highlightedRange.end)) {\n state.setAnchorDate(state.highlightedRange.start);\n state.setFocusedDate(date);\n state.setDragging(true);\n isRangeBoundaryPressed.current = true;\n return;\n }\n }\n\n let startDragging = () => {\n state.setDragging(true);\n touchDragTimerRef.current = null;\n\n state.selectDate(date);\n state.setFocusedDate(date);\n isAnchorPressed.current = true;\n };\n\n // Start selection on mouse/touch down so users can drag to select a range.\n // On touch, delay dragging to determine if the user really meant to scroll.\n if (e.pointerType === 'touch') {\n touchDragTimerRef.current = setTimeout(startDragging, 200);\n } else {\n startDragging();\n }\n }\n },\n onPressEnd() {\n isRangeBoundaryPressed.current = false;\n isAnchorPressed.current = false;\n clearTimeout(touchDragTimerRef.current);\n touchDragTimerRef.current = null;\n },\n onPress() {\n // For non-range selection, always select on press up.\n if (!('anchorDate' in state) && !state.isReadOnly) {\n state.selectDate(date);\n state.setFocusedDate(date);\n }\n },\n onPressUp(e) {\n if (state.isReadOnly) {\n return;\n }\n\n // If the user tapped quickly, the date won't be selected yet and the\n // timer will still be in progress. In this case, select the date on touch up.\n // Timer is cleared in onPressEnd.\n if ('anchorDate' in state && touchDragTimerRef.current) {\n state.selectDate(date);\n state.setFocusedDate(date);\n }\n\n if ('anchorDate' in state) {\n if (isRangeBoundaryPressed.current) {\n // When clicking on the start or end date of an already selected range,\n // start a new selection on press up to also allow dragging the date to\n // change the existing range.\n state.setAnchorDate(date);\n } else if (state.anchorDate && !isAnchorPressed.current) {\n // When releasing a drag or pressing the end date of a range, select it.\n state.selectDate(date);\n state.setFocusedDate(date);\n } else if (e.pointerType === 'keyboard' && !state.anchorDate) {\n // For range selection, auto-advance the focused date by one if using keyboard.\n // This gives an indication that you're selecting a range rather than a single date.\n // For mouse, this is unnecessary because users will see the indication on hover. For screen readers,\n // there will be an announcement to \"click to finish selecting range\" (above).\n state.selectDate(date);\n let nextDay = date.add({days: 1});\n if (isSameMonth(date, nextDay)) {\n state.setFocusedDate(nextDay);\n }\n } else if (e.pointerType === 'virtual') {\n // For screen readers, just select the date on click.\n state.selectDate(date);\n state.setFocusedDate(date);\n }\n }\n }\n });\n\n let tabIndex = null;\n if (!isDisabled) {\n tabIndex = isSameDay(date, state.focusedDate) ? 0 : -1;\n }\n\n // Focus the button in the DOM when the state updates.\n useEffect(() => {\n if (isFocused && ref.current) {\n focusWithoutScrolling(ref.current);\n }\n }, [isFocused, ref]);\n\n let cellDateFormatter = useDateFormatter({\n day: 'numeric',\n timeZone: state.timeZone,\n calendar: date.calendar.identifier\n });\n\n let formattedDate = useMemo(() => cellDateFormatter.format(nativeDate), [cellDateFormatter, nativeDate]);\n\n return {\n cellProps: {\n role: 'gridcell',\n 'aria-disabled': isDisabled || null,\n 'aria-selected': isSelected\n },\n buttonProps: mergeProps(pressProps, {\n onFocus() {\n if (!isDisabled) {\n state.setFocusedDate(date);\n }\n },\n tabIndex,\n role: 'button',\n 'aria-disabled': isDisabled || null,\n 'aria-label': label,\n onPointerEnter(e) {\n // Highlight the date on hover or drag over a date when selecting a range.\n if ('highlightDate' in state && (e.pointerType !== 'touch' || state.isDragging)) {\n state.highlightDate(date);\n }\n },\n onPointerDown(e) {\n // This is necessary on touch devices to allow dragging\n // outside the original pressed element.\n // (JSDOM does not support this)\n if ('releasePointerCapture' in e.target) {\n e.target.releasePointerCapture(e.pointerId);\n }\n },\n onContextMenu(e) {\n // Prevent context menu on long press.\n e.preventDefault();\n }\n }),\n isPressed,\n isFocused,\n isSelected,\n isDisabled,\n isOutsideVisibleRange: date.compare(state.visibleRange.start) < 0 || date.compare(state.visibleRange.end) > 0,\n formattedDate\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaButtonProps} from '@react-types/button';\nimport {HTMLAttributes} from 'react';\n\nexport interface CalendarAria {\n /** Props for the calendar grouping element. */\n calendarProps: HTMLAttributes<HTMLElement>,\n /** Props for the next button. */\n nextButtonProps: AriaButtonProps,\n /** Props for the previous button. */\n prevButtonProps: AriaButtonProps,\n /** A description of the visible date range, for use in the calendar title. */\n title: string\n}\n\n\nexport interface CalendarGridAria {\n /** Props for the date grid element (e.g. `<table>`). */\n gridProps: HTMLAttributes<HTMLElement>,\n /** A list of week days formatted for the current locale, typically used in column headers. */\n weekDays: WeekDay[]\n}\n\ninterface WeekDay {\n /** A short name (e.g. single letter) for the day. */\n narrow: string,\n /** The full day name. If not displayed visually, it should be used as the accessiblity name. */\n long: string\n}\n"],"names":[],"version":3,"file":"module.js.map"}
|
|
1
|
+
{"mappings":"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","sources":["packages/@react-aria/calendar/src/index.ts","packages/@react-aria/calendar/src/useCalendar.ts","packages/@react-aria/calendar/src/useCalendarBase.ts","packages/@react-aria/calendar/src/utils.ts","packages/@react-aria/calendar/intl/*.js","packages/@react-aria/calendar/intl/ar-AE.json","packages/@react-aria/calendar/intl/bg-BG.json","packages/@react-aria/calendar/intl/cs-CZ.json","packages/@react-aria/calendar/intl/da-DK.json","packages/@react-aria/calendar/intl/de-DE.json","packages/@react-aria/calendar/intl/el-GR.json","packages/@react-aria/calendar/intl/en-US.json","packages/@react-aria/calendar/intl/es-ES.json","packages/@react-aria/calendar/intl/et-EE.json","packages/@react-aria/calendar/intl/fi-FI.json","packages/@react-aria/calendar/intl/fr-FR.json","packages/@react-aria/calendar/intl/he-IL.json","packages/@react-aria/calendar/intl/hr-HR.json","packages/@react-aria/calendar/intl/hu-HU.json","packages/@react-aria/calendar/intl/it-IT.json","packages/@react-aria/calendar/intl/ja-JP.json","packages/@react-aria/calendar/intl/ko-KR.json","packages/@react-aria/calendar/intl/lt-LT.json","packages/@react-aria/calendar/intl/lv-LV.json","packages/@react-aria/calendar/intl/nb-NO.json","packages/@react-aria/calendar/intl/nl-NL.json","packages/@react-aria/calendar/intl/pl-PL.json","packages/@react-aria/calendar/intl/pt-BR.json","packages/@react-aria/calendar/intl/pt-PT.json","packages/@react-aria/calendar/intl/ro-RO.json","packages/@react-aria/calendar/intl/ru-RU.json","packages/@react-aria/calendar/intl/sk-SK.json","packages/@react-aria/calendar/intl/sl-SI.json","packages/@react-aria/calendar/intl/sr-SP.json","packages/@react-aria/calendar/intl/sv-SE.json","packages/@react-aria/calendar/intl/tr-TR.json","packages/@react-aria/calendar/intl/uk-UA.json","packages/@react-aria/calendar/intl/zh-CN.json","packages/@react-aria/calendar/intl/zh-TW.json","packages/@react-aria/calendar/src/useRangeCalendar.ts","packages/@react-aria/calendar/src/useCalendarGrid.ts","packages/@react-aria/calendar/src/useCalendarCell.ts","packages/@react-aria/calendar/src/types.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nexport * from './useCalendar';\nexport * from './useRangeCalendar';\nexport * from './useCalendarGrid';\nexport * from './useCalendarCell';\nexport * from './types';\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CalendarAria} from './types';\nimport {CalendarProps, DateValue} from '@react-types/calendar';\nimport {CalendarState} from '@react-stately/calendar';\nimport {useCalendarBase} from './useCalendarBase';\n\n/**\n * Provides the behavior and accessibility implementation for a calendar component.\n * A calendar displays one or more date grids and allows users to select a single date.\n */\nexport function useCalendar<T extends DateValue>(props: CalendarProps<T>, state: CalendarState): CalendarAria {\n return useCalendarBase(props, state);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {announce} from '@react-aria/live-announcer';\nimport {CalendarAria} from './types';\nimport {calendarIds, useSelectedDateDescription, useVisibleRangeDescription} from './utils';\nimport {CalendarPropsBase} from '@react-types/calendar';\nimport {CalendarState, RangeCalendarState} from '@react-stately/calendar';\nimport {DOMProps} from '@react-types/shared';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {mergeProps, useDescription, useId, useUpdateEffect} from '@react-aria/utils';\nimport {useMessageFormatter} from '@react-aria/i18n';\nimport {useRef} from 'react';\n\nexport function useCalendarBase(props: CalendarPropsBase & DOMProps, state: CalendarState | RangeCalendarState): CalendarAria {\n let formatMessage = useMessageFormatter(intlMessages);\n let calendarId = useId(props.id);\n\n let visibleRangeDescription = useVisibleRangeDescription(state.visibleRange.start, state.visibleRange.end, state.timeZone);\n\n // Announce when the visible date range changes\n useUpdateEffect(() => {\n // only when pressing the Previous or Next button\n if (!state.isFocused) {\n announce(visibleRangeDescription);\n }\n }, [visibleRangeDescription]);\n\n // Announce when the selected value changes\n let selectedDateDescription = useSelectedDateDescription(state);\n useUpdateEffect(() => {\n if (selectedDateDescription) {\n announce(selectedDateDescription, 'polite', 4000);\n }\n // handle an update to the caption that describes the currently selected range, to announce the new value\n }, [selectedDateDescription]);\n\n let descriptionProps = useDescription(visibleRangeDescription);\n\n // Label the child grid elements by the group element if it is labelled.\n calendarIds.set(state, props['aria-label'] || props['aria-labelledby'] ? calendarId : null);\n\n // If the next or previous buttons become disabled while they are focused, move focus to the calendar body.\n let nextFocused = useRef(false);\n let nextDisabled = props.isDisabled || state.isNextVisibleRangeInvalid();\n if (nextDisabled && nextFocused.current) {\n nextFocused.current = false;\n state.setFocused(true);\n }\n\n let previousFocused = useRef(false);\n let previousDisabled = props.isDisabled || state.isPreviousVisibleRangeInvalid();\n if (previousDisabled && previousFocused.current) {\n previousFocused.current = false;\n state.setFocused(true);\n }\n\n return {\n calendarProps: mergeProps(descriptionProps, {\n role: 'group',\n id: calendarId,\n 'aria-label': props['aria-label'],\n 'aria-labelledby': props['aria-labelledby']\n }),\n nextButtonProps: {\n onPress: () => state.focusNextPage(),\n 'aria-label': formatMessage('next'),\n isDisabled: nextDisabled,\n onFocus: () => nextFocused.current = true,\n onBlur: () => nextFocused.current = false\n },\n prevButtonProps: {\n onPress: () => state.focusPreviousPage(),\n 'aria-label': formatMessage('previous'),\n isDisabled: previousDisabled,\n onFocus: () => previousFocused.current = true,\n onBlur: () => previousFocused.current = false\n },\n title: visibleRangeDescription\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CalendarDate, endOfMonth, isSameDay, startOfMonth} from '@internationalized/date';\nimport {CalendarState, RangeCalendarState} from '@react-stately/calendar';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {useDateFormatter, useMessageFormatter} from '@react-aria/i18n';\nimport {useMemo} from 'react';\n\nexport const calendarIds = new WeakMap<CalendarState | RangeCalendarState, string>();\n\nexport function useSelectedDateDescription(state: CalendarState | RangeCalendarState) {\n let formatMessage = useMessageFormatter(intlMessages);\n\n let start: CalendarDate, end: CalendarDate;\n if ('highlightedRange' in state) {\n ({start, end} = state.highlightedRange || {});\n } else {\n start = end = state.value;\n }\n\n let anchorDate = 'anchorDate' in state ? state.anchorDate : null;\n return useMemo(() => {\n // No message if currently selecting a range, or there is nothing highlighted.\n if (!anchorDate && start && end) {\n // Use a single date message if the start and end dates are the same day,\n // otherwise include both dates.\n if (isSameDay(start, end)) {\n return formatMessage('selectedDateDescription', {date: start.toDate(state.timeZone)});\n } else {\n return formatMessage('selectedRangeDescription', {start: start.toDate(state.timeZone), end: end.toDate(state.timeZone)});\n }\n }\n return '';\n }, [start, end, anchorDate, state.timeZone, formatMessage]);\n}\n\nexport function useVisibleRangeDescription(startDate: CalendarDate, endDate: CalendarDate, timeZone: string) {\n let monthFormatter = useDateFormatter({\n month: 'long',\n year: 'numeric',\n era: startDate.calendar.identifier !== 'gregory' ? 'long' : undefined,\n calendar: startDate.calendar.identifier,\n timeZone\n });\n\n let dateFormatter = useDateFormatter({\n dateStyle: 'long',\n calendar: startDate.calendar.identifier,\n timeZone\n });\n\n return useMemo(() => {\n // Special case for month granularity. Format as a single month if only a\n // single month is visible, otherwise format as a range of months.\n if (isSameDay(startDate, startOfMonth(startDate))) {\n if (isSameDay(endDate, endOfMonth(startDate))) {\n return monthFormatter.format(startDate.toDate(timeZone));\n } else if (isSameDay(endDate, endOfMonth(endDate))) {\n return monthFormatter.formatRange(startDate.toDate(timeZone), endDate.toDate(timeZone));\n }\n }\n\n return dateFormatter.formatRange(startDate.toDate(timeZone), endDate.toDate(timeZone));\n }, [startDate, endDate, monthFormatter, dateFormatter, timeZone]);\n}\n","const _temp0 = require(\"./ar-AE.json\");\nconst _temp1 = require(\"./bg-BG.json\");\nconst _temp2 = require(\"./cs-CZ.json\");\nconst _temp3 = require(\"./da-DK.json\");\nconst _temp4 = require(\"./de-DE.json\");\nconst _temp5 = require(\"./el-GR.json\");\nconst _temp6 = require(\"./en-US.json\");\nconst _temp7 = require(\"./es-ES.json\");\nconst _temp8 = require(\"./et-EE.json\");\nconst _temp9 = require(\"./fi-FI.json\");\nconst _temp10 = require(\"./fr-FR.json\");\nconst _temp11 = require(\"./he-IL.json\");\nconst _temp12 = require(\"./hr-HR.json\");\nconst _temp13 = require(\"./hu-HU.json\");\nconst _temp14 = require(\"./it-IT.json\");\nconst _temp15 = require(\"./ja-JP.json\");\nconst _temp16 = require(\"./ko-KR.json\");\nconst _temp17 = require(\"./lt-LT.json\");\nconst _temp18 = require(\"./lv-LV.json\");\nconst _temp19 = require(\"./nb-NO.json\");\nconst _temp20 = require(\"./nl-NL.json\");\nconst _temp21 = require(\"./pl-PL.json\");\nconst _temp22 = require(\"./pt-BR.json\");\nconst _temp23 = require(\"./pt-PT.json\");\nconst _temp24 = require(\"./ro-RO.json\");\nconst _temp25 = require(\"./ru-RU.json\");\nconst _temp26 = require(\"./sk-SK.json\");\nconst _temp27 = require(\"./sl-SI.json\");\nconst _temp28 = require(\"./sr-SP.json\");\nconst _temp29 = require(\"./sv-SE.json\");\nconst _temp30 = require(\"./tr-TR.json\");\nconst _temp31 = require(\"./uk-UA.json\");\nconst _temp32 = require(\"./zh-CN.json\");\nconst _temp33 = require(\"./zh-TW.json\");\nmodule.exports = {\n \"ar-AE\": _temp0,\n \"bg-BG\": _temp1,\n \"cs-CZ\": _temp2,\n \"da-DK\": _temp3,\n \"de-DE\": _temp4,\n \"el-GR\": _temp5,\n \"en-US\": _temp6,\n \"es-ES\": _temp7,\n \"et-EE\": _temp8,\n \"fi-FI\": _temp9,\n \"fr-FR\": _temp10,\n \"he-IL\": _temp11,\n \"hr-HR\": _temp12,\n \"hu-HU\": _temp13,\n \"it-IT\": _temp14,\n \"ja-JP\": _temp15,\n \"ko-KR\": _temp16,\n \"lt-LT\": _temp17,\n \"lv-LV\": _temp18,\n \"nb-NO\": _temp19,\n \"nl-NL\": _temp20,\n \"pl-PL\": _temp21,\n \"pt-BR\": _temp22,\n \"pt-PT\": _temp23,\n \"ro-RO\": _temp24,\n \"ru-RU\": _temp25,\n \"sk-SK\": _temp26,\n \"sl-SI\": _temp27,\n \"sr-SP\": _temp28,\n \"sv-SE\": _temp29,\n \"tr-TR\": _temp30,\n \"uk-UA\": _temp31,\n \"zh-CN\": _temp32,\n \"zh-TW\": _temp33\n}","{\n \"dateSelected\": \"تم تحديد {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"انقر لإنهاء عملية تحديد نطاق التاريخ\",\n \"next\": \"التالي\",\n \"previous\": \"السابق\",\n \"selectedDateDescription\": \"التاريخ المحدد: {date, date, full}\",\n \"selectedRangeDescription\": \"النطاق المحدد: {start, date, long} إلى {end, date, long}\",\n \"startRangeSelectionPrompt\": \"انقر لبدء عملية تحديد نطاق التاريخ\",\n \"todayDate\": \"اليوم، {date, date, full}\",\n \"todayDateSelected\": \"اليوم، تم تحديد {date, date, full}\"\n}\n","{\n \"dateSelected\": \"избрани {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Натиснете, за да довършите избора на времеви интервал\",\n \"next\": \"Напред\",\n \"previous\": \"Назад\",\n \"selectedDateDescription\": \"Избрана дата: {date, date, full}\",\n \"selectedRangeDescription\": \"Избран интервал: от {start, date, long} до {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Натиснете, за да пристъпите към избора на времеви интервал\",\n \"todayDate\": \"Днес {date, date, full}\",\n \"todayDateSelected\": \"Днес са избрани {date, date, full}\"\n}\n","{\n \"dateSelected\": \"Vybráno: {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Kliknutím dokončíte výběr rozsahu dat\",\n \"next\": \"Další\",\n \"previous\": \"Předchozí\",\n \"selectedDateDescription\": \"Zvolené datum: {date, date, full}\",\n \"selectedRangeDescription\": \"Zvolený rozsah: {start, date, long} až {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Kliknutím zahájíte výběr rozsahu dat\",\n \"todayDate\": \"Dnes, {date, date, full}\",\n \"todayDateSelected\": \"Vybrán dnešek: {date, date, full}\"\n}\n","{\n \"dateSelected\": \"{date, date, full} valgt\",\n \"finishRangeSelectionPrompt\": \"Klik for at fuldføre valg af datoområde\",\n \"next\": \"Næste\",\n \"previous\": \"Forrige\",\n \"selectedDateDescription\": \"Valgt dato: {date, date, full}\",\n \"selectedRangeDescription\": \"Valgt område: {start, date, long} til {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Klik for at starte valg af datoområde\",\n \"todayDate\": \"I dag, {date, date, full}\",\n \"todayDateSelected\": \"I dag, {date, date, full} valgt\"\n}\n","{\n \"dateSelected\": \"{date, date, full} ausgewählt\",\n \"finishRangeSelectionPrompt\": \"Klicken, um die Auswahl des Datumsbereichs zu beenden\",\n \"next\": \"Weiter\",\n \"previous\": \"Zurück\",\n \"selectedDateDescription\": \"Ausgewähltes Datum: {date, date, full}\",\n \"selectedRangeDescription\": \"Bereich auswählen: {start, date, long} bis {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Klicken, um die Auswahl des Datumsbereichs zu beginnen\",\n \"todayDate\": \"Heute, {date, date, full}\",\n \"todayDateSelected\": \"Heute, {date, date, full} ausgewählt\"\n}\n","{\n \"dateSelected\": \"Επιλέχτηκε {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Κάντε κλικ για να ολοκληρώσετε την επιλογή εύρους ημερομηνιών\",\n \"next\": \"Επόμενο\",\n \"previous\": \"Προηγούμενο\",\n \"selectedDateDescription\": \"Επιλεγμένη ημερομηνία: {date, date, full}\",\n \"selectedRangeDescription\": \"Επιλεγμένο εύρος: {start, date, long} έως {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Κάντε κλικ για να ξεκινήσετε την επιλογή εύρους ημερομηνιών\",\n \"todayDate\": \"Σήμερα, {date, date, full}\",\n \"todayDateSelected\": \"Σήμερα, επιλέχτηκε {date, date, full}\"\n}\n","{\n \"previous\": \"Previous\",\n \"next\": \"Next\",\n \"selectedDateDescription\": \"Selected Date: {date, date, full}\",\n \"selectedRangeDescription\": \"Selected Range: {start, date, long} to {end, date, long}\",\n \"todayDate\": \"Today, {date, date, full}\",\n \"todayDateSelected\": \"Today, {date, date, full} selected\",\n \"dateSelected\": \"{date, date, full} selected\",\n \"startRangeSelectionPrompt\": \"Click to start selecting date range\",\n \"finishRangeSelectionPrompt\": \"Click to finish selecting date range\"\n}\n","{\n \"dateSelected\": \"{date, date, full} seleccionado\",\n \"finishRangeSelectionPrompt\": \"Haga clic para terminar de seleccionar rango de fechas\",\n \"next\": \"Siguiente\",\n \"previous\": \"Anterior\",\n \"selectedDateDescription\": \"Fecha seleccionada: {date, date, full}\",\n \"selectedRangeDescription\": \"Seleccionar rango: {start, date, long} a {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Haga clic para comenzar a seleccionar un rango de fechas\",\n \"todayDate\": \"Hoy, {date, date, full}\",\n \"todayDateSelected\": \"Hoy, {date, date, full} seleccionado\"\n}\n","{\n \"dateSelected\": \"{date, date, full} valitud\",\n \"finishRangeSelectionPrompt\": \"Klõpsake kuupäevavahemiku valimise lõpetamiseks\",\n \"next\": \"Järgmine\",\n \"previous\": \"Eelmine\",\n \"selectedDateDescription\": \"Valitud kuupäev: {date, date, full}\",\n \"selectedRangeDescription\": \"Valitud vahemik: {start, date, long} kuni {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Klõpsake kuupäevavahemiku valimiseks\",\n \"todayDate\": \"Täna {date, date, full}\",\n \"todayDateSelected\": \"Täna {date, date, full} valitud\"\n}\n","{\n \"dateSelected\": \"{date, date, full} valittu\",\n \"finishRangeSelectionPrompt\": \"Lopeta päivämääräalueen valinta napsauttamalla tätä.\",\n \"next\": \"Seuraava\",\n \"previous\": \"Edellinen\",\n \"selectedDateDescription\": \"Valittu päivämäärä: {date, date, full}\",\n \"selectedRangeDescription\": \"Valittu alue: {start, date, long} - {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Aloita päivämääräalueen valinta napsauttamalla tätä.\",\n \"todayDate\": \"Tänään, {date, date, full}\",\n \"todayDateSelected\": \"Tänään, {date, date, full} valittu\"\n}\n","{\n \"dateSelected\": \"{date, date, full} sélectionné\",\n \"finishRangeSelectionPrompt\": \"Cliquer pour finir de sélectionner la plage de dates\",\n \"next\": \"Suivant\",\n \"previous\": \"Précédent\",\n \"selectedDateDescription\": \"Date sélectionnée : {date, date, full}\",\n \"selectedRangeDescription\": \"Plage sélectionnée : {start, date, long} à {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Cliquer pour commencer à sélectionner la plage de dates\",\n \"todayDate\": \"Aujourd’hui, {date, date, full}\",\n \"todayDateSelected\": \"Aujourd’hui, {date, date, full} sélectionné\"\n}\n","{\n \"dateSelected\": \"התאריך {date, date, full} שנבחר\",\n \"finishRangeSelectionPrompt\": \"חץ כדי לסיים את בחירת טווח התאריכים\",\n \"next\": \"הבא\",\n \"previous\": \"הקודם\",\n \"selectedDateDescription\": \"התאריך שנבחר: {date, date, full}\",\n \"selectedRangeDescription\": \"הטווח שנבחר: מ-{start, date, long} ועד {end, date, long}\",\n \"startRangeSelectionPrompt\": \"לחץ כדי להתחיל בבחירת טווח התאריכים\",\n \"todayDate\": \"היום, {date, date, full}\",\n \"todayDateSelected\": \"היום, התאריך {date, date, full} שנבחר\"\n}\n","{\n \"dateSelected\": \"Odabran {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Kliknite da dovršite raspon odabranih datuma\",\n \"next\": \"Sljedeći\",\n \"previous\": \"Prethodni\",\n \"selectedDateDescription\": \"Odabrani datum: {date, date, full}\",\n \"selectedRangeDescription\": \"Odabrani raspon: od {start, date, long} do {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Kliknite da započnete raspon odabranih datuma\",\n \"todayDate\": \"Danas, {date, date, full}\",\n \"todayDateSelected\": \"Danas, odabran {date, date, full}\"\n}\n","{\n \"dateSelected\": \"{date, date, full} kijelölve\",\n \"finishRangeSelectionPrompt\": \"Kattintson a dátumtartomány kijelölésének befejezéséhez\",\n \"next\": \"Következő\",\n \"previous\": \"Előző\",\n \"selectedDateDescription\": \"Kijelölt dátum: {date, date, full}\",\n \"selectedRangeDescription\": \"Kijelölt tartomány: {start, date, long} – {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Kattintson a dátumtartomány kijelölésének indításához\",\n \"todayDate\": \"Ma, {date, date, full}\",\n \"todayDateSelected\": \"Ma, {date, date, full} kijelölve\"\n}\n","{\n \"dateSelected\": \"{date, date, full} selezionato\",\n \"finishRangeSelectionPrompt\": \"Fai clic per completare la selezione dell’intervallo di date\",\n \"next\": \"Successivo\",\n \"previous\": \"Precedente\",\n \"selectedDateDescription\": \"Data selezionata: {date, date, full}\",\n \"selectedRangeDescription\": \"Intervallo selezionato: da {start, date, long} a {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Fai clic per selezionare l’intervallo di date\",\n \"todayDate\": \"Oggi, {date, date, full}\",\n \"todayDateSelected\": \"Oggi, {date, date, full} selezionato\"\n}\n","{\n \"dateSelected\": \"{date, date, full} を選択\",\n \"finishRangeSelectionPrompt\": \"クリックして日付範囲の選択を終了\",\n \"next\": \"次へ\",\n \"previous\": \"前へ\",\n \"selectedDateDescription\": \"日付を選択:{date, date, full}\",\n \"selectedRangeDescription\": \"範囲を選択:{start, date, long} から {end, date, long}\",\n \"startRangeSelectionPrompt\": \"クリックして日付範囲の選択を開始\",\n \"todayDate\": \"本日、{date, date, full}\",\n \"todayDateSelected\": \"本日、{date, date, full} を選択\"\n}\n","{\n \"dateSelected\": \"{date, date, full} 선택함\",\n \"finishRangeSelectionPrompt\": \"날짜 범위 선택을 완료하려면 클릭하십시오.\",\n \"next\": \"다음\",\n \"previous\": \"이전\",\n \"selectedDateDescription\": \"선택한 날짜: {date, date, full}\",\n \"selectedRangeDescription\": \"선택한 범위: {start, date, long} ~ {end, date, long}\",\n \"startRangeSelectionPrompt\": \"날짜 범위 선택을 시작하려면 클릭하십시오.\",\n \"todayDate\": \"오늘, {date, date, full}\",\n \"todayDateSelected\": \"오늘, {date, date, full} 선택함\"\n}\n","{\n \"dateSelected\": \"Pasirinkta {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Spustelėkite, kad baigtumėte pasirinkti datų intervalą\",\n \"next\": \"Paskesnis\",\n \"previous\": \"Ankstesnis\",\n \"selectedDateDescription\": \"Pasirinkta data: {date, date, full}\",\n \"selectedRangeDescription\": \"Pasirinktas intervalas: nuo {start, date, long} iki {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Spustelėkite, kad pradėtumėte pasirinkti datų intervalą\",\n \"todayDate\": \"Šiandien, {date, date, full}\",\n \"todayDateSelected\": \"Šiandien, pasirinkta {date, date, full}\"\n}\n","{\n \"dateSelected\": \"Atlasīts {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Noklikšķiniet, lai pabeigtu datumu diapazona atlasi\",\n \"next\": \"Tālāk\",\n \"previous\": \"Atpakaļ\",\n \"selectedDateDescription\": \"Atlasītais datums: {date, date, full}\",\n \"selectedRangeDescription\": \"Atlasītais diapazons: {start, date, long} līdz {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Noklikšķiniet, lai sāktu datumu diapazona atlasi\",\n \"todayDate\": \"Šodiena, {date, date, full}\",\n \"todayDateSelected\": \"Atlasīta šodiena, {date, date, full}\"\n}\n","{\n \"dateSelected\": \"{date, date, full} valgt\",\n \"finishRangeSelectionPrompt\": \"Klikk for å fullføre valg av datoområde\",\n \"next\": \"Neste\",\n \"previous\": \"Forrige\",\n \"selectedDateDescription\": \"Valgt dato: {date, date, full}\",\n \"selectedRangeDescription\": \"Valgt område: {start, date, long} til {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Klikk for å starte valg av datoområde\",\n \"todayDate\": \"I dag, {date, date, full}\",\n \"todayDateSelected\": \"I dag, {date, date, full} valgt\"\n}\n","{\n \"dateSelected\": \"{date, date, full} geselecteerd\",\n \"finishRangeSelectionPrompt\": \"Klik om de selectie van het datumbereik te voltooien\",\n \"next\": \"Volgende\",\n \"previous\": \"Vorige\",\n \"selectedDateDescription\": \"Geselecteerde datum: {date, date, full}\",\n \"selectedRangeDescription\": \"Geselecteerd bereik: {start, date, long} t/m {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Klik om het datumbereik te selecteren\",\n \"todayDate\": \"Vandaag, {date, date, full}\",\n \"todayDateSelected\": \"Vandaag, {date, date, full} geselecteerd\"\n}\n","{\n \"dateSelected\": \"Wybrano {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Kliknij, aby zakończyć wybór zakresu dat\",\n \"next\": \"Dalej\",\n \"previous\": \"Wstecz\",\n \"selectedDateDescription\": \"Wybrana data: {date, date, full}\",\n \"selectedRangeDescription\": \"Wybrany zakres: {start, date, long} do {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Kliknij, aby rozpocząć wybór zakresu dat\",\n \"todayDate\": \"Dzisiaj {date, date, full}\",\n \"todayDateSelected\": \"Dzisiaj wybrano {date, date, full}\"\n}\n","{\n \"dateSelected\": \"{date, date, full} selecionado\",\n \"finishRangeSelectionPrompt\": \"Clique para concluir a seleção do intervalo de datas\",\n \"next\": \"Próximo\",\n \"previous\": \"Anterior\",\n \"selectedDateDescription\": \"Data selecionada: {date, date, full}\",\n \"selectedRangeDescription\": \"Intervalo selecionado: {start, date, long} até {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Clique para iniciar a seleção do intervalo de datas\",\n \"todayDate\": \"Hoje, {date, date, full}\",\n \"todayDateSelected\": \"Hoje, {date, date, full} selecionado\"\n}\n","{\n \"dateSelected\": \"{data, data, completo} selecionado\",\n \"finishRangeSelectionPrompt\": \"Clique para terminar de selecionar o intervalo de datas\",\n \"next\": \"Próximo\",\n \"previous\": \"Anterior\",\n \"selectedDateDescription\": \"Data Selecionada: {data, data, completo}\",\n \"selectedRangeDescription\": \"Selecionar Intervalo: {início, data, longo} a {término, data, longo}\",\n \"startRangeSelectionPrompt\": \"Clique para começar a selecionar o intervalo de datas\",\n \"todayDate\": \"Hoje, {date, date, full}\",\n \"todayDateSelected\": \"Hoje, {date, date, full} selecionado\"\n}\n","{\n \"dateSelected\": \"{date, date, full} selectată\",\n \"finishRangeSelectionPrompt\": \"Apăsaţi pentru a finaliza selecţia razei pentru dată\",\n \"next\": \"Următorul\",\n \"previous\": \"Înainte\",\n \"selectedDateDescription\": \"Dată selectată: {date, date, full}\",\n \"selectedRangeDescription\": \"Selectaţi raza: {start, date, long} la {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Apăsaţi pentru a începe selecţia razei pentru dată\",\n \"todayDate\": \"Astăzi, {date, date, full}\",\n \"todayDateSelected\": \"Dată, {date, date, full} selectată\"\n}\n","{\n \"dateSelected\": \"выбрано {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Щелкните, чтобы завершить выбор диапазона дат\",\n \"next\": \"Далее\",\n \"previous\": \"Назад\",\n \"selectedDateDescription\": \"Выбранная дата: {date, date, full}\",\n \"selectedRangeDescription\": \"Выбранный диапазон: {start, date, long} – {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Щелкните, чтобы начать выбор диапазона дат\",\n \"todayDate\": \"Сегодня, {date, date, full}\",\n \"todayDateSelected\": \"Сегодня, выбрано {date, date, full}\"\n}\n","{\n \"dateSelected\": \"Vybratý dátum {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Kliknutím dokončíte výber rozsahu dátumov\",\n \"next\": \"Nasledujúce\",\n \"previous\": \"Predchádzajúce\",\n \"selectedDateDescription\": \"Vybratý dátum: {date, date, full}\",\n \"selectedRangeDescription\": \"Vybratý rozsah dátumov: {start, date, long} do {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Kliknutím spustíte výber rozsahu dátumov\",\n \"todayDate\": \"Dnešný dátum, {date, date, full}\",\n \"todayDateSelected\": \"Vybratý dnešný dátum, {date, date, full}\"\n}\n","{\n \"dateSelected\": \"izbrano: {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Kliknite za dokončanje izbire datumskega obsega\",\n \"next\": \"Naprej\",\n \"previous\": \"Nazaj\",\n \"selectedDateDescription\": \"Izbrani datum: {date, date, full}\",\n \"selectedRangeDescription\": \"Izbrani razpon: {start, date, long} do {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Kliknite za začetek izbire datumskega obsega\",\n \"todayDate\": \"Danes, {date, date, full}\",\n \"todayDateSelected\": \"Danes, izbrano: {date, date, full}\"\n}\n","{\n \"dateSelected\": \"Izabran {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Kliknite da dovršite opseg izabranih datuma\",\n \"next\": \"Sledeći\",\n \"previous\": \"Prethodni\",\n \"selectedDateDescription\": \"Izabrani datum: {date, date, full}\",\n \"selectedRangeDescription\": \"Izabrani opseg: od {start, date, long} do {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Kliknite da započnete opseg izabranih datuma\",\n \"todayDate\": \"Danas, {date, date, full}\",\n \"todayDateSelected\": \"Danas, izabran {date, date, full}\"\n}\n","{\n \"dateSelected\": \"{date, date, full} har valts\",\n \"finishRangeSelectionPrompt\": \"Klicka för att avsluta val av datumintervall\",\n \"next\": \"Nästa\",\n \"previous\": \"Föregående\",\n \"selectedDateDescription\": \"Valt datum: {date, date, full}\",\n \"selectedRangeDescription\": \"Valt intervall: {start, date, long} till {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Klicka för att välja datumintervall\",\n \"todayDate\": \"I dag, {date, date, full}\",\n \"todayDateSelected\": \"I dag, {date, date, full} har valts\"\n}\n","{\n \"dateSelected\": \"{date, date, full} seçildi\",\n \"finishRangeSelectionPrompt\": \"Tarih aralığı seçimini tamamlamak için tıklayın\",\n \"next\": \"Sonraki\",\n \"previous\": \"Önceki\",\n \"selectedDateDescription\": \"Seçili Tarih: {date, date, full}\",\n \"selectedRangeDescription\": \"Seçili Aralık: {start, date, long} - {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Tarih aralığı seçimini başlatmak için tıklayın\",\n \"todayDate\": \"Bugün, {date, date, full}\",\n \"todayDateSelected\": \"Bugün, {date, date, full} seçildi\"\n}\n","{\n \"dateSelected\": \"Вибрано: {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"Натисніть, щоб завершити вибір діапазону дат\",\n \"next\": \"Наступний\",\n \"previous\": \"Попередній\",\n \"selectedDateDescription\": \"Вибрана дата: {date, date, full}\",\n \"selectedRangeDescription\": \"Вибраний діапазон: від {start, date, long} до {end, date, long}\",\n \"startRangeSelectionPrompt\": \"Натисніть, щоб почати вибір діапазону дат\",\n \"todayDate\": \"Сьогодні: {date, date, full}\",\n \"todayDateSelected\": \"Сьогодні вибрано: {date, date, full}\"\n}\n","{\n \"dateSelected\": \"已选择 {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"单击以完成选择日期范围\",\n \"next\": \"下一页\",\n \"previous\": \"上一页\",\n \"selectedDateDescription\": \"选定的日期: {date, date, full}\",\n \"selectedRangeDescription\": \"选定的范围: {start, date, long} 到 {end, date, long}\",\n \"startRangeSelectionPrompt\": \"单击以开始选择日期范围\",\n \"todayDate\": \"今天({date, date, full})\",\n \"todayDateSelected\": \"已选择今天({date, date, full})\"\n}\n","{\n \"dateSelected\": \"已選取 {date, date, full}\",\n \"finishRangeSelectionPrompt\": \"按一下以完成選取日期範圍\",\n \"next\": \"下一頁\",\n \"previous\": \"上一頁\",\n \"selectedDateDescription\": \"選取日期: {date, date, full}\",\n \"selectedRangeDescription\": \"選取範圍: {start, date, long} 至 {end, date, long}\",\n \"startRangeSelectionPrompt\": \"按一下以開始選取日期範圍\",\n \"todayDate\": \"今日,{date, date, full}\",\n \"todayDateSelected\": \"今日,已選取 {date, date, full}\"\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CalendarAria} from './types';\nimport {DateValue, RangeCalendarProps} from '@react-types/calendar';\nimport {RangeCalendarState} from '@react-stately/calendar';\nimport {RefObject, useRef} from 'react';\nimport {useCalendarBase} from './useCalendarBase';\nimport {useEvent, useId} from '@react-aria/utils';\n\n/**\n * Provides the behavior and accessibility implementation for a range calendar component.\n * A range calendar displays one or more date grids and allows users to select a contiguous range of dates.\n */\nexport function useRangeCalendar<T extends DateValue>(props: RangeCalendarProps<T>, state: RangeCalendarState, ref: RefObject<HTMLElement>): CalendarAria {\n let res = useCalendarBase(props, state);\n res.nextButtonProps.id = useId();\n res.prevButtonProps.id = useId();\n\n // We need to ignore virtual pointer events from VoiceOver due to these bugs.\n // https://bugs.webkit.org/show_bug.cgi?id=222627\n // https://bugs.webkit.org/show_bug.cgi?id=223202\n // usePress also does this and waits for the following click event before firing.\n // We need to match that here otherwise this will fire before the press event in\n // useCalendarCell, causing range selection to not work properly.\n let isVirtualClick = useRef(false);\n useEvent(useRef(window), 'pointerdown', e => {\n isVirtualClick.current = e.width === 0 && e.height === 0;\n });\n\n // Stop range selection when pressing or releasing a pointer outside the calendar body,\n // except when pressing the next or previous buttons to switch months.\n let endDragging = e => {\n if (isVirtualClick.current) {\n isVirtualClick.current = false;\n return;\n }\n\n state.setDragging(false);\n if (!state.anchorDate) {\n return;\n }\n\n let target = e.target as HTMLElement;\n let body = document.getElementById(res.calendarProps.id);\n if (\n (!body.contains(target) || !target.closest('[role=\"button\"]')) &&\n !document.getElementById(res.nextButtonProps.id)?.contains(target) &&\n !document.getElementById(res.prevButtonProps.id)?.contains(target)\n ) {\n state.selectFocusedDate();\n }\n };\n\n useEvent(useRef(window), 'pointerup', endDragging);\n useEvent(useRef(window), 'pointercancel', endDragging);\n\n // Prevent touch scrolling while dragging\n useEvent(ref, 'touchmove', e => {\n if (state.isDragging) {\n e.preventDefault();\n }\n }, {passive: false, capture: true});\n\n return res;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CalendarDate, startOfWeek} from '@internationalized/date';\nimport {CalendarGridAria} from './types';\nimport {calendarIds, useSelectedDateDescription, useVisibleRangeDescription} from './utils';\nimport {CalendarState, RangeCalendarState} from '@react-stately/calendar';\nimport {KeyboardEvent} from 'react';\nimport {mergeProps, useDescription, useLabels} from '@react-aria/utils';\nimport {useDateFormatter, useLocale} from '@react-aria/i18n';\n\ninterface CalendarGridProps {\n /**\n * The first date displayed in the calendar grid.\n * Defaults to the first visible date in the calendar.\n * Override this to display multiple date grids in a calendar.\n */\n startDate?: CalendarDate,\n /**\n * The last date displayed in the calendar grid.\n * Defaults to the last visible date in the calendar.\n * Override this to display multiple date grids in a calendar.\n */\n endDate?: CalendarDate\n}\n\n/**\n * Provides the behavior and accessibility implementation for a calendar grid component.\n * A calendar grid displays a single grid of days within a calendar or range calendar which\n * can be keyboard navigated and selected by the user.\n */\nexport function useCalendarGrid(props: CalendarGridProps, state: CalendarState | RangeCalendarState): CalendarGridAria {\n let {\n startDate = state.visibleRange.start,\n endDate = state.visibleRange.end\n } = props;\n\n let {direction} = useLocale();\n\n let onKeyDown = (e: KeyboardEvent) => {\n switch (e.key) {\n case 'Enter':\n case ' ':\n e.preventDefault();\n state.selectFocusedDate();\n break;\n case 'PageUp':\n e.preventDefault();\n if (e.shiftKey) {\n state.focusPreviousSection();\n } else {\n state.focusPreviousPage();\n }\n break;\n case 'PageDown':\n e.preventDefault();\n if (e.shiftKey) {\n state.focusNextSection();\n } else {\n state.focusNextPage();\n }\n break;\n case 'End':\n e.preventDefault();\n state.focusPageEnd();\n break;\n case 'Home':\n e.preventDefault();\n state.focusPageStart();\n break;\n case 'ArrowLeft':\n e.preventDefault();\n if (direction === 'rtl') {\n state.focusNextDay();\n } else {\n state.focusPreviousDay();\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n state.focusPreviousRow();\n break;\n case 'ArrowRight':\n e.preventDefault();\n if (direction === 'rtl') {\n state.focusPreviousDay();\n } else {\n state.focusNextDay();\n }\n break;\n case 'ArrowDown':\n e.preventDefault();\n state.focusNextRow();\n break;\n case 'Escape':\n // Cancel the selection.\n if ('setAnchorDate' in state) {\n e.preventDefault();\n state.setAnchorDate(null);\n }\n break;\n }\n };\n\n let selectedDateDescription = useSelectedDateDescription(state);\n let descriptionProps = useDescription(selectedDateDescription);\n let visibleRangeDescription = useVisibleRangeDescription(startDate, endDate, state.timeZone);\n\n let labelProps = useLabels({\n 'aria-label': visibleRangeDescription,\n 'aria-labelledby': calendarIds.get(state)\n });\n\n let dayFormatter = useDateFormatter({weekday: 'narrow', timeZone: state.timeZone});\n let dayFormatterLong = useDateFormatter({weekday: 'long', timeZone: state.timeZone});\n let {locale} = useLocale();\n let weekStart = startOfWeek(state.visibleRange.start, locale);\n let weekDays = [...new Array(7).keys()].map((index) => {\n let date = weekStart.add({days: index});\n let dateDay = date.toDate(state.timeZone);\n let narrow = dayFormatter.format(dateDay);\n let long = dayFormatterLong.format(dateDay);\n return {\n narrow,\n long\n };\n });\n\n return {\n gridProps: mergeProps(descriptionProps, labelProps, {\n role: 'grid',\n 'aria-readonly': state.isReadOnly || null,\n 'aria-disabled': state.isDisabled || null,\n 'aria-multiselectable': ('highlightedRange' in state) || undefined,\n onKeyDown,\n onFocus: () => state.setFocused(true),\n onBlur: () => state.setFocused(false)\n }),\n weekDays\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {CalendarDate, isEqualDay, isSameDay, isToday} from '@internationalized/date';\nimport {CalendarState, RangeCalendarState} from '@react-stately/calendar';\nimport {focusWithoutScrolling} from '@react-aria/utils';\nimport {HTMLAttributes, RefObject, useEffect, useMemo, useRef} from 'react';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {mergeProps} from '@react-aria/utils';\nimport {useDateFormatter, useMessageFormatter} from '@react-aria/i18n';\nimport {usePress} from '@react-aria/interactions';\n\nexport interface AriaCalendarCellProps {\n /** The date that this cell represents. */\n date: CalendarDate,\n /**\n * Whether the cell is disabled. By default, this is determined by the\n * Calendar's `minValue`, `maxValue`, and `isDisabled` props.\n */\n isDisabled?: boolean\n}\n\ninterface CalendarCellAria {\n /** Props for the grid cell element (e.g. `<td>`). */\n cellProps: HTMLAttributes<HTMLElement>,\n /** Props for the button element within the cell. */\n buttonProps: HTMLAttributes<HTMLElement>,\n /** Whether the cell is currently being pressed. */\n isPressed: boolean,\n /** Whether the cell is selected. */\n isSelected: boolean,\n /** Whether the cell is focused. */\n isFocused: boolean,\n /**\n * Whether the cell is disabled, according to the calendar's `minValue`, `maxValue`, and `isDisabled` props.\n * Disabled dates are not focusable, and cannot be selected by the user. They are typically\n * displayed with a dimmed appearance.\n */\n isDisabled: boolean,\n /**\n * Whether the cell is unavailable, according to the calendar's `isDateUnavailable` prop. Unavailable dates remain\n * focusable, but cannot be selected by the user. They should be displayed with a visual affordance to indicate they\n * are unavailable, such as a different color or a strikethrough.\n *\n * Note that because they are focusable, unavailable dates must meet a 4.5:1 color contrast ratio,\n * [as defined by WCAG](https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html).\n */\n isUnavailable: boolean,\n /**\n * Whether the cell is outside the visible range of the calendar.\n * For example, dates before the first day of a month in the same week.\n */\n isOutsideVisibleRange: boolean,\n /** The day number formatted according to the current locale. */\n formattedDate: string\n}\n\n/**\n * Provides the behavior and accessibility implementation for a calendar cell component.\n * A calendar cell displays a date cell within a calendar grid which can be selected by the user.\n */\nexport function useCalendarCell(props: AriaCalendarCellProps, state: CalendarState | RangeCalendarState, ref: RefObject<HTMLElement>): CalendarCellAria {\n let {date, isDisabled} = props;\n let formatMessage = useMessageFormatter(intlMessages);\n let dateFormatter = useDateFormatter({\n weekday: 'long',\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n era: date.calendar.identifier !== 'gregory' ? 'long' : undefined,\n timeZone: state.timeZone\n });\n let isSelected = state.isSelected(date);\n let isFocused = state.isCellFocused(date);\n isDisabled = isDisabled || state.isCellDisabled(date);\n let isUnavailable = state.isCellUnavailable(date);\n let isSelectable = !isDisabled && !isUnavailable;\n\n // For performance, reuse the same date object as before if the new date prop is the same.\n // This allows subsequent useMemo results to be reused.\n let lastDate = useRef(null);\n if (lastDate.current && isEqualDay(date, lastDate.current)) {\n date = lastDate.current;\n }\n\n lastDate.current = date;\n\n let nativeDate = useMemo(() => date.toDate(state.timeZone), [date, state.timeZone]);\n\n // aria-label should be localize Day of week, Month, Day and Year without Time.\n let isDateToday = isToday(date, state.timeZone);\n let label = useMemo(() => {\n if (isDateToday) {\n // If date is today, set appropriate string depending on selected state:\n return formatMessage(isSelected ? 'todayDateSelected' : 'todayDate', {\n date: nativeDate\n });\n } else if (isSelected) {\n // If date is selected but not today:\n return formatMessage('dateSelected', {\n date: nativeDate\n });\n }\n\n return dateFormatter.format(nativeDate);\n }, [dateFormatter, nativeDate, formatMessage, isSelected, isDateToday]);\n\n // When a cell is focused and this is a range calendar, add a prompt to help\n // screenreader users know that they are in a range selection mode.\n if ('anchorDate' in state && isFocused && !state.isReadOnly && isSelectable) {\n let rangeSelectionPrompt = '';\n\n // If selection has started add \"click to finish selecting range\"\n if (state.anchorDate) {\n rangeSelectionPrompt = formatMessage('finishRangeSelectionPrompt');\n // Otherwise, add \"click to start selecting range\" prompt\n } else {\n rangeSelectionPrompt = formatMessage('startRangeSelectionPrompt');\n }\n\n // Append to aria-label\n if (rangeSelectionPrompt) {\n label = `${label} (${rangeSelectionPrompt})`;\n }\n }\n\n let isAnchorPressed = useRef(false);\n let isRangeBoundaryPressed = useRef(false);\n let touchDragTimerRef = useRef(null);\n let {pressProps, isPressed} = usePress({\n // When dragging to select a range, we don't want dragging over the original anchor\n // again to trigger onPressStart. Cancel presses immediately when the pointer exits.\n shouldCancelOnPointerExit: 'anchorDate' in state && !!state.anchorDate,\n preventFocusOnPress: true,\n isDisabled: !isSelectable,\n onPressStart(e) {\n if (state.isReadOnly) {\n state.setFocusedDate(date);\n return;\n }\n\n if ('highlightedRange' in state && !state.anchorDate && (e.pointerType === 'mouse' || e.pointerType === 'touch')) {\n // Allow dragging the start or end date of a range to modify it\n // rather than starting a new selection.\n if (state.highlightedRange) {\n if (isSameDay(date, state.highlightedRange.start)) {\n state.setAnchorDate(state.highlightedRange.end);\n state.setFocusedDate(date);\n state.setDragging(true);\n isRangeBoundaryPressed.current = true;\n return;\n } else if (isSameDay(date, state.highlightedRange.end)) {\n state.setAnchorDate(state.highlightedRange.start);\n state.setFocusedDate(date);\n state.setDragging(true);\n isRangeBoundaryPressed.current = true;\n return;\n }\n }\n\n let startDragging = () => {\n state.setDragging(true);\n touchDragTimerRef.current = null;\n\n state.selectDate(date);\n state.setFocusedDate(date);\n isAnchorPressed.current = true;\n };\n\n // Start selection on mouse/touch down so users can drag to select a range.\n // On touch, delay dragging to determine if the user really meant to scroll.\n if (e.pointerType === 'touch') {\n touchDragTimerRef.current = setTimeout(startDragging, 200);\n } else {\n startDragging();\n }\n }\n },\n onPressEnd() {\n isRangeBoundaryPressed.current = false;\n isAnchorPressed.current = false;\n clearTimeout(touchDragTimerRef.current);\n touchDragTimerRef.current = null;\n },\n onPress() {\n // For non-range selection, always select on press up.\n if (!('anchorDate' in state) && !state.isReadOnly) {\n state.selectDate(date);\n state.setFocusedDate(date);\n }\n },\n onPressUp(e) {\n if (state.isReadOnly) {\n return;\n }\n\n // If the user tapped quickly, the date won't be selected yet and the\n // timer will still be in progress. In this case, select the date on touch up.\n // Timer is cleared in onPressEnd.\n if ('anchorDate' in state && touchDragTimerRef.current) {\n state.selectDate(date);\n state.setFocusedDate(date);\n }\n\n if ('anchorDate' in state) {\n if (isRangeBoundaryPressed.current) {\n // When clicking on the start or end date of an already selected range,\n // start a new selection on press up to also allow dragging the date to\n // change the existing range.\n state.setAnchorDate(date);\n } else if (state.anchorDate && !isAnchorPressed.current) {\n // When releasing a drag or pressing the end date of a range, select it.\n state.selectDate(date);\n state.setFocusedDate(date);\n } else if (e.pointerType === 'keyboard' && !state.anchorDate) {\n // For range selection, auto-advance the focused date by one if using keyboard.\n // This gives an indication that you're selecting a range rather than a single date.\n // For mouse, this is unnecessary because users will see the indication on hover. For screen readers,\n // there will be an announcement to \"click to finish selecting range\" (above).\n state.selectDate(date);\n let nextDay = date.add({days: 1});\n if (state.isInvalid(nextDay)) {\n nextDay = date.subtract({days: 1});\n }\n if (!state.isInvalid(nextDay)) {\n state.setFocusedDate(nextDay);\n }\n } else if (e.pointerType === 'virtual') {\n // For screen readers, just select the date on click.\n state.selectDate(date);\n state.setFocusedDate(date);\n }\n }\n }\n });\n\n let tabIndex = null;\n if (!isDisabled) {\n tabIndex = isSameDay(date, state.focusedDate) ? 0 : -1;\n }\n\n // Focus the button in the DOM when the state updates.\n useEffect(() => {\n if (isFocused && ref.current) {\n focusWithoutScrolling(ref.current);\n }\n }, [isFocused, ref]);\n\n let cellDateFormatter = useDateFormatter({\n day: 'numeric',\n timeZone: state.timeZone,\n calendar: date.calendar.identifier\n });\n\n let formattedDate = useMemo(() => cellDateFormatter.format(nativeDate), [cellDateFormatter, nativeDate]);\n\n return {\n cellProps: {\n role: 'gridcell',\n 'aria-disabled': !isSelectable || null,\n 'aria-selected': isSelectable ? isSelected : null\n },\n buttonProps: mergeProps(pressProps, {\n onFocus() {\n if (!isDisabled) {\n state.setFocusedDate(date);\n }\n },\n tabIndex,\n role: 'button',\n 'aria-disabled': !isSelectable || null,\n 'aria-label': label,\n onPointerEnter(e) {\n // Highlight the date on hover or drag over a date when selecting a range.\n if ('highlightDate' in state && (e.pointerType !== 'touch' || state.isDragging) && isSelectable) {\n state.highlightDate(date);\n }\n },\n onPointerDown(e) {\n // This is necessary on touch devices to allow dragging\n // outside the original pressed element.\n // (JSDOM does not support this)\n if ('releasePointerCapture' in e.target) {\n e.target.releasePointerCapture(e.pointerId);\n }\n },\n onContextMenu(e) {\n // Prevent context menu on long press.\n e.preventDefault();\n }\n }),\n isPressed,\n isFocused,\n isSelected,\n isDisabled,\n isUnavailable,\n isOutsideVisibleRange: date.compare(state.visibleRange.start) < 0 || date.compare(state.visibleRange.end) > 0,\n formattedDate\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaButtonProps} from '@react-types/button';\nimport {HTMLAttributes} from 'react';\n\nexport interface CalendarAria {\n /** Props for the calendar grouping element. */\n calendarProps: HTMLAttributes<HTMLElement>,\n /** Props for the next button. */\n nextButtonProps: AriaButtonProps,\n /** Props for the previous button. */\n prevButtonProps: AriaButtonProps,\n /** A description of the visible date range, for use in the calendar title. */\n title: string\n}\n\n\nexport interface CalendarGridAria {\n /** Props for the date grid element (e.g. `<table>`). */\n gridProps: HTMLAttributes<HTMLElement>,\n /** A list of week days formatted for the current locale, typically used in column headers. */\n weekDays: WeekDay[]\n}\n\ninterface WeekDay {\n /** A short name (e.g. single letter) for the day. */\n narrow: string,\n /** The full day name. If not displayed visually, it should be used as the accessiblity name. */\n long: string\n}\n"],"names":[],"version":3,"file":"module.js.map"}
|
package/dist/types.d.ts
CHANGED
|
@@ -75,8 +75,21 @@ interface CalendarCellAria {
|
|
|
75
75
|
isSelected: boolean;
|
|
76
76
|
/** Whether the cell is focused. */
|
|
77
77
|
isFocused: boolean;
|
|
78
|
-
/**
|
|
78
|
+
/**
|
|
79
|
+
* Whether the cell is disabled, according to the calendar's `minValue`, `maxValue`, and `isDisabled` props.
|
|
80
|
+
* Disabled dates are not focusable, and cannot be selected by the user. They are typically
|
|
81
|
+
* displayed with a dimmed appearance.
|
|
82
|
+
*/
|
|
79
83
|
isDisabled: boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Whether the cell is unavailable, according to the calendar's `isDateUnavailable` prop. Unavailable dates remain
|
|
86
|
+
* focusable, but cannot be selected by the user. They should be displayed with a visual affordance to indicate they
|
|
87
|
+
* are unavailable, such as a different color or a strikethrough.
|
|
88
|
+
*
|
|
89
|
+
* Note that because they are focusable, unavailable dates must meet a 4.5:1 color contrast ratio,
|
|
90
|
+
* [as defined by WCAG](https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html).
|
|
91
|
+
*/
|
|
92
|
+
isUnavailable: boolean;
|
|
80
93
|
/**
|
|
81
94
|
* Whether the cell is outside the visible range of the calendar.
|
|
82
95
|
* For example, dates before the first day of a month in the same week.
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";;;;;AAeA;IACE,+CAA+C;IAC/C,aAAa,EAAE,eAAe,WAAW,CAAC,CAAC;IAC3C,iCAAiC;IACjC,eAAe,EAAE,eAAe,CAAC;IACjC,qCAAqC;IACrC,eAAe,EAAE,eAAe,CAAC;IACjC,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAA;CACd;AAGD;IACE,wDAAwD;IACxD,SAAS,EAAE,eAAe,WAAW,CAAC,CAAC;IACvC,8FAA8F;IAC9F,QAAQ,EAAE,OAAO,EAAE,CAAA;CACpB;AAED;IACE,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,gGAAgG;IAChG,IAAI,EAAE,MAAM,CAAA;CACb;AGtBD;;;GAGG;AACH,4BAA4B,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,GAAG,YAAY,CAE5G;ACJD;;;GAGG;AACH,iCAAiC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,UAAU,WAAW,CAAC,GAAG,YAAY,CAmDxJ;ACtDD;IACE;;;;OAIG;IACH,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB;;;;OAIG;IACH,OAAO,CAAC,EAAE,YAAY,CAAA;CACvB;AAED;;;;GAIG;AACH,gCAAgC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,aAAa,GAAG,kBAAkB,GAAG,gBAAgB,CA6GrH;AC/HD;IACE,0CAA0C;IAC1C,IAAI,EAAE,YAAY,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED;IACE,qDAAqD;IACrD,SAAS,EAAE,eAAe,WAAW,CAAC,CAAC;IACvC,oDAAoD;IACpD,WAAW,EAAE,eAAe,WAAW,CAAC,CAAC;IACzC,mDAAmD;IACnD,SAAS,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,mCAAmC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB
|
|
1
|
+
{"mappings":";;;;;AAeA;IACE,+CAA+C;IAC/C,aAAa,EAAE,eAAe,WAAW,CAAC,CAAC;IAC3C,iCAAiC;IACjC,eAAe,EAAE,eAAe,CAAC;IACjC,qCAAqC;IACrC,eAAe,EAAE,eAAe,CAAC;IACjC,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAA;CACd;AAGD;IACE,wDAAwD;IACxD,SAAS,EAAE,eAAe,WAAW,CAAC,CAAC;IACvC,8FAA8F;IAC9F,QAAQ,EAAE,OAAO,EAAE,CAAA;CACpB;AAED;IACE,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,gGAAgG;IAChG,IAAI,EAAE,MAAM,CAAA;CACb;AGtBD;;;GAGG;AACH,4BAA4B,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,GAAG,YAAY,CAE5G;ACJD;;;GAGG;AACH,iCAAiC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,UAAU,WAAW,CAAC,GAAG,YAAY,CAmDxJ;ACtDD;IACE;;;;OAIG;IACH,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB;;;;OAIG;IACH,OAAO,CAAC,EAAE,YAAY,CAAA;CACvB;AAED;;;;GAIG;AACH,gCAAgC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,aAAa,GAAG,kBAAkB,GAAG,gBAAgB,CA6GrH;AC/HD;IACE,0CAA0C;IAC1C,IAAI,EAAE,YAAY,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED;IACE,qDAAqD;IACrD,SAAS,EAAE,eAAe,WAAW,CAAC,CAAC;IACvC,oDAAoD;IACpD,WAAW,EAAE,eAAe,WAAW,CAAC,CAAC;IACzC,mDAAmD;IACnD,SAAS,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,mCAAmC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;;;OAOG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,qBAAqB,EAAE,OAAO,CAAC;IAC/B,gEAAgE;IAChE,aAAa,EAAE,MAAM,CAAA;CACtB;AAED;;;GAGG;AACH,gCAAgC,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,aAAa,GAAG,kBAAkB,EAAE,GAAG,EAAE,UAAU,WAAW,CAAC,GAAG,gBAAgB,CA8OtJ","sources":["packages/@react-aria/calendar/src/packages/@react-aria/calendar/src/types.ts","packages/@react-aria/calendar/src/packages/@react-aria/calendar/src/utils.ts","packages/@react-aria/calendar/src/packages/@react-aria/calendar/src/useCalendarBase.ts","packages/@react-aria/calendar/src/packages/@react-aria/calendar/src/useCalendar.ts","packages/@react-aria/calendar/src/packages/@react-aria/calendar/src/useRangeCalendar.ts","packages/@react-aria/calendar/src/packages/@react-aria/calendar/src/useCalendarGrid.ts","packages/@react-aria/calendar/src/packages/@react-aria/calendar/src/useCalendarCell.ts","packages/@react-aria/calendar/src/packages/@react-aria/calendar/src/index.ts","packages/@react-aria/calendar/src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,"/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nexport * from './useCalendar';\nexport * from './useRangeCalendar';\nexport * from './useCalendarGrid';\nexport * from './useCalendarCell';\nexport * from './types';\n"],"names":[],"version":3,"file":"types.d.ts.map"}
|