@mui/x-date-pickers 8.0.0-beta.0 → 8.0.0-beta.1

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 (165) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/DateCalendar/DayCalendar.d.ts +3 -7
  3. package/DateCalendar/DayCalendar.js +16 -8
  4. package/DateCalendar/index.d.ts +0 -1
  5. package/DateField/useDateField.d.ts +1 -1
  6. package/DateField/useDateField.js +2 -16
  7. package/DatePicker/DatePicker.js +1 -0
  8. package/DateTimeField/useDateTimeField.d.ts +1 -1
  9. package/DateTimeField/useDateTimeField.js +2 -16
  10. package/DateTimePicker/DateTimePicker.js +1 -0
  11. package/DesktopDatePicker/DesktopDatePicker.js +1 -0
  12. package/DesktopDateTimePicker/DesktopDateTimePicker.js +1 -0
  13. package/DesktopTimePicker/DesktopTimePicker.js +1 -0
  14. package/MobileDatePicker/MobileDatePicker.js +1 -0
  15. package/MobileDateTimePicker/MobileDateTimePicker.js +1 -0
  16. package/MobileTimePicker/MobileTimePicker.js +1 -0
  17. package/PickersDay/PickersDay.d.ts +1 -72
  18. package/PickersDay/PickersDay.js +30 -28
  19. package/PickersDay/PickersDay.types.d.ts +114 -0
  20. package/PickersDay/PickersDay.types.js +5 -0
  21. package/PickersDay/index.d.ts +1 -1
  22. package/PickersDay/usePickerDayOwnerState.d.ts +14 -0
  23. package/PickersDay/usePickerDayOwnerState.js +40 -0
  24. package/TimeField/useTimeField.d.ts +1 -1
  25. package/TimeField/useTimeField.js +2 -16
  26. package/TimePicker/TimePicker.js +1 -0
  27. package/esm/DateCalendar/DayCalendar.d.ts +3 -7
  28. package/esm/DateCalendar/DayCalendar.js +16 -8
  29. package/esm/DateCalendar/index.d.ts +0 -1
  30. package/esm/DateField/useDateField.d.ts +1 -1
  31. package/esm/DateField/useDateField.js +3 -17
  32. package/esm/DatePicker/DatePicker.js +1 -0
  33. package/esm/DateTimeField/useDateTimeField.d.ts +1 -1
  34. package/esm/DateTimeField/useDateTimeField.js +3 -17
  35. package/esm/DateTimePicker/DateTimePicker.js +1 -0
  36. package/esm/DesktopDatePicker/DesktopDatePicker.js +1 -0
  37. package/esm/DesktopDateTimePicker/DesktopDateTimePicker.js +1 -0
  38. package/esm/DesktopTimePicker/DesktopTimePicker.js +1 -0
  39. package/esm/MobileDatePicker/MobileDatePicker.js +1 -0
  40. package/esm/MobileDateTimePicker/MobileDateTimePicker.js +1 -0
  41. package/esm/MobileTimePicker/MobileTimePicker.js +1 -0
  42. package/esm/PickersDay/PickersDay.d.ts +1 -72
  43. package/esm/PickersDay/PickersDay.js +30 -28
  44. package/esm/PickersDay/PickersDay.types.d.ts +114 -0
  45. package/esm/PickersDay/PickersDay.types.js +1 -0
  46. package/esm/PickersDay/index.d.ts +1 -1
  47. package/esm/PickersDay/usePickerDayOwnerState.d.ts +14 -0
  48. package/esm/PickersDay/usePickerDayOwnerState.js +32 -0
  49. package/esm/TimeField/useTimeField.d.ts +1 -1
  50. package/esm/TimeField/useTimeField.js +3 -17
  51. package/esm/TimePicker/TimePicker.js +1 -0
  52. package/esm/hooks/useSplitFieldProps.d.ts +1 -1
  53. package/esm/index.js +1 -1
  54. package/esm/internals/components/PickerFieldUI.d.ts +5 -5
  55. package/esm/internals/hooks/useField/buildSectionsFromFormat.d.ts +2 -2
  56. package/esm/internals/hooks/useField/buildSectionsFromFormat.js +9 -9
  57. package/esm/internals/hooks/useField/index.d.ts +1 -1
  58. package/esm/internals/hooks/useField/useField.d.ts +2 -4
  59. package/esm/internals/hooks/useField/useField.js +5 -229
  60. package/esm/internals/hooks/useField/useField.types.d.ts +48 -68
  61. package/esm/internals/hooks/useField/useField.utils.d.ts +2 -5
  62. package/esm/internals/hooks/useField/useField.utils.js +7 -92
  63. package/esm/internals/hooks/useField/useFieldCharacterEditing.d.ts +19 -26
  64. package/esm/internals/hooks/useField/useFieldCharacterEditing.js +42 -60
  65. package/esm/internals/hooks/useField/useFieldRootHandleKeyDown.d.ts +16 -0
  66. package/esm/internals/hooks/useField/useFieldRootHandleKeyDown.js +204 -0
  67. package/esm/internals/hooks/useField/useFieldState.d.ts +23 -13
  68. package/esm/internals/hooks/useField/useFieldState.js +103 -30
  69. package/esm/internals/hooks/useField/useFieldV6TextField.d.ts +3 -3
  70. package/esm/internals/hooks/useField/useFieldV6TextField.js +202 -135
  71. package/esm/internals/hooks/useField/useFieldV7TextField.d.ts +3 -2
  72. package/esm/internals/hooks/useField/useFieldV7TextField.js +217 -153
  73. package/esm/internals/hooks/usePicker/usePicker.types.d.ts +1 -0
  74. package/esm/internals/index.d.ts +2 -1
  75. package/esm/internals/index.js +1 -0
  76. package/esm/managers/useDateManager.js +3 -3
  77. package/esm/managers/useDateTimeManager.js +3 -3
  78. package/esm/managers/useTimeManager.js +3 -3
  79. package/esm/models/fields.d.ts +2 -2
  80. package/esm/models/manager.d.ts +3 -2
  81. package/hooks/useSplitFieldProps.d.ts +1 -1
  82. package/index.js +1 -1
  83. package/internals/components/PickerFieldUI.d.ts +5 -5
  84. package/internals/hooks/useField/buildSectionsFromFormat.d.ts +2 -2
  85. package/internals/hooks/useField/buildSectionsFromFormat.js +9 -9
  86. package/internals/hooks/useField/index.d.ts +1 -1
  87. package/internals/hooks/useField/useField.d.ts +2 -4
  88. package/internals/hooks/useField/useField.js +5 -231
  89. package/internals/hooks/useField/useField.types.d.ts +48 -68
  90. package/internals/hooks/useField/useField.utils.d.ts +2 -5
  91. package/internals/hooks/useField/useField.utils.js +8 -94
  92. package/internals/hooks/useField/useFieldCharacterEditing.d.ts +19 -26
  93. package/internals/hooks/useField/useFieldCharacterEditing.js +41 -59
  94. package/internals/hooks/useField/useFieldRootHandleKeyDown.d.ts +16 -0
  95. package/internals/hooks/useField/useFieldRootHandleKeyDown.js +210 -0
  96. package/internals/hooks/useField/useFieldState.d.ts +23 -13
  97. package/internals/hooks/useField/useFieldState.js +102 -29
  98. package/internals/hooks/useField/useFieldV6TextField.d.ts +3 -3
  99. package/internals/hooks/useField/useFieldV6TextField.js +202 -135
  100. package/internals/hooks/useField/useFieldV7TextField.d.ts +3 -2
  101. package/internals/hooks/useField/useFieldV7TextField.js +218 -154
  102. package/internals/hooks/usePicker/usePicker.types.d.ts +1 -0
  103. package/internals/index.d.ts +2 -1
  104. package/internals/index.js +7 -0
  105. package/managers/useDateManager.js +3 -3
  106. package/managers/useDateTimeManager.js +3 -3
  107. package/managers/useTimeManager.js +3 -3
  108. package/models/fields.d.ts +2 -2
  109. package/models/manager.d.ts +3 -2
  110. package/modern/DateCalendar/DayCalendar.d.ts +3 -7
  111. package/modern/DateCalendar/DayCalendar.js +16 -8
  112. package/modern/DateCalendar/index.d.ts +0 -1
  113. package/modern/DateField/useDateField.d.ts +1 -1
  114. package/modern/DateField/useDateField.js +3 -17
  115. package/modern/DatePicker/DatePicker.js +1 -0
  116. package/modern/DateTimeField/useDateTimeField.d.ts +1 -1
  117. package/modern/DateTimeField/useDateTimeField.js +3 -17
  118. package/modern/DateTimePicker/DateTimePicker.js +1 -0
  119. package/modern/DesktopDatePicker/DesktopDatePicker.js +1 -0
  120. package/modern/DesktopDateTimePicker/DesktopDateTimePicker.js +1 -0
  121. package/modern/DesktopTimePicker/DesktopTimePicker.js +1 -0
  122. package/modern/MobileDatePicker/MobileDatePicker.js +1 -0
  123. package/modern/MobileDateTimePicker/MobileDateTimePicker.js +1 -0
  124. package/modern/MobileTimePicker/MobileTimePicker.js +1 -0
  125. package/modern/PickersDay/PickersDay.d.ts +1 -72
  126. package/modern/PickersDay/PickersDay.js +30 -28
  127. package/modern/PickersDay/PickersDay.types.d.ts +114 -0
  128. package/modern/PickersDay/PickersDay.types.js +1 -0
  129. package/modern/PickersDay/index.d.ts +1 -1
  130. package/modern/PickersDay/usePickerDayOwnerState.d.ts +14 -0
  131. package/modern/PickersDay/usePickerDayOwnerState.js +32 -0
  132. package/modern/TimeField/useTimeField.d.ts +1 -1
  133. package/modern/TimeField/useTimeField.js +3 -17
  134. package/modern/TimePicker/TimePicker.js +1 -0
  135. package/modern/hooks/useSplitFieldProps.d.ts +1 -1
  136. package/modern/index.js +1 -1
  137. package/modern/internals/components/PickerFieldUI.d.ts +5 -5
  138. package/modern/internals/hooks/useField/buildSectionsFromFormat.d.ts +2 -2
  139. package/modern/internals/hooks/useField/buildSectionsFromFormat.js +9 -9
  140. package/modern/internals/hooks/useField/index.d.ts +1 -1
  141. package/modern/internals/hooks/useField/useField.d.ts +2 -4
  142. package/modern/internals/hooks/useField/useField.js +5 -229
  143. package/modern/internals/hooks/useField/useField.types.d.ts +48 -68
  144. package/modern/internals/hooks/useField/useField.utils.d.ts +2 -5
  145. package/modern/internals/hooks/useField/useField.utils.js +7 -92
  146. package/modern/internals/hooks/useField/useFieldCharacterEditing.d.ts +19 -26
  147. package/modern/internals/hooks/useField/useFieldCharacterEditing.js +42 -60
  148. package/modern/internals/hooks/useField/useFieldRootHandleKeyDown.d.ts +16 -0
  149. package/modern/internals/hooks/useField/useFieldRootHandleKeyDown.js +204 -0
  150. package/modern/internals/hooks/useField/useFieldState.d.ts +23 -13
  151. package/modern/internals/hooks/useField/useFieldState.js +103 -30
  152. package/modern/internals/hooks/useField/useFieldV6TextField.d.ts +3 -3
  153. package/modern/internals/hooks/useField/useFieldV6TextField.js +202 -135
  154. package/modern/internals/hooks/useField/useFieldV7TextField.d.ts +3 -2
  155. package/modern/internals/hooks/useField/useFieldV7TextField.js +217 -153
  156. package/modern/internals/hooks/usePicker/usePicker.types.d.ts +1 -0
  157. package/modern/internals/index.d.ts +2 -1
  158. package/modern/internals/index.js +1 -0
  159. package/modern/managers/useDateManager.js +3 -3
  160. package/modern/managers/useDateTimeManager.js +3 -3
  161. package/modern/managers/useTimeManager.js +3 -3
  162. package/modern/models/fields.d.ts +2 -2
  163. package/modern/models/manager.d.ts +3 -2
  164. package/package.json +1 -1
  165. package/tsconfig.build.tsbuildinfo +1 -1
@@ -1,6 +1,6 @@
1
1
  import { FieldSection, MuiPickersAdapter, PickerValidDate } from "../../../models/index.js";
2
2
  import { PickersLocaleText } from "../../../locales/index.js";
3
- interface BuildSectionsFromFormatParams {
3
+ interface BuildSectionsFromFormatParameters {
4
4
  utils: MuiPickersAdapter;
5
5
  format: string;
6
6
  formatDensity: 'dense' | 'spacious';
@@ -11,5 +11,5 @@ interface BuildSectionsFromFormatParams {
11
11
  date: PickerValidDate | null;
12
12
  enableAccessibleFieldDOMStructure: boolean;
13
13
  }
14
- export declare const buildSectionsFromFormat: (params: BuildSectionsFromFormatParams) => FieldSection[];
14
+ export declare const buildSectionsFromFormat: (parameters: BuildSectionsFromFormatParameters) => FieldSection[];
15
15
  export {};
@@ -148,12 +148,12 @@ const createSection = ({
148
148
  modified: false
149
149
  });
150
150
  };
151
- const buildSections = params => {
151
+ const buildSections = parameters => {
152
152
  const {
153
153
  utils,
154
154
  expandedFormat,
155
155
  escapedParts
156
- } = params;
156
+ } = parameters;
157
157
  const now = utils.date(undefined);
158
158
  const sections = [];
159
159
  let startSeparator = '';
@@ -178,7 +178,7 @@ const buildSections = params => {
178
178
  while (word.length > 0) {
179
179
  const firstWord = regExpFirstTokenInWord.exec(word)[1];
180
180
  word = word.slice(firstWord.length);
181
- sections.push(createSection((0, _extends2.default)({}, params, {
181
+ sections.push(createSection((0, _extends2.default)({}, parameters, {
182
182
  now,
183
183
  token: firstWord,
184
184
  startSeparator
@@ -243,19 +243,19 @@ const postProcessSections = ({
243
243
  return section;
244
244
  });
245
245
  };
246
- const buildSectionsFromFormat = params => {
247
- let expandedFormat = expandFormat(params);
248
- if (params.isRtl && params.enableAccessibleFieldDOMStructure) {
246
+ const buildSectionsFromFormat = parameters => {
247
+ let expandedFormat = expandFormat(parameters);
248
+ if (parameters.isRtl && parameters.enableAccessibleFieldDOMStructure) {
249
249
  expandedFormat = expandedFormat.split(' ').reverse().join(' ');
250
250
  }
251
- const escapedParts = getEscapedPartsFromFormat((0, _extends2.default)({}, params, {
251
+ const escapedParts = getEscapedPartsFromFormat((0, _extends2.default)({}, parameters, {
252
252
  expandedFormat
253
253
  }));
254
- const sections = buildSections((0, _extends2.default)({}, params, {
254
+ const sections = buildSections((0, _extends2.default)({}, parameters, {
255
255
  expandedFormat,
256
256
  escapedParts
257
257
  }));
258
- return postProcessSections((0, _extends2.default)({}, params, {
258
+ return postProcessSections((0, _extends2.default)({}, parameters, {
259
259
  sections
260
260
  }));
261
261
  };
@@ -1,4 +1,4 @@
1
1
  export { useField } from "./useField.js";
2
- export type { FieldValueManager, UseFieldInternalProps, UseFieldParams, UseFieldResponse, FieldChangeHandler, FieldChangeHandlerContext } from './useField.types';
2
+ export type { UseFieldInternalProps, UseFieldParameters, UseFieldReturnValue, UseFieldProps, FieldValueManager, FieldChangeHandler, FieldChangeHandlerContext } from './useField.types';
3
3
  export { createDateStrForV7HiddenInputFromSections, createDateStrForV6InputFromSections } from "./useField.utils.js";
4
4
  export { useFieldInternalPropsWithDefaults } from "./useFieldInternalPropsWithDefaults.js";
@@ -1,5 +1,3 @@
1
- import { UseFieldParams, UseFieldResponse, UseFieldCommonForwardedProps, UseFieldInternalProps, UseFieldForwardedProps } from "./useField.types.js";
1
+ import { UseFieldParameters, UseFieldReturnValue, UseFieldProps } from "./useField.types.js";
2
2
  import { PickerValidValue } from "../../models/index.js";
3
- export declare const useField: <TValue extends PickerValidValue, TEnableAccessibleFieldDOMStructure extends boolean, TForwardedProps extends UseFieldCommonForwardedProps & UseFieldForwardedProps<TEnableAccessibleFieldDOMStructure>, TInternalProps extends UseFieldInternalProps<TValue, TEnableAccessibleFieldDOMStructure, any> & {
4
- minutesStep?: number;
5
- }>(params: UseFieldParams<TValue, TEnableAccessibleFieldDOMStructure, TForwardedProps, TInternalProps>) => UseFieldResponse<TEnableAccessibleFieldDOMStructure, TForwardedProps>;
3
+ export declare const useField: <TValue extends PickerValidValue, TEnableAccessibleFieldDOMStructure extends boolean, TError, TValidationProps extends {}, TProps extends UseFieldProps<TEnableAccessibleFieldDOMStructure>>(parameters: UseFieldParameters<TValue, TEnableAccessibleFieldDOMStructure, TError, TValidationProps, TProps>) => UseFieldReturnValue<TEnableAccessibleFieldDOMStructure, TProps>;
@@ -1,242 +1,16 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
8
6
  exports.useField = void 0;
9
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
- var React = _interopRequireWildcard(require("react"));
11
- var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
12
- var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
13
- var _RtlProvider = require("@mui/system/RtlProvider");
14
- var _validation = require("../../../validation");
15
- var _useUtils = require("../useUtils");
16
- var _useField = require("./useField.utils");
17
- var _useFieldState = require("./useFieldState");
18
- var _useFieldCharacterEditing = require("./useFieldCharacterEditing");
19
7
  var _useFieldV7TextField = require("./useFieldV7TextField");
20
8
  var _useFieldV6TextField = require("./useFieldV6TextField");
21
- const useField = params => {
22
- const utils = (0, _useUtils.useUtils)();
23
- const {
24
- internalProps,
25
- internalProps: {
26
- unstableFieldRef,
27
- minutesStep,
28
- enableAccessibleFieldDOMStructure = true,
29
- disabled = false,
30
- readOnly = false,
31
- autoFocus = false
32
- },
33
- forwardedProps: {
34
- onKeyDown,
35
- error,
36
- clearable,
37
- onClear
38
- },
39
- fieldValueManager,
40
- validator,
41
- getOpenPickerButtonAriaLabel: getOpenDialogAriaText
42
- } = params;
43
- const isRtl = (0, _RtlProvider.useRtl)();
44
- const stateResponse = (0, _useFieldState.useFieldState)(params);
45
- const {
46
- state,
47
- value,
48
- activeSectionIndex,
49
- parsedSelectedSections,
50
- setSelectedSections,
51
- clearValue,
52
- clearActiveSection,
53
- updateSectionValue,
54
- setTempAndroidValueStr,
55
- sectionsValueBoundaries,
56
- localizedDigits,
57
- timezone
58
- } = stateResponse;
59
- const characterEditingResponse = (0, _useFieldCharacterEditing.useFieldCharacterEditing)({
60
- sections: state.sections,
61
- updateSectionValue,
62
- sectionsValueBoundaries,
63
- localizedDigits,
64
- setTempAndroidValueStr,
65
- timezone
66
- });
67
- const {
68
- resetCharacterQuery
69
- } = characterEditingResponse;
70
- const areAllSectionsEmpty = React.useMemo(() => state.sections.every(section => section.value === ''), [state.sections]);
9
+ var _useNullableFieldPrivateContext = require("../useNullableFieldPrivateContext");
10
+ const useField = parameters => {
11
+ const fieldPrivateContext = (0, _useNullableFieldPrivateContext.useNullableFieldPrivateContext)();
12
+ const enableAccessibleFieldDOMStructure = parameters.props.enableAccessibleFieldDOMStructure ?? fieldPrivateContext?.enableAccessibleFieldDOMStructure ?? true;
71
13
  const useFieldTextField = enableAccessibleFieldDOMStructure ? _useFieldV7TextField.useFieldV7TextField : _useFieldV6TextField.useFieldV6TextField;
72
- const sectionOrder = React.useMemo(() => (0, _useField.getSectionOrder)(state.sections, isRtl && !enableAccessibleFieldDOMStructure), [state.sections, isRtl, enableAccessibleFieldDOMStructure]);
73
- const {
74
- returnedValue,
75
- interactions
76
- } = useFieldTextField((0, _extends2.default)({}, params, stateResponse, characterEditingResponse, {
77
- areAllSectionsEmpty,
78
- sectionOrder
79
- }));
80
- const handleContainerKeyDown = (0, _useEventCallback.default)(event => {
81
- onKeyDown?.(event);
82
- if (disabled) {
83
- return;
84
- }
85
- // eslint-disable-next-line default-case
86
- switch (true) {
87
- // Select all
88
- case (event.ctrlKey || event.metaKey) && String.fromCharCode(event.keyCode) === 'A' && !event.shiftKey && !event.altKey:
89
- {
90
- // prevent default to make sure that the next line "select all" while updating
91
- // the internal state at the same time.
92
- event.preventDefault();
93
- setSelectedSections('all');
94
- break;
95
- }
96
-
97
- // Move selection to next section
98
- case event.key === 'ArrowRight':
99
- {
100
- event.preventDefault();
101
- if (parsedSelectedSections == null) {
102
- setSelectedSections(sectionOrder.startIndex);
103
- } else if (parsedSelectedSections === 'all') {
104
- setSelectedSections(sectionOrder.endIndex);
105
- } else {
106
- const nextSectionIndex = sectionOrder.neighbors[parsedSelectedSections].rightIndex;
107
- if (nextSectionIndex !== null) {
108
- setSelectedSections(nextSectionIndex);
109
- }
110
- }
111
- break;
112
- }
113
-
114
- // Move selection to previous section
115
- case event.key === 'ArrowLeft':
116
- {
117
- event.preventDefault();
118
- if (parsedSelectedSections == null) {
119
- setSelectedSections(sectionOrder.endIndex);
120
- } else if (parsedSelectedSections === 'all') {
121
- setSelectedSections(sectionOrder.startIndex);
122
- } else {
123
- const nextSectionIndex = sectionOrder.neighbors[parsedSelectedSections].leftIndex;
124
- if (nextSectionIndex !== null) {
125
- setSelectedSections(nextSectionIndex);
126
- }
127
- }
128
- break;
129
- }
130
-
131
- // Reset the value of the selected section
132
- case event.key === 'Delete':
133
- {
134
- event.preventDefault();
135
- if (readOnly) {
136
- break;
137
- }
138
- if (parsedSelectedSections == null || parsedSelectedSections === 'all') {
139
- clearValue();
140
- } else {
141
- clearActiveSection();
142
- }
143
- resetCharacterQuery();
144
- break;
145
- }
146
-
147
- // Increment / decrement the selected section value
148
- case ['ArrowUp', 'ArrowDown', 'Home', 'End', 'PageUp', 'PageDown'].includes(event.key):
149
- {
150
- event.preventDefault();
151
- if (readOnly || activeSectionIndex == null) {
152
- break;
153
- }
154
-
155
- // if all sections are selected, mark the currently editing one as selected
156
- if (parsedSelectedSections === 'all') {
157
- setSelectedSections(activeSectionIndex);
158
- }
159
- const activeSection = state.sections[activeSectionIndex];
160
- const newSectionValue = (0, _useField.adjustSectionValue)(utils, timezone, activeSection, event.key, sectionsValueBoundaries, localizedDigits, fieldValueManager.getDateFromSection(value, activeSection), {
161
- minutesStep
162
- });
163
- updateSectionValue({
164
- section: activeSection,
165
- newSectionValue,
166
- shouldGoToNextSection: false
167
- });
168
- break;
169
- }
170
- }
171
- });
172
- (0, _useEnhancedEffect.default)(() => {
173
- interactions.syncSelectionToDOM();
174
- });
175
- const {
176
- hasValidationError
177
- } = (0, _validation.useValidation)({
178
- props: internalProps,
179
- validator,
180
- timezone,
181
- value,
182
- onError: internalProps.onError
183
- });
184
- const inputError = React.useMemo(() => {
185
- // only override when `error` is undefined.
186
- // in case of multi input fields, the `error` value is provided externally and will always be defined.
187
- if (error !== undefined) {
188
- return error;
189
- }
190
- return hasValidationError;
191
- }, [hasValidationError, error]);
192
- React.useEffect(() => {
193
- if (!inputError && activeSectionIndex == null) {
194
- resetCharacterQuery();
195
- }
196
- }, [state.referenceValue, activeSectionIndex, inputError]); // eslint-disable-line react-hooks/exhaustive-deps
197
-
198
- // If `tempValueStrAndroid` is still defined for some section when running `useEffect`,
199
- // Then `onChange` has only been called once, which means the user pressed `Backspace` to reset the section.
200
- // This causes a small flickering on Android,
201
- // But we can't use `useEnhancedEffect` which is always called before the second `onChange` call and then would cause false positives.
202
- React.useEffect(() => {
203
- if (state.tempValueStrAndroid != null && activeSectionIndex != null) {
204
- resetCharacterQuery();
205
- clearActiveSection();
206
- }
207
- }, [state.sections]); // eslint-disable-line react-hooks/exhaustive-deps
208
-
209
- React.useImperativeHandle(unstableFieldRef, () => ({
210
- getSections: () => state.sections,
211
- getActiveSectionIndex: interactions.getActiveSectionIndexFromDOM,
212
- setSelectedSections: interactions.setSelectedSections,
213
- focusField: interactions.focusField,
214
- isFieldFocused: interactions.isFieldFocused
215
- }));
216
- const handleClearValue = (0, _useEventCallback.default)((event, ...args) => {
217
- event.preventDefault();
218
- onClear?.(event, ...args);
219
- clearValue();
220
- if (!interactions.isFieldFocused()) {
221
- // setSelectedSections is called internally
222
- interactions.focusField(0);
223
- } else {
224
- setSelectedSections(sectionOrder.startIndex);
225
- }
226
- });
227
- const commonForwardedProps = {
228
- onKeyDown: handleContainerKeyDown,
229
- onClear: handleClearValue,
230
- error: inputError,
231
- clearable: Boolean(clearable && !areAllSectionsEmpty && !readOnly && !disabled)
232
- };
233
- const openPickerAriaLabel = React.useMemo(() => getOpenDialogAriaText(value), [getOpenDialogAriaText, value]);
234
- const commonAdditionalProps = {
235
- disabled,
236
- readOnly,
237
- autoFocus,
238
- openPickerAriaLabel
239
- };
240
- return (0, _extends2.default)({}, params.forwardedProps, commonForwardedProps, commonAdditionalProps, returnedValue);
14
+ return useFieldTextField(parameters);
241
15
  };
242
16
  exports.useField = useField;
@@ -1,20 +1,12 @@
1
1
  import * as React from 'react';
2
- import { FieldSectionType, FieldSection, FieldSelectedSections, MuiPickersAdapter, TimezoneProps, FieldSectionContentType, PickerValidDate, FieldRef, OnErrorProps, InferError, InferFieldSection, PickerValueType } from "../../../models/index.js";
3
- import type { PickerValueManager } from '../../models';
4
- import type { Validator } from '../../../validation';
5
- import type { UseFieldStateResponse } from './useFieldState';
6
- import type { UseFieldCharacterEditingResponse } from './useFieldCharacterEditing';
2
+ import { FieldSectionType, FieldSection, FieldSelectedSections, MuiPickersAdapter, TimezoneProps, FieldSectionContentType, PickerValidDate, FieldRef, OnErrorProps, InferFieldSection, PickerManager, PickerValueType } from "../../../models/index.js";
3
+ import { InternalPropNames } from "../../../hooks/useSplitFieldProps.js";
7
4
  import { PickersSectionElement, PickersSectionListRef } from "../../../PickersSectionList/index.js";
8
5
  import { FormProps, InferNonNullablePickerValue, PickerValidValue } from "../../models/index.js";
9
- import type { ExportedPickerFieldUIProps } from '../../components/PickerFieldUI';
10
- export interface UseFieldParams<TValue extends PickerValidValue, TEnableAccessibleFieldDOMStructure extends boolean, TForwardedProps extends UseFieldCommonForwardedProps & UseFieldForwardedProps<TEnableAccessibleFieldDOMStructure>, TInternalProps extends UseFieldInternalProps<TValue, TEnableAccessibleFieldDOMStructure, any>> {
11
- forwardedProps: TForwardedProps;
12
- internalProps: TInternalProps;
13
- valueManager: PickerValueManager<TValue, InferError<TInternalProps>>;
14
- fieldValueManager: FieldValueManager<TValue>;
15
- validator: Validator<TValue, InferError<TInternalProps>, TInternalProps>;
16
- valueType: PickerValueType;
17
- getOpenPickerButtonAriaLabel: (value: TValue) => string;
6
+ export interface UseFieldParameters<TValue extends PickerValidValue, TEnableAccessibleFieldDOMStructure extends boolean, TError, TValidationProps extends {}, TProps extends UseFieldProps<TEnableAccessibleFieldDOMStructure>> {
7
+ manager: PickerManager<TValue, TEnableAccessibleFieldDOMStructure, TError, TValidationProps, any>;
8
+ props: TProps;
9
+ skipContextFieldRefAssignment?: boolean;
18
10
  }
19
11
  export interface UseFieldInternalProps<TValue extends PickerValidValue, TEnableAccessibleFieldDOMStructure extends boolean, TError> extends TimezoneProps, FormProps, OnErrorProps<TValue, TError> {
20
12
  /**
@@ -98,39 +90,47 @@ export interface UseFieldInternalProps<TValue extends PickerValidValue, TEnableA
98
90
  */
99
91
  focused?: boolean;
100
92
  }
101
- export interface UseFieldCommonAdditionalProps extends Required<Pick<UseFieldInternalProps<any, any, any>, 'disabled' | 'readOnly' | 'autoFocus'>> {
102
- /**
103
- * The aria label to set on the button that opens the Picker.
104
- */
105
- openPickerAriaLabel: string;
106
- }
107
- export interface UseFieldCommonForwardedProps extends Pick<ExportedPickerFieldUIProps, 'clearable' | 'onClear'> {
108
- onKeyDown?: React.KeyboardEventHandler;
93
+ export type UseFieldForwardedProps<TEnableAccessibleFieldDOMStructure extends boolean> = TEnableAccessibleFieldDOMStructure extends false ? {
94
+ clearable?: boolean;
109
95
  error?: boolean;
110
- }
111
- export type UseFieldForwardedProps<TEnableAccessibleFieldDOMStructure extends boolean> = UseFieldCommonForwardedProps & (TEnableAccessibleFieldDOMStructure extends false ? UseFieldV6ForwardedProps : UseFieldV7ForwardedProps);
112
- export interface UseFieldV6ForwardedProps {
96
+ placeholder?: string;
113
97
  inputRef?: React.Ref<HTMLInputElement>;
114
- onBlur?: React.FocusEventHandler;
115
98
  onClick?: React.MouseEventHandler;
116
99
  onFocus?: React.FocusEventHandler;
100
+ onKeyDown?: React.KeyboardEventHandler;
101
+ onBlur?: React.FocusEventHandler;
117
102
  onPaste?: React.ClipboardEventHandler<HTMLDivElement>;
118
- placeholder?: string;
119
- }
120
- interface UseFieldV6AdditionalProps extends Required<Pick<React.InputHTMLAttributes<HTMLInputElement>, 'inputMode' | 'placeholder' | 'value' | 'onChange' | 'autoComplete'>> {
121
- enableAccessibleFieldDOMStructure: false;
122
- focused?: boolean;
123
- }
124
- export interface UseFieldV7ForwardedProps {
103
+ onClear?: React.MouseEventHandler;
104
+ } : {
105
+ clearable?: boolean;
106
+ error?: boolean;
125
107
  focused?: boolean;
126
108
  sectionListRef?: React.Ref<PickersSectionListRef>;
127
- onBlur?: React.FocusEventHandler;
128
109
  onClick?: React.MouseEventHandler;
110
+ onKeyDown?: React.KeyboardEventHandler;
129
111
  onFocus?: React.FocusEventHandler;
112
+ onBlur?: React.FocusEventHandler;
130
113
  onInput?: React.FormEventHandler<HTMLDivElement>;
131
114
  onPaste?: React.ClipboardEventHandler<HTMLDivElement>;
132
- }
133
- interface UseFieldV7AdditionalProps {
115
+ onClear?: React.MouseEventHandler;
116
+ };
117
+ type UseFieldAdditionalProps<TEnableAccessibleFieldDOMStructure extends boolean> = TEnableAccessibleFieldDOMStructure extends false ? {
118
+ /**
119
+ * The aria label to set on the button that opens the Picker.
120
+ */
121
+ openPickerAriaLabel: string;
122
+ enableAccessibleFieldDOMStructure: false;
123
+ focused: boolean | undefined;
124
+ inputMode: 'text' | 'numeric';
125
+ placeholder: string;
126
+ value: string;
127
+ onChange: React.ChangeEventHandler<HTMLInputElement>;
128
+ autoComplete: 'off';
129
+ } : {
130
+ /**
131
+ * The aria label to set on the button that opens the Picker.
132
+ */
133
+ openPickerAriaLabel: string;
134
134
  enableAccessibleFieldDOMStructure: true;
135
135
  elements: PickersSectionElement[];
136
136
  tabIndex: number | undefined;
@@ -139,10 +139,8 @@ interface UseFieldV7AdditionalProps {
139
139
  onChange: React.ChangeEventHandler<HTMLInputElement>;
140
140
  areAllSectionsEmpty: boolean;
141
141
  focused: boolean;
142
- }
143
- export type UseFieldResponse<TEnableAccessibleFieldDOMStructure extends boolean, TForwardedProps extends UseFieldCommonForwardedProps & {
144
- [key: string]: any;
145
- }> = Omit<TForwardedProps, keyof UseFieldCommonForwardedProps> & Required<UseFieldCommonForwardedProps> & UseFieldCommonAdditionalProps & (TEnableAccessibleFieldDOMStructure extends false ? UseFieldV6AdditionalProps & Required<UseFieldV6ForwardedProps> : UseFieldV7AdditionalProps & Required<UseFieldV7ForwardedProps>);
142
+ };
143
+ export type UseFieldReturnValue<TEnableAccessibleFieldDOMStructure extends boolean, TProps extends UseFieldProps<TEnableAccessibleFieldDOMStructure>> = Required<Pick<UseFieldInternalProps<any, any, any>, 'disabled' | 'readOnly' | 'autoFocus'>> & Required<UseFieldForwardedProps<TEnableAccessibleFieldDOMStructure>> & UseFieldAdditionalProps<TEnableAccessibleFieldDOMStructure> & Omit<TProps, InternalPropNames<PickerValueType>>;
146
144
  export type FieldSectionValueBoundaries<SectionType extends FieldSectionType> = {
147
145
  minimum: number;
148
146
  maximum: number;
@@ -282,8 +280,11 @@ export interface UseFieldState<TValue extends PickerValidValue> {
282
280
  * The property below allows us to set the first `onChange` value into state waiting for the second one.
283
281
  */
284
282
  tempValueStrAndroid: string | null;
283
+ /**
284
+ * The current query when editing the field using letters or digits.
285
+ */
286
+ characterQuery: CharacterEditingQuery | null;
285
287
  }
286
- export type AvailableAdjustKeyCode = 'ArrowUp' | 'ArrowDown' | 'PageUp' | 'PageDown' | 'Home' | 'End';
287
288
  export type SectionNeighbors = {
288
289
  [sectionIndex: number]: {
289
290
  /**
@@ -310,33 +311,12 @@ export type SectionOrdering = {
310
311
  */
311
312
  endIndex: number;
312
313
  };
313
- export interface UseFieldTextFieldInteractions {
314
- /**
315
- * Select the correct sections in the DOM according to the sections currently selected in state.
316
- */
317
- syncSelectionToDOM: () => void;
318
- /**
319
- * Returns the index of the active section (the first focused section).
320
- * If no section is active, returns `null`.
321
- * @returns {number | null} The index of the active section.
322
- */
323
- getActiveSectionIndexFromDOM: () => number | null;
324
- /**
325
- * Focuses the field.
326
- * @param {number | FieldSectionType} newSelectedSection The section to select once focused.
327
- */
328
- focusField: (newSelectedSection?: number | FieldSectionType) => void;
329
- setSelectedSections: (newSelectedSections: FieldSelectedSections) => void;
330
- isFieldFocused: () => boolean;
314
+ export interface CharacterEditingQuery {
315
+ value: string;
316
+ sectionIndex: number;
317
+ sectionType: FieldSectionType;
331
318
  }
332
- export type UseFieldTextField<TEnableAccessibleFieldDOMStructure extends boolean> = <TValue extends PickerValidValue, TForwardedProps extends (TEnableAccessibleFieldDOMStructure extends false ? UseFieldV6ForwardedProps : UseFieldV7ForwardedProps), TInternalProps extends UseFieldInternalProps<TValue, TEnableAccessibleFieldDOMStructure, any> & {
333
- minutesStep?: number;
334
- }>(params: UseFieldTextFieldParams<TValue, TEnableAccessibleFieldDOMStructure, TForwardedProps, TInternalProps>) => {
335
- interactions: UseFieldTextFieldInteractions;
336
- returnedValue: TEnableAccessibleFieldDOMStructure extends false ? UseFieldV6AdditionalProps & Required<UseFieldV6ForwardedProps> : UseFieldV7AdditionalProps & Required<UseFieldV7ForwardedProps>;
319
+ export type UseFieldProps<TEnableAccessibleFieldDOMStructure extends boolean> = UseFieldForwardedProps<TEnableAccessibleFieldDOMStructure> & {
320
+ enableAccessibleFieldDOMStructure?: boolean;
337
321
  };
338
- interface UseFieldTextFieldParams<TValue extends PickerValidValue, TEnableAccessibleFieldDOMStructure extends boolean, TForwardedProps extends (TEnableAccessibleFieldDOMStructure extends false ? UseFieldV6ForwardedProps : UseFieldV7ForwardedProps), TInternalProps extends UseFieldInternalProps<TValue, TEnableAccessibleFieldDOMStructure, any>> extends UseFieldParams<TValue, TEnableAccessibleFieldDOMStructure, TForwardedProps, TInternalProps>, UseFieldStateResponse<TValue>, UseFieldCharacterEditingResponse {
339
- areAllSectionsEmpty: boolean;
340
- sectionOrder: SectionOrdering;
341
- }
342
322
  export {};
@@ -1,4 +1,4 @@
1
- import { AvailableAdjustKeyCode, FieldSectionsValueBoundaries, SectionOrdering, FieldSectionValueBoundaries, FieldParsedSelectedSections } from "./useField.types.js";
1
+ import { FieldSectionsValueBoundaries, SectionOrdering, FieldSectionValueBoundaries, FieldParsedSelectedSections } from "./useField.types.js";
2
2
  import { FieldSectionType, FieldSection, MuiPickersAdapter, FieldSectionContentType, PickersTimezone, PickerValidDate, FieldSelectedSections, PickerValueType, InferFieldSection } from "../../../models/index.js";
3
3
  import { PickerValidValue } from "../../models/index.js";
4
4
  export declare const getDateSectionConfigFromFormatToken: (utils: MuiPickersAdapter, formatToken: string) => Pick<FieldSection, "type" | "contentType"> & {
@@ -12,15 +12,12 @@ export declare const removeLocalizedDigits: (valueStr: string, localizedDigits:
12
12
  export declare const applyLocalizedDigits: (valueStr: string, localizedDigits: string[]) => string;
13
13
  export declare const isStringNumber: (valueStr: string, localizedDigits: string[]) => boolean;
14
14
  /**
15
- * Remove the leading zeroes to a digit section value.
15
+ * Make sure the value of a digit section have the right amount of leading zeros.
16
16
  * E.g.: `03` => `3`
17
17
  * Warning: Should only be called with non-localized digits. Call `removeLocalizedDigits` with your value if needed.
18
18
  */
19
19
  export declare const cleanLeadingZeros: (valueStr: string, size: number) => string;
20
20
  export declare const cleanDigitSectionValue: (utils: MuiPickersAdapter, value: number, sectionBoundaries: FieldSectionValueBoundaries<any>, localizedDigits: string[], section: Pick<FieldSection, "format" | "type" | "contentType" | "hasLeadingZerosInFormat" | "hasLeadingZerosInInput" | "maxLength">) => string;
21
- export declare const adjustSectionValue: <TValue extends PickerValidValue>(utils: MuiPickersAdapter, timezone: PickersTimezone, section: InferFieldSection<TValue>, keyCode: AvailableAdjustKeyCode, sectionsValueBoundaries: FieldSectionsValueBoundaries, localizedDigits: string[], activeDate: PickerValidDate | null, stepsAttributes?: {
22
- minutesStep?: number;
23
- }) => string;
24
21
  export declare const getSectionVisibleValue: (section: FieldSection, target: "input-rtl" | "input-ltr" | "non-input", localizedDigits: string[]) => string;
25
22
  export declare const changeSectionValueFormat: (utils: MuiPickersAdapter, valueStr: string, currentFormat: string, newFormat: string) => string;
26
23
  export declare const doesSectionFormatHaveLeadingZeros: (utils: MuiPickersAdapter, contentType: FieldSectionContentType, sectionType: FieldSectionType, format: string) => boolean;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.validateSections = exports.removeLocalizedDigits = exports.parseSelectedSections = exports.mergeDateIntoReferenceDate = exports.isStringNumber = exports.isAndroid = exports.getSectionsBoundaries = exports.getSectionVisibleValue = exports.getSectionValueText = exports.getSectionValueNow = exports.getSectionOrder = exports.getLocalizedDigits = exports.getLetterEditingOptions = exports.getDaysInWeekStr = exports.getDateSectionConfigFromFormatToken = exports.getDateFromDateSections = exports.doesSectionFormatHaveLeadingZeros = exports.createDateStrForV7HiddenInputFromSections = exports.createDateStrForV6InputFromSections = exports.cleanLeadingZeros = exports.cleanDigitSectionValue = exports.changeSectionValueFormat = exports.applyLocalizedDigits = exports.adjustSectionValue = exports.FORMAT_SECONDS_NO_LEADING_ZEROS = void 0;
6
+ exports.validateSections = exports.removeLocalizedDigits = exports.parseSelectedSections = exports.mergeDateIntoReferenceDate = exports.isStringNumber = exports.isAndroid = exports.getSectionsBoundaries = exports.getSectionVisibleValue = exports.getSectionValueText = exports.getSectionValueNow = exports.getSectionOrder = exports.getLocalizedDigits = exports.getLetterEditingOptions = exports.getDaysInWeekStr = exports.getDateSectionConfigFromFormatToken = exports.getDateFromDateSections = exports.doesSectionFormatHaveLeadingZeros = exports.createDateStrForV7HiddenInputFromSections = exports.createDateStrForV6InputFromSections = exports.cleanLeadingZeros = exports.cleanDigitSectionValue = exports.changeSectionValueFormat = exports.applyLocalizedDigits = exports.FORMAT_SECONDS_NO_LEADING_ZEROS = void 0;
7
7
  var _dateUtils = require("../../utils/date-utils");
8
8
  const getDateSectionConfigFromFormatToken = (utils, formatToken) => {
9
9
  const config = utils.formatTokenMap[formatToken];
@@ -24,20 +24,6 @@ const getDateSectionConfigFromFormatToken = (utils, formatToken) => {
24
24
  };
25
25
  };
26
26
  exports.getDateSectionConfigFromFormatToken = getDateSectionConfigFromFormatToken;
27
- const getDeltaFromKeyCode = keyCode => {
28
- switch (keyCode) {
29
- case 'ArrowUp':
30
- return 1;
31
- case 'ArrowDown':
32
- return -1;
33
- case 'PageUp':
34
- return 5;
35
- case 'PageDown':
36
- return -5;
37
- default:
38
- return 0;
39
- }
40
- };
41
27
  const getDaysInWeekStr = (utils, format) => {
42
28
  const elements = [];
43
29
  const now = utils.date(undefined, 'default');
@@ -120,22 +106,14 @@ const isStringNumber = (valueStr, localizedDigits) => {
120
106
  };
121
107
 
122
108
  /**
123
- * Remove the leading zeroes to a digit section value.
109
+ * Make sure the value of a digit section have the right amount of leading zeros.
124
110
  * E.g.: `03` => `3`
125
111
  * Warning: Should only be called with non-localized digits. Call `removeLocalizedDigits` with your value if needed.
126
112
  */
127
113
  exports.isStringNumber = isStringNumber;
128
114
  const cleanLeadingZeros = (valueStr, size) => {
129
- let cleanValueStr = valueStr;
130
-
131
- // Remove the leading zeros
132
- cleanValueStr = Number(cleanValueStr).toString();
133
-
134
- // Add enough leading zeros to fill the section
135
- while (cleanValueStr.length < size) {
136
- cleanValueStr = `0${cleanValueStr}`;
137
- }
138
- return cleanValueStr;
115
+ // Remove the leading zeros and then add back as many as needed.
116
+ return Number(valueStr).toString().padStart(size, '0');
139
117
  };
140
118
  exports.cleanLeadingZeros = cleanLeadingZeros;
141
119
  const cleanDigitSectionValue = (utils, value, sectionBoundaries, localizedDigits, section) => {
@@ -158,69 +136,6 @@ const cleanDigitSectionValue = (utils, value, sectionBoundaries, localizedDigits
158
136
  return applyLocalizedDigits(valueStr, localizedDigits);
159
137
  };
160
138
  exports.cleanDigitSectionValue = cleanDigitSectionValue;
161
- const adjustSectionValue = (utils, timezone, section, keyCode, sectionsValueBoundaries, localizedDigits, activeDate, stepsAttributes) => {
162
- const delta = getDeltaFromKeyCode(keyCode);
163
- const isStart = keyCode === 'Home';
164
- const isEnd = keyCode === 'End';
165
- const shouldSetAbsolute = section.value === '' || isStart || isEnd;
166
- const adjustDigitSection = () => {
167
- const sectionBoundaries = sectionsValueBoundaries[section.type]({
168
- currentDate: activeDate,
169
- format: section.format,
170
- contentType: section.contentType
171
- });
172
- const getCleanValue = value => cleanDigitSectionValue(utils, value, sectionBoundaries, localizedDigits, section);
173
- const step = section.type === 'minutes' && stepsAttributes?.minutesStep ? stepsAttributes.minutesStep : 1;
174
- const currentSectionValue = parseInt(removeLocalizedDigits(section.value, localizedDigits), 10);
175
- let newSectionValueNumber = currentSectionValue + delta * step;
176
- if (shouldSetAbsolute) {
177
- if (section.type === 'year' && !isEnd && !isStart) {
178
- return utils.formatByString(utils.date(undefined, timezone), section.format);
179
- }
180
- if (delta > 0 || isStart) {
181
- newSectionValueNumber = sectionBoundaries.minimum;
182
- } else {
183
- newSectionValueNumber = sectionBoundaries.maximum;
184
- }
185
- }
186
- if (newSectionValueNumber % step !== 0) {
187
- if (delta < 0 || isStart) {
188
- newSectionValueNumber += step - (step + newSectionValueNumber) % step; // for JS -3 % 5 = -3 (should be 2)
189
- }
190
- if (delta > 0 || isEnd) {
191
- newSectionValueNumber -= newSectionValueNumber % step;
192
- }
193
- }
194
- if (newSectionValueNumber > sectionBoundaries.maximum) {
195
- return getCleanValue(sectionBoundaries.minimum + (newSectionValueNumber - sectionBoundaries.maximum - 1) % (sectionBoundaries.maximum - sectionBoundaries.minimum + 1));
196
- }
197
- if (newSectionValueNumber < sectionBoundaries.minimum) {
198
- return getCleanValue(sectionBoundaries.maximum - (sectionBoundaries.minimum - newSectionValueNumber - 1) % (sectionBoundaries.maximum - sectionBoundaries.minimum + 1));
199
- }
200
- return getCleanValue(newSectionValueNumber);
201
- };
202
- const adjustLetterSection = () => {
203
- const options = getLetterEditingOptions(utils, timezone, section.type, section.format);
204
- if (options.length === 0) {
205
- return section.value;
206
- }
207
- if (shouldSetAbsolute) {
208
- if (delta > 0 || isStart) {
209
- return options[0];
210
- }
211
- return options[options.length - 1];
212
- }
213
- const currentOptionIndex = options.indexOf(section.value);
214
- const newOptionIndex = (currentOptionIndex + delta) % options.length;
215
- const clampedIndex = (newOptionIndex + options.length) % options.length;
216
- return options[clampedIndex];
217
- };
218
- if (section.contentType === 'digit' || section.contentType === 'digit-with-letter') {
219
- return adjustDigitSection();
220
- }
221
- return adjustLetterSection();
222
- };
223
- exports.adjustSectionValue = adjustSectionValue;
224
139
  const getSectionVisibleValue = (section, target, localizedDigits) => {
225
140
  let value = section.value || section.placeholder;
226
141
  const hasLeadingZeros = target === 'non-input' ? section.hasLeadingZerosInFormat : section.hasLeadingZerosInInput;
@@ -262,12 +177,11 @@ const doesSectionFormatHaveLeadingZeros = (utils, contentType, sectionType, form
262
177
  // We can't use `changeSectionValueFormat`, because `utils.parse('1', 'YYYY')` returns `1971` instead of `1`.
263
178
  case 'year':
264
179
  {
265
- if (isFourDigitYearFormat(utils, format)) {
266
- const formatted0001 = utils.formatByString(utils.setYear(now, 1), format);
267
- return formatted0001 === '0001';
180
+ // Remove once https://github.com/iamkun/dayjs/pull/2847 is merged and bump dayjs version
181
+ if (utils.lib === 'dayjs' && format === 'YY') {
182
+ return true;
268
183
  }
269
- const formatted2001 = utils.formatByString(utils.setYear(now, 2001), format);
270
- return formatted2001 === '01';
184
+ return utils.formatByString(utils.setYear(now, 1), format).startsWith('0');
271
185
  }
272
186
  case 'month':
273
187
  {