@mui/x-date-pickers 6.0.2 → 6.0.4

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 (234) hide show
  1. package/AdapterDateFns/index.js +1 -0
  2. package/AdapterDateFnsJalali/index.js +69 -0
  3. package/AdapterDayjs/index.js +5 -0
  4. package/AdapterLuxon/index.js +13 -3
  5. package/AdapterMoment/index.js +5 -0
  6. package/AdapterMomentHijri/index.js +5 -0
  7. package/AdapterMomentJalaali/index.js +5 -0
  8. package/CHANGELOG.md +119 -5
  9. package/DateCalendar/DateCalendar.types.d.ts +1 -1
  10. package/DateCalendar/PickersCalendarHeader.d.ts +1 -1
  11. package/DateCalendar/index.d.ts +0 -1
  12. package/DateField/DateField.js +4 -0
  13. package/DateField/DateField.types.d.ts +2 -2
  14. package/DateField/useDateField.js +5 -3
  15. package/DatePicker/DatePickerToolbar.d.ts +1 -1
  16. package/DatePicker/shared.d.ts +2 -2
  17. package/DateTimeField/DateTimeField.js +4 -0
  18. package/DateTimeField/DateTimeField.types.d.ts +2 -2
  19. package/DateTimeField/useDateTimeField.js +5 -3
  20. package/DateTimePicker/DateTimePickerTabs.d.ts +1 -1
  21. package/DateTimePicker/DateTimePickerToolbar.d.ts +1 -1
  22. package/DateTimePicker/shared.d.ts +1 -2
  23. package/DesktopDatePicker/DesktopDatePicker.types.d.ts +1 -1
  24. package/DesktopDateTimePicker/DesktopDateTimePicker.types.d.ts +1 -1
  25. package/DesktopTimePicker/DesktopTimePicker.types.d.ts +1 -1
  26. package/MobileDatePicker/MobileDatePicker.types.d.ts +1 -1
  27. package/MobileDateTimePicker/MobileDateTimePicker.types.d.ts +1 -1
  28. package/MobileTimePicker/MobileTimePicker.types.d.ts +1 -1
  29. package/PickersDay/PickersDay.js +4 -4
  30. package/PickersLayout/PickersLayout.d.ts +1 -1
  31. package/PickersLayout/PickersLayout.types.d.ts +1 -1
  32. package/PickersLayout/index.d.ts +1 -1
  33. package/PickersLayout/usePickerLayout.d.ts +1 -1
  34. package/README.md +1 -1
  35. package/StaticDatePicker/StaticDatePicker.types.d.ts +2 -1
  36. package/StaticDateTimePicker/StaticDateTimePicker.types.d.ts +2 -1
  37. package/StaticTimePicker/StaticTimePicker.types.d.ts +2 -1
  38. package/TimeClock/Clock.d.ts +1 -1
  39. package/TimeClock/ClockPointer.d.ts +1 -1
  40. package/TimeClock/TimeClock.types.d.ts +1 -1
  41. package/TimeClock/index.d.ts +0 -1
  42. package/TimeField/TimeField.js +4 -0
  43. package/TimeField/TimeField.types.d.ts +2 -2
  44. package/TimeField/useTimeField.js +5 -3
  45. package/TimePicker/TimePickerToolbar.d.ts +1 -1
  46. package/TimePicker/shared.d.ts +1 -2
  47. package/dateViewRenderers/dateViewRenderers.d.ts +1 -1
  48. package/index.d.ts +1 -6
  49. package/index.js +4 -2
  50. package/internals/components/PickersToolbar.d.ts +1 -1
  51. package/internals/demo/DemoContainer.js +15 -7
  52. package/internals/hooks/useDesktopPicker/useDesktopPicker.d.ts +1 -1
  53. package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.ts +7 -7
  54. package/internals/hooks/useField/index.d.ts +2 -2
  55. package/internals/hooks/useField/index.js +1 -1
  56. package/internals/hooks/useField/useField.d.ts +3 -2
  57. package/internals/hooks/useField/useField.js +61 -30
  58. package/internals/hooks/useField/useField.types.d.ts +48 -116
  59. package/internals/hooks/useField/useField.utils.d.ts +7 -5
  60. package/internals/hooks/useField/useField.utils.js +68 -50
  61. package/internals/hooks/useField/useFieldCharacterEditing.d.ts +2 -1
  62. package/internals/hooks/useField/useFieldState.d.ts +4 -3
  63. package/internals/hooks/useField/useFieldState.js +86 -65
  64. package/internals/hooks/useIsLandscape.d.ts +1 -1
  65. package/internals/hooks/useMobilePicker/useMobilePicker.d.ts +1 -1
  66. package/internals/hooks/useMobilePicker/useMobilePicker.types.d.ts +7 -7
  67. package/internals/hooks/usePicker/usePicker.d.ts +2 -2
  68. package/internals/hooks/usePicker/usePicker.types.d.ts +4 -4
  69. package/internals/hooks/usePicker/usePickerLayoutProps.d.ts +1 -1
  70. package/internals/hooks/usePicker/usePickerValue.d.ts +9 -8
  71. package/internals/hooks/usePicker/usePickerValue.js +7 -11
  72. package/internals/hooks/usePicker/usePickerViews.d.ts +1 -1
  73. package/internals/hooks/useStaticPicker/useStaticPicker.d.ts +1 -1
  74. package/internals/hooks/useStaticPicker/useStaticPicker.types.d.ts +2 -2
  75. package/internals/hooks/useViews.d.ts +1 -1
  76. package/internals/hooks/useViews.js +8 -0
  77. package/internals/hooks/validation/models.d.ts +1 -1
  78. package/internals/hooks/validation/useDateTimeValidation.d.ts +3 -3
  79. package/internals/hooks/validation/useDateValidation.d.ts +2 -2
  80. package/internals/hooks/validation/useTimeValidation.d.ts +2 -2
  81. package/internals/index.d.ts +4 -8
  82. package/internals/index.js +2 -2
  83. package/internals/models/fields.d.ts +2 -20
  84. package/internals/models/index.d.ts +0 -1
  85. package/internals/models/index.js +0 -1
  86. package/internals/models/muiPickersAdapter.d.ts +1 -10
  87. package/internals/models/props/basePickerProps.d.ts +3 -3
  88. package/internals/models/props/tabs.d.ts +1 -1
  89. package/internals/models/props/toolbar.d.ts +1 -1
  90. package/internals/utils/date-utils.d.ts +1 -0
  91. package/internals/utils/date-utils.js +6 -0
  92. package/internals/utils/time-utils.d.ts +2 -1
  93. package/internals/utils/utils.d.ts +1 -1
  94. package/internals/utils/utils.js +3 -3
  95. package/internals/utils/validation.d.ts +1 -1
  96. package/internals/utils/valueManagers.d.ts +2 -4
  97. package/internals/utils/valueManagers.js +11 -12
  98. package/internals/utils/views.d.ts +1 -1
  99. package/legacy/AdapterDateFns/index.js +1 -0
  100. package/legacy/AdapterDateFnsJalali/index.js +69 -0
  101. package/legacy/AdapterDayjs/index.js +5 -0
  102. package/legacy/AdapterLuxon/index.js +13 -3
  103. package/legacy/AdapterMoment/index.js +5 -0
  104. package/legacy/AdapterMomentHijri/index.js +5 -0
  105. package/legacy/AdapterMomentJalaali/index.js +5 -0
  106. package/legacy/DateField/DateField.js +4 -0
  107. package/legacy/DateField/useDateField.js +4 -2
  108. package/legacy/DateTimeField/DateTimeField.js +4 -0
  109. package/legacy/DateTimeField/useDateTimeField.js +4 -2
  110. package/legacy/PickersDay/PickersDay.js +4 -4
  111. package/legacy/TimeField/TimeField.js +4 -0
  112. package/legacy/TimeField/useTimeField.js +4 -2
  113. package/legacy/index.js +4 -2
  114. package/legacy/internals/demo/DemoContainer.js +12 -6
  115. package/legacy/internals/hooks/useField/index.js +1 -1
  116. package/legacy/internals/hooks/useField/useField.js +86 -44
  117. package/legacy/internals/hooks/useField/useField.utils.js +76 -54
  118. package/legacy/internals/hooks/useField/useFieldState.js +92 -72
  119. package/legacy/internals/hooks/usePicker/usePickerValue.js +9 -13
  120. package/legacy/internals/hooks/useViews.js +10 -0
  121. package/legacy/internals/index.js +2 -2
  122. package/legacy/internals/models/index.js +0 -1
  123. package/legacy/internals/utils/date-utils.js +6 -0
  124. package/legacy/internals/utils/utils.js +3 -3
  125. package/legacy/internals/utils/valueManagers.js +12 -19
  126. package/legacy/locales/daDK.js +91 -0
  127. package/legacy/locales/faIR.js +33 -16
  128. package/legacy/locales/nbNO.js +12 -10
  129. package/legacy/locales/nlNL.js +12 -10
  130. package/legacy/locales/plPL.js +12 -10
  131. package/legacy/locales/svSE.js +12 -10
  132. package/legacy/models/index.js +3 -0
  133. package/legacy/tests/describeValue/testPickerOpenCloseLifeCycle.js +2 -3
  134. package/locales/daDK.d.ts +51 -0
  135. package/locales/daDK.js +59 -0
  136. package/locales/faIR.js +13 -16
  137. package/locales/nbNO.js +8 -10
  138. package/locales/nlNL.d.ts +4 -4
  139. package/locales/nlNL.js +8 -10
  140. package/locales/plPL.js +8 -10
  141. package/locales/svSE.js +8 -10
  142. package/locales/utils/pickersLocaleTextApi.d.ts +2 -1
  143. package/models/fields.d.ts +117 -0
  144. package/models/fields.js +1 -0
  145. package/models/index.d.ts +3 -0
  146. package/models/index.js +3 -0
  147. package/models/package.json +6 -0
  148. package/models/validation.d.ts +8 -0
  149. package/models/validation.js +1 -0
  150. package/models/views.js +1 -0
  151. package/modern/AdapterDateFns/index.js +1 -0
  152. package/modern/AdapterDateFnsJalali/index.js +69 -0
  153. package/modern/AdapterDayjs/index.js +5 -0
  154. package/modern/AdapterLuxon/index.js +13 -3
  155. package/modern/AdapterMoment/index.js +5 -0
  156. package/modern/AdapterMomentHijri/index.js +5 -0
  157. package/modern/AdapterMomentJalaali/index.js +5 -0
  158. package/modern/DateField/DateField.js +4 -0
  159. package/modern/DateField/useDateField.js +5 -3
  160. package/modern/DateTimeField/DateTimeField.js +4 -0
  161. package/modern/DateTimeField/useDateTimeField.js +5 -3
  162. package/modern/PickersDay/PickersDay.js +4 -4
  163. package/modern/TimeField/TimeField.js +4 -0
  164. package/modern/TimeField/useTimeField.js +5 -3
  165. package/modern/index.js +4 -2
  166. package/modern/internals/demo/DemoContainer.js +15 -7
  167. package/modern/internals/hooks/useField/index.js +1 -1
  168. package/modern/internals/hooks/useField/useField.js +59 -29
  169. package/modern/internals/hooks/useField/useField.utils.js +68 -50
  170. package/modern/internals/hooks/useField/useFieldState.js +86 -65
  171. package/modern/internals/hooks/usePicker/usePickerValue.js +7 -11
  172. package/modern/internals/hooks/useViews.js +8 -0
  173. package/modern/internals/index.js +2 -2
  174. package/modern/internals/models/index.js +0 -1
  175. package/modern/internals/utils/date-utils.js +6 -0
  176. package/modern/internals/utils/utils.js +3 -3
  177. package/modern/internals/utils/valueManagers.js +11 -12
  178. package/modern/locales/daDK.js +56 -0
  179. package/modern/locales/faIR.js +13 -16
  180. package/modern/locales/nbNO.js +8 -10
  181. package/modern/locales/nlNL.js +8 -10
  182. package/modern/locales/plPL.js +8 -10
  183. package/modern/locales/svSE.js +8 -10
  184. package/modern/models/fields.js +1 -0
  185. package/modern/models/index.js +3 -0
  186. package/modern/models/validation.js +1 -0
  187. package/modern/models/views.js +1 -0
  188. package/modern/tests/describeValue/testPickerOpenCloseLifeCycle.js +2 -3
  189. package/node/AdapterDateFns/index.js +1 -0
  190. package/node/AdapterDateFnsJalali/index.js +69 -0
  191. package/node/AdapterDayjs/index.js +5 -0
  192. package/node/AdapterLuxon/index.js +13 -3
  193. package/node/AdapterMoment/index.js +5 -0
  194. package/node/AdapterMomentHijri/index.js +5 -0
  195. package/node/AdapterMomentJalaali/index.js +5 -0
  196. package/node/DateField/DateField.js +4 -0
  197. package/node/DateField/useDateField.js +5 -3
  198. package/node/DateTimeField/DateTimeField.js +4 -0
  199. package/node/DateTimeField/useDateTimeField.js +5 -3
  200. package/node/PickersDay/PickersDay.js +4 -4
  201. package/node/TimeField/TimeField.js +4 -0
  202. package/node/TimeField/useTimeField.js +5 -3
  203. package/node/index.js +14 -2
  204. package/node/internals/demo/DemoContainer.js +15 -7
  205. package/node/internals/hooks/useField/index.js +0 -6
  206. package/node/internals/hooks/useField/useField.js +58 -28
  207. package/node/internals/hooks/useField/useField.utils.js +71 -52
  208. package/node/internals/hooks/useField/useFieldState.js +85 -64
  209. package/node/internals/hooks/usePicker/usePickerValue.js +7 -11
  210. package/node/internals/hooks/useViews.js +8 -0
  211. package/node/internals/index.js +6 -12
  212. package/node/internals/models/index.js +0 -11
  213. package/node/internals/utils/date-utils.js +9 -2
  214. package/node/internals/utils/utils.js +3 -3
  215. package/node/internals/utils/valueManagers.js +9 -10
  216. package/node/locales/daDK.js +62 -0
  217. package/node/locales/faIR.js +13 -16
  218. package/node/locales/nbNO.js +8 -10
  219. package/node/locales/nlNL.js +8 -10
  220. package/node/locales/plPL.js +8 -10
  221. package/node/locales/svSE.js +8 -10
  222. package/node/models/index.js +38 -0
  223. package/node/models/validation.js +5 -0
  224. package/node/models/views.js +5 -0
  225. package/node/tests/describeValue/testPickerOpenCloseLifeCycle.js +2 -3
  226. package/package.json +2 -2
  227. package/tests/describeValue/testPickerOpenCloseLifeCycle.js +2 -3
  228. package/themeAugmentation/props.d.ts +1 -1
  229. package/timeViewRenderers/timeViewRenderers.d.ts +1 -1
  230. /package/{internals/models/views.js → legacy/models/fields.js} +0 -0
  231. /package/legacy/{internals/models/views.js → models/validation.js} +0 -0
  232. /package/{modern/internals → legacy}/models/views.js +0 -0
  233. /package/{internals/models → models}/views.d.ts +0 -0
  234. /package/node/{internals/models/views.js → models/fields.js} +0 -0
