@react-aria/calendar 3.5.7 → 3.5.9

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.
Files changed (60) hide show
  1. package/dist/ar-AE.mjs +1 -1
  2. package/dist/bg-BG.mjs +1 -1
  3. package/dist/cs-CZ.mjs +1 -1
  4. package/dist/da-DK.mjs +1 -1
  5. package/dist/de-DE.mjs +1 -1
  6. package/dist/el-GR.mjs +1 -1
  7. package/dist/en-US.mjs +1 -1
  8. package/dist/es-ES.mjs +1 -1
  9. package/dist/et-EE.mjs +1 -1
  10. package/dist/fi-FI.mjs +1 -1
  11. package/dist/fr-FR.mjs +1 -1
  12. package/dist/he-IL.mjs +1 -1
  13. package/dist/hr-HR.mjs +1 -1
  14. package/dist/hu-HU.mjs +1 -1
  15. package/dist/intlStrings.mjs +1 -1
  16. package/dist/it-IT.mjs +1 -1
  17. package/dist/ja-JP.mjs +1 -1
  18. package/dist/ko-KR.mjs +1 -1
  19. package/dist/lt-LT.mjs +1 -1
  20. package/dist/lv-LV.mjs +1 -1
  21. package/dist/nb-NO.mjs +1 -1
  22. package/dist/nl-NL.mjs +1 -1
  23. package/dist/pl-PL.mjs +1 -1
  24. package/dist/pt-BR.mjs +1 -1
  25. package/dist/pt-PT.mjs +1 -1
  26. package/dist/ro-RO.mjs +1 -1
  27. package/dist/ru-RU.mjs +1 -1
  28. package/dist/sk-SK.mjs +1 -1
  29. package/dist/sl-SI.mjs +1 -1
  30. package/dist/sr-SP.mjs +1 -1
  31. package/dist/sv-SE.mjs +1 -1
  32. package/dist/tr-TR.mjs +1 -1
  33. package/dist/types.d.ts +3 -4
  34. package/dist/types.d.ts.map +1 -1
  35. package/dist/uk-UA.mjs +1 -1
  36. package/dist/useCalendar.mjs +1 -1
  37. package/dist/useCalendarBase.main.js +13 -13
  38. package/dist/useCalendarBase.mjs +14 -14
  39. package/dist/useCalendarBase.module.js +13 -13
  40. package/dist/useCalendarCell.main.js +41 -41
  41. package/dist/useCalendarCell.main.js.map +1 -1
  42. package/dist/useCalendarCell.mjs +42 -42
  43. package/dist/useCalendarCell.module.js +41 -41
  44. package/dist/useCalendarCell.module.js.map +1 -1
  45. package/dist/useCalendarGrid.main.js +23 -23
  46. package/dist/useCalendarGrid.mjs +24 -24
  47. package/dist/useCalendarGrid.module.js +23 -23
  48. package/dist/useRangeCalendar.main.js +5 -5
  49. package/dist/useRangeCalendar.main.js.map +1 -1
  50. package/dist/useRangeCalendar.mjs +6 -6
  51. package/dist/useRangeCalendar.module.js +5 -5
  52. package/dist/useRangeCalendar.module.js.map +1 -1
  53. package/dist/utils.main.js +22 -22
  54. package/dist/utils.mjs +23 -23
  55. package/dist/utils.module.js +22 -22
  56. package/dist/zh-CN.mjs +1 -1
  57. package/dist/zh-TW.mjs +1 -1
  58. package/package.json +13 -13
  59. package/src/useCalendarCell.ts +3 -3
  60. package/src/useRangeCalendar.ts +3 -3
@@ -3,8 +3,8 @@ var $bd6dc95a3c5ee5cd$exports = require("./intlStrings.main.js");
3
3
  var $cuS6T$internationalizeddate = require("@internationalized/date");
4
4
  var $cuS6T$reactariautils = require("@react-aria/utils");
5
5
  var $cuS6T$reactariainteractions = require("@react-aria/interactions");
6
- var $cuS6T$react = require("react");
7
6
  var $cuS6T$reactariai18n = require("@react-aria/i18n");
7
+ var $cuS6T$react = require("react");
8
8
 
9
9
 
