react-modular-datepicker 0.0.2-canary.18 â 0.0.2-canary.20
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 +222 -1
- package/dist/cjs/index.d.ts +106 -0
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/useDates.d.ts +109 -0
- package/dist/cjs/useDates.js +2 -0
- package/dist/cjs/useDates.js.map +1 -0
- package/dist/cjs/utils.d.ts +84 -0
- package/dist/cjs/utils.js +2 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/es/index.d.mts +106 -0
- package/dist/es/index.mjs +2 -0
- package/dist/es/index.mjs.map +1 -0
- package/dist/es/useDates.d.mts +109 -0
- package/dist/es/useDates.mjs +2 -0
- package/dist/es/useDates.mjs.map +1 -0
- package/dist/es/utils.d.mts +84 -0
- package/dist/es/utils.mjs +2 -0
- package/dist/es/utils.mjs.map +1 -0
- package/dist/index.css +854 -0
- package/package.json +67 -3
- package/.gitattributes +0 -2
- package/.github/workflows/release.yml +0 -60
- package/index.js +0 -5
- package/scripts/bump-version.js +0 -41
package/README.md
CHANGED
|
@@ -1,2 +1,223 @@
|
|
|
1
1
|
# react-modular-datepicker
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
A modular, lightweight, and type-safe React datepicker library. Whether you need a fully-featured calendar component or a headless hook to build your own UI, `react-modular-datepicker` has you covered.
|
|
4
|
+
|
|
5
|
+
## Strengths
|
|
6
|
+
|
|
7
|
+
- đī¸ **Headless & Modular**: Use the `useDates` hook for complete control over your UI, or the `Calendar` component for a beautiful, ready-to-use setup.
|
|
8
|
+
- đĒļ **Lightweight**: Small footprint with a pluggable adapter system (defaults to Day.js).
|
|
9
|
+
- đĄī¸ **Type-safe**: Written in TypeScript for a great developer experience.
|
|
10
|
+
- đ¨ **Fully Customizable**: Style everything via Tailwind CSS or custom class names.
|
|
11
|
+
- đ **Localized**: Easy internationalization support with `dayjs` or custom adapters.
|
|
12
|
+
- ⥠**Feature-rich**: Single, multiple, and range selection modes, min/max dates, disabled dates, and more.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## API Reference
|
|
17
|
+
|
|
18
|
+
### Imports
|
|
19
|
+
|
|
20
|
+
```tsx
|
|
21
|
+
import {
|
|
22
|
+
Calendar,
|
|
23
|
+
useDates,
|
|
24
|
+
Dates,
|
|
25
|
+
Day,
|
|
26
|
+
DayjsAdapter,
|
|
27
|
+
defaultAdapter
|
|
28
|
+
} from 'react-modular-datepicker';
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### `Calendar` Component
|
|
32
|
+
|
|
33
|
+
The primary component for a ready-to-use calendar.
|
|
34
|
+
|
|
35
|
+
| Prop | Type | Default | Description |
|
|
36
|
+
| :--- | :--- | :--- | :--- |
|
|
37
|
+
| `date` | `Date` | `new Date()` | The initial date/month to display. |
|
|
38
|
+
| `selected` | `Date \| Date[] \| Range` | `undefined` | The currently selected date(s). |
|
|
39
|
+
| `selectionMode` | `'single' \| 'range' \| 'multiple'` | `'single'` | The selection behavior. |
|
|
40
|
+
| `onChange` | `(selected: any) => void` | `undefined` | Callback triggered when the selection changes. |
|
|
41
|
+
| `minDate` | `Date` | `undefined` | The earliest selectable date. |
|
|
42
|
+
| `maxDate` | `Date` | `undefined` | The latest selectable date. |
|
|
43
|
+
| `disabledDates` | `Date[]` | `undefined` | An array of dates that should be disabled. |
|
|
44
|
+
| `monthsToDisplay` | `number` | `1` | Number of months to show simultaneously. |
|
|
45
|
+
| `firstDayOfWeek` | `number` | `0` | The first day of the week (0=Sun, 1=Mon, ...). |
|
|
46
|
+
| `showOutsideDays` | `boolean` | `false` | Whether to show days from the previous/next months. |
|
|
47
|
+
| `classNames` | `CalendarClassNames` | `undefined` | Custom classes for styling various parts of the UI. |
|
|
48
|
+
| `locale` | `string` | `undefined` | Locale for date formatting (e.g., 'fr', 'es'). |
|
|
49
|
+
| `translations` | `Partial<Translations>` | `undefined` | Custom translation strings for "Back" and "Forward". |
|
|
50
|
+
| `adapter` | `DateAdapter` | `defaultAdapter` | The date management adapter (e.g., DayjsAdapter). |
|
|
51
|
+
|
|
52
|
+
### `useDates` Hook
|
|
53
|
+
|
|
54
|
+
The logic core of the library. It handles selection, navigation, and grid generation.
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
const {
|
|
58
|
+
calendars,
|
|
59
|
+
getDateProps,
|
|
60
|
+
getBackProps,
|
|
61
|
+
getForwardProps,
|
|
62
|
+
setOffset
|
|
63
|
+
} = useDates(props: UseDatesProps);
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**`UseDatesProps`** includes all props from `Calendar` (except `classNames`, `locale`, `translations`) plus:
|
|
67
|
+
- `onDateSelected`: `(dateObj: DateObj, event: any) => void`
|
|
68
|
+
- `onOffsetChanged`: `(newOffset: number) => void`
|
|
69
|
+
- `modifiers`: `Record<string, (date: Date) => boolean>`
|
|
70
|
+
|
|
71
|
+
### Main Types
|
|
72
|
+
|
|
73
|
+
#### `DateObj`
|
|
74
|
+
Represents a single day in the calendar grid.
|
|
75
|
+
- `date`: `Date`
|
|
76
|
+
- `selected`: `boolean`
|
|
77
|
+
- `selectable`: `boolean`
|
|
78
|
+
- `today`: `boolean`
|
|
79
|
+
- `prevMonth`/`nextMonth`: `boolean` (if outside current month)
|
|
80
|
+
- `isRangeStart`/`isRangeEnd`/`isRangeBetween`/`isRangeHovering`: `boolean`
|
|
81
|
+
- `modifiers`: `string[]`
|
|
82
|
+
|
|
83
|
+
#### `Calendar`
|
|
84
|
+
Represents a month grid.
|
|
85
|
+
- `month`: `number` (0-11)
|
|
86
|
+
- `year`: `number`
|
|
87
|
+
- `weeks`: `(DateObj | null)[][]`
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Recipes
|
|
92
|
+
|
|
93
|
+
<details>
|
|
94
|
+
<summary><b>Basic Selection</b></summary>
|
|
95
|
+
A simple single-date selection calendar.
|
|
96
|
+
|
|
97
|
+
```tsx
|
|
98
|
+
import { Calendar } from 'react-modular-datepicker';
|
|
99
|
+
import 'react-modular-datepicker/dist/index.css';
|
|
100
|
+
|
|
101
|
+
function BasicExample() {
|
|
102
|
+
return <Calendar onChange={(date) => console.log(date)} />;
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
https://github.com/Dragate/react-modular-datepicker/tree/test/docs/videos/basic.webm
|
|
107
|
+
</details>
|
|
108
|
+
|
|
109
|
+
<details>
|
|
110
|
+
<summary><b>Range Selection</b></summary>
|
|
111
|
+
Select a start and end date with a beautiful hover preview.
|
|
112
|
+
|
|
113
|
+
```tsx
|
|
114
|
+
<Calendar
|
|
115
|
+
selectionMode="range"
|
|
116
|
+
monthsToDisplay={2}
|
|
117
|
+
onChange={(range) => console.log(range)}
|
|
118
|
+
/>
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
https://github.com/Dragate/react-modular-datepicker/tree/test/docs/videos/range.webm
|
|
122
|
+
</details>
|
|
123
|
+
|
|
124
|
+
<details>
|
|
125
|
+
<summary><b>Multiple Selection</b></summary>
|
|
126
|
+
Select as many dates as you want.
|
|
127
|
+
|
|
128
|
+
```tsx
|
|
129
|
+
<Calendar
|
|
130
|
+
selectionMode="multiple"
|
|
131
|
+
onChange={(dates) => console.log(dates)}
|
|
132
|
+
/>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
https://github.com/Dragate/react-modular-datepicker/tree/test/docs/videos/multiple.webm
|
|
136
|
+
</details>
|
|
137
|
+
|
|
138
|
+
<details>
|
|
139
|
+
<summary><b>Headless Usage</b></summary>
|
|
140
|
+
Complete freedom over your UI using the `useDates` hook.
|
|
141
|
+
|
|
142
|
+
```tsx
|
|
143
|
+
const { calendars, getDateProps } = useDates({ selectionMode: 'single' });
|
|
144
|
+
|
|
145
|
+
return (
|
|
146
|
+
<div className="grid grid-cols-7">
|
|
147
|
+
{calendars[0].weeks.flat().map((dateObj, i) => (
|
|
148
|
+
dateObj ? (
|
|
149
|
+
<button key={i} {...getDateProps({ dateObj })}>
|
|
150
|
+
{dateObj.date.getDate()}
|
|
151
|
+
</button>
|
|
152
|
+
) : <div key={i} />
|
|
153
|
+
))}
|
|
154
|
+
</div>
|
|
155
|
+
);
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
https://github.com/Dragate/react-modular-datepicker/tree/test/docs/videos/headless.webm
|
|
159
|
+
</details>
|
|
160
|
+
|
|
161
|
+
<details>
|
|
162
|
+
<summary><b>Custom Styling</b></summary>
|
|
163
|
+
Easily customize the look and feel using the `classNames` prop.
|
|
164
|
+
|
|
165
|
+
```tsx
|
|
166
|
+
<Calendar
|
|
167
|
+
classNames={{
|
|
168
|
+
root: 'bg-indigo-900 text-white',
|
|
169
|
+
day: {
|
|
170
|
+
selected: 'bg-pink-500 text-white',
|
|
171
|
+
today: 'border-pink-500 text-pink-500',
|
|
172
|
+
}
|
|
173
|
+
}}
|
|
174
|
+
/>
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
https://github.com/Dragate/react-modular-datepicker/tree/test/docs/videos/styling.webm
|
|
178
|
+
</details>
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Contributors
|
|
183
|
+
|
|
184
|
+
We welcome contributions! Hereâs how you can get started:
|
|
185
|
+
|
|
186
|
+
### Installation
|
|
187
|
+
|
|
188
|
+
1. Clone the repository.
|
|
189
|
+
2. Install dependencies:
|
|
190
|
+
```bash
|
|
191
|
+
pnpm install
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Development
|
|
195
|
+
|
|
196
|
+
Start the development server with the example app:
|
|
197
|
+
```bash
|
|
198
|
+
pnpm run dev
|
|
199
|
+
```
|
|
200
|
+
This runs `bunchee` in watch mode for the library and starts the Next.js example app at `http://localhost:3000`.
|
|
201
|
+
|
|
202
|
+
### Testing
|
|
203
|
+
|
|
204
|
+
Run end-to-end tests using Playwright:
|
|
205
|
+
```bash
|
|
206
|
+
pnpm run test:e2e
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Documentation & Examples
|
|
210
|
+
|
|
211
|
+
- To update documentation, edit the `README.md`.
|
|
212
|
+
- To add or modify examples, check the `examples/` directory.
|
|
213
|
+
|
|
214
|
+
### Building
|
|
215
|
+
|
|
216
|
+
Build the package for production:
|
|
217
|
+
```bash
|
|
218
|
+
pnpm run build
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
License: MIT
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { UseDatesProps } from './useDates.js';
|
|
2
|
+
export { Dates, UseDatesProps, useDates } from './useDates.js';
|
|
3
|
+
export * from './utils.js';
|
|
4
|
+
import React from 'react';
|
|
5
|
+
import { Dayjs } from 'dayjs';
|
|
6
|
+
|
|
7
|
+
interface DateAdapter<T = any> {
|
|
8
|
+
date(value?: any): T;
|
|
9
|
+
add(date: T, amount: number, unit: 'day' | 'month' | 'year'): T;
|
|
10
|
+
subtract(date: T, amount: number, unit: 'day' | 'month' | 'year'): T;
|
|
11
|
+
startOf(date: T, unit: 'day' | 'month' | 'year'): T;
|
|
12
|
+
endOf(date: T, unit: 'day' | 'month' | 'year'): T;
|
|
13
|
+
isBefore(date: T, comparison: T, unit?: 'day' | 'month' | 'year'): boolean;
|
|
14
|
+
isAfter(date: T, comparison: T, unit?: 'day' | 'month' | 'year'): boolean;
|
|
15
|
+
isSame(date: T, comparison: T, unit?: 'day' | 'month' | 'year'): boolean;
|
|
16
|
+
set(date: T, unit: 'day' | 'month' | 'year', value: number): T;
|
|
17
|
+
get(date: T, unit: 'day' | 'month' | 'year'): number;
|
|
18
|
+
format(date: T, formatStr: string, locale?: string): string;
|
|
19
|
+
getDaysInMonth(date: T): number;
|
|
20
|
+
toDate(date: T): Date;
|
|
21
|
+
diff(date: T, comparison: T, unit: 'month' | 'year'): number;
|
|
22
|
+
getMonths(locale?: string): string[];
|
|
23
|
+
getWeekdays(locale?: string): string[];
|
|
24
|
+
}
|
|
25
|
+
type SelectionMode = 'single' | 'range' | 'multiple';
|
|
26
|
+
interface DateObj {
|
|
27
|
+
date: Date;
|
|
28
|
+
selected: boolean;
|
|
29
|
+
selectable: boolean;
|
|
30
|
+
today: boolean;
|
|
31
|
+
prevMonth: boolean;
|
|
32
|
+
nextMonth: boolean;
|
|
33
|
+
isRangeStart?: boolean;
|
|
34
|
+
isRangeEnd?: boolean;
|
|
35
|
+
isRangeBetween?: boolean;
|
|
36
|
+
isRangeHovering?: boolean;
|
|
37
|
+
modifiers?: string[];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
interface Translations {
|
|
41
|
+
months: string[];
|
|
42
|
+
weekdays: string[];
|
|
43
|
+
back: string;
|
|
44
|
+
forward: string;
|
|
45
|
+
}
|
|
46
|
+
declare function getDefaults(adapter?: DateAdapter, locale?: string): Translations;
|
|
47
|
+
declare function getTranslations(adapter?: DateAdapter, locale?: string, custom?: Partial<Translations>): Translations;
|
|
48
|
+
|
|
49
|
+
interface CalendarProps extends UseDatesProps {
|
|
50
|
+
classNames?: {
|
|
51
|
+
root?: string;
|
|
52
|
+
header?: string;
|
|
53
|
+
monthName?: string;
|
|
54
|
+
weekday?: string;
|
|
55
|
+
grid?: string;
|
|
56
|
+
day?: any;
|
|
57
|
+
navButton?: string;
|
|
58
|
+
monthYearSelectors?: string;
|
|
59
|
+
};
|
|
60
|
+
locale?: string;
|
|
61
|
+
translations?: Partial<Translations>;
|
|
62
|
+
}
|
|
63
|
+
declare const Calendar: React.FC<CalendarProps>;
|
|
64
|
+
|
|
65
|
+
interface DayProps {
|
|
66
|
+
dateObj: DateObj | null;
|
|
67
|
+
getDateProps: (args: {
|
|
68
|
+
dateObj: DateObj;
|
|
69
|
+
[key: string]: any;
|
|
70
|
+
}) => any;
|
|
71
|
+
classNames?: {
|
|
72
|
+
day?: string;
|
|
73
|
+
today?: string;
|
|
74
|
+
selected?: string;
|
|
75
|
+
disabled?: string;
|
|
76
|
+
outside?: string;
|
|
77
|
+
rangeStart?: string;
|
|
78
|
+
rangeEnd?: string;
|
|
79
|
+
rangeBetween?: string;
|
|
80
|
+
rangeHovering?: string;
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
declare const Day: React.FC<DayProps>;
|
|
84
|
+
|
|
85
|
+
declare class DayjsAdapter implements DateAdapter<Dayjs> {
|
|
86
|
+
date(value?: any): Dayjs;
|
|
87
|
+
add(date: Dayjs, amount: number, unit: 'day' | 'month' | 'year'): Dayjs;
|
|
88
|
+
subtract(date: Dayjs, amount: number, unit: 'day' | 'month' | 'year'): Dayjs;
|
|
89
|
+
startOf(date: Dayjs, unit: 'day' | 'month' | 'year'): Dayjs;
|
|
90
|
+
endOf(date: Dayjs, unit: 'day' | 'month' | 'year'): Dayjs;
|
|
91
|
+
isBefore(date: Dayjs, comparison: Dayjs, unit?: 'day' | 'month' | 'year'): boolean;
|
|
92
|
+
isAfter(date: Dayjs, comparison: Dayjs, unit?: 'day' | 'month' | 'year'): boolean;
|
|
93
|
+
isSame(date: Dayjs, comparison: Dayjs, unit?: 'day' | 'month' | 'year'): boolean;
|
|
94
|
+
set(date: Dayjs, unit: 'day' | 'month' | 'year', value: number): Dayjs;
|
|
95
|
+
get(date: Dayjs, unit: 'day' | 'month' | 'year'): number;
|
|
96
|
+
format(date: Dayjs, formatStr: string, locale?: string): string;
|
|
97
|
+
getDaysInMonth(date: Dayjs): number;
|
|
98
|
+
toDate(date: Dayjs): Date;
|
|
99
|
+
diff(date: Dayjs, comparison: Dayjs, unit: 'month' | 'year'): number;
|
|
100
|
+
getMonths(locale?: string): string[];
|
|
101
|
+
getWeekdays(locale?: string): string[];
|
|
102
|
+
}
|
|
103
|
+
declare const defaultAdapter: DayjsAdapter;
|
|
104
|
+
|
|
105
|
+
export { Calendar, Day, DayjsAdapter, defaultAdapter, getDefaults, getTranslations };
|
|
106
|
+
export type { DateAdapter, DateObj, SelectionMode, Translations };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./useDates.js"),t=require("./utils.js"),a=require("react"),r=require("dayjs"),l=require("dayjs/plugin/isBetween"),n=require("dayjs/plugin/customParseFormat"),o=require("dayjs/plugin/localeData");function d(e){return e&&e.__esModule?e:{default:e}}var s=d(a),u=d(r),i=d(l),c=d(n),f=d(o);let m=({dateObj:e,getDateProps:t,classNames:a})=>{if(!e)return s.default.createElement("div",{className:"aspect-square"});let{date:r,selected:l,selectable:n,today:o,prevMonth:d,nextMonth:u,isRangeStart:i,isRangeEnd:c,isRangeBetween:f,isRangeHovering:m}=e,g=d||u,p=["aspect-square flex items-center justify-center text-sm font-medium transition-all relative cursor-pointer",i&&c?"bg-brand-gold text-white rounded-full":i?"bg-brand-gold text-white rounded-l-full rounded-r-none":c?"bg-brand-gold text-white rounded-r-full rounded-l-none":f||m?"bg-brand-gray-light text-brand-text rounded-none":l?"bg-brand-gold text-white rounded-full":o?"text-brand-gold border border-brand-gold rounded-full":n?g?"text-gray-400 rounded-full":"hover:bg-brand-gray-light text-brand-text rounded-full":"text-gray-300 cursor-not-allowed",null==a?void 0:a.day,o&&(null==a?void 0:a.today),l&&(null==a?void 0:a.selected),!n&&(null==a?void 0:a.disabled),g&&(null==a?void 0:a.outside),i&&(null==a?void 0:a.rangeStart),c&&(null==a?void 0:a.rangeEnd),f&&(null==a?void 0:a.rangeBetween),m&&(null==a?void 0:a.rangeHovering),...(e.modifiers||[]).map(e=>(null==a?void 0:a[e])||e)].filter(Boolean).join(" ");return s.default.createElement("button",{...t({dateObj:e}),className:p},r.getDate())};u.default.extend(i.default),u.default.extend(c.default),u.default.extend(f.default);class g{date(e){return u.default(e)}add(e,t,a){return e.add(t,a)}subtract(e,t,a){return e.subtract(t,a)}startOf(e,t){return e.startOf(t)}endOf(e,t){return e.endOf(t)}isBefore(e,t,a){return e.isBefore(t,a)}isAfter(e,t,a){return e.isAfter(t,a)}isSame(e,t,a){return e.isSame(t,a)}set(e,t,a){return"day"===t?e.date(a):e.set(t,a)}get(e,t){return"day"===t?e.date():e.get(t)}format(e,t,a){return a?e.locale(a).format(t):e.format(t)}getDaysInMonth(e){return e.daysInMonth()}toDate(e){return e.toDate()}diff(e,t,a){return e.diff(t,a)}getMonths(e){return e?u.default().locale(e).localeData().months():u.default.localeData().months()}getWeekdays(e){return e?u.default().locale(e).localeData().weekdaysShort().map(e=>e.toUpperCase()):u.default.localeData().weekdaysShort().map(e=>e.toUpperCase())}}let p=new g;function y(e=p,t){return{months:e.getMonths(t),weekdays:e.getWeekdays(t),back:"Previous month",forward:"Next month"}}function b(e=p,t,a){return{...y(e,t),...a}}let h=()=>s.default.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},s.default.createElement("polyline",{points:"15 18 9 12 15 6"})),v=()=>s.default.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},s.default.createElement("polyline",{points:"9 18 15 12 9 6"}));!function(e){if(!e||"u"<typeof document)return;let t=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css",t.appendChild(a),a.styleSheet?a.styleSheet.cssText=e:a.appendChild(document.createTextNode(e))}("@theme{--color-brand-gold:#c5a059;--color-brand-gray-light:#f1f3f5;--color-brand-gray-dark:#6c757d;--color-brand-text:#343a40}@layer base{button{@apply cursor-pointer;}}"),Object.defineProperty(exports,"Dates",{enumerable:!0,get:function(){return e.Dates}}),Object.defineProperty(exports,"useDates",{enumerable:!0,get:function(){return e.useDates}}),exports.Calendar=t=>{let{classNames:r,locale:l,translations:n,adapter:o=p,firstDayOfWeek:d=0,...u}=t,[i,c]=a.useState("days"),f=a.useRef(null),g=b(o,l,n),y=g.weekdays,x=g.months,{calendars:w,getBackProps:D,getForwardProps:E,getDateProps:N,setOffset:k}=e.useDates({...u,adapter:o,firstDayOfWeek:d}),j=[...y.slice(d),...y.slice(0,d)],{month:M,year:O}=w[0];switch(a.useEffect(()=>{if("years"===i&&f.current){let e=f.current.querySelector('[data-selected="true"]');e&&e.scrollIntoView({block:"center"})}},[i]),i){case"months":return s.default.createElement("div",{className:"w-fit p-4 bg-white rounded-lg shadow-lg min-w-[280px]"},s.default.createElement("div",{className:"flex items-center justify-between mb-4"},s.default.createElement("button",{onMouseDown:e=>e.preventDefault(),onClick:()=>c("days"),className:"p-2 hover:bg-gray-100 rounded-full"},s.default.createElement(h,null)),s.default.createElement("div",{className:"font-semibold"},O),s.default.createElement("div",{className:"w-9"})),s.default.createElement("div",{className:"grid grid-cols-3 gap-2"},x.map((e,a)=>s.default.createElement("button",{key:e,onMouseDown:e=>e.preventDefault(),onClick:()=>{let e,r,l;return e=o.set(o.set(o.date(t.date||new Date),"year",O),"month",M),r=o.set(e,"month",a),l=o.startOf(o.date(t.date||new Date),"month"),void(k(o.diff(r,l,"month")),c("days"))},className:`py-4 rounded-lg hover:bg-brand-gray-light transition-colors ${a===M?"bg-brand-gold text-white":"text-brand-text"}`},e))));case"years":let C=t.minDate?o.get(o.date(t.minDate),"year"):O-50,$=t.maxDate?o.get(o.date(t.maxDate),"year"):O+50,q=[];for(let e=C;e<=$;e++)q.push(e);return s.default.createElement("div",{className:"w-fit p-4 bg-white rounded-lg shadow-lg min-w-[280px]"},s.default.createElement("div",{className:"flex items-center justify-between mb-4"},s.default.createElement("button",{onMouseDown:e=>e.preventDefault(),onClick:()=>c("days"),className:"p-2 hover:bg-gray-100 rounded-full"},s.default.createElement(h,null)),s.default.createElement("div",{className:"font-semibold"},"Select Year"),s.default.createElement("div",{className:"w-9"})),s.default.createElement("div",{ref:f,className:"grid grid-cols-3 gap-2 max-h-[300px] overflow-y-auto pr-2"},q.map(e=>s.default.createElement("button",{key:e,"data-selected":e===O,onMouseDown:e=>e.preventDefault(),onClick:()=>{let a,r,l;return a=o.set(o.set(o.date(t.date||new Date),"year",O),"month",M),r=o.set(a,"year",e),l=o.startOf(o.date(t.date||new Date),"month"),void(k(o.diff(r,l,"month")),c("days"))},className:`py-3 rounded-lg hover:bg-brand-gray-light transition-colors ${e===O?"bg-brand-gold text-white":"text-brand-text"}`},e))));default:return s.default.createElement("div",{className:`w-fit flex flex-col md:flex-row gap-4 p-4 bg-white rounded-lg shadow-lg ${(null==r?void 0:r.root)||""}`},w.map((e,t)=>s.default.createElement("div",{key:`${e.month}-${e.year}`,className:"flex-1 min-w-[280px]"},s.default.createElement("div",{className:"flex items-center justify-between mb-6"},0===t?s.default.createElement("button",{...D({calendars:w}),onMouseDown:e=>e.preventDefault(),className:`p-2 hover:bg-gray-100 rounded-full transition-colors ${(null==r?void 0:r.navButton)||""}`,"aria-label":g.back},s.default.createElement(h,null)):s.default.createElement("div",{className:"w-9"}),s.default.createElement("div",{className:`flex gap-1 items-center font-semibold text-brand-text ${(null==r?void 0:r.monthName)||""}`},s.default.createElement("button",{onMouseDown:e=>e.preventDefault(),onClick:()=>c("months"),className:"hover:bg-gray-100 px-2 py-1 rounded"},x[e.month]),s.default.createElement("button",{onMouseDown:e=>e.preventDefault(),onClick:()=>c("years"),className:"hover:bg-gray-100 px-2 py-1 rounded"},e.year)),t===w.length-1?s.default.createElement("button",{...E({calendars:w}),onMouseDown:e=>e.preventDefault(),className:`p-2 hover:bg-gray-100 rounded-full transition-colors ${(null==r?void 0:r.navButton)||""}`,"aria-label":g.forward},s.default.createElement(v,null)):s.default.createElement("div",{className:"w-9"})),s.default.createElement("div",{className:"grid grid-cols-7 gap-1 mb-2"},j.map(e=>s.default.createElement("div",{key:e,className:`text-center text-xs font-bold text-gray-400 py-2 ${(null==r?void 0:r.weekday)||""}`},e))),s.default.createElement("div",{className:`grid grid-cols-7 gap-1 ${(null==r?void 0:r.grid)||""}`},e.weeks.map((e,t)=>e.map((e,a)=>s.default.createElement(m,{key:`${t}-${a}`,dateObj:e,getDateProps:N,classNames:null==r?void 0:r.day})))))))}},exports.Day=m,exports.DayjsAdapter=g,exports.defaultAdapter=p,exports.getDefaults=y,exports.getTranslations=b,Object.keys(t).forEach(function(e){"default"===e||Object.prototype.hasOwnProperty.call(exports,e)||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return t[e]}})});
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
interface DateAdapter<T = any> {
|
|
2
|
+
date(value?: any): T;
|
|
3
|
+
add(date: T, amount: number, unit: 'day' | 'month' | 'year'): T;
|
|
4
|
+
subtract(date: T, amount: number, unit: 'day' | 'month' | 'year'): T;
|
|
5
|
+
startOf(date: T, unit: 'day' | 'month' | 'year'): T;
|
|
6
|
+
endOf(date: T, unit: 'day' | 'month' | 'year'): T;
|
|
7
|
+
isBefore(date: T, comparison: T, unit?: 'day' | 'month' | 'year'): boolean;
|
|
8
|
+
isAfter(date: T, comparison: T, unit?: 'day' | 'month' | 'year'): boolean;
|
|
9
|
+
isSame(date: T, comparison: T, unit?: 'day' | 'month' | 'year'): boolean;
|
|
10
|
+
set(date: T, unit: 'day' | 'month' | 'year', value: number): T;
|
|
11
|
+
get(date: T, unit: 'day' | 'month' | 'year'): number;
|
|
12
|
+
format(date: T, formatStr: string, locale?: string): string;
|
|
13
|
+
getDaysInMonth(date: T): number;
|
|
14
|
+
toDate(date: T): Date;
|
|
15
|
+
diff(date: T, comparison: T, unit: 'month' | 'year'): number;
|
|
16
|
+
getMonths(locale?: string): string[];
|
|
17
|
+
getWeekdays(locale?: string): string[];
|
|
18
|
+
}
|
|
19
|
+
type SelectionMode = 'single' | 'range' | 'multiple';
|
|
20
|
+
interface DateObj {
|
|
21
|
+
date: Date;
|
|
22
|
+
selected: boolean;
|
|
23
|
+
selectable: boolean;
|
|
24
|
+
today: boolean;
|
|
25
|
+
prevMonth: boolean;
|
|
26
|
+
nextMonth: boolean;
|
|
27
|
+
isRangeStart?: boolean;
|
|
28
|
+
isRangeEnd?: boolean;
|
|
29
|
+
isRangeBetween?: boolean;
|
|
30
|
+
isRangeHovering?: boolean;
|
|
31
|
+
modifiers?: string[];
|
|
32
|
+
}
|
|
33
|
+
interface Calendar {
|
|
34
|
+
firstDayOfMonth: Date;
|
|
35
|
+
lastDayOfMonth: Date;
|
|
36
|
+
month: number;
|
|
37
|
+
year: number;
|
|
38
|
+
weeks: (DateObj | null)[][];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
interface UseDatesProps {
|
|
42
|
+
date?: Date;
|
|
43
|
+
maxDate?: Date;
|
|
44
|
+
minDate?: Date;
|
|
45
|
+
disabledDates?: Date[];
|
|
46
|
+
monthsToDisplay?: number;
|
|
47
|
+
firstDayOfWeek?: number;
|
|
48
|
+
showOutsideDays?: boolean;
|
|
49
|
+
offset?: number;
|
|
50
|
+
onDateSelected?: (dateObj: DateObj, event: any) => void;
|
|
51
|
+
onOffsetChanged?: (newOffset: number) => void;
|
|
52
|
+
selected?: Date | Date[] | {
|
|
53
|
+
start?: Date;
|
|
54
|
+
end?: Date;
|
|
55
|
+
};
|
|
56
|
+
modifiers?: Record<string, (date: Date) => boolean>;
|
|
57
|
+
selectionMode?: SelectionMode;
|
|
58
|
+
adapter?: DateAdapter;
|
|
59
|
+
onChange?: (selected: Date | Date[] | {
|
|
60
|
+
start?: Date;
|
|
61
|
+
end?: Date;
|
|
62
|
+
} | null) => void;
|
|
63
|
+
onMonthChange?: (date: Date) => void;
|
|
64
|
+
onYearChange?: (date: Date) => void;
|
|
65
|
+
}
|
|
66
|
+
declare function useDates({ date, maxDate, minDate, disabledDates, monthsToDisplay, firstDayOfWeek, showOutsideDays, offset, onDateSelected, onOffsetChanged, selected, modifiers, selectionMode, adapter, onChange, onMonthChange, onYearChange }: UseDatesProps): {
|
|
67
|
+
calendars: Calendar[];
|
|
68
|
+
getDateProps: (args: {
|
|
69
|
+
onClick?: (event: any) => void;
|
|
70
|
+
dateObj: DateObj;
|
|
71
|
+
[key: string]: any;
|
|
72
|
+
}) => {
|
|
73
|
+
onMouseEnter: (event: any, ...args: unknown[]) => boolean;
|
|
74
|
+
onMouseLeave: (event: any, ...args: unknown[]) => boolean;
|
|
75
|
+
onClick: (event: any, ...args: unknown[]) => boolean;
|
|
76
|
+
disabled: boolean;
|
|
77
|
+
'aria-label': string;
|
|
78
|
+
'aria-pressed': boolean;
|
|
79
|
+
role: string;
|
|
80
|
+
};
|
|
81
|
+
getBackProps: (args_0: {
|
|
82
|
+
[key: string]: any;
|
|
83
|
+
onClick?: (event: any) => void;
|
|
84
|
+
offset?: number;
|
|
85
|
+
calendars: Calendar[];
|
|
86
|
+
}) => {
|
|
87
|
+
onClick: (event: any, ...args: unknown[]) => boolean;
|
|
88
|
+
disabled: boolean;
|
|
89
|
+
'aria-label': string;
|
|
90
|
+
};
|
|
91
|
+
getForwardProps: (args_0: {
|
|
92
|
+
[key: string]: any;
|
|
93
|
+
onClick?: (event: any) => void;
|
|
94
|
+
offset?: number;
|
|
95
|
+
calendars: Calendar[];
|
|
96
|
+
}) => {
|
|
97
|
+
onClick: (event: any, ...args: unknown[]) => boolean;
|
|
98
|
+
disabled: boolean;
|
|
99
|
+
'aria-label': string;
|
|
100
|
+
};
|
|
101
|
+
setOffset: (newOffset: number) => void;
|
|
102
|
+
};
|
|
103
|
+
declare function Dates(props: UseDatesProps & {
|
|
104
|
+
render?: (props: any) => any;
|
|
105
|
+
children?: (props: any) => any;
|
|
106
|
+
}): any;
|
|
107
|
+
|
|
108
|
+
export { Dates, useDates };
|
|
109
|
+
export type { UseDatesProps };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("dayjs"),a=require("dayjs/plugin/isBetween"),r=require("dayjs/plugin/customParseFormat"),n=require("dayjs/plugin/localeData"),d=require("./utils.js");function s(e){return e&&e.__esModule?e:{default:e}}var o=s(t),l=s(a),u=s(r),i=s(n);o.default.extend(l.default),o.default.extend(u.default),o.default.extend(i.default);let f=new class{date(e){return o.default(e)}add(e,t,a){return e.add(t,a)}subtract(e,t,a){return e.subtract(t,a)}startOf(e,t){return e.startOf(t)}endOf(e,t){return e.endOf(t)}isBefore(e,t,a){return e.isBefore(t,a)}isAfter(e,t,a){return e.isAfter(t,a)}isSame(e,t,a){return e.isSame(t,a)}set(e,t,a){return"day"===t?e.date(a):e.set(t,a)}get(e,t){return"day"===t?e.date():e.get(t)}format(e,t,a){return a?e.locale(a).format(t):e.format(t)}getDaysInMonth(e){return e.daysInMonth()}toDate(e){return e.toDate()}diff(e,t,a){return e.diff(t,a)}getMonths(e){return e?o.default().locale(e).localeData().months():o.default.localeData().months()}getWeekdays(e){return e?o.default().locale(e).localeData().weekdaysShort().map(e=>e.toUpperCase()):o.default.localeData().weekdaysShort().map(e=>e.toUpperCase())}};function c({minDate:e,offsetMonth:t,handleOffsetChanged:a,adapter:r},{onClick:n,offset:s=1,calendars:o,...l}){return{onClick:d.composeEventHandlers(n,()=>{a(t-d.subtractMonth({calendars:o,offset:s,minDate:e,adapter:r}))}),disabled:d.isBackDisabled({calendars:o,minDate:e,adapter:r}),"aria-label":`Go back ${s} month${1===s?"":"s"}`,...l}}function p({maxDate:e,offsetMonth:t,handleOffsetChanged:a,adapter:r},{onClick:n,offset:s=1,calendars:o,...l}){return{onClick:d.composeEventHandlers(n,()=>{a(t+d.addMonth({calendars:o,offset:s,maxDate:e,adapter:r}))}),disabled:d.isForwardDisabled({calendars:o,maxDate:e,adapter:r}),"aria-label":`Go forward ${s} month${1===s?"":"s"}`,...l}}function m({date:t=new Date,maxDate:a,minDate:r,disabledDates:n,monthsToDisplay:s=1,firstDayOfWeek:o=0,showOutsideDays:l=!1,offset:u,onDateSelected:i,onOffsetChanged:b=()=>{},selected:y,modifiers:v,selectionMode:g="single",adapter:D=f,onChange:h,onMonthChange:k,onYearChange:M}){let[w,C]=e.useState(0),[S,j]=e.useState(void 0),O=function(e,t=0){return void 0!==e?e:t}(u,w),E=e.useCallback(e=>{void 0===u&&C(e),b(e);let a=D.toDate(D.add(D.startOf(D.date(t),"month"),e,"month"));null==k||k(a),null==M||M(a)},[u,b,t,D,k,M]),q=e.useCallback((e,t)=>{if(null==i||i(e,t),h){if("single"===g)h(e.date);else if("multiple"===g){let t=Array.isArray(y)?y:y?[y]:[];t.some(t=>D.isSame(D.date(t),D.date(e.date),"day"))?h(t.filter(t=>!D.isSame(D.date(t),D.date(e.date),"day"))):h([...t,e.date])}else if("range"===g){let t=y&&"object"==typeof y&&!Array.isArray(y)?y:{start:void 0,end:void 0};!t.start||t.start&&t.end?h({start:e.date,end:void 0}):D.isBefore(D.date(e.date),D.date(t.start),"day")?h({start:e.date,end:t.start}):h({start:t.start,end:e.date})}}},[i,h,g,y,D]);return{calendars:d.getCalendars({date:t,selected:y,disabledDates:n,modifiers:v,monthsToDisplay:s,minDate:r,maxDate:a,offset:O,firstDayOfWeek:o,showOutsideDays:l,adapter:D,selectionMode:g,hoveredDate:S}),getDateProps:e=>({...function(e,{onClick:t,dateObj:a,...r}){return{onClick:d.composeEventHandlers(t,t=>{e(a,t)}),disabled:!a.selectable,"aria-label":a.date.toDateString(),"aria-pressed":a.selected,role:"button",...r}}(q,e),onMouseEnter:d.composeEventHandlers(e.onMouseEnter,()=>{j(e.dateObj.date)}),onMouseLeave:d.composeEventHandlers(e.onMouseLeave,()=>{j(void 0)})}),getBackProps:c.bind(null,{minDate:r,offsetMonth:O,handleOffsetChanged:E,adapter:D}),getForwardProps:p.bind(null,{maxDate:a,offsetMonth:O,handleOffsetChanged:E,adapter:D}),setOffset:E}}exports.Dates=function(e){let t=m(e);return d.unwrapChildrenForPreact(e.render||e.children)(t)},exports.useDates=m;
|
|
2
|
+
//# sourceMappingURL=useDates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDates.js","sources":["../../src/adapters/dayjs.ts","../../src/useDates.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport type { Dayjs } from 'dayjs';\nimport isBetween from 'dayjs/plugin/isBetween';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport localeData from 'dayjs/plugin/localeData';\nimport type { DateAdapter } from '../types';\n\ndayjs.extend(isBetween);\ndayjs.extend(customParseFormat);\ndayjs.extend(localeData);\n\nexport class DayjsAdapter implements DateAdapter<Dayjs> {\n date(value?: any): Dayjs {\n return dayjs(value);\n }\n\n add(date: Dayjs, amount: number, unit: 'day' | 'month' | 'year'): Dayjs {\n return date.add(amount, unit);\n }\n\n subtract(date: Dayjs, amount: number, unit: 'day' | 'month' | 'year'): Dayjs {\n return date.subtract(amount, unit);\n }\n\n startOf(date: Dayjs, unit: 'day' | 'month' | 'year'): Dayjs {\n return date.startOf(unit);\n }\n\n endOf(date: Dayjs, unit: 'day' | 'month' | 'year'): Dayjs {\n return date.endOf(unit);\n }\n\n isBefore(date: Dayjs, comparison: Dayjs, unit?: 'day' | 'month' | 'year'): boolean {\n return date.isBefore(comparison, unit);\n }\n\n isAfter(date: Dayjs, comparison: Dayjs, unit?: 'day' | 'month' | 'year'): boolean {\n return date.isAfter(comparison, unit);\n }\n\n isSame(date: Dayjs, comparison: Dayjs, unit?: 'day' | 'month' | 'year'): boolean {\n return date.isSame(comparison, unit);\n }\n\n set(date: Dayjs, unit: 'day' | 'month' | 'year', value: number): Dayjs {\n if (unit === 'day') return date.date(value);\n return date.set(unit, value);\n }\n\n get(date: Dayjs, unit: 'day' | 'month' | 'year'): number {\n if (unit === 'day') return date.date();\n return date.get(unit);\n }\n\n format(date: Dayjs, formatStr: string, locale?: string): string {\n if (locale) {\n return date.locale(locale).format(formatStr);\n }\n return date.format(formatStr);\n }\n\n getDaysInMonth(date: Dayjs): number {\n return date.daysInMonth();\n }\n\n toDate(date: Dayjs): Date {\n return date.toDate();\n }\n\n diff(date: Dayjs, comparison: Dayjs, unit: 'month' | 'year'): number {\n return date.diff(comparison, unit);\n }\n\n getMonths(locale?: string): string[] {\n return locale ? dayjs().locale(locale).localeData().months() : dayjs.localeData().months();\n }\n\n getWeekdays(locale?: string): string[] {\n return locale ? dayjs().locale(locale).localeData().weekdaysShort().map(d => d.toUpperCase()) : dayjs.localeData().weekdaysShort().map(d => d.toUpperCase());\n }\n}\n\nexport const defaultAdapter = new DayjsAdapter();\n","import { useState, useCallback } from 'react';\nimport type { DateAdapter, DateObj, SelectionMode, Calendar } from './types';\nimport { defaultAdapter } from './adapters/dayjs';\nimport {\n addMonth,\n composeEventHandlers,\n getCalendars,\n isBackDisabled,\n isForwardDisabled,\n subtractMonth,\n unwrapChildrenForPreact\n} from './utils';\n\nfunction isOffsetControlled(propOffset?: number) {\n return propOffset !== undefined;\n}\n\nfunction getOffset(prop?: number, state: number = 0): number {\n return isOffsetControlled(prop) ? prop! : state;\n}\n\nfunction getDateProps(\n onDateSelected: (dateObj: DateObj, event: any) => void,\n { onClick, dateObj, ...rest }: { onClick?: (event: any) => void, dateObj: DateObj, [key: string]: any }\n) {\n return {\n onClick: composeEventHandlers(onClick, (event: any) => {\n onDateSelected(dateObj, event);\n }),\n disabled: !dateObj.selectable,\n 'aria-label': dateObj.date.toDateString(),\n 'aria-pressed': dateObj.selected,\n role: 'button',\n ...rest\n };\n}\n\nfunction getBackProps(\n { minDate, offsetMonth, handleOffsetChanged, adapter }: { minDate?: Date, offsetMonth: number, handleOffsetChanged: (newOffset: number) => void, adapter: DateAdapter },\n {\n onClick,\n offset = 1,\n calendars,\n ...rest\n }: { onClick?: (event: any) => void, offset?: number, calendars: Calendar[], [key: string]: any }\n) {\n return {\n onClick: composeEventHandlers(onClick, () => {\n handleOffsetChanged(\n offsetMonth - subtractMonth({ calendars, offset, minDate, adapter })\n );\n }),\n disabled: isBackDisabled({ calendars, minDate, adapter }),\n 'aria-label': `Go back ${offset} month${offset === 1 ? '' : 's'}`,\n ...rest\n };\n}\n\nfunction getForwardProps(\n { maxDate, offsetMonth, handleOffsetChanged, adapter }: { maxDate?: Date, offsetMonth: number, handleOffsetChanged: (newOffset: number) => void, adapter: DateAdapter },\n {\n onClick,\n offset = 1,\n calendars,\n ...rest\n }: { onClick?: (event: any) => void, offset?: number, calendars: Calendar[], [key: string]: any }\n) {\n return {\n onClick: composeEventHandlers(onClick, () => {\n handleOffsetChanged(\n offsetMonth + addMonth({ calendars, offset, maxDate, adapter })\n );\n }),\n disabled: isForwardDisabled({ calendars, maxDate, adapter }),\n 'aria-label': `Go forward ${offset} month${offset === 1 ? '' : 's'}`,\n ...rest\n };\n}\n\nexport interface UseDatesProps {\n date?: Date;\n maxDate?: Date;\n minDate?: Date;\n disabledDates?: Date[];\n monthsToDisplay?: number;\n firstDayOfWeek?: number;\n showOutsideDays?: boolean;\n offset?: number;\n onDateSelected?: (dateObj: DateObj, event: any) => void;\n onOffsetChanged?: (newOffset: number) => void;\n selected?: Date | Date[] | { start?: Date, end?: Date };\n modifiers?: Record<string, (date: Date) => boolean>;\n selectionMode?: SelectionMode;\n adapter?: DateAdapter;\n onChange?: (selected: Date | Date[] | { start?: Date, end?: Date } | null) => void;\n onMonthChange?: (date: Date) => void;\n onYearChange?: (date: Date) => void;\n}\n\nexport function useDates({\n date = new Date(),\n maxDate,\n minDate,\n disabledDates,\n monthsToDisplay = 1,\n firstDayOfWeek = 0,\n showOutsideDays = false,\n offset,\n onDateSelected,\n onOffsetChanged = () => { },\n selected,\n modifiers,\n selectionMode = 'single',\n adapter = defaultAdapter,\n onChange,\n onMonthChange,\n onYearChange\n}: UseDatesProps) {\n const [stateOffset, setStateOffset] = useState(0);\n const [hoveredDate, setHoveredDate] = useState<Date | undefined>(undefined);\n const offsetMonth = getOffset(offset, stateOffset);\n\n const handleOffsetChanged = useCallback((newOffset: number) => {\n if (!isOffsetControlled(offset)) {\n setStateOffset(newOffset);\n }\n onOffsetChanged(newOffset);\n\n const newDate = adapter.toDate(adapter.add(adapter.startOf(adapter.date(date), 'month'), newOffset, 'month'));\n onMonthChange?.(newDate);\n onYearChange?.(newDate);\n }, [offset, onOffsetChanged, date, adapter, onMonthChange, onYearChange]);\n\n const handleDateSelected = useCallback((dateObj: DateObj, event: any) => {\n onDateSelected?.(dateObj, event);\n\n if (!onChange) return;\n\n if (selectionMode === 'single') {\n onChange(dateObj.date);\n } else if (selectionMode === 'multiple') {\n const currentSelected = Array.isArray(selected) ? selected : (selected ? [selected as Date] : []);\n const isAlreadySelected = currentSelected.some(d => adapter.isSame(adapter.date(d), adapter.date(dateObj.date), 'day'));\n if (isAlreadySelected) {\n onChange(currentSelected.filter(d => !adapter.isSame(adapter.date(d), adapter.date(dateObj.date), 'day')));\n } else {\n onChange([...currentSelected, dateObj.date]);\n }\n } else if (selectionMode === 'range') {\n const range = (selected && typeof selected === 'object' && !Array.isArray(selected)) ? selected : { start: undefined, end: undefined };\n if (!range.start || (range.start && range.end)) {\n onChange({ start: dateObj.date, end: undefined });\n } else {\n if (adapter.isBefore(adapter.date(dateObj.date), adapter.date(range.start), 'day')) {\n onChange({ start: dateObj.date, end: range.start });\n } else {\n onChange({ start: range.start, end: dateObj.date });\n }\n }\n }\n }, [onDateSelected, onChange, selectionMode, selected, adapter]);\n\n const calendars = getCalendars({\n date,\n selected,\n disabledDates,\n modifiers,\n monthsToDisplay,\n minDate,\n maxDate,\n offset: offsetMonth,\n firstDayOfWeek,\n showOutsideDays,\n adapter,\n selectionMode,\n hoveredDate\n });\n\n return {\n calendars,\n getDateProps: (args: { onClick?: (event: any) => void, dateObj: DateObj, [key: string]: any }) => {\n const props = getDateProps(handleDateSelected, args);\n return {\n ...props,\n onMouseEnter: composeEventHandlers(args.onMouseEnter, () => {\n setHoveredDate(args.dateObj.date);\n }),\n onMouseLeave: composeEventHandlers(args.onMouseLeave, () => {\n setHoveredDate(undefined);\n })\n };\n },\n getBackProps: getBackProps.bind(null, {\n minDate,\n offsetMonth,\n handleOffsetChanged,\n adapter\n }),\n getForwardProps: getForwardProps.bind(null, {\n maxDate,\n offsetMonth,\n handleOffsetChanged,\n adapter\n }),\n setOffset: handleOffsetChanged\n };\n}\n\nexport function Dates(props: UseDatesProps & { render?: (props: any) => any, children?: (props: any) => any }) {\n const ComponentCalendar = useDates(props);\n const children = unwrapChildrenForPreact(props.render || props.children);\n //@ts-ignore\n return children(ComponentCalendar);\n}\n"],"names":["dayjs","extend","isBetween","customParseFormat","localeData","defaultAdapter","date","value","add","amount","unit","subtract","startOf","endOf","isBefore","comparison","isAfter","isSame","set","get","format","formatStr","locale","getDaysInMonth","daysInMonth","toDate","diff","getMonths","months","getWeekdays","weekdaysShort","map","d","toUpperCase","getBackProps","minDate","offsetMonth","handleOffsetChanged","adapter","onClick","offset","calendars","rest","composeEventHandlers","subtractMonth","disabled","isBackDisabled","getForwardProps","maxDate","addMonth","isForwardDisabled","useDates","Date","disabledDates","monthsToDisplay","firstDayOfWeek","showOutsideDays","onDateSelected","onOffsetChanged","selected","modifiers","selectionMode","onChange","onMonthChange","onYearChange","stateOffset","setStateOffset","useState","hoveredDate","setHoveredDate","undefined","getOffset","prop","state","isOffsetControlled","propOffset","useCallback","newOffset","newDate","handleDateSelected","dateObj","event","currentSelected","Array","isArray","some","filter","range","start","end","getCalendars","getDateProps","args","selectable","toDateString","role","onMouseEnter","onMouseLeave","bind","setOffset","props","ComponentCalendar","children","unwrapChildrenForPreact","render"],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
interface DateAdapter<T = any> {
|
|
2
|
+
date(value?: any): T;
|
|
3
|
+
add(date: T, amount: number, unit: 'day' | 'month' | 'year'): T;
|
|
4
|
+
subtract(date: T, amount: number, unit: 'day' | 'month' | 'year'): T;
|
|
5
|
+
startOf(date: T, unit: 'day' | 'month' | 'year'): T;
|
|
6
|
+
endOf(date: T, unit: 'day' | 'month' | 'year'): T;
|
|
7
|
+
isBefore(date: T, comparison: T, unit?: 'day' | 'month' | 'year'): boolean;
|
|
8
|
+
isAfter(date: T, comparison: T, unit?: 'day' | 'month' | 'year'): boolean;
|
|
9
|
+
isSame(date: T, comparison: T, unit?: 'day' | 'month' | 'year'): boolean;
|
|
10
|
+
set(date: T, unit: 'day' | 'month' | 'year', value: number): T;
|
|
11
|
+
get(date: T, unit: 'day' | 'month' | 'year'): number;
|
|
12
|
+
format(date: T, formatStr: string, locale?: string): string;
|
|
13
|
+
getDaysInMonth(date: T): number;
|
|
14
|
+
toDate(date: T): Date;
|
|
15
|
+
diff(date: T, comparison: T, unit: 'month' | 'year'): number;
|
|
16
|
+
getMonths(locale?: string): string[];
|
|
17
|
+
getWeekdays(locale?: string): string[];
|
|
18
|
+
}
|
|
19
|
+
interface DateObj {
|
|
20
|
+
date: Date;
|
|
21
|
+
selected: boolean;
|
|
22
|
+
selectable: boolean;
|
|
23
|
+
today: boolean;
|
|
24
|
+
prevMonth: boolean;
|
|
25
|
+
nextMonth: boolean;
|
|
26
|
+
isRangeStart?: boolean;
|
|
27
|
+
isRangeEnd?: boolean;
|
|
28
|
+
isRangeBetween?: boolean;
|
|
29
|
+
isRangeHovering?: boolean;
|
|
30
|
+
modifiers?: string[];
|
|
31
|
+
}
|
|
32
|
+
interface Calendar {
|
|
33
|
+
firstDayOfMonth: Date;
|
|
34
|
+
lastDayOfMonth: Date;
|
|
35
|
+
month: number;
|
|
36
|
+
year: number;
|
|
37
|
+
weeks: (DateObj | null)[][];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
declare function composeEventHandlers(...fns: Array<((event: any, ...args: unknown[]) => void) | undefined>): (event: any, ...args: unknown[]) => boolean;
|
|
41
|
+
declare function unwrapChildrenForPreact<T>(arg: T | T[]): T | typeof noop;
|
|
42
|
+
declare function noop(): void;
|
|
43
|
+
declare function subtractMonth({ calendars, offset, minDate, adapter }: {
|
|
44
|
+
calendars: Calendar[];
|
|
45
|
+
offset: number;
|
|
46
|
+
minDate?: Date;
|
|
47
|
+
adapter?: DateAdapter;
|
|
48
|
+
}): number;
|
|
49
|
+
declare function addMonth({ calendars, offset, maxDate, adapter }: {
|
|
50
|
+
calendars: Calendar[];
|
|
51
|
+
offset: number;
|
|
52
|
+
maxDate?: Date;
|
|
53
|
+
adapter?: DateAdapter;
|
|
54
|
+
}): number;
|
|
55
|
+
declare function isBackDisabled({ calendars, minDate, adapter }: {
|
|
56
|
+
calendars: Calendar[];
|
|
57
|
+
minDate?: Date;
|
|
58
|
+
adapter?: DateAdapter;
|
|
59
|
+
}): boolean;
|
|
60
|
+
declare function isForwardDisabled({ calendars, maxDate, adapter }: {
|
|
61
|
+
calendars: Calendar[];
|
|
62
|
+
maxDate?: Date;
|
|
63
|
+
adapter?: DateAdapter;
|
|
64
|
+
}): boolean;
|
|
65
|
+
declare function getCalendars({ date, selected, disabledDates, monthsToDisplay, offset, minDate, maxDate, firstDayOfWeek, showOutsideDays, adapter, selectionMode, modifiers, hoveredDate }: {
|
|
66
|
+
date: Date;
|
|
67
|
+
selected?: Date | Date[] | {
|
|
68
|
+
start?: Date;
|
|
69
|
+
end?: Date;
|
|
70
|
+
};
|
|
71
|
+
disabledDates?: Date[];
|
|
72
|
+
modifiers?: Record<string, (date: Date) => boolean>;
|
|
73
|
+
monthsToDisplay: number;
|
|
74
|
+
offset: number;
|
|
75
|
+
minDate?: Date;
|
|
76
|
+
maxDate?: Date;
|
|
77
|
+
firstDayOfWeek: number;
|
|
78
|
+
showOutsideDays: boolean;
|
|
79
|
+
adapter?: DateAdapter;
|
|
80
|
+
selectionMode?: 'single' | 'range' | 'multiple';
|
|
81
|
+
hoveredDate?: Date;
|
|
82
|
+
}): Calendar[];
|
|
83
|
+
|
|
84
|
+
export { addMonth, composeEventHandlers, getCalendars, isBackDisabled, isForwardDisabled, subtractMonth, unwrapChildrenForPreact };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:!0});var e=require("dayjs"),t=require("dayjs/plugin/isBetween"),a=require("dayjs/plugin/customParseFormat"),r=require("dayjs/plugin/localeData");function d(e){return e&&e.__esModule?e:{default:e}}var n=d(e),s=d(t),o=d(a),i=d(r);n.default.extend(s.default),n.default.extend(o.default),n.default.extend(i.default);let u=new class{date(e){return n.default(e)}add(e,t,a){return e.add(t,a)}subtract(e,t,a){return e.subtract(t,a)}startOf(e,t){return e.startOf(t)}endOf(e,t){return e.endOf(t)}isBefore(e,t,a){return e.isBefore(t,a)}isAfter(e,t,a){return e.isAfter(t,a)}isSame(e,t,a){return e.isSame(t,a)}set(e,t,a){return"day"===t?e.date(a):e.set(t,a)}get(e,t){return"day"===t?e.date():e.get(t)}format(e,t,a){return a?e.locale(a).format(t):e.format(t)}getDaysInMonth(e){return e.daysInMonth()}toDate(e){return e.toDate()}diff(e,t,a){return e.diff(t,a)}getMonths(e){return e?n.default().locale(e).localeData().months():n.default.localeData().months()}getWeekdays(e){return e?n.default().locale(e).localeData().weekdaysShort().map(e=>e.toUpperCase()):n.default.localeData().weekdaysShort().map(e=>e.toUpperCase())}};function f(){}function l(e,t,a,r,d,n,s,o,i=!1,u){var f,y,c,h,m;let p,g,D,S,{selected:A,isRangeStart:B,isRangeEnd:x,isRangeBetween:v,isRangeHovering:M}=function(e,t,a,r,d){if(!e&&!d)return{selected:!1};let n=a.date(t);if("single"===r&&e instanceof Date)return{selected:a.isSame(n,a.date(e),"day")};if("multiple"===r&&Array.isArray(e))return{selected:e.some(e=>a.isSame(n,a.date(e),"day"))};if("range"===r){let{start:t,end:r}=e&&"object"==typeof e&&!Array.isArray(e)?e:{start:void 0,end:void 0},s=!!t&&a.isSame(n,a.date(t),"day"),o=!!r&&a.isSame(n,a.date(r),"day"),i=!!t&&!!r&&a.isAfter(n,a.date(t),"day")&&a.isBefore(n,a.date(r),"day"),u=!1;if(t&&!r&&d){let e=a.date(d),r=a.date(t);a.isAfter(e,r,"day")?(u=a.isAfter(n,r,"day")&&a.isBefore(n,e,"day")||a.isSame(n,e,"day"),a.isSame(n,e,"day")&&(o=!0)):a.isBefore(e,r,"day")&&(u=a.isAfter(n,e,"day")&&a.isBefore(n,r,"day")||a.isSame(n,e,"day"),a.isSame(n,e,"day")&&(s=!0),a.isSame(n,r,"day")&&(s=!1,o=!0))}return{selected:s||o||i,isRangeStart:s,isRangeEnd:o,isRangeBetween:i,isRangeHovering:u}}return Array.isArray(e)&&1===e.length&&"single"===r?{selected:a.isSame(n,a.date(e[0]),"day")}:{selected:!1}}(t,e,s,o,u),O=s.isSame(s.date(e),s.date(),"day"),b=i&&s.isBefore(s.date(e),s.startOf(s.date(e),"month")),w=i&&s.isAfter(s.date(e),s.endOf(s.date(e),"month")),j=r?Object.keys(r).filter(t=>r[t](e)):[];return O&&j.push("today"),i&&j.push("outside"),b&&j.push("prev-month"),w&&j.push("next-month"),{date:e,selected:A,modifiers:j,selectable:(f=d,y=n,c=a,h=e,p=(m=s).date(h),g=f&&m.isBefore(p,m.date(f),"day"),D=y&&m.isAfter(p,m.date(y),"day"),S=null==c?void 0:c.some(e=>m.isSame(p,m.date(e),"day")),!g&&!D&&!S),today:O,prevMonth:b,nextMonth:w,isRangeStart:B,isRangeEnd:x,isRangeBetween:v,isRangeHovering:M}}exports.addMonth=function({calendars:e,offset:t,maxDate:a,adapter:r=u}){if(t>1&&a){let{lastDayOfMonth:d}=e[e.length-1],n=r.diff(r.date(a),r.date(d),"month");n<t&&(t=n)}return t},exports.composeEventHandlers=function(...e){return(t,...a)=>e.some(e=>(e&&e(t,...a),t.defaultPrevented))},exports.getCalendars=function({date:e,selected:t,disabledDates:a,monthsToDisplay:r,offset:d,minDate:n,maxDate:s,firstDayOfWeek:o,showOutsideDays:i,adapter:f=u,selectionMode:y="single",modifiers:c,hoveredDate:h}){let m=[],p=function(e,t,a,r=u){let d=r.startOf(r.date(e),"day");if(t){let e=r.startOf(r.date(t),"day");r.isBefore(d,e)&&(d=e)}if(a){let e=r.startOf(r.date(a),"day");r.isBefore(e,d)&&(d=e)}return d}(e,n,s,f);for(let e=0;e<r;e++){let r=function({month:e,year:t,selectedDates:a,disabledDates:r,modifiers:d,minDate:n,maxDate:s,firstDayOfWeek:o,showOutsideDays:i,adapter:u,selectionMode:f,hoveredDate:y}){let c=u.set(u.set(u.date(),"year",t),"month",e);e=u.get(c,"month"),t=u.get(c,"year");let h=u.getDaysInMonth(c),m=[];for(let e=1;e<=h;e++){let t=l(u.toDate(u.set(c,"day",e)),a,r,d,n,s,u,f,!1,y);m.push(t)}let p=u.toDate(u.startOf(c,"month")),g=u.toDate(u.endOf(c,"month")),D=function({firstDayOfMonth:e,minDate:t,maxDate:a,selectedDates:r,disabledDates:d,modifiers:n,firstDayOfWeek:s,showOutsideDays:o,adapter:i,selectionMode:u,hoveredDate:f}){let y=[],c=(i.toDate(i.date(e)).getDay()+7-s)%7;if(o){let s=i.subtract(i.date(e),1,"day");for(let e=0;e<c;e++){let e=l(i.toDate(s),r,d,n,t,a,i,u,!0,f);e.prevMonth=!0,y.unshift(e),s=i.subtract(s,1,"day")}}else for(;c>0;)y.unshift(null),c--;return y}({firstDayOfMonth:p,minDate:n,maxDate:s,selectedDates:a,disabledDates:r,modifiers:d,firstDayOfWeek:o,showOutsideDays:i,adapter:u,selectionMode:f,hoveredDate:y}),S=function({lastDayOfMonth:e,minDate:t,maxDate:a,selectedDates:r,disabledDates:d,modifiers:n,firstDayOfWeek:s,showOutsideDays:o,adapter:i,selectionMode:u,hoveredDate:f}){let y=[],c=(i.toDate(i.date(e)).getDay()+7-s)%7;if(o){let s=i.add(i.date(e),1,"day");for(let e=0;e<6-c;e++){let e=l(i.toDate(s),r,d,n,t,a,i,u,!0,f);e.nextMonth=!0,y.push(e),s=i.add(s,1,"day")}}else for(;c<6;)y.push(null),c++;return y}({lastDayOfMonth:g,minDate:n,maxDate:s,selectedDates:a,disabledDates:r,modifiers:d,firstDayOfWeek:o,showOutsideDays:i,adapter:u,selectionMode:f,hoveredDate:y});return m.unshift(...D),m.push(...S),{firstDayOfMonth:p,lastDayOfMonth:g,month:e,year:t,weeks:function(e){let t=Math.ceil(e.length/7),a=[];for(let r=0;r<t;r++){a[r]=[];for(let t=0;t<7;t++)a[r].push(e[7*r+t])}return a}(m)}}({month:f.get(p,"month")+e+d,year:f.get(p,"year"),selectedDates:t,disabledDates:a,modifiers:c,minDate:n,maxDate:s,firstDayOfWeek:o,showOutsideDays:i,adapter:f,selectionMode:y,hoveredDate:h});m.push(r)}return m},exports.isBackDisabled=function({calendars:e,minDate:t,adapter:a=u}){if(!t)return!1;let{firstDayOfMonth:r}=e[0],d=a.subtract(a.date(r),1,"day");return a.isBefore(d,a.date(t))},exports.isForwardDisabled=function({calendars:e,maxDate:t,adapter:a=u}){if(!t)return!1;let{lastDayOfMonth:r}=e[e.length-1],d=a.add(a.date(r),1,"day");return a.isBefore(a.date(t),d)},exports.subtractMonth=function({calendars:e,offset:t,minDate:a,adapter:r=u}){if(t>1&&a){let{firstDayOfMonth:d}=e[0],n=r.diff(r.date(d),r.date(a),"month");n<t&&(t=n)}return t},exports.unwrapChildrenForPreact=function(e){return(e=Array.isArray(e)?e[0]:e)||f};
|
|
2
|
+
//# sourceMappingURL=utils.js.map
|