react-day-picker 9.4.4 → 9.5.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 (116) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/DayPicker.js +16 -12
  3. package/dist/cjs/DayPicker.js.map +1 -1
  4. package/dist/cjs/classes/DateLib.d.ts +77 -2
  5. package/dist/cjs/classes/DateLib.js +113 -2
  6. package/dist/cjs/classes/DateLib.js.map +1 -1
  7. package/dist/cjs/formatters/formatMonthDropdown.d.ts +2 -6
  8. package/dist/cjs/formatters/formatMonthDropdown.js +3 -6
  9. package/dist/cjs/formatters/formatMonthDropdown.js.map +1 -1
  10. package/dist/cjs/formatters/formatYearDropdown.d.ts +2 -2
  11. package/dist/cjs/formatters/formatYearDropdown.js +3 -3
  12. package/dist/cjs/formatters/formatYearDropdown.js.map +1 -1
  13. package/dist/cjs/helpers/getBroadcastWeeksInMonth.js +1 -1
  14. package/dist/cjs/helpers/getBroadcastWeeksInMonth.js.map +1 -1
  15. package/dist/cjs/helpers/getInitialMonth.js +1 -6
  16. package/dist/cjs/helpers/getInitialMonth.js.map +1 -1
  17. package/dist/cjs/helpers/getMonthOptions.js +7 -20
  18. package/dist/cjs/helpers/getMonthOptions.js.map +1 -1
  19. package/dist/cjs/helpers/getNavMonth.d.ts +1 -1
  20. package/dist/cjs/helpers/getNavMonth.js +12 -24
  21. package/dist/cjs/helpers/getNavMonth.js.map +1 -1
  22. package/dist/cjs/helpers/getWeekdays.d.ts +1 -1
  23. package/dist/cjs/helpers/getWeekdays.js +5 -10
  24. package/dist/cjs/helpers/getWeekdays.js.map +1 -1
  25. package/dist/cjs/helpers/getYearOptions.js +5 -5
  26. package/dist/cjs/helpers/getYearOptions.js.map +1 -1
  27. package/dist/cjs/jalali.d.ts +2 -3
  28. package/dist/cjs/jalali.js +4 -42
  29. package/dist/cjs/jalali.js.map +1 -1
  30. package/dist/cjs/persian.d.ts +54 -0
  31. package/dist/cjs/persian.js +68 -0
  32. package/dist/cjs/persian.js.map +1 -0
  33. package/dist/cjs/types/props.d.ts +23 -6
  34. package/dist/cjs/types/shared.d.ts +19 -0
  35. package/dist/cjs/useGetModifiers.js +1 -7
  36. package/dist/cjs/useGetModifiers.js.map +1 -1
  37. package/dist/esm/DayPicker.js +16 -12
  38. package/dist/esm/DayPicker.js.map +1 -1
  39. package/dist/esm/classes/DateLib.d.ts +77 -2
  40. package/dist/esm/classes/DateLib.js +114 -3
  41. package/dist/esm/classes/DateLib.js.map +1 -1
  42. package/dist/esm/formatters/formatMonthDropdown.d.ts +2 -6
  43. package/dist/esm/formatters/formatMonthDropdown.js +3 -6
  44. package/dist/esm/formatters/formatMonthDropdown.js.map +1 -1
  45. package/dist/esm/formatters/formatYearDropdown.d.ts +2 -2
  46. package/dist/esm/formatters/formatYearDropdown.js +3 -3
  47. package/dist/esm/formatters/formatYearDropdown.js.map +1 -1
  48. package/dist/esm/helpers/getBroadcastWeeksInMonth.js +1 -1
  49. package/dist/esm/helpers/getBroadcastWeeksInMonth.js.map +1 -1
  50. package/dist/esm/helpers/getInitialMonth.js +1 -6
  51. package/dist/esm/helpers/getInitialMonth.js.map +1 -1
  52. package/dist/esm/helpers/getMonthOptions.js +7 -20
  53. package/dist/esm/helpers/getMonthOptions.js.map +1 -1
  54. package/dist/esm/helpers/getNavMonth.d.ts +1 -1
  55. package/dist/esm/helpers/getNavMonth.js +12 -24
  56. package/dist/esm/helpers/getNavMonth.js.map +1 -1
  57. package/dist/esm/helpers/getWeekdays.d.ts +1 -1
  58. package/dist/esm/helpers/getWeekdays.js +5 -10
  59. package/dist/esm/helpers/getWeekdays.js.map +1 -1
  60. package/dist/esm/helpers/getYearOptions.js +5 -5
  61. package/dist/esm/helpers/getYearOptions.js.map +1 -1
  62. package/dist/esm/jalali.d.ts +2 -3
  63. package/dist/esm/jalali.js +2 -17
  64. package/dist/esm/jalali.js.map +1 -1
  65. package/dist/esm/persian.d.ts +54 -0
  66. package/dist/esm/persian.js +27 -0
  67. package/dist/esm/persian.js.map +1 -0
  68. package/dist/esm/types/props.d.ts +23 -6
  69. package/dist/esm/types/shared.d.ts +19 -0
  70. package/dist/esm/useGetModifiers.js +1 -7
  71. package/dist/esm/useGetModifiers.js.map +1 -1
  72. package/examples/DropdownMonths.test.tsx +26 -0
  73. package/examples/DropdownMonths.tsx +7 -0
  74. package/examples/Numerals.test.tsx +18 -0
  75. package/examples/Numerals.tsx +8 -0
  76. package/examples/Persian.test.tsx +16 -0
  77. package/examples/Persian.tsx +7 -0
  78. package/examples/PersianEn.tsx +19 -0
  79. package/examples/PersianFormatted.test.tsx +16 -0
  80. package/examples/PersianFormatted.tsx +20 -0
  81. package/examples/index.ts +5 -2
  82. package/package.json +22 -10
  83. package/src/DayPicker.test.tsx +1 -1
  84. package/src/DayPicker.tsx +19 -18
  85. package/src/classes/DateLib.ts +146 -6
  86. package/src/formatters/formatMonthDropdown.test.ts +5 -5
  87. package/src/formatters/formatMonthDropdown.ts +4 -6
  88. package/src/formatters/formatYearDropdown.test.ts +3 -1
  89. package/src/formatters/formatYearDropdown.ts +7 -3
  90. package/src/helpers/broadcastCalendar.test.ts +1 -1
  91. package/src/helpers/endOfBroadcastWeek.test.ts +1 -1
  92. package/src/helpers/getBroadcastWeeksInMonth.ts +1 -1
  93. package/src/helpers/getFormatters.test.ts +8 -23
  94. package/src/helpers/getInitialMonth.ts +1 -7
  95. package/src/helpers/getMonthOptions.test.ts +214 -160
  96. package/src/helpers/getMonthOptions.ts +15 -22
  97. package/src/helpers/getMonths.test.ts +1 -2
  98. package/src/helpers/getNavMonth.test.ts +206 -63
  99. package/src/helpers/getNavMonth.ts +15 -27
  100. package/src/helpers/getWeekdays.ts +4 -11
  101. package/src/helpers/getYearOptions.test.ts +3 -3
  102. package/src/helpers/getYearOptions.ts +7 -6
  103. package/src/jalali.tsx +2 -24
  104. package/src/persian.tsx +86 -0
  105. package/src/selection/useRange.test.tsx +1 -2
  106. package/src/types/props.ts +24 -6
  107. package/src/types/shared.ts +32 -0
  108. package/src/useGetModifiers.tsx +1 -11
  109. package/website/docs/docs/localization.mdx +84 -52
  110. package/website/docs/docs/translation.mdx +18 -40
  111. package/website/docs/intro.mdx +1 -1
  112. package/website/tsconfig.json +1 -4
  113. package/examples/Jalali.test.tsx +0 -17
  114. package/examples/Jalali.tsx +0 -7
  115. package/examples/NumberingSystem.test.tsx +0 -21
  116. package/examples/NumberingSystem.tsx +0 -33