@@ -2,10 +2,10 @@ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
3
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4
4
  import * as React from 'react';
5
- import { useTheme } from '@mui/material/styles';
6
5
  import useControlled from '@mui/utils/useControlled';
6
+ import { useTheme } from '@mui/material/styles';
7
7
  import { useUtils, useLocaleText, useLocalizationContext } from '../useUtils';
8
- import { addPositionPropertiesToSections, splitFormatIntoSections, clampDaySection, mergeDateIntoReferenceDate, getSectionsBoundaries, validateSections, getDateFromDateSections } from './useField.utils';
8
+ import { addPositionPropertiesToSections, splitFormatIntoSections, clampDaySectionIfPossible, mergeDateIntoReferenceDate, getSectionsBoundaries, validateSections, getDateFromDateSections } from './useField.utils';
9
9
  export var useFieldState = function useFieldState(params) {
10
10
  var _ref;
11
11
  var utils = useUtils();
@@ -30,19 +30,21 @@ export var useFieldState = function useFieldState(params) {
30
30
  var sectionsValueBoundaries = React.useMemo(function () {
31
31
  return getSectionsBoundaries(utils);
32
32
  }, [utils]);
33
- var sectionOrder = React.useMemo(function () {
34
- return fieldValueManager.getSectionOrder(utils, localeText, format, isRTL);
35
- }, [fieldValueManager, format, isRTL, localeText, utils]);
33
+ var getSectionsFromValue = React.useCallback(function (value) {
34
+ var fallbackSections = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
35
+ return fieldValueManager.getSectionsFromValue(utils, value, fallbackSections, isRTL, function (date) {
36
+ return splitFormatIntoSections(utils, localeText, format, date);
37
+ });
38
+ }, [fieldValueManager, format, localeText, isRTL, utils]);
36
39
  var placeholder = React.useMemo(function () {
37
- return fieldValueManager.getValueStrFromSections(fieldValueManager.getSectionsFromValue(utils, localeText, null, valueManager.emptyValue, format));
38
- }, [fieldValueManager, format, localeText, utils, valueManager.emptyValue]);
40
+ return fieldValueManager.getValueStrFromSections(getSectionsFromValue(valueManager.emptyValue), isRTL);
41
+ }, [fieldValueManager, getSectionsFromValue, valueManager.emptyValue, isRTL]);
39
42
  var _React$useState = React.useState(function () {
40
- var sections = fieldValueManager.getSectionsFromValue(utils, localeText, null, valueFromTheOutside, format);
43
+ var sections = getSectionsFromValue(valueFromTheOutside);
41
44
  validateSections(sections, valueType);
42
45
  return {
43
46
  sections: sections,
44
47
  value: valueFromTheOutside,
45
- placeholder: placeholder,
46
48
  referenceValue: fieldValueManager.updateReferenceValue(utils, valueFromTheOutside, valueManager.getTodayValue(utils)),
47
49
  tempValueStrAndroid: null
48
50
  };
@@ -98,12 +100,11 @@ export var useFieldState = function useFieldState(params) {
98
100
  }, [selectedSections, state.sections]);
99
101
  var publishValue = function publishValue(_ref2) {
100
102
  var value = _ref2.value,
101
- referenceValue = _ref2.referenceValue;
102
- var sections = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : state.sections;
103
- var newSections = fieldValueManager.getSectionsFromValue(utils, localeText, sections, value, format);
103
+ referenceValue = _ref2.referenceValue,
104
+ sections = _ref2.sections;
104
105
  setState(function (prevState) {
105
106
  return _extends({}, prevState, {
106
- sections: newSections,
107
+ sections: sections,
107
108
  value: value,
108
109
  referenceValue: referenceValue,
109
110
  tempValueStrAndroid: null
@@ -128,7 +129,7 @@ export var useFieldState = function useFieldState(params) {
128
129
  value: newSectionValue,
129
130
  modified: true
130
131
  });
131
- return addPositionPropertiesToSections(newSections);
132
+ return addPositionPropertiesToSections(newSections, isRTL);
132
133
  };
133
134
  var clearValue = function clearValue() {
134
135
  if (valueManager.areValuesEqual(utils, state.value, valueManager.emptyValue)) {
@@ -136,8 +137,9 @@ export var useFieldState = function useFieldState(params) {
136
137
  }
137
138
  publishValue({
138
139
  value: valueManager.emptyValue,
139
- referenceValue: state.referenceValue
140
- }, null);
140
+ referenceValue: state.referenceValue,
141
+ sections: getSectionsFromValue(valueManager.emptyValue)
142
+ });
141
143
  };
142
144
  var clearActiveSection = function clearActiveSection() {
143
145
  if (selectedSectionIndexes == null) {
@@ -148,19 +150,20 @@ export var useFieldState = function useFieldState(params) {
148
150
  return;
149
151
  }
150
152
  var activeDateManager = fieldValueManager.getActiveDateManager(utils, state, activeSection);
151
- var activeDateSections = fieldValueManager.getActiveDateSections(state.sections, activeSection);
152
- var nonEmptySectionCountBefore = activeDateSections.filter(function (section) {
153
+ var nonEmptySectionCountBefore = activeDateManager.getSections(state.sections).filter(function (section) {
153
154
  return section.value !== '';
154
155
  }).length;
155
156
  var isTheOnlyNonEmptySection = nonEmptySectionCountBefore === 1;
156
157
  var newSections = setSectionValue(selectedSectionIndexes.startIndex, '');
157
158
  var newActiveDate = isTheOnlyNonEmptySection ? null : utils.date(new Date(''));
158
- var newValue = activeDateManager.getNewValueFromNewActiveDate(newActiveDate);
159
- if ((newActiveDate != null && !utils.isValid(newActiveDate)) !== (activeDateManager.activeDate != null && !utils.isValid(activeDateManager.activeDate))) {
160
- publishValue(newValue, newSections);
159
+ var newValues = activeDateManager.getNewValuesFromNewActiveDate(newActiveDate);
160
+ if ((newActiveDate != null && !utils.isValid(newActiveDate)) !== (activeDateManager.date != null && !utils.isValid(activeDateManager.date))) {
161
+ publishValue(_extends({}, newValues, {
162
+ sections: newSections
163
+ }));
161
164
  } else {
162
165
  setState(function (prevState) {
163
- return _extends({}, prevState, newValue, {
166
+ return _extends({}, prevState, newValues, {
164
167
  sections: newSections,
165
168
  tempValueStrAndroid: null
166
169
  });
@@ -180,61 +183,80 @@ export var useFieldState = function useFieldState(params) {
180
183
  var newReferenceValue = fieldValueManager.updateReferenceValue(utils, newValue, state.referenceValue);
181
184
  publishValue({
182
185
  value: newValue,
183
- referenceValue: newReferenceValue
186
+ referenceValue: newReferenceValue,
187
+ sections: getSectionsFromValue(newValue, state.sections)
184
188
  });
185
189
  };
186
190
  var updateSectionValue = function updateSectionValue(_ref3) {
187
191
  var activeSection = _ref3.activeSection,
188
192
  newSectionValue = _ref3.newSectionValue,
189
193
  shouldGoToNextSection = _ref3.shouldGoToNextSection;
190
- var commit = function commit(_ref4) {
191
- var values = _ref4.values,
192
- sections = _ref4.sections,
193
- shouldPublish = _ref4.shouldPublish;
194
- if (shouldGoToNextSection && selectedSectionIndexes && selectedSectionIndexes.startIndex < state.sections.length - 1) {
195
- setSelectedSections(selectedSectionIndexes.startIndex + 1);
196
- } else if (selectedSectionIndexes && selectedSectionIndexes.startIndex !== selectedSectionIndexes.endIndex) {
197
- setSelectedSections(selectedSectionIndexes.startIndex);
198
- }
199
- if (shouldPublish) {
200
- publishValue(values, sections);
201
- } else {
202
- setState(function (prevState) {
203
- return _extends({}, prevState, values, {
204
- sections: sections != null ? sections : state.sections,
205
- tempValueStrAndroid: null
206
- });
207
- });
208
- }
209
- };
194
+ /**
195
+ * 1. Decide which section should be focused
196
+ */
197
+ if (shouldGoToNextSection && selectedSectionIndexes && selectedSectionIndexes.startIndex < state.sections.length - 1) {
198
+ setSelectedSections(selectedSectionIndexes.startIndex + 1);
199
+ } else if (selectedSectionIndexes && selectedSectionIndexes.startIndex !== selectedSectionIndexes.endIndex) {
200
+ setSelectedSections(selectedSectionIndexes.startIndex);
201
+ }
202
+
203
+ /**
204
+ * 2. Try to build a valid date from the new section value
205
+ */
210
206
  var activeDateManager = fieldValueManager.getActiveDateManager(utils, state, activeSection);
211
207
  var newSections = setSectionValue(selectedSectionIndexes.startIndex, newSectionValue);
212
- var activeDateSections = fieldValueManager.getActiveDateSections(newSections, activeSection);
213
- var newActiveDate = getDateFromDateSections(utils, activeDateSections);
208
+ var newActiveDateSections = activeDateManager.getSections(newSections);
209
+ var newActiveDate = getDateFromDateSections(utils, newActiveDateSections);
210
+ var shouldRegenSections = false;
214
211
 
215
- // When all the sections are filled but the date is invalid, it can be because the month has fewer days than asked.
216
- // We can try to set the day to the maximum boundary.
217
- if (!utils.isValid(newActiveDate) && activeDateSections.every(function (section) {
218
- return section.type === 'weekDay' || section.value !== '';
219
- }) && activeDateSections.some(function (section) {
220
- return section.type === 'day';
221
- })) {
222
- var cleanSections = clampDaySection(utils, activeDateSections, sectionsValueBoundaries);
223
- if (cleanSections != null) {
224
- newActiveDate = getDateFromDateSections(utils, cleanSections);
212
+ /**
213
+ * If the date is invalid,
214
+ * Then we can try to clamp the day section to see if that produces a valid date.
215
+ * This can be useful if the month has fewer days than the day value currently provided.
216
+ */
217
+ if (!utils.isValid(newActiveDate)) {
218
+ var clampedSections = clampDaySectionIfPossible(utils, newActiveDateSections, sectionsValueBoundaries);
219
+ if (clampedSections != null) {
220
+ shouldRegenSections = true;
221
+ newActiveDate = getDateFromDateSections(utils, clampedSections);
225
222
  }
226
223
  }
224
+ var values;
225
+ var shouldPublish;
226
+
227
+ /**
228
+ * If the new date is valid,
229
+ * Then we merge the value of the modified sections into the reference date.
230
+ * This makes sure that we don't lose some information of the initial date (like the time on a date field).
231
+ */
227
232
  if (newActiveDate != null && utils.isValid(newActiveDate)) {
228
- var mergedDate = mergeDateIntoReferenceDate(utils, newActiveDate, activeDateSections, activeDateManager.referenceActiveDate, true);
229
- return commit({
230
- values: activeDateManager.getNewValueFromNewActiveDate(mergedDate),
231
- shouldPublish: true
232
- });
233
+ var mergedDate = mergeDateIntoReferenceDate(utils, newActiveDate, newActiveDateSections, activeDateManager.referenceDate, true);
234
+ values = activeDateManager.getNewValuesFromNewActiveDate(mergedDate);
235
+ shouldPublish = true;
236
+ } else {
237
+ values = activeDateManager.getNewValuesFromNewActiveDate(newActiveDate);
238
+ shouldPublish = (newActiveDate != null && !utils.isValid(newActiveDate)) !== (activeDateManager.date != null && !utils.isValid(activeDateManager.date));
239
+ }
240
+
241
+ /**
242
+ * If the value has been modified (to clamp the day).
243
+ * Then we need to re-generate the sections to make sure they also have this change.
244
+ */
245
+ var sections = shouldRegenSections ? getSectionsFromValue(values.value, state.sections) : newSections;
246
+
247
+ /**
248
+ * Publish or update the internal state with the new value and sections.
249
+ */
250
+ if (shouldPublish) {
251
+ return publishValue(_extends({}, values, {
252
+ sections: sections
253
+ }));
233
254
  }
234
- return commit({
235
- values: activeDateManager.getNewValueFromNewActiveDate(newActiveDate),
236
- sections: newSections,
237
- shouldPublish: (newActiveDate != null && !utils.isValid(newActiveDate)) !== (activeDateManager.activeDate != null && !utils.isValid(activeDateManager.activeDate))
255
+ return setState(function (prevState) {
256
+ return _extends({}, prevState, values, {
257
+ sections: sections,
258
+ tempValueStrAndroid: null
259
+ });
238
260
  });
239
261
  };
240
262
  var setTempAndroidValueStr = function setTempAndroidValueStr(tempValueStrAndroid) {
@@ -246,27 +268,25 @@ export var useFieldState = function useFieldState(params) {
246
268
  };
247
269
  React.useEffect(function () {
248
270
  if (!valueManager.areValuesEqual(utils, state.value, valueFromTheOutside)) {
249
- var sections = fieldValueManager.getSectionsFromValue(utils, localeText, state.sections, valueFromTheOutside, format);
250
271
  setState(function (prevState) {
251
272
  return _extends({}, prevState, {
252
273
  value: valueFromTheOutside,
253
274
  referenceValue: fieldValueManager.updateReferenceValue(utils, valueFromTheOutside, prevState.referenceValue),
254
- sections: sections
275
+ sections: getSectionsFromValue(valueFromTheOutside)
255
276
  });
256
277
  });
257
278
  }
258
279
  }, [valueFromTheOutside]); // eslint-disable-line react-hooks/exhaustive-deps
259
280
 
260
281
  React.useEffect(function () {
261
- var sections = fieldValueManager.getSectionsFromValue(utils, localeText, null, state.value, format);
282
+ var sections = getSectionsFromValue(state.value);
262
283
  validateSections(sections, valueType);
263
284
  setState(function (prevState) {
264
285
  return _extends({}, prevState, {
265
- sections: sections,
266
- placeholder: placeholder
286
+ sections: sections
267
287
  });
268
288
  });
269
- }, [format, utils.locale, placeholder]); // eslint-disable-line react-hooks/exhaustive-deps
289
+ }, [format, utils.locale]); // eslint-disable-line react-hooks/exhaustive-deps
270
290
 
271
291
  return {
272
292
  state: state,
@@ -277,7 +297,7 @@ export var useFieldState = function useFieldState(params) {
277
297
  updateSectionValue: updateSectionValue,
278
298
  updateValueFromValueStr: updateValueFromValueStr,
279
299
  setTempAndroidValueStr: setTempAndroidValueStr,
280
- sectionOrder: sectionOrder,
281
- sectionsValueBoundaries: sectionsValueBoundaries
300
+ sectionsValueBoundaries: sectionsValueBoundaries,
301
+ placeholder: placeholder
282
302
  };
283
303
  };
@@ -31,11 +31,8 @@ export var usePickerValue = function usePickerValue(_ref) {
31
31
  state: 'value'
32
32
  }),
33
33
  _useControlled2 = _slicedToArray(_useControlled, 2),
34
- rawValue = _useControlled2[0],
34
+ value = _useControlled2[0],
35
35
  setValue = _useControlled2[1];
36
- var value = React.useMemo(function () {
37
- return valueManager.cleanValue(utils, rawValue);
38
- }, [valueManager, utils, rawValue]);
39
36
  var _useControlled3 = useControlled({
40
37
  controlled: selectedSectionsProp,
41
38
  default: null,
@@ -92,7 +89,7 @@ export var usePickerValue = function usePickerValue(_ref) {
92
89
  }
93
90
  }
94
91
  });
95
- if (params.forceOnChangeCall || !params.skipOnChangeCall && !valueManager.areValuesEqual(utils, dateState.committed, params.value)) {
92
+ if (!params.skipOnChangeCall && !valueManager.areValuesEqual(utils, dateState.committed, params.value)) {
96
93
  setValue(params.value);
97
94
  if (onChange) {
98
95
  var _context = {
@@ -137,18 +134,14 @@ export var usePickerValue = function usePickerValue(_ref) {
137
134
  // Reset all date in state to the empty value and close picker.
138
135
  setDate({
139
136
  value: valueManager.emptyValue,
140
- action: 'acceptAndClose',
141
- // force `onChange` in cases like input (value) === `Invalid date`
142
- forceOnChangeCall: !valueManager.areValuesEqual(utils, value, valueManager.emptyValue)
137
+ action: 'acceptAndClose'
143
138
  });
144
139
  });
145
140
  var handleAccept = useEventCallback(function () {
146
141
  // Set all date in state to equal the current draft value and close picker.
147
142
  setDate({
148
143
  value: dateState.draft,
149
- action: 'acceptAndClose',
150
- // force `onChange` in cases like input (value) === `Invalid date`
151
- forceOnChangeCall: !valueManager.areValuesEqual(utils, dateState.committed, dateState.draft)
144
+ action: 'acceptAndClose'
152
145
  });
153
146
  });
154
147
  var handleDismiss = useEventCallback(function () {
@@ -248,8 +241,11 @@ export var usePickerValue = function usePickerValue(_ref) {
248
241
  selectedSections: selectedSections,
249
242
  onSelectedSectionsChange: handleFieldSelectedSectionsChange
250
243
  };
244
+ var viewValue = React.useMemo(function () {
245
+ return valueManager.cleanValue(utils, dateState.draft);
246
+ }, [utils, valueManager, dateState.draft]);
251
247
  var viewResponse = {
252
- value: dateState.draft,
248
+ value: viewValue,
253
249
  onChange: handleChange,
254
250
  onClose: handleClose,
255
251
  open: isOpen,
@@ -268,7 +264,7 @@ export var usePickerValue = function usePickerValue(_ref) {
268
264
  }) : validationResponse === null;
269
265
  };
270
266
  var layoutResponse = _extends({}, actions, {
271
- value: dateState.draft,
267
+ value: viewValue,
272
268
  onChange: handleChangeAndCommit,
273
269
  isValid: isValid
274
270
  });
@@ -25,6 +25,8 @@ export function useViews(_ref) {
25
25
  }
26
26
  }
27
27
  }
28
+ var previousOpenTo = React.useRef(openTo);
29
+ var previousViews = React.useRef(views);
28
30
  var defaultView = React.useRef(views.includes(openTo) ? openTo : views[0]);
29
31
  var _useControlled = useControlled({
30
32
  name: 'useViews',
@@ -45,6 +47,14 @@ export function useViews(_ref) {
45
47
  _useControlled4 = _slicedToArray(_useControlled3, 2),
46
48
  focusedView = _useControlled4[0],
47
49
  setFocusedView = _useControlled4[1];
50
+ React.useEffect(function () {
51
+ // Update the current view when `openTo` or `views` props change
52
+ if (previousOpenTo.current && previousOpenTo.current !== openTo || previousViews.current && previousViews.current.some(function (previousView) {
53
+ return !views.includes(previousView);
54
+ })) {
55
+ setView(views.includes(openTo) ? openTo : views[0]);
56
+ }
57
+ }, [openTo, setView, view, views]);
48
58
  var viewIndex = views.indexOf(view);
49
59
  var previousView = (_views = views[viewIndex - 1]) != null ? _views : null;
50
60
  var nextView = (_views2 = views[viewIndex + 1]) != null ? _views2 : null;
@@ -9,7 +9,7 @@ export { pickersArrowSwitcherClasses } from './components/PickersArrowSwitcher/p
9
9
  export { pickersPopperClasses } from './components/pickersPopperClasses';
10
10
  export { PickersToolbarButton } from './components/PickersToolbarButton';
11
11
  export { DAY_MARGIN, DIALOG_WIDTH } from './constants/dimensions';
12
- export { useField, createDateStrForInputFromSections, addPositionPropertiesToSections, splitFormatIntoSections, getSectionOrder } from './hooks/useField';
12
+ export { useField, createDateStrForInputFromSections, addPositionPropertiesToSections } from './hooks/useField';
13
13
  export { usePicker } from './hooks/usePicker';
14
14
  export { useStaticPicker } from './hooks/useStaticPicker';
15
15
  export { useLocalizationContext, useDefaultDates, useUtils, useLocaleText, useNow } from './hooks/useUtils';
@@ -18,7 +18,7 @@ export { validateDate } from './hooks/validation/useDateValidation';
18
18
  export { validateTime } from './hooks/validation/useTimeValidation';
19
19
  export { validateDateTime } from './hooks/validation/useDateTimeValidation';
20
20
  export { usePreviousMonthDisabled, useNextMonthDisabled } from './hooks/date-helpers-hooks';
21
- export { applyDefaultDate, replaceInvalidDateByNull } from './utils/date-utils';
21
+ export { applyDefaultDate, replaceInvalidDateByNull, areDatesEqual } from './utils/date-utils';
22
22
  export { executeInTheNextEventLoopTick, getActiveElement, onSpaceOrEnter, DEFAULT_DESKTOP_MODE_MEDIA_QUERY } from './utils/utils';
23
23
  export { defaultReduceAnimations } from './utils/defaultReduceAnimations';
24
24
  export { extractValidationProps } from './utils/validation';
@@ -1,3 +1,2 @@
1
- export * from './views';
2
1
  export * from './fields';
3
2
  export * from './muiPickersAdapter';
@@ -64,4 +64,10 @@ export var applyDefaultDate = function applyDefaultDate(utils, value, defaultVal
64
64
  return defaultValue;
65
65
  }
66
66
  return value;
67
+ };
68
+ export var areDatesEqual = function areDatesEqual(utils, a, b) {
69
+ if (!utils.isValid(a) && a != null && !utils.isValid(b) && b != null) {
70
+ return true;
71
+ }
72
+ return utils.isEqual(a, b);
67
73
  };
@@ -7,7 +7,7 @@ export function arrayIncludes(array, itemOrItems) {
7
7
  }
8
8
  return array.indexOf(itemOrItems) !== -1;
9
9
  }
10
- export var onSpaceOrEnter = function onSpaceOrEnter(innerFn, onFocus) {
10
+ export var onSpaceOrEnter = function onSpaceOrEnter(innerFn, externalEvent) {
11
11
  return function (event) {
12
12
  if (event.key === 'Enter' || event.key === ' ') {
13
13
  innerFn(event);
@@ -16,8 +16,8 @@ export var onSpaceOrEnter = function onSpaceOrEnter(innerFn, onFocus) {
16
16
  event.preventDefault();
17
17
  event.stopPropagation();
18
18
  }
19
- if (onFocus) {
20
- onFocus(event);
19
+ if (externalEvent) {
20
+ externalEvent(event);
21
21
  }
22
22
  };
23
23
  };
@@ -1,14 +1,12 @@
1
- import { replaceInvalidDateByNull } from './date-utils';
2
- import { addPositionPropertiesToSections, createDateStrForInputFromSections, splitFormatIntoSections, getSectionOrder as _getSectionOrder } from '../hooks/useField/useField.utils';
1
+ import { areDatesEqual, replaceInvalidDateByNull } from './date-utils';
2
+ import { addPositionPropertiesToSections, createDateStrForInputFromSections } from '../hooks/useField/useField.utils';
3
3
  export var singleItemValueManager = {
4
4
  emptyValue: null,
5
5
  getTodayValue: function getTodayValue(utils) {
6
6
  return utils.date();
7
7
  },
8
8
  cleanValue: replaceInvalidDateByNull,
9
- areValuesEqual: function areValuesEqual(utils, a, b) {
10
- return utils.isEqual(a, b);
11
- },
9
+ areValuesEqual: areDatesEqual,
12
10
  isSameError: function isSameError(a, b) {
13
11
  return a === b;
14
12
  },
@@ -18,24 +16,22 @@ export var singleItemFieldValueManager = {
18
16
  updateReferenceValue: function updateReferenceValue(utils, value, prevReferenceValue) {
19
17
  return value == null || !utils.isValid(value) ? prevReferenceValue : value;
20
18
  },
21
- getSectionsFromValue: function getSectionsFromValue(utils, localeText, prevSections, date, format) {
19
+ getSectionsFromValue: function getSectionsFromValue(utils, date, prevSections, isRTL, getSectionsFromDate) {
22
20
  var shouldReUsePrevDateSections = !utils.isValid(date) && !!prevSections;
23
21
  if (shouldReUsePrevDateSections) {
24
22
  return prevSections;
25
23
  }
26
- return addPositionPropertiesToSections(splitFormatIntoSections(utils, localeText, format, date));
27
- },
28
- getValueStrFromSections: function getValueStrFromSections(sections) {
29
- return createDateStrForInputFromSections(sections);
30
- },
31
- getActiveDateSections: function getActiveDateSections(sections) {
32
- return sections;
24
+ return addPositionPropertiesToSections(getSectionsFromDate(date), isRTL);
33
25
  },
26
+ getValueStrFromSections: createDateStrForInputFromSections,
34
27
  getActiveDateManager: function getActiveDateManager(utils, state) {
35
28
  return {
36
- activeDate: state.value,
37
- referenceActiveDate: state.referenceValue,
38
- getNewValueFromNewActiveDate: function getNewValueFromNewActiveDate(newActiveDate) {
29
+ date: state.value,
30
+ referenceDate: state.referenceValue,
31
+ getSections: function getSections(sections) {
32
+ return sections;
33
+ },
34
+ getNewValuesFromNewActiveDate: function getNewValuesFromNewActiveDate(newActiveDate) {
39
35
  return {
40
36
  value: newActiveDate,
41
37
  referenceValue: newActiveDate == null || !utils.isValid(newActiveDate) ? state.referenceValue : newActiveDate
@@ -48,8 +44,5 @@ export var singleItemFieldValueManager = {
48
44
  },
49
45
  hasError: function hasError(error) {
50
46
  return error != null;
51
- },
52
- getSectionOrder: function getSectionOrder(utils, localeText, format, isRTL) {
53
- return _getSectionOrder(splitFormatIntoSections(utils, localeText, format, null), isRTL);
54
47
  }
55
48
  };
@@ -0,0 +1,91 @@
1
+ import { getPickersLocalization } from './utils/getPickersLocalization';
2
+
3
+ // maps TimeView to its translation
4
+ var timeViews = {
5
+ hours: 'Timer',
6
+ minutes: 'Minutter',
7
+ seconds: 'Sekunder'
8
+ };
9
+ var daDKPickers = {
10
+ // Calendar navigation
11
+ previousMonth: 'Forrige måned',
12
+ nextMonth: 'Næste måned',
13
+ // View navigation
14
+ openPreviousView: 'åben forrige visning',
15
+ openNextView: 'åben næste visning',
16
+ calendarViewSwitchingButtonAriaLabel: function calendarViewSwitchingButtonAriaLabel(view) {
17
+ return view === 'year' ? 'årsvisning er åben, skift til kalendervisning' : 'kalendervisning er åben, skift til årsvisning';
18
+ },
19
+ // DateRange placeholders
20
+ start: 'Start',
21
+ end: 'Slut',
22
+ // Action bar
23
+ cancelButtonLabel: 'Annuller',
24
+ clearButtonLabel: 'Ryd',
25
+ okButtonLabel: 'OK',
26
+ todayButtonLabel: 'I dag',
27
+ // Toolbar titles
28
+ datePickerToolbarTitle: 'Vælg dato',
29
+ dateTimePickerToolbarTitle: 'Vælg dato & tidspunkt',
30
+ timePickerToolbarTitle: 'Vælg tidspunkt',
31
+ dateRangePickerToolbarTitle: 'Vælg datointerval',
32
+ // Clock labels
33
+ clockLabelText: function clockLabelText(view, time, adapter) {
34
+ var _timeViews$view;
35
+ return "V\xE6lg ".concat((_timeViews$view = timeViews[view]) != null ? _timeViews$view : view, ". ").concat(time === null ? 'Intet tidspunkt valgt' : "Valgte tidspunkt er ".concat(adapter.format(time, 'fullTime')));
36
+ },
37
+ hoursClockNumberText: function hoursClockNumberText(hours) {
38
+ return "".concat(hours, " timer");
39
+ },
40
+ minutesClockNumberText: function minutesClockNumberText(minutes) {
41
+ return "".concat(minutes, " minutter");
42
+ },
43
+ secondsClockNumberText: function secondsClockNumberText(seconds) {
44
+ return "".concat(seconds, " sekunder");
45
+ },
46
+ // Calendar labels
47
+ calendarWeekNumberHeaderLabel: 'Ugenummer',
48
+ calendarWeekNumberHeaderText: '#',
49
+ calendarWeekNumberAriaLabelText: function calendarWeekNumberAriaLabelText(weekNumber) {
50
+ return "Uge ".concat(weekNumber);
51
+ },
52
+ calendarWeekNumberText: function calendarWeekNumberText(weekNumber) {
53
+ return "".concat(weekNumber);
54
+ },
55
+ // Open picker labels
56
+ openDatePickerDialogue: function openDatePickerDialogue(value, utils) {
57
+ return value !== null && utils.isValid(value) ? "V\xE6lg dato, valgte dato er ".concat(utils.format(value, 'fullDate')) : 'Vælg dato';
58
+ },
59
+ openTimePickerDialogue: function openTimePickerDialogue(value, utils) {
60
+ return value !== null && utils.isValid(value) ? "V\xE6lg tidspunkt, valgte tidspunkt er ".concat(utils.format(value, 'fullTime')) : 'Vælg tidspunkt';
61
+ },
62
+ // Table labels
63
+ timeTableLabel: 'vælg tidspunkt',
64
+ dateTableLabel: 'vælg dato',
65
+ // Field section placeholders
66
+ fieldYearPlaceholder: function fieldYearPlaceholder(params) {
67
+ return 'Y'.repeat(params.digitAmount);
68
+ },
69
+ fieldMonthPlaceholder: function fieldMonthPlaceholder(params) {
70
+ return params.contentType === 'letter' ? 'MMMM' : 'MM';
71
+ },
72
+ fieldDayPlaceholder: function fieldDayPlaceholder() {
73
+ return 'DD';
74
+ },
75
+ fieldWeekDayPlaceholder: function fieldWeekDayPlaceholder(params) {
76
+ return params.contentType === 'letter' ? 'EEEE' : 'EE';
77
+ },
78
+ fieldHoursPlaceholder: function fieldHoursPlaceholder() {
79
+ return 'hh';
80
+ },
81
+ fieldMinutesPlaceholder: function fieldMinutesPlaceholder() {
82
+ return 'mm';
83
+ },
84
+ fieldSecondsPlaceholder: function fieldSecondsPlaceholder() {
85
+ return 'ss';
86
+ },
87
+ fieldMeridiemPlaceholder: function fieldMeridiemPlaceholder() {
88
+ return 'aa';
89
+ }
90
+ };
91
+ export var daDK = getPickersLocalization(daDKPickers);
@@ -36,11 +36,14 @@ var faIRPickers = {
36
36
  return "".concat(seconds, " \u062B\u0627\u0646\u06CC\u0647 \u0647\u0627");
37
37
  },
38
38
  // Calendar labels
39
- // calendarWeekNumberHeaderLabel: 'Week number',
40
- // calendarWeekNumberHeaderText: '#',
41
- // calendarWeekNumberAriaLabelText: weekNumber => `Week ${weekNumber}`,
42
- // calendarWeekNumberText: weekNumber => `${weekNumber}`,
43
-
39
+ calendarWeekNumberHeaderLabel: 'عدد هفته',
40
+ calendarWeekNumberHeaderText: '#',
41
+ calendarWeekNumberAriaLabelText: function calendarWeekNumberAriaLabelText(weekNumber) {
42
+ return "\u0647\u0641\u062A\u0647 ".concat(weekNumber);
43
+ },
44
+ calendarWeekNumberText: function calendarWeekNumberText(weekNumber) {
45
+ return "".concat(weekNumber);
46
+ },
44
47
  // Open picker labels
45
48
  openDatePickerDialogue: function openDatePickerDialogue(value, utils) {
46
49
  return value !== null && utils.isValid(value) ? "\u062A\u0627\u0631\u06CC\u062E \u0631\u0627 \u0627\u0646\u062A\u062E\u0627\u0628 \u06A9\u0646\u06CC\u062F\u060C \u062A\u0627\u0631\u06CC\u062E \u0627\u0646\u062A\u062E\u0627\u0628 \u0634\u062F\u0647 ".concat(utils.format(value, 'fullDate'), " \u0645\u06CC \u0628\u0627\u0634\u062F") : 'تاریخ را انتخاب کنید';
@@ -50,17 +53,31 @@ var faIRPickers = {
50
53
  },
51
54
  // Table labels
52
55
  timeTableLabel: 'انتخاب تاریخ',
53
- dateTableLabel: 'انتخاب ساعت'
54
-
56
+ dateTableLabel: 'انتخاب ساعت',
55
57
  // Field section placeholders
56
- // fieldYearPlaceholder: params => 'Y'.repeat(params.digitAmount),
57
- // fieldMonthPlaceholder: params => params.contentType === 'letter' ? 'MMMM' : 'MM',
58
- // fieldDayPlaceholder: () => 'DD',
59
- // fieldWeekDayPlaceholder: params => params.contentType === 'letter' ? 'EEEE' : 'EE',
60
- // fieldHoursPlaceholder: () => 'hh',
61
- // fieldMinutesPlaceholder: () => 'mm',
62
- // fieldSecondsPlaceholder: () => 'ss',
63
- // fieldMeridiemPlaceholder: () => 'aa',
58
+ fieldYearPlaceholder: function fieldYearPlaceholder(params) {
59
+ return 'Y'.repeat(params.digitAmount);
60
+ },
61
+ fieldMonthPlaceholder: function fieldMonthPlaceholder(params) {
62
+ return params.contentType === 'letter' ? 'MMMM' : 'MM';
63
+ },
64
+ fieldDayPlaceholder: function fieldDayPlaceholder() {
65
+ return 'DD';
66
+ },
67
+ fieldWeekDayPlaceholder: function fieldWeekDayPlaceholder(params) {
68
+ return params.contentType === 'letter' ? 'EEEE' : 'EE';
69
+ },
70
+ fieldHoursPlaceholder: function fieldHoursPlaceholder() {
71
+ return 'hh';
72
+ },
73
+ fieldMinutesPlaceholder: function fieldMinutesPlaceholder() {
74
+ return 'mm';
75
+ },
76
+ fieldSecondsPlaceholder: function fieldSecondsPlaceholder() {
77
+ return 'ss';
78
+ },
79
+ fieldMeridiemPlaceholder: function fieldMeridiemPlaceholder() {
80
+ return 'aa';
81
+ }
64
82
  };
65
-
66
83
  export var faIR = getPickersLocalization(faIRPickers);