@mui/x-date-pickers 7.18.0 → 7.20.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.
Files changed (165) hide show
  1. package/AdapterDateFnsBase/AdapterDateFnsBase.js +1 -0
  2. package/AdapterMoment/AdapterMoment.js +1 -0
  3. package/CHANGELOG.md +213 -11
  4. package/DateCalendar/DateCalendar.js +1 -1
  5. package/DateCalendar/DateCalendar.types.d.ts +1 -1
  6. package/DateField/DateField.types.d.ts +2 -7
  7. package/DateField/index.d.ts +1 -1
  8. package/DateField/useDateField.d.ts +1 -1
  9. package/DatePicker/DatePicker.js +1 -1
  10. package/DatePicker/DatePicker.types.d.ts +8 -1
  11. package/DatePicker/index.d.ts +1 -1
  12. package/DateTimeField/DateTimeField.types.d.ts +2 -7
  13. package/DateTimeField/index.d.ts +1 -1
  14. package/DateTimeField/useDateTimeField.d.ts +1 -1
  15. package/DateTimePicker/DateTimePicker.js +1 -1
  16. package/DateTimePicker/DateTimePicker.types.d.ts +9 -1
  17. package/DateTimePicker/index.d.ts +1 -1
  18. package/DesktopDatePicker/DesktopDatePicker.js +1 -1
  19. package/DesktopDateTimePicker/DesktopDateTimePicker.js +1 -1
  20. package/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +1 -1
  21. package/DigitalClock/DigitalClock.js +39 -0
  22. package/MobileDatePicker/MobileDatePicker.js +1 -1
  23. package/MobileDateTimePicker/MobileDateTimePicker.js +1 -1
  24. package/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +38 -1
  25. package/PickersCalendarHeader/PickersCalendarHeader.js +1 -1
  26. package/PickersLayout/PickersLayout.d.ts +2 -2
  27. package/PickersLayout/PickersLayout.js +1 -1
  28. package/PickersSectionList/PickersSectionList.d.ts +4 -4
  29. package/PickersTextField/PickersInputBase/PickersInputBase.d.ts +2 -2
  30. package/StaticDatePicker/StaticDatePicker.js +1 -1
  31. package/StaticDateTimePicker/StaticDateTimePicker.js +1 -1
  32. package/TimeClock/Clock.js +9 -1
  33. package/TimeClock/ClockNumber.js +1 -1
  34. package/TimeClock/ClockPointer.js +1 -1
  35. package/TimeField/TimeField.types.d.ts +2 -7
  36. package/TimeField/index.d.ts +1 -1
  37. package/TimeField/useTimeField.d.ts +1 -1
  38. package/TimePicker/TimePicker.types.d.ts +9 -1
  39. package/TimePicker/index.d.ts +1 -1
  40. package/YearCalendar/YearCalendar.js +1 -1
  41. package/hooks/index.d.ts +2 -0
  42. package/hooks/index.js +3 -1
  43. package/hooks/useParsedFormat.d.ts +15 -0
  44. package/hooks/useParsedFormat.js +43 -0
  45. package/hooks/usePickersContext.d.ts +4 -0
  46. package/hooks/usePickersContext.js +15 -0
  47. package/index.js +1 -1
  48. package/internals/components/PickerViewRoot/PickerViewRoot.d.ts +1 -1
  49. package/internals/components/PickersProvider.d.ts +34 -0
  50. package/internals/components/PickersProvider.js +26 -0
  51. package/internals/components/PickersToolbarButton.js +1 -1
  52. package/internals/components/PickersToolbarText.js +1 -1
  53. package/internals/hooks/useDesktopPicker/useDesktopPicker.js +7 -4
  54. package/internals/hooks/useField/buildSectionsFromFormat.d.ts +1 -2
  55. package/internals/hooks/useField/buildSectionsFromFormat.js +4 -5
  56. package/internals/hooks/useField/useField.utils.d.ts +3 -3
  57. package/internals/hooks/useField/useField.utils.js +13 -13
  58. package/internals/hooks/useField/useFieldCharacterEditing.js +2 -2
  59. package/internals/hooks/useField/useFieldState.js +3 -5
  60. package/internals/hooks/useMobilePicker/useMobilePicker.js +7 -4
  61. package/internals/hooks/usePicker/usePicker.js +3 -1
  62. package/internals/hooks/usePicker/usePickerValue.js +7 -2
  63. package/internals/hooks/usePicker/usePickerValue.types.d.ts +2 -0
  64. package/internals/index.d.ts +1 -0
  65. package/internals/index.js +1 -0
  66. package/internals/utils/utils.d.ts +7 -0
  67. package/internals/utils/utils.js +11 -0
  68. package/locales/bgBG.d.ts +80 -0
  69. package/locales/bgBG.js +73 -0
  70. package/locales/csCZ.js +16 -20
  71. package/locales/hrHR.d.ts +80 -0
  72. package/locales/hrHR.js +90 -0
  73. package/locales/index.d.ts +3 -0
  74. package/locales/index.js +3 -0
  75. package/locales/ptBR.js +3 -4
  76. package/locales/ptPT.d.ts +80 -0
  77. package/locales/ptPT.js +73 -0
  78. package/models/pickers.d.ts +1 -1
  79. package/modern/AdapterDateFnsBase/AdapterDateFnsBase.js +1 -0
  80. package/modern/AdapterMoment/AdapterMoment.js +1 -0
  81. package/modern/DateCalendar/DateCalendar.js +1 -1
  82. package/modern/DatePicker/DatePicker.js +1 -1
  83. package/modern/DateTimePicker/DateTimePicker.js +1 -1
  84. package/modern/DesktopDatePicker/DesktopDatePicker.js +1 -1
  85. package/modern/DesktopDateTimePicker/DesktopDateTimePicker.js +1 -1
  86. package/modern/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +1 -1
  87. package/modern/DigitalClock/DigitalClock.js +39 -0
  88. package/modern/MobileDatePicker/MobileDatePicker.js +1 -1
  89. package/modern/MobileDateTimePicker/MobileDateTimePicker.js +1 -1
  90. package/modern/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +38 -1
  91. package/modern/PickersCalendarHeader/PickersCalendarHeader.js +1 -1
  92. package/modern/PickersLayout/PickersLayout.js +1 -1
  93. package/modern/StaticDatePicker/StaticDatePicker.js +1 -1
  94. package/modern/StaticDateTimePicker/StaticDateTimePicker.js +1 -1
  95. package/modern/TimeClock/Clock.js +9 -1
  96. package/modern/TimeClock/ClockNumber.js +1 -1
  97. package/modern/TimeClock/ClockPointer.js +1 -1
  98. package/modern/YearCalendar/YearCalendar.js +1 -1
  99. package/modern/hooks/index.js +3 -1
  100. package/modern/hooks/useParsedFormat.js +43 -0
  101. package/modern/hooks/usePickersContext.js +15 -0
  102. package/modern/index.js +1 -1
  103. package/modern/internals/components/PickersProvider.js +26 -0
  104. package/modern/internals/components/PickersToolbarButton.js +1 -1
  105. package/modern/internals/components/PickersToolbarText.js +1 -1
  106. package/modern/internals/hooks/useDesktopPicker/useDesktopPicker.js +7 -4
  107. package/modern/internals/hooks/useField/buildSectionsFromFormat.js +4 -5
  108. package/modern/internals/hooks/useField/useField.utils.js +13 -13
  109. package/modern/internals/hooks/useField/useFieldCharacterEditing.js +2 -2
  110. package/modern/internals/hooks/useField/useFieldState.js +3 -5
  111. package/modern/internals/hooks/useMobilePicker/useMobilePicker.js +7 -4
  112. package/modern/internals/hooks/usePicker/usePicker.js +3 -1
  113. package/modern/internals/hooks/usePicker/usePickerValue.js +7 -2
  114. package/modern/internals/index.js +1 -0
  115. package/modern/internals/utils/utils.js +11 -0
  116. package/modern/locales/bgBG.js +73 -0
  117. package/modern/locales/csCZ.js +16 -20
  118. package/modern/locales/hrHR.js +90 -0
  119. package/modern/locales/index.js +3 -0
  120. package/modern/locales/ptBR.js +3 -4
  121. package/modern/locales/ptPT.js +73 -0
  122. package/node/AdapterDateFnsBase/AdapterDateFnsBase.js +1 -0
  123. package/node/AdapterMoment/AdapterMoment.js +1 -0
  124. package/node/DateCalendar/DateCalendar.js +1 -1
  125. package/node/DatePicker/DatePicker.js +1 -1
  126. package/node/DateTimePicker/DateTimePicker.js +1 -1
  127. package/node/DesktopDatePicker/DesktopDatePicker.js +1 -1
  128. package/node/DesktopDateTimePicker/DesktopDateTimePicker.js +1 -1
  129. package/node/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +1 -1
  130. package/node/DigitalClock/DigitalClock.js +39 -0
  131. package/node/MobileDatePicker/MobileDatePicker.js +1 -1
  132. package/node/MobileDateTimePicker/MobileDateTimePicker.js +1 -1
  133. package/node/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +38 -1
  134. package/node/PickersCalendarHeader/PickersCalendarHeader.js +1 -1
  135. package/node/PickersLayout/PickersLayout.js +1 -1
  136. package/node/StaticDatePicker/StaticDatePicker.js +1 -1
  137. package/node/StaticDateTimePicker/StaticDateTimePicker.js +1 -1
  138. package/node/TimeClock/Clock.js +9 -1
  139. package/node/TimeClock/ClockNumber.js +1 -1
  140. package/node/TimeClock/ClockPointer.js +1 -1
  141. package/node/YearCalendar/YearCalendar.js +1 -1
  142. package/node/hooks/index.js +15 -1
  143. package/node/hooks/useParsedFormat.js +50 -0
  144. package/node/hooks/usePickersContext.js +21 -0
  145. package/node/index.js +1 -1
  146. package/node/internals/components/PickersProvider.js +34 -0
  147. package/node/internals/components/PickersToolbarButton.js +1 -1
  148. package/node/internals/components/PickersToolbarText.js +1 -1
  149. package/node/internals/hooks/useDesktopPicker/useDesktopPicker.js +5 -3
  150. package/node/internals/hooks/useField/buildSectionsFromFormat.js +4 -5
  151. package/node/internals/hooks/useField/useField.utils.js +13 -13
  152. package/node/internals/hooks/useField/useFieldCharacterEditing.js +2 -2
  153. package/node/internals/hooks/useField/useFieldState.js +3 -5
  154. package/node/internals/hooks/useMobilePicker/useMobilePicker.js +5 -3
  155. package/node/internals/hooks/usePicker/usePicker.js +3 -1
  156. package/node/internals/hooks/usePicker/usePickerValue.js +7 -1
  157. package/node/internals/index.js +7 -0
  158. package/node/internals/utils/utils.js +13 -1
  159. package/node/locales/bgBG.js +79 -0
  160. package/node/locales/csCZ.js +16 -20
  161. package/node/locales/hrHR.js +96 -0
  162. package/node/locales/index.js +33 -0
  163. package/node/locales/ptBR.js +3 -4
  164. package/node/locales/ptPT.js +79 -0
  165. package/package.json +4 -4