@@ -1 +1 @@
1
- {"version":3,"file":"getYearOptions.js","sourceRoot":"","sources":["../../../src/helpers/getYearOptions.ts"],"names":[],"mappings":"AAIA,gDAAgD;AAChD,MAAM,UAAU,cAAc,CAC5B,QAA0B,EAC1B,MAAwB,EACxB,UAAkD,EAClD,OAAgB;IAEhB,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAC3E,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,IAAI,GAAG,YAAY,CAAC;IACxB,OAAO,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/B,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACzB,MAAM,KAAK,GAAG,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACnD,OAAO;YACL,KAAK;YACL,KAAK;YACL,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"getYearOptions.js","sourceRoot":"","sources":["../../../src/helpers/getYearOptions.ts"],"names":[],"mappings":"AAIA,gDAAgD;AAChD,MAAM,UAAU,cAAc,CAC5B,QAA0B,EAC1B,MAAwB,EACxB,UAAkD,EAClD,OAAgB;IAEhB,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,GACvE,OAAO,CAAC;IACV,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,KAAK,GAAW,EAAE,CAAC;IAEzB,IAAI,IAAI,GAAG,YAAY,CAAC;IACxB,OAAO,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,KAAK,GAAG,UAAU,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3D,OAAO;YACL,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC;YACpB,KAAK;YACL,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,3 +1,2 @@
1
- import React from "react";
2
- import { type DayPickerProps } from "./index.js";
3
- export declare function DayPicker(props: DayPickerProps): React.JSX.Element;
1
+ /** @deprecated Import from `react-day-picker/persian` instead. */
2
+ export * from "./persian.js";
@@ -1,18 +1,3 @@
1
- import React from "react";
2
- import * as jalaliDateLib from "date-fns-jalali";
3
- import { faIR } from "date-fns-jalali/locale";
4
- import { DayPicker as DayPickerComponent } from "./index.js";
5
- export function DayPicker(props) {
6
- return (React.createElement(DayPickerComponent
7
- // @ts-expect-error The type definitions for the date-fns-jalali library
8
- // are not compatible with the date-fns 4.0 types. The `addDays`
9
- // function's return type is causing a type mismatch. (This casting should
10
- // be not needed when date-fns-jalali upgrades to date-fns@4)
11
- , {
12
- // @ts-expect-error The type definitions for the date-fns-jalali library
13
- // are not compatible with the date-fns 4.0 types. The `addDays`
14
- // function's return type is causing a type mismatch. (This casting should
15
- // be not needed when date-fns-jalali upgrades to date-fns@4)
16
- dateLib: jalaliDateLib, locale: faIR, dir: "rtl", ...props }));
17
- }
1
+ /** @deprecated Import from `react-day-picker/persian` instead. */
2
+ export * from "./persian.js";
18
3
  //# sourceMappingURL=jalali.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"jalali.js","sourceRoot":"","sources":["../../src/jalali.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,OAAO,EACL,SAAS,IAAI,kBAAkB,EAEhC,MAAM,YAAY,CAAC;AAEpB,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,OAAO,CACL,oBAAC,kBAAkB;IACjB,wEAAwE;IACxE,oEAAoE;IACpE,8EAA8E;IAC9E,iEAAiE;;QAHjE,wEAAwE;QACxE,oEAAoE;QACpE,8EAA8E;QAC9E,iEAAiE;QACjE,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,IAAI,EACZ,GAAG,EAAC,KAAK,KACL,KAAK,GACT,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"jalali.js","sourceRoot":"","sources":["../../src/jalali.tsx"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,cAAc,cAAc,CAAC"}
@@ -0,0 +1,54 @@
1
+ import React from "react";
2
+ import * as dateFnsJalali from "date-fns-jalali";
3
+ import { Locale } from "date-fns-jalali";
4
+ import { DateLib, DateLibOptions } from "./index.js";
5
+ import type { DayPickerProps } from "./types/props.js";
6
+ export declare const faIR: dateFnsJalali.Locale;
7
+ export declare const enUS: dateFnsJalali.Locale;
8
+ /**
9
+ * Render the Persian Calendar.
10
+ *
11
+ * @see https://daypicker.dev/docs/localization#persian-calendar
12
+ */
13
+ export declare function DayPicker(props: DayPickerProps & {
14
+ /**
15
+ * The locale to use in the calendar.
16
+ *
17
+ * @default `faIR`
18
+ */
19
+ locale?: Locale;
20
+ /**
21
+ * The direction of the text in the calendar.
22
+ *
23
+ * @default `rtl`
24
+ */
25
+ dir?: DayPickerProps["dir"];
26
+ /**
27
+ * The date library to use in the calendar.
28
+ *
29
+ * @default `jalaliDateLib` from `date-fns-jalali`
30
+ */
31
+ dateLib?: DayPickerProps["dateLib"];
32
+ /**
33
+ * The numeral system to use when formatting dates.
34
+ *
35
+ * - `latn`: Latin (Western Arabic)
36
+ * - `arab`: Arabic-Indic
37
+ * - `arabext`: Eastern Arabic-Indic (Persian)
38
+ * - `deva`: Devanagari
39
+ * - `beng`: Bengali
40
+ * - `guru`: Gurmukhi
41
+ * - `gujr`: Gujarati
42
+ * - `orya`: Oriya
43
+ * - `tamldec`: Tamil
44
+ * - `telu`: Telugu
45
+ * - `knda`: Kannada
46
+ * - `mlym`: Malayalam
47
+ *
48
+ * @defaultValue `arabext` Eastern Arabic-Indic (Persian)
49
+ * @see https://daypicker.dev/docs/translation#numeral-systems
50
+ */
51
+ numerals?: DayPickerProps["numerals"];
52
+ }): React.JSX.Element;
53
+ /** Returns the date library used in the calendar. */
54
+ export declare const getDateLib: (options?: DateLibOptions) => DateLib;
@@ -0,0 +1,27 @@
1
+ import React from "react";
2
+ import * as dateFnsJalali from "date-fns-jalali";
3
+ import * as locales from "date-fns-jalali/locale";
4
+ import { DateLib, DayPicker as DayPickerComponent } from "./index.js";
5
+ export const faIR = locales.faIR;
6
+ export const enUS = locales.enUS;
7
+ /**
8
+ * Render the Persian Calendar.
9
+ *
10
+ * @see https://daypicker.dev/docs/localization#persian-calendar
11
+ */
12
+ export function DayPicker(props) {
13
+ const dateLib = getDateLib({
14
+ locale: props.locale,
15
+ weekStartsOn: props.broadcastCalendar ? 1 : props.weekStartsOn,
16
+ firstWeekContainsDate: props.firstWeekContainsDate,
17
+ useAdditionalWeekYearTokens: props.useAdditionalWeekYearTokens,
18
+ useAdditionalDayOfYearTokens: props.useAdditionalDayOfYearTokens,
19
+ timeZone: props.timeZone
20
+ });
21
+ return (React.createElement(DayPickerComponent, { ...props, locale: props.locale ?? faIR, numerals: props.numerals ?? "arabext", dir: props.dir ?? "rtl", dateLib: dateLib }));
22
+ }
23
+ /** Returns the date library used in the calendar. */
24
+ export const getDateLib = (options) => {
25
+ return new DateLib(options, dateFnsJalali);
26
+ };
27
+ //# sourceMappingURL=persian.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persian.js","sourceRoot":"","sources":["../../src/persian.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAElD,OAAO,EACL,OAAO,EAEP,SAAS,IAAI,kBAAkB,EAChC,MAAM,YAAY,CAAC;AAGpB,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AACjC,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AAEjC;;;;GAIG;AACH,MAAM,UAAU,SAAS,CACvB,KAuCC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC;QACzB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,YAAY,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY;QAC9D,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;QAClD,2BAA2B,EAAE,KAAK,CAAC,2BAA2B;QAC9D,4BAA4B,EAAE,KAAK,CAAC,4BAA4B;QAChE,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC,CAAC;IACH,OAAO,CACL,oBAAC,kBAAkB,OACb,KAAK,EACT,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,EAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS,EACrC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,KAAK,EACvB,OAAO,EAAE,OAAO,GAChB,CACH,CAAC;AACJ,CAAC;AAED,qDAAqD;AACrD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAwB,EAAE,EAAE;IACrD,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAC7C,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  import type { DeprecatedUI } from "../UI.js";
3
3
  import type { Locale, DateLib } from "../classes/DateLib.js";
4
- import type { ClassNames, ModifiersClassNames, Styles, ModifiersStyles, CustomComponents, Matcher, Labels, Formatters, MonthChangeEventHandler, DayEventHandler, Modifiers, DateRange, Mode } from "./shared.js";
4
+ import type { ClassNames, ModifiersClassNames, Styles, ModifiersStyles, CustomComponents, Matcher, Labels, Formatters, MonthChangeEventHandler, DayEventHandler, Modifiers, DateRange, Mode, Numerals } from "./shared.js";
5
5
  /**
6
6
  * The props for the `<DayPicker />` component.
7
7
  *
@@ -204,7 +204,8 @@ export interface PropsBase {
204
204
  /**
205
205
  * Show the outside days (days falling in the next or the previous month).
206
206
  *
207
- * **Note:** when {@link broadcastCalendar} is set, this prop defaults to true.
207
+ * **Note:** when a broadcast {@link calendar} is set, this prop defaults to
208
+ * true.
208
209
  *
209
210
  * @see https://daypicker.dev/docs/customization#outside-days
210
211
  */
@@ -213,9 +214,6 @@ export interface PropsBase {
213
214
  * Show the week numbers column. Weeks are numbered according to the local
214
215
  * week index.
215
216
  *
216
- * - To use ISO week numbering, use the `ISOWeek` prop.
217
- * - To change how the week numbers are displayed, use the `formatters` prop.
218
- *
219
217
  * @see https://daypicker.dev/docs/customization#showweeknumber
220
218
  */
221
219
  showWeekNumber?: boolean;
@@ -365,6 +363,26 @@ export interface PropsBase {
365
363
  * @see https://github.com/date-fns/date-fns/tree/main/src/locale for a list of the supported locales
366
364
  */
367
365
  locale?: Partial<Locale> | undefined;
366
+ /**
367
+ * The numeral system to use when formatting dates.
368
+ *
369
+ * - `latn`: Latin (Western Arabic)
370
+ * - `arab`: Arabic-Indic
371
+ * - `arabext`: Eastern Arabic-Indic (Persian)
372
+ * - `deva`: Devanagari
373
+ * - `beng`: Bengali
374
+ * - `guru`: Gurmukhi
375
+ * - `gujr`: Gujarati
376
+ * - `orya`: Oriya
377
+ * - `tamldec`: Tamil
378
+ * - `telu`: Telugu
379
+ * - `knda`: Kannada
380
+ * - `mlym`: Malayalam
381
+ *
382
+ * @defaultValue `latn` Latin (Western Arabic)
383
+ * @see https://daypicker.dev/docs/translation#numeral-systems
384
+ */
385
+ numerals?: Numerals | undefined;
368
386
  /**
369
387
  * The index of the first day of the week (0 - Sunday). Overrides the locale's
370
388
  * one.
@@ -488,7 +506,6 @@ export interface PropsBase {
488
506
  * @param {Date} triggerDate - The date when the event was triggered.
489
507
  * @param {Modifiers} modifiers - The modifiers associated with the event.
490
508
  * @param {React.MouseEvent | React.KeyboardEvent} e - The event object.
491
- * @group DayPicker
492
509
  */
493
510
  export type OnSelectHandler<T> = (selected: T, triggerDate: Date, modifiers: Modifiers, e: React.MouseEvent | React.KeyboardEvent) => void;
494
511
  /**
@@ -358,3 +358,22 @@ export type V9DeprecatedProps =
358
358
  export type MoveFocusDir = "after" | "before";
359
359
  /** The temporal unit to move the focus by. */
360
360
  export type MoveFocusBy = "day" | "week" | "startOfWeek" | "endOfWeek" | "month" | "year";
361
+ /**
362
+ * The numbering system supported by DayPicker.
363
+ *
364
+ * - `latn`: Latin (Western Arabic)
365
+ * - `arab`: Arabic-Indic
366
+ * - `arabext`: Eastern Arabic-Indic (Persian)
367
+ * - `deva`: Devanagari
368
+ * - `beng`: Bengali
369
+ * - `guru`: Gurmukhi
370
+ * - `gujr`: Gujarati
371
+ * - `orya`: Oriya
372
+ * - `tamldec`: Tamil
373
+ * - `telu`: Telugu
374
+ * - `knda`: Kannada
375
+ * - `mlym`: Malayalam
376
+ *
377
+ * @see https://daypicker.dev/docs/translation#numeral-systems
378
+ */
379
+ export type Numerals = "latn" | "arab" | "arabext" | "deva" | "beng" | "guru" | "gujr" | "orya" | "tamldec" | "telu" | "knda" | "mlym";
@@ -1,4 +1,3 @@
1
- import { TZDate } from "@date-fns/tz";
2
1
  import { DayFlag } from "./UI.js";
3
2
  import { dateMatchModifiers } from "./utils/dateMatchModifiers.js";
4
3
  /**
@@ -33,12 +32,7 @@ export function useGetModifiers(days, props, dateLib) {
33
32
  // Broadcast calendar will show outside days as default
34
33
  (!broadcastCalendar && !showOutsideDays && isOutside) ||
35
34
  (broadcastCalendar && showOutsideDays === false && isOutside);
36
- const isToday = isSameDay(date, today ??
37
- (props.timeZone
38
- ? TZDate.tz(props.timeZone)
39
- : dateLib.Date
40
- ? new dateLib.Date()
41
- : new Date()));
35
+ const isToday = isSameDay(date, today ?? dateLib.today());
42
36
  if (isOutside)
43
37
  internalModifiersMap.outside.push(day);
44
38
  if (isDisabled)
@@ -1 +1 @@
1
- {"version":3,"file":"useGetModifiers.js","sourceRoot":"","sources":["../../src/useGetModifiers.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useGetModifiers.js","sourceRoot":"","sources":["../../src/useGetModifiers.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import React from "react";
2
+
3
+ import { grid, monthDropdown, nextButton } from "@/test/elements";
4
+ import { render } from "@/test/render";
5
+ import { user } from "@/test/user";
6
+
7
+ import { DropdownMonths } from "./DropdownMonths";
8
+
9
+ const today = new Date(2015, 11, 1);
10
+
11
+ beforeAll(() => jest.setSystemTime(today));
12
+ afterAll(() => jest.useRealTimers());
13
+
14
+ beforeEach(() => {
15
+ render(<DropdownMonths />);
16
+ });
17
+
18
+ test("should display the month dropdown", () => {
19
+ expect(monthDropdown()).toBeInTheDocument();
20
+ });
21
+
22
+ test("should allow all months", async () => {
23
+ expect(grid()).toHaveAccessibleName(`December 2015`);
24
+ await user.click(nextButton());
25
+ expect(grid()).toHaveAccessibleName(`January 2016`);
26
+ });
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+
3
+ import { DayPicker } from "react-day-picker";
4
+
5
+ export function DropdownMonths() {
6
+ return <DayPicker captionLayout="dropdown-months" />;
7
+ }
@@ -0,0 +1,18 @@
1
+ import React from "react";
2
+
3
+ import { render } from "@testing-library/react";
4
+
5
+ import { grid } from "@/test/elements";
6
+
7
+ import { Numerals } from "./Numerals";
8
+
9
+ const today = new Date(2025, 10, 25);
10
+
11
+ beforeAll(() => jest.setSystemTime(today));
12
+ afterAll(() => jest.useRealTimers());
13
+
14
+ test("should use Devanagari numerals", () => {
15
+ render(<Numerals />);
16
+
17
+ expect(grid()).toHaveTextContent("२५");
18
+ });
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+
3
+ import { hi } from "date-fns/locale/hi";
4
+ import { DayPicker } from "react-day-picker";
5
+
6
+ export function Numerals() {
7
+ return <DayPicker numerals="deva" locale={hi} />;
8
+ }
@@ -0,0 +1,16 @@
1
+ import React from "react";
2
+
3
+ import { grid } from "@/test/elements";
4
+ import { render } from "@/test/render";
5
+
6
+ import { Persian } from "./Persian";
7
+
8
+ const today = new Date(2024, 11, 22);
9
+
10
+ beforeAll(() => jest.setSystemTime(today));
11
+ afterAll(() => jest.useRealTimers());
12
+
13
+ test("should render دی 1403", () => {
14
+ render(<Persian />);
15
+ expect(grid("دی ۱۴۰۳")).toBeInTheDocument();
16
+ });
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+
3
+ import { DayPicker } from "react-day-picker/persian";
4
+
5
+ export function Persian() {
6
+ return <DayPicker mode="single" />;
7
+ }
@@ -0,0 +1,19 @@
1
+ import React from "react";
2
+
3
+ import { DayPicker, getDateLib, enUS } from "react-day-picker/persian";
4
+
5
+ export function PersianEn() {
6
+ const [selected, setSelected] = React.useState(new Date());
7
+ const dateLib = getDateLib({ locale: enUS });
8
+ return (
9
+ <DayPicker
10
+ locale={enUS}
11
+ mode="single"
12
+ selected={selected}
13
+ required
14
+ onSelect={setSelected}
15
+ numerals="latn"
16
+ footer={`Selected: ${dateLib.format(selected, "d MMM yyyy")}`}
17
+ />
18
+ );
19
+ }
@@ -0,0 +1,16 @@
1
+ import React from "react";
2
+
3
+ import { grid } from "@/test/elements";
4
+ import { render } from "@/test/render";
5
+
6
+ import { PersianFormatted } from "./PersianFormatted";
7
+
8
+ const today = new Date(2024, 11, 22);
9
+
10
+ beforeAll(() => jest.setSystemTime(today));
11
+ afterAll(() => jest.useRealTimers());
12
+
13
+ test("should render دی 1403", () => {
14
+ render(<PersianFormatted />);
15
+ expect(grid("دی ۱۴۰۳")).toBeInTheDocument();
16
+ });
@@ -0,0 +1,20 @@
1
+ import React from "react";
2
+
3
+ import { DayPicker, faIR, getDateLib } from "react-day-picker/persian";
4
+
5
+ export function PersianFormatted() {
6
+ const [selected, setSelected] = React.useState(new Date());
7
+ const dateLib = getDateLib({
8
+ locale: faIR,
9
+ numerals: "arabext"
10
+ });
11
+ return (
12
+ <DayPicker
13
+ mode="single"
14
+ selected={selected}
15
+ required
16
+ onSelect={setSelected}
17
+ footer={`انتخاب شده: ${dateLib.format(selected, "yyyy/MM/dd")}`}
18
+ />
19
+ );
20
+ }
package/examples/index.ts CHANGED
@@ -16,6 +16,7 @@ export * from "./Dialog";
16
16
  export * from "./Disabled";
17
17
  export * from "./DisableNavigation";
18
18
  export * from "./Dropdown";
19
+ export * from "./DropdownMonths";
19
20
  export * from "./DropdownMultipleMonths";
20
21
  export * from "./Fixedweeks";
21
22
  export * from "./FocusRecursive";
@@ -29,7 +30,6 @@ export * from "./InputRange";
29
30
  export * from "./InputTime";
30
31
  export * from "./ItalianLabels";
31
32
  export * from "./ItalianLabels";
32
- export * from "./Jalali";
33
33
  export * from "./Keyboard";
34
34
  export * from "./ModifiersClassnames";
35
35
  export * from "./ModifiersCustom";
@@ -43,9 +43,12 @@ export * from "./MultipleMinMax";
43
43
  export * from "./MultipleRequired";
44
44
  export * from "./MultipleMonths";
45
45
  export * from "./MultipleMonthsPaged";
46
- export * from "./NumberingSystem";
46
+ export * from "./Numerals";
47
47
  export * from "./OutsideDays";
48
48
  export * from "./PastDatesDisabled";
49
+ export * from "./Persian";
50
+ export * from "./PersianFormatted";
51
+ export * from "./PersianEn";
49
52
  export * from "./Range";
50
53
  export * from "./RangeExcludeDisabled";
51
54
  export * from "./RangeLong";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-day-picker",
3
- "version": "9.4.4",
3
+ "version": "9.5.0",
4
4
  "description": "Customizable Date Picker for React",
5
5
  "author": "Giampaolo Bellavite <io@gpbl.dev>",
6
6
  "homepage": "https://daypicker.dev",
@@ -42,6 +42,16 @@
42
42
  "default": "./dist/cjs/jalali.js"
43
43
  }
44
44
  },
45
+ "./persian": {
46
+ "import": {
47
+ "types": "./dist/esm/persian.d.ts",
48
+ "default": "./dist/esm/persian.js"
49
+ },
50
+ "require": {
51
+ "types": "./dist/cjs/persian.d.ts",
52
+ "default": "./dist/cjs/persian.js"
53
+ }
54
+ },
45
55
  "./locale": {
46
56
  "import": {
47
57
  "types": "./dist/esm/locale.d.ts",
@@ -153,7 +163,8 @@
153
163
  "build:esm": "tsc --project tsconfig-esm.json",
154
164
  "build:css": "./scripts/build-css.sh ./src/style.css ./src/style.module.css",
155
165
  "lint": "eslint .",
156
- "test": "jest",
166
+ "test": "jest --selectProjects examples --selectProjects src",
167
+ "test:build": "jest --selectProjects examples/built",
157
168
  "test-watch": "jest --watch",
158
169
  "typecheck": "tsc --project ./tsconfig.json --noEmit",
159
170
  "typecheck-watch": "tsc --project ./tsconfig.json --noEmit --watch"
@@ -174,7 +185,8 @@
174
185
  ],
175
186
  "dependencies": {
176
187
  "@date-fns/tz": "^1.2.0",
177
- "date-fns": "^4.1.0"
188
+ "date-fns": "^4.1.0",
189
+ "date-fns-jalali": "^4.1.0-0"
178
190
  },
179
191
  "devDependencies": {
180
192
  "@jest/types": "^29.6.3",
@@ -187,24 +199,24 @@
187
199
  "@trivago/prettier-plugin-sort-imports": "^5.2.0",
188
200
  "@types/jest": "^29.5.14",
189
201
  "@types/node": "^22.10.2",
190
- "@types/react": "^19.0.1",
202
+ "@types/react": "^19.0.2",
191
203
  "@types/react-dom": "^19.0.2",
192
- "@typescript-eslint/eslint-plugin": "^8.18.0",
193
- "@typescript-eslint/parser": "^8.18.0",
194
- "date-fns-jalali": "^3.6.0-1",
204
+ "@typescript-eslint/eslint-plugin": "^8.18.2",
205
+ "@typescript-eslint/parser": "^8.18.2",
195
206
  "eslint": "^8.57.1",
196
207
  "eslint-config-prettier": "^9.1.0",
197
208
  "eslint-import-resolver-typescript": "^3.7.0",
198
209
  "eslint-plugin-import": "^2.31.0",
199
- "eslint-plugin-jest": "^28.9.0",
210
+ "eslint-plugin-jest": "^28.10.0",
200
211
  "eslint-plugin-prettier": "^5.2.1",
201
- "eslint-plugin-react": "^7.37.2",
212
+ "eslint-plugin-react": "^7.37.3",
202
213
  "eslint-plugin-react-hooks": "^5.1.0",
203
214
  "eslint-plugin-require-extensions": "^0.1.3",
204
215
  "eslint-plugin-testing-library": "^6.5.0",
205
- "html-validate": "^8.27.0",
216
+ "html-validate": "^8.29.0",
206
217
  "jest": "^29.7.0",
207
218
  "jest-environment-jsdom": "^29.7.0",
219
+ "jest-transform-css": "^6.0.1",
208
220
  "mockdate": "^3.0.5",
209
221
  "prettier": "^3.4.2",
210
222
  "prettier-plugin-jsdoc": "^1.3.0",
@@ -1,7 +1,6 @@
1
1
  import React from "react";
2
2
 
3
3
  import { startOfDay, startOfMonth } from "date-fns";
4
- import { defaultLocale } from "react-day-picker";
5
4
 
6
5
  import {
7
6
  activeElement,
@@ -14,6 +13,7 @@ import { fireEvent, render, screen } from "@/test/render";
14
13
  import { user } from "@/test/user";
15
14
 
16
15
  import { DayPicker } from "./DayPicker";
16
+ import { defaultLocale } from "./classes/DateLib";
17
17
  import { MonthProps } from "./components/Month";
18
18
  import { MonthsProps } from "./components/Months";
19
19
 
package/src/DayPicker.tsx CHANGED
@@ -47,7 +47,9 @@ export function DayPicker(props: DayPickerProps) {
47
47
  weekStartsOn: props.broadcastCalendar ? 1 : props.weekStartsOn,
48
48
  firstWeekContainsDate: props.firstWeekContainsDate,
49
49
  useAdditionalWeekYearTokens: props.useAdditionalWeekYearTokens,
50
- useAdditionalDayOfYearTokens: props.useAdditionalDayOfYearTokens
50
+ useAdditionalDayOfYearTokens: props.useAdditionalDayOfYearTokens,
51
+ timeZone: props.timeZone,
52
+ numerals: props.numerals
51
53
  },
52
54
  props.dateLib
53
55
  );
@@ -61,17 +63,19 @@ export function DayPicker(props: DayPickerProps) {
61
63
  classNames: { ...getDefaultClassNames(), ...props.classNames }
62
64
  };
63
65
  }, [
64
- props.classNames,
65
- props.components,
66
- props.dateLib,
66
+ props.locale,
67
+ props.broadcastCalendar,
68
+ props.weekStartsOn,
67
69
  props.firstWeekContainsDate,
70
+ props.useAdditionalWeekYearTokens,
71
+ props.useAdditionalDayOfYearTokens,
72
+ props.timeZone,
73
+ props.numerals,
74
+ props.dateLib,
75
+ props.components,
68
76
  props.formatters,
69
77
  props.labels,
70
- props.locale,
71
- props.useAdditionalDayOfYearTokens,
72
- props.useAdditionalWeekYearTokens,
73
- props.weekStartsOn,
74
- props.broadcastCalendar
78
+ props.classNames
75
79
  ]);
76
80
 
77
81
  const {
@@ -140,8 +144,8 @@ export function DayPicker(props: DayPickerProps) {
140
144
  } = labels;
141
145
 
142
146
  const weekdays = useMemo(
143
- () => getWeekdays(dateLib, props.ISOWeek, props.timeZone),
144
- [dateLib, props.ISOWeek, props.timeZone]
147
+ () => getWeekdays(dateLib, props.ISOWeek),
148
+ [dateLib, props.ISOWeek]
145
149
  );
146
150
 
147
151
  const isInteractive = mode !== undefined || onDayClick !== undefined;
@@ -344,14 +348,11 @@ export function DayPicker(props: DayPickerProps) {
344
348
  onChange={handleMonthChange(calendarMonth.date)}
345
349
  options={dropdownMonths}
346
350
  style={styles?.[UI.Dropdown]}
347
- value={calendarMonth.date.getMonth()}
351
+ value={dateLib.getMonth(calendarMonth.date)}
348
352
  />
349
353
  ) : (
350
354
  <span role="status" aria-live="polite">
351
- {formatMonthDropdown(
352
- calendarMonth.date.getMonth(),
353
- locale
354
- )}
355
+ {formatMonthDropdown(calendarMonth.date, dateLib)}
355
356
  </span>
356
357
  )}
357
358
  {captionLayout === "dropdown" ||
@@ -365,11 +366,11 @@ export function DayPicker(props: DayPickerProps) {
365
366
  onChange={handleYearChange(calendarMonth.date)}
366
367
  options={dropdownYears}
367
368
  style={styles?.[UI.Dropdown]}
368
- value={calendarMonth.date.getFullYear()}
369
+ value={dateLib.getYear(calendarMonth.date)}
369
370
  />
370
371
  ) : (
371
372
  <span role="status" aria-live="polite">
372
- {formatYearDropdown(calendarMonth.date.getFullYear())}
373
+ {formatYearDropdown(calendarMonth.date, dateLib)}
373
374
  </span>
374
375
  )}
375
376
  </components.DropdownNav>