@mui/x-date-pickers 7.17.0 → 7.19.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 (118) hide show
  1. package/AdapterDateFns/AdapterDateFns.js +1 -1
  2. package/AdapterDateFnsBase/AdapterDateFnsBase.js +1 -0
  3. package/AdapterDateFnsV3/AdapterDateFnsV3.js +1 -1
  4. package/AdapterMoment/AdapterMoment.js +1 -0
  5. package/CHANGELOG.md +208 -5
  6. package/DateCalendar/DateCalendar.js +9 -1
  7. package/DateField/useDateField.d.ts +1 -1
  8. package/DatePicker/DatePicker.js +6 -0
  9. package/DatePicker/DatePicker.types.d.ts +5 -5
  10. package/DateTimeField/useDateTimeField.d.ts +1 -1
  11. package/DateTimePicker/DateTimePicker.js +6 -0
  12. package/DateTimePicker/DateTimePicker.types.d.ts +7 -6
  13. package/DateTimePicker/DateTimePickerTabs.js +1 -1
  14. package/DesktopDatePicker/DesktopDatePicker.js +6 -0
  15. package/DesktopDatePicker/DesktopDatePicker.types.d.ts +7 -6
  16. package/DesktopDateTimePicker/DesktopDateTimePicker.js +6 -0
  17. package/DesktopDateTimePicker/DesktopDateTimePicker.types.d.ts +11 -10
  18. package/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +1 -1
  19. package/MobileDatePicker/MobileDatePicker.js +6 -0
  20. package/MobileDatePicker/MobileDatePicker.types.d.ts +5 -0
  21. package/MobileDateTimePicker/MobileDateTimePicker.js +6 -0
  22. package/MonthCalendar/MonthCalendar.types.d.ts +1 -1
  23. package/PickersCalendarHeader/PickersCalendarHeader.js +1 -1
  24. package/PickersCalendarHeader/PickersCalendarHeader.types.d.ts +1 -1
  25. package/PickersLayout/PickersLayout.d.ts +2 -2
  26. package/PickersLayout/PickersLayout.js +1 -1
  27. package/PickersSectionList/PickersSectionList.d.ts +4 -4
  28. package/PickersTextField/PickersInputBase/PickersInputBase.d.ts +2 -2
  29. package/StaticDatePicker/StaticDatePicker.js +7 -1
  30. package/StaticDatePicker/StaticDatePicker.types.d.ts +5 -0
  31. package/StaticDateTimePicker/StaticDateTimePicker.js +7 -1
  32. package/StaticDateTimePicker/StaticDateTimePicker.types.d.ts +5 -0
  33. package/TimeClock/Clock.js +1 -1
  34. package/TimeClock/ClockNumber.js +1 -1
  35. package/TimeClock/ClockPointer.js +1 -1
  36. package/TimeField/useTimeField.d.ts +1 -1
  37. package/YearCalendar/YearCalendar.js +19 -6
  38. package/YearCalendar/YearCalendar.types.d.ts +7 -1
  39. package/dateViewRenderers/dateViewRenderers.d.ts +1 -1
  40. package/dateViewRenderers/dateViewRenderers.js +2 -0
  41. package/index.js +1 -1
  42. package/internals/components/PickerViewRoot/PickerViewRoot.d.ts +1 -1
  43. package/internals/components/PickersToolbarButton.js +1 -1
  44. package/internals/components/PickersToolbarText.js +1 -1
  45. package/locales/bgBG.d.ts +80 -0
  46. package/locales/bgBG.js +73 -0
  47. package/locales/csCZ.js +16 -20
  48. package/locales/hrHR.d.ts +80 -0
  49. package/locales/hrHR.js +90 -0
  50. package/locales/index.d.ts +3 -0
  51. package/locales/index.js +3 -0
  52. package/locales/ptBR.js +3 -4
  53. package/locales/ptPT.d.ts +80 -0
  54. package/locales/ptPT.js +73 -0
  55. package/models/pickers.d.ts +1 -1
  56. package/modern/AdapterDateFns/AdapterDateFns.js +1 -1
  57. package/modern/AdapterDateFnsBase/AdapterDateFnsBase.js +1 -0
  58. package/modern/AdapterDateFnsV3/AdapterDateFnsV3.js +1 -1
  59. package/modern/AdapterMoment/AdapterMoment.js +1 -0
  60. package/modern/DateCalendar/DateCalendar.js +9 -1
  61. package/modern/DatePicker/DatePicker.js +6 -0
  62. package/modern/DateTimePicker/DateTimePicker.js +6 -0
  63. package/modern/DateTimePicker/DateTimePickerTabs.js +1 -1
  64. package/modern/DesktopDatePicker/DesktopDatePicker.js +6 -0
  65. package/modern/DesktopDateTimePicker/DesktopDateTimePicker.js +6 -0
  66. package/modern/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +1 -1
  67. package/modern/MobileDatePicker/MobileDatePicker.js +6 -0
  68. package/modern/MobileDateTimePicker/MobileDateTimePicker.js +6 -0
  69. package/modern/PickersCalendarHeader/PickersCalendarHeader.js +1 -1
  70. package/modern/PickersLayout/PickersLayout.js +1 -1
  71. package/modern/StaticDatePicker/StaticDatePicker.js +7 -1
  72. package/modern/StaticDateTimePicker/StaticDateTimePicker.js +7 -1
  73. package/modern/TimeClock/Clock.js +1 -1
  74. package/modern/TimeClock/ClockNumber.js +1 -1
  75. package/modern/TimeClock/ClockPointer.js +1 -1
  76. package/modern/YearCalendar/YearCalendar.js +19 -6
  77. package/modern/dateViewRenderers/dateViewRenderers.js +2 -0
  78. package/modern/index.js +1 -1
  79. package/modern/internals/components/PickersToolbarButton.js +1 -1
  80. package/modern/internals/components/PickersToolbarText.js +1 -1
  81. package/modern/locales/bgBG.js +73 -0
  82. package/modern/locales/csCZ.js +16 -20
  83. package/modern/locales/hrHR.js +90 -0
  84. package/modern/locales/index.js +3 -0
  85. package/modern/locales/ptBR.js +3 -4
  86. package/modern/locales/ptPT.js +73 -0
  87. package/node/AdapterDateFns/AdapterDateFns.js +1 -1
  88. package/node/AdapterDateFnsBase/AdapterDateFnsBase.js +1 -0
  89. package/node/AdapterDateFnsV3/AdapterDateFnsV3.js +1 -1
  90. package/node/AdapterMoment/AdapterMoment.js +1 -0
  91. package/node/DateCalendar/DateCalendar.js +9 -1
  92. package/node/DatePicker/DatePicker.js +6 -0
  93. package/node/DateTimePicker/DateTimePicker.js +6 -0
  94. package/node/DateTimePicker/DateTimePickerTabs.js +1 -1
  95. package/node/DesktopDatePicker/DesktopDatePicker.js +6 -0
  96. package/node/DesktopDateTimePicker/DesktopDateTimePicker.js +6 -0
  97. package/node/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +1 -1
  98. package/node/MobileDatePicker/MobileDatePicker.js +6 -0
  99. package/node/MobileDateTimePicker/MobileDateTimePicker.js +6 -0
  100. package/node/PickersCalendarHeader/PickersCalendarHeader.js +1 -1
  101. package/node/PickersLayout/PickersLayout.js +1 -1
  102. package/node/StaticDatePicker/StaticDatePicker.js +7 -1
  103. package/node/StaticDateTimePicker/StaticDateTimePicker.js +7 -1
  104. package/node/TimeClock/Clock.js +1 -1
  105. package/node/TimeClock/ClockNumber.js +1 -1
  106. package/node/TimeClock/ClockPointer.js +1 -1
  107. package/node/YearCalendar/YearCalendar.js +19 -6
  108. package/node/dateViewRenderers/dateViewRenderers.js +2 -0
  109. package/node/index.js +1 -1
  110. package/node/internals/components/PickersToolbarButton.js +1 -1
  111. package/node/internals/components/PickersToolbarText.js +1 -1
  112. package/node/locales/bgBG.js +79 -0
  113. package/node/locales/csCZ.js +16 -20
  114. package/node/locales/hrHR.js +96 -0
  115. package/node/locales/index.js +33 -0
  116. package/node/locales/ptBR.js +3 -4
  117. package/node/locales/ptPT.js +79 -0
  118. package/package.json +4 -4
