react-modular-datepicker 0.0.2-canary.21 → 0.0.2-canary.22
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 +1 -6
- package/dist/adapters/dayjs.d.ts +21 -0
- package/dist/classNames.d.ts +67 -0
- package/dist/components/Calendar.d.ts +14 -0
- package/dist/components/CalendarHeader.d.ts +19 -0
- package/dist/components/Day.d.ts +13 -0
- package/dist/components/MonthSelection.d.ts +13 -0
- package/dist/components/YearSelection.d.ts +12 -0
- package/dist/i18n.d.ts +9 -0
- package/dist/index.css +10 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +316 -0
- package/dist/index.mjs.map +1 -0
- package/dist/types.d.ts +42 -0
- package/dist/useDates-D9EvVlhK.js +2 -0
- package/dist/useDates-D9EvVlhK.js.map +1 -0
- package/dist/useDates-DQabq6Ux.mjs +201 -0
- package/dist/useDates-DQabq6Ux.mjs.map +1 -0
- package/dist/useDates.d.ts +63 -0
- package/dist/useDates.js +1 -0
- package/dist/useDates.mjs +3 -0
- package/dist/utils.d.ts +42 -0
- package/dist/utils.js +2 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.mjs +169 -0
- package/dist/utils.mjs.map +1 -0
- package/package.json +23 -20
- package/dist/cjs/index.d.ts +0 -196
- package/dist/cjs/index.js +0 -2
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/useDates.d.ts +0 -110
- package/dist/cjs/useDates.js +0 -2
- package/dist/cjs/useDates.js.map +0 -1
- package/dist/cjs/utils.d.ts +0 -85
- package/dist/cjs/utils.js +0 -2
- package/dist/cjs/utils.js.map +0 -1
- package/dist/es/index.d.mts +0 -196
- package/dist/es/index.mjs +0 -2
- package/dist/es/index.mjs.map +0 -1
- package/dist/es/useDates.d.mts +0 -110
- package/dist/es/useDates.mjs +0 -2
- package/dist/es/useDates.mjs.map +0 -1
- package/dist/es/utils.d.mts +0 -85
- package/dist/es/utils.mjs +0 -2
- package/dist/es/utils.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -103,7 +103,6 @@ function BasicExample() {
|
|
|
103
103
|
}
|
|
104
104
|
```
|
|
105
105
|
|
|
106
|
-
https://github.com/Dragate/react-modular-datepicker/tree/test/docs/videos/basic.webm
|
|
107
106
|
</details>
|
|
108
107
|
|
|
109
108
|
<details>
|
|
@@ -118,7 +117,6 @@ Select a start and end date with a beautiful hover preview.
|
|
|
118
117
|
/>
|
|
119
118
|
```
|
|
120
119
|
|
|
121
|
-
https://github.com/Dragate/react-modular-datepicker/tree/test/docs/videos/range.webm
|
|
122
120
|
</details>
|
|
123
121
|
|
|
124
122
|
<details>
|
|
@@ -132,7 +130,6 @@ Select as many dates as you want.
|
|
|
132
130
|
/>
|
|
133
131
|
```
|
|
134
132
|
|
|
135
|
-
https://github.com/Dragate/react-modular-datepicker/tree/test/docs/videos/multiple.webm
|
|
136
133
|
</details>
|
|
137
134
|
|
|
138
135
|
<details>
|
|
@@ -155,7 +152,6 @@ return (
|
|
|
155
152
|
);
|
|
156
153
|
```
|
|
157
154
|
|
|
158
|
-
https://github.com/Dragate/react-modular-datepicker/tree/test/docs/videos/headless.webm
|
|
159
155
|
</details>
|
|
160
156
|
|
|
161
157
|
<details>
|
|
@@ -174,7 +170,6 @@ Easily customize the look and feel using the `classNames` prop.
|
|
|
174
170
|
/>
|
|
175
171
|
```
|
|
176
172
|
|
|
177
|
-
https://github.com/Dragate/react-modular-datepicker/tree/test/docs/videos/styling.webm
|
|
178
173
|
</details>
|
|
179
174
|
|
|
180
175
|
---
|
|
@@ -197,7 +192,7 @@ Start the development server with the example app:
|
|
|
197
192
|
```bash
|
|
198
193
|
pnpm run dev
|
|
199
194
|
```
|
|
200
|
-
This runs `
|
|
195
|
+
This runs `vite` in watch mode for the library and starts the Next.js example app at `http://localhost:3000`.
|
|
201
196
|
|
|
202
197
|
### Testing
|
|
203
198
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Dayjs } from 'dayjs';
|
|
2
|
+
import { DateAdapter } from '../types';
|
|
3
|
+
export declare class DayjsAdapter implements DateAdapter<Dayjs> {
|
|
4
|
+
date(value?: any): Dayjs;
|
|
5
|
+
add(date: Dayjs, amount: number, unit: 'day' | 'month' | 'year'): Dayjs;
|
|
6
|
+
subtract(date: Dayjs, amount: number, unit: 'day' | 'month' | 'year'): Dayjs;
|
|
7
|
+
startOf(date: Dayjs, unit: 'day' | 'month' | 'year'): Dayjs;
|
|
8
|
+
endOf(date: Dayjs, unit: 'day' | 'month' | 'year'): Dayjs;
|
|
9
|
+
isBefore(date: Dayjs, comparison: Dayjs, unit?: 'day' | 'month' | 'year'): boolean;
|
|
10
|
+
isAfter(date: Dayjs, comparison: Dayjs, unit?: 'day' | 'month' | 'year'): boolean;
|
|
11
|
+
isSame(date: Dayjs, comparison: Dayjs, unit?: 'day' | 'month' | 'year'): boolean;
|
|
12
|
+
set(date: Dayjs, unit: 'day' | 'month' | 'year', value: number): Dayjs;
|
|
13
|
+
get(date: Dayjs, unit: 'day' | 'month' | 'year'): number;
|
|
14
|
+
format(date: Dayjs, formatStr: string, locale?: string): string;
|
|
15
|
+
getDaysInMonth(date: Dayjs): number;
|
|
16
|
+
toDate(date: Dayjs): Date;
|
|
17
|
+
diff(date: Dayjs, comparison: Dayjs, unit: 'month' | 'year'): number;
|
|
18
|
+
getMonths(locale?: string): string[];
|
|
19
|
+
getWeekdays(locale?: string): string[];
|
|
20
|
+
}
|
|
21
|
+
export declare const defaultAdapter: DayjsAdapter;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export interface DayClassNames {
|
|
2
|
+
day?: string;
|
|
3
|
+
selected?: string;
|
|
4
|
+
unselected?: string;
|
|
5
|
+
disabled?: string;
|
|
6
|
+
rangeStart?: string;
|
|
7
|
+
rangeEnd?: string;
|
|
8
|
+
rangeBetween?: string;
|
|
9
|
+
rangeHovering?: string;
|
|
10
|
+
[key: string]: string | undefined;
|
|
11
|
+
}
|
|
12
|
+
export declare const defaultClassNames: {
|
|
13
|
+
root: string;
|
|
14
|
+
header: string;
|
|
15
|
+
calendarsContainer: string;
|
|
16
|
+
calendarContainer: string;
|
|
17
|
+
weekdayGrid: string;
|
|
18
|
+
weekday: string;
|
|
19
|
+
daysGrid: string;
|
|
20
|
+
footer: string;
|
|
21
|
+
navButton: string;
|
|
22
|
+
monthYearContainer: string;
|
|
23
|
+
monthYearLabel: string;
|
|
24
|
+
monthYearButton: string;
|
|
25
|
+
day: {
|
|
26
|
+
day: string;
|
|
27
|
+
selected: string;
|
|
28
|
+
unselected: string;
|
|
29
|
+
disabled: string;
|
|
30
|
+
rangeStart: string;
|
|
31
|
+
rangeEnd: string;
|
|
32
|
+
rangeBetween: string;
|
|
33
|
+
rangeHovering: string;
|
|
34
|
+
};
|
|
35
|
+
monthsGrid: string;
|
|
36
|
+
monthButton: string;
|
|
37
|
+
monthButtonSelected: string;
|
|
38
|
+
monthButtonUnselected: string;
|
|
39
|
+
yearsGrid: string;
|
|
40
|
+
yearButton: string;
|
|
41
|
+
yearButtonSelected: string;
|
|
42
|
+
yearButtonUnselected: string;
|
|
43
|
+
};
|
|
44
|
+
export interface CalendarClassNames {
|
|
45
|
+
root?: string;
|
|
46
|
+
header?: string;
|
|
47
|
+
calendarsContainer?: string;
|
|
48
|
+
calendarContainer?: string;
|
|
49
|
+
weekdayGrid?: string;
|
|
50
|
+
weekday?: string;
|
|
51
|
+
daysGrid?: string;
|
|
52
|
+
footer?: string;
|
|
53
|
+
navButton?: string;
|
|
54
|
+
monthYearContainer?: string;
|
|
55
|
+
monthYearLabel?: string;
|
|
56
|
+
monthYearButton?: string;
|
|
57
|
+
day?: DayClassNames;
|
|
58
|
+
monthsGrid?: string;
|
|
59
|
+
monthButton?: string;
|
|
60
|
+
monthButtonSelected?: string;
|
|
61
|
+
monthButtonUnselected?: string;
|
|
62
|
+
yearsGrid?: string;
|
|
63
|
+
yearButton?: string;
|
|
64
|
+
yearButtonSelected?: string;
|
|
65
|
+
yearButtonUnselected?: string;
|
|
66
|
+
}
|
|
67
|
+
export declare const mergeClassNames: (custom?: CalendarClassNames) => Required<CalendarClassNames>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { UseDatesProps } from '../useDates';
|
|
3
|
+
import { Translations } from '../i18n';
|
|
4
|
+
import { DateObj, CalendarClassNames } from '../types';
|
|
5
|
+
interface CalendarProps extends UseDatesProps {
|
|
6
|
+
classNames?: CalendarClassNames;
|
|
7
|
+
locale?: string;
|
|
8
|
+
translations?: Partial<Translations>;
|
|
9
|
+
header?: React.ReactNode | ((props: any) => React.ReactNode);
|
|
10
|
+
footer?: React.ReactNode;
|
|
11
|
+
renderDayTooltip?: (dateObj: DateObj) => React.ReactNode;
|
|
12
|
+
}
|
|
13
|
+
export declare const Calendar: React.FC<CalendarProps>;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { Calendar, CalendarClassNames } from '../types';
|
|
3
|
+
export interface HeaderProps {
|
|
4
|
+
calendars: Calendar[];
|
|
5
|
+
getBackProps: (args: any) => any;
|
|
6
|
+
getForwardProps: (args: any) => any;
|
|
7
|
+
setView: (view: 'days' | 'months' | 'years') => void;
|
|
8
|
+
monthNames: string[];
|
|
9
|
+
t: {
|
|
10
|
+
back: string;
|
|
11
|
+
forward: string;
|
|
12
|
+
};
|
|
13
|
+
classNames: Required<CalendarClassNames>;
|
|
14
|
+
slideDirection?: 'left' | 'right' | null;
|
|
15
|
+
currentView?: 'days' | 'months' | 'years';
|
|
16
|
+
}
|
|
17
|
+
export declare const ChevronLeftIcon: () => React.JSX.Element;
|
|
18
|
+
export declare const ChevronRightIcon: () => React.JSX.Element;
|
|
19
|
+
export declare const CalendarHeader: React.FC<HeaderProps>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { CalendarClassNames, DateObj } from '../types';
|
|
3
|
+
interface DayProps {
|
|
4
|
+
dateObj: DateObj | null;
|
|
5
|
+
getDateProps: (args: {
|
|
6
|
+
dateObj: DateObj;
|
|
7
|
+
[key: string]: any;
|
|
8
|
+
}) => any;
|
|
9
|
+
tooltip?: React.ReactNode;
|
|
10
|
+
classNames: Required<CalendarClassNames>;
|
|
11
|
+
}
|
|
12
|
+
export declare const Day: React.FC<DayProps>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { CalendarClassNames } from '../types';
|
|
3
|
+
interface MonthSelectionProps {
|
|
4
|
+
year: number;
|
|
5
|
+
month: number;
|
|
6
|
+
monthNames: string[];
|
|
7
|
+
minDate?: Date | null;
|
|
8
|
+
maxDate?: Date | null;
|
|
9
|
+
onMonthSelect: (month: number) => void;
|
|
10
|
+
classNames: Required<CalendarClassNames>;
|
|
11
|
+
}
|
|
12
|
+
export declare const MonthSelection: React.FC<MonthSelectionProps>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { CalendarClassNames, DateAdapter } from '../types';
|
|
3
|
+
interface YearSelectionProps {
|
|
4
|
+
year: number;
|
|
5
|
+
minDate?: Date | null;
|
|
6
|
+
maxDate?: Date | null;
|
|
7
|
+
adapter: DateAdapter;
|
|
8
|
+
onYearSelect: (year: number) => void;
|
|
9
|
+
classNames: Required<CalendarClassNames>;
|
|
10
|
+
}
|
|
11
|
+
export declare const YearSelection: React.FC<YearSelectionProps>;
|
|
12
|
+
export {};
|
package/dist/i18n.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DateAdapter } from './types';
|
|
2
|
+
export interface Translations {
|
|
3
|
+
months: string[];
|
|
4
|
+
weekdays: string[];
|
|
5
|
+
back: string;
|
|
6
|
+
forward: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function getDefaults(adapter?: DateAdapter, locale?: string): Translations;
|
|
9
|
+
export declare function getTranslations(adapter?: DateAdapter, locale?: string, custom?: Partial<Translations>): Translations;
|
package/dist/index.css
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
|
|
9
9
|
"Courier New", monospace;
|
|
10
10
|
--color-red-50: oklch(97.1% 0.013 17.38);
|
|
11
|
+
--color-red-200: oklch(88.5% 0.062 18.334);
|
|
11
12
|
--color-red-300: oklch(80.8% 0.114 19.571);
|
|
12
13
|
--color-orange-500: oklch(70.5% 0.213 47.604);
|
|
13
14
|
--color-amber-500: oklch(76.9% 0.188 70.08);
|
|
@@ -680,6 +681,9 @@
|
|
|
680
681
|
.bg-green-100 {
|
|
681
682
|
background-color: var(--color-green-100);
|
|
682
683
|
}
|
|
684
|
+
.bg-green-200 {
|
|
685
|
+
background-color: var(--color-green-200);
|
|
686
|
+
}
|
|
683
687
|
.bg-indigo-400 {
|
|
684
688
|
background-color: var(--color-indigo-400);
|
|
685
689
|
}
|
|
@@ -698,6 +702,9 @@
|
|
|
698
702
|
.bg-red-50 {
|
|
699
703
|
background-color: var(--color-red-50);
|
|
700
704
|
}
|
|
705
|
+
.bg-red-200 {
|
|
706
|
+
background-color: var(--color-red-200);
|
|
707
|
+
}
|
|
701
708
|
.bg-rose-500 {
|
|
702
709
|
background-color: var(--color-rose-500);
|
|
703
710
|
}
|
|
@@ -933,6 +940,9 @@
|
|
|
933
940
|
.opacity-0 {
|
|
934
941
|
opacity: 0%;
|
|
935
942
|
}
|
|
943
|
+
.opacity-50 {
|
|
944
|
+
opacity: 50%;
|
|
945
|
+
}
|
|
936
946
|
.shadow {
|
|
937
947
|
--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
|
|
938
948
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { useDates } from './useDates';
|
|
2
|
+
export type { UseDatesProps } from './useDates';
|
|
3
|
+
export * from './types';
|
|
4
|
+
export * from './utils';
|
|
5
|
+
export { Calendar } from './components/Calendar';
|
|
6
|
+
export { Day } from './components/Day';
|
|
7
|
+
export { MonthSelection } from './components/MonthSelection';
|
|
8
|
+
export { YearSelection } from './components/YearSelection';
|
|
9
|
+
export { DayjsAdapter, defaultAdapter } from './adapters/dayjs';
|
|
10
|
+
export * from './i18n';
|
|
11
|
+
export * from './classNames';
|
|
12
|
+
export { CalendarHeader, ChevronLeftIcon, ChevronRightIcon } from './components/CalendarHeader';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./useDates-D9EvVlhK.js"),t=require("./utils.js");let n=require("react");n=e.i(n);let r=require("react/jsx-runtime");var i=({dateObj:e,getDateProps:t,classNames:n,tooltip:i})=>{if(!e)return(0,r.jsx)(`div`,{className:`aspect-square bg-white`});let{date:a,selected:o,selectable:s,isRangeStart:c,isRangeEnd:l,isRangeBetween:u,isRangeHovering:d,isRangeActive:f}=e,p=n.day,m=`rounded-full`;m=c&&l?`${p.selected} rounded-full`:c?`${p.rangeStart} ${f?`rounded-l-full rounded-r-none`:`rounded-full`}`:l?`${p.rangeEnd} ${f?`rounded-r-full rounded-l-none`:`rounded-full`}`:u?p.rangeBetween||``:d?p.rangeHovering||``:o?p.selected||``:s?p.unselected||``:p.disabled||``;let h=[p.day,m,...(e.modifiers||[]).map(e=>p[e]||e)].filter(Boolean).join(` `);return(0,r.jsxs)(`button`,{...t({dateObj:e}),className:h,children:[a.getDate(),i&&(0,r.jsx)(`div`,{className:`absolute bottom-full left-1/2 -translate-x-1/2 mb-2 hidden group-hover:block z-10`,children:(0,r.jsxs)(`div`,{className:`bg-gray-800 text-white text-xs py-1 px-2 rounded whitespace-nowrap shadow-lg`,children:[i,(0,r.jsx)(`div`,{className:`absolute top-full left-1/2 -translate-x-1/2 border-8 border-transparent border-t-gray-800`})]})})]})};function a(t=e.r,n){return{months:t.getMonths(n),weekdays:t.getWeekdays(n),back:`Previous month`,forward:`Next month`}}function o(t=e.r,n,r){return{...a(t,n),...r}}var s=()=>(0,r.jsx)(`svg`,{width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,r.jsx)(`polyline`,{points:`15 18 9 12 15 6`})}),c=()=>(0,r.jsx)(`svg`,{width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,r.jsx)(`polyline`,{points:`9 18 15 12 9 6`})}),l=({calendars:e,getBackProps:t,getForwardProps:n,setView:i,monthNames:a,t:o,classNames:l,slideDirection:u,currentView:d})=>(0,r.jsxs)(`div`,{className:l.header,children:[(0,r.jsx)(`button`,{...t({calendars:e}),onMouseDown:e=>e.preventDefault(),className:`${l.navButton} ${d&&d!==`days`?`invisible pointer-events-none`:``}`,"aria-label":o.back,children:(0,r.jsx)(s,{})}),(0,r.jsx)(`div`,{className:l.monthYearContainer,children:e.length===1?(0,r.jsxs)(`div`,{className:`${l.monthYearLabel} ${u===`left`?`animate-slide-in-left`:u===`right`?`animate-slide-in-right`:``}`,children:[(0,r.jsx)(`button`,{onMouseDown:e=>e.preventDefault(),onClick:()=>i(d===`months`?`days`:`months`),className:l.monthYearButton,children:a[e[0].month]}),(0,r.jsx)(`button`,{onMouseDown:e=>e.preventDefault(),onClick:()=>i(d===`years`?`days`:`years`),className:l.monthYearButton,children:e[0].year})]},`${e[0].month}-${e[0].year}`):(0,r.jsx)(`div`,{className:`${l.monthYearLabel} ${u===`left`?`animate-slide-in-left`:u===`right`?`animate-slide-in-right`:``}`,children:(()=>{let t=e[0],n=e[e.length-1];return e.length===12&&t.month===0&&n.month===11&&t.year===n.year?(0,r.jsx)(`span`,{children:t.year}):t.year===n.year?(0,r.jsxs)(`span`,{children:[a[t.month],` - `,a[n.month],` `,t.year]}):(0,r.jsxs)(`span`,{children:[a[t.month],` `,t.year,` - `,a[n.month],` `,n.year]})})()})}),(0,r.jsx)(`button`,{...n({calendars:e}),onMouseDown:e=>e.preventDefault(),className:`${l.navButton} ${d&&d!==`days`?`invisible pointer-events-none`:``}`,"aria-label":o.forward,children:(0,r.jsx)(c,{})})]}),u={root:`w-fit flex flex-col p-4 bg-white rounded-lg shadow-lg`,header:`flex items-center justify-between border-b-2 border-brand-gray-light/40`,calendarsContainer:`flex flex-col md:flex-row gap-4`,calendarContainer:`flex-1 min-w-[280px] min-h-[260px]`,weekdayGrid:`grid grid-cols-7 gap-1 mb-1 border-b border-brand-gray-light/40`,weekday:`text-center text-xs text-gray-400 py-2`,daysGrid:`grid grid-cols-7 gap-px bg-brand-gray-light/20`,footer:`mt-4`,navButton:`p-2 hover:bg-gray-100 rounded-full transition-colors cursor-pointer disabled:opacity-30 disabled:pointer-events-none`,monthYearContainer:`flex gap-8`,monthYearLabel:`flex gap-1 items-center font-semibold text-brand-text`,monthYearButton:`hover:bg-gray-100 px-2 py-1 rounded cursor-pointer`,day:{day:`aspect-square flex items-center justify-center text-sm font-medium transition-all relative group cursor-pointer p-px`,selected:`bg-brand-gold text-white rounded-full`,unselected:`bg-white hover:bg-brand-gray-light text-brand-text`,disabled:`bg-white text-gray-300 cursor-not-allowed`,rangeStart:`bg-brand-gold text-white`,rangeEnd:`bg-brand-gold text-white`,rangeBetween:`bg-brand-gray-light text-brand-text`,rangeHovering:`bg-brand-gray-light text-brand-text`},monthsGrid:`grid grid-cols-3 gap-2 animate-slide-in-top`,monthButton:`py-4 rounded-lg hover:bg-brand-gray-light transition-colors cursor-pointer disabled:opacity-30 disabled:pointer-events-none`,monthButtonSelected:`bg-brand-gold text-white`,monthButtonUnselected:`text-brand-text`,yearsGrid:`grid grid-cols-3 gap-2 max-h-[300px] overflow-y-auto pr-2 animate-slide-in-top`,yearButton:`py-3 rounded-lg hover:bg-brand-gray-light transition-colors cursor-pointer disabled:opacity-30 disabled:pointer-events-none`,yearButtonSelected:`bg-brand-gold text-white`,yearButtonUnselected:`text-brand-text`},d=e=>{let t={...u};if(!e)return t;for(let n in e){let r=n;r===`day`&&e.day?t.day={...u.day,...e.day}:e[r]&&(t[r]=e[r])}return t},f=({year:e,month:t,monthNames:n,minDate:i,maxDate:a,onMonthSelect:o,classNames:s})=>{let c=t=>!!(i&&e===i.getFullYear()&&t<i.getMonth()||a&&e===a.getFullYear()&&t>a.getMonth());return(0,r.jsx)(`div`,{className:s.monthsGrid,children:n.map((e,n)=>{let i=c(n);return(0,r.jsx)(`button`,{onMouseDown:e=>e.preventDefault(),onClick:()=>!i&&o(n),className:`${s.monthButton} ${n===t?s.monthButtonSelected:s.monthButtonUnselected}`,disabled:i,children:e},e)})})},p=({year:e,minDate:t,maxDate:i,adapter:a,onYearSelect:o,classNames:s})=>{let c=(0,n.useRef)(null);(0,n.useEffect)(()=>{if(c.current){let e=c.current.querySelector(`[data-selected="true"]`);e&&e.scrollIntoView({block:`center`})}},[]);let l=t?a.get(a.date(t),`year`):e-50,u=i?a.get(a.date(i),`year`):e+50,d=[];for(let e=l;e<=u;e++)d.push(e);return(0,r.jsx)(`div`,{ref:c,className:s.yearsGrid,children:d.map(t=>(0,r.jsx)(`button`,{"data-selected":t===e,onMouseDown:e=>e.preventDefault(),onClick:()=>o(t),className:`${s.yearButton} ${t===e?s.yearButtonSelected:s.yearButtonUnselected}`,children:t},t))})},m=t=>{let{classNames:a,locale:s,translations:c,adapter:u=e.r,firstDayOfWeek:m=0,header:h,footer:g,renderDayTooltip:_,...v}=t,y=d(a),[b,x]=(0,n.useState)(`days`),[S,C]=(0,n.useState)(null),w=o(u,s,c),T=w.weekdays,E=w.months,{calendars:D,getBackProps:O,getForwardProps:k,getDateProps:A,setOffset:j}=e.t({...v,adapter:u,firstDayOfWeek:m}),M=[...T.slice(m),...T.slice(0,m)],{month:N,year:P}=D[0],F=e=>{let n=u.set(u.set(u.date(t.date||new Date),`year`,P),`month`,N),r=u.set(n,`month`,e),i=u.startOf(u.date(t.date||new Date),`month`),a=u.diff(r,i,`month`);C(null),j(a),x(`days`)},I=e=>{let n=u.set(u.set(u.date(t.date||new Date),`year`,P),`month`,N),r=u.set(n,`year`,e),i=u.startOf(u.date(t.date||new Date),`month`),a=u.diff(r,i,`month`);C(null),j(a),x(`days`)},L=e=>{let t=O(e);return{...t,onClick:e=>{C(`left`),t.onClick?.(e)}}},R=e=>{let t=k(e);return{...t,onClick:e=>{C(`right`),t.onClick?.(e)}}};return(0,r.jsxs)(`div`,{className:y.root,children:[typeof h==`function`?h({calendars:D,getBackProps:L,getForwardProps:R,setView:x,monthNames:E,t:w,slideDirection:S,currentView:b}):h||(0,r.jsx)(l,{calendars:D,getBackProps:L,getForwardProps:R,setView:x,monthNames:E,t:w,classNames:y,slideDirection:S,currentView:b}),(0,r.jsxs)(`div`,{className:y.calendarsContainer,children:[b===`months`&&D.map(e=>(0,r.jsx)(`div`,{className:y.calendarContainer,children:(0,r.jsx)(f,{year:e.year,month:e.month,monthNames:E,minDate:t.minDate,maxDate:t.maxDate,onMonthSelect:F,classNames:y})},`months-${e.year}`)),b===`years`&&D.map(e=>(0,r.jsx)(`div`,{className:y.calendarContainer,children:(0,r.jsx)(p,{year:e.year,minDate:t.minDate,maxDate:t.maxDate,adapter:u,onYearSelect:I,classNames:y})},`years-${e.year}`)),b===`days`&&D.map(e=>(0,r.jsxs)(`div`,{className:y.calendarContainer,children:[D.length>1&&(0,r.jsxs)(`div`,{className:`text-center font-semibold mb-2 text-brand-text`,children:[E[e.month],` `,D[0].year===D[D.length-1].year?``:e.year]}),(0,r.jsx)(`div`,{className:y.weekdayGrid,children:M.map(e=>(0,r.jsx)(`div`,{className:y.weekday,children:e},e))}),(0,r.jsx)(`div`,{className:`${y.daysGrid} ${S===`left`?`animate-slide-in-left`:S===`right`?`animate-slide-in-right`:``}`,children:e.weeks.map((e,t)=>e.map((e,n)=>(0,r.jsx)(i,{dateObj:e,getDateProps:A,classNames:y,tooltip:e&&_?.(e)},`${t}-${n}`)))})]},`${e.month}-${e.year}`))]}),g&&(0,r.jsx)(`div`,{className:y.footer,children:g})]})};exports.Calendar=m,exports.CalendarHeader=l,exports.ChevronLeftIcon=s,exports.ChevronRightIcon=c,exports.Day=i,exports.DayjsAdapter=e.n,exports.MonthSelection=f,exports.YearSelection=p,exports.addMonth=t.addMonth,exports.composeEventHandlers=t.composeEventHandlers,exports.defaultAdapter=e.r,exports.defaultClassNames=u,exports.getCalendars=t.getCalendars,exports.getDefaults=a,exports.getTranslations=o,exports.isBackDisabled=t.isBackDisabled,exports.isForwardDisabled=t.isForwardDisabled,exports.mergeClassNames=d,exports.subtractMonth=t.subtractMonth,exports.useDates=e.t;
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/components/Day.tsx","../src/i18n.ts","../src/components/CalendarHeader.tsx","../src/classNames.ts","../src/components/MonthSelection.tsx","../src/components/YearSelection.tsx","../src/components/Calendar.tsx"],"sourcesContent":["import React from 'react';\nimport type { CalendarClassNames, DateObj } from '../types';\n\ninterface DayProps {\n dateObj: DateObj | null;\n getDateProps: (args: { dateObj: DateObj, [key: string]: any }) => any;\n tooltip?: React.ReactNode;\n classNames: Required<CalendarClassNames>;\n}\n\nexport const Day: React.FC<DayProps> = ({ dateObj, getDateProps, classNames, tooltip }) => {\n if (!dateObj) {\n return <div className=\"aspect-square bg-white\" />;\n }\n\n const { date, selected, selectable, isRangeStart, isRangeEnd, isRangeBetween, isRangeHovering, isRangeActive } = dateObj;\n const dayClasses = classNames.day;\n\n let stateClasses = \"rounded-full\";\n if (isRangeStart && isRangeEnd) {\n stateClasses = `${dayClasses.selected} rounded-full`;\n } else if (isRangeStart) {\n stateClasses = `${dayClasses.rangeStart} ${isRangeActive ? 'rounded-l-full rounded-r-none' : 'rounded-full'}`;\n } else if (isRangeEnd) {\n stateClasses = `${dayClasses.rangeEnd} ${isRangeActive ? 'rounded-r-full rounded-l-none' : 'rounded-full'}`;\n } else if (isRangeBetween) {\n stateClasses = dayClasses.rangeBetween || '';\n } else if (isRangeHovering) {\n stateClasses = dayClasses.rangeHovering || '';\n } else if (selected) {\n stateClasses = dayClasses.selected || '';\n } else if (!selectable) {\n stateClasses = dayClasses.disabled || '';\n } else {\n stateClasses = dayClasses.unselected || '';\n }\n\n const className = [\n dayClasses.day,\n stateClasses,\n ...(dateObj.modifiers || []).map(m => (dayClasses as any)[m] || m)\n ].filter(Boolean).join(' ');\n\n return (\n <button\n {...getDateProps({ dateObj })}\n className={className}\n >\n {date.getDate()}\n {tooltip && (\n <div className=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-2 hidden group-hover:block z-10\">\n <div className=\"bg-gray-800 text-white text-xs py-1 px-2 rounded whitespace-nowrap shadow-lg\">\n {tooltip}\n <div className=\"absolute top-full left-1/2 -translate-x-1/2 border-8 border-transparent border-t-gray-800\" />\n </div>\n </div>\n )}\n </button>\n );\n};\n","import { DateAdapter } from \"./types\";\nimport { defaultAdapter } from \"./adapters/dayjs\";\n\nexport interface Translations {\n months: string[];\n weekdays: string[];\n back: string;\n forward: string;\n}\n\nexport function getDefaults(adapter: DateAdapter = defaultAdapter, locale?: string): Translations {\n return {\n months: adapter.getMonths(locale),\n weekdays: adapter.getWeekdays(locale),\n back: 'Previous month',\n forward: 'Next month'\n };\n}\n\nexport function getTranslations(\n adapter: DateAdapter = defaultAdapter,\n locale?: string,\n custom?: Partial<Translations>\n): Translations {\n const base = getDefaults(adapter, locale);\n return { ...base, ...custom };\n}\n","import React from 'react';\nimport { Calendar, CalendarClassNames } from '../types';\n\nexport interface HeaderProps {\n calendars: Calendar[];\n getBackProps: (args: any) => any;\n getForwardProps: (args: any) => any;\n setView: (view: 'days' | 'months' | 'years') => void;\n monthNames: string[];\n t: { back: string; forward: string };\n classNames: Required<CalendarClassNames>;\n slideDirection?: 'left' | 'right' | null;\n currentView?: 'days' | 'months' | 'years';\n}\n\nexport const ChevronLeftIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"15 18 9 12 15 6\"></polyline>\n </svg>\n);\n\nexport const ChevronRightIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"9 18 15 12 9 6\"></polyline>\n </svg>\n);\n\nexport const CalendarHeader: React.FC<HeaderProps> = ({\n calendars,\n getBackProps,\n getForwardProps,\n setView,\n monthNames,\n t,\n classNames,\n slideDirection,\n currentView\n}) => {\n return (\n <div className={classNames.header}>\n <button\n {...getBackProps({ calendars })}\n onMouseDown={(e) => e.preventDefault()}\n className={`${classNames.navButton} ${currentView && currentView !== 'days' ? 'invisible pointer-events-none' : ''}`}\n aria-label={t.back}\n >\n <ChevronLeftIcon />\n </button>\n\n <div className={classNames.monthYearContainer}>\n {calendars.length === 1 ? (\n <div key={`${calendars[0].month}-${calendars[0].year}`} className={`${classNames.monthYearLabel} ${slideDirection === 'left' ? 'animate-slide-in-left' : slideDirection === 'right' ? 'animate-slide-in-right' : ''}`}>\n <button\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => setView(currentView === 'months' ? 'days' : 'months')}\n className={classNames.monthYearButton}\n >\n {monthNames[calendars[0].month]}\n </button>\n <button\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => setView(currentView === 'years' ? 'days' : 'years')}\n className={classNames.monthYearButton}\n >\n {calendars[0].year}\n </button>\n </div>\n ) : (\n <div className={`${classNames.monthYearLabel} ${slideDirection === 'left' ? 'animate-slide-in-left' : slideDirection === 'right' ? 'animate-slide-in-right' : ''}`}>\n {(() => {\n const first = calendars[0];\n const last = calendars[calendars.length - 1];\n const isFullYear = calendars.length === 12 && first.month === 0 && last.month === 11 && first.year === last.year;\n\n if (isFullYear) {\n return <span>{first.year}</span>;\n } else if (first.year === last.year) {\n return <span>{monthNames[first.month]} - {monthNames[last.month]} {first.year}</span>;\n } else {\n return <span>{monthNames[first.month]} {first.year} - {monthNames[last.month]} {last.year}</span>;\n }\n })()}\n </div>\n )}\n </div>\n\n <button\n {...getForwardProps({ calendars })}\n onMouseDown={(e) => e.preventDefault()}\n className={`${classNames.navButton} ${currentView && currentView !== 'days' ? 'invisible pointer-events-none' : ''}`}\n aria-label={t.forward}\n >\n <ChevronRightIcon />\n </button>\n </div>\n );\n};\n","export interface DayClassNames {\n day?: string;\n selected?: string;\n unselected?: string;\n disabled?: string;\n rangeStart?: string;\n rangeEnd?: string;\n rangeBetween?: string;\n rangeHovering?: string;\n [key: string]: string | undefined;\n}\n\nexport const defaultClassNames = {\n root: \"w-fit flex flex-col p-4 bg-white rounded-lg shadow-lg\",\n header: \"flex items-center justify-between border-b-2 border-brand-gray-light/40\",\n calendarsContainer: \"flex flex-col md:flex-row gap-4\",\n calendarContainer: \"flex-1 min-w-[280px] min-h-[260px]\",\n weekdayGrid: \"grid grid-cols-7 gap-1 mb-1 border-b border-brand-gray-light/40\",\n weekday: \"text-center text-xs text-gray-400 py-2\",\n daysGrid: \"grid grid-cols-7 gap-px bg-brand-gray-light/20\",\n footer: \"mt-4\",\n\n navButton: \"p-2 hover:bg-gray-100 rounded-full transition-colors cursor-pointer disabled:opacity-30 disabled:pointer-events-none\",\n monthYearContainer: \"flex gap-8\",\n monthYearLabel: \"flex gap-1 items-center font-semibold text-brand-text\",\n monthYearButton: \"hover:bg-gray-100 px-2 py-1 rounded cursor-pointer\",\n\n day: {\n day: \"aspect-square flex items-center justify-center text-sm font-medium transition-all relative group cursor-pointer p-px\",\n selected: \"bg-brand-gold text-white rounded-full\",\n unselected: \"bg-white hover:bg-brand-gray-light text-brand-text\",\n disabled: \"bg-white text-gray-300 cursor-not-allowed\",\n rangeStart: \"bg-brand-gold text-white\",\n rangeEnd: \"bg-brand-gold text-white\",\n rangeBetween: \"bg-brand-gray-light text-brand-text\",\n rangeHovering: \"bg-brand-gray-light text-brand-text\",\n },\n\n monthsGrid: \"grid grid-cols-3 gap-2 animate-slide-in-top\",\n monthButton: \"py-4 rounded-lg hover:bg-brand-gray-light transition-colors cursor-pointer disabled:opacity-30 disabled:pointer-events-none\",\n monthButtonSelected: \"bg-brand-gold text-white\",\n monthButtonUnselected: \"text-brand-text\",\n\n yearsGrid: \"grid grid-cols-3 gap-2 max-h-[300px] overflow-y-auto pr-2 animate-slide-in-top\",\n yearButton: \"py-3 rounded-lg hover:bg-brand-gray-light transition-colors cursor-pointer disabled:opacity-30 disabled:pointer-events-none\",\n yearButtonSelected: \"bg-brand-gold text-white\",\n yearButtonUnselected: \"text-brand-text\",\n}\n\nexport interface CalendarClassNames {\n root?: string;\n header?: string;\n calendarsContainer?: string;\n calendarContainer?: string;\n weekdayGrid?: string;\n weekday?: string;\n daysGrid?: string;\n footer?: string;\n\n navButton?: string;\n monthYearContainer?: string;\n monthYearLabel?: string;\n monthYearButton?: string;\n\n day?: DayClassNames;\n\n monthsGrid?: string;\n monthButton?: string;\n monthButtonSelected?: string;\n monthButtonUnselected?: string;\n\n yearsGrid?: string;\n yearButton?: string;\n yearButtonSelected?: string;\n yearButtonUnselected?: string;\n}\n\nexport const mergeClassNames = (custom?: CalendarClassNames): Required<CalendarClassNames> => {\n const result = { ...defaultClassNames };\n if (!custom) return result;\n\n for (const key in custom) {\n const k = key as keyof CalendarClassNames;\n if (k === 'day' && custom.day) {\n result.day = { ...defaultClassNames.day, ...custom.day };\n } else if (custom[k]) {\n (result as any)[k] = custom[k];\n }\n }\n return result;\n};\n","import React from 'react';\nimport { CalendarClassNames } from '../types';\n\ninterface MonthSelectionProps {\n year: number;\n month: number;\n monthNames: string[];\n minDate?: Date | null;\n maxDate?: Date | null;\n onMonthSelect: (month: number) => void;\n classNames: Required<CalendarClassNames>;\n}\n\nexport const MonthSelection: React.FC<MonthSelectionProps> = ({\n year,\n month,\n monthNames,\n minDate,\n maxDate,\n onMonthSelect,\n classNames,\n}) => {\n const isMonthDisabled = (monthIdx: number) => {\n if (minDate && year === minDate.getFullYear() && monthIdx < minDate.getMonth()) {\n return true;\n }\n if (maxDate && year === maxDate.getFullYear() && monthIdx > maxDate.getMonth()) {\n return true;\n }\n return false;\n };\n\n return (\n <div className={classNames.monthsGrid}>\n {monthNames.map((name, idx) => {\n const disabled = isMonthDisabled(idx);\n return (\n <button\n key={name}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => !disabled && onMonthSelect(idx)}\n className={`${classNames.monthButton} ${idx === month ? classNames.monthButtonSelected : classNames.monthButtonUnselected}`}\n disabled={disabled}\n >\n {name}\n </button>\n );\n })}\n </div>\n );\n};\n","import React, { useEffect, useRef } from 'react';\nimport { CalendarClassNames, DateAdapter } from '../types';\n\ninterface YearSelectionProps {\n year: number;\n minDate?: Date | null;\n maxDate?: Date | null;\n adapter: DateAdapter;\n onYearSelect: (year: number) => void;\n classNames: Required<CalendarClassNames>;\n}\n\nexport const YearSelection: React.FC<YearSelectionProps> = ({\n year,\n minDate,\n maxDate,\n adapter,\n onYearSelect,\n classNames,\n}) => {\n const yearListRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (yearListRef.current) {\n const selectedYearBtn = yearListRef.current.querySelector('[data-selected=\"true\"]');\n if (selectedYearBtn) {\n selectedYearBtn.scrollIntoView({ block: 'center' });\n }\n }\n }, []);\n\n const startYear = minDate ? adapter.get(adapter.date(minDate), 'year') : year - 50;\n const endYear = maxDate ? adapter.get(adapter.date(maxDate), 'year') : year + 50;\n const years = [];\n for (let y = startYear; y <= endYear; y++) {\n years.push(y);\n }\n\n return (\n <div ref={yearListRef} className={classNames.yearsGrid}>\n {years.map((y) => (\n <button\n key={y}\n data-selected={y === year}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => onYearSelect(y)}\n className={`${classNames.yearButton} ${y === year ? classNames.yearButtonSelected : classNames.yearButtonUnselected}`}\n >\n {y}\n </button>\n ))}\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport { useDates, UseDatesProps } from '../useDates';\nimport { Day } from './Day';\nimport { defaultAdapter } from '../adapters/dayjs';\nimport { getTranslations, Translations } from '../i18n';\nimport { CalendarHeader } from './CalendarHeader';\nimport { DateObj, CalendarClassNames } from '../types';\nimport { mergeClassNames } from '../classNames';\nimport { MonthSelection } from './MonthSelection';\nimport { YearSelection } from './YearSelection';\n\ninterface CalendarProps extends UseDatesProps {\n classNames?: CalendarClassNames;\n locale?: string;\n translations?: Partial<Translations>;\n header?: React.ReactNode | ((props: any) => React.ReactNode);\n footer?: React.ReactNode;\n renderDayTooltip?: (dateObj: DateObj) => React.ReactNode;\n}\n\ntype CalendarView = 'days' | 'months' | 'years';\n\nexport const Calendar: React.FC<CalendarProps> = (props) => {\n const {\n classNames: customClassNames,\n locale,\n translations: customTranslations,\n adapter = defaultAdapter,\n firstDayOfWeek = 0,\n header,\n footer,\n renderDayTooltip,\n ...useDatesProps\n } = props;\n\n const classNames = mergeClassNames(customClassNames);\n\n const [view, setView] = useState<CalendarView>('days');\n const [slideDirection, setSlideDirection] = useState<'left' | 'right' | null>(null);\n\n const t = getTranslations(adapter, locale, customTranslations);\n const weekdayNames = t.weekdays;\n const monthNames = t.months;\n\n const {\n calendars,\n getBackProps,\n getForwardProps,\n getDateProps,\n setOffset\n } = useDates({ ...useDatesProps, adapter, firstDayOfWeek });\n\n // Adjust weekday names based on firstDayOfWeek\n const sortedWeekdays = [...weekdayNames.slice(firstDayOfWeek), ...weekdayNames.slice(0, firstDayOfWeek)];\n\n const currentCalendar = calendars[0];\n const { month, year } = currentCalendar;\n\n const handleMonthSelect = (newMonth: number) => {\n const currentMonth = adapter.set(adapter.set(adapter.date(props.date || new Date()), 'year', year), 'month', month);\n const targetMonth = adapter.set(currentMonth, 'month', newMonth);\n const baseMonth = adapter.startOf(adapter.date(props.date || new Date()), 'month');\n const newOffset = adapter.diff(targetMonth, baseMonth, 'month');\n setSlideDirection(null);\n setOffset(newOffset);\n setView('days');\n };\n\n const handleYearSelect = (newYear: number) => {\n const currentMonth = adapter.set(adapter.set(adapter.date(props.date || new Date()), 'year', year), 'month', month);\n const targetMonth = adapter.set(currentMonth, 'year', newYear);\n const baseMonth = adapter.startOf(adapter.date(props.date || new Date()), 'month');\n const newOffset = adapter.diff(targetMonth, baseMonth, 'month');\n setSlideDirection(null);\n setOffset(newOffset);\n setView('days');\n };\n\n const wrappedGetBackProps = (args: any) => {\n const props = getBackProps(args);\n return {\n ...props,\n onClick: (e: any) => {\n setSlideDirection('left');\n props.onClick?.(e);\n }\n };\n };\n\n const wrappedGetForwardProps = (args: any) => {\n const props = getForwardProps(args);\n return {\n ...props,\n onClick: (e: any) => {\n setSlideDirection('right');\n props.onClick?.(e);\n }\n };\n };\n\n const renderDefaultHeader = () => (\n <CalendarHeader\n calendars={calendars}\n getBackProps={wrappedGetBackProps}\n getForwardProps={wrappedGetForwardProps}\n setView={setView}\n monthNames={monthNames}\n t={t}\n classNames={classNames}\n slideDirection={slideDirection}\n currentView={view}\n />\n );\n\n return (\n <div className={classNames.root}>\n {typeof header === 'function' ? header({\n calendars,\n getBackProps: wrappedGetBackProps,\n getForwardProps: wrappedGetForwardProps,\n setView,\n monthNames,\n t,\n slideDirection,\n currentView: view\n }) : (header || renderDefaultHeader())}\n\n <div className={classNames.calendarsContainer}>\n {view === 'months' && calendars.map((calendar) => (\n <div key={`months-${calendar.year}`} className={classNames.calendarContainer}>\n <MonthSelection\n year={calendar.year}\n month={calendar.month}\n monthNames={monthNames}\n minDate={props.minDate}\n maxDate={props.maxDate}\n onMonthSelect={handleMonthSelect}\n classNames={classNames}\n />\n </div>\n ))}\n {view === 'years' && calendars.map((calendar) => (\n <div key={`years-${calendar.year}`} className={classNames.calendarContainer}>\n <YearSelection\n year={calendar.year}\n minDate={props.minDate}\n maxDate={props.maxDate}\n adapter={adapter}\n onYearSelect={handleYearSelect}\n classNames={classNames}\n />\n </div>\n ))}\n {view === 'days' && calendars.map((calendar) => (\n <div key={`${calendar.month}-${calendar.year}`} className={classNames.calendarContainer}>\n {calendars.length > 1 && (\n <div className=\"text-center font-semibold mb-2 text-brand-text\">\n {monthNames[calendar.month]} {calendars[0].year !== calendars[calendars.length - 1].year ? calendar.year : ''}\n </div>\n )}\n <div className={classNames.weekdayGrid}>\n {sortedWeekdays.map((day) => (\n <div key={day} className={classNames.weekday}>{day}</div>\n ))}\n </div>\n <div className={`${classNames.daysGrid} ${slideDirection === 'left' ? 'animate-slide-in-left' : slideDirection === 'right' ? 'animate-slide-in-right' : ''}`}>\n {calendar.weeks.map((week, wi) =>\n week.map((dateObj, di) => (\n <Day\n key={`${wi}-${di}`}\n dateObj={dateObj}\n getDateProps={getDateProps}\n classNames={classNames}\n tooltip={dateObj && renderDayTooltip?.(dateObj)}\n />\n ))\n )}\n </div>\n </div>\n ))}\n </div>\n {footer && <div className={classNames.footer}>{footer}</div>}\n </div>\n );\n};\n"],"mappings":"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"}
|