10
10
  function $parcel$interopDefault(a) {
@@ -36,12 +36,12 @@ $parcel$export(module.exports, "useCalendarCell", () => $4d833327a32c9193$export
36
36
  function $4d833327a32c9193$export$136073280381448e(props, state, ref) {
37
37
  let { date: date, isDisabled: isDisabled } = props;
38
38
  let { errorMessageId: errorMessageId, selectedDateDescription: selectedDateDescription } = (0, $df1d8e967e73ec8e$exports.hookData).get(state);
39
- let stringFormatter = (0, $cuS6T$reactariai18n.useLocalizedStringFormatter)((0, ($parcel$interopDefault($bd6dc95a3c5ee5cd$exports))), "@react-aria/calendar");
39
+ let stringFormatter = (0, $cuS6T$reactariai18n.useLocalizedStringFormatter)((0, ($parcel$interopDefault($bd6dc95a3c5ee5cd$exports))), '@react-aria/calendar');
40
40
  let dateFormatter = (0, $cuS6T$reactariai18n.useDateFormatter)({
41
- weekday: "long",
42
- day: "numeric",
43
- month: "long",
44
- year: "numeric",
41
+ weekday: 'long',
42
+ day: 'numeric',
43
+ month: 'long',
44
+ year: 'numeric',
45
45
  era: (0, $df1d8e967e73ec8e$exports.getEraFormat)(date),
46
46
  timeZone: state.timeZone
47
47
  });
@@ -50,7 +50,7 @@ function $4d833327a32c9193$export$136073280381448e(props, state, ref) {
50
50
  isDisabled = isDisabled || state.isCellDisabled(date);
51
51
  let isUnavailable = state.isCellUnavailable(date);
52
52
  let isSelectable = !isDisabled && !isUnavailable;
53
- let isInvalid = state.isValueInvalid && ("highlightedRange" in state ? !state.anchorDate && state.highlightedRange && date.compare(state.highlightedRange.start) >= 0 && date.compare(state.highlightedRange.end) <= 0 : state.value && (0, $cuS6T$internationalizeddate.isSameDay)(state.value, date));
53
+ let isInvalid = state.isValueInvalid && ('highlightedRange' in state ? !state.anchorDate && state.highlightedRange && date.compare(state.highlightedRange.start) >= 0 && date.compare(state.highlightedRange.end) <= 0 : state.value && (0, $cuS6T$internationalizeddate.isSameDay)(state.value, date));
54
54
  if (isInvalid) isSelected = true;
55
55
  // For performance, reuse the same date object as before if the new date prop is the same.
56
56
  // This allows subsequent useMemo results to be reused.
@@ -62,21 +62,21 @@ function $4d833327a32c9193$export$136073280381448e(props, state, ref) {
62
62
  // aria-label should be localize Day of week, Month, Day and Year without Time.
63
63
  let isDateToday = (0, $cuS6T$internationalizeddate.isToday)(date, state.timeZone);
64
64
  let label = (0, $cuS6T$react.useMemo)(()=>{
65
- let label = "";
65
+ let label = '';
66
66
  // If this is a range calendar, add a description of the full selected range
67
67
  // to the first and last selected date.
68
- if ("highlightedRange" in state && state.value && !state.anchorDate && ((0, $cuS6T$internationalizeddate.isSameDay)(date, state.value.start) || (0, $cuS6T$internationalizeddate.isSameDay)(date, state.value.end))) label = selectedDateDescription + ", ";
68
+ if ('highlightedRange' in state && state.value && !state.anchorDate && ((0, $cuS6T$internationalizeddate.isSameDay)(date, state.value.start) || (0, $cuS6T$internationalizeddate.isSameDay)(date, state.value.end))) label = selectedDateDescription + ', ';
69
69
  label += dateFormatter.format(nativeDate);
70
70
  if (isDateToday) // If date is today, set appropriate string depending on selected state:
71
- label = stringFormatter.format(isSelected ? "todayDateSelected" : "todayDate", {
71
+ label = stringFormatter.format(isSelected ? 'todayDateSelected' : 'todayDate', {
72
72
  date: label
73
73
  });
74
74
  else if (isSelected) // If date is selected but not today:
75
- label = stringFormatter.format("dateSelected", {
75
+ label = stringFormatter.format('dateSelected', {
76
76
  date: label
77
77
  });
78
- if (state.minValue && (0, $cuS6T$internationalizeddate.isSameDay)(date, state.minValue)) label += ", " + stringFormatter.format("minimumDate");
79
- else if (state.maxValue && (0, $cuS6T$internationalizeddate.isSameDay)(date, state.maxValue)) label += ", " + stringFormatter.format("maximumDate");
78
+ if (state.minValue && (0, $cuS6T$internationalizeddate.isSameDay)(date, state.minValue)) label += ', ' + stringFormatter.format('minimumDate');
79
+ else if (state.maxValue && (0, $cuS6T$internationalizeddate.isSameDay)(date, state.maxValue)) label += ', ' + stringFormatter.format('maximumDate');
80
80
  return label;
81
81
  }, [
82
82
  dateFormatter,
@@ -90,11 +90,11 @@ function $4d833327a32c9193$export$136073280381448e(props, state, ref) {
90
90
  ]);
91
91
  // When a cell is focused and this is a range calendar, add a prompt to help
92
92
  // screenreader users know that they are in a range selection mode.
93
- let rangeSelectionPrompt = "";
94
- if ("anchorDate" in state && isFocused && !state.isReadOnly && isSelectable) {
93
+ let rangeSelectionPrompt = '';
94
+ if ('anchorDate' in state && isFocused && !state.isReadOnly && isSelectable) {
95
95
  // If selection has started add "click to finish selecting range"
96
- if (state.anchorDate) rangeSelectionPrompt = stringFormatter.format("finishRangeSelectionPrompt");
97
- else rangeSelectionPrompt = stringFormatter.format("startRangeSelectionPrompt");
96
+ if (state.anchorDate) rangeSelectionPrompt = stringFormatter.format('finishRangeSelectionPrompt');
97
+ else rangeSelectionPrompt = stringFormatter.format('startRangeSelectionPrompt');
98
98
  }
99
99
  let descriptionProps = (0, $cuS6T$reactariautils.useDescription)(rangeSelectionPrompt);
100
100
  let isAnchorPressed = (0, $cuS6T$react.useRef)(false);
@@ -103,7 +103,7 @@ function $4d833327a32c9193$export$136073280381448e(props, state, ref) {
103
103
  let { pressProps: pressProps, isPressed: isPressed } = (0, $cuS6T$reactariainteractions.usePress)({
104
104
  // When dragging to select a range, we don't want dragging over the original anchor
105
105
  // again to trigger onPressStart. Cancel presses immediately when the pointer exits.
106
- shouldCancelOnPointerExit: "anchorDate" in state && !!state.anchorDate,
106
+ shouldCancelOnPointerExit: 'anchorDate' in state && !!state.anchorDate,
107
107
  preventFocusOnPress: true,
108
108
  isDisabled: !isSelectable || state.isReadOnly,
109
109
  onPressStart (e) {
@@ -111,7 +111,7 @@ function $4d833327a32c9193$export$136073280381448e(props, state, ref) {
111
111
  state.setFocusedDate(date);
112
112
  return;
113
113
  }
114
- if ("highlightedRange" in state && !state.anchorDate && (e.pointerType === "mouse" || e.pointerType === "touch")) {
114
+ if ('highlightedRange' in state && !state.anchorDate && (e.pointerType === 'mouse' || e.pointerType === 'touch')) {
115
115
  // Allow dragging the start or end date of a range to modify it
116
116
  // rather than starting a new selection.
117
117
  // Don't allow dragging when invalid, or weird jumping behavior may occur as date ranges
@@ -140,7 +140,7 @@ function $4d833327a32c9193$export$136073280381448e(props, state, ref) {
140
140
  };
141
141
  // Start selection on mouse/touch down so users can drag to select a range.
142
142
  // On touch, delay dragging to determine if the user really meant to scroll.
143
- if (e.pointerType === "touch") touchDragTimerRef.current = setTimeout(startDragging, 200);
143
+ if (e.pointerType === 'touch') touchDragTimerRef.current = setTimeout(startDragging, 200);
144
144
  else startDragging();
145
145
  }
146
146
  },
@@ -152,7 +152,7 @@ function $4d833327a32c9193$export$136073280381448e(props, state, ref) {
152
152
  },
153
153
  onPress () {
154
154
  // For non-range selection, always select on press up.
155
- if (!("anchorDate" in state) && !state.isReadOnly) {
155
+ if (!('anchorDate' in state) && !state.isReadOnly) {
156
156
  state.selectDate(date);
157
157
  state.setFocusedDate(date);
158
158
  }
@@ -162,11 +162,11 @@ function $4d833327a32c9193$export$136073280381448e(props, state, ref) {
162
162
  // If the user tapped quickly, the date won't be selected yet and the
163
163
  // timer will still be in progress. In this case, select the date on touch up.
164
164
  // Timer is cleared in onPressEnd.
165
- if ("anchorDate" in state && touchDragTimerRef.current) {
165
+ if ('anchorDate' in state && touchDragTimerRef.current) {
166
166
  state.selectDate(date);
167
167
  state.setFocusedDate(date);
168
168
  }
169
- if ("anchorDate" in state) {
169
+ if ('anchorDate' in state) {
170
170
  if (isRangeBoundaryPressed.current) // When clicking on the start or end date of an already selected range,
171
171
  // start a new selection on press up to also allow dragging the date to
172
172
  // change the existing range.
@@ -175,7 +175,7 @@ function $4d833327a32c9193$export$136073280381448e(props, state, ref) {
175
175
  // When releasing a drag or pressing the end date of a range, select it.
176
176
  state.selectDate(date);
177
177
  state.setFocusedDate(date);
178
- } else if (e.pointerType === "keyboard" && !state.anchorDate) {
178
+ } else if (e.pointerType === 'keyboard' && !state.anchorDate) {
179
179
  // For range selection, auto-advance the focused date by one if using keyboard.
180
180
  // This gives an indication that you're selecting a range rather than a single date.
181
181
  // For mouse, this is unnecessary because users will see the indication on hover. For screen readers,
@@ -188,7 +188,7 @@ function $4d833327a32c9193$export$136073280381448e(props, state, ref) {
188
188
  days: 1
189
189
  });
190
190
  if (!state.isInvalid(nextDay)) state.setFocusedDate(nextDay);
191
- } else if (e.pointerType === "virtual") {
191
+ } else if (e.pointerType === 'virtual') {
192
192
  // For screen readers, just select the date on click.
193
193
  state.selectDate(date);
194
194
  state.setFocusedDate(date);
@@ -209,7 +209,7 @@ function $4d833327a32c9193$export$136073280381448e(props, state, ref) {
209
209
  // Also only scroll into view if the cell actually got focused.
210
210
  // There are some cases where the cell might be disabled or inside,
211
211
  // an inert container and we don't want to scroll then.
212
- if ((0, $cuS6T$reactariainteractions.getInteractionModality)() !== "pointer" && document.activeElement === ref.current) (0, $cuS6T$reactariautils.scrollIntoViewport)(ref.current, {
212
+ if ((0, $cuS6T$reactariainteractions.getInteractionModality)() !== 'pointer' && document.activeElement === ref.current) (0, $cuS6T$reactariautils.scrollIntoViewport)(ref.current, {
213
213
  containingElement: (0, $cuS6T$reactariautils.getScrollParent)(ref.current)
214
214
  });
215
215
  }
@@ -218,43 +218,43 @@ function $4d833327a32c9193$export$136073280381448e(props, state, ref) {
218
218
  ref
219
219
  ]);
220
220
  let cellDateFormatter = (0, $cuS6T$reactariai18n.useDateFormatter)({
221
- day: "numeric",
221
+ day: 'numeric',
222
222
  timeZone: state.timeZone,
223
223
  calendar: date.calendar.identifier
224
224
  });
225
- let formattedDate = (0, $cuS6T$react.useMemo)(()=>cellDateFormatter.formatToParts(nativeDate).find((part)=>part.type === "day").value, [
225
+ let formattedDate = (0, $cuS6T$react.useMemo)(()=>cellDateFormatter.formatToParts(nativeDate).find((part)=>part.type === 'day').value, [
226
226
  cellDateFormatter,
227
227
  nativeDate
228
228
  ]);
229
229
  return {
230
230
  cellProps: {
231
- role: "gridcell",
232
- "aria-disabled": !isSelectable || null,
233
- "aria-selected": isSelected || null,
234
- "aria-invalid": isInvalid || null
231
+ role: 'gridcell',
232
+ 'aria-disabled': !isSelectable || null,
233
+ 'aria-selected': isSelected || null,
234
+ 'aria-invalid': isInvalid || null
235
235
  },
236
236
  buttonProps: (0, $cuS6T$reactariautils.mergeProps)(pressProps, {
237
237
  onFocus () {
238
238
  if (!isDisabled) state.setFocusedDate(date);
239
239
  },
240
240
  tabIndex: tabIndex,
241
- role: "button",
242
- "aria-disabled": !isSelectable || null,
243
- "aria-label": label,
244
- "aria-invalid": isInvalid || null,
245
- "aria-describedby": [
241
+ role: 'button',
242
+ 'aria-disabled': !isSelectable || null,
243
+ 'aria-label': label,
244
+ 'aria-invalid': isInvalid || null,
245
+ 'aria-describedby': [
246
246
  isInvalid ? errorMessageId : null,
247
- descriptionProps["aria-describedby"]
248
- ].filter(Boolean).join(" ") || undefined,
247
+ descriptionProps['aria-describedby']
248
+ ].filter(Boolean).join(' ') || undefined,
249
249
  onPointerEnter (e) {
250
250
  // Highlight the date on hover or drag over a date when selecting a range.
251
- if ("highlightDate" in state && (e.pointerType !== "touch" || state.isDragging) && isSelectable) state.highlightDate(date);
251
+ if ('highlightDate' in state && (e.pointerType !== 'touch' || state.isDragging) && isSelectable) state.highlightDate(date);
252
252
  },
253
253
  onPointerDown (e) {
254
254
  // This is necessary on touch devices to allow dragging
255
255
  // outside the original pressed element.
256
256
  // (JSDOM does not support this)
257
- if ("releasePointerCapture" in e.target) e.target.releasePointerCapture(e.pointerId);
257
+ if ('releasePointerCapture' in e.target) e.target.releasePointerCapture(e.pointerId);
258
258
  },
259
259
  onContextMenu (e) {
260
260
  // Prevent context menu on long press.
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/@react-aria/calendar/src/useCalendarCell.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\nimport {CalendarDate, isEqualDay, isSameDay, isToday} from '@internationalized/date';\nimport {CalendarState, RangeCalendarState} from '@react-stately/calendar';\nimport {DOMAttributes} from '@react-types/shared';\nimport {focusWithoutScrolling, getScrollParent, mergeProps, scrollIntoViewport, useDeepMemo, useDescription} from '@react-aria/utils';\nimport {getEraFormat, hookData} from './utils';\nimport {getInteractionModality, usePress} from '@react-aria/interactions';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {RefObject, useEffect, useMemo, useRef} from 'react';\nimport {useDateFormatter, useLocalizedStringFormatter} from '@react-aria/i18n';\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\nexport interface CalendarCellAria {\n /** Props for the grid cell element (e.g. `<td>`). */\n cellProps: DOMAttributes,\n /** Props for the button element within the cell. */\n buttonProps: DOMAttributes,\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 /** Whether the cell is part of an invalid selection. */\n isInvalid: 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 {errorMessageId, selectedDateDescription} = hookData.get(state);\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-aria/calendar');\n let dateFormatter = useDateFormatter({\n weekday: 'long',\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n era: getEraFormat(date),\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 let isInvalid = state.isValueInvalid && (\n 'highlightedRange' in state\n ? !state.anchorDate && state.highlightedRange && date.compare(state.highlightedRange.start) >= 0 && date.compare(state.highlightedRange.end) <= 0\n : state.value && isSameDay(state.value, date)\n );\n\n if (isInvalid) {\n isSelected = true;\n }\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 date = useDeepMemo<CalendarDate>(date, isEqualDay);\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 let label = '';\n\n // If this is a range calendar, add a description of the full selected range\n // to the first and last selected date.\n if (\n 'highlightedRange' in state &&\n state.value &&\n !state.anchorDate &&\n (isSameDay(date, state.value.start) || isSameDay(date, state.value.end))\n ) {\n label = selectedDateDescription + ', ';\n }\n\n label += dateFormatter.format(nativeDate);\n if (isDateToday) {\n // If date is today, set appropriate string depending on selected state:\n label = stringFormatter.format(isSelected ? 'todayDateSelected' : 'todayDate', {\n date: label\n });\n } else if (isSelected) {\n // If date is selected but not today:\n label = stringFormatter.format('dateSelected', {\n date: label\n });\n }\n\n if (state.minValue && isSameDay(date, state.minValue)) {\n label += ', ' + stringFormatter.format('minimumDate');\n } else if (state.maxValue && isSameDay(date, state.maxValue)) {\n label += ', ' + stringFormatter.format('maximumDate');\n }\n\n return label;\n }, [dateFormatter, nativeDate, stringFormatter, isSelected, isDateToday, date, state, selectedDateDescription]);\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 let rangeSelectionPrompt = '';\n if ('anchorDate' in state && isFocused && !state.isReadOnly && isSelectable) {\n // If selection has started add \"click to finish selecting range\"\n if (state.anchorDate) {\n rangeSelectionPrompt = stringFormatter.format('finishRangeSelectionPrompt');\n // Otherwise, add \"click to start selecting range\" prompt\n } else {\n rangeSelectionPrompt = stringFormatter.format('startRangeSelectionPrompt');\n }\n }\n\n let descriptionProps = useDescription(rangeSelectionPrompt);\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 || state.isReadOnly,\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 // Don't allow dragging when invalid, or weird jumping behavior may occur as date ranges\n // are constrained to available dates. The user will need to select a new range in this case.\n if (state.highlightedRange && !isInvalid) {\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 // Scroll into view if navigating with a keyboard, otherwise\n // try not to shift the view under the user's mouse/finger.\n // If in a overlay, scrollIntoViewport will only cause scrolling\n // up to the overlay scroll body to prevent overlay shifting.\n // Also only scroll into view if the cell actually got focused.\n // There are some cases where the cell might be disabled or inside,\n // an inert container and we don't want to scroll then.\n if (getInteractionModality() !== 'pointer' && document.activeElement === ref.current) {\n scrollIntoViewport(ref.current, {containingElement: getScrollParent(ref.current)});\n }\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.formatToParts(nativeDate).find(part => part.type === 'day').value, [cellDateFormatter, nativeDate]);\n\n return {\n cellProps: {\n role: 'gridcell',\n 'aria-disabled': !isSelectable || null,\n 'aria-selected': isSelected || null,\n 'aria-invalid': isInvalid || 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 'aria-invalid': isInvalid || null,\n 'aria-describedby': [\n isInvalid ? errorMessageId : null,\n descriptionProps['aria-describedby']\n ].filter(Boolean).join(' ') || undefined,\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 isInvalid,\n formattedDate\n };\n}\n"],"names":[],"version":3,"file":"useCalendarCell.main.js.map"}
1
+ {"mappings":"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","sources":["packages/@react-aria/calendar/src/useCalendarCell.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\nimport {CalendarDate, isEqualDay, isSameDay, isToday} from '@internationalized/date';\nimport {CalendarState, RangeCalendarState} from '@react-stately/calendar';\nimport {DOMAttributes, RefObject} from '@react-types/shared';\nimport {focusWithoutScrolling, getScrollParent, mergeProps, scrollIntoViewport, useDeepMemo, useDescription} from '@react-aria/utils';\nimport {getEraFormat, hookData} from './utils';\nimport {getInteractionModality, usePress} from '@react-aria/interactions';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {useDateFormatter, useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useEffect, useMemo, useRef} from 'react';\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\nexport interface CalendarCellAria {\n /** Props for the grid cell element (e.g. `<td>`). */\n cellProps: DOMAttributes,\n /** Props for the button element within the cell. */\n buttonProps: DOMAttributes,\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 /** Whether the cell is part of an invalid selection. */\n isInvalid: 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 | null>): CalendarCellAria {\n let {date, isDisabled} = props;\n let {errorMessageId, selectedDateDescription} = hookData.get(state);\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-aria/calendar');\n let dateFormatter = useDateFormatter({\n weekday: 'long',\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n era: getEraFormat(date),\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 let isInvalid = state.isValueInvalid && (\n 'highlightedRange' in state\n ? !state.anchorDate && state.highlightedRange && date.compare(state.highlightedRange.start) >= 0 && date.compare(state.highlightedRange.end) <= 0\n : state.value && isSameDay(state.value, date)\n );\n\n if (isInvalid) {\n isSelected = true;\n }\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 date = useDeepMemo<CalendarDate>(date, isEqualDay);\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 let label = '';\n\n // If this is a range calendar, add a description of the full selected range\n // to the first and last selected date.\n if (\n 'highlightedRange' in state &&\n state.value &&\n !state.anchorDate &&\n (isSameDay(date, state.value.start) || isSameDay(date, state.value.end))\n ) {\n label = selectedDateDescription + ', ';\n }\n\n label += dateFormatter.format(nativeDate);\n if (isDateToday) {\n // If date is today, set appropriate string depending on selected state:\n label = stringFormatter.format(isSelected ? 'todayDateSelected' : 'todayDate', {\n date: label\n });\n } else if (isSelected) {\n // If date is selected but not today:\n label = stringFormatter.format('dateSelected', {\n date: label\n });\n }\n\n if (state.minValue && isSameDay(date, state.minValue)) {\n label += ', ' + stringFormatter.format('minimumDate');\n } else if (state.maxValue && isSameDay(date, state.maxValue)) {\n label += ', ' + stringFormatter.format('maximumDate');\n }\n\n return label;\n }, [dateFormatter, nativeDate, stringFormatter, isSelected, isDateToday, date, state, selectedDateDescription]);\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 let rangeSelectionPrompt = '';\n if ('anchorDate' in state && isFocused && !state.isReadOnly && isSelectable) {\n // If selection has started add \"click to finish selecting range\"\n if (state.anchorDate) {\n rangeSelectionPrompt = stringFormatter.format('finishRangeSelectionPrompt');\n // Otherwise, add \"click to start selecting range\" prompt\n } else {\n rangeSelectionPrompt = stringFormatter.format('startRangeSelectionPrompt');\n }\n }\n\n let descriptionProps = useDescription(rangeSelectionPrompt);\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 || state.isReadOnly,\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 // Don't allow dragging when invalid, or weird jumping behavior may occur as date ranges\n // are constrained to available dates. The user will need to select a new range in this case.\n if (state.highlightedRange && !isInvalid) {\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 // Scroll into view if navigating with a keyboard, otherwise\n // try not to shift the view under the user's mouse/finger.\n // If in a overlay, scrollIntoViewport will only cause scrolling\n // up to the overlay scroll body to prevent overlay shifting.\n // Also only scroll into view if the cell actually got focused.\n // There are some cases where the cell might be disabled or inside,\n // an inert container and we don't want to scroll then.\n if (getInteractionModality() !== 'pointer' && document.activeElement === ref.current) {\n scrollIntoViewport(ref.current, {containingElement: getScrollParent(ref.current)});\n }\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.formatToParts(nativeDate).find(part => part.type === 'day').value, [cellDateFormatter, nativeDate]);\n\n return {\n cellProps: {\n role: 'gridcell',\n 'aria-disabled': !isSelectable || null,\n 'aria-selected': isSelected || null,\n 'aria-invalid': isInvalid || 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 'aria-invalid': isInvalid || null,\n 'aria-describedby': [\n isInvalid ? errorMessageId : null,\n descriptionProps['aria-describedby']\n ].filter(Boolean).join(' ') || undefined,\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 isInvalid,\n formattedDate\n };\n}\n"],"names":[],"version":3,"file":"useCalendarCell.main.js.map"}
@@ -3,8 +3,8 @@ import $dm6hl$intlStringsmodulejs from "./intlStrings.mjs";
3
3
  import {isSameDay as $dm6hl$isSameDay, isEqualDay as $dm6hl$isEqualDay, isToday as $dm6hl$isToday} from "@internationalized/date";
4
4
  import {useDeepMemo as $dm6hl$useDeepMemo, useDescription as $dm6hl$useDescription, focusWithoutScrolling as $dm6hl$focusWithoutScrolling, scrollIntoViewport as $dm6hl$scrollIntoViewport, getScrollParent as $dm6hl$getScrollParent, mergeProps as $dm6hl$mergeProps} from "@react-aria/utils";
5
5
  import {usePress as $dm6hl$usePress, getInteractionModality as $dm6hl$getInteractionModality} from "@react-aria/interactions";
6
- import {useMemo as $dm6hl$useMemo, useRef as $dm6hl$useRef, useEffect as $dm6hl$useEffect} from "react";
7
6
  import {useLocalizedStringFormatter as $dm6hl$useLocalizedStringFormatter, useDateFormatter as $dm6hl$useDateFormatter} from "@react-aria/i18n";
7
+ import {useMemo as $dm6hl$useMemo, useRef as $dm6hl$useRef, useEffect as $dm6hl$useEffect} from "react";
8
8
 
9
9
 
10
10
  function $parcel$interopDefault(a) {
@@ -30,12 +30,12 @@ function $parcel$interopDefault(a) {
30
30
  function $36a0ac60f04457c5$export$136073280381448e(props, state, ref) {
31
31
  let { date: date, isDisabled: isDisabled } = props;
32
32
  let { errorMessageId: errorMessageId, selectedDateDescription: selectedDateDescription } = (0, $a074e1e2d0f0a665$export$653eddfc964b0f8a).get(state);
33
- let stringFormatter = (0, $dm6hl$useLocalizedStringFormatter)((0, ($parcel$interopDefault($dm6hl$intlStringsmodulejs))), "@react-aria/calendar");
33
+ let stringFormatter = (0, $dm6hl$useLocalizedStringFormatter)((0, ($parcel$interopDefault($dm6hl$intlStringsmodulejs))), '@react-aria/calendar');
34
34
  let dateFormatter = (0, $dm6hl$useDateFormatter)({
35
- weekday: "long",
36
- day: "numeric",
37
- month: "long",
38
- year: "numeric",
35
+ weekday: 'long',
36
+ day: 'numeric',
37
+ month: 'long',
38
+ year: 'numeric',
39
39
  era: (0, $a074e1e2d0f0a665$export$134cbb7fb09a9522)(date),
40
40
  timeZone: state.timeZone
41
41
  });
@@ -44,7 +44,7 @@ function $36a0ac60f04457c5$export$136073280381448e(props, state, ref) {
44
44
  isDisabled = isDisabled || state.isCellDisabled(date);
45
45
  let isUnavailable = state.isCellUnavailable(date);
46
46
  let isSelectable = !isDisabled && !isUnavailable;
47
- let isInvalid = state.isValueInvalid && ("highlightedRange" in state ? !state.anchorDate && state.highlightedRange && date.compare(state.highlightedRange.start) >= 0 && date.compare(state.highlightedRange.end) <= 0 : state.value && (0, $dm6hl$isSameDay)(state.value, date));
47
+ let isInvalid = state.isValueInvalid && ('highlightedRange' in state ? !state.anchorDate && state.highlightedRange && date.compare(state.highlightedRange.start) >= 0 && date.compare(state.highlightedRange.end) <= 0 : state.value && (0, $dm6hl$isSameDay)(state.value, date));
48
48
  if (isInvalid) isSelected = true;
49
49
  // For performance, reuse the same date object as before if the new date prop is the same.
50
50
  // This allows subsequent useMemo results to be reused.
@@ -56,21 +56,21 @@ function $36a0ac60f04457c5$export$136073280381448e(props, state, ref) {
56
56
  // aria-label should be localize Day of week, Month, Day and Year without Time.
57
57
  let isDateToday = (0, $dm6hl$isToday)(date, state.timeZone);
58
58
  let label = (0, $dm6hl$useMemo)(()=>{
59
- let label = "";
59
+ let label = '';
60
60
  // If this is a range calendar, add a description of the full selected range
61
61
  // to the first and last selected date.
62
- if ("highlightedRange" in state && state.value && !state.anchorDate && ((0, $dm6hl$isSameDay)(date, state.value.start) || (0, $dm6hl$isSameDay)(date, state.value.end))) label = selectedDateDescription + ", ";
62
+ if ('highlightedRange' in state && state.value && !state.anchorDate && ((0, $dm6hl$isSameDay)(date, state.value.start) || (0, $dm6hl$isSameDay)(date, state.value.end))) label = selectedDateDescription + ', ';
63
63
  label += dateFormatter.format(nativeDate);
64
64
  if (isDateToday) // If date is today, set appropriate string depending on selected state:
65
- label = stringFormatter.format(isSelected ? "todayDateSelected" : "todayDate", {
65
+ label = stringFormatter.format(isSelected ? 'todayDateSelected' : 'todayDate', {
66
66
  date: label
67
67
  });
68
68
  else if (isSelected) // If date is selected but not today:
69
- label = stringFormatter.format("dateSelected", {
69
+ label = stringFormatter.format('dateSelected', {
70
70
  date: label
71
71
  });
72
- if (state.minValue && (0, $dm6hl$isSameDay)(date, state.minValue)) label += ", " + stringFormatter.format("minimumDate");
73
- else if (state.maxValue && (0, $dm6hl$isSameDay)(date, state.maxValue)) label += ", " + stringFormatter.format("maximumDate");
72
+ if (state.minValue && (0, $dm6hl$isSameDay)(date, state.minValue)) label += ', ' + stringFormatter.format('minimumDate');
73
+ else if (state.maxValue && (0, $dm6hl$isSameDay)(date, state.maxValue)) label += ', ' + stringFormatter.format('maximumDate');
74
74
  return label;
75
75
  }, [
76
76
  dateFormatter,
@@ -84,11 +84,11 @@ function $36a0ac60f04457c5$export$136073280381448e(props, state, ref) {
84
84
  ]);
85
85
  // When a cell is focused and this is a range calendar, add a prompt to help
86
86
  // screenreader users know that they are in a range selection mode.
87
- let rangeSelectionPrompt = "";
88
- if ("anchorDate" in state && isFocused && !state.isReadOnly && isSelectable) {
87
+ let rangeSelectionPrompt = '';
88
+ if ('anchorDate' in state && isFocused && !state.isReadOnly && isSelectable) {
89
89
  // If selection has started add "click to finish selecting range"
90
- if (state.anchorDate) rangeSelectionPrompt = stringFormatter.format("finishRangeSelectionPrompt");
91
- else rangeSelectionPrompt = stringFormatter.format("startRangeSelectionPrompt");
90
+ if (state.anchorDate) rangeSelectionPrompt = stringFormatter.format('finishRangeSelectionPrompt');
91
+ else rangeSelectionPrompt = stringFormatter.format('startRangeSelectionPrompt');
92
92
  }
93
93
  let descriptionProps = (0, $dm6hl$useDescription)(rangeSelectionPrompt);
94
94
  let isAnchorPressed = (0, $dm6hl$useRef)(false);
@@ -97,7 +97,7 @@ function $36a0ac60f04457c5$export$136073280381448e(props, state, ref) {
97
97
  let { pressProps: pressProps, isPressed: isPressed } = (0, $dm6hl$usePress)({
98
98
  // When dragging to select a range, we don't want dragging over the original anchor
99
99
  // again to trigger onPressStart. Cancel presses immediately when the pointer exits.
100
- shouldCancelOnPointerExit: "anchorDate" in state && !!state.anchorDate,
100
+ shouldCancelOnPointerExit: 'anchorDate' in state && !!state.anchorDate,
101
101
  preventFocusOnPress: true,
102
102
  isDisabled: !isSelectable || state.isReadOnly,
103
103
  onPressStart (e) {
@@ -105,7 +105,7 @@ function $36a0ac60f04457c5$export$136073280381448e(props, state, ref) {
105
105
  state.setFocusedDate(date);
106
106
  return;
107
107
  }
108
- if ("highlightedRange" in state && !state.anchorDate && (e.pointerType === "mouse" || e.pointerType === "touch")) {
108
+ if ('highlightedRange' in state && !state.anchorDate && (e.pointerType === 'mouse' || e.pointerType === 'touch')) {
109
109
  // Allow dragging the start or end date of a range to modify it
110
110
  // rather than starting a new selection.
111
111
  // Don't allow dragging when invalid, or weird jumping behavior may occur as date ranges
@@ -134,7 +134,7 @@ function $36a0ac60f04457c5$export$136073280381448e(props, state, ref) {
134
134
  };
135
135
  // Start selection on mouse/touch down so users can drag to select a range.
136
136
  // On touch, delay dragging to determine if the user really meant to scroll.
137
- if (e.pointerType === "touch") touchDragTimerRef.current = setTimeout(startDragging, 200);
137
+ if (e.pointerType === 'touch') touchDragTimerRef.current = setTimeout(startDragging, 200);
138
138
  else startDragging();
139
139
  }
140
140
  },
@@ -146,7 +146,7 @@ function $36a0ac60f04457c5$export$136073280381448e(props, state, ref) {
146
146
  },
147
147
  onPress () {
148
148
  // For non-range selection, always select on press up.
149
- if (!("anchorDate" in state) && !state.isReadOnly) {
149
+ if (!('anchorDate' in state) && !state.isReadOnly) {
150
150
  state.selectDate(date);
151
151
  state.setFocusedDate(date);
152
152
  }
@@ -156,11 +156,11 @@ function $36a0ac60f04457c5$export$136073280381448e(props, state, ref) {
156
156
  // If the user tapped quickly, the date won't be selected yet and the
157
157
  // timer will still be in progress. In this case, select the date on touch up.
158
158
  // Timer is cleared in onPressEnd.
159
- if ("anchorDate" in state && touchDragTimerRef.current) {
159
+ if ('anchorDate' in state && touchDragTimerRef.current) {
160
160
  state.selectDate(date);
161
161
  state.setFocusedDate(date);
162
162
  }
163
- if ("anchorDate" in state) {
163
+ if ('anchorDate' in state) {
164
164
  if (isRangeBoundaryPressed.current) // When clicking on the start or end date of an already selected range,
165
165
  // start a new selection on press up to also allow dragging the date to
166
166
  // change the existing range.
@@ -169,7 +169,7 @@ function $36a0ac60f04457c5$export$136073280381448e(props, state, ref) {
169
169
  // When releasing a drag or pressing the end date of a range, select it.
170
170
  state.selectDate(date);
171
171
  state.setFocusedDate(date);
172
- } else if (e.pointerType === "keyboard" && !state.anchorDate) {
172
+ } else if (e.pointerType === 'keyboard' && !state.anchorDate) {
173
173
  // For range selection, auto-advance the focused date by one if using keyboard.
174
174
  // This gives an indication that you're selecting a range rather than a single date.
175
175
  // For mouse, this is unnecessary because users will see the indication on hover. For screen readers,
@@ -182,7 +182,7 @@ function $36a0ac60f04457c5$export$136073280381448e(props, state, ref) {
182
182
  days: 1
183
183
  });
184
184
  if (!state.isInvalid(nextDay)) state.setFocusedDate(nextDay);
185
- } else if (e.pointerType === "virtual") {
185
+ } else if (e.pointerType === 'virtual') {
186
186
  // For screen readers, just select the date on click.
187
187
  state.selectDate(date);
188
188
  state.setFocusedDate(date);
@@ -203,7 +203,7 @@ function $36a0ac60f04457c5$export$136073280381448e(props, state, ref) {
203
203
  // Also only scroll into view if the cell actually got focused.
204
204
  // There are some cases where the cell might be disabled or inside,
205
205
  // an inert container and we don't want to scroll then.
206
- if ((0, $dm6hl$getInteractionModality)() !== "pointer" && document.activeElement === ref.current) (0, $dm6hl$scrollIntoViewport)(ref.current, {
206
+ if ((0, $dm6hl$getInteractionModality)() !== 'pointer' && document.activeElement === ref.current) (0, $dm6hl$scrollIntoViewport)(ref.current, {
207
207
  containingElement: (0, $dm6hl$getScrollParent)(ref.current)
208
208
  });
209
209
  }
@@ -212,43 +212,43 @@ function $36a0ac60f04457c5$export$136073280381448e(props, state, ref) {
212
212
  ref
213
213
  ]);
214
214
  let cellDateFormatter = (0, $dm6hl$useDateFormatter)({
215
- day: "numeric",
215
+ day: 'numeric',
216
216
  timeZone: state.timeZone,
217
217
  calendar: date.calendar.identifier
218
218
  });
219
- let formattedDate = (0, $dm6hl$useMemo)(()=>cellDateFormatter.formatToParts(nativeDate).find((part)=>part.type === "day").value, [
219
+ let formattedDate = (0, $dm6hl$useMemo)(()=>cellDateFormatter.formatToParts(nativeDate).find((part)=>part.type === 'day').value, [
220
220
  cellDateFormatter,
221
221
  nativeDate
222
222
  ]);
223
223
  return {
224
224
  cellProps: {
225
- role: "gridcell",
226
- "aria-disabled": !isSelectable || null,
227
- "aria-selected": isSelected || null,
228
- "aria-invalid": isInvalid || null
225
+ role: 'gridcell',
226
+ 'aria-disabled': !isSelectable || null,
227
+ 'aria-selected': isSelected || null,
228
+ 'aria-invalid': isInvalid || null
229
229
  },
230
230
  buttonProps: (0, $dm6hl$mergeProps)(pressProps, {
231
231
  onFocus () {
232
232
  if (!isDisabled) state.setFocusedDate(date);
233
233
  },
234
234
  tabIndex: tabIndex,
235
- role: "button",
236
- "aria-disabled": !isSelectable || null,
237
- "aria-label": label,
238
- "aria-invalid": isInvalid || null,
239
- "aria-describedby": [
235
+ role: 'button',
236
+ 'aria-disabled': !isSelectable || null,
237
+ 'aria-label': label,
238
+ 'aria-invalid': isInvalid || null,
239
+ 'aria-describedby': [
240
240
  isInvalid ? errorMessageId : null,
241
- descriptionProps["aria-describedby"]
242
- ].filter(Boolean).join(" ") || undefined,
241
+ descriptionProps['aria-describedby']
242
+ ].filter(Boolean).join(' ') || undefined,
243
243
  onPointerEnter (e) {
244
244
  // Highlight the date on hover or drag over a date when selecting a range.
245
- if ("highlightDate" in state && (e.pointerType !== "touch" || state.isDragging) && isSelectable) state.highlightDate(date);
245
+ if ('highlightDate' in state && (e.pointerType !== 'touch' || state.isDragging) && isSelectable) state.highlightDate(date);
246
246
  },
247
247
  onPointerDown (e) {
248
248
  // This is necessary on touch devices to allow dragging
249
249
  // outside the original pressed element.
250
250
  // (JSDOM does not support this)
251
- if ("releasePointerCapture" in e.target) e.target.releasePointerCapture(e.pointerId);
251
+ if ('releasePointerCapture' in e.target) e.target.releasePointerCapture(e.pointerId);
252
252
  },
253
253
  onContextMenu (e) {
254
254
  // Prevent context menu on long press.
@@ -268,4 +268,4 @@ function $36a0ac60f04457c5$export$136073280381448e(props, state, ref) {
268
268
 
269
269
 
270
270
  export {$36a0ac60f04457c5$export$136073280381448e as useCalendarCell};
271
- //# sourceMappingURL=useCalendarCell.mjs.map
271
+ //# sourceMappingURL=useCalendarCell.module.js.map