@@ -2,7 +2,7 @@
2
2
 
3
3
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
4
4
  import _extends from "@babel/runtime/helpers/esm/extends";
5
- const _excluded = ["autoFocus", "className", "value", "defaultValue", "referenceDate", "disabled", "disableFuture", "disablePast", "maxDate", "minDate", "onChange", "readOnly", "shouldDisableYear", "disableHighlightToday", "onYearFocus", "hasFocus", "onFocusedViewChange", "yearsPerRow", "timezone", "gridLabelId", "slots", "slotProps"];
5
+ const _excluded = ["autoFocus", "className", "value", "defaultValue", "referenceDate", "disabled", "disableFuture", "disablePast", "maxDate", "minDate", "onChange", "readOnly", "shouldDisableYear", "disableHighlightToday", "onYearFocus", "hasFocus", "onFocusedViewChange", "yearsOrder", "yearsPerRow", "timezone", "gridLabelId", "slots", "slotProps"];
6
6
  import * as React from 'react';
7
7
  import PropTypes from 'prop-types';
8
8
  import clsx from 'clsx';
@@ -88,6 +88,7 @@ export const YearCalendar = /*#__PURE__*/React.forwardRef(function YearCalendar(
88
88
  onYearFocus,
89
89
  hasFocus,
90
90
  onFocusedViewChange,
91
+ yearsOrder = 'asc',
91
92
  yearsPerRow,
92
93
  timezone: timezoneProp,
93
94
  gridLabelId,
@@ -177,22 +178,24 @@ export const YearCalendar = /*#__PURE__*/React.forwardRef(function YearCalendar(
177
178
  React.useEffect(() => {
178
179
  setFocusedYear(prevFocusedYear => selectedYear !== null && prevFocusedYear !== selectedYear ? selectedYear : prevFocusedYear);
179
180
  }, [selectedYear]);
181
+ const verticalDirection = yearsOrder !== 'desc' ? yearsPerRow * 1 : yearsPerRow * -1;
182
+ const horizontalDirection = isRtl && yearsOrder === 'asc' || !isRtl && yearsOrder === 'desc' ? -1 : 1;
180
183
  const handleKeyDown = useEventCallback((event, year) => {
181
184
  switch (event.key) {
182
185
  case 'ArrowUp':
183
- focusYear(year - yearsPerRow);
186
+ focusYear(year - verticalDirection);
184
187
  event.preventDefault();
185
188
  break;
186
189
  case 'ArrowDown':
187
- focusYear(year + yearsPerRow);
190
+ focusYear(year + verticalDirection);
188
191
  event.preventDefault();
189
192
  break;
190
193
  case 'ArrowLeft':
191
- focusYear(year + (isRtl ? 1 : -1));
194
+ focusYear(year - horizontalDirection);
192
195
  event.preventDefault();
193
196
  break;
194
197
  case 'ArrowRight':
195
- focusYear(year + (isRtl ? -1 : 1));
198
+ focusYear(year + horizontalDirection);
196
199
  event.preventDefault();
197
200
  break;
198
201
  default:
@@ -230,6 +233,10 @@ export const YearCalendar = /*#__PURE__*/React.forwardRef(function YearCalendar(
230
233
  }
231
234
  scrollerRef.current.scrollTop = elementBottom - clientHeight / 2 - offsetHeight / 2;
232
235
  }, [autoFocus]);
236
+ const yearRange = utils.getYearRange([minDate, maxDate]);
237
+ if (yearsOrder === 'desc') {
238
+ yearRange.reverse();
239
+ }
233
240
  return /*#__PURE__*/_jsx(YearCalendarRoot, _extends({
234
241
  ref: handleRef,
235
242
  className: clsx(classes.root, className),
@@ -237,7 +244,7 @@ export const YearCalendar = /*#__PURE__*/React.forwardRef(function YearCalendar(
237
244
  role: "radiogroup",
238
245
  "aria-labelledby": gridLabelId
239
246
  }, other, {
240
- children: utils.getYearRange([minDate, maxDate]).map(year => {
247
+ children: yearRange.map(year => {
241
248
  const yearNumber = utils.getYear(year);
242
249
  const isSelected = yearNumber === selectedYear;
243
250
  const isDisabled = disabled || isYearDisabled(year);
@@ -358,6 +365,12 @@ process.env.NODE_ENV !== "production" ? YearCalendar.propTypes = {
358
365
  * Used when the component is controlled.
359
366
  */
360
367
  value: PropTypes.object,
368
+ /**
369
+ * Years are displayed in ascending (chronological) order by default.
370
+ * If `desc`, years are displayed in descending order.
371
+ * @default 'asc'
372
+ */
373
+ yearsOrder: PropTypes.oneOf(['asc', 'desc']),
361
374
  /**
362
375
  * Years rendered per row.
363
376
  * @default 3
@@ -25,6 +25,7 @@ export const renderDateViewCalendar = ({
25
25
  onMonthChange,
26
26
  monthsPerRow,
27
27
  onYearChange,
28
+ yearsOrder,
28
29
  yearsPerRow,
29
30
  slots,
30
31
  slotProps,
@@ -63,6 +64,7 @@ export const renderDateViewCalendar = ({
63
64
  onMonthChange: onMonthChange,
64
65
  monthsPerRow: monthsPerRow,
65
66
  onYearChange: onYearChange,
67
+ yearsOrder: yearsOrder,
66
68
  yearsPerRow: yearsPerRow,
67
69
  slots: slots,
68
70
  slotProps: slotProps,
package/modern/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-date-pickers v7.17.0
2
+ * @mui/x-date-pickers v7.19.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -46,7 +46,7 @@ export const PickersToolbarButton = /*#__PURE__*/React.forwardRef(function Picke
46
46
  return /*#__PURE__*/_jsx(PickersToolbarButtonRoot, _extends({
47
47
  variant: "text",
48
48
  ref: ref,
49
- className: clsx(className, classes.root)
49
+ className: clsx(classes.root, className)
50
50
  }, width ? {
51
51
  sx: {
52
52
  width
@@ -46,7 +46,7 @@ export const PickersToolbarText = /*#__PURE__*/React.forwardRef(function Pickers
46
46
  const classes = useUtilityClasses(props);
47
47
  return /*#__PURE__*/_jsx(PickersToolbarTextRoot, _extends({
48
48
  ref: ref,
49
- className: clsx(className, classes.root),
49
+ className: clsx(classes.root, className),
50
50
  component: "span"
51
51
  }, other, {
52
52
  children: value
@@ -0,0 +1,73 @@
1
+ import { getPickersLocalization } from "./utils/getPickersLocalization.js";
2
+ const views = {
3
+ hours: 'часове',
4
+ minutes: 'минути',
5
+ seconds: 'секунди',
6
+ meridiem: 'преди обяд/след обяд'
7
+ };
8
+ const bgBGPickers = {
9
+ // Calendar navigation
10
+ previousMonth: 'Предишен месец',
11
+ nextMonth: 'Следващ месец',
12
+ // View navigation
13
+ openPreviousView: 'Отвори предишен изглед',
14
+ openNextView: 'Отвори следващ изглед',
15
+ calendarViewSwitchingButtonAriaLabel: view => view === 'year' ? 'отворен е изглед на година, премини на изглед на календар' : 'отворен е изглед на календар, премини на изглед на година',
16
+ // DateRange labels
17
+ start: 'Начало',
18
+ end: 'Край',
19
+ startDate: 'Начална дата',
20
+ startTime: 'Начален час',
21
+ endDate: 'Крайна дата',
22
+ endTime: 'Краен час',
23
+ // Action bar
24
+ cancelButtonLabel: 'Отказ',
25
+ clearButtonLabel: 'Изчисти',
26
+ okButtonLabel: 'ОК',
27
+ todayButtonLabel: 'Днес',
28
+ // Toolbar titles
29
+ datePickerToolbarTitle: 'Избери дата',
30
+ dateTimePickerToolbarTitle: 'Избери дата и час',
31
+ timePickerToolbarTitle: 'Избери час',
32
+ dateRangePickerToolbarTitle: 'Избери времеви период',
33
+ // Clock labels
34
+ clockLabelText: (view, time, adapter) => `Избери ${views[view]}. ${time === null ? 'Не е избран час' : `Избраният час е ${adapter.format(time, 'fullTime')}`}`,
35
+ hoursClockNumberText: hours => `${hours} часа`,
36
+ minutesClockNumberText: minutes => `${minutes} минути`,
37
+ secondsClockNumberText: seconds => `${seconds} секунди`,
38
+ // Digital clock labels
39
+ selectViewText: view => `Избери ${views[view]}`,
40
+ // Calendar labels
41
+ calendarWeekNumberHeaderLabel: 'Седмица',
42
+ calendarWeekNumberHeaderText: '#',
43
+ calendarWeekNumberAriaLabelText: weekNumber => `Седмица ${weekNumber}`,
44
+ calendarWeekNumberText: weekNumber => `${weekNumber}`,
45
+ // Open picker labels
46
+ openDatePickerDialogue: (value, utils) => value !== null && utils.isValid(value) ? `Избери дата, избраната дата е ${utils.format(value, 'fullDate')}` : 'Избери дата',
47
+ openTimePickerDialogue: (value, utils) => value !== null && utils.isValid(value) ? `Избери час, избраният час е ${utils.format(value, 'fullTime')}` : 'Избери час',
48
+ fieldClearLabel: 'Изчисти стойност',
49
+ // Table labels
50
+ timeTableLabel: 'избери час',
51
+ dateTableLabel: 'избери дата',
52
+ // Field section placeholders
53
+ fieldYearPlaceholder: params => 'Г'.repeat(params.digitAmount),
54
+ fieldMonthPlaceholder: params => params.contentType === 'letter' ? 'ММММ' : 'ММ',
55
+ fieldDayPlaceholder: () => 'ДД',
56
+ fieldWeekDayPlaceholder: params => params.contentType === 'letter' ? 'СССС' : 'СС',
57
+ fieldHoursPlaceholder: () => 'чч',
58
+ fieldMinutesPlaceholder: () => 'мм',
59
+ fieldSecondsPlaceholder: () => 'сс',
60
+ fieldMeridiemPlaceholder: () => 'пс',
61
+ // View names
62
+ year: 'Година',
63
+ month: 'Месец',
64
+ day: 'Ден',
65
+ weekDay: 'Ден от седмицата',
66
+ hours: 'Часове',
67
+ minutes: 'Минути',
68
+ seconds: 'Секунди',
69
+ meridiem: 'Преди обяд/след обяд',
70
+ // Common
71
+ empty: 'Празно'
72
+ };
73
+ export const bgBG = getPickersLocalization(bgBGPickers);
@@ -17,11 +17,10 @@ const csCZPickers = {
17
17
  // DateRange labels
18
18
  start: 'Začátek',
19
19
  end: 'Konec',
20
- // startDate: 'Start date',
21
- // startTime: 'Start time',
22
- // endDate: 'End date',
23
- // endTime: 'End time',
24
-
20
+ startDate: 'Datum začátku',
21
+ startTime: 'Čas začátku',
22
+ endDate: 'Datum konce',
23
+ endTime: 'Čas konce',
25
24
  // Action bar
26
25
  cancelButtonLabel: 'Zrušit',
27
26
  clearButtonLabel: 'Vymazat',
@@ -47,8 +46,7 @@ const csCZPickers = {
47
46
  // Open picker labels
48
47
  openDatePickerDialogue: (value, utils, formattedDate) => formattedDate || value !== null && utils.isValid(value) ? `Vyberte datum, vybrané datum je ${formattedDate ?? utils.format(value, 'fullDate')}` : 'Vyberte datum',
49
48
  openTimePickerDialogue: (value, utils, formattedTime) => formattedTime || value !== null && utils.isValid(value) ? `Vyberte čas, vybraný čas je ${formattedTime ?? utils.format(value, 'fullTime')}` : 'Vyberte čas',
50
- // fieldClearLabel: 'Clear',
51
-
49
+ fieldClearLabel: 'Vymazat',
52
50
  // Table labels
53
51
  timeTableLabel: 'vyberte čas',
54
52
  dateTableLabel: 'vyberte datum',
@@ -56,23 +54,21 @@ const csCZPickers = {
56
54
  fieldYearPlaceholder: params => 'Y'.repeat(params.digitAmount),
57
55
  fieldMonthPlaceholder: params => params.contentType === 'letter' ? 'MMMM' : 'MM',
58
56
  fieldDayPlaceholder: () => 'DD',
59
- // fieldWeekDayPlaceholder: params => params.contentType === 'letter' ? 'EEEE' : 'EE',
57
+ fieldWeekDayPlaceholder: params => params.contentType === 'letter' ? 'EEEE' : 'EE',
60
58
  fieldHoursPlaceholder: () => 'hh',
61
59
  fieldMinutesPlaceholder: () => 'mm',
62
60
  fieldSecondsPlaceholder: () => 'ss',
63
- fieldMeridiemPlaceholder: () => 'aa'
64
-
61
+ fieldMeridiemPlaceholder: () => 'aa',
65
62
  // View names
66
- // year: 'Year',
67
- // month: 'Month',
68
- // day: 'Day',
69
- // weekDay: 'Week day',
70
- // hours: 'Hours',
71
- // minutes: 'Minutes',
72
- // seconds: 'Seconds',
73
- // meridiem: 'Meridiem',
74
-
63
+ year: 'Rok',
64
+ month: 'Měsíc',
65
+ day: 'Den',
66
+ weekDay: 'Pracovní den',
67
+ hours: 'Hodiny',
68
+ minutes: 'Minuty',
69
+ seconds: 'Sekundy',
70
+ meridiem: 'Odpoledne',
75
71
  // Common
76
- // empty: 'Empty',
72
+ empty: 'Prázdný'
77
73
  };
78
74
  export const csCZ = getPickersLocalization(csCZPickers);
@@ -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);
@@ -87,7 +87,7 @@ class AdapterDateFns extends _AdapterDateFnsBase.AdapterDateFnsBase {
87
87
  /* istanbul ignore next */
88
88
  if (process.env.NODE_ENV !== 'production') {
89
89
  if (typeof _addDays.default !== 'function') {
90
- throw new Error(['MUI: The `date-fns` package v3.x is not compatible with this adapter.', 'Please, install v2.x of the package or use the `AdapterDateFnsV3` instead.'].join('\n'));
90
+ throw new Error(['MUI: This adapter is only compatible with `date-fns` v2.x package versions.', 'Please, install v2.x of the package or use the `AdapterDateFnsV3` instead.'].join('\n'));
91
91
  }
92
92
  }
93
93
  super({
@@ -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',
@@ -90,7 +90,7 @@ class AdapterDateFns extends _AdapterDateFnsBase.AdapterDateFnsBase {
90
90
  /* istanbul ignore next */
91
91
  if (process.env.NODE_ENV !== 'production') {
92
92
  if (typeof _addDays.addDays !== 'function') {
93
- throw new Error([`MUI: The \`date-fns\` package v2.x is not compatible with this adapter.`, 'Please, install v3.x of the package or use the `AdapterDateFns` instead.'].join('\n'));
93
+ throw new Error([`MUI: The \`date-fns\` package v2.x is not compatible with this adapter.`, 'Please, install v3.x or v4.x of the package or use the `AdapterDateFns` instead.'].join('\n'));
94
94
  }
95
95
  if (!_format.longFormatters) {
96
96
  throw new Error('MUI: The minimum supported `date-fns` package version compatible with this adapter is `3.2.x`.');
@@ -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',
@@ -31,7 +31,7 @@ var _useValueWithTimezone = require("../internals/hooks/useValueWithTimezone");
31
31
  var _valueManagers = require("../internals/utils/valueManagers");
32
32
  var _dimensions = require("../internals/constants/dimensions");
33
33
  var _jsxRuntime = require("react/jsx-runtime");
34
- const _excluded = ["autoFocus", "onViewChange", "value", "defaultValue", "referenceDate", "disableFuture", "disablePast", "onChange", "onYearChange", "onMonthChange", "reduceAnimations", "shouldDisableDate", "shouldDisableMonth", "shouldDisableYear", "view", "views", "openTo", "className", "disabled", "readOnly", "minDate", "maxDate", "disableHighlightToday", "focusedView", "onFocusedViewChange", "showDaysOutsideCurrentMonth", "fixedWeekNumber", "dayOfWeekFormatter", "slots", "slotProps", "loading", "renderLoading", "displayWeekNumber", "yearsPerRow", "monthsPerRow", "timezone"];
34
+ const _excluded = ["autoFocus", "onViewChange", "value", "defaultValue", "referenceDate", "disableFuture", "disablePast", "onChange", "onYearChange", "onMonthChange", "reduceAnimations", "shouldDisableDate", "shouldDisableMonth", "shouldDisableYear", "view", "views", "openTo", "className", "disabled", "readOnly", "minDate", "maxDate", "disableHighlightToday", "focusedView", "onFocusedViewChange", "showDaysOutsideCurrentMonth", "fixedWeekNumber", "dayOfWeekFormatter", "slots", "slotProps", "loading", "renderLoading", "displayWeekNumber", "yearsOrder", "yearsPerRow", "monthsPerRow", "timezone"];
35
35
  const useUtilityClasses = ownerState => {
36
36
  const {
37
37
  classes
@@ -127,6 +127,7 @@ const DateCalendar = exports.DateCalendar = /*#__PURE__*/React.forwardRef(functi
127
127
  loading,
128
128
  renderLoading,
129
129
  displayWeekNumber,
130
+ yearsOrder,
130
131
  yearsPerRow,
131
132
  monthsPerRow,
132
133
  timezone: timezoneProp
@@ -318,6 +319,7 @@ const DateCalendar = exports.DateCalendar = /*#__PURE__*/React.forwardRef(functi
318
319
  shouldDisableYear: shouldDisableYear,
319
320
  hasFocus: hasFocus,
320
321
  onFocusedViewChange: isViewFocused => setFocusedView('year', isViewFocused),
322
+ yearsOrder: yearsOrder,
321
323
  yearsPerRow: yearsPerRow,
322
324
  referenceDate: referenceDate
323
325
  })), view === 'month' && /*#__PURE__*/(0, _jsxRuntime.jsx)(_MonthCalendar.MonthCalendar, (0, _extends2.default)({}, baseDateValidationProps, commonViewProps, {
@@ -567,6 +569,12 @@ process.env.NODE_ENV !== "production" ? DateCalendar.propTypes = {
567
569
  * Available views.
568
570
  */
569
571
  views: _propTypes.default.arrayOf(_propTypes.default.oneOf(['day', 'month', 'year']).isRequired),
572
+ /**
573
+ * Years are displayed in ascending (chronological) order by default.
574
+ * If `desc`, years are displayed in descending order.
575
+ * @default 'asc'
576
+ */
577
+ yearsOrder: _propTypes.default.oneOf(['asc', 'desc']),
570
578
  /**
571
579
  * Years rendered per row.
572
580
  * @default 3
@@ -358,6 +358,12 @@ process.env.NODE_ENV !== "production" ? DatePicker.propTypes = {
358
358
  * Available views.
359
359
  */
360
360
  views: _propTypes.default.arrayOf(_propTypes.default.oneOf(['day', 'month', 'year']).isRequired),
361
+ /**
362
+ * Years are displayed in ascending (chronological) order by default.
363
+ * If `desc`, years are displayed in descending order.
364
+ * @default 'asc'
365
+ */
366
+ yearsOrder: _propTypes.default.oneOf(['asc', 'desc']),
361
367
  /**
362
368
  * Years rendered per row.
363
369
  * @default 4 on desktop, 3 on mobile
@@ -429,6 +429,12 @@ process.env.NODE_ENV !== "production" ? DateTimePicker.propTypes = {
429
429
  * Available views.
430
430
  */
431
431
  views: _propTypes.default.arrayOf(_propTypes.default.oneOf(['day', 'hours', 'minutes', 'month', 'seconds', 'year']).isRequired),
432
+ /**
433
+ * Years are displayed in ascending (chronological) order by default.
434
+ * If `desc`, years are displayed in descending order.
435
+ * @default 'asc'
436
+ */
437
+ yearsOrder: _propTypes.default.oneOf(['asc', 'desc']),
432
438
  /**
433
439
  * Years rendered per row.
434
440
  * @default 4 on desktop, 3 on mobile
@@ -94,7 +94,7 @@ const DateTimePickerTabs = exports.DateTimePickerTabs = function DateTimePickerT
94
94
  variant: "fullWidth",
95
95
  value: viewToTab(view),
96
96
  onChange: handleChange,
97
- className: (0, _clsx.default)(className, classes.root),
97
+ className: (0, _clsx.default)(classes.root, className),
98
98
  sx: sx,
99
99
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Tab.default, {
100
100
  value: "date",
@@ -379,6 +379,12 @@ DesktopDatePicker.propTypes = {
379
379
  * Available views.
380
380
  */
381
381
  views: _propTypes.default.arrayOf(_propTypes.default.oneOf(['day', 'month', 'year']).isRequired),
382
+ /**
383
+ * Years are displayed in ascending (chronological) order by default.
384
+ * If `desc`, years are displayed in descending order.
385
+ * @default 'asc'
386
+ */
387
+ yearsOrder: _propTypes.default.oneOf(['asc', 'desc']),
382
388
  /**
383
389
  * Years rendered per row.
384
390
  * @default 4
@@ -537,6 +537,12 @@ DesktopDateTimePicker.propTypes = {
537
537
  * Available views.
538
538
  */
539
539
  views: _propTypes.default.arrayOf(_propTypes.default.oneOf(['day', 'hours', 'minutes', 'month', 'seconds', 'year']).isRequired),
540
+ /**
541
+ * Years are displayed in ascending (chronological) order by default.
542
+ * If `desc`, years are displayed in descending order.
543
+ * @default 'asc'
544
+ */
545
+ yearsOrder: _propTypes.default.oneOf(['asc', 'desc']),
540
546
  /**
541
547
  * Years rendered per row.
542
548
  * @default 4
@@ -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,
@@ -376,6 +376,12 @@ MobileDatePicker.propTypes = {
376
376
  * Available views.
377
377
  */
378
378
  views: _propTypes.default.arrayOf(_propTypes.default.oneOf(['day', 'month', 'year']).isRequired),
379
+ /**
380
+ * Years are displayed in ascending (chronological) order by default.
381
+ * If `desc`, years are displayed in descending order.
382
+ * @default 'asc'
383
+ */
384
+ yearsOrder: _propTypes.default.oneOf(['asc', 'desc']),
379
385
  /**
380
386
  * Years rendered per row.
381
387
  * @default 3