aryan-date-picker 0.1.1 → 0.1.2

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.
package/README.md CHANGED
@@ -51,6 +51,65 @@ For lightweight usage, omit `value` and optionally provide `defaultValue` to let
51
51
  <DateRangePicker defaultValue={{ startDate: new Date(), endDate: null }} />
52
52
  ```
53
53
 
54
+ ## Date constraints
55
+
56
+ Use `minDate` and `maxDate` on either picker to limit selectable dates and calendar navigation. Dates outside the range are rendered as disabled, cannot be selected, and navigation arrows stop at the first/last month that can contain valid dates.
57
+
58
+ ```tsx
59
+ const minDate = new Date(2026, 6, 10);
60
+ const maxDate = new Date(2026, 8, 20);
61
+
62
+ <DatePicker minDate={minDate} maxDate={maxDate} />
63
+ <DateRangePicker minDate={minDate} maxDate={maxDate} />
64
+ ```
65
+
66
+ The constraint logic is adapter-driven, so custom calendar adapters decide whether a date is disabled and whether a month transition is allowed. If `minDate` or `maxDate` falls inside the visible month, only the out-of-range days in that month are disabled.
67
+
68
+ ## DateRangePicker view modes
69
+
70
+ `DateRangePicker` supports two mobile presentation strategies through `viewMode`:
71
+
72
+ - `"infinite"` (default) keeps the existing mobile behavior by rendering a continuous multi-month stack.
73
+ - `"single"` renders one mobile month at a time with previous/next arrow navigation.
74
+
75
+ Desktop keeps the two-calendar range layout in both modes.
76
+
77
+ ```tsx
78
+ <DateRangePicker viewMode="infinite" />
79
+ <DateRangePicker viewMode="single" minDate={minDate} maxDate={maxDate} />
80
+ ```
81
+
82
+ Both modes reuse the same adapter-based month generation and range selection logic, so `renderDay`, disabled days, and boundary-aware navigation behave consistently.
83
+
84
+ ## Custom day rendering
85
+
86
+ Use `renderDay` on either `DatePicker` or `DateRangePicker` to customize the visual contents of each calendar day. The picker still owns selection, range calculation, disabled state, focus behavior, and accessibility attributes; your renderer receives the already-computed state and returns only the content to display inside the safe day-cell container.
87
+
88
+ ```tsx
89
+ import { DatePicker, type CalendarRenderDayProps } from 'aryan-date-picker';
90
+
91
+ const prices: Record<string, number> = {
92
+ '2026-07-14': 129,
93
+ };
94
+
95
+ function BookingDay(day: CalendarRenderDayProps) {
96
+ const price = prices[day.date.toISOString().slice(0, 10)];
97
+
98
+ return (
99
+ <span className={day.isSelected ? 'selected-booking-day' : undefined}>
100
+ <span>{day.label}</span>
101
+ {price ? <small>${price}</small> : null}
102
+ </span>
103
+ );
104
+ }
105
+
106
+ export function BookingCalendar() {
107
+ return <DatePicker renderDay={BookingDay} />;
108
+ }
109
+ ```
110
+
111
+ The same prop is available on `DateRangePicker`, including both desktop calendars and the mobile multi-month layout.
112
+
54
113
  ## Why the localization layer exists
55
114
 
56
115
  Date pickers need more than translated labels. Different calendars can have different years, month boundaries, month lengths, leap-year rules, weekday ordering, formatting, navigation behavior, and layout direction. Aryan Date Picker keeps those responsibilities behind a `CalendarAdapter` so `DatePicker`, `DateRangePicker`, and `Calendar` can stay calendar-agnostic.
@@ -150,6 +209,7 @@ A custom adapter owns:
150
209
  - `startOfMonth`, `endOfMonth`, and `addMonths`
151
210
  - day/month comparisons
152
211
  - date formatting and parsing
212
+ - min/max constraint helpers for disabled days and allowed month navigation
153
213
  - layout direction (`'ltr'` or `'rtl'`)
154
214
 
155
215
  ```tsx
package/dist/index.css CHANGED
@@ -1 +1 @@
1
- .adp-picker,.adp-date-picker,.adp-date-picker *{box-sizing:border-box}.adp-picker{display:inline-flex;flex-direction:column;gap:.75rem;font:inherit;color:#111827}.adp-date-picker{width:18rem;display:inline-flex;flex-direction:column;gap:.5rem;padding:.75rem;border:1px solid #d1d5db;border-radius:.75rem;background:#fff}.adp-calendar-header{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.adp-calendar-header-centered{justify-content:center}.adp-month-label{font-weight:600}.adp-nav-button,.adp-day{border:0;font:inherit;cursor:pointer}.adp-nav-button{width:2rem;height:2rem;border-radius:999px;background:#f3f4f6;color:#111827}.adp-range-calendars{display:flex;align-items:center;gap:.5rem}.adp-range-calendar-surface{display:flex;align-items:stretch}.adp-range-calendar-surface .adp-date-picker{border-radius:0}.adp-range-calendar-surface .adp-date-picker:first-child{border-start-start-radius:.75rem;border-end-start-radius:.75rem}.adp-range-calendar-surface .adp-date-picker:last-child{margin-inline-start:-1px;border-start-end-radius:.75rem;border-end-end-radius:.75rem}.adp-range-nav-button{flex:0 0 auto}.adp-nav-button:hover,.adp-day:not(.adp-day-placeholder):hover{background:#e5e7eb}.adp-calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:.25rem}.adp-weekdays{margin-top:.25rem}.adp-weekday{color:#6b7280;font-size:.75rem;font-weight:600;text-align:center}.adp-day{min-width:2rem;height:2rem;border-radius:999px;background:transparent;color:#111827}.adp-day-placeholder{cursor:default;pointer-events:none}.adp-day-in-range{border-radius:.25rem;background:#dbeafe}.adp-day-selected,.adp-day-range-start,.adp-day-range-end{background:#2563eb;color:#fff}.adp-day-selected:hover,.adp-day-range-start:hover,.adp-day-range-end:hover{background:#1d4ed8}.adp-selection-label{color:#4b5563;font-size:.875rem}.adp-range-calendars-mobile{display:none}@media(max-width:640px){.adp-picker{width:100%}.adp-date-picker{width:100%;padding:.5rem;border-radius:.5rem}.adp-day{width:100%;min-width:0;height:2.5rem}.adp-range-calendars-desktop{display:none}.adp-range-calendars-mobile{display:flex;width:100%;flex-direction:column;gap:0}.adp-range-calendars-mobile .adp-date-picker{border-radius:0}.adp-range-calendars-mobile .adp-date-picker+.adp-date-picker{margin-top:-1px}.adp-range-calendars-mobile .adp-date-picker:first-child{border-start-start-radius:.5rem;border-start-end-radius:.5rem}.adp-range-calendars-mobile .adp-date-picker:last-child{border-end-start-radius:.5rem;border-end-end-radius:.5rem}}
1
+ .adp-picker,.adp-date-picker,.adp-date-picker *{box-sizing:border-box}.adp-picker{display:inline-flex;flex-direction:column;gap:.75rem;font:inherit;color:#111827}.adp-date-picker{width:18rem;display:inline-flex;flex-direction:column;gap:.5rem;padding:.75rem;border:1px solid #d1d5db;border-radius:.75rem;background:#fff}.adp-calendar-header{display:grid;grid-template-columns:2rem minmax(0,1fr) 2rem;align-items:center;gap:.5rem}.adp-calendar-header-centered{display:flex;justify-content:center}.adp-calendar-header-spacer{width:2rem;height:2rem}.adp-month-label{min-width:0;font-weight:600;text-align:center}.adp-nav-button,.adp-day{border:0;font:inherit;cursor:pointer}.adp-nav-button{width:2rem;height:2rem;border-radius:999px;background:#f3f4f6;color:#111827}.adp-range-calendars{display:flex;align-items:center;gap:.5rem}.adp-range-calendar-surface{display:flex;align-items:stretch}.adp-range-calendar-surface .adp-date-picker{border-radius:0}.adp-range-calendar-surface .adp-date-picker:first-child{border-start-start-radius:.75rem;border-end-start-radius:.75rem}.adp-range-calendar-surface .adp-date-picker:last-child{margin-inline-start:-1px;border-start-end-radius:.75rem;border-end-end-radius:.75rem}.adp-range-nav-button{flex:0 0 auto}.adp-nav-button:not(:disabled):hover,.adp-day:not(.adp-day-placeholder):not(:disabled):hover{background:#e5e7eb}.adp-nav-button:disabled,.adp-day:disabled{cursor:not-allowed;opacity:.45}.adp-calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:.25rem}.adp-weekdays{margin-top:.25rem}.adp-weekday{color:#6b7280;font-size:.75rem;font-weight:600;text-align:center}.adp-day{display:inline-flex;align-items:center;justify-content:center;width:100%;min-width:0;height:auto;aspect-ratio:1;border-radius:999px;background:transparent;color:#111827}.adp-day-placeholder{cursor:default;pointer-events:none}.adp-day-disabled{color:#9ca3af}.adp-day-in-range{border-radius:.25rem;background:#dbeafe}.adp-day-selected,.adp-day-range-start,.adp-day-range-end{background:#2563eb;color:#fff}.adp-day-selected:hover,.adp-day-range-start:hover,.adp-day-range-end:hover{background:#1d4ed8}.adp-selection-label{color:#4b5563;font-size:.875rem}.adp-range-calendars-mobile{display:none}@media(max-width:640px){.adp-picker{width:100%}.adp-date-picker{width:100%;padding:.5rem;border-radius:.5rem}.adp-range-calendars-desktop{display:none}.adp-range-calendars-mobile{display:flex;width:100%;flex-direction:column;gap:0}.adp-range-calendars-mobile .adp-date-picker{border-radius:0}.adp-range-calendars-mobile .adp-date-picker+.adp-date-picker{margin-top:-1px}.adp-range-calendars-mobile .adp-date-picker:first-child{border-start-start-radius:.5rem;border-start-end-radius:.5rem}.adp-range-calendars-mobile .adp-date-picker:last-child{border-end-start-radius:.5rem;border-end-end-radius:.5rem}}
package/dist/index.d.mts CHANGED
@@ -1,12 +1,41 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode } from 'react';
3
3
 
4
+ type CalendarDayState = {
5
+ selected?: boolean;
6
+ inRange?: boolean;
7
+ rangeStart?: boolean;
8
+ rangeEnd?: boolean;
9
+ };
10
+ type CalendarRenderDayProps = {
11
+ date: Date;
12
+ isToday: boolean;
13
+ isSelected: boolean;
14
+ isInRange: boolean;
15
+ isRangeStart: boolean;
16
+ isRangeEnd: boolean;
17
+ isOutsideMonth: boolean;
18
+ isDisabled: boolean;
19
+ label: string;
20
+ onClick: () => void;
21
+ onMouseEnter?: () => void;
22
+ onFocus?: () => void;
23
+ tabIndex: number;
24
+ role: 'gridcell';
25
+ 'aria-selected': boolean;
26
+ 'aria-disabled': boolean;
27
+ };
28
+ type RenderCalendarDay = (dayProps: CalendarRenderDayProps) => ReactNode;
29
+
4
30
  type DatePickerProps = {
5
31
  value?: Date | null;
6
32
  defaultValue?: Date | null;
7
33
  onChange?: (date: Date | null) => void;
34
+ renderDay?: RenderCalendarDay;
35
+ minDate?: Date;
36
+ maxDate?: Date;
8
37
  };
9
- declare function DatePicker({ value, defaultValue, onChange }?: DatePickerProps): react.JSX.Element;
38
+ declare function DatePicker({ value, defaultValue, onChange, renderDay, minDate, maxDate }?: DatePickerProps): react.JSX.Element;
10
39
 
11
40
  type LayoutDirection = 'ltr' | 'rtl';
12
41
  type CalendarDay = {
@@ -33,6 +62,10 @@ type CalendarAdapter = {
33
62
  getWeekdayLabels: () => string[];
34
63
  createCalendarMonth: (month: Date) => CalendarDay[];
35
64
  createMonthSequence: (startMonth: Date, count: number) => Date[];
65
+ isDateDisabled: (date: Date, minDate?: Date | null, maxDate?: Date | null) => boolean;
66
+ canNavigateToMonth: (month: Date, visibleMonthCount?: number, minDate?: Date | null, maxDate?: Date | null) => boolean;
67
+ canNavigateMonth: (month: Date, amount: number, visibleMonthCount?: number, minDate?: Date | null, maxDate?: Date | null) => boolean;
68
+ constrainMonth: (month: Date, visibleMonthCount?: number, minDate?: Date | null, maxDate?: Date | null) => Date;
36
69
  parseDate: (value: string) => Date | null;
37
70
  };
38
71
  type GregorianCalendarAdapterOptions = {
@@ -58,8 +91,12 @@ type DateRangePickerProps = {
58
91
  value?: DateRangeValue | null;
59
92
  defaultValue?: DateRangeValue | null;
60
93
  onChange?: (range: DateRangeValue | null) => void;
94
+ renderDay?: RenderCalendarDay;
95
+ minDate?: Date;
96
+ maxDate?: Date;
97
+ viewMode?: 'infinite' | 'single';
61
98
  };
62
- declare function DateRangePicker({ value, defaultValue, onChange }?: DateRangePickerProps): react.JSX.Element;
99
+ declare function DateRangePicker({ value, defaultValue, onChange, renderDay, minDate, maxDate, viewMode }?: DateRangePickerProps): react.JSX.Element;
63
100
 
64
101
  type JalaliCalendarAdapterOptions = {
65
102
  locale?: string | string[];
@@ -69,4 +106,4 @@ type JalaliCalendarAdapterOptions = {
69
106
  declare function createJalaliCalendarAdapter(options?: JalaliCalendarAdapterOptions): CalendarAdapter;
70
107
  declare const jalaliCalendarAdapter: CalendarAdapter;
71
108
 
72
- export { type CalendarAdapter, type CalendarDay, DatePicker, type DatePickerProps, DateRangePicker, type DateRangePickerProps, type DateRangeValue, type GregorianCalendarAdapterOptions, type JalaliCalendarAdapterOptions, type LayoutDirection, LocalizationProvider, type LocalizationProviderProps, createGregorianCalendarAdapter, createJalaliCalendarAdapter, defaultCalendarAdapter, jalaliCalendarAdapter, useCalendarAdapter };
109
+ export { type CalendarAdapter, type CalendarDay, type CalendarDayState, type CalendarRenderDayProps, DatePicker, type DatePickerProps, DateRangePicker, type DateRangePickerProps, type DateRangeValue, type GregorianCalendarAdapterOptions, type JalaliCalendarAdapterOptions, type LayoutDirection, LocalizationProvider, type LocalizationProviderProps, type RenderCalendarDay, createGregorianCalendarAdapter, createJalaliCalendarAdapter, defaultCalendarAdapter, jalaliCalendarAdapter, useCalendarAdapter };
package/dist/index.d.ts CHANGED
@@ -1,12 +1,41 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode } from 'react';
3
3
 
4
+ type CalendarDayState = {
5
+ selected?: boolean;
6
+ inRange?: boolean;
7
+ rangeStart?: boolean;
8
+ rangeEnd?: boolean;
9
+ };
10
+ type CalendarRenderDayProps = {
11
+ date: Date;
12
+ isToday: boolean;
13
+ isSelected: boolean;
14
+ isInRange: boolean;
15
+ isRangeStart: boolean;
16
+ isRangeEnd: boolean;
17
+ isOutsideMonth: boolean;
18
+ isDisabled: boolean;
19
+ label: string;
20
+ onClick: () => void;
21
+ onMouseEnter?: () => void;
22
+ onFocus?: () => void;
23
+ tabIndex: number;
24
+ role: 'gridcell';
25
+ 'aria-selected': boolean;
26
+ 'aria-disabled': boolean;
27
+ };
28
+ type RenderCalendarDay = (dayProps: CalendarRenderDayProps) => ReactNode;
29
+
4
30
  type DatePickerProps = {
5
31
  value?: Date | null;
6
32
  defaultValue?: Date | null;
7
33
  onChange?: (date: Date | null) => void;
34
+ renderDay?: RenderCalendarDay;
35
+ minDate?: Date;
36
+ maxDate?: Date;
8
37
  };
9
- declare function DatePicker({ value, defaultValue, onChange }?: DatePickerProps): react.JSX.Element;
38
+ declare function DatePicker({ value, defaultValue, onChange, renderDay, minDate, maxDate }?: DatePickerProps): react.JSX.Element;
10
39
 
11
40
  type LayoutDirection = 'ltr' | 'rtl';
12
41
  type CalendarDay = {
@@ -33,6 +62,10 @@ type CalendarAdapter = {
33
62
  getWeekdayLabels: () => string[];
34
63
  createCalendarMonth: (month: Date) => CalendarDay[];
35
64
  createMonthSequence: (startMonth: Date, count: number) => Date[];
65
+ isDateDisabled: (date: Date, minDate?: Date | null, maxDate?: Date | null) => boolean;
66
+ canNavigateToMonth: (month: Date, visibleMonthCount?: number, minDate?: Date | null, maxDate?: Date | null) => boolean;
67
+ canNavigateMonth: (month: Date, amount: number, visibleMonthCount?: number, minDate?: Date | null, maxDate?: Date | null) => boolean;
68
+ constrainMonth: (month: Date, visibleMonthCount?: number, minDate?: Date | null, maxDate?: Date | null) => Date;
36
69
  parseDate: (value: string) => Date | null;
37
70
  };
38
71
  type GregorianCalendarAdapterOptions = {
@@ -58,8 +91,12 @@ type DateRangePickerProps = {
58
91
  value?: DateRangeValue | null;
59
92
  defaultValue?: DateRangeValue | null;
60
93
  onChange?: (range: DateRangeValue | null) => void;
94
+ renderDay?: RenderCalendarDay;
95
+ minDate?: Date;
96
+ maxDate?: Date;
97
+ viewMode?: 'infinite' | 'single';
61
98
  };
62
- declare function DateRangePicker({ value, defaultValue, onChange }?: DateRangePickerProps): react.JSX.Element;
99
+ declare function DateRangePicker({ value, defaultValue, onChange, renderDay, minDate, maxDate, viewMode }?: DateRangePickerProps): react.JSX.Element;
63
100
 
64
101
  type JalaliCalendarAdapterOptions = {
65
102
  locale?: string | string[];
@@ -69,4 +106,4 @@ type JalaliCalendarAdapterOptions = {
69
106
  declare function createJalaliCalendarAdapter(options?: JalaliCalendarAdapterOptions): CalendarAdapter;
70
107
  declare const jalaliCalendarAdapter: CalendarAdapter;
71
108
 
72
- export { type CalendarAdapter, type CalendarDay, DatePicker, type DatePickerProps, DateRangePicker, type DateRangePickerProps, type DateRangeValue, type GregorianCalendarAdapterOptions, type JalaliCalendarAdapterOptions, type LayoutDirection, LocalizationProvider, type LocalizationProviderProps, createGregorianCalendarAdapter, createJalaliCalendarAdapter, defaultCalendarAdapter, jalaliCalendarAdapter, useCalendarAdapter };
109
+ export { type CalendarAdapter, type CalendarDay, type CalendarDayState, type CalendarRenderDayProps, DatePicker, type DatePickerProps, DateRangePicker, type DateRangePickerProps, type DateRangeValue, type GregorianCalendarAdapterOptions, type JalaliCalendarAdapterOptions, type LayoutDirection, LocalizationProvider, type LocalizationProviderProps, type RenderCalendarDay, createGregorianCalendarAdapter, createJalaliCalendarAdapter, defaultCalendarAdapter, jalaliCalendarAdapter, useCalendarAdapter };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- 'use strict';var react=require('react'),jsxRuntime=require('react/jsx-runtime');var $=new Set(["ar","fa","he","ur"]);function B(t,r){if(r)return r;let n=(Array.isArray(t)?t[0]:t)?.split("-")[0]?.toLowerCase();return n&&$.has(n)?"rtl":"ltr"}function G(t=0){return (t%7+7)%7}function K(t){let r=Array.isArray(t)?t[0]:t;try{let s=Intl.Locale,n=s?new s(r):null,c=n?.weekInfo?.firstDay??n?.getWeekInfo?.().firstDay;if(typeof c=="number")return c%7}catch{}return 0}function A(t={}){let{locale:r,direction:s}=t,n=G(t.firstDayOfWeek??K(r)),c=B(r,s),d=e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()),o={locale:r,direction:c,today:()=>new Date,startOfDay:d,startOfMonth:e=>new Date(e.getFullYear(),e.getMonth(),1),endOfMonth:e=>new Date(e.getFullYear(),e.getMonth()+1,0),addMonths:(e,a)=>new Date(e.getFullYear(),e.getMonth()+a,1),isBeforeDay:(e,a)=>d(e).getTime()<d(a).getTime(),isSameDay:(e,a)=>!e||!a?false:d(e).getTime()===d(a).getTime(),isSameMonth:(e,a)=>e.getFullYear()===a.getFullYear()&&e.getMonth()===a.getMonth(),isBetweenDays:(e,a,l)=>{if(!a||!l)return false;let i=d(e).getTime();return i>d(a).getTime()&&i<d(l).getTime()},formatInputDate:e=>{if(!e)return "";let a=e.getFullYear(),l=String(e.getMonth()+1).padStart(2,"0"),i=String(e.getDate()).padStart(2,"0");return `${a}-${l}-${i}`},formatMonthLabel:e=>e.toLocaleDateString(r,{month:"long",year:"numeric"}),formatDayOfMonth:e=>String(e.getDate()),getDateKey:e=>o.formatInputDate(e),getWeekdayLabels:()=>Array.from({length:7},(e,a)=>{let l=(n+a)%7;return new Date(2024,0,7+l).toLocaleDateString(r,{weekday:"short"})}),createCalendarMonth:e=>{let a=o.startOfMonth(e),l=(a.getDay()-n+7)%7,i=new Date(a.getFullYear(),a.getMonth(),a.getDate()-l);return Array.from({length:42},(p,g)=>{let y=new Date(i.getFullYear(),i.getMonth(),i.getDate()+g);return {date:y,day:o.formatDayOfMonth(y),isCurrentMonth:o.isSameMonth(y,a)}})},createMonthSequence:(e,a)=>Array.from({length:a},(l,i)=>o.addMonths(e,i)),parseDate:e=>{let a=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e);if(!a)return null;let[,l,i,p]=a,g=new Date(Number(l),Number(i)-1,Number(p));return Number.isNaN(g.getTime())||g.getFullYear()!==Number(l)||g.getMonth()!==Number(i)-1||g.getDate()!==Number(p)?null:g}};return o}var M=A(),P=react.createContext(M);function q({adapter:t,children:r,locale:s,direction:n,firstDayOfWeek:c}){let d=react.useMemo(()=>t??A({locale:s,direction:n,firstDayOfWeek:c}),[t,n,c,s]);return jsxRuntime.jsx(P.Provider,{value:d,children:r})}function h(){return react.useContext(P)}function k({month:t,onMonthChange:r,onDateSelect:s,getDayState:n,showNavigation:c=true}){let d=h(),o=d.createCalendarMonth(t),e=d.getWeekdayLabels();return jsxRuntime.jsxs("div",{className:"adp-date-picker",dir:d.direction,children:[jsxRuntime.jsxs("div",{className:`adp-calendar-header${c?"":" adp-calendar-header-centered"}`,children:[c?jsxRuntime.jsx("button",{type:"button",className:"adp-nav-button",onClick:()=>r(d.addMonths(t,-1)),"aria-label":"Previous month",children:"\u2039"}):null,jsxRuntime.jsx("div",{className:"adp-month-label",children:d.formatMonthLabel(t)}),c?jsxRuntime.jsx("button",{type:"button",className:"adp-nav-button",onClick:()=>r(d.addMonths(t,1)),"aria-label":"Next month",children:"\u203A"}):null]}),jsxRuntime.jsx("div",{className:"adp-calendar-grid adp-weekdays",children:e.map(a=>jsxRuntime.jsx("div",{className:"adp-weekday",children:a},a))}),jsxRuntime.jsx("div",{className:"adp-calendar-grid",children:o.map(a=>{let l=!a.isCurrentMonth,i=l?{}:n(a.date),p=["adp-day",l?"adp-day-placeholder":"",i.selected?"adp-day-selected":"",i.inRange?"adp-day-in-range":"",i.rangeStart?"adp-day-range-start":"",i.rangeEnd?"adp-day-range-end":""].filter(Boolean).join(" ");return jsxRuntime.jsx("button",{type:"button",className:p,onClick:()=>s(a.date),disabled:l,"aria-hidden":l,tabIndex:l?-1:void 0,children:l?null:a.day},d.getDateKey(a.date))})})]})}function O(t,r,s=M){let{startDate:n,endDate:c}=t;return !n||c?{startDate:r,endDate:null}:s.isBeforeDay(r,n)?{startDate:r,endDate:n}:{startDate:n,endDate:r}}function H({value:t,defaultValue:r=null,onChange:s}={}){let n=h(),[c,d]=react.useState(()=>t??r??n.today()),[o,e]=react.useState(r),a=t!==void 0,l=a?t:o,i=p=>{let g=p;a||e(g),s?.(g);};return jsxRuntime.jsxs("div",{style:{direction:n.direction},className:"adp-picker",children:[jsxRuntime.jsx(k,{month:c,onMonthChange:d,onDateSelect:i,getDayState:p=>({selected:n.isSameDay(p,l)})}),jsxRuntime.jsxs("div",{className:"adp-selection-label",children:["Selected date: ",n.formatInputDate(l)||"None"]})]})}var X={startDate:null,endDate:null};function F(t){return t??X}function Z({value:t,defaultValue:r=null,onChange:s}={}){let n=h(),c=F(t??r),[d,o]=react.useState(()=>c.startDate??n.today()),[e,a]=react.useState(c),l=t!==void 0,i=l?F(t):e,p=n.createMonthSequence(d,2),g=n.createMonthSequence(d,9),y=m=>({selected:n.isSameDay(m,i.startDate)||n.isSameDay(m,i.endDate),inRange:n.isBetweenDays(m,i.startDate,i.endDate),rangeStart:n.isSameDay(m,i.startDate),rangeEnd:n.isSameDay(m,i.endDate)}),x=m=>{let j=O(i,m,n);l||a(j),s?.(j);};return jsxRuntime.jsxs("div",{style:{direction:n.direction},className:"adp-picker",children:[jsxRuntime.jsxs("div",{className:"adp-range-calendars adp-range-calendars-desktop",children:[jsxRuntime.jsx("button",{type:"button",className:"adp-nav-button adp-range-nav-button",onClick:()=>o(m=>n.addMonths(m,-1)),"aria-label":"Previous month",children:"\u2039"}),jsxRuntime.jsxs("div",{className:"adp-range-calendar-surface",children:[jsxRuntime.jsx(k,{month:p[0],onMonthChange:o,onDateSelect:x,getDayState:y,showNavigation:false}),jsxRuntime.jsx(k,{month:p[1],onMonthChange:o,onDateSelect:x,getDayState:y,showNavigation:false})]}),jsxRuntime.jsx("button",{type:"button",className:"adp-nav-button adp-range-nav-button",onClick:()=>o(m=>n.addMonths(m,1)),"aria-label":"Next month",children:"\u203A"})]}),jsxRuntime.jsx("div",{className:"adp-range-calendars-mobile",children:g.map(m=>jsxRuntime.jsx(k,{month:m,onMonthChange:o,onDateSelect:x,getDayState:y,showNavigation:false},n.getDateKey(m)))}),jsxRuntime.jsxs("div",{className:"adp-selection-label",children:["Selected range: ",n.formatInputDate(i.startDate)||"Start"," \u2192 ",n.formatInputDate(i.endDate)||"End"]})]})}var ee=["\u0641\u0631\u0648\u0631\u062F\u06CC\u0646","\u0627\u0631\u062F\u06CC\u0628\u0647\u0634\u062A","\u062E\u0631\u062F\u0627\u062F","\u062A\u06CC\u0631","\u0645\u0631\u062F\u0627\u062F","\u0634\u0647\u0631\u06CC\u0648\u0631","\u0645\u0647\u0631","\u0622\u0628\u0627\u0646","\u0622\u0630\u0631","\u062F\u06CC","\u0628\u0647\u0645\u0646","\u0627\u0633\u0641\u0646\u062F"],te=["\u0634","\u06CC","\u062F","\u0633","\u0686","\u067E","\u062C"],ae=["\u06F0","\u06F1","\u06F2","\u06F3","\u06F4","\u06F5","\u06F6","\u06F7","\u06F8","\u06F9"],u=(t,r)=>~~(t/r),D=(t,r)=>t-~~(t/r)*r;function N(t,r,s){let n=u((t+u(r-8,6)+100100)*1461,4)+u(153*D(r+9,12)+2,5)+s-34840408;return n=n-u(u(t+100100+u(r-8,6),100)*3,4)+752,n}function J(t){let r=4*t+139361631;r=r+u(u(4*t+183187720,146097)*3,4)*4-3908;let s=u(D(r,1461),4)*5+308,n=u(D(s,153),5)+1,c=D(u(s,153),12)+1;return {gy:u(r,1461)-100100+u(8-c,6),gm:c,gd:n}}function L(t){let r=[-61,9,38,199,426,686,756,818,1111,1181,1210,1635,2060,2097,2192,2262,2324,2394,2456,3178],s=r.length,n=t+621,c=-14,d=r[0],o=0,e=0;if(t<d||t>=r[s-1])throw new Error(`Invalid Jalali year ${t}`);for(let g=1;g<s&&(o=r[g],e=o-d,!(t<o));g+=1)c+=u(e,33)*8+u(D(e,33),4),d=o;let a=t-d;c+=u(a,33)*8+u(D(a,33)+3,4),D(e,33)===4&&e-a===4&&(c+=1);let l=u(n,4)-u((u(n,100)+1)*3,4)-150,i=20+c-l;e-a<6&&(a=a-e+u(e+4,33)*33);let p=D(D(a+1,33)-1,4);return p===-1&&(p=4),{leap:p,gy:n,march:i}}function ne(t,r,s){let n=L(t);return N(n.gy,3,n.march)+(r-1)*31-u(r,7)*(r-7)+s-1}function re(t){let r=J(t).gy,s=r-621,n=L(s),c=N(r,3,n.march),d=t-c;if(d>=0){if(d<=185)return {jy:s,jm:1+u(d,31),jd:D(d,31)+1};d-=186;}else s-=1,d+=179,n.leap===1&&(d+=1);return {jy:s,jm:7+u(d,30),jd:D(d,30)+1}}function f(t){return re(N(t.getFullYear(),t.getMonth()+1,t.getDate()))}function v(t,r,s){let n=J(ne(t,r,s));return new Date(n.gy,n.gm-1,n.gd)}function oe(t){return L(t).leap===0}function w(t,r){return r<=6?31:r<=11||oe(t)?30:29}function Y(t,r){let s=String(t);return r?s:s.replace(/\d/g,n=>ae[Number(n)])}function W(t={}){let r=t.locale??"fa-IR",s=((t.firstDayOfWeek??6)%7+7)%7,n=t.latinDigits??false,c=o=>new Date(o.getFullYear(),o.getMonth(),o.getDate()),d={locale:r,direction:"rtl",today:()=>new Date,startOfDay:c,startOfMonth:o=>{let e=f(o);return v(e.jy,e.jm,1)},endOfMonth:o=>{let e=f(o);return v(e.jy,e.jm,w(e.jy,e.jm))},addMonths:(o,e)=>{let a=f(o),l=a.jy*12+(a.jm-1)+e,i=Math.floor(l/12),p=(l%12+12)%12+1;return v(i,p,Math.min(a.jd,w(i,p)))},isBeforeDay:(o,e)=>c(o).getTime()<c(e).getTime(),isSameDay:(o,e)=>!!o&&!!e&&c(o).getTime()===c(e).getTime(),isSameMonth:(o,e)=>{let a=f(o),l=f(e);return a.jy===l.jy&&a.jm===l.jm},isBetweenDays:(o,e,a)=>!!e&&!!a&&c(o).getTime()>c(e).getTime()&&c(o).getTime()<c(a).getTime(),formatInputDate:o=>{if(!o)return "";let e=f(o);return `${String(e.jy).padStart(4,"0")}-${String(e.jm).padStart(2,"0")}-${String(e.jd).padStart(2,"0")}`},formatMonthLabel:o=>{let e=f(o);return `${ee[e.jm-1]} ${Y(e.jy,n)}`},formatDayOfMonth:o=>Y(f(o).jd,n),getDateKey:o=>o.toISOString().slice(0,10),getWeekdayLabels:()=>Array.from({length:7},(o,e)=>te[(s+e-6+7)%7]),createCalendarMonth:o=>{let e=d.startOfMonth(o),a=(e.getDay()-s+7)%7,l=new Date(e.getFullYear(),e.getMonth(),e.getDate()-a);return Array.from({length:42},(i,p)=>{let g=new Date(l.getFullYear(),l.getMonth(),l.getDate()+p);return {date:g,day:d.formatDayOfMonth(g),isCurrentMonth:d.isSameMonth(g,e)}})},createMonthSequence:(o,e)=>Array.from({length:e},(a,l)=>d.addMonths(o,l)),parseDate:o=>{let e=/^(\d{4})-(\d{2})-(\d{2})$/.exec(o);if(!e)return null;let a=Number(e[1]),l=Number(e[2]),i=Number(e[3]);return l<1||l>12||i<1||i>w(a,l)?null:v(a,l,i)}};return d}var de=W();exports.DatePicker=H;exports.DateRangePicker=Z;exports.LocalizationProvider=q;exports.createGregorianCalendarAdapter=A;exports.createJalaliCalendarAdapter=W;exports.defaultCalendarAdapter=M;exports.jalaliCalendarAdapter=de;exports.useCalendarAdapter=h;
1
+ 'use strict';var react=require('react'),jsxRuntime=require('react/jsx-runtime');var ae=new Set(["ar","fa","he","ur"]);function te(r,n){if(n)return n;let l=(Array.isArray(r)?r[0]:r)?.split("-")[0]?.toLowerCase();return l&&ae.has(l)?"rtl":"ltr"}function ne(r=0){return (r%7+7)%7}function re(r){let n=Array.isArray(r)?r[0]:r;try{let c=Intl.Locale,l=c?new c(n):null,i=l?.weekInfo?.firstDay??l?.getWeekInfo?.().firstDay;if(typeof i=="number")return i%7}catch{}return 0}function B(r={}){let{locale:n,direction:c}=r,l=ne(r.firstDayOfWeek??re(n)),i=te(n,c),o=e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()),a={locale:n,direction:i,today:()=>new Date,startOfDay:o,startOfMonth:e=>new Date(e.getFullYear(),e.getMonth(),1),endOfMonth:e=>new Date(e.getFullYear(),e.getMonth()+1,0),addMonths:(e,t)=>new Date(e.getFullYear(),e.getMonth()+t,1),isBeforeDay:(e,t)=>o(e).getTime()<o(t).getTime(),isSameDay:(e,t)=>!e||!t?false:o(e).getTime()===o(t).getTime(),isSameMonth:(e,t)=>e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth(),isBetweenDays:(e,t,d)=>{if(!t||!d)return false;let s=o(e).getTime();return s>o(t).getTime()&&s<o(d).getTime()},formatInputDate:e=>{if(!e)return "";let t=e.getFullYear(),d=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0");return `${t}-${d}-${s}`},formatMonthLabel:e=>e.toLocaleDateString(n,{month:"long",year:"numeric"}),formatDayOfMonth:e=>String(e.getDate()),getDateKey:e=>a.formatInputDate(e),getWeekdayLabels:()=>Array.from({length:7},(e,t)=>{let d=(l+t)%7;return new Date(2024,0,7+d).toLocaleDateString(n,{weekday:"short"})}),createCalendarMonth:e=>{let t=a.startOfMonth(e),d=(t.getDay()-l+7)%7,s=new Date(t.getFullYear(),t.getMonth(),t.getDate()-d);return Array.from({length:42},(u,D)=>{let y=new Date(s.getFullYear(),s.getMonth(),s.getDate()+D);return {date:y,day:a.formatDayOfMonth(y),isCurrentMonth:a.isSameMonth(y,t)}})},createMonthSequence:(e,t)=>Array.from({length:t},(d,s)=>a.addMonths(e,s)),isDateDisabled:(e,t,d)=>{let s=a.startOfDay(e);return !!(t&&a.isBeforeDay(s,t)||d&&a.isBeforeDay(d,s))},canNavigateToMonth:(e,t=1,d,s)=>{let u=a.startOfMonth(e),D=a.endOfMonth(a.addMonths(u,Math.max(t-1,0)));return (!d||!a.isBeforeDay(D,d))&&(!s||!a.isBeforeDay(s,u))},canNavigateMonth:(e,t,d=1,s,u)=>a.canNavigateToMonth(a.addMonths(e,t),d,s,u),constrainMonth:(e,t=1,d,s)=>a.canNavigateToMonth(e,t,d,s)?e:d&&a.isBeforeDay(a.endOfMonth(a.addMonths(e,Math.max(t-1,0))),d)?a.startOfMonth(d):s&&a.isBeforeDay(s,a.startOfMonth(e))?a.startOfMonth(s):e,parseDate:e=>{let t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e);if(!t)return null;let[,d,s,u]=t,D=new Date(Number(d),Number(s)-1,Number(u));return Number.isNaN(D.getTime())||D.getFullYear()!==Number(d)||D.getMonth()!==Number(s)-1||D.getDate()!==Number(u)?null:D}};return a}var w=B(),E=react.createContext(w);function oe({adapter:r,children:n,locale:c,direction:l,firstDayOfWeek:i}){let o=react.useMemo(()=>r??B({locale:c,direction:l,firstDayOfWeek:i}),[r,l,i,c]);return jsxRuntime.jsx(E.Provider,{value:o,children:n})}function R(){return react.useContext(E)}var le=react.memo(function({dayProps:n,className:c,renderDay:l}){let i=l?l(n):n.isOutsideMonth?null:n.label;return jsxRuntime.jsx("button",{type:"button",className:c,onClick:n.onClick,onMouseEnter:n.onMouseEnter,onFocus:n.onFocus,disabled:n.isDisabled,"aria-hidden":n.isOutsideMonth,tabIndex:n.tabIndex,role:n.role,"aria-selected":n["aria-selected"],"aria-disabled":n["aria-disabled"],children:i})});function A({month:r,onMonthChange:n,onDateSelect:c,getDayState:l,showNavigation:i=true,isDateDisabled:o,canNavigatePrev:a=true,canNavigateNext:e=true,renderDay:t,headerStart:d,headerEnd:s}){let u=R(),D=u.createCalendarMonth(r),y=u.getWeekdayLabels(),h=u.today();return jsxRuntime.jsxs("div",{className:"adp-date-picker",dir:u.direction,children:[jsxRuntime.jsxs("div",{className:`adp-calendar-header${i||d||s?"":" adp-calendar-header-centered"}`,children:[i?jsxRuntime.jsx("button",{type:"button",className:"adp-nav-button",onClick:()=>a&&n(u.addMonths(r,-1)),disabled:!a,"aria-label":"Previous month",children:"\u2039"}):d??jsxRuntime.jsx("span",{className:"adp-calendar-header-spacer","aria-hidden":"true"}),jsxRuntime.jsx("div",{className:"adp-month-label",children:u.formatMonthLabel(r)}),i?jsxRuntime.jsx("button",{type:"button",className:"adp-nav-button",onClick:()=>e&&n(u.addMonths(r,1)),disabled:!e,"aria-label":"Next month",children:"\u203A"}):s??jsxRuntime.jsx("span",{className:"adp-calendar-header-spacer","aria-hidden":"true"})]}),jsxRuntime.jsx("div",{className:"adp-calendar-grid adp-weekdays",children:y.map(p=>jsxRuntime.jsx("div",{className:"adp-weekday",children:p},p))}),jsxRuntime.jsx("div",{className:"adp-calendar-grid",role:"grid",children:D.map(p=>{let b=!p.isCurrentMonth,m=b?{}:l(p.date),k=b||!!o?.(p.date),N=["adp-day",b?"adp-day-placeholder":"",k&&!b?"adp-day-disabled":"",m.selected?"adp-day-selected":"",m.inRange?"adp-day-in-range":"",m.rangeStart?"adp-day-range-start":"",m.rangeEnd?"adp-day-range-end":"",t?"adp-day-custom":""].filter(Boolean).join(" "),O={date:p.date,isToday:u.isSameDay(p.date,h),isSelected:!!m.selected,isInRange:!!m.inRange,isRangeStart:!!m.rangeStart,isRangeEnd:!!m.rangeEnd,isOutsideMonth:b,isDisabled:k,label:p.day,onClick:()=>{k||c(p.date);},tabIndex:k?-1:0,role:"gridcell","aria-selected":!!m.selected,"aria-disabled":k};return jsxRuntime.jsx(le,{dayProps:O,className:N,renderDay:t},u.getDateKey(p.date))})})]})}function J(r,n,c=w){let{startDate:l,endDate:i}=r;return !l||i?{startDate:n,endDate:null}:c.isBeforeDay(n,l)?{startDate:n,endDate:l}:{startDate:l,endDate:n}}function se({value:r,defaultValue:n=null,onChange:c,renderDay:l,minDate:i,maxDate:o}={}){let a=R(),[e,t]=react.useState(()=>r??n??a.today()),[d,s]=react.useState(n),u=r!==void 0,D=u?r:d,y=a.constrainMonth(e,1,i,o),h=p=>{if(a.isDateDisabled(p,i,o))return;let b=p;u||s(b),c?.(b);};return jsxRuntime.jsx("div",{style:{direction:a.direction},className:"adp-picker",children:jsxRuntime.jsx(A,{month:y,onMonthChange:p=>t(a.constrainMonth(p,1,i,o)),onDateSelect:h,getDayState:p=>({selected:a.isSameDay(p,D)}),isDateDisabled:p=>a.isDateDisabled(p,i,o),canNavigatePrev:a.canNavigateMonth(y,-1,1,i,o),canNavigateNext:a.canNavigateMonth(y,1,1,i,o),renderDay:l})})}var ce={startDate:null,endDate:null};function $(r){return r??ce}function ue({value:r,defaultValue:n=null,onChange:c,renderDay:l,minDate:i,maxDate:o,viewMode:a="infinite"}={}){let e=R(),t=$(r??n),[d,s]=react.useState(()=>t.startDate??e.today()),[u,D]=react.useState(t),y=r!==void 0,h=y?$(r):u,p=e.constrainMonth(d,1,i,o),b=e.createMonthSequence(p,2),m=a==="infinite"?9:1,k=e.createMonthSequence(p,m),N=(f,v=1)=>{s(e.constrainMonth(f,v,i,o));},O=e.canNavigateMonth(p,-1,2,i,o),F=e.canNavigateMonth(p,1,2,i,o),H=e.canNavigateMonth(p,-1,m,i,o),Q=e.canNavigateMonth(p,1,m,i,o),L=f=>({selected:e.isSameDay(f,h.startDate)||e.isSameDay(f,h.endDate),inRange:e.isBetweenDays(f,h.startDate,h.endDate),rangeStart:e.isSameDay(f,h.startDate),rangeEnd:e.isSameDay(f,h.endDate)}),j=f=>{if(e.isDateDisabled(f,i,o))return;let v=J(h,f,e);y||D(v),c?.(v);};return jsxRuntime.jsxs("div",{style:{direction:e.direction},className:"adp-picker",children:[jsxRuntime.jsx("div",{className:"adp-range-calendars adp-range-calendars-desktop",children:jsxRuntime.jsxs("div",{className:"adp-range-calendar-surface",children:[jsxRuntime.jsx(A,{month:b[0],onMonthChange:f=>N(f,2),onDateSelect:j,getDayState:L,showNavigation:false,isDateDisabled:f=>e.isDateDisabled(f,i,o),renderDay:l,headerStart:jsxRuntime.jsx("button",{type:"button",className:"adp-nav-button adp-range-nav-button",onClick:()=>O&&N(e.addMonths(p,-1),2),disabled:!O,"aria-label":"Previous month",children:"\u2039"})}),jsxRuntime.jsx(A,{month:b[1],onMonthChange:f=>N(f,2),onDateSelect:j,getDayState:L,showNavigation:false,isDateDisabled:f=>e.isDateDisabled(f,i,o),renderDay:l,headerEnd:jsxRuntime.jsx("button",{type:"button",className:"adp-nav-button adp-range-nav-button",onClick:()=>F&&N(e.addMonths(p,1),2),disabled:!F,"aria-label":"Next month",children:"\u203A"})})]})}),jsxRuntime.jsx("div",{className:"adp-range-calendars-mobile",children:k.map(f=>jsxRuntime.jsx(A,{month:f,onMonthChange:v=>N(v,m),onDateSelect:j,getDayState:L,showNavigation:a==="single",isDateDisabled:v=>e.isDateDisabled(v,i,o),canNavigatePrev:H,canNavigateNext:Q,renderDay:l},e.getDateKey(f)))})]})}var pe=["\u0641\u0631\u0648\u0631\u062F\u06CC\u0646","\u0627\u0631\u062F\u06CC\u0628\u0647\u0634\u062A","\u062E\u0631\u062F\u0627\u062F","\u062A\u06CC\u0631","\u0645\u0631\u062F\u0627\u062F","\u0634\u0647\u0631\u06CC\u0648\u0631","\u0645\u0647\u0631","\u0622\u0628\u0627\u0646","\u0622\u0630\u0631","\u062F\u06CC","\u0628\u0647\u0645\u0646","\u0627\u0633\u0641\u0646\u062F"],ge=["\u0634","\u06CC","\u062F","\u0633","\u0686","\u067E","\u062C"],De=["\u06F0","\u06F1","\u06F2","\u06F3","\u06F4","\u06F5","\u06F6","\u06F7","\u06F8","\u06F9"],g=(r,n)=>~~(r/n),M=(r,n)=>r-~~(r/n)*n;function I(r,n,c){let l=g((r+g(n-8,6)+100100)*1461,4)+g(153*M(n+9,12)+2,5)+c-34840408;return l=l-g(g(r+100100+g(n-8,6),100)*3,4)+752,l}function q(r){let n=4*r+139361631;n=n+g(g(4*r+183187720,146097)*3,4)*4-3908;let c=g(M(n,1461),4)*5+308,l=g(M(c,153),5)+1,i=M(g(c,153),12)+1;return {gy:g(n,1461)-100100+g(8-i,6),gm:i,gd:l}}function V(r){let n=[-61,9,38,199,426,686,756,818,1111,1181,1210,1635,2060,2097,2192,2262,2324,2394,2456,3178],c=n.length,l=r+621,i=-14,o=n[0],a=0,e=0;if(r<o||r>=n[c-1])throw new Error(`Invalid Jalali year ${r}`);for(let D=1;D<c&&(a=n[D],e=a-o,!(r<a));D+=1)i+=g(e,33)*8+g(M(e,33),4),o=a;let t=r-o;i+=g(t,33)*8+g(M(t,33)+3,4),M(e,33)===4&&e-t===4&&(i+=1);let d=g(l,4)-g((g(l,100)+1)*3,4)-150,s=20+i-d;e-t<6&&(t=t-e+g(e+4,33)*33);let u=M(M(t+1,33)-1,4);return u===-1&&(u=4),{leap:u,gy:l,march:s}}function fe(r,n,c){let l=V(r);return I(l.gy,3,l.march)+(n-1)*31-g(n,7)*(n-7)+c-1}function me(r){let n=q(r).gy,c=n-621,l=V(c),i=I(n,3,l.march),o=r-i;if(o>=0){if(o<=185)return {jy:c,jm:1+g(o,31),jd:M(o,31)+1};o-=186;}else c-=1,o+=179,l.leap===1&&(o+=1);return {jy:c,jm:7+g(o,30),jd:M(o,30)+1}}function S(r){return me(I(r.getFullYear(),r.getMonth()+1,r.getDate()))}function P(r,n,c){let l=q(fe(r,n,c));return new Date(l.gy,l.gm-1,l.gd)}function ye(r){return V(r).leap===0}function T(r,n){return n<=6?31:n<=11||ye(r)?30:29}function K(r,n){let c=String(r);return n?c:c.replace(/\d/g,l=>De[Number(l)])}function U(r={}){let n=r.locale??"fa-IR",c=((r.firstDayOfWeek??6)%7+7)%7,l=r.latinDigits??false,i=a=>new Date(a.getFullYear(),a.getMonth(),a.getDate()),o={locale:n,direction:"rtl",today:()=>new Date,startOfDay:i,startOfMonth:a=>{let e=S(a);return P(e.jy,e.jm,1)},endOfMonth:a=>{let e=S(a);return P(e.jy,e.jm,T(e.jy,e.jm))},addMonths:(a,e)=>{let t=S(a),d=t.jy*12+(t.jm-1)+e,s=Math.floor(d/12),u=(d%12+12)%12+1;return P(s,u,Math.min(t.jd,T(s,u)))},isBeforeDay:(a,e)=>i(a).getTime()<i(e).getTime(),isSameDay:(a,e)=>!!a&&!!e&&i(a).getTime()===i(e).getTime(),isSameMonth:(a,e)=>{let t=S(a),d=S(e);return t.jy===d.jy&&t.jm===d.jm},isBetweenDays:(a,e,t)=>!!e&&!!t&&i(a).getTime()>i(e).getTime()&&i(a).getTime()<i(t).getTime(),formatInputDate:a=>{if(!a)return "";let e=S(a);return `${String(e.jy).padStart(4,"0")}-${String(e.jm).padStart(2,"0")}-${String(e.jd).padStart(2,"0")}`},formatMonthLabel:a=>{let e=S(a);return `${pe[e.jm-1]} ${K(e.jy,l)}`},formatDayOfMonth:a=>K(S(a).jd,l),getDateKey:a=>a.toISOString().slice(0,10),getWeekdayLabels:()=>Array.from({length:7},(a,e)=>ge[(c+e-6+7)%7]),createCalendarMonth:a=>{let e=o.startOfMonth(a),t=(e.getDay()-c+7)%7,d=new Date(e.getFullYear(),e.getMonth(),e.getDate()-t);return Array.from({length:42},(s,u)=>{let D=new Date(d.getFullYear(),d.getMonth(),d.getDate()+u);return {date:D,day:o.formatDayOfMonth(D),isCurrentMonth:o.isSameMonth(D,e)}})},createMonthSequence:(a,e)=>Array.from({length:e},(t,d)=>o.addMonths(a,d)),isDateDisabled:(a,e,t)=>{let d=o.startOfDay(a);return !!(e&&o.isBeforeDay(d,e)||t&&o.isBeforeDay(t,d))},canNavigateToMonth:(a,e=1,t,d)=>{let s=o.startOfMonth(a),u=o.endOfMonth(o.addMonths(s,Math.max(e-1,0)));return (!t||!o.isBeforeDay(u,t))&&(!d||!o.isBeforeDay(d,s))},canNavigateMonth:(a,e,t=1,d,s)=>o.canNavigateToMonth(o.addMonths(a,e),t,d,s),constrainMonth:(a,e=1,t,d)=>o.canNavigateToMonth(a,e,t,d)?a:t&&o.isBeforeDay(o.endOfMonth(o.addMonths(a,Math.max(e-1,0))),t)?o.startOfMonth(t):d&&o.isBeforeDay(d,o.startOfMonth(a))?o.startOfMonth(d):a,parseDate:a=>{let e=/^(\d{4})-(\d{2})-(\d{2})$/.exec(a);if(!e)return null;let t=Number(e[1]),d=Number(e[2]),s=Number(e[3]);return d<1||d>12||s<1||s>T(t,d)?null:P(t,d,s)}};return o}var he=U();exports.DatePicker=se;exports.DateRangePicker=ue;exports.LocalizationProvider=oe;exports.createGregorianCalendarAdapter=B;exports.createJalaliCalendarAdapter=U;exports.defaultCalendarAdapter=w;exports.jalaliCalendarAdapter=he;exports.useCalendarAdapter=R;
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import {createContext,useMemo,useContext,useState}from'react';import {jsx,jsxs}from'react/jsx-runtime';var $=new Set(["ar","fa","he","ur"]);function B(t,r){if(r)return r;let n=(Array.isArray(t)?t[0]:t)?.split("-")[0]?.toLowerCase();return n&&$.has(n)?"rtl":"ltr"}function G(t=0){return (t%7+7)%7}function K(t){let r=Array.isArray(t)?t[0]:t;try{let s=Intl.Locale,n=s?new s(r):null,c=n?.weekInfo?.firstDay??n?.getWeekInfo?.().firstDay;if(typeof c=="number")return c%7}catch{}return 0}function A(t={}){let{locale:r,direction:s}=t,n=G(t.firstDayOfWeek??K(r)),c=B(r,s),d=e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()),o={locale:r,direction:c,today:()=>new Date,startOfDay:d,startOfMonth:e=>new Date(e.getFullYear(),e.getMonth(),1),endOfMonth:e=>new Date(e.getFullYear(),e.getMonth()+1,0),addMonths:(e,a)=>new Date(e.getFullYear(),e.getMonth()+a,1),isBeforeDay:(e,a)=>d(e).getTime()<d(a).getTime(),isSameDay:(e,a)=>!e||!a?false:d(e).getTime()===d(a).getTime(),isSameMonth:(e,a)=>e.getFullYear()===a.getFullYear()&&e.getMonth()===a.getMonth(),isBetweenDays:(e,a,l)=>{if(!a||!l)return false;let i=d(e).getTime();return i>d(a).getTime()&&i<d(l).getTime()},formatInputDate:e=>{if(!e)return "";let a=e.getFullYear(),l=String(e.getMonth()+1).padStart(2,"0"),i=String(e.getDate()).padStart(2,"0");return `${a}-${l}-${i}`},formatMonthLabel:e=>e.toLocaleDateString(r,{month:"long",year:"numeric"}),formatDayOfMonth:e=>String(e.getDate()),getDateKey:e=>o.formatInputDate(e),getWeekdayLabels:()=>Array.from({length:7},(e,a)=>{let l=(n+a)%7;return new Date(2024,0,7+l).toLocaleDateString(r,{weekday:"short"})}),createCalendarMonth:e=>{let a=o.startOfMonth(e),l=(a.getDay()-n+7)%7,i=new Date(a.getFullYear(),a.getMonth(),a.getDate()-l);return Array.from({length:42},(p,g)=>{let y=new Date(i.getFullYear(),i.getMonth(),i.getDate()+g);return {date:y,day:o.formatDayOfMonth(y),isCurrentMonth:o.isSameMonth(y,a)}})},createMonthSequence:(e,a)=>Array.from({length:a},(l,i)=>o.addMonths(e,i)),parseDate:e=>{let a=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e);if(!a)return null;let[,l,i,p]=a,g=new Date(Number(l),Number(i)-1,Number(p));return Number.isNaN(g.getTime())||g.getFullYear()!==Number(l)||g.getMonth()!==Number(i)-1||g.getDate()!==Number(p)?null:g}};return o}var M=A(),P=createContext(M);function q({adapter:t,children:r,locale:s,direction:n,firstDayOfWeek:c}){let d=useMemo(()=>t??A({locale:s,direction:n,firstDayOfWeek:c}),[t,n,c,s]);return jsx(P.Provider,{value:d,children:r})}function h(){return useContext(P)}function k({month:t,onMonthChange:r,onDateSelect:s,getDayState:n,showNavigation:c=true}){let d=h(),o=d.createCalendarMonth(t),e=d.getWeekdayLabels();return jsxs("div",{className:"adp-date-picker",dir:d.direction,children:[jsxs("div",{className:`adp-calendar-header${c?"":" adp-calendar-header-centered"}`,children:[c?jsx("button",{type:"button",className:"adp-nav-button",onClick:()=>r(d.addMonths(t,-1)),"aria-label":"Previous month",children:"\u2039"}):null,jsx("div",{className:"adp-month-label",children:d.formatMonthLabel(t)}),c?jsx("button",{type:"button",className:"adp-nav-button",onClick:()=>r(d.addMonths(t,1)),"aria-label":"Next month",children:"\u203A"}):null]}),jsx("div",{className:"adp-calendar-grid adp-weekdays",children:e.map(a=>jsx("div",{className:"adp-weekday",children:a},a))}),jsx("div",{className:"adp-calendar-grid",children:o.map(a=>{let l=!a.isCurrentMonth,i=l?{}:n(a.date),p=["adp-day",l?"adp-day-placeholder":"",i.selected?"adp-day-selected":"",i.inRange?"adp-day-in-range":"",i.rangeStart?"adp-day-range-start":"",i.rangeEnd?"adp-day-range-end":""].filter(Boolean).join(" ");return jsx("button",{type:"button",className:p,onClick:()=>s(a.date),disabled:l,"aria-hidden":l,tabIndex:l?-1:void 0,children:l?null:a.day},d.getDateKey(a.date))})})]})}function O(t,r,s=M){let{startDate:n,endDate:c}=t;return !n||c?{startDate:r,endDate:null}:s.isBeforeDay(r,n)?{startDate:r,endDate:n}:{startDate:n,endDate:r}}function H({value:t,defaultValue:r=null,onChange:s}={}){let n=h(),[c,d]=useState(()=>t??r??n.today()),[o,e]=useState(r),a=t!==void 0,l=a?t:o,i=p=>{let g=p;a||e(g),s?.(g);};return jsxs("div",{style:{direction:n.direction},className:"adp-picker",children:[jsx(k,{month:c,onMonthChange:d,onDateSelect:i,getDayState:p=>({selected:n.isSameDay(p,l)})}),jsxs("div",{className:"adp-selection-label",children:["Selected date: ",n.formatInputDate(l)||"None"]})]})}var X={startDate:null,endDate:null};function F(t){return t??X}function Z({value:t,defaultValue:r=null,onChange:s}={}){let n=h(),c=F(t??r),[d,o]=useState(()=>c.startDate??n.today()),[e,a]=useState(c),l=t!==void 0,i=l?F(t):e,p=n.createMonthSequence(d,2),g=n.createMonthSequence(d,9),y=m=>({selected:n.isSameDay(m,i.startDate)||n.isSameDay(m,i.endDate),inRange:n.isBetweenDays(m,i.startDate,i.endDate),rangeStart:n.isSameDay(m,i.startDate),rangeEnd:n.isSameDay(m,i.endDate)}),x=m=>{let j=O(i,m,n);l||a(j),s?.(j);};return jsxs("div",{style:{direction:n.direction},className:"adp-picker",children:[jsxs("div",{className:"adp-range-calendars adp-range-calendars-desktop",children:[jsx("button",{type:"button",className:"adp-nav-button adp-range-nav-button",onClick:()=>o(m=>n.addMonths(m,-1)),"aria-label":"Previous month",children:"\u2039"}),jsxs("div",{className:"adp-range-calendar-surface",children:[jsx(k,{month:p[0],onMonthChange:o,onDateSelect:x,getDayState:y,showNavigation:false}),jsx(k,{month:p[1],onMonthChange:o,onDateSelect:x,getDayState:y,showNavigation:false})]}),jsx("button",{type:"button",className:"adp-nav-button adp-range-nav-button",onClick:()=>o(m=>n.addMonths(m,1)),"aria-label":"Next month",children:"\u203A"})]}),jsx("div",{className:"adp-range-calendars-mobile",children:g.map(m=>jsx(k,{month:m,onMonthChange:o,onDateSelect:x,getDayState:y,showNavigation:false},n.getDateKey(m)))}),jsxs("div",{className:"adp-selection-label",children:["Selected range: ",n.formatInputDate(i.startDate)||"Start"," \u2192 ",n.formatInputDate(i.endDate)||"End"]})]})}var ee=["\u0641\u0631\u0648\u0631\u062F\u06CC\u0646","\u0627\u0631\u062F\u06CC\u0628\u0647\u0634\u062A","\u062E\u0631\u062F\u0627\u062F","\u062A\u06CC\u0631","\u0645\u0631\u062F\u0627\u062F","\u0634\u0647\u0631\u06CC\u0648\u0631","\u0645\u0647\u0631","\u0622\u0628\u0627\u0646","\u0622\u0630\u0631","\u062F\u06CC","\u0628\u0647\u0645\u0646","\u0627\u0633\u0641\u0646\u062F"],te=["\u0634","\u06CC","\u062F","\u0633","\u0686","\u067E","\u062C"],ae=["\u06F0","\u06F1","\u06F2","\u06F3","\u06F4","\u06F5","\u06F6","\u06F7","\u06F8","\u06F9"],u=(t,r)=>~~(t/r),D=(t,r)=>t-~~(t/r)*r;function N(t,r,s){let n=u((t+u(r-8,6)+100100)*1461,4)+u(153*D(r+9,12)+2,5)+s-34840408;return n=n-u(u(t+100100+u(r-8,6),100)*3,4)+752,n}function J(t){let r=4*t+139361631;r=r+u(u(4*t+183187720,146097)*3,4)*4-3908;let s=u(D(r,1461),4)*5+308,n=u(D(s,153),5)+1,c=D(u(s,153),12)+1;return {gy:u(r,1461)-100100+u(8-c,6),gm:c,gd:n}}function L(t){let r=[-61,9,38,199,426,686,756,818,1111,1181,1210,1635,2060,2097,2192,2262,2324,2394,2456,3178],s=r.length,n=t+621,c=-14,d=r[0],o=0,e=0;if(t<d||t>=r[s-1])throw new Error(`Invalid Jalali year ${t}`);for(let g=1;g<s&&(o=r[g],e=o-d,!(t<o));g+=1)c+=u(e,33)*8+u(D(e,33),4),d=o;let a=t-d;c+=u(a,33)*8+u(D(a,33)+3,4),D(e,33)===4&&e-a===4&&(c+=1);let l=u(n,4)-u((u(n,100)+1)*3,4)-150,i=20+c-l;e-a<6&&(a=a-e+u(e+4,33)*33);let p=D(D(a+1,33)-1,4);return p===-1&&(p=4),{leap:p,gy:n,march:i}}function ne(t,r,s){let n=L(t);return N(n.gy,3,n.march)+(r-1)*31-u(r,7)*(r-7)+s-1}function re(t){let r=J(t).gy,s=r-621,n=L(s),c=N(r,3,n.march),d=t-c;if(d>=0){if(d<=185)return {jy:s,jm:1+u(d,31),jd:D(d,31)+1};d-=186;}else s-=1,d+=179,n.leap===1&&(d+=1);return {jy:s,jm:7+u(d,30),jd:D(d,30)+1}}function f(t){return re(N(t.getFullYear(),t.getMonth()+1,t.getDate()))}function v(t,r,s){let n=J(ne(t,r,s));return new Date(n.gy,n.gm-1,n.gd)}function oe(t){return L(t).leap===0}function w(t,r){return r<=6?31:r<=11||oe(t)?30:29}function Y(t,r){let s=String(t);return r?s:s.replace(/\d/g,n=>ae[Number(n)])}function W(t={}){let r=t.locale??"fa-IR",s=((t.firstDayOfWeek??6)%7+7)%7,n=t.latinDigits??false,c=o=>new Date(o.getFullYear(),o.getMonth(),o.getDate()),d={locale:r,direction:"rtl",today:()=>new Date,startOfDay:c,startOfMonth:o=>{let e=f(o);return v(e.jy,e.jm,1)},endOfMonth:o=>{let e=f(o);return v(e.jy,e.jm,w(e.jy,e.jm))},addMonths:(o,e)=>{let a=f(o),l=a.jy*12+(a.jm-1)+e,i=Math.floor(l/12),p=(l%12+12)%12+1;return v(i,p,Math.min(a.jd,w(i,p)))},isBeforeDay:(o,e)=>c(o).getTime()<c(e).getTime(),isSameDay:(o,e)=>!!o&&!!e&&c(o).getTime()===c(e).getTime(),isSameMonth:(o,e)=>{let a=f(o),l=f(e);return a.jy===l.jy&&a.jm===l.jm},isBetweenDays:(o,e,a)=>!!e&&!!a&&c(o).getTime()>c(e).getTime()&&c(o).getTime()<c(a).getTime(),formatInputDate:o=>{if(!o)return "";let e=f(o);return `${String(e.jy).padStart(4,"0")}-${String(e.jm).padStart(2,"0")}-${String(e.jd).padStart(2,"0")}`},formatMonthLabel:o=>{let e=f(o);return `${ee[e.jm-1]} ${Y(e.jy,n)}`},formatDayOfMonth:o=>Y(f(o).jd,n),getDateKey:o=>o.toISOString().slice(0,10),getWeekdayLabels:()=>Array.from({length:7},(o,e)=>te[(s+e-6+7)%7]),createCalendarMonth:o=>{let e=d.startOfMonth(o),a=(e.getDay()-s+7)%7,l=new Date(e.getFullYear(),e.getMonth(),e.getDate()-a);return Array.from({length:42},(i,p)=>{let g=new Date(l.getFullYear(),l.getMonth(),l.getDate()+p);return {date:g,day:d.formatDayOfMonth(g),isCurrentMonth:d.isSameMonth(g,e)}})},createMonthSequence:(o,e)=>Array.from({length:e},(a,l)=>d.addMonths(o,l)),parseDate:o=>{let e=/^(\d{4})-(\d{2})-(\d{2})$/.exec(o);if(!e)return null;let a=Number(e[1]),l=Number(e[2]),i=Number(e[3]);return l<1||l>12||i<1||i>w(a,l)?null:v(a,l,i)}};return d}var de=W();export{H as DatePicker,Z as DateRangePicker,q as LocalizationProvider,A as createGregorianCalendarAdapter,W as createJalaliCalendarAdapter,M as defaultCalendarAdapter,de as jalaliCalendarAdapter,h as useCalendarAdapter};
1
+ import {createContext,memo,useMemo,useContext,useState}from'react';import {jsx,jsxs}from'react/jsx-runtime';var ae=new Set(["ar","fa","he","ur"]);function te(r,n){if(n)return n;let l=(Array.isArray(r)?r[0]:r)?.split("-")[0]?.toLowerCase();return l&&ae.has(l)?"rtl":"ltr"}function ne(r=0){return (r%7+7)%7}function re(r){let n=Array.isArray(r)?r[0]:r;try{let c=Intl.Locale,l=c?new c(n):null,i=l?.weekInfo?.firstDay??l?.getWeekInfo?.().firstDay;if(typeof i=="number")return i%7}catch{}return 0}function B(r={}){let{locale:n,direction:c}=r,l=ne(r.firstDayOfWeek??re(n)),i=te(n,c),o=e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()),a={locale:n,direction:i,today:()=>new Date,startOfDay:o,startOfMonth:e=>new Date(e.getFullYear(),e.getMonth(),1),endOfMonth:e=>new Date(e.getFullYear(),e.getMonth()+1,0),addMonths:(e,t)=>new Date(e.getFullYear(),e.getMonth()+t,1),isBeforeDay:(e,t)=>o(e).getTime()<o(t).getTime(),isSameDay:(e,t)=>!e||!t?false:o(e).getTime()===o(t).getTime(),isSameMonth:(e,t)=>e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth(),isBetweenDays:(e,t,d)=>{if(!t||!d)return false;let s=o(e).getTime();return s>o(t).getTime()&&s<o(d).getTime()},formatInputDate:e=>{if(!e)return "";let t=e.getFullYear(),d=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0");return `${t}-${d}-${s}`},formatMonthLabel:e=>e.toLocaleDateString(n,{month:"long",year:"numeric"}),formatDayOfMonth:e=>String(e.getDate()),getDateKey:e=>a.formatInputDate(e),getWeekdayLabels:()=>Array.from({length:7},(e,t)=>{let d=(l+t)%7;return new Date(2024,0,7+d).toLocaleDateString(n,{weekday:"short"})}),createCalendarMonth:e=>{let t=a.startOfMonth(e),d=(t.getDay()-l+7)%7,s=new Date(t.getFullYear(),t.getMonth(),t.getDate()-d);return Array.from({length:42},(u,D)=>{let y=new Date(s.getFullYear(),s.getMonth(),s.getDate()+D);return {date:y,day:a.formatDayOfMonth(y),isCurrentMonth:a.isSameMonth(y,t)}})},createMonthSequence:(e,t)=>Array.from({length:t},(d,s)=>a.addMonths(e,s)),isDateDisabled:(e,t,d)=>{let s=a.startOfDay(e);return !!(t&&a.isBeforeDay(s,t)||d&&a.isBeforeDay(d,s))},canNavigateToMonth:(e,t=1,d,s)=>{let u=a.startOfMonth(e),D=a.endOfMonth(a.addMonths(u,Math.max(t-1,0)));return (!d||!a.isBeforeDay(D,d))&&(!s||!a.isBeforeDay(s,u))},canNavigateMonth:(e,t,d=1,s,u)=>a.canNavigateToMonth(a.addMonths(e,t),d,s,u),constrainMonth:(e,t=1,d,s)=>a.canNavigateToMonth(e,t,d,s)?e:d&&a.isBeforeDay(a.endOfMonth(a.addMonths(e,Math.max(t-1,0))),d)?a.startOfMonth(d):s&&a.isBeforeDay(s,a.startOfMonth(e))?a.startOfMonth(s):e,parseDate:e=>{let t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e);if(!t)return null;let[,d,s,u]=t,D=new Date(Number(d),Number(s)-1,Number(u));return Number.isNaN(D.getTime())||D.getFullYear()!==Number(d)||D.getMonth()!==Number(s)-1||D.getDate()!==Number(u)?null:D}};return a}var w=B(),E=createContext(w);function oe({adapter:r,children:n,locale:c,direction:l,firstDayOfWeek:i}){let o=useMemo(()=>r??B({locale:c,direction:l,firstDayOfWeek:i}),[r,l,i,c]);return jsx(E.Provider,{value:o,children:n})}function R(){return useContext(E)}var le=memo(function({dayProps:n,className:c,renderDay:l}){let i=l?l(n):n.isOutsideMonth?null:n.label;return jsx("button",{type:"button",className:c,onClick:n.onClick,onMouseEnter:n.onMouseEnter,onFocus:n.onFocus,disabled:n.isDisabled,"aria-hidden":n.isOutsideMonth,tabIndex:n.tabIndex,role:n.role,"aria-selected":n["aria-selected"],"aria-disabled":n["aria-disabled"],children:i})});function A({month:r,onMonthChange:n,onDateSelect:c,getDayState:l,showNavigation:i=true,isDateDisabled:o,canNavigatePrev:a=true,canNavigateNext:e=true,renderDay:t,headerStart:d,headerEnd:s}){let u=R(),D=u.createCalendarMonth(r),y=u.getWeekdayLabels(),h=u.today();return jsxs("div",{className:"adp-date-picker",dir:u.direction,children:[jsxs("div",{className:`adp-calendar-header${i||d||s?"":" adp-calendar-header-centered"}`,children:[i?jsx("button",{type:"button",className:"adp-nav-button",onClick:()=>a&&n(u.addMonths(r,-1)),disabled:!a,"aria-label":"Previous month",children:"\u2039"}):d??jsx("span",{className:"adp-calendar-header-spacer","aria-hidden":"true"}),jsx("div",{className:"adp-month-label",children:u.formatMonthLabel(r)}),i?jsx("button",{type:"button",className:"adp-nav-button",onClick:()=>e&&n(u.addMonths(r,1)),disabled:!e,"aria-label":"Next month",children:"\u203A"}):s??jsx("span",{className:"adp-calendar-header-spacer","aria-hidden":"true"})]}),jsx("div",{className:"adp-calendar-grid adp-weekdays",children:y.map(p=>jsx("div",{className:"adp-weekday",children:p},p))}),jsx("div",{className:"adp-calendar-grid",role:"grid",children:D.map(p=>{let b=!p.isCurrentMonth,m=b?{}:l(p.date),k=b||!!o?.(p.date),N=["adp-day",b?"adp-day-placeholder":"",k&&!b?"adp-day-disabled":"",m.selected?"adp-day-selected":"",m.inRange?"adp-day-in-range":"",m.rangeStart?"adp-day-range-start":"",m.rangeEnd?"adp-day-range-end":"",t?"adp-day-custom":""].filter(Boolean).join(" "),O={date:p.date,isToday:u.isSameDay(p.date,h),isSelected:!!m.selected,isInRange:!!m.inRange,isRangeStart:!!m.rangeStart,isRangeEnd:!!m.rangeEnd,isOutsideMonth:b,isDisabled:k,label:p.day,onClick:()=>{k||c(p.date);},tabIndex:k?-1:0,role:"gridcell","aria-selected":!!m.selected,"aria-disabled":k};return jsx(le,{dayProps:O,className:N,renderDay:t},u.getDateKey(p.date))})})]})}function J(r,n,c=w){let{startDate:l,endDate:i}=r;return !l||i?{startDate:n,endDate:null}:c.isBeforeDay(n,l)?{startDate:n,endDate:l}:{startDate:l,endDate:n}}function se({value:r,defaultValue:n=null,onChange:c,renderDay:l,minDate:i,maxDate:o}={}){let a=R(),[e,t]=useState(()=>r??n??a.today()),[d,s]=useState(n),u=r!==void 0,D=u?r:d,y=a.constrainMonth(e,1,i,o),h=p=>{if(a.isDateDisabled(p,i,o))return;let b=p;u||s(b),c?.(b);};return jsx("div",{style:{direction:a.direction},className:"adp-picker",children:jsx(A,{month:y,onMonthChange:p=>t(a.constrainMonth(p,1,i,o)),onDateSelect:h,getDayState:p=>({selected:a.isSameDay(p,D)}),isDateDisabled:p=>a.isDateDisabled(p,i,o),canNavigatePrev:a.canNavigateMonth(y,-1,1,i,o),canNavigateNext:a.canNavigateMonth(y,1,1,i,o),renderDay:l})})}var ce={startDate:null,endDate:null};function $(r){return r??ce}function ue({value:r,defaultValue:n=null,onChange:c,renderDay:l,minDate:i,maxDate:o,viewMode:a="infinite"}={}){let e=R(),t=$(r??n),[d,s]=useState(()=>t.startDate??e.today()),[u,D]=useState(t),y=r!==void 0,h=y?$(r):u,p=e.constrainMonth(d,1,i,o),b=e.createMonthSequence(p,2),m=a==="infinite"?9:1,k=e.createMonthSequence(p,m),N=(f,v=1)=>{s(e.constrainMonth(f,v,i,o));},O=e.canNavigateMonth(p,-1,2,i,o),F=e.canNavigateMonth(p,1,2,i,o),H=e.canNavigateMonth(p,-1,m,i,o),Q=e.canNavigateMonth(p,1,m,i,o),L=f=>({selected:e.isSameDay(f,h.startDate)||e.isSameDay(f,h.endDate),inRange:e.isBetweenDays(f,h.startDate,h.endDate),rangeStart:e.isSameDay(f,h.startDate),rangeEnd:e.isSameDay(f,h.endDate)}),j=f=>{if(e.isDateDisabled(f,i,o))return;let v=J(h,f,e);y||D(v),c?.(v);};return jsxs("div",{style:{direction:e.direction},className:"adp-picker",children:[jsx("div",{className:"adp-range-calendars adp-range-calendars-desktop",children:jsxs("div",{className:"adp-range-calendar-surface",children:[jsx(A,{month:b[0],onMonthChange:f=>N(f,2),onDateSelect:j,getDayState:L,showNavigation:false,isDateDisabled:f=>e.isDateDisabled(f,i,o),renderDay:l,headerStart:jsx("button",{type:"button",className:"adp-nav-button adp-range-nav-button",onClick:()=>O&&N(e.addMonths(p,-1),2),disabled:!O,"aria-label":"Previous month",children:"\u2039"})}),jsx(A,{month:b[1],onMonthChange:f=>N(f,2),onDateSelect:j,getDayState:L,showNavigation:false,isDateDisabled:f=>e.isDateDisabled(f,i,o),renderDay:l,headerEnd:jsx("button",{type:"button",className:"adp-nav-button adp-range-nav-button",onClick:()=>F&&N(e.addMonths(p,1),2),disabled:!F,"aria-label":"Next month",children:"\u203A"})})]})}),jsx("div",{className:"adp-range-calendars-mobile",children:k.map(f=>jsx(A,{month:f,onMonthChange:v=>N(v,m),onDateSelect:j,getDayState:L,showNavigation:a==="single",isDateDisabled:v=>e.isDateDisabled(v,i,o),canNavigatePrev:H,canNavigateNext:Q,renderDay:l},e.getDateKey(f)))})]})}var pe=["\u0641\u0631\u0648\u0631\u062F\u06CC\u0646","\u0627\u0631\u062F\u06CC\u0628\u0647\u0634\u062A","\u062E\u0631\u062F\u0627\u062F","\u062A\u06CC\u0631","\u0645\u0631\u062F\u0627\u062F","\u0634\u0647\u0631\u06CC\u0648\u0631","\u0645\u0647\u0631","\u0622\u0628\u0627\u0646","\u0622\u0630\u0631","\u062F\u06CC","\u0628\u0647\u0645\u0646","\u0627\u0633\u0641\u0646\u062F"],ge=["\u0634","\u06CC","\u062F","\u0633","\u0686","\u067E","\u062C"],De=["\u06F0","\u06F1","\u06F2","\u06F3","\u06F4","\u06F5","\u06F6","\u06F7","\u06F8","\u06F9"],g=(r,n)=>~~(r/n),M=(r,n)=>r-~~(r/n)*n;function I(r,n,c){let l=g((r+g(n-8,6)+100100)*1461,4)+g(153*M(n+9,12)+2,5)+c-34840408;return l=l-g(g(r+100100+g(n-8,6),100)*3,4)+752,l}function q(r){let n=4*r+139361631;n=n+g(g(4*r+183187720,146097)*3,4)*4-3908;let c=g(M(n,1461),4)*5+308,l=g(M(c,153),5)+1,i=M(g(c,153),12)+1;return {gy:g(n,1461)-100100+g(8-i,6),gm:i,gd:l}}function V(r){let n=[-61,9,38,199,426,686,756,818,1111,1181,1210,1635,2060,2097,2192,2262,2324,2394,2456,3178],c=n.length,l=r+621,i=-14,o=n[0],a=0,e=0;if(r<o||r>=n[c-1])throw new Error(`Invalid Jalali year ${r}`);for(let D=1;D<c&&(a=n[D],e=a-o,!(r<a));D+=1)i+=g(e,33)*8+g(M(e,33),4),o=a;let t=r-o;i+=g(t,33)*8+g(M(t,33)+3,4),M(e,33)===4&&e-t===4&&(i+=1);let d=g(l,4)-g((g(l,100)+1)*3,4)-150,s=20+i-d;e-t<6&&(t=t-e+g(e+4,33)*33);let u=M(M(t+1,33)-1,4);return u===-1&&(u=4),{leap:u,gy:l,march:s}}function fe(r,n,c){let l=V(r);return I(l.gy,3,l.march)+(n-1)*31-g(n,7)*(n-7)+c-1}function me(r){let n=q(r).gy,c=n-621,l=V(c),i=I(n,3,l.march),o=r-i;if(o>=0){if(o<=185)return {jy:c,jm:1+g(o,31),jd:M(o,31)+1};o-=186;}else c-=1,o+=179,l.leap===1&&(o+=1);return {jy:c,jm:7+g(o,30),jd:M(o,30)+1}}function S(r){return me(I(r.getFullYear(),r.getMonth()+1,r.getDate()))}function P(r,n,c){let l=q(fe(r,n,c));return new Date(l.gy,l.gm-1,l.gd)}function ye(r){return V(r).leap===0}function T(r,n){return n<=6?31:n<=11||ye(r)?30:29}function K(r,n){let c=String(r);return n?c:c.replace(/\d/g,l=>De[Number(l)])}function U(r={}){let n=r.locale??"fa-IR",c=((r.firstDayOfWeek??6)%7+7)%7,l=r.latinDigits??false,i=a=>new Date(a.getFullYear(),a.getMonth(),a.getDate()),o={locale:n,direction:"rtl",today:()=>new Date,startOfDay:i,startOfMonth:a=>{let e=S(a);return P(e.jy,e.jm,1)},endOfMonth:a=>{let e=S(a);return P(e.jy,e.jm,T(e.jy,e.jm))},addMonths:(a,e)=>{let t=S(a),d=t.jy*12+(t.jm-1)+e,s=Math.floor(d/12),u=(d%12+12)%12+1;return P(s,u,Math.min(t.jd,T(s,u)))},isBeforeDay:(a,e)=>i(a).getTime()<i(e).getTime(),isSameDay:(a,e)=>!!a&&!!e&&i(a).getTime()===i(e).getTime(),isSameMonth:(a,e)=>{let t=S(a),d=S(e);return t.jy===d.jy&&t.jm===d.jm},isBetweenDays:(a,e,t)=>!!e&&!!t&&i(a).getTime()>i(e).getTime()&&i(a).getTime()<i(t).getTime(),formatInputDate:a=>{if(!a)return "";let e=S(a);return `${String(e.jy).padStart(4,"0")}-${String(e.jm).padStart(2,"0")}-${String(e.jd).padStart(2,"0")}`},formatMonthLabel:a=>{let e=S(a);return `${pe[e.jm-1]} ${K(e.jy,l)}`},formatDayOfMonth:a=>K(S(a).jd,l),getDateKey:a=>a.toISOString().slice(0,10),getWeekdayLabels:()=>Array.from({length:7},(a,e)=>ge[(c+e-6+7)%7]),createCalendarMonth:a=>{let e=o.startOfMonth(a),t=(e.getDay()-c+7)%7,d=new Date(e.getFullYear(),e.getMonth(),e.getDate()-t);return Array.from({length:42},(s,u)=>{let D=new Date(d.getFullYear(),d.getMonth(),d.getDate()+u);return {date:D,day:o.formatDayOfMonth(D),isCurrentMonth:o.isSameMonth(D,e)}})},createMonthSequence:(a,e)=>Array.from({length:e},(t,d)=>o.addMonths(a,d)),isDateDisabled:(a,e,t)=>{let d=o.startOfDay(a);return !!(e&&o.isBeforeDay(d,e)||t&&o.isBeforeDay(t,d))},canNavigateToMonth:(a,e=1,t,d)=>{let s=o.startOfMonth(a),u=o.endOfMonth(o.addMonths(s,Math.max(e-1,0)));return (!t||!o.isBeforeDay(u,t))&&(!d||!o.isBeforeDay(d,s))},canNavigateMonth:(a,e,t=1,d,s)=>o.canNavigateToMonth(o.addMonths(a,e),t,d,s),constrainMonth:(a,e=1,t,d)=>o.canNavigateToMonth(a,e,t,d)?a:t&&o.isBeforeDay(o.endOfMonth(o.addMonths(a,Math.max(e-1,0))),t)?o.startOfMonth(t):d&&o.isBeforeDay(d,o.startOfMonth(a))?o.startOfMonth(d):a,parseDate:a=>{let e=/^(\d{4})-(\d{2})-(\d{2})$/.exec(a);if(!e)return null;let t=Number(e[1]),d=Number(e[2]),s=Number(e[3]);return d<1||d>12||s<1||s>T(t,d)?null:P(t,d,s)}};return o}var he=U();export{se as DatePicker,ue as DateRangePicker,oe as LocalizationProvider,B as createGregorianCalendarAdapter,U as createJalaliCalendarAdapter,w as defaultCalendarAdapter,he as jalaliCalendarAdapter,R as useCalendarAdapter};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aryan-date-picker",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "A lightweight React date picker component library.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",