@react-aria/datepicker 3.10.1 → 3.11.0
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/types.d.ts +10 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/useDateField.main.js +2 -1
- package/dist/useDateField.main.js.map +1 -1
- package/dist/useDateField.mjs +2 -1
- package/dist/useDateField.module.js +2 -1
- package/dist/useDateField.module.js.map +1 -1
- package/dist/useDatePicker.main.js +1 -1
- package/dist/useDatePicker.main.js.map +1 -1
- package/dist/useDatePicker.mjs +1 -1
- package/dist/useDatePicker.module.js +1 -1
- package/dist/useDatePicker.module.js.map +1 -1
- package/dist/useDatePickerGroup.main.js +1 -1
- package/dist/useDatePickerGroup.main.js.map +1 -1
- package/dist/useDatePickerGroup.mjs +1 -1
- package/dist/useDatePickerGroup.module.js +1 -1
- package/dist/useDatePickerGroup.module.js.map +1 -1
- package/dist/useDateRangePicker.main.js +1 -1
- package/dist/useDateRangePicker.main.js.map +1 -1
- package/dist/useDateRangePicker.mjs +1 -1
- package/dist/useDateRangePicker.module.js +1 -1
- package/dist/useDateRangePicker.module.js.map +1 -1
- package/dist/useDateSegment.main.js +8 -1
- package/dist/useDateSegment.main.js.map +1 -1
- package/dist/useDateSegment.mjs +8 -1
- package/dist/useDateSegment.module.js +8 -1
- package/dist/useDateSegment.module.js.map +1 -1
- package/package.json +19 -19
- package/src/useDateField.ts +8 -7
- package/src/useDatePicker.ts +3 -3
- package/src/useDatePickerGroup.ts +4 -4
- package/src/useDateRangePicker.ts +3 -3
- package/src/useDateSegment.ts +15 -5
package/src/useDateSegment.ts
CHANGED
|
@@ -12,18 +12,18 @@
|
|
|
12
12
|
|
|
13
13
|
import {CalendarDate, toCalendar} from '@internationalized/date';
|
|
14
14
|
import {DateFieldState, DateSegment} from '@react-stately/datepicker';
|
|
15
|
-
import {DOMAttributes} from '@react-types/shared';
|
|
16
15
|
import {getScrollParent, isIOS, isMac, mergeProps, scrollIntoViewport, useEvent, useId, useLabels, useLayoutEffect} from '@react-aria/utils';
|
|
17
16
|
import {hookData} from './useDateField';
|
|
18
17
|
import {NumberParser} from '@internationalized/number';
|
|
19
|
-
import React, {
|
|
18
|
+
import React, {useMemo, useRef} from 'react';
|
|
19
|
+
import {RefObject} from '@react-types/shared';
|
|
20
20
|
import {useDateFormatter, useFilter, useLocale} from '@react-aria/i18n';
|
|
21
21
|
import {useDisplayNames} from './useDisplayNames';
|
|
22
22
|
import {useSpinButton} from '@react-aria/spinbutton';
|
|
23
23
|
|
|
24
24
|
export interface DateSegmentAria {
|
|
25
25
|
/** Props for the segment element. */
|
|
26
|
-
segmentProps:
|
|
26
|
+
segmentProps: React.HTMLAttributes<HTMLDivElement>
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
/**
|
|
@@ -31,7 +31,7 @@ export interface DateSegmentAria {
|
|
|
31
31
|
* A date segment displays an individual unit of a date and time, and allows users to edit
|
|
32
32
|
* the value by typing or using the arrow keys to increment and decrement.
|
|
33
33
|
*/
|
|
34
|
-
export function useDateSegment(segment: DateSegment, state: DateFieldState, ref: RefObject<HTMLElement>): DateSegmentAria {
|
|
34
|
+
export function useDateSegment(segment: DateSegment, state: DateFieldState, ref: RefObject<HTMLElement | null>): DateSegmentAria {
|
|
35
35
|
let enteredKeys = useRef('');
|
|
36
36
|
let {locale} = useLocale();
|
|
37
37
|
let displayNames = useDisplayNames();
|
|
@@ -269,6 +269,17 @@ export function useDateSegment(segment: DateSegment, state: DateFieldState, ref:
|
|
|
269
269
|
selection.collapse(ref.current);
|
|
270
270
|
};
|
|
271
271
|
|
|
272
|
+
let documentRef = useRef(typeof document !== 'undefined' ? document : null);
|
|
273
|
+
useEvent(documentRef, 'selectionchange', () => {
|
|
274
|
+
// Enforce that the selection is collapsed when inside a date segment.
|
|
275
|
+
// Otherwise, when tapping on a segment in Android Chrome and then entering text,
|
|
276
|
+
// composition events will be fired that break the DOM structure and crash the page.
|
|
277
|
+
let selection = window.getSelection();
|
|
278
|
+
if (ref.current.contains(selection.anchorNode)) {
|
|
279
|
+
selection.collapse(ref.current);
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
|
|
272
283
|
let compositionRef = useRef('');
|
|
273
284
|
// @ts-ignore - TODO: possibly old TS version? doesn't fail in my editor...
|
|
274
285
|
useEvent(ref, 'beforeinput', e => {
|
|
@@ -375,7 +386,6 @@ export function useDateSegment(segment: DateSegment, state: DateFieldState, ref:
|
|
|
375
386
|
contentEditable: isEditable,
|
|
376
387
|
suppressContentEditableWarning: isEditable,
|
|
377
388
|
spellCheck: isEditable ? 'false' : undefined,
|
|
378
|
-
autoCapitalize: isEditable ? 'off' : undefined,
|
|
379
389
|
autoCorrect: isEditable ? 'off' : undefined,
|
|
380
390
|
// Capitalization was changed in React 17...
|
|
381
391
|
[parseInt(React.version, 10) >= 17 ? 'enterKeyHint' : 'enterkeyhint']: isEditable ? 'next' : undefined,
|