@@ -0,0 +1,90 @@
1
+ import { getPickersLocalization } from "./utils/getPickersLocalization.js";
2
+ // maps TimeView to its translation
3
+ const timeViews = {
4
+ hours: 'sati',
5
+ minutes: 'minute',
6
+ seconds: 'sekunde',
7
+ meridiem: 'meridiem'
8
+ };
9
+ const hrHRPickers = {
10
+ // Calendar navigation
11
+ previousMonth: 'Prethodni mjesec',
12
+ nextMonth: 'Naredni mjesec',
13
+ // View navigation
14
+ openPreviousView: 'Otvori prethodni prikaz',
15
+ openNextView: 'Otvori naredni prikaz',
16
+ calendarViewSwitchingButtonAriaLabel: view => view === 'year' ? 'Otvoren je godišnji prikaz, promijeni na kalendarski prikaz' : 'Otvoren je kalendarski prikaz, promijeni na godišnji prikaz',
17
+ // DateRange labels
18
+ start: 'Početak',
19
+ end: 'Kraj',
20
+ startDate: 'Početni datum',
21
+ startTime: 'Početno vrijeme',
22
+ endDate: 'Krajnji datum',
23
+ endTime: 'Krajnje vrijeme',
24
+ // Action bar
25
+ cancelButtonLabel: 'Otkaži',
26
+ clearButtonLabel: 'Izbriši',
27
+ okButtonLabel: 'U redu',
28
+ todayButtonLabel: 'Danas',
29
+ // Toolbar titles
30
+ datePickerToolbarTitle: 'Odaberi datum',
31
+ dateTimePickerToolbarTitle: 'Odaberi datum i vrijeme',
32
+ timePickerToolbarTitle: 'Odaberi vrijeme',
33
+ dateRangePickerToolbarTitle: 'Odaberi vremenski okvir',
34
+ // Clock labels
35
+ clockLabelText: (view, time, utils, formattedTime) => `Odaberi ${timeViews[view] ?? view}. ${!formattedTime && (time === null || !utils.isValid(time)) ? 'Vrijeme nije odabrano' : `Odabrano vrijeme je ${formattedTime ?? utils.format(time, 'fullTime')}`}`,
36
+ hoursClockNumberText: hours => {
37
+ let suffix = 'sati';
38
+ if (Number(hours) === 1) {
39
+ suffix = 'sat';
40
+ } else if (Number(hours) < 5) {
41
+ suffix = 'sata';
42
+ }
43
+ return `${hours} ${suffix}`;
44
+ },
45
+ minutesClockNumberText: minutes => `${minutes} ${Number(minutes) > 1 && Number(minutes) < 5 ? 'minute' : 'minuta'}`,
46
+ secondsClockNumberText: seconds => {
47
+ let suffix = 'sekundi';
48
+ if (Number(seconds) === 1) {
49
+ suffix = 'sekunda';
50
+ } else if (Number(seconds) < 5) {
51
+ suffix = 'sekunde';
52
+ }
53
+ return `${seconds} ${suffix}`;
54
+ },
55
+ // Digital clock labels
56
+ selectViewText: view => `Odaberi ${timeViews[view]}`,
57
+ // Calendar labels
58
+ calendarWeekNumberHeaderLabel: 'Broj tjedna',
59
+ calendarWeekNumberHeaderText: '#',
60
+ calendarWeekNumberAriaLabelText: weekNumber => `Tjedan ${weekNumber}`,
61
+ calendarWeekNumberText: weekNumber => `${weekNumber}`,
62
+ // Open picker labels
63
+ openDatePickerDialogue: (value, utils, formattedDate) => formattedDate || value !== null && utils.isValid(value) ? `Odaberi datum, odabrani datum je ${formattedDate ?? utils.format(value, 'fullDate')}` : 'Odaberi datum',
64
+ openTimePickerDialogue: (value, utils, formattedTime) => formattedTime || value !== null && utils.isValid(value) ? `Odaberi vrijeme, odabrano vrijeme je ${formattedTime ?? utils.format(value, 'fullTime')}` : 'Odaberi vrijeme',
65
+ fieldClearLabel: 'Izbriši',
66
+ // Table labels
67
+ timeTableLabel: 'Odaberi vrijeme',
68
+ dateTableLabel: 'Odaberi datum',
69
+ // Field section placeholders
70
+ fieldYearPlaceholder: params => 'G'.repeat(params.digitAmount),
71
+ fieldMonthPlaceholder: params => params.contentType === 'letter' ? 'MMMM' : 'MM',
72
+ fieldDayPlaceholder: () => 'DD',
73
+ fieldWeekDayPlaceholder: params => params.contentType === 'letter' ? 'EEEE' : 'EE',
74
+ fieldHoursPlaceholder: () => 'hh',
75
+ fieldMinutesPlaceholder: () => 'mm',
76
+ fieldSecondsPlaceholder: () => 'ss',
77
+ fieldMeridiemPlaceholder: () => 'aa',
78
+ // View names
79
+ year: 'Godina',
80
+ month: 'Mjesec',
81
+ day: 'Dan',
82
+ weekDay: 'Dan u tjednu',
83
+ hours: 'Sati',
84
+ minutes: 'Minute',
85
+ seconds: 'Sekunde',
86
+ meridiem: 'Meridiem',
87
+ // Common
88
+ empty: 'Isprazni'
89
+ };
90
+ export const hrHR = getPickersLocalization(hrHRPickers);
@@ -1,4 +1,5 @@
1
1
  export * from "./beBY.js";
2
+ export * from "./bgBG.js";
2
3
  export * from "./caES.js";
3
4
  export * from "./csCZ.js";
4
5
  export * from "./daDK.js";
@@ -11,6 +12,7 @@ export * from "./faIR.js";
11
12
  export * from "./fiFI.js";
12
13
  export * from "./frFR.js";
13
14
  export * from "./heIL.js";
15
+ export * from "./hrHR.js";
14
16
  export * from "./huHU.js";
15
17
  export * from "./isIS.js";
16
18
  export * from "./itIT.js";
@@ -23,6 +25,7 @@ export * from "./nlNL.js";
23
25
  export * from "./nnNO.js";
24
26
  export * from "./plPL.js";
25
27
  export * from "./ptBR.js";
28
+ export * from "./ptPT.js";
26
29
  export * from "./roRO.js";
27
30
  export * from "./ruRU.js";
28
31
  export * from "./skSK.js";
@@ -10,8 +10,8 @@ const ptBRPickers = {
10
10
  previousMonth: 'Mês anterior',
11
11
  nextMonth: 'Próximo mês',
12
12
  // View navigation
13
- openPreviousView: 'Abrir próxima seleção',
14
- openNextView: 'Abrir seleção anterior',
13
+ openPreviousView: 'Abrir seleção anterior',
14
+ openNextView: 'Abrir próxima seleção',
15
15
  calendarViewSwitchingButtonAriaLabel: view => view === 'year' ? 'Seleção de ano está aberta, alternando para seleção de calendário' : 'Seleção de calendários está aberta, alternando para seleção de ano',
16
16
  // DateRange labels
17
17
  start: 'Início',
@@ -45,8 +45,7 @@ const ptBRPickers = {
45
45
  // Open picker labels
46
46
  openDatePickerDialogue: (value, utils, formattedDate) => formattedDate || value !== null && utils.isValid(value) ? `Escolha uma data, data selecionada ${formattedDate ?? utils.format(value, 'fullDate')}` : 'Escolha uma data',
47
47
  openTimePickerDialogue: (value, utils, formattedTime) => formattedTime || value !== null && utils.isValid(value) ? `Escolha uma hora, hora selecionada ${formattedTime ?? utils.format(value, 'fullTime')}` : 'Escolha uma hora',
48
- // fieldClearLabel: 'Clear',
49
-
48
+ fieldClearLabel: 'Limpar valor',
50
49
  // Table labels
51
50
  timeTableLabel: 'escolha uma hora',
52
51
  dateTableLabel: 'escolha uma data',
@@ -0,0 +1,73 @@
1
+ import { getPickersLocalization } from "./utils/getPickersLocalization.js";
2
+ const timeViews = {
3
+ hours: 'horas',
4
+ minutes: 'minutos',
5
+ seconds: 'segundos',
6
+ meridiem: 'meridiano'
7
+ };
8
+ const ptPTPickers = {
9
+ // Calendar navigation
10
+ previousMonth: 'Mês anterior',
11
+ nextMonth: 'Próximo mês',
12
+ // View navigation
13
+ openPreviousView: 'Abrir seleção anterior',
14
+ openNextView: 'Abrir próxima seleção',
15
+ calendarViewSwitchingButtonAriaLabel: view => view === 'year' ? 'A seleção do ano está aberta, altere para a seleção do calendário' : 'A seleção do calendários está aberta, altere para a seleção do ano',
16
+ // DateRange labels
17
+ start: 'Início',
18
+ end: 'Fim',
19
+ startDate: 'Data de início',
20
+ startTime: 'Hora de início',
21
+ endDate: 'Data de fim',
22
+ endTime: 'Hora de fim',
23
+ // Action bar
24
+ cancelButtonLabel: 'Cancelar',
25
+ clearButtonLabel: 'Limpar',
26
+ okButtonLabel: 'OK',
27
+ todayButtonLabel: 'Hoje',
28
+ // Toolbar titles
29
+ datePickerToolbarTitle: 'Selecione a data',
30
+ dateTimePickerToolbarTitle: 'Selecione a data e a hora',
31
+ timePickerToolbarTitle: 'Selecione a hora',
32
+ dateRangePickerToolbarTitle: 'Selecione o intervalo de datas',
33
+ // Clock labels
34
+ clockLabelText: (view, time, utils, formattedTime) => `Selecione ${timeViews[view]}. ${!formattedTime && (time === null || !utils.isValid(time)) ? 'Hora não selecionada' : `Selecionado a hora ${formattedTime ?? utils.format(time, 'fullTime')}`}`,
35
+ hoursClockNumberText: hours => `${hours} horas`,
36
+ minutesClockNumberText: minutes => `${minutes} minutos`,
37
+ secondsClockNumberText: seconds => `${seconds} segundos`,
38
+ // Digital clock labels
39
+ selectViewText: view => `Selecione ${timeViews[view]}`,
40
+ // Calendar labels
41
+ calendarWeekNumberHeaderLabel: 'Número da semana',
42
+ calendarWeekNumberHeaderText: 'N.º',
43
+ calendarWeekNumberAriaLabelText: weekNumber => `Semana ${weekNumber}`,
44
+ calendarWeekNumberText: weekNumber => `${weekNumber}`,
45
+ // Open picker labels
46
+ openDatePickerDialogue: (value, utils, formattedDate) => formattedDate || value !== null && utils.isValid(value) ? `Escolha uma data, a data selecionada é ${formattedDate ?? utils.format(value, 'fullDate')}` : 'Escolha uma data',
47
+ openTimePickerDialogue: (value, utils, formattedTime) => formattedTime || value !== null && utils.isValid(value) ? `Escolha uma hora, a hora selecionada é ${formattedTime ?? utils.format(value, 'fullTime')}` : 'Escolha uma hora',
48
+ fieldClearLabel: 'Limpar valor',
49
+ // Table labels
50
+ timeTableLabel: 'escolha uma hora',
51
+ dateTableLabel: 'escolha uma data',
52
+ // Field section placeholders
53
+ fieldYearPlaceholder: params => 'A'.repeat(params.digitAmount),
54
+ fieldMonthPlaceholder: params => params.contentType === 'letter' ? 'MMMM' : 'MM',
55
+ fieldDayPlaceholder: () => 'DD',
56
+ fieldWeekDayPlaceholder: params => params.contentType === 'letter' ? 'SSSS' : 'SS',
57
+ fieldHoursPlaceholder: () => 'hh',
58
+ fieldMinutesPlaceholder: () => 'mm',
59
+ fieldSecondsPlaceholder: () => 'ss',
60
+ fieldMeridiemPlaceholder: () => 'aa',
61
+ // View names
62
+ year: 'Ano',
63
+ month: 'Mês',
64
+ day: 'Dia',
65
+ weekDay: 'Dia da Semana',
66
+ hours: 'Horas',
67
+ minutes: 'Minutos',
68
+ seconds: 'Segundos',
69
+ meridiem: 'Meridiano',
70
+ // Common
71
+ empty: 'Vazio'
72
+ };
73
+ export const ptPT = getPickersLocalization(ptPTPickers);
@@ -97,6 +97,7 @@ const formatTokenMap = {
97
97
  sectionType: 'weekDay',
98
98
  contentType: 'letter'
99
99
  },
100
+ // eslint-disable-next-line id-denylist
100
101
  e: {
101
102
  sectionType: 'weekDay',
102
103
  contentType: 'digit',
@@ -51,6 +51,7 @@ const formatTokenMap = {
51
51
  contentType: 'digit',
52
52
  maxLength: 1
53
53
  },
54
+ // eslint-disable-next-line id-denylist
54
55
  e: {
55
56
  sectionType: 'weekDay',
56
57
  contentType: 'digit',
@@ -494,7 +494,7 @@ process.env.NODE_ENV !== "production" ? DateCalendar.propTypes = {
494
494
  /**
495
495
  * Component displaying when passed `loading` true.
496
496
  * @returns {React.ReactNode} The node to render when loading.
497
- * @default () => <span data-mui-test="loading-progress">...</span>
497
+ * @default () => <span>...</span>
498
498
  */
499
499
  renderLoading: _propTypes.default.func,
500
500
  /**
@@ -263,7 +263,7 @@ process.env.NODE_ENV !== "production" ? DatePicker.propTypes = {
263
263
  /**
264
264
  * Component displaying when passed `loading` true.
265
265
  * @returns {React.ReactNode} The node to render when loading.
266
- * @default () => <span data-mui-test="loading-progress">...</span>
266
+ * @default () => <span>...</span>
267
267
  */
268
268
  renderLoading: _propTypes.default.func,
269
269
  /**
@@ -301,7 +301,7 @@ process.env.NODE_ENV !== "production" ? DateTimePicker.propTypes = {
301
301
  /**
302
302
  * Component displaying when passed `loading` true.
303
303
  * @returns {React.ReactNode} The node to render when loading.
304
- * @default () => <span data-mui-test="loading-progress">...</span>
304
+ * @default () => <span>...</span>
305
305
  */
306
306
  renderLoading: _propTypes.default.func,
307
307
  /**
@@ -284,7 +284,7 @@ DesktopDatePicker.propTypes = {
284
284
  /**
285
285
  * Component displaying when passed `loading` true.
286
286
  * @returns {React.ReactNode} The node to render when loading.
287
- * @default () => <span data-mui-test="loading-progress">...</span>
287
+ * @default () => <span>...</span>
288
288
  */
289
289
  renderLoading: _propTypes.default.func,
290
290
  /**
@@ -409,7 +409,7 @@ DesktopDateTimePicker.propTypes = {
409
409
  /**
410
410
  * Component displaying when passed `loading` true.
411
411
  * @returns {React.ReactNode} The node to render when loading.
412
- * @default () => <span data-mui-test="loading-progress">...</span>
412
+ * @default () => <span>...</span>
413
413
  */
414
414
  renderLoading: _propTypes.default.func,
415
415
  /**
@@ -38,7 +38,7 @@ const DesktopDateTimePickerLayout = exports.DesktopDateTimePickerLayout = /*#__P
38
38
  });
39
39
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_PickersLayout.PickersLayoutRoot, {
40
40
  ref: ref,
41
- className: (0, _clsx.default)(className, _PickersLayout.pickersLayoutClasses.root, classes?.root),
41
+ className: (0, _clsx.default)(_PickersLayout.pickersLayoutClasses.root, classes?.root, className),
42
42
  sx: [{
43
43
  [`& .${_PickersLayout.pickersLayoutClasses.tabs}`]: {
44
44
  gridRow: 4,
@@ -29,6 +29,7 @@ var _dimensions = require("../internals/constants/dimensions");
29
29
  var _useValueWithTimezone = require("../internals/hooks/useValueWithTimezone");
30
30
  var _valueManagers = require("../internals/utils/valueManagers");
31
31
  var _useClockReferenceDate = require("../internals/hooks/useClockReferenceDate");
32
+ var _utils = require("../internals/utils/utils");
32
33
  var _jsxRuntime = require("react/jsx-runtime");
33
34
  const _excluded = ["ampm", "timeStep", "autoFocus", "slots", "slotProps", "value", "defaultValue", "referenceDate", "disableIgnoringDatePartForTimeValidation", "maxTime", "minTime", "disableFuture", "disablePast", "minutesStep", "shouldDisableTime", "onChange", "view", "openTo", "onViewChange", "focusedView", "onFocusedViewChange", "className", "disabled", "readOnly", "views", "skipDisabled", "timezone"];
34
35
  const useUtilityClasses = ownerState => {
@@ -111,6 +112,7 @@ const DigitalClock = exports.DigitalClock = /*#__PURE__*/React.forwardRef(functi
111
112
  const utils = (0, _useUtils.useUtils)();
112
113
  const containerRef = React.useRef(null);
113
114
  const handleRef = (0, _useForkRef.default)(ref, containerRef);
115
+ const listRef = React.useRef(null);
114
116
  const props = (0, _styles.useThemeProps)({
115
117
  props: inProps,
116
118
  name: 'MuiDigitalClock'
@@ -243,15 +245,52 @@ const DigitalClock = exports.DigitalClock = /*#__PURE__*/React.forwardRef(functi
243
245
  }, (_, index) => utils.addMinutes(startOfDay, timeStep * (index + 1)))];
244
246
  }, [valueOrReferenceDate, timeStep, utils]);
245
247
  const focusedOptionIndex = timeOptions.findIndex(option => utils.isEqual(option, valueOrReferenceDate));
248
+ const handleKeyDown = event => {
249
+ switch (event.key) {
250
+ case 'PageUp':
251
+ {
252
+ if (!listRef.current) {
253
+ return;
254
+ }
255
+ const newIndex = (0, _utils.getFocusedListItemIndex)(listRef.current) - 5;
256
+ const children = listRef.current?.children;
257
+ const newFocusedIndex = Math.max(0, newIndex);
258
+ const childToFocus = children[newFocusedIndex];
259
+ if (childToFocus) {
260
+ childToFocus.focus();
261
+ }
262
+ event.preventDefault();
263
+ break;
264
+ }
265
+ case 'PageDown':
266
+ {
267
+ if (!listRef.current) {
268
+ return;
269
+ }
270
+ const newIndex = (0, _utils.getFocusedListItemIndex)(listRef.current) + 5;
271
+ const children = listRef.current?.children;
272
+ const newFocusedIndex = Math.min(children.length - 1, newIndex);
273
+ const childToFocus = children[newFocusedIndex];
274
+ if (childToFocus) {
275
+ childToFocus.focus();
276
+ }
277
+ event.preventDefault();
278
+ break;
279
+ }
280
+ default:
281
+ }
282
+ };
246
283
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(DigitalClockRoot, (0, _extends2.default)({
247
284
  ref: handleRef,
248
285
  className: (0, _clsx.default)(classes.root, className),
249
286
  ownerState: ownerState
250
287
  }, other, {
251
288
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(DigitalClockList, {
289
+ ref: listRef,
252
290
  role: "listbox",
253
291
  "aria-label": translations.timePickerToolbarTitle,
254
292
  className: classes.list,
293
+ onKeyDown: handleKeyDown,
255
294
  children: timeOptions.map((option, index) => {
256
295
  if (skipDisabled && isTimeDisabled(option)) {
257
296
  return null;
@@ -281,7 +281,7 @@ MobileDatePicker.propTypes = {
281
281
  /**
282
282
  * Component displaying when passed `loading` true.
283
283
  * @returns {React.ReactNode} The node to render when loading.
284
- * @default () => <span data-mui-test="loading-progress">...</span>
284
+ * @default () => <span>...</span>
285
285
  */
286
286
  renderLoading: _propTypes.default.func,
287
287
  /**
@@ -329,7 +329,7 @@ MobileDateTimePicker.propTypes = {
329
329
  /**
330
330
  * Component displaying when passed `loading` true.
331
331
  * @returns {React.ReactNode} The node to render when loading.
332
- * @default () => <span data-mui-test="loading-progress">...</span>
332
+ * @default () => <span>...</span>
333
333
  */
334
334
  renderLoading: _propTypes.default.func,
335
335
  /**
@@ -17,6 +17,7 @@ var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem"));
17
17
  var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
18
18
  var _multiSectionDigitalClockSectionClasses = require("./multiSectionDigitalClockSectionClasses");
19
19
  var _dimensions = require("../internals/constants/dimensions");
20
+ var _utils = require("../internals/utils/utils");
20
21
  var _jsxRuntime = require("react/jsx-runtime");
21
22
  const _excluded = ["autoFocus", "onChange", "className", "disabled", "readOnly", "items", "active", "slots", "slotProps", "skipDisabled"];
22
23
  const useUtilityClasses = ownerState => {
@@ -146,12 +147,48 @@ const MultiSectionDigitalClockSection = exports.MultiSectionDigitalClockSection
146
147
  containerRef.current.scrollTop = offsetTop - 4;
147
148
  });
148
149
  const focusedOptionIndex = items.findIndex(item => item.isFocused(item.value));
150
+ const handleKeyDown = event => {
151
+ switch (event.key) {
152
+ case 'PageUp':
153
+ {
154
+ if (!containerRef.current) {
155
+ return;
156
+ }
157
+ const newIndex = (0, _utils.getFocusedListItemIndex)(containerRef.current) - 5;
158
+ const children = containerRef.current?.children;
159
+ const newFocusedIndex = Math.max(0, newIndex);
160
+ const childToFocus = children[newFocusedIndex];
161
+ if (childToFocus) {
162
+ childToFocus.focus();
163
+ }
164
+ event.preventDefault();
165
+ break;
166
+ }
167
+ case 'PageDown':
168
+ {
169
+ if (!containerRef.current) {
170
+ return;
171
+ }
172
+ const newIndex = (0, _utils.getFocusedListItemIndex)(containerRef.current) + 5;
173
+ const children = containerRef.current?.children;
174
+ const newFocusedIndex = Math.min(children.length - 1, newIndex);
175
+ const childToFocus = children[newFocusedIndex];
176
+ if (childToFocus) {
177
+ childToFocus.focus();
178
+ }
179
+ event.preventDefault();
180
+ break;
181
+ }
182
+ default:
183
+ }
184
+ };
149
185
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(MultiSectionDigitalClockSectionRoot, (0, _extends2.default)({
150
186
  ref: handleRef,
151
187
  className: (0, _clsx.default)(classes.root, className),
152
188
  ownerState: ownerState,
153
189
  autoFocusItem: autoFocus && active,
154
- role: "listbox"
190
+ role: "listbox",
191
+ onKeyDown: handleKeyDown
155
192
  }, other, {
156
193
  children: items.map((option, index) => {
157
194
  const isItemDisabled = option.isDisabled?.(option.value);
@@ -197,7 +197,7 @@ const PickersCalendarHeader = exports.PickersCalendarHeader = /*#__PURE__*/React
197
197
  const label = utils.formatByString(month, format);
198
198
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(PickersCalendarHeaderRoot, (0, _extends2.default)({}, other, {
199
199
  ownerState: ownerState,
200
- className: (0, _clsx.default)(className, classes.root),
200
+ className: (0, _clsx.default)(classes.root, className),
201
201
  ref: ref,
202
202
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(PickersCalendarHeaderLabelContainer, {
203
203
  role: "presentation",
@@ -129,7 +129,7 @@ const PickersLayout = exports.PickersLayout = /*#__PURE__*/React.forwardRef(func
129
129
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(PickersLayoutRoot, {
130
130
  ref: ref,
131
131
  sx: sx,
132
- className: (0, _clsx.default)(className, classes.root),
132
+ className: (0, _clsx.default)(classes.root, className),
133
133
  ownerState: props,
134
134
  children: [isLandscape ? shortcuts : toolbar, isLandscape ? toolbar : shortcuts, /*#__PURE__*/(0, _jsxRuntime.jsx)(PickersLayoutContentWrapper, {
135
135
  className: classes.contentWrapper,
@@ -215,7 +215,7 @@ StaticDatePicker.propTypes = {
215
215
  /**
216
216
  * Component displaying when passed `loading` true.
217
217
  * @returns {React.ReactNode} The node to render when loading.
218
- * @default () => <span data-mui-test="loading-progress">...</span>
218
+ * @default () => <span>...</span>
219
219
  */
220
220
  renderLoading: _propTypes.default.func,
221
221
  /**
@@ -263,7 +263,7 @@ StaticDateTimePicker.propTypes = {
263
263
  /**
264
264
  * Component displaying when passed `loading` true.
265
265
  * @returns {React.ReactNode} The node to render when loading.
266
- * @default () => <span data-mui-test="loading-progress">...</span>
266
+ * @default () => <span>...</span>
267
267
  */
268
268
  renderLoading: _propTypes.default.func,
269
269
  /**
@@ -282,6 +282,14 @@ function Clock(inProps) {
282
282
  handleValueChange(viewValue - keyboardControlStep, 'partial');
283
283
  event.preventDefault();
284
284
  break;
285
+ case 'PageUp':
286
+ handleValueChange(viewValue + 5, 'partial');
287
+ event.preventDefault();
288
+ break;
289
+ case 'PageDown':
290
+ handleValueChange(viewValue - 5, 'partial');
291
+ event.preventDefault();
292
+ break;
285
293
  case 'Enter':
286
294
  case ' ':
287
295
  handleValueChange(viewValue, 'finish');
@@ -292,7 +300,7 @@ function Clock(inProps) {
292
300
  }
293
301
  };
294
302
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(ClockRoot, {
295
- className: (0, _clsx.default)(className, classes.root),
303
+ className: (0, _clsx.default)(classes.root, className),
296
304
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(ClockClock, {
297
305
  className: classes.clock,
298
306
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(ClockSquareMask, {
@@ -92,7 +92,7 @@ function ClockNumber(inProps) {
92
92
  const x = Math.round(Math.cos(angle) * length);
93
93
  const y = Math.round(Math.sin(angle) * length);
94
94
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(ClockNumberRoot, (0, _extends2.default)({
95
- className: (0, _clsx.default)(className, classes.root),
95
+ className: (0, _clsx.default)(classes.root, className),
96
96
  "aria-disabled": disabled ? true : undefined,
97
97
  "aria-selected": selected ? true : undefined,
98
98
  role: "option",
@@ -110,7 +110,7 @@ function ClockPointer(inProps) {
110
110
  };
111
111
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(ClockPointerRoot, (0, _extends2.default)({
112
112
  style: getAngleStyle(),
113
- className: (0, _clsx.default)(className, classes.root),
113
+ className: (0, _clsx.default)(classes.root, className),
114
114
  ownerState: ownerState
115
115
  }, other, {
116
116
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ClockPointerThumb, {
@@ -186,7 +186,7 @@ const YearCalendar = exports.YearCalendar = /*#__PURE__*/React.forwardRef(functi
186
186
  setFocusedYear(prevFocusedYear => selectedYear !== null && prevFocusedYear !== selectedYear ? selectedYear : prevFocusedYear);
187
187
  }, [selectedYear]);
188
188
  const verticalDirection = yearsOrder !== 'desc' ? yearsPerRow * 1 : yearsPerRow * -1;
189
- const horizontalDirection = isRtl || yearsOrder === 'desc' ? -1 : 1;
189
+ const horizontalDirection = isRtl && yearsOrder === 'asc' || !isRtl && yearsOrder === 'desc' ? -1 : 1;
190
190
  const handleKeyDown = (0, _utils.unstable_useEventCallback)((event, year) => {
191
191
  switch (event.key) {
192
192
  case 'ArrowUp':
@@ -9,6 +9,18 @@ Object.defineProperty(exports, "useClearableField", {
9
9
  return _useClearableField.useClearableField;
10
10
  }
11
11
  });
12
+ Object.defineProperty(exports, "useParsedFormat", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _useParsedFormat.useParsedFormat;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "usePickersContext", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _usePickersContext.usePickersContext;
22
+ }
23
+ });
12
24
  Object.defineProperty(exports, "usePickersTranslations", {
13
25
  enumerable: true,
14
26
  get: function () {
@@ -23,4 +35,6 @@ Object.defineProperty(exports, "useSplitFieldProps", {
23
35
  });
24
36
  var _useClearableField = require("./useClearableField");
25
37
  var _usePickersTranslations = require("./usePickersTranslations");
26
- var _useSplitFieldProps = require("./useSplitFieldProps");
38
+ var _useSplitFieldProps = require("./useSplitFieldProps");
39
+ var _useParsedFormat = require("./useParsedFormat");
40
+ var _usePickersContext = require("./usePickersContext");
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ 'use client';
3
+
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.useParsedFormat = void 0;
9
+ var React = _interopRequireWildcard(require("react"));
10
+ var _RtlProvider = require("@mui/system/RtlProvider");
11
+ var _useUtils = require("../internals/hooks/useUtils");
12
+ var _buildSectionsFromFormat = require("../internals/hooks/useField/buildSectionsFromFormat");
13
+ var _useField = require("../internals/hooks/useField/useField.utils");
14
+ var _usePickersTranslations = require("./usePickersTranslations");
15
+ /**
16
+ * Returns the parsed format to be rendered in the field when there is no value or in other parts of the Picker.
17
+ * This format is localized (e.g: `AAAA` for the year with the French locale) and cannot be parsed by your date library.
18
+ * @param {object} The parameters needed to build the placeholder.
19
+ * @param {string} params.format Format of the date to use.
20
+ * @param {'dense' | 'spacious'} params.formatDensity Density of the format (setting `formatDensity` to `"spacious"` will add a space before and after each `/`, `-` and `.` character).
21
+ * @param {boolean} params.shouldRespectLeadingZeros If `true`, the format will respect the leading zeroes, if `false`, the format will always add leading zeroes.
22
+ * @returns
23
+ */
24
+ const useParsedFormat = parameters => {
25
+ const {
26
+ format,
27
+ formatDensity = 'dense',
28
+ shouldRespectLeadingZeros = false
29
+ } = parameters;
30
+ const utils = (0, _useUtils.useUtils)();
31
+ const isRtl = (0, _RtlProvider.useRtl)();
32
+ const translations = (0, _usePickersTranslations.usePickersTranslations)();
33
+ const localizedDigits = React.useMemo(() => (0, _useField.getLocalizedDigits)(utils), [utils]);
34
+ return React.useMemo(() => {
35
+ const sections = (0, _buildSectionsFromFormat.buildSectionsFromFormat)({
36
+ utils,
37
+ format,
38
+ formatDensity,
39
+ isRtl,
40
+ shouldRespectLeadingZeros,
41
+ localeText: translations,
42
+ localizedDigits,
43
+ date: null,
44
+ // TODO v9: Make sure we still don't reverse in `buildSectionsFromFormat` when using `useParsedFormat`.
45
+ enableAccessibleFieldDOMStructure: false
46
+ });
47
+ return sections.map(section => `${section.startSeparator}${section.placeholder}${section.endSeparator}`).join('');
48
+ }, [utils, isRtl, translations, localizedDigits, format, formatDensity, shouldRespectLeadingZeros]);
49
+ };
50
+ exports.useParsedFormat = useParsedFormat;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ 'use client';
3
+
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.usePickersContext = void 0;
9
+ var React = _interopRequireWildcard(require("react"));
10
+ var _PickersProvider = require("../internals/components/PickersProvider");
11
+ /**
12
+ * Returns the context passed by the picker that wraps the current component.
13
+ */
14
+ const usePickersContext = () => {
15
+ const value = React.useContext(_PickersProvider.PickersContext);
16
+ if (value == null) {
17
+ throw new Error(['MUI X: The `usePickersContext` can only be called in fields that are used as a slot of a picker component'].join('\n'));
18
+ }
19
+ return value;
20
+ };
21
+ exports.usePickersContext = usePickersContext;
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-date-pickers v7.18.0
2
+ * @mui/x-date-pickers v7.20.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the