@mui/x-date-pickers 7.0.0-beta.7 → 7.1.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/AdapterDateFns/AdapterDateFns.js +1 -1
- package/AdapterDateFnsBase/AdapterDateFnsBase.js +1 -2
- package/AdapterDateFnsJalali/AdapterDateFnsJalali.js +2 -4
- package/AdapterDateFnsV3/AdapterDateFnsV3.js +1 -1
- package/AdapterDayjs/AdapterDayjs.js +2 -4
- package/AdapterLuxon/AdapterLuxon.js +12 -9
- package/AdapterMoment/AdapterMoment.js +5 -6
- package/CHANGELOG.md +266 -12
- package/DateCalendar/DateCalendar.js +14 -16
- package/DateCalendar/DayCalendar.js +5 -6
- package/DateField/DateField.js +3 -4
- package/DatePicker/DatePicker.js +1 -1
- package/DatePicker/DatePickerToolbar.js +11 -6
- package/DatePicker/shared.d.ts +2 -1
- package/DatePicker/shared.js +3 -5
- package/DateTimeField/DateTimeField.js +3 -4
- package/DateTimePicker/DateTimePicker.js +1 -1
- package/DateTimePicker/DateTimePickerToolbar.js +98 -46
- package/DateTimePicker/shared.d.ts +2 -1
- package/DateTimePicker/shared.js +11 -13
- package/DayCalendarSkeleton/DayCalendarSkeleton.js +12 -8
- package/DesktopDatePicker/DesktopDatePicker.js +7 -11
- package/DesktopDateTimePicker/DesktopDateTimePicker.js +72 -37
- package/DesktopDateTimePicker/DesktopDateTimePickerLayout.d.ts +12 -0
- package/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +101 -0
- package/DesktopDateTimePicker/index.d.ts +1 -0
- package/DesktopDateTimePicker/index.js +2 -1
- package/DesktopTimePicker/DesktopTimePicker.js +8 -12
- package/DigitalClock/DigitalClock.js +16 -9
- package/LocalizationProvider/LocalizationProvider.js +1 -2
- package/MobileDatePicker/MobileDatePicker.js +6 -10
- package/MobileDateTimePicker/MobileDateTimePicker.js +8 -12
- package/MobileTimePicker/MobileTimePicker.js +6 -10
- package/MonthCalendar/MonthCalendar.js +4 -4
- package/MonthCalendar/PickersMonth.js +13 -8
- package/MultiSectionDigitalClock/MultiSectionDigitalClock.js +1 -1
- package/MultiSectionDigitalClock/MultiSectionDigitalClock.utils.js +1 -1
- package/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +16 -9
- package/PickersActionBar/PickersActionBar.js +1 -1
- package/PickersCalendarHeader/PickersCalendarHeader.js +17 -14
- package/PickersDay/PickersDay.js +30 -15
- package/PickersLayout/PickersLayout.js +31 -17
- package/PickersLayout/usePickerLayout.js +8 -9
- package/PickersSectionList/PickersSectionList.js +9 -11
- package/PickersTextField/PickersFilledInput/PickersFilledInput.js +138 -74
- package/PickersTextField/PickersInput/PickersInput.js +77 -55
- package/PickersTextField/PickersInputBase/PickersInputBase.js +67 -28
- package/PickersTextField/PickersInputBase/PickersInputBase.types.d.ts +7 -0
- package/PickersTextField/PickersOutlinedInput/Outline.js +58 -41
- package/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.js +33 -14
- package/README.md +1 -1
- package/StaticDatePicker/StaticDatePicker.js +4 -5
- package/StaticDateTimePicker/StaticDateTimePicker.js +6 -7
- package/StaticTimePicker/StaticTimePicker.js +3 -4
- package/TimeClock/Clock.js +48 -35
- package/TimeClock/ClockNumber.js +12 -7
- package/TimeClock/ClockPointer.js +23 -13
- package/TimeClock/TimeClock.js +1 -1
- package/TimeField/TimeField.js +2 -3
- package/TimePicker/TimePickerToolbar.js +25 -16
- package/TimePicker/shared.d.ts +2 -1
- package/TimePicker/shared.js +5 -7
- package/YearCalendar/PickersYear.js +12 -6
- package/YearCalendar/YearCalendar.js +5 -6
- package/hooks/useClearableField.js +6 -7
- package/index.js +1 -1
- package/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +19 -15
- package/internals/components/PickersModalDialog.js +6 -7
- package/internals/components/PickersPopper.js +25 -24
- package/internals/components/PickersToolbar.js +42 -24
- package/internals/hooks/date-helpers-hooks.js +1 -1
- package/internals/hooks/defaultizedFieldProps.js +15 -18
- package/internals/hooks/useClockReferenceDate.js +1 -1
- package/internals/hooks/useDesktopPicker/index.d.ts +1 -1
- package/internals/hooks/useDesktopPicker/useDesktopPicker.js +11 -12
- package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.ts +2 -2
- package/internals/hooks/useField/buildSectionsFromFormat.js +35 -31
- package/internals/hooks/useField/useField.js +6 -4
- package/internals/hooks/useField/useField.types.d.ts +1 -0
- package/internals/hooks/useField/useField.utils.js +4 -7
- package/internals/hooks/useField/useFieldCharacterEditing.js +1 -2
- package/internals/hooks/useField/useFieldState.js +1 -1
- package/internals/hooks/useField/useFieldV6TextField.js +17 -18
- package/internals/hooks/useField/useFieldV7TextField.js +9 -11
- package/internals/hooks/useMobilePicker/useMobilePicker.js +7 -8
- package/internals/hooks/useOpenState.js +1 -1
- package/internals/hooks/usePicker/index.d.ts +1 -0
- package/internals/hooks/usePicker/usePickerViews.d.ts +4 -2
- package/internals/hooks/usePicker/usePickerViews.js +1 -2
- package/internals/hooks/useStaticPicker/useStaticPicker.js +13 -17
- package/internals/hooks/useValueWithTimezone.js +5 -6
- package/internals/hooks/useViews.js +3 -4
- package/internals/index.d.ts +1 -1
- package/internals/models/validation.d.ts +1 -1
- package/internals/utils/convertFieldResponseIntoMuiTextFieldProps.js +3 -3
- package/internals/utils/date-time-utils.js +2 -5
- package/internals/utils/fields.js +1 -1
- package/internals/utils/getDefaultReferenceDate.js +2 -6
- package/internals/utils/views.js +1 -1
- package/locales/csCZ.js +1 -4
- package/locales/daDK.js +1 -4
- package/locales/deDE.js +1 -4
- package/locales/huHU.js +1 -4
- package/locales/itIT.js +16 -20
- package/locales/jaJP.js +1 -4
- package/locales/roRO.js +1 -4
- package/locales/skSK.js +1 -4
- package/locales/zhHK.js +14 -17
- package/modern/AdapterLuxon/AdapterLuxon.js +9 -4
- package/modern/DateCalendar/DateCalendar.js +1 -1
- package/modern/DateField/DateField.js +1 -1
- package/modern/DatePicker/DatePicker.js +1 -1
- package/modern/DatePicker/DatePickerToolbar.js +11 -6
- package/modern/DateTimeField/DateTimeField.js +1 -1
- package/modern/DateTimePicker/DateTimePicker.js +1 -1
- package/modern/DateTimePicker/DateTimePickerToolbar.js +97 -45
- package/modern/DayCalendarSkeleton/DayCalendarSkeleton.js +12 -8
- package/modern/DesktopDatePicker/DesktopDatePicker.js +1 -1
- package/modern/DesktopDateTimePicker/DesktopDateTimePicker.js +64 -25
- package/modern/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +101 -0
- package/modern/DesktopDateTimePicker/index.js +2 -1
- package/modern/DigitalClock/DigitalClock.js +14 -6
- package/modern/MobileDatePicker/MobileDatePicker.js +1 -1
- package/modern/MobileDateTimePicker/MobileDateTimePicker.js +1 -1
- package/modern/MonthCalendar/PickersMonth.js +12 -6
- package/modern/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +13 -4
- package/modern/PickersCalendarHeader/PickersCalendarHeader.js +13 -9
- package/modern/PickersDay/PickersDay.js +30 -15
- package/modern/PickersLayout/PickersLayout.js +31 -17
- package/modern/PickersTextField/PickersFilledInput/PickersFilledInput.js +137 -72
- package/modern/PickersTextField/PickersInput/PickersInput.js +76 -54
- package/modern/PickersTextField/PickersInputBase/PickersInputBase.js +64 -24
- package/modern/PickersTextField/PickersOutlinedInput/Outline.js +58 -41
- package/modern/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.js +31 -12
- package/modern/StaticDatePicker/StaticDatePicker.js +1 -1
- package/modern/StaticDateTimePicker/StaticDateTimePicker.js +1 -1
- package/modern/TimeClock/Clock.js +48 -35
- package/modern/TimeClock/ClockNumber.js +12 -7
- package/modern/TimeClock/ClockPointer.js +23 -13
- package/modern/TimePicker/TimePickerToolbar.js +25 -16
- package/modern/YearCalendar/PickersYear.js +12 -6
- package/modern/index.js +1 -1
- package/modern/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +11 -6
- package/modern/internals/components/PickersPopper.js +13 -9
- package/modern/internals/components/PickersToolbar.js +39 -18
- package/modern/internals/hooks/useField/buildSectionsFromFormat.js +34 -30
- package/modern/internals/hooks/useField/useField.js +4 -2
- package/modern/internals/hooks/useField/useFieldV6TextField.js +8 -3
- package/modern/internals/hooks/useField/useFieldV7TextField.js +1 -1
- package/modern/internals/hooks/useOpenState.js +1 -1
- package/modern/internals/utils/fields.js +1 -1
- package/modern/locales/itIT.js +16 -20
- package/modern/locales/zhHK.js +14 -17
- package/node/AdapterLuxon/AdapterLuxon.js +9 -4
- package/node/DateCalendar/DateCalendar.js +1 -1
- package/node/DateField/DateField.js +1 -1
- package/node/DatePicker/DatePicker.js +1 -1
- package/node/DatePicker/DatePickerToolbar.js +11 -6
- package/node/DateTimeField/DateTimeField.js +1 -1
- package/node/DateTimePicker/DateTimePicker.js +1 -1
- package/node/DateTimePicker/DateTimePickerToolbar.js +97 -45
- package/node/DayCalendarSkeleton/DayCalendarSkeleton.js +12 -8
- package/node/DesktopDatePicker/DesktopDatePicker.js +1 -1
- package/node/DesktopDateTimePicker/DesktopDateTimePicker.js +63 -25
- package/node/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +108 -0
- package/node/DesktopDateTimePicker/index.js +8 -1
- package/node/DigitalClock/DigitalClock.js +14 -6
- package/node/MobileDatePicker/MobileDatePicker.js +1 -1
- package/node/MobileDateTimePicker/MobileDateTimePicker.js +1 -1
- package/node/MonthCalendar/PickersMonth.js +12 -6
- package/node/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +13 -4
- package/node/PickersCalendarHeader/PickersCalendarHeader.js +13 -9
- package/node/PickersDay/PickersDay.js +30 -15
- package/node/PickersLayout/PickersLayout.js +31 -17
- package/node/PickersTextField/PickersFilledInput/PickersFilledInput.js +137 -72
- package/node/PickersTextField/PickersInput/PickersInput.js +76 -54
- package/node/PickersTextField/PickersInputBase/PickersInputBase.js +64 -24
- package/node/PickersTextField/PickersOutlinedInput/Outline.js +58 -41
- package/node/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.js +31 -12
- package/node/StaticDatePicker/StaticDatePicker.js +1 -1
- package/node/StaticDateTimePicker/StaticDateTimePicker.js +1 -1
- package/node/TimeClock/Clock.js +48 -35
- package/node/TimeClock/ClockNumber.js +12 -7
- package/node/TimeClock/ClockPointer.js +23 -13
- package/node/TimePicker/TimePickerToolbar.js +25 -16
- package/node/YearCalendar/PickersYear.js +12 -6
- package/node/index.js +1 -1
- package/node/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +11 -6
- package/node/internals/components/PickersPopper.js +13 -9
- package/node/internals/components/PickersToolbar.js +39 -18
- package/node/internals/hooks/useField/buildSectionsFromFormat.js +34 -30
- package/node/internals/hooks/useField/useField.js +4 -2
- package/node/internals/hooks/useField/useFieldV6TextField.js +8 -3
- package/node/internals/hooks/useField/useFieldV7TextField.js +1 -1
- package/node/internals/hooks/useOpenState.js +1 -1
- package/node/internals/utils/fields.js +1 -1
- package/node/locales/itIT.js +16 -20
- package/node/locales/zhHK.js +14 -17
- package/package.json +5 -5
- package/timeViewRenderers/timeViewRenderers.js +1 -1
- package/dateTimeViewRenderers/dateTimeViewRenderers.d.ts +0 -15
- package/dateTimeViewRenderers/dateTimeViewRenderers.js +0 -163
- package/dateTimeViewRenderers/index.d.ts +0 -2
- package/dateTimeViewRenderers/index.js +0 -1
- package/dateTimeViewRenderers/package.json +0 -6
- package/modern/dateTimeViewRenderers/dateTimeViewRenderers.js +0 -162
- package/modern/dateTimeViewRenderers/index.js +0 -1
- package/node/dateTimeViewRenderers/dateTimeViewRenderers.js +0 -171
- package/node/dateTimeViewRenderers/index.js +0 -12
|
@@ -23,7 +23,6 @@ import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
23
23
|
* - DesktopTimePicker
|
|
24
24
|
*/
|
|
25
25
|
export const useDesktopPicker = _ref => {
|
|
26
|
-
var _innerSlotProps$toolb, _innerSlotProps$toolb2, _slots$inputAdornment, _slots$openPickerButt, _slots$layout;
|
|
27
26
|
let {
|
|
28
27
|
props,
|
|
29
28
|
getOpenDialogAriaText
|
|
@@ -53,7 +52,7 @@ export const useDesktopPicker = _ref => {
|
|
|
53
52
|
const containerRef = React.useRef(null);
|
|
54
53
|
const fieldRef = React.useRef(null);
|
|
55
54
|
const labelId = useId();
|
|
56
|
-
const isToolbarHidden =
|
|
55
|
+
const isToolbarHidden = innerSlotProps?.toolbar?.hidden ?? false;
|
|
57
56
|
const {
|
|
58
57
|
open,
|
|
59
58
|
actions,
|
|
@@ -69,20 +68,20 @@ export const useDesktopPicker = _ref => {
|
|
|
69
68
|
additionalViewProps: {},
|
|
70
69
|
wrapperVariant: 'desktop'
|
|
71
70
|
}));
|
|
72
|
-
const InputAdornment =
|
|
71
|
+
const InputAdornment = slots.inputAdornment ?? MuiInputAdornment;
|
|
73
72
|
const _useSlotProps = useSlotProps({
|
|
74
73
|
elementType: InputAdornment,
|
|
75
|
-
externalSlotProps: innerSlotProps
|
|
74
|
+
externalSlotProps: innerSlotProps?.inputAdornment,
|
|
76
75
|
additionalProps: {
|
|
77
76
|
position: 'end'
|
|
78
77
|
},
|
|
79
78
|
ownerState: props
|
|
80
79
|
}),
|
|
81
80
|
inputAdornmentProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded2);
|
|
82
|
-
const OpenPickerButton =
|
|
81
|
+
const OpenPickerButton = slots.openPickerButton ?? IconButton;
|
|
83
82
|
const _useSlotProps2 = useSlotProps({
|
|
84
83
|
elementType: OpenPickerButton,
|
|
85
|
-
externalSlotProps: innerSlotProps
|
|
84
|
+
externalSlotProps: innerSlotProps?.openPickerButton,
|
|
86
85
|
additionalProps: {
|
|
87
86
|
disabled: disabled || readOnly,
|
|
88
87
|
onClick: open ? actions.onClose : actions.onOpen,
|
|
@@ -96,7 +95,7 @@ export const useDesktopPicker = _ref => {
|
|
|
96
95
|
const Field = slots.field;
|
|
97
96
|
const fieldProps = useSlotProps({
|
|
98
97
|
elementType: Field,
|
|
99
|
-
externalSlotProps: innerSlotProps
|
|
98
|
+
externalSlotProps: innerSlotProps?.field,
|
|
100
99
|
additionalProps: _extends({}, pickerFieldProps, isToolbarHidden && {
|
|
101
100
|
id: labelId
|
|
102
101
|
}, {
|
|
@@ -126,7 +125,7 @@ export const useDesktopPicker = _ref => {
|
|
|
126
125
|
ref: containerRef,
|
|
127
126
|
[`${inputAdornmentProps.position}Adornment`]: /*#__PURE__*/_jsx(InputAdornment, _extends({}, inputAdornmentProps, {
|
|
128
127
|
children: /*#__PURE__*/_jsx(OpenPickerButton, _extends({}, openPickerButtonProps, {
|
|
129
|
-
children: /*#__PURE__*/_jsx(OpenPickerIcon, _extends({}, innerSlotProps
|
|
128
|
+
children: /*#__PURE__*/_jsx(OpenPickerIcon, _extends({}, innerSlotProps?.openPickerIcon))
|
|
130
129
|
}))
|
|
131
130
|
}))
|
|
132
131
|
});
|
|
@@ -136,7 +135,7 @@ export const useDesktopPicker = _ref => {
|
|
|
136
135
|
clearIcon: slots.clearIcon,
|
|
137
136
|
clearButton: slots.clearButton
|
|
138
137
|
}, fieldProps.slots);
|
|
139
|
-
const Layout =
|
|
138
|
+
const Layout = slots.layout ?? PickersLayout;
|
|
140
139
|
let labelledById = labelId;
|
|
141
140
|
if (isToolbarHidden) {
|
|
142
141
|
if (label) {
|
|
@@ -146,12 +145,12 @@ export const useDesktopPicker = _ref => {
|
|
|
146
145
|
}
|
|
147
146
|
}
|
|
148
147
|
const slotProps = _extends({}, innerSlotProps, {
|
|
149
|
-
toolbar: _extends({}, innerSlotProps
|
|
148
|
+
toolbar: _extends({}, innerSlotProps?.toolbar, {
|
|
150
149
|
titleId: labelId
|
|
151
150
|
}),
|
|
152
151
|
popper: _extends({
|
|
153
152
|
'aria-labelledby': labelledById
|
|
154
|
-
}, innerSlotProps
|
|
153
|
+
}, innerSlotProps?.popper)
|
|
155
154
|
});
|
|
156
155
|
const handleFieldRef = useForkRef(fieldRef, fieldProps.unstableFieldRef);
|
|
157
156
|
const renderPicker = () => /*#__PURE__*/_jsxs(LocalizationProvider, {
|
|
@@ -170,7 +169,7 @@ export const useDesktopPicker = _ref => {
|
|
|
170
169
|
slotProps: slotProps,
|
|
171
170
|
shouldRestoreFocus: shouldRestoreFocus,
|
|
172
171
|
reduceAnimations: reduceAnimations,
|
|
173
|
-
children: /*#__PURE__*/_jsx(Layout, _extends({}, layoutProps, slotProps
|
|
172
|
+
children: /*#__PURE__*/_jsx(Layout, _extends({}, layoutProps, slotProps?.layout, {
|
|
174
173
|
slots: slots,
|
|
175
174
|
slotProps: slotProps,
|
|
176
175
|
children: renderCurrentView()
|
|
@@ -54,7 +54,7 @@ export interface DesktopOnlyPickerProps extends BaseNonStaticPickerProps, BaseNo
|
|
|
54
54
|
*/
|
|
55
55
|
autoFocus?: boolean;
|
|
56
56
|
}
|
|
57
|
-
export interface UseDesktopPickerProps<TDate extends PickerValidDate, TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean, TError, TExternalProps extends UsePickerViewsProps<
|
|
57
|
+
export interface UseDesktopPickerProps<TDate extends PickerValidDate, TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean, TError, TExternalProps extends UsePickerViewsProps<TDate | null, TDate, TView, any, {}>> extends BasePickerProps<TDate | null, TDate, TView, TError, TExternalProps, {}>, DesktopOnlyPickerProps {
|
|
58
58
|
/**
|
|
59
59
|
* Overridable component slots.
|
|
60
60
|
* @default {}
|
|
@@ -66,7 +66,7 @@ export interface UseDesktopPickerProps<TDate extends PickerValidDate, TView exte
|
|
|
66
66
|
*/
|
|
67
67
|
slotProps?: UseDesktopPickerSlotProps<TDate, TView, TEnableAccessibleFieldDOMStructure>;
|
|
68
68
|
}
|
|
69
|
-
export interface UseDesktopPickerParams<TDate extends PickerValidDate, TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean, TExternalProps extends UseDesktopPickerProps<TDate, TView, TEnableAccessibleFieldDOMStructure, any, TExternalProps>> extends Pick<UsePickerParams<TDate | null, TDate, TView, FieldSection, TExternalProps, {}>, 'valueManager' | 'valueType' | 'validator'> {
|
|
69
|
+
export interface UseDesktopPickerParams<TDate extends PickerValidDate, TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean, TExternalProps extends UseDesktopPickerProps<TDate, TView, TEnableAccessibleFieldDOMStructure, any, TExternalProps>> extends Pick<UsePickerParams<TDate | null, TDate, TView, FieldSection, TExternalProps, {}>, 'valueManager' | 'valueType' | 'validator' | 'rendererInterceptor'> {
|
|
70
70
|
props: TExternalProps;
|
|
71
71
|
getOpenDialogAriaText: (date: TDate | null, utils: MuiPickersAdapter<TDate>) => string;
|
|
72
72
|
}
|
|
@@ -152,49 +152,53 @@ const buildSections = params => {
|
|
|
152
152
|
const sections = [];
|
|
153
153
|
let startSeparator = '';
|
|
154
154
|
|
|
155
|
-
// This RegExp
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
155
|
+
// This RegExp tests if the beginning of a string corresponds to a supported token
|
|
156
|
+
const validTokens = Object.keys(utils.formatTokenMap).sort((a, b) => b.length - a.length); // Sort to put longest word first
|
|
157
|
+
|
|
158
|
+
const regExpFirstWordInFormat = /^([a-zA-Z]+)/;
|
|
159
|
+
const regExpWordOnlyComposedOfTokens = new RegExp(`^(${validTokens.join('|')})*$`);
|
|
160
|
+
const regExpFirstTokenInWord = new RegExp(`^(${validTokens.join('|')})`);
|
|
161
|
+
const getEscapedPartOfCurrentChar = i => escapedParts.find(escapeIndex => escapeIndex.start <= i && escapeIndex.end >= i);
|
|
162
|
+
let i = 0;
|
|
163
|
+
while (i < expandedFormat.length) {
|
|
164
|
+
const escapedPartOfCurrentChar = getEscapedPartOfCurrentChar(i);
|
|
163
165
|
const isEscapedChar = escapedPartOfCurrentChar != null;
|
|
164
|
-
const
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
166
|
+
const firstWordInFormat = regExpFirstWordInFormat.exec(expandedFormat.slice(i))?.[1];
|
|
167
|
+
|
|
168
|
+
// The first word in the format is only composed of tokens.
|
|
169
|
+
// We extract those tokens to create a new sections.
|
|
170
|
+
if (!isEscapedChar && firstWordInFormat != null && regExpWordOnlyComposedOfTokens.test(firstWordInFormat)) {
|
|
171
|
+
let word = firstWordInFormat;
|
|
172
|
+
while (word.length > 0) {
|
|
173
|
+
const firstWord = regExpFirstTokenInWord.exec(word)[1];
|
|
174
|
+
word = word.slice(firstWord.length);
|
|
175
|
+
sections.push(createSection(_extends({}, params, {
|
|
176
|
+
now,
|
|
177
|
+
token: firstWord,
|
|
178
|
+
startSeparator
|
|
179
|
+
})));
|
|
180
|
+
startSeparator = '';
|
|
181
|
+
}
|
|
182
|
+
i += firstWordInFormat.length;
|
|
183
|
+
}
|
|
184
|
+
// The remaining format does not start with a token,
|
|
185
|
+
// We take the first character and add it to the current section's end separator.
|
|
186
|
+
else {
|
|
187
|
+
const char = expandedFormat[i];
|
|
188
|
+
|
|
170
189
|
// If we are on the opening or closing character of an escaped part of the format,
|
|
171
190
|
// Then we ignore this character.
|
|
172
|
-
const isEscapeBoundary = isEscapedChar &&
|
|
191
|
+
const isEscapeBoundary = isEscapedChar && escapedPartOfCurrentChar?.start === i || escapedPartOfCurrentChar?.end === i;
|
|
173
192
|
if (!isEscapeBoundary) {
|
|
174
|
-
if (currentTokenValue !== '') {
|
|
175
|
-
sections.push(createSection(_extends({}, params, {
|
|
176
|
-
now,
|
|
177
|
-
token: currentTokenValue,
|
|
178
|
-
startSeparator
|
|
179
|
-
})));
|
|
180
|
-
currentTokenValue = '';
|
|
181
|
-
}
|
|
182
193
|
if (sections.length === 0) {
|
|
183
194
|
startSeparator += char;
|
|
184
195
|
} else {
|
|
185
|
-
startSeparator = '';
|
|
186
196
|
sections[sections.length - 1].endSeparator += char;
|
|
187
197
|
}
|
|
188
198
|
}
|
|
199
|
+
i += 1;
|
|
189
200
|
}
|
|
190
201
|
}
|
|
191
|
-
if (currentTokenValue !== '') {
|
|
192
|
-
sections.push(createSection(_extends({}, params, {
|
|
193
|
-
now,
|
|
194
|
-
token: currentTokenValue,
|
|
195
|
-
startSeparator
|
|
196
|
-
})));
|
|
197
|
-
}
|
|
198
202
|
if (sections.length === 0 && startSeparator.length > 0) {
|
|
199
203
|
sections.push({
|
|
200
204
|
type: 'empty',
|
|
@@ -69,7 +69,7 @@ export const useField = params => {
|
|
|
69
69
|
sectionOrder
|
|
70
70
|
}));
|
|
71
71
|
const handleContainerKeyDown = useEventCallback(event => {
|
|
72
|
-
onKeyDown
|
|
72
|
+
onKeyDown?.(event);
|
|
73
73
|
|
|
74
74
|
// eslint-disable-next-line default-case
|
|
75
75
|
switch (true) {
|
|
@@ -200,11 +200,13 @@ export const useField = params => {
|
|
|
200
200
|
}));
|
|
201
201
|
const handleClearValue = useEventCallback((event, ...args) => {
|
|
202
202
|
event.preventDefault();
|
|
203
|
-
onClear
|
|
203
|
+
onClear?.(event, ...args);
|
|
204
204
|
clearValue();
|
|
205
|
-
|
|
206
|
-
|
|
205
|
+
if (!interactions.isFieldFocused()) {
|
|
206
|
+
// setSelectedSections is called internally
|
|
207
207
|
interactions.focusField(0);
|
|
208
|
+
} else {
|
|
209
|
+
setSelectedSections(sectionOrder.startIndex);
|
|
208
210
|
}
|
|
209
211
|
});
|
|
210
212
|
const commonForwardedProps = {
|
|
@@ -124,6 +124,7 @@ export interface UseFieldV6ForwardedProps {
|
|
|
124
124
|
onClick?: React.MouseEventHandler;
|
|
125
125
|
onFocus?: () => void;
|
|
126
126
|
onPaste?: React.ClipboardEventHandler<HTMLDivElement>;
|
|
127
|
+
placeholder?: string;
|
|
127
128
|
}
|
|
128
129
|
interface UseFieldV6AdditionalProps extends Required<Pick<React.InputHTMLAttributes<HTMLInputElement>, 'inputMode' | 'placeholder' | 'value' | 'onChange' | 'autoComplete'>> {
|
|
129
130
|
enableAccessibleFieldDOMStructure: false;
|
|
@@ -154,7 +154,7 @@ export const adjustSectionValue = (utils, timezone, section, keyCode, sectionsVa
|
|
|
154
154
|
contentType: section.contentType
|
|
155
155
|
});
|
|
156
156
|
const getCleanValue = value => cleanDigitSectionValue(utils, value, sectionBoundaries, localizedDigits, section);
|
|
157
|
-
const step = section.type === 'minutes' && stepsAttributes
|
|
157
|
+
const step = section.type === 'minutes' && stepsAttributes?.minutesStep ? stepsAttributes.minutesStep : 1;
|
|
158
158
|
const currentSectionValue = parseInt(removeLocalizedDigits(section.value, localizedDigits), 10);
|
|
159
159
|
let newSectionValueNumber = currentSectionValue + delta * step;
|
|
160
160
|
if (shouldSetAbsolute) {
|
|
@@ -533,12 +533,9 @@ export const getSectionOrder = (sections, shouldApplyRTL) => {
|
|
|
533
533
|
while (RTLIndex >= 0) {
|
|
534
534
|
groupedSectionsEnd = sections.findIndex(
|
|
535
535
|
// eslint-disable-next-line @typescript-eslint/no-loop-func
|
|
536
|
-
(section, index) =>
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
// Special case where the spaces were not there in the initial input
|
|
540
|
-
section.endSeparator !== ' / ';
|
|
541
|
-
});
|
|
536
|
+
(section, index) => index >= groupedSectionsStart && section.endSeparator?.includes(' ') &&
|
|
537
|
+
// Special case where the spaces were not there in the initial input
|
|
538
|
+
section.endSeparator !== ' / ');
|
|
542
539
|
if (groupedSectionsEnd === -1) {
|
|
543
540
|
groupedSectionsEnd = sections.length - 1;
|
|
544
541
|
}
|
|
@@ -48,8 +48,7 @@ export const useFieldCharacterEditing = ({
|
|
|
48
48
|
const [query, setQuery] = React.useState(null);
|
|
49
49
|
const resetQuery = useEventCallback(() => setQuery(null));
|
|
50
50
|
React.useEffect(() => {
|
|
51
|
-
|
|
52
|
-
if (query != null && ((_sections$query$secti = sections[query.sectionIndex]) == null ? void 0 : _sections$query$secti.type) !== query.sectionType) {
|
|
51
|
+
if (query != null && sections[query.sectionIndex]?.type !== query.sectionType) {
|
|
53
52
|
resetQuery();
|
|
54
53
|
}
|
|
55
54
|
}, [sections, query, resetQuery]);
|
|
@@ -88,7 +88,7 @@ export const useFieldState = params => {
|
|
|
88
88
|
});
|
|
89
89
|
const setSelectedSections = newSelectedSections => {
|
|
90
90
|
innerSetSelectedSections(newSelectedSections);
|
|
91
|
-
onSelectedSectionsChange
|
|
91
|
+
onSelectedSectionsChange?.(newSelectedSections);
|
|
92
92
|
};
|
|
93
93
|
const parsedSelectedSections = React.useMemo(() => parseSelectedSections(selectedSections, state.sections), [selectedSections, state.sections]);
|
|
94
94
|
const activeSectionIndex = parsedSelectedSections === 'all' ? 0 : parsedSelectedSections;
|
|
@@ -43,7 +43,8 @@ export const useFieldV6TextField = params => {
|
|
|
43
43
|
onClick,
|
|
44
44
|
onPaste,
|
|
45
45
|
onBlur,
|
|
46
|
-
inputRef: inputRefProp
|
|
46
|
+
inputRef: inputRefProp,
|
|
47
|
+
placeholder: inPlaceholder
|
|
47
48
|
},
|
|
48
49
|
internalProps: {
|
|
49
50
|
readOnly = false
|
|
@@ -109,9 +110,8 @@ export const useFieldV6TextField = params => {
|
|
|
109
110
|
inputRef.current.scrollTop = currentScrollTop;
|
|
110
111
|
},
|
|
111
112
|
getActiveSectionIndexFromDOM: () => {
|
|
112
|
-
|
|
113
|
-
const
|
|
114
|
-
const browserEndIndex = (_selectionEnd = inputRef.current.selectionEnd) != null ? _selectionEnd : 0;
|
|
113
|
+
const browserStartIndex = inputRef.current.selectionStart ?? 0;
|
|
114
|
+
const browserEndIndex = inputRef.current.selectionEnd ?? 0;
|
|
115
115
|
if (browserStartIndex === 0 && browserEndIndex === 0) {
|
|
116
116
|
return null;
|
|
117
117
|
}
|
|
@@ -120,20 +120,17 @@ export const useFieldV6TextField = params => {
|
|
|
120
120
|
return nextSectionIndex === -1 ? sections.length - 1 : nextSectionIndex - 1;
|
|
121
121
|
},
|
|
122
122
|
focusField: (newSelectedSection = 0) => {
|
|
123
|
-
|
|
124
|
-
(_inputRef$current = inputRef.current) == null || _inputRef$current.focus();
|
|
123
|
+
inputRef.current?.focus();
|
|
125
124
|
setSelectedSections(newSelectedSection);
|
|
126
125
|
},
|
|
127
126
|
setSelectedSections: newSelectedSections => setSelectedSections(newSelectedSections),
|
|
128
127
|
isFieldFocused: () => inputRef.current === getActiveElement(document)
|
|
129
128
|
}), [inputRef, parsedSelectedSections, sections, setSelectedSections]);
|
|
130
129
|
const syncSelectionFromDOM = () => {
|
|
131
|
-
var _selectionStart2;
|
|
132
130
|
if (readOnly) {
|
|
133
|
-
setSelectedSections(null);
|
|
134
131
|
return;
|
|
135
132
|
}
|
|
136
|
-
const browserStartIndex =
|
|
133
|
+
const browserStartIndex = inputRef.current.selectionStart ?? 0;
|
|
137
134
|
let nextSectionIndex;
|
|
138
135
|
if (browserStartIndex <= sections[0].startInInput) {
|
|
139
136
|
// Special case if browser index is in invisible characters at the beginning
|
|
@@ -148,7 +145,7 @@ export const useFieldV6TextField = params => {
|
|
|
148
145
|
setSelectedSections(sectionIndex);
|
|
149
146
|
};
|
|
150
147
|
const handleInputFocus = useEventCallback((...args) => {
|
|
151
|
-
onFocus
|
|
148
|
+
onFocus?.(...args);
|
|
152
149
|
// The ref is guaranteed to be resolved at this point.
|
|
153
150
|
const input = inputRef.current;
|
|
154
151
|
clearTimeout(focusTimeoutRef.current);
|
|
@@ -175,11 +172,11 @@ export const useFieldV6TextField = params => {
|
|
|
175
172
|
if (event.isDefaultPrevented()) {
|
|
176
173
|
return;
|
|
177
174
|
}
|
|
178
|
-
onClick
|
|
175
|
+
onClick?.(event, ...args);
|
|
179
176
|
syncSelectionFromDOM();
|
|
180
177
|
});
|
|
181
178
|
const handleInputPaste = useEventCallback(event => {
|
|
182
|
-
onPaste
|
|
179
|
+
onPaste?.(event);
|
|
183
180
|
|
|
184
181
|
// prevent default to avoid the input `onChange` handler being called
|
|
185
182
|
event.preventDefault();
|
|
@@ -212,7 +209,7 @@ export const useFieldV6TextField = params => {
|
|
|
212
209
|
updateValueFromValueStr(pastedValue);
|
|
213
210
|
});
|
|
214
211
|
const handleContainerBlur = useEventCallback((...args) => {
|
|
215
|
-
onBlur
|
|
212
|
+
onBlur?.(...args);
|
|
216
213
|
setSelectedSections(null);
|
|
217
214
|
});
|
|
218
215
|
const handleInputChange = useEventCallback(event => {
|
|
@@ -278,11 +275,13 @@ export const useFieldV6TextField = params => {
|
|
|
278
275
|
sectionIndex: activeSectionIndex
|
|
279
276
|
});
|
|
280
277
|
});
|
|
281
|
-
const placeholder = React.useMemo(() =>
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
278
|
+
const placeholder = React.useMemo(() => {
|
|
279
|
+
if (inPlaceholder) {
|
|
280
|
+
return inPlaceholder;
|
|
281
|
+
}
|
|
282
|
+
return fieldValueManager.getV6InputValueFromSections(getSectionsFromValue(valueManager.emptyValue), localizedDigits, isRTL);
|
|
283
|
+
}, [inPlaceholder, fieldValueManager, getSectionsFromValue, valueManager.emptyValue, localizedDigits, isRTL]);
|
|
284
|
+
const valueStr = React.useMemo(() => state.tempValueStrAndroid ?? fieldValueManager.getV6InputValueFromSections(state.sections, localizedDigits, isRTL), [state.sections, fieldValueManager, state.tempValueStrAndroid, localizedDigits, isRTL]);
|
|
286
285
|
React.useEffect(() => {
|
|
287
286
|
// Select all the sections when focused on mount (`autoFocus = true` on the input)
|
|
288
287
|
if (inputRef.current && inputRef.current === getActiveElement(document)) {
|
|
@@ -132,7 +132,7 @@ export const useFieldV7TextField = params => {
|
|
|
132
132
|
return;
|
|
133
133
|
}
|
|
134
134
|
setFocused(true);
|
|
135
|
-
onClick
|
|
135
|
+
onClick?.(event, ...args);
|
|
136
136
|
if (parsedSelectedSections === 'all') {
|
|
137
137
|
setTimeout(() => {
|
|
138
138
|
const cursorPosition = document.getSelection().getRangeAt(0).startOffset;
|
|
@@ -160,13 +160,12 @@ export const useFieldV7TextField = params => {
|
|
|
160
160
|
}
|
|
161
161
|
});
|
|
162
162
|
const handleContainerInput = useEventCallback(event => {
|
|
163
|
-
|
|
164
|
-
onInput == null || onInput(event);
|
|
163
|
+
onInput?.(event);
|
|
165
164
|
if (!sectionListRef.current || parsedSelectedSections !== 'all') {
|
|
166
165
|
return;
|
|
167
166
|
}
|
|
168
167
|
const target = event.target;
|
|
169
|
-
const keyPressed =
|
|
168
|
+
const keyPressed = target.textContent ?? '';
|
|
170
169
|
sectionListRef.current.getRoot().innerHTML = state.sections.map(section => `${section.startSeparator}${section.value || section.placeholder}${section.endSeparator}`).join('');
|
|
171
170
|
interactions.syncSelectionToDOM();
|
|
172
171
|
if (keyPressed.length === 0 || keyPressed.charCodeAt(0) === 10) {
|
|
@@ -183,7 +182,7 @@ export const useFieldV7TextField = params => {
|
|
|
183
182
|
}
|
|
184
183
|
});
|
|
185
184
|
const handleContainerPaste = useEventCallback(event => {
|
|
186
|
-
onPaste
|
|
185
|
+
onPaste?.(event);
|
|
187
186
|
if (readOnly || parsedSelectedSections !== 'all') {
|
|
188
187
|
event.preventDefault();
|
|
189
188
|
return;
|
|
@@ -194,7 +193,7 @@ export const useFieldV7TextField = params => {
|
|
|
194
193
|
updateValueFromValueStr(pastedValue);
|
|
195
194
|
});
|
|
196
195
|
const handleContainerFocus = useEventCallback((...args) => {
|
|
197
|
-
onFocus
|
|
196
|
+
onFocus?.(...args);
|
|
198
197
|
if (focused || !sectionListRef.current) {
|
|
199
198
|
return;
|
|
200
199
|
}
|
|
@@ -205,7 +204,7 @@ export const useFieldV7TextField = params => {
|
|
|
205
204
|
}
|
|
206
205
|
});
|
|
207
206
|
const handleContainerBlur = useEventCallback((...args) => {
|
|
208
|
-
onBlur
|
|
207
|
+
onBlur?.(...args);
|
|
209
208
|
setTimeout(() => {
|
|
210
209
|
if (!sectionListRef.current) {
|
|
211
210
|
return;
|
|
@@ -267,12 +266,11 @@ export const useFieldV7TextField = params => {
|
|
|
267
266
|
event.dataTransfer.dropEffect = 'none';
|
|
268
267
|
});
|
|
269
268
|
const handleInputContentInput = useEventCallback(event => {
|
|
270
|
-
var _target$textContent2;
|
|
271
269
|
if (!sectionListRef.current) {
|
|
272
270
|
return;
|
|
273
271
|
}
|
|
274
272
|
const target = event.target;
|
|
275
|
-
const keyPressed =
|
|
273
|
+
const keyPressed = target.textContent ?? '';
|
|
276
274
|
const sectionIndex = sectionListRef.current.getSectionIndexFromDOMElement(target);
|
|
277
275
|
const section = state.sections[sectionIndex];
|
|
278
276
|
if (readOnly || !sectionListRef.current) {
|
|
@@ -368,7 +366,7 @@ export const useFieldV7TextField = params => {
|
|
|
368
366
|
const valueStr = React.useMemo(() => areAllSectionsEmpty ? '' : fieldValueManager.getV7HiddenInputValueFromSections(state.sections), [areAllSectionsEmpty, state.sections, fieldValueManager]);
|
|
369
367
|
React.useEffect(() => {
|
|
370
368
|
if (sectionListRef.current == null) {
|
|
371
|
-
throw new Error(['MUI X: The `sectionListRef` prop has not been initialized by `PickersSectionList`', 'You probably tried to pass a component to the `textField` slot that contains an `<input />` element instead of a `PickersSectionList`.', '', 'If you want to keep using an `<input />` HTML element for the editing, please remove the `enableAccessibleFieldDOMStructure` prop from your picker or field component:', '', '<DatePicker slots={{ textField: MyCustomTextField }} />', '', 'Learn more about the field accessible DOM structure on the MUI documentation: https://
|
|
369
|
+
throw new Error(['MUI X: The `sectionListRef` prop has not been initialized by `PickersSectionList`', 'You probably tried to pass a component to the `textField` slot that contains an `<input />` element instead of a `PickersSectionList`.', '', 'If you want to keep using an `<input />` HTML element for the editing, please remove the `enableAccessibleFieldDOMStructure` prop from your picker or field component:', '', '<DatePicker slots={{ textField: MyCustomTextField }} />', '', 'Learn more about the field accessible DOM structure on the MUI documentation: https://mui.com/x/react-date-pickers/fields/#fields-to-edit-a-single-element'].join('\n'));
|
|
372
370
|
}
|
|
373
371
|
if (autoFocus && sectionListRef.current) {
|
|
374
372
|
sectionListRef.current.getSectionContent(sectionOrder.startIndex).focus();
|
|
@@ -381,7 +379,7 @@ export const useFieldV7TextField = params => {
|
|
|
381
379
|
// Forwarded
|
|
382
380
|
autoFocus,
|
|
383
381
|
readOnly,
|
|
384
|
-
focused: focusedProp
|
|
382
|
+
focused: focusedProp ?? focused,
|
|
385
383
|
sectionListRef: handleSectionListRef,
|
|
386
384
|
onBlur: handleContainerBlur,
|
|
387
385
|
onClick: handleContainerClick,
|
|
@@ -20,7 +20,6 @@ import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
20
20
|
* - MobileTimePicker
|
|
21
21
|
*/
|
|
22
22
|
export const useMobilePicker = _ref => {
|
|
23
|
-
var _innerSlotProps$toolb, _innerSlotProps$toolb2, _slots$layout;
|
|
24
23
|
let {
|
|
25
24
|
props,
|
|
26
25
|
getOpenDialogAriaText
|
|
@@ -47,7 +46,7 @@ export const useMobilePicker = _ref => {
|
|
|
47
46
|
const utils = useUtils();
|
|
48
47
|
const fieldRef = React.useRef(null);
|
|
49
48
|
const labelId = useId();
|
|
50
|
-
const isToolbarHidden =
|
|
49
|
+
const isToolbarHidden = innerSlotProps?.toolbar?.hidden ?? false;
|
|
51
50
|
const {
|
|
52
51
|
open,
|
|
53
52
|
actions,
|
|
@@ -64,14 +63,14 @@ export const useMobilePicker = _ref => {
|
|
|
64
63
|
const Field = slots.field;
|
|
65
64
|
const fieldProps = useSlotProps({
|
|
66
65
|
elementType: Field,
|
|
67
|
-
externalSlotProps: innerSlotProps
|
|
66
|
+
externalSlotProps: innerSlotProps?.field,
|
|
68
67
|
additionalProps: _extends({}, pickerFieldProps, isToolbarHidden && {
|
|
69
68
|
id: labelId
|
|
70
69
|
}, !(disabled || readOnly) && {
|
|
71
70
|
onClick: actions.onOpen,
|
|
72
71
|
onKeyDown: onSpaceOrEnter(actions.onOpen)
|
|
73
72
|
}, {
|
|
74
|
-
readOnly: readOnly
|
|
73
|
+
readOnly: readOnly ?? true,
|
|
75
74
|
disabled,
|
|
76
75
|
className,
|
|
77
76
|
sx,
|
|
@@ -96,7 +95,7 @@ export const useMobilePicker = _ref => {
|
|
|
96
95
|
const slotsForField = _extends({
|
|
97
96
|
textField: slots.textField
|
|
98
97
|
}, fieldProps.slots);
|
|
99
|
-
const Layout =
|
|
98
|
+
const Layout = slots.layout ?? PickersLayout;
|
|
100
99
|
let labelledById = labelId;
|
|
101
100
|
if (isToolbarHidden) {
|
|
102
101
|
if (label) {
|
|
@@ -106,12 +105,12 @@ export const useMobilePicker = _ref => {
|
|
|
106
105
|
}
|
|
107
106
|
}
|
|
108
107
|
const slotProps = _extends({}, innerSlotProps, {
|
|
109
|
-
toolbar: _extends({}, innerSlotProps
|
|
108
|
+
toolbar: _extends({}, innerSlotProps?.toolbar, {
|
|
110
109
|
titleId: labelId
|
|
111
110
|
}),
|
|
112
111
|
mobilePaper: _extends({
|
|
113
112
|
'aria-labelledby': labelledById
|
|
114
|
-
}, innerSlotProps
|
|
113
|
+
}, innerSlotProps?.mobilePaper)
|
|
115
114
|
});
|
|
116
115
|
const handleFieldRef = useForkRef(fieldRef, fieldProps.unstableFieldRef);
|
|
117
116
|
const renderPicker = () => /*#__PURE__*/_jsxs(LocalizationProvider, {
|
|
@@ -124,7 +123,7 @@ export const useMobilePicker = _ref => {
|
|
|
124
123
|
open: open,
|
|
125
124
|
slots: slots,
|
|
126
125
|
slotProps: slotProps,
|
|
127
|
-
children: /*#__PURE__*/_jsx(Layout, _extends({}, layoutProps, slotProps
|
|
126
|
+
children: /*#__PURE__*/_jsx(Layout, _extends({}, layoutProps, slotProps?.layout, {
|
|
128
127
|
slots: slots,
|
|
129
128
|
slotProps: slotProps,
|
|
130
129
|
children: renderCurrentView()
|
|
@@ -8,7 +8,7 @@ export const useOpenState = ({
|
|
|
8
8
|
const [openState, setIsOpenState] = React.useState(false);
|
|
9
9
|
|
|
10
10
|
// It is required to update inner state in useEffect in order to avoid situation when
|
|
11
|
-
// Our component is not mounted yet, but `open` state is set to `true` (
|
|
11
|
+
// Our component is not mounted yet, but `open` state is set to `true` (for example initially opened)
|
|
12
12
|
React.useEffect(() => {
|
|
13
13
|
if (isControllingOpenProp) {
|
|
14
14
|
if (typeof open !== 'boolean') {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { usePicker } from './usePicker';
|
|
2
2
|
export type { UsePickerProps, UsePickerBaseProps, UsePickerParams, UsePickerResponse, } from './usePicker.types';
|
|
3
3
|
export type { PickerValueManager, PickerSelectionState, UsePickerValueFieldResponse, } from './usePickerValue.types';
|
|
4
|
+
export type { PickerViewsRendererProps } from './usePickerViews';
|
|
@@ -7,11 +7,13 @@ import { DateOrTimeViewWithMeridiem } from '../../models';
|
|
|
7
7
|
import { FieldRef, FieldSection, PickerValidDate, TimezoneProps } from '../../../models';
|
|
8
8
|
interface PickerViewsRendererBaseExternalProps<TView extends DateOrTimeViewWithMeridiem> extends Omit<UsePickerViewsProps<any, any, TView, any, any>, 'openTo' | 'viewRenderers'> {
|
|
9
9
|
}
|
|
10
|
-
export type PickerViewsRendererProps<TValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends PickerViewsRendererBaseExternalProps<TView>, TAdditionalProps extends {}> = TExternalProps & TAdditionalProps & UsePickerValueViewsResponse<TValue> & {
|
|
10
|
+
export type PickerViewsRendererProps<TValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends PickerViewsRendererBaseExternalProps<TView>, TAdditionalProps extends {}> = Omit<TExternalProps, 'className' | 'sx'> & TAdditionalProps & UsePickerValueViewsResponse<TValue> & {
|
|
11
11
|
view: TView;
|
|
12
12
|
views: readonly TView[];
|
|
13
13
|
focusedView: TView | null;
|
|
14
14
|
onFocusedViewChange: (viewToFocus: TView, hasFocus: boolean) => void;
|
|
15
|
+
showViewSwitcher: boolean;
|
|
16
|
+
timeViewsCount: number;
|
|
15
17
|
};
|
|
16
18
|
export type PickerViewRenderer<TValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends PickerViewsRendererBaseExternalProps<TView>, TAdditionalProps extends {}> = (props: PickerViewsRendererProps<TValue, TView, TExternalProps, TAdditionalProps>) => React.ReactNode;
|
|
17
19
|
export type PickerViewRendererLookup<TValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends PickerViewsRendererBaseExternalProps<any>, TAdditionalProps extends {}> = {
|
|
@@ -73,7 +75,7 @@ export interface UsePickerViewParams<TValue, TDate extends PickerValidDate, TVie
|
|
|
73
75
|
* @param {any} rendererProps All the props that are being passed down to the renderer.
|
|
74
76
|
* @returns {React.ReactNode} A React node that will be rendered instead of the default renderer.
|
|
75
77
|
*/
|
|
76
|
-
rendererInterceptor?: (viewRenderers: PickerViewRendererLookup<TValue, TView, TExternalProps, TAdditionalProps>, popperView: TView, rendererProps:
|
|
78
|
+
rendererInterceptor?: (viewRenderers: PickerViewRendererLookup<TValue, TView, TExternalProps, TAdditionalProps>, popperView: TView, rendererProps: PickerViewsRendererProps<TValue, TView, TExternalProps, TAdditionalProps>) => React.ReactNode;
|
|
77
79
|
}
|
|
78
80
|
export interface UsePickerViewsResponse<TView extends DateOrTimeViewWithMeridiem> {
|
|
79
81
|
/**
|
|
@@ -100,10 +100,9 @@ export const usePickerViews = ({
|
|
|
100
100
|
if (currentViewMode === 'field' && open) {
|
|
101
101
|
onClose();
|
|
102
102
|
setTimeout(() => {
|
|
103
|
-
var _fieldRef$current;
|
|
104
103
|
// focusing the input before the range selection is done
|
|
105
104
|
// calling it outside of timeout results in an inconsistent behavior between Safari And Chrome
|
|
106
|
-
fieldRef
|
|
105
|
+
fieldRef?.current?.focusField(view);
|
|
107
106
|
});
|
|
108
107
|
}
|
|
109
108
|
}, [view]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
@@ -24,7 +24,6 @@ const PickerStaticLayout = styled(PickersLayout)(({
|
|
|
24
24
|
* - StaticTimePicker
|
|
25
25
|
*/
|
|
26
26
|
export const useStaticPicker = _ref => {
|
|
27
|
-
var _slots$layout;
|
|
28
27
|
let {
|
|
29
28
|
props,
|
|
30
29
|
ref
|
|
@@ -44,26 +43,23 @@ export const useStaticPicker = _ref => {
|
|
|
44
43
|
renderCurrentView
|
|
45
44
|
} = usePicker(_extends({}, pickerParams, {
|
|
46
45
|
props,
|
|
47
|
-
autoFocusView: autoFocus
|
|
46
|
+
autoFocusView: autoFocus ?? false,
|
|
48
47
|
fieldRef: undefined,
|
|
49
48
|
additionalViewProps: {},
|
|
50
49
|
wrapperVariant: displayStaticWrapperAs
|
|
51
50
|
}));
|
|
52
|
-
const Layout =
|
|
53
|
-
const renderPicker = () => {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}))
|
|
65
|
-
});
|
|
66
|
-
};
|
|
51
|
+
const Layout = slots?.layout ?? PickerStaticLayout;
|
|
52
|
+
const renderPicker = () => /*#__PURE__*/_jsx(LocalizationProvider, {
|
|
53
|
+
localeText: localeText,
|
|
54
|
+
children: /*#__PURE__*/_jsx(Layout, _extends({}, layoutProps, slotProps?.layout, {
|
|
55
|
+
slots: slots,
|
|
56
|
+
slotProps: slotProps,
|
|
57
|
+
sx: [...(Array.isArray(sx) ? sx : [sx]), ...(Array.isArray(slotProps?.layout?.sx) ? slotProps.layout.sx : [slotProps?.layout?.sx])],
|
|
58
|
+
className: clsx(className, slotProps?.layout?.className),
|
|
59
|
+
ref: ref,
|
|
60
|
+
children: renderCurrentView()
|
|
61
|
+
}))
|
|
62
|
+
});
|
|
67
63
|
return {
|
|
68
64
|
renderPicker
|
|
69
65
|
};
|