@mui/x-date-pickers 8.29.0 → 8.29.3
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/CHANGELOG.md +176 -1
- package/PickersTextField/PickersFilledInput/PickersFilledInput.js +1 -0
- package/PickersTextField/PickersFilledInput/PickersFilledInput.mjs +1 -0
- package/PickersTextField/PickersInput/PickersInput.js +1 -0
- package/PickersTextField/PickersInput/PickersInput.mjs +1 -0
- package/PickersTextField/PickersInputBase/PickersInputBase.js +20 -20
- package/PickersTextField/PickersInputBase/PickersInputBase.mjs +20 -20
- package/PickersTextField/PickersInputBase/PickersInputBase.types.d.mts +1 -0
- package/PickersTextField/PickersInputBase/PickersInputBase.types.d.ts +1 -0
- package/PickersTextField/PickersInputBase/pickersInputBaseClasses.js +1 -1
- package/PickersTextField/PickersInputBase/pickersInputBaseClasses.mjs +1 -1
- package/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.js +12 -8
- package/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.mjs +12 -8
- package/PickersTextField/PickersTextField.js +4 -1
- package/PickersTextField/PickersTextField.mjs +4 -1
- package/index.js +1 -1
- package/index.mjs +1 -1
- package/internals/hooks/useField/useField.types.d.mts +1 -0
- package/internals/hooks/useField/useField.types.d.ts +1 -0
- package/internals/hooks/useField/useField.utils.d.mts +0 -1
- package/internals/hooks/useField/useField.utils.d.ts +0 -1
- package/internals/hooks/useField/useField.utils.js +2 -2
- package/internals/hooks/useField/useField.utils.mjs +1 -1
- package/internals/hooks/useField/useFieldRootProps.d.mts +1 -0
- package/internals/hooks/useField/useFieldRootProps.d.ts +1 -0
- package/internals/hooks/useField/useFieldRootProps.js +135 -8
- package/internals/hooks/useField/useFieldRootProps.mjs +135 -8
- package/internals/hooks/useField/useFieldSectionContainerProps.js +23 -4
- package/internals/hooks/useField/useFieldSectionContainerProps.mjs +22 -4
- package/internals/hooks/useField/useFieldSectionContentProps.d.mts +2 -2
- package/internals/hooks/useField/useFieldSectionContentProps.d.ts +2 -2
- package/internals/hooks/useField/useFieldSectionContentProps.js +14 -11
- package/internals/hooks/useField/useFieldSectionContentProps.mjs +14 -11
- package/internals/hooks/useField/useFieldV7TextField.js +13 -0
- package/internals/hooks/useField/useFieldV7TextField.mjs +13 -0
- package/package.json +182 -182
|
@@ -2,6 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import useEventCallback from '@mui/utils/useEventCallback';
|
|
3
3
|
import { usePickerAdapter, usePickerTranslations } from "../../../hooks/index.mjs";
|
|
4
4
|
import { syncSelectionToDOM } from "./syncSelectionToDOM.mjs";
|
|
5
|
+
import { removeLocalizedDigits } from "./useField.utils.mjs";
|
|
5
6
|
/**
|
|
6
7
|
* Generate the props to pass to the content element of each section of the field.
|
|
7
8
|
* It is not used by the non-accessible DOM structure (with an <input /> element for editing).
|
|
@@ -26,6 +27,7 @@ export function useFieldSectionContentProps(parameters) {
|
|
|
26
27
|
sectionsValueBoundaries,
|
|
27
28
|
state,
|
|
28
29
|
value,
|
|
30
|
+
localizedDigits,
|
|
29
31
|
// Methods to update the states
|
|
30
32
|
clearActiveSection,
|
|
31
33
|
setCharacterQuery,
|
|
@@ -146,10 +148,10 @@ export function useFieldSectionContentProps(parameters) {
|
|
|
146
148
|
onFocus: createFocusHandler(sectionIndex),
|
|
147
149
|
// Aria attributes
|
|
148
150
|
'aria-readonly': readOnly,
|
|
149
|
-
'aria-valuenow': getSectionValueNow(section, adapter),
|
|
151
|
+
'aria-valuenow': getSectionValueNow(section, adapter, localizedDigits),
|
|
150
152
|
'aria-valuemin': sectionBoundaries.minimum,
|
|
151
153
|
'aria-valuemax': sectionBoundaries.maximum,
|
|
152
|
-
'aria-valuetext': section.value ? getSectionValueText(section, adapter) : translations.empty,
|
|
154
|
+
'aria-valuetext': section.value ? getSectionValueText(section, adapter, localizedDigits) : translations.empty,
|
|
153
155
|
'aria-label': translations[section.type],
|
|
154
156
|
'aria-disabled': disabled,
|
|
155
157
|
// Other
|
|
@@ -165,9 +167,9 @@ export function useFieldSectionContentProps(parameters) {
|
|
|
165
167
|
children: section.value || section.placeholder,
|
|
166
168
|
inputMode: section.contentType === 'letter' ? 'text' : 'numeric'
|
|
167
169
|
};
|
|
168
|
-
}, [sectionsValueBoundaries, isContainerEditable, disabled, readOnly, isEditable, translations, adapter, handleInput, handlePaste, handleMouseUp, handleDragOver, createFocusHandler, fieldValueManager, value]);
|
|
170
|
+
}, [sectionsValueBoundaries, isContainerEditable, disabled, readOnly, isEditable, translations, adapter, localizedDigits, handleInput, handlePaste, handleMouseUp, handleDragOver, createFocusHandler, fieldValueManager, value]);
|
|
169
171
|
}
|
|
170
|
-
function getSectionValueText(section, adapter) {
|
|
172
|
+
function getSectionValueText(section, adapter, localizedDigits) {
|
|
171
173
|
if (!section.value) {
|
|
172
174
|
return undefined;
|
|
173
175
|
}
|
|
@@ -175,7 +177,7 @@ function getSectionValueText(section, adapter) {
|
|
|
175
177
|
case 'month':
|
|
176
178
|
{
|
|
177
179
|
if (section.contentType === 'digit') {
|
|
178
|
-
const dateWithMonth = adapter.setMonth(adapter.date(), Number(section.value) - 1);
|
|
180
|
+
const dateWithMonth = adapter.setMonth(adapter.date(), Number(removeLocalizedDigits(section.value, localizedDigits)) - 1);
|
|
179
181
|
return adapter.isValid(dateWithMonth) ? adapter.format(dateWithMonth, 'month') : '';
|
|
180
182
|
}
|
|
181
183
|
const parsedDate = adapter.parse(section.value, section.format);
|
|
@@ -183,7 +185,7 @@ function getSectionValueText(section, adapter) {
|
|
|
183
185
|
}
|
|
184
186
|
case 'day':
|
|
185
187
|
if (section.contentType === 'digit') {
|
|
186
|
-
const dateWithDay = adapter.setDate(adapter.startOfYear(adapter.date()), Number(section.value));
|
|
188
|
+
const dateWithDay = adapter.setDate(adapter.startOfYear(adapter.date()), Number(removeLocalizedDigits(section.value, localizedDigits)));
|
|
187
189
|
return adapter.isValid(dateWithDay) ? adapter.format(dateWithDay, 'dayOfMonthFull') : '';
|
|
188
190
|
}
|
|
189
191
|
return section.value;
|
|
@@ -194,10 +196,11 @@ function getSectionValueText(section, adapter) {
|
|
|
194
196
|
return undefined;
|
|
195
197
|
}
|
|
196
198
|
}
|
|
197
|
-
function getSectionValueNow(section, adapter) {
|
|
199
|
+
function getSectionValueNow(section, adapter, localizedDigits) {
|
|
198
200
|
if (!section.value) {
|
|
199
201
|
return undefined;
|
|
200
202
|
}
|
|
203
|
+
const nonLocalizedValue = removeLocalizedDigits(section.value, localizedDigits);
|
|
201
204
|
switch (section.type) {
|
|
202
205
|
case 'weekDay':
|
|
203
206
|
{
|
|
@@ -205,7 +208,7 @@ function getSectionValueNow(section, adapter) {
|
|
|
205
208
|
// TODO: improve by resolving the week day number from a letter week day
|
|
206
209
|
return undefined;
|
|
207
210
|
}
|
|
208
|
-
return Number(
|
|
211
|
+
return Number(nonLocalizedValue);
|
|
209
212
|
}
|
|
210
213
|
case 'meridiem':
|
|
211
214
|
{
|
|
@@ -216,16 +219,16 @@ function getSectionValueNow(section, adapter) {
|
|
|
216
219
|
return undefined;
|
|
217
220
|
}
|
|
218
221
|
case 'day':
|
|
219
|
-
return section.contentType === 'digit-with-letter' ? parseInt(
|
|
222
|
+
return section.contentType === 'digit-with-letter' ? parseInt(nonLocalizedValue, 10) : Number(nonLocalizedValue);
|
|
220
223
|
case 'month':
|
|
221
224
|
{
|
|
222
225
|
if (section.contentType === 'digit') {
|
|
223
|
-
return Number(
|
|
226
|
+
return Number(nonLocalizedValue);
|
|
224
227
|
}
|
|
225
228
|
const parsedDate = adapter.parse(section.value, section.format);
|
|
226
229
|
return parsedDate ? adapter.getMonth(parsedDate) + 1 : undefined;
|
|
227
230
|
}
|
|
228
231
|
default:
|
|
229
|
-
return section.contentType !== 'letter' ? Number(
|
|
232
|
+
return section.contentType !== 'letter' ? Number(nonLocalizedValue) : undefined;
|
|
230
233
|
}
|
|
231
234
|
}
|
|
@@ -46,6 +46,7 @@ const useFieldV7TextField = parameters => {
|
|
|
46
46
|
sectionListRef: sectionListRefProp,
|
|
47
47
|
onBlur,
|
|
48
48
|
onClick,
|
|
49
|
+
onMouseDown,
|
|
49
50
|
onFocus,
|
|
50
51
|
onInput,
|
|
51
52
|
onPaste,
|
|
@@ -147,6 +148,17 @@ const useFieldV7TextField = parameters => {
|
|
|
147
148
|
onClick?.(event);
|
|
148
149
|
rootProps.onClick(event);
|
|
149
150
|
});
|
|
151
|
+
const handleRootMouseDown = (0, _useEventCallback.default)(event => {
|
|
152
|
+
// The `isDefaultPrevented` check skips mousedowns that have already been
|
|
153
|
+
// suppressed before this handler runs -- in particular, propagated events
|
|
154
|
+
// from the clear / open buttons whose own handlers `preventDefault`, and
|
|
155
|
+
// capture-phase parents that intentionally block field interactions.
|
|
156
|
+
if (event.isDefaultPrevented()) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
onMouseDown?.(event);
|
|
160
|
+
rootProps.onMouseDown(event);
|
|
161
|
+
});
|
|
150
162
|
const handleRootPaste = (0, _useEventCallback.default)(event => {
|
|
151
163
|
onPaste?.(event);
|
|
152
164
|
rootProps.onPaste(event);
|
|
@@ -229,6 +241,7 @@ const useFieldV7TextField = parameters => {
|
|
|
229
241
|
return (0, _extends2.default)({}, forwardedProps, rootProps, {
|
|
230
242
|
onBlur: handleRootBlur,
|
|
231
243
|
onClick: handleRootClick,
|
|
244
|
+
onMouseDown: handleRootMouseDown,
|
|
232
245
|
onFocus: handleRootFocus,
|
|
233
246
|
onInput: handleRootInput,
|
|
234
247
|
onPaste: handleRootPaste,
|
|
@@ -39,6 +39,7 @@ export const useFieldV7TextField = parameters => {
|
|
|
39
39
|
sectionListRef: sectionListRefProp,
|
|
40
40
|
onBlur,
|
|
41
41
|
onClick,
|
|
42
|
+
onMouseDown,
|
|
42
43
|
onFocus,
|
|
43
44
|
onInput,
|
|
44
45
|
onPaste,
|
|
@@ -140,6 +141,17 @@ export const useFieldV7TextField = parameters => {
|
|
|
140
141
|
onClick?.(event);
|
|
141
142
|
rootProps.onClick(event);
|
|
142
143
|
});
|
|
144
|
+
const handleRootMouseDown = useEventCallback(event => {
|
|
145
|
+
// The `isDefaultPrevented` check skips mousedowns that have already been
|
|
146
|
+
// suppressed before this handler runs -- in particular, propagated events
|
|
147
|
+
// from the clear / open buttons whose own handlers `preventDefault`, and
|
|
148
|
+
// capture-phase parents that intentionally block field interactions.
|
|
149
|
+
if (event.isDefaultPrevented()) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
onMouseDown?.(event);
|
|
153
|
+
rootProps.onMouseDown(event);
|
|
154
|
+
});
|
|
143
155
|
const handleRootPaste = useEventCallback(event => {
|
|
144
156
|
onPaste?.(event);
|
|
145
157
|
rootProps.onPaste(event);
|
|
@@ -222,6 +234,7 @@ export const useFieldV7TextField = parameters => {
|
|
|
222
234
|
return _extends({}, forwardedProps, rootProps, {
|
|
223
235
|
onBlur: handleRootBlur,
|
|
224
236
|
onClick: handleRootClick,
|
|
237
|
+
onMouseDown: handleRootMouseDown,
|
|
225
238
|
onFocus: handleRootFocus,
|
|
226
239
|
onInput: handleRootInput,
|
|
227
240
|
onPaste: handleRootPaste